zoukankan      html  css  js  c++  java
  • 结对编程-第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)角色。先是一起讨论做了大体类的设计和算法流程设计,接着林静就开始编程。两个人编程还是比一个人来的效率高些,有问题一起讨论,错误也第一时间被指出,特别是一开始的讨论,就先定义和封装了几个要用到的函数,避免了后期推翻修改,提高了开发效率。不过缺点也是有的,就是一个人在编程的时候,另一个人不好打扰,默默滴看,后面发现没有完全按照领航员的设计来实现。函数没有完全按照预期抽象出来,导致效能分析处有问题!设计当中的接口和新增功能未实现,但类图当中的设计将其抽象出来方便了后续的代码优化。
    • 这次的体会真的很深,实打实的结对,两人分工合作完成一个看似不难的任务,实际执行过程中还是遇到不少困难,结对的最大好处就在此处体现:在遇到困难的时候总是可以通过提醒和讨论解决之!
    • 两个人的合作总是胜过一个人埋头苦写代码的,通过两个人结对的交流和探讨,会比平常一个人设计节约了不少的时间。由于生疏在百度许多东西的写法上耽误了不少时间,导致进度有些被拖慢。领航员在这个过程中一直提醒着注意要点,把控整个程序的质量。但林静自我反思在这次结对当中存在的许多不足,编程能力的不足导致没有很好地实现“领航员”设计出来的实现方案,望以后更加努力,才能更好地结对编程出理想的作品!
  • 相关阅读:
    winform 计算器
    ajax无刷新上传图片
    Dapper的基本使用
    补充1
    Ajax2
    Ajax1
    jQuery2
    Select查询语句2
    jQuery1
    分页与组合查询
  • 原文地址:https://www.cnblogs.com/linlkg/p/9286543.html
Copyright © 2011-2022 走看看