结对作业——WordCount进阶版

1.作业地址及结对伙伴

3.结对PSP表格

PSP2.1个人开发流程预估耗费时间(分钟)实际耗费时间(分钟)
Planning计划6075
· Estimate明确需求和其他相关因素,估计每个阶段的时间成本6075
Development开发700960
· Analysis需求分析 (包括学习新技术)100120
· Design Spec生成设计文档6065
· Design Review设计复审3045
· Coding Standard代码规范3060
· Design具体设计60100
· Coding具体编码300420
· Code Review代码复审6080
· Test测试(自我测试,修改代码,提交修改)6070
Reporting报告100140
·测试报告4560
·计算工作量2530
·并提出过程改进计划3050

3.解题思路

  1. 本次程序要求基本同上一次类似,但在上一次的基础上新增以下内容:输出排名前n的单词的数量;输入参数格式;对词组进行统计;根据参数将统计结果输出到文件;
  2. 输出排名前n的单词的数量:这一要求可以通过将参数中的该部分数值取出,加入for循环中即可,但需考虑不同单词数若低于这一指定值的情况。
  3. 输入参数格式:对于输入参数,分析过后发现无非就是一个指令后再跟着一个参数值,不同种指令之间有固定的模式,去除WordCount.exe后,正确的参数的长度只有4和6两种,指令只有“-n/-m/-i/-o”四种且都为“-n/-m”开头,出于实现便利的考虑,设置为“-n/-m”不同时出现,"-o"则自主决定是否跟在参数尾,分析过后这样对于参数的判断就比较简单了。
  4. 对词组进行统计:词组的获取方式利用将单词按指定个数筛选拼接为一个长字符串,再按类似处理单词的方法进行统计,难以实现的是若要判断以非空格符分割的前后单词不能拼接为词组,考虑可以将字符也存入数组,在拼接的时候进行字符判断决定是否拼接。
  5. 根据参数将统计结果输出到文件:前面第3点提到了“-o”自主决定是否跟在参数尾,若有该参数,则将统计结果写入文件,无该参数则不写。写入文件该部分也较为简单。

4.设计实现过程

  1. 后台Servlet在编写时,主要设计为Main类与FileDeal两个类,Main类主要涉及一部分参数的筛选,并决定执行调用FileDeal类的什么方法。
  2. FileDeal类中包含了FileDeal()构造方法,用于一部分参数的设定;FileNotExist()向前端界面输出报错信息;getConnection()建立与文件的连接;getChars()获取字符总数;getLines()获取行数;getWords()获取单词数;getWordsSort()统计单词出现次数并排序;getGroups()统计词组出现次数并排序;wordstoString()输出单词统计结果,并写入文件;groupstoString()输出词组统计结果,并写入文件。
  3. 本次实验是结对编程,且要求有GUI界面,因此分工时我负责Servlet的主要功能实现,编写完后交由贾海涛负责前端界面交互以及将servlet的Java代码修改为能输出与读取前端内容的代码,并对整合后的代码逻辑进行判断调整。完成后再协同进行数据测试,对整体逻辑再判断,减少一部分冗余代码,增强容错性。

5.代码说明及测试

1. 代码说明

1. JSP代码
  • JSP界面简单设置了一个表单,用于输入参数。
    1121053-20181007131342140-1820248506.png
2. go代码
  • go代码部分即为编写代码时的Main函数,该部分重写doGet()方法,也包含了一部分筛选参数的语句,根据不同筛选结果将表单参数传递至后台交由Servlet的相应函数进行处理,。
    1121053-20181007134139740-1315662979.png
    1121053-20181007131632627-460369404.png
3. FileDeal代码
  • getConnection()方法实现与文件建立连接
    1121053-20181007132048858-1902052732.png
  • getWordsSort()方法通过映射(Map)比较器实现对文件中单词的统计及排序,结果返回一个包含键值对的数组infoIds
    1121053-20181007132056489-1208402297.png
    1121053-20181007132100086-1625481579.png
  • wordstoString()方法获取上一步获得的infoIds数组,按照格式将结果输出反馈至前台,并根据是否给定“-o”参数决定是否将统计结果输出到文件中。
    1121053-20181007132102883-2027827638.png
  • getGroups()处理词组的方法与其他的方法等基本与处理单词的类似,此处不再贴代码及阐述。

2. 单元测试

  • 运行index.jsp时的输入界面
    1121053-20181007155431742-179395936.png

  • 输入参数测试
    • 含无法识别指令(-r为例):-m 10 -r d:\1.txt-n 10 -r d:\1.txt
      1121053-20181007105831002-1882916011.png

    • 无可识别指令参数(-n/-m):10 3 d:\1.txt
      1121053-20181007110626703-375759536.png

    • 参数不完整(-o后缺失):-n 10 -i d:\1.txt -o-m 3 -i d:\1.txt -o
      1121053-20181007110631307-1478785453.png

    • 参数数值小于0:-n -2 -i d:\1.txt-m -3 -i d:\1.txt
      1121053-20181007111023407-950539870.png

    • 指定文件不存在:-n 10 -i d:\d.txt
      1121053-20181007110639125-2032802283.png

    • 一次传入多个指令(-n/-m):-n 10 -m 3 -i d:\1.txt -o d:\output.txt
      1121053-20181007110654171-1429648075.png

    • 正确参数:-n 10 -i d:\1.txt-m 3 -i d:\1.txt-n 10 -i d:\1.txt -o d:\output.txt-m 3 -i d:\1.txt -o d:\output.txt。(注:由于单词判断条件为前四个为字母,所以当选定词组长度为1时,输出的结果与单词统计结果不一致)
      1121053-20181007110659928-1972341546.png1121053-20181007110703473-1588614839.png

  • 文件数据测试

    • 英文文件
      1121053-20181007112312717-883141517.png1121053-20181007112317856-596493574.png

    • 纯中文文件
      1121053-20181007112540756-466641997.png

    • 空白文件
      1121053-20181007112536358-1894620987.png

3. 回归测试

  • 注:单元测试数据已经使用了上一次的测试用例并在此基础上增加了其他的测试用例,所以回归测试结果已在单元测试中。

4. 覆盖率测试

  1. 参数为-n 10 -i d:\1.txt -o d:\output.txt,正常执行并输出到文件时。
    1121053-20181007124439639-1242907322.png

  2. 参数为-m 3 -i d:\1.txt -o d:\output.txt,正常执行并输出到文件时。
    1121053-20181007124446328-1765274353.png

  3. 参数为10 3 d:\1.txt,错误参数不通过时。
    1121053-20181007124452018-1086619522.png

6.结对感受

1. 本次结对感觉优劣并存
  • 优点
    • 工作量:结对有一定的分工,明确各自的任务后,工作量会少很多,比一个人写全部要轻松一些。
    • 代码规范:结对编程时可以一定程度上改善自己对于代码规范的问题,虽然可能最终也并不是很规范。
    • 问题分析:"一千个读者就有一千个哈姆雷特"。对待同一个问题,不同的人有不同的见解,结对编程分析问题时,就会有不同的考虑问题解决问题的方式,就不像单人那样过于闭塞,有多个不同的解决方案的时候就有选择的余地,队友也可以从其他的角度指出自己的方案是否存在不足。遇到自己解决不了的问题时,可能队友就是一盏明灯。
  • 缺点
    • 代码规范:队友之间的编程习惯不同,阅读上有时会有一定难度,不理解的话就不好下手写自己的部分。
    • 问题分析:分析问题各执己见时,容易陷入两难境地。

转载于:https://www.cnblogs.com/Fogram-c/p/9749501.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值