第一次个人编程作业
| 这个作业属于哪个课程 | 软件工程 |
|---|---|
| 这个作业要求在哪里 | 个人项目 |
| 这个作业的目标 | 设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率 |
GitHub地址:https://github.com/xiri2334/3122004487
PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 15 |
| · Estimate | · 估计这个任务需要多少时间 | 15 | 15 |
| Development | 开发 | 400 | 380 |
| · Analysis | · 需求分析 (包括学习新技术) | 100 | 200 |
| · Design Spec | · 生成设计文档 | 20 | 25 |
| · Design Review | · 设计复审 | 20 | 15 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
| · Design | · 具体设计 | 50 | 40 |
| · Coding | · 具体编码 | 80 | 80 |
| · Code Review | · 代码复审 | 20 | 20 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 40 | 30 |
| Reporting | 报告 | 60 | 40 |
| · Test Repor | · 测试报告 | 30 | 30 |
| · Size Measurement | · 计算工作量 | 20 | 15 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 20 |
| · 合计 | 895 | 945 |
开发环境
- IntelliJ IDEA 集成开发环境
- HanLP 分词工具
- JUnit 测试工具
模块接口的设计与实现
- Main类 主类
- ReadFile类 读取文件类
- WriteFile类 写入文件类
- SimHash类 使用MD5算法来计算关键词的哈希值,并通过特征向量来构造最终的SimHash值
- Hamming类 计算海明距离和相似度
性能分析



可知,getSimHash函数是占据的CPU时间和内存空间都是最大的,是消耗最大的方法。
单元测试
-
测试函数getHash和getSimHash
通过自定义文本使用MD5算法来计算关键词的哈希值,并通过特征向量来构造最终的SimHash值,与预期结果进行匹配
测试结果
![]()
![]()
-
测试函数getHammingDistance和getSimilarity
通过自定义SimHash值来计算海明距离和相似度,与预期结果进行匹配
测试结果
![]()
![]()
-
测试主函数
![]()
![]()
![]()
各文件查重结果
![]()
![]()
![]()
![]()
异常处理说明
BaseException类 异常的基类
点击查看代码
public class BaseException extends RuntimeException {
public BaseException(String msg) {
super(msg);
}
LackException类 参数缺失异常
点击查看代码
public class LackException extends BaseException {
public LackException(String msg) {
super(msg);
}
}













浙公网安备 33010602011771号