202103226-1 编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/computer-science-class4-2018
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-science-class4-2018/homework/11880
这个作业的目标 1、完成项目的需求 2、学习PSP模型 3、阅读《构建之法》
其他参考文献 《构建之法》《现代软件工程》

目录

1. 项目链接
2. PSP表格(预计)
3. 解题思路
4. 代码规范
5. 计算模块接口的设计与实现过程
6. 计算模块接口部分的性能改进
7. 单元测试和性能分析
8. 异常处理说明
9. PSP表格(实际)
10. 心路历程与收获

1、项目链接

2、PSP表格(预计)

PSP2.1 Personal Software Process Stages 预估耗时(分钟)
Planning 计划 0.5h
Estimate 估计这个任务需要多少时间 1h
Development 开发 10h
Analysis 需求分析 (包括学习新技术) 2h
Design Spec 生成设计文档 40min
Design Review 设计复审 30min
Coding Standard 代码规范 (为目前的开发制定合适的规范) 10min
Design 具体设计 2h
Coding 具体编码 3h
Code Review 代码复审 20min
Test 测试(自我测试,修改代码,提交修改) 30min
Reporting 报告 1h
Test Repor 测试报告 20min
Size Measurement 计算工作量 20min
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 20min
合计 22h

3、解题思路

- 需求分析

  1. 统计文件的字符数(对应输出第一行)
  2. 统计文件的单词总数(对应输出第二行)
  3. 统计文件的有效行数(对应输出第三行)
  4. 统计文件中各单词的出现次数(对应输出接下来10行)
  5. 输出结果

- 概要设计

  1. 文件的读取
    使用BufferedReader类进行文件读取
    以前Java课学习过IO读取文件,老师以前也提过BufferedReader这个类读取文件
  2. 计算行数、计算字符
    使用BufferedReader类中readline()方法进行行数的读取,同时计算行数
    使用length()方法计算每行的字符数并进行累加
  3. 单词的分割
    使用split()方法将单词分割并存入字符串数组,便可计算单词数
  4. 单词频率统计
    首先想到的是读数组,比较内容统计频率,后来经查找,可以采用map

4、代码规范

codestyle.md

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

WordCount类:

  • main()函数

    设置文件地址
    调用Lib类中lib()函数

        Lib lib = new Lib();
        lib.setFilePath(" ");
        lib.lib();
    

Lib类:

  • lib()函数

    1. 文件的读取:

           FileReader fr = new FileReader(filepath)
       BufferedReader br = new BufferedReader(fr);
      
    2. 文件行内容的读取与单词分割:

       while((readLine = br.readLine()) != null)
       	{
               String[] wordsArr = readLine.split("[^a-zA-Z]");   
               
           }
      
  • SortMap()排序函数

其实对于Map方面的知识有些地方还是不太懂,其中entrySet()方法是将集合中的映射关系对象存储到一个集合中

	ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(old.entrySet());  
	        Collections.sort(list,new Comparator<Map.Entry<String,Integer>>()
	        {  
	            public int compare(Entry<String, Integer> word1, Entry<String, Integer> word2) 
	            {  
	                return word2.getValue() - word1.getValue();    
	            }  
	        });

大致流程:

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

暂时想不到改进的地方和方法

7、单元测试和性能分析

  • 单词分割测试

      String readLine = "hello how thanks splended  finish";
      String[] wordsArr = readLine.split("[^a-zA-Z]");
      		
      for (int i=0;i<wordsArr.length;i++)
      {
      	System.out.print(wordsArr[i]);
      }
      结果输出:hellohowthankssplendedfinish
    

成功把单词除去空格存入数组中

  • 实际测试

      characters:1321
      words:218
      lines:3
      the: 16
      of: 11
      to: 9
      and: 7
      fake: 6
      have: 6
      commodities: 4
      you: 4
      do: 3
      products: 3
    

8、异常处理说明

例如:文件读取失败,进行输出文件读取失败

9、PSP表格(实际)

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 0.5h 25min
Estimate 估计这个任务需要多少时间 1h 1.5h
Development 开发 10h 12h
Analysis 需求分析 (包括学习新技术) 2h 1.5h
Design Spec 生成设计文档 40min 35min
Design Review 设计复审 30min 35min
Coding Standard 代码规范 (为目前的开发制定合适的规范) 10min 20min
Design 具体设计 2h 1.5h
Coding 具体编码 3h 3h
Code Review 代码复审 20min 30min
Test 测试(自我测试,修改代码,提交修改) 30min 30min
Reporting 报告 1h 2h
Test Repor 测试报告 20min 25min
Size Measurement 计算工作量 20min 10min
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 20min 15min
合计 22h 24h

10、心路历程与收获

  • 在解决项目的过程中既巩固了一些旧的知识,也学习了一些新的知识,例如Java中Map的学习以及对项目流程中单元测试也有了一定的了解。

  • 在《构建之法》中,对需求分析的步骤有了一定的学习和了解

    1. 获取和引导需求
    2. 分析和定义需求
    3. 验证需求
    4. 在软件产品的生命周期中管理需求
原文地址:https://www.cnblogs.com/xu23/p/14602802.html