第一次个人编程作业

第一次个人编程作业 - 论文查重

作业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 包下,包含 MainFileUtilsSimilarityCalculator 三个类。

因为老师下发的测试文件含有 HTML 网页代码,所以我特别在算法里加了“HTML 标签剥离”这一步。整体流程是:

  1. 剥离 HTML 标签。
  2. 文本预处理(只保留中文、英文、数字)。
  3. 字符 2-gram 统计词频。
  4. 余弦相似度计算,并转为百分制。

三、计算模块接口部分的性能改进

image

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

四、计算模块部分单元测试展示

image

image

我的核心算法类覆盖率达到了 100%。单元测试覆盖了完全相同、完全不同、忽略标点大小写、剥离 HTML、空文本等多种情况,确保了程序的健壮性。

五、计算模块部分异常处理说明

程序对异常做了明确分类:

  1. 参数数量不对:打印用法并退出(退出码 1)。
  2. 文件读写失败:捕获 IOException,退出(退出码 2)。
  3. 其他运行时异常:退出(退出码 3)。

测试样例 readNotExistShouldThrow() 验证了读取不存在文件时会正确抛出并处理异常。

posted @ 2026-09-15 01:09  K-D-R-T  阅读(5)  评论(0)    收藏  举报