| 这个作业属于哪个课程 | <软件工程> |
|---|---|
| 这个作业要求在哪里 | <要求> |
| 这个作业的目标 | <编写论文查重程序并上传至GitHub> |
| <PSP表格预计/实际填写> | |
| <使用各种工具检查> | |
| <单元测试> |
一、GitHub链接:https://github.com/Youkilidou/3119005471
二、事前PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 60 | |
| Estimate | 估计这个任务需要多少时间 | 10 | |
| Development | 开发 | 60 | |
| Analysis | 需求分析(包括学习新技术) | 360 | |
| Design Spec | 生成设计文档 | 60 | |
| Design Review | 设计复审 | 20 | |
| Coding Standard | 代码规范(为目前的开发制定合适的规范) | 20 | |
| Design | 具体设计 | 60 | |
| Coding | 具体编码 | 600 | |
| Code Review | 代码复审 | 60 | |
| Test | 测试(自我测试,修改代码,提交修改) | 90 | |
| Reporting | 报告 | 30 | |
| Test Reporting | 测试报告 | 30 | |
| Size Measurement | 计算工作量 | 10 | |
| Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | |
| 合计 | 1490 |
三、设计
3.1需要的外部包:HanLP
3.2需要的类:
- 读写文件类:I_O
- 局部哈希类:SimHash
- 计算汉明距离类:Hamming
- main类
- 单元检测类
3.3类之间的关系:
3.4核心算法
-
3.4.1、分词操作调用HanLP接口
-
3.4.2、SimHash—— 为什么不用其他哈希函数
-
3.4.3、汉明距离——Hamming如何判断相似程度
四、实现及分析
4.1、计算simhash语句
4.1.1改进
- 当文本长度过短时,HanLP可能会出错,可以采取设置最低值的方法
4.2计算Hamming距离及相似度
4.2.1改进
- 倘若计算前一步计算simhash出错,则返回-1
4.3分析
4.3.1内存分析
4.3.2cpu分析
4.3.3所用类分析
- 因为调用HanLP的接口进行分词后,我采用的是For循环进行哈希值计算,所以可以看到调用HanLP和因for循环产生的int调用最多
以我目前的编程水平没有较好的解决方法
五、单元测试
利用eclipse集成的JUnit5进行单元测试
5.1、对汉明函数的测试
- 测试结果
5.2、对simhash的测试
- 测试结果
5.3、对IO的测试
- 测试结果
5.4、对main的测试
- 测试结果
- 答案文本
六、代码覆盖率
利用eclipse自带的coverage小工具查询代码覆盖率
- 整体覆盖率
- 测试单元Test类的覆盖率是0,不用管它。
- 主要类的覆盖率基本在87%以上
- 举例hamming说明代码没有100%覆盖的原因
大部分都是因为if条件判断语句没有执行(即程序正常运行)
七、异常处理
- 前文提到文本过短HanLP可能会出问题
- 采用ShortStringException extends Exception来处理
- 处理结果
八、事后PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 60 | 20 |
| Estimate | 估计这个任务需要多少时间 | 10 | 5 |
| Development | 开发 | 60 | 60 |
| Analysis | 需求分析(包括学习新技术) | 360 | 810 |
| Design Spec | 生成设计文档 | 60 | 180 |
| Design Review | 设计复审 | 20 | 20 |
| Coding Standard | 代码规范(为目前的开发制定合适的规范) | 20 | 30 |
| Design | 具体设计 | 60 | 20 |
| Coding | 具体编码 | 600 | 780 |
| Code Review | 代码复审 | 60 | 30 |
| Test | 测试(自我测试,修改代码,提交修改) | 90 | 60 |
| Reporting | 报告 | 30 | 20 |
| Test Reporting | 测试报告 | 30 | 20 |
| Size Measurement | 计算工作量 | 10 | 5 |
| Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | 20 |
| 合计 | 1490 | 2080 |
九、总结分析
- 代码能力还是很薄弱,在查找算法并实现上查找了很多资料
- 新工具的学习需要时间,实践起来花费的时间比预想的多很多
- git管理没想到问题会这么多,网络原因也是其中一个
- 接触了很多之前写代码不会考虑的事情:覆盖率、测试单元、异常分析、利用git更好管理代码、性能分析……对什么是软件工程有了更深的了解
十、参考文章
https://blog.csdn.net/adnb34g/article/details/82905550
https://www.cnblogs.com/pluslius/p/11746102.html
https://www.cnblogs.com/lyssym/p/4880896.html
https://baijiahao.baidu.com/s?id=1658791965259239950&wfr=spider&for=pc
……