第一次个人编程作业
第一次个人编程作业 - 论文查重
作业Github链接:https://github.com/K-D-R-T/3124004059
一、PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 30 |
| · Estimate | · 估计这个任务需要多少时间 | 20 | 30 |
| Development | 开发 | 240 | 520 |
| · Analysis | · 需求分析 (包括学习新技术) | 30 | 90 |
| · Design Spec | · 生成设计文档 | 20 | 30 |
| · Design Review | · 设计复审 | 10 | 15 |
| · Coding Standard | · 代码规范 | 10 | 15 |
| · Design | · 具体设计 | 30 | 40 |
| · Coding | · 具体编码 | 60 | 120 |
| · Code Review | · 代码复审 | 20 | 30 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 40 | 180 |
| Reporting | 报告 | 30 | 50 |
| · Test Report | · 测试报告 | 15 | 30 |
| · Size Measurement | · 计算工作量 | 5 | 10 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 10 |
| 合计 | 280 | 600 |
二、计算模块接口的设计与实现过程
代码组织在 com.stu3124004059.plagiarism 包下,包含 Main、FileUtils、SimilarityCalculator 三个类。
因为老师下发的测试文件含有 HTML 网页代码,所以我特别在算法里加了“HTML 标签剥离”这一步。整体流程是:
- 剥离 HTML 标签。
- 文本预处理(只保留中文、英文、数字)。
- 字符 2-gram 统计词频。
- 余弦相似度计算,并转为百分制。
三、计算模块接口部分的性能改进

测试大文本时,单次平均耗时约 13.87 毫秒,完全满足 5 秒内出结果的要求。代码里使用了 HashMap 统计词频,遍历较小的 map 计算点积,并避免重复计算模长,有效保证了性能。
四、计算模块部分单元测试展示


我的核心算法类覆盖率达到了 100%。单元测试覆盖了完全相同、完全不同、忽略标点大小写、剥离 HTML、空文本等多种情况,确保了程序的健壮性。
五、计算模块部分异常处理说明
程序对异常做了明确分类:
- 参数数量不对:打印用法并退出(退出码 1)。
- 文件读写失败:捕获 IOException,退出(退出码 2)。
- 其他运行时异常:退出(退出码 3)。
测试样例 readNotExistShouldThrow() 验证了读取不存在文件时会正确抛出并处理异常。
浙公网安备 33010602011771号