软工网络16个人作业2

1、码云项目地址

个人码云地址:https://gitee.com/NiBiWoWuLiao/PersonalProject-Java/tree/master/

2、个人的PSP表格。

PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间(分钟)
Planning 计划 30 25
· Estimate 明确需求和其他相关因素,估计每个阶段的时间成本 10 20
Development 开发 200 270
· Analysis 需求分析 (包括学习新技术) 20 30
· Design Spec 生成设计文档 10 15
· Design Review 设计复审 10 45
· Coding Standard 代码规范 30 40
· Design 具体设计 30 50
· Coding 具体编码 150 220
· Code Review 代码复审 10 15
· Test 测试(自我测试,修改代码,提交修改) 30 60
Reporting 报告 60 80
· 测试报告 30 30
· 计算工作量 30 25
· 并提出过程改进计划 30 20

3. 计算模块接口的设计与实现过程。

由于这道题是用来统计文本中字符,那我就先实现统计文本行数和统计字符数量和单词个数,行数就采用readline()函数判断进行加一操作。由于字符是不考虑汉字的,就需要判断该字符的ascii码是不是在[32-126]区间内,还需要考虑换行(ascii码为10进行),然后统计单词总数就按照分隔符空格以及非字母数字符号分割,还需要考虑开头是不是数字,就要用到正则表达式。对单词进行词频统计我选择用map来存放单词跟单词出现的次数。

相关函数操作:

  • sortWord()函数用于统计词频并排序

          String s = lists.get(i).toLowerCase();//忽略大小写
          if (!treeMap.containsKey(s)) {
              //不存在
              treeMap.put(s, 1);
          } else {
              //已经存在
              int n = treeMap.get(s);
              treeMap.put(s, n + 1);
          }
  • charCount()函数用于统计字符数

      while ((getchar = br.read()) != -1) {
          //忽略汉字,换行也算字符(ascii码为10),数字字母符号的ascii码在32-126
          if (getchar > 31 && getchar < 127 || getchar == 10) {
              charNum++;
          }
      }
  • wordCount()函数用于统计单词数,当读取的一行不为空则为有效行

      while (str != null) {//统计有效行的字符
          String wordsArr[] = str.split("\\s*[^0-9a-zA-Z]+");//根据分隔符为数字字母以外的存放在数组
          for (String word : wordsArr) {
              //以4个英文字母开头,跟上字母数字符号
              if (word.matches("[a-zA-Z]{4,}[a-zA-Z0-9]*")) {
                  lists.add(word);
              }
          }
          str = br.readLine();
      }
  • lineCount()函数用于统计文件有效行数

      while (str != null) {//统计有效行的字符
          lineNum++;
          str = br.readLine();
      }
  • writefile()函数将结果写入result.txt文件中

4.测试分析:计算模块部分单元测试展示。

部分单元测试代码:(测试的函数为charCount()函数,lineCount()函数,wordCount()函数,测试文件内容为:我是张艺琳,由于中文不算单词所以可以设置word和character均为0,但是有效行数为1行)
软工网络16个人作业2_第1张图片
软工网络16个人作业2_第2张图片

还有一些测试的情况我用命令行测试看的比较明显:

  • 是否按字典数输出
    软工网络16个人作业2_第3张图片

  • 是否区分大小写
    软工网络16个人作业2_第4张图片

  • 数字算不算单词
    软工网络16个人作业2_第5张图片

  • file123是一个单词,但1file不是一个单词
    软工网络16个人作业2_第6张图片

5.效能分析

分析图,由Jprofiler生成:
软工网络16个人作业2_第7张图片
软工网络16个人作业2_第8张图片
软工网络16个人作业2_第9张图片

6. 结合在构建之法中学习到的相关内容与个人项目的实践经历,撰写解决项目的心路历程与收获。

  1. 我觉得本次项目的代码量属于正常水平,但是撰写博客这些东西相较之下花费的时间更多,我这次还没有按照要求实现接口封装,目前代码的状态还是所有的功能函数都在一个类中。
  2. 在效能分析这一块,安装Jprofiler的时候因为license Key的错误搞了很久,觉得自己很蠢。。然后虽然可以监视了,但是看了老师给的链接分享以及自己还稍微看了一些教程,说实话觉得自己理解能力跟不上,还是不太能看懂究竟如何分析。甚至可以说是毫无头绪了,可以这样说,我不知道怎么看出我的程序的性能好与不好,看着性能分析却不知道他在表达什么。所以根据效能分析改进模块这一步骤也是没有实现的。
  3. 在单元测试这一块也是比较新的,由于以前写代码时候测试函数功能正确性基本都是通过控制台的输入输出来自己检验。而单元测试一开始上手的时候我还纳闷什么叫做单元测试,该怎么测试,后来突然明白单元测试其实就是类似于一份卷子,将每一个函数比作每一道题,然后根据测试的结果去和系统的标准答案对比正确性。写单元测试可以直接得到基本模块的正确性,就比原来每一种情况分别去判断就省了不少时间。
  4. 总的来说,本次项目要想完成真的不容易!!

你可能感兴趣的:(软工网络16个人作业2)