软工网络16个人作业2
1.在文章开头给出博客作业要求地址,码云项目地址。
博客园地址:https://www.cnblogs.com/happyzm/p/9559372.html
码云地址:https://gitee.com/wistarias/PersonalProject-Java
2.给出个人的PSP表格。
PSP2.1 | 个人开发流程 | 预估耗费时间(分钟) | 实际耗费时间(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 5 |
· Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 5 | 0 |
Development | 开发 | 150 | 140 |
· Analysis | 需求分析 (包括学习新技术) | 10 | 5 |
· Design Spec | 生成设计文档 | 10 | 5 |
· Design Review | 设计复审 | 10 | 5 |
· Coding Standard | 代码规范 | 0 | 0 |
· Design | 具体设计 | 10 | 5 |
· Coding | 具体编码 | 100 | 85 |
· Code Review | 代码复审 | 10 | 5 |
· Test | 测试(自我测试,修改代码,提交修改) | 10 | 30 |
Reporting | 报告 | 10 | 6 |
· | 测试报告 | 5 | 2 |
· | 计算工作量 | 5 | 1 |
· | 并提出过程改进计划 | 0 | 0 |
3.解题思路描述。即刚开始拿到题目后,如何思考,如何找资料的过程。
1.刚开始拿到题目时,想先把整个文件的信息读取出来,之后再进行统计。但后来在代码的实现过程中修改为读取一行进行一次操作判断,在文件读取完后字符数,行数,单词等就全部算完了。
2.之后按照题目要求的格式把存好的数据进行输出。并考虑的一些特殊的情况,以备操作失败或出现问题时能够进行适当的处理。
3.看到题目中的字典,我就想到了要使用map来保存单词和其频率,并重新定义其compare对输入的信息进行排序。
4.对文件数据中的特殊字符进行判断,我是先把能想到的字符保存在一个字符串中,在判断读取的特殊字符是否在其中
5.判断是否为单词,我是先设置一个空的数组array,一个空的字符串str,以及一个空的map字典dic。在文件读取一行后,使用循环,遍历每一个字符,判断字符是否为英文字母,是就放到str中。判断字符是否是数字符号,是就判断str的值是否大于等于4,有就加入,没有就把str进行清空。遇到特殊的字符后,判断str的值是否大于等于4,是就接着判断其是否存在于array数组中,没有就把str保存到array数组和dic字典中,有就把dic字典对应的字典的value值加1。以此方法当文件的数据读取完毕后单词及其对应的频率就全部记录下来了。
4.设计实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?单元测试是怎么设计的?
1.这个程序我一共设计了三个类
public class FileRead//文件读取并完成对行,单词数,字符数,单词频率的计算
public class WordCount//用于保存行数,单词数,字符数,单词频率
public class Main//主函数所在进行把前面得到的结果按要求进行输出
2.在FileRead类中有一个readTxtFile函数,使用它能够读取文件并将完成行,单词数,字符数,单词频率的计算。在WordCount有一个sortMap函数,使用它可以将单词按频率从大到小排列。在Main中有主函数main,它会把前面得到的结果按要求进行输出。
3.代码的具体设计思路就是我在第3题中所写的内容。
5.代码说明。展示出项目关键代码,并解释思路与注释说明。
1.关键代码
(1)这段代码的设计思路便是第3题的第5点
(2)对map的字典进行排序
2.代码测试
3.代码的提交
6.单元测试
测试数据
1.txt:包含英文,特殊字符等
2.txt:空文件
3.txt:只含有中文
4.txt:只含有英文
测试结果如下
7.效能分析
测试一个大小为3M的文件:
8.结合在构建之法中学习到的相关内容与个人项目的实践经历,撰写解决项目的心路历程与收获。
在一开始我想使用尽量使用java已经的函数进行编程,例如:在判断单词时我原本想使用split进行操作把数据进行分割,以此得到单词的数量,但这代码写到那里时,我突然发现若是连续出现多个特殊字符,其分割就变成了错误,所以之后便采用了一种完全不同的方法进行判断。通过这让我明白了设计好的计划很可能赶不上变化,那时要及时调整策略,设计一个符合当下的新计划。