结对编程-第9小组

1、Fork仓库的Github项目地址:

https://github.com/linlkg/PairProject2018

2、预估各个模块开发耗费的时间:

PSP2.1 PersonalSoftware Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 20
-Estimate -估计这个任务需要多少时间 20 20
Development 开发 230 303
-Analysis -需求分析(包括学习新技术) 20 25
-Design Spec -生成设计文档 20 25
-Design Review -设计复审(和同事审核设计文档) 5 8
-Coding Standard -代码规范(为目前的开发制定合适的规范) 10 10
-Design -具体设计 25 25
-Coding -具体编码 120 150
-Test -测试(自我测试,修改代码,提交修改) 30 60
Reporting 报告 80 105
-Test Report -测试报告 20 20
-Size Measurement -计算工作量 30 35
-Postmortem&Process Improvement Plan -事后分析,并提出过程改进计划 30 50
- 合计 330 428

3、计算模块接口的设计与实现过程:

-第一步:相关类设计

  • 读取输入输出文件类IOfile用于定义用户输入/输出的文件名和路径;

  • 单词类Word用于存储单词提取以及单词词频统计;

  • 词组类Phrase用于存储词组提取以及词组频度;

  • 接口类UserInterface用于存储用户输入的参数值;

  • 相关类图如下:

  • 第二步:相关操作函数

    • 提取单词函数getWord()用于根据分隔符将文件流中的单词提取出来并存储;
    • 统计单词频率函数countWord();
    • 排序输出单词频度函数sortWordOutput();
    • 提取指定长度词组getPhrase();
    • 统计词组频率函数countPhrase();
    • 排序输出词组频度函数sortPhraseOutput();

4、计算模块接口部分性能改进

-性能分析图(由VS 2017/JProfiler的性能分析工具自动生成)


5、计算模块部分测试结果

输入文件为群里分享的测试文件bible-kjv.txt

6、计算模块部分异常处理说明

读文件时若读取文件失败则抛异常
//读入用户写好的TXT文件,
//尝试读取文件,若失败catch到异常并打印出来

try {
File file = new File(args[0]);
Scanner input = new Scanner(file);
String path = input.next();
List<String> wordArray = new ArrayList<String>();
int countChar=0;
int countWord=0;
int counLine=0;
InputStreamReader reader = new InputStreamReader(new FileInputStream(args[0])); // 建立一个输入流对象reader
BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
}catch (Exception e){
e.printStackTrace();
}

7、关键代码分析

//统计行数
一行一行读入文件,所以每行读入次数加一,但要注意去除空白行
再将分割好的单词与正则表达式匹配以便统计词频

//单词的词频统计
如果已有相同的单词,则词频加1
否则创建一个<key,value>以保存新的单词

//按value的大小进行排序并输出词频最高的前十个
按字典序大小进行排序,当结果少于10个时全部输出,当结果多于10个时输出前10个结果

8、描述结对的过程

结对体会:

  • 结对中汪璟玢充当领航员(Navigator)角色,林静充当驾驶员(Driver)角色。先是一起讨论做了大体类的设计和算法流程设计,接着林静就开始编程。两个人编程还是比一个人来的效率高些,有问题一起讨论,错误也第一时间被指出,特别是一开始的讨论,就先定义和封装了几个要用到的函数,避免了后期推翻修改,提高了开发效率。不过缺点也是有的,就是一个人在编程的时候,另一个人不好打扰,默默滴看,后面发现没有完全按照领航员的设计来实现。函数没有完全按照预期抽象出来,导致效能分析处有问题!设计当中的接口和新增功能未实现,但类图当中的设计将其抽象出来方便了后续的代码优化。
  • 这次的体会真的很深,实打实的结对,两人分工合作完成一个看似不难的任务,实际执行过程中还是遇到不少困难,结对的最大好处就在此处体现:在遇到困难的时候总是可以通过提醒和讨论解决之!
  • 两个人的合作总是胜过一个人埋头苦写代码的,通过两个人结对的交流和探讨,会比平常一个人设计节约了不少的时间。由于生疏在百度许多东西的写法上耽误了不少时间,导致进度有些被拖慢。领航员在这个过程中一直提醒着注意要点,把控整个程序的质量。但林静自我反思在这次结对当中存在的许多不足,编程能力的不足导致没有很好地实现“领航员”设计出来的实现方案,望以后更加努力,才能更好地结对编程出理想的作品!
posted @ 2018-07-09 23:22  林逗号  阅读(279)  评论(1编辑  收藏  举报