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、解题思路
- 需求分析
- 统计文件的字符数(对应输出第一行)
- 统计文件的单词总数(对应输出第二行)
- 统计文件的有效行数(对应输出第三行)
- 统计文件中各单词的出现次数(对应输出接下来10行)
- 输出结果
- 概要设计
- 文件的读取
使用BufferedReader类进行文件读取
以前Java课学习过IO读取文件,老师以前也提过BufferedReader这个类读取文件 - 计算行数、计算字符
使用BufferedReader类中readline()方法进行行数的读取,同时计算行数
使用length()方法计算每行的字符数并进行累加 - 单词的分割
使用split()方法将单词分割并存入字符串数组,便可计算单词数 - 单词频率统计
首先想到的是读数组,比较内容统计频率,后来经查找,可以采用map
4、代码规范
5、计算模块接口的设计与实现过程
WordCount类:
-
main()函数
设置文件地址
调用Lib类中lib()函数Lib lib = new Lib(); lib.setFilePath(" "); lib.lib();
Lib类:
-
lib()函数
-
文件的读取:
FileReader fr = new FileReader(filepath) BufferedReader br = new BufferedReader(fr);
-
文件行内容的读取与单词分割:
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的学习以及对项目流程中单元测试也有了一定的了解。
-
在《构建之法》中,对需求分析的步骤有了一定的学习和了解
- 获取和引导需求
- 分析和定义需求
- 验证需求
- 在软件产品的生命周期中管理需求