作业地址:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/2879

GIT仓库地址:https://github.com/MarkarovZ/WordCount.git

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 10  15

· Estimate

· 估计这个任务需要多少时间

 120  140

Development

开发

 100 120

· Analysis

· 需求分析 (包括学习新技术)

 10  5

· Design Spec

· 生成设计文档

 0  0

· Design Review

· 设计复审 (和同事审核设计文档)

 0  0

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 10  30

· Design

· 具体设计

 15  15

· Coding

· 具体编码

 45 45

· Code Review

· 代码复审

 10  5

· Test

· 测试(自我测试,修改代码,提交修改)

 10  20

Reporting

报告

 20  20

· Test Report

· 测试报告

 10  10

· Size Measurement

· 计算工作量

 5  5

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 5  5
 

合计

 120  140

一、开始前的讨论

因为大一的时候写过类似的检测txt文本内容并进行分类的程序,这次讨论很快就把任务定下来了,并开始着手开始开发。

我负责代码的编写和功能实现,宋杰同学负责复审与测试。

这个作业要求内容不多,也就没去查或者学习什么新能力。

二、设计部分:

以下是代码设计图:

我并没有把对行、字符与单词以及词组的检索计数分开,因为这几个任务可以在一次遍历内完成,如果分成几个单独的函数的话,反而会因为多次重复遍历增加时间上的开销。但这样就造成了主要功能函数MainCount的圈复杂度高,可维护性低,可扩展性低。不同功能之间的耦合度高,所以要改写成带图形界面的窗口程序的话,需要重构该函数。

三、实际编码部分:

/// <summary>/// 对字符、单词、行计数/// </summary>void MainCount(){int wordJudge = 0;//单词长度标记int MutiWords = 0;//判断目前是否为词组记录状态的标志变量int MutiWordsJudge = 0;//词组长度标记bool isWord = true;string _word = "";foreach (var str in Lines){int lineJudge = 0;foreach (var word in str){//判断当前检测字符是否为空if (word != ' '){lineJudge++;characters++;//判断当前是否为单词检测状态,判断当前检测字符是否为字母if ((isWord == true) && (((word >= 65) && (word <= 90)) || ((word >= 97) && (word <= 122))))//判断是否为字母内容
                        {wordJudge++;_word = _word + word;}else{//切换至非单词状态if (wordJudge == 0){isWord = false;MutiWords++;}else{//判断当前是否为单词数字后缀if ((wordJudge >= 4) && ((word >= 48) && (word <= 57))){_word = _word + word;}else{//判断是否已经构成单词if (wordJudge >= 4){WordAdd(_word);wordJudge = 0;_word = "";}//结束当前判断周期,重新切换至单词检测状态else{wordJudge = 0;_word = "";isWord = true;MutiWords = 0;}}}}}else{MutiWordsJudge++;//检测到空字符时结束当前判断周期,开启新周期isWord = true;MutiWords = 0;//判断当前检测结果是否构成单词if (wordJudge >= 4){WordAdd(_word);wordJudge = 0;_word = "";}else{MutiWords++;wordJudge = 0;_word = "";MutiWordsJudge = 0;}if ((MutiWords == 0) && (MutiWordsJudge == number)){MutiWordsAdd();MutiWordsJudge = 0;}}}//在行末判断是否已构成单词if (wordJudge >= 4){WordAdd(_word);wordJudge = 0;_word = "";if ((MutiWords == 0) && (MutiWordsJudge == number - 1)){MutiWordsAdd();MutiWordsJudge = 0;}}//判断当前行是否为有效行if (lineJudge != 0){lines++;}}}

核心检索代码

以下是运行截图

四、测试部分

从性能分析的结果上来看,负责输出部分的函数占用时间都比主要功能算法多,输出部分的时间开销基本都在对要输出结果的遍历上,目前我没想到有什么能优化的地方。

[TestMethod]public void TestMethod1(){string l_path = "E:/开发内容/1.txt";string r_path = "E:/开发内容/2.txt";int num = 5;int outNum = 3;Program program = new Program();program.TestMethod(l_path, r_path, num, outNum);var res = Program.program;Assert.AreEqual(9656, res.characters);Assert.AreEqual(15, res.lines);}

单元测试

在单元测试中宋杰同学对检索的有效行数目以及有效字符数进行了断言测试,测试结果正常。

五、总结

我有在编码过程中每结束一个小模块的编写,就进行测试检验的习惯,所以在后面宋杰同学复测的时候并没有遇到什么严重错误,运行时一次过的,但发现了几个没怎么遍历或者遍历不到的分支,也在随后进行了修正。

具体的改动过程,体现在几次对仓库的上传更新中。这次作业锻炼了和他人协同开发的能力,也发现了对于统一编码规范的重要性(一开始我看不懂他的,他看不懂我的T-T)。

转载于:https://www.cnblogs.com/MarkarovZ/p/10633878.html

第三次作业_201731062533相关推荐

  1. OO第三单元作业总结

    OO第三次作业总结 一.JML (一)JML语言理论基础 (1)JML表达式: JML表达式包括以下几种: 原子表达式如\result(方法执行后的返回值).\old(表达式在相应方法执行前的取值): ...

  2. 程序设计第三次作业附加 代码规范

    题目:第三次作业附加 myGithub 我的程序设计第三次作业 Calculator.h //==============================// //文件名称:calculator.h ...

  3. JML规格编程——BUAA OO第三单元作业总结

    整体概述 这个单元整体围绕Java Model Language(JML)展开,通过学习JML规格了解契约式编程的过程,课上实验中进行了JML规格的简要编写,课下实验主要通过阅读规格并按照规格的要求正 ...

  4. 2021年人工神经网络第三次作业-第二题:遗传算法与人工神经网络-参考答案

    简 介: 给出了对于BP网络求解异或问题过程中,利用遗传算法完成网络演变的过程.所使用的遗传算法是最基本的遗传算法.利用遗传算法对于网络的系数进行演变,可以对网络系数初始化过程进行优化.对于不同的遗传 ...

  5. 2021年春季学期-信号与系统-第三次作业参考答案-第十一道题

    本文是 2021年春季学期-信号与系统-第三次作业参考答案 中的参考答案. ▌第十一道题 11. 如果已知系统的输入输出关系可以使用二阶常系数 差分方程来描述.如果相应输入为:x[n]=u[n]x\l ...

  6. 2021年春季学期-信号与系统-第三次作业参考答案-第十道题

    本文是 2021年春季学期-信号与系统-第三次作业参考答案 中的参考答案. ▌第十道题 10. 求解差分方程: (1)第一小题 y[n]=−5y[n−1]+ny\left[ n \right] = - ...

  7. 2021年春季学期-信号与系统-第三次作业参考答案-第九道题

    本文是 2021年春季学期-信号与系统-第三次作业参考答案 中的参考答案. ▌第九道题 9. 已知因果线性时不变系统的输入输出之间的微分方程为: ddty(t)+5y(t)=∫−∞∞x(τ)f(t−τ ...

  8. 2021年春季学期-信号与系统-第三次作业参考答案-第八道题

    本文是 2021年春季学期-信号与系统-第三次作业参考答案 中的参考答案. ▌第八道题 8. 某LTI系统,输入信号e(t)=2e−3tu(t)e\left( t \right) = 2e^{ - 3 ...

  9. 2021年春季学期-信号与系统-第三次作业参考答案-第七道题

    本文是 2021年春季学期-信号与系统-第三次作业参考答案 中的参考答案. ▌第七道题 7.有一系统对激励e1(t)=u(t)e_1 \left( t \right) = u\left( t \rig ...

  10. 2021年春季学期-信号与系统-第三次作业参考答案-第六道题

    本文是 2021年春季学期-信号与系统-第三次作业参考答案 中的参考答案. ▌第六道题 6.给定系统微分方程: 若激励信号和起始状态为以下两种情况: (1) e(t)=u(t),r(0−)=2,r′( ...

最新文章

  1. Redis的这些拓展方案
  2. 访问者模式的java语言_Java 设计模式 之 访问者模式
  3. linux 命令窍门,不容错过的Linux命令行窍门
  4. android之在view中内嵌浏览器的方法
  5. jquery实现点击某元素之外触发事件
  6. 解压软件Bandizip Archiver for mac
  7. ef 子表和父表不同时保存_canon粉不懂镜头参数?我只能嘲笑你
  8. Qt实战笔记-从零开始搭建一套库存管理系统-(一)准备工作
  9. 智能汽车领域的开源软件供应链安全检测工具分享
  10. zigbeelibrary.jar的使用
  11. VMware vSphere 7 vCenter 7 ESXi 7 正式版 免费下载
  12. 计算机视觉领域的一些牛人博客,超有实力的研究机构web主页
  13. 思科模拟器叫什么_思科在过30年都证明了自己一直都是全球第一的网络公司
  14. 企业邮箱邮件的服务器地址是什么?企业邮箱服务器出错怎么办?
  15. 宝藏又小众的灯罩VRay材质球素材网站分享
  16. 【科普】浅谈NB-IoT
  17. docker运行portainer
  18. 大数据岗位薪资了解一下~
  19. 愚(鱼)人节到啦!CRI鱼人语制作小讲堂开班!
  20. 第一章 强化学习介绍

热门文章

  1. 拓端tecdat|R语言乘法GARCH模型对高频交易数据进行波动性预测
  2. centos 并发请求数_jmeter 实战分析并发、RPS、RT 公式换算
  3. Linux清理cache
  4. 全国各地收货详细地址_2020高考成绩在哪里查询 2020全国各地高考分数查询时间地址最新...
  5. The remote system refused the connection.
  6. 标准机器学习数据集的最佳结果
  7. 20170917软件工程师在线笔试之员工点外卖问题
  8. MongoDB数据库学习
  9. 面试必会 InnoDB的多版本并发控制(MVCC)
  10. acm怎么提交java程序_acm提交java