第一次个人编程作业
| 这个作业属于哪个课程 | 软件工程 |
|---|---|
| 这个作业要求在哪里 | 作业要求 |
| 这个作业的目标 | 论文查重个人项目 + 单元测试 + PSP表格 + Git管理 + 性能测试 |
作业代码连接
PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | |
| · Estimate | · 估计这个任务需要多少时间 | 30 | |
| Development | 开发 | 250 | |
| · Analysis | · 需求分析 (包括学习新技术) | 25 | |
| · Design Spec | · 生成设计文档 | 15 | |
| · Design Review | · 设计复审 | 15 | |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 15 | |
| · Design | · 具体设计 | 30 | |
| · Coding | · 具体编码 | 90 | |
| · Code Review | · 代码复审 | 30 | |
| · Test | · 测试(自我测试,修改代码,提交修改) | 40 | |
| Reporting | 报告 | 45 | |
| · Test Repor | · 测试报告 | 20 | |
| · Size Measurement | · 计算工作量 | 15 | |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | |
| · 合计 | 325 |
计算模块接口的设计与实现过程
整体流程
- 通过命令行接收原文文件输入路径、抄袭版论文的文件输入路径、答案文件输出路径。
- 对文本内容进行处理。
- 通过核心算法得出相似度。
- 输出答案。
流程图

主要方法

核心算法:Levenshtein Distance 算法
原理:
Levenshtein Distance 算法是指将一个字符串转化为另一个字符串所需的最少操作数,以此来确定两个字符串的相似度。
核心操作:
通过创建矩阵来求出最小操作数
| a | b | c | ||
|---|---|---|---|---|
| 0 | 1 | 2 | 3 | |
| a | 1 | |||
| b | 2 | |||
| c | 3 | |||
| 然后进行判断: |
- 如果两字符相等,取 array[i-1][j-1] 的值
- 如果两字符不相等,取 Math.min(array[i-1][j], array[i][j-1], array[i-1][j-1]) + 1
相似度公式

- ED: 最小编辑距离
运行结果截图

计算模块接口部分的性能改进
CPU Load

内存消耗

Memory

消耗最大的函数

改进思路
如果对核心算法的时间复杂度进行优化,准确率也会有所下降,而优化空间复杂度不会有这种影响。空间复杂度从O(m*n)降到了O(min(m,n))。

计算模块部分单元测试展示
部分单元测试代码

测试思路
- 通过原文件与各种抄袭文件进行相似度计算,得出各种情况下的查重率。
- 通过输入错误的参数来测试会出现的报错情况。
![]()
测试覆盖率截图

计算模块部分异常处理说明
- 主要是在进行I/O流相应操作时会出现的异常: FileNotFoundException 和 IOException
对应测试

- testErrorIn 与 testEmptyIn 均是测试 FileNotFoundException 异常情况。
- testErrorOut 测试 IOException 异常情况,出现该情况是因为没有权限访问导致等情况导致无法写入文件。
PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 35 |
| · Estimate | · 估计这个任务需要多少时间 | 30 | 35 |
| Development | 开发 | 250 | 330 |
| · Analysis | · 需求分析 (包括学习新技术) | 25 | 50 |
| · Design Spec | · 生成设计文档 | 15 | 20 |
| · Design Review | · 设计复审 | 15 | 20 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 15 | 30 |
| · Design | · 具体设计 | 30 | 20 |
| · Coding | · 具体编码 | 90 | 120 |
| · Code Review | · 代码复审 | 30 | 30 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 40 | 40 |
| Reporting | 报告 | 45 | 55 |
| · Test Repor | · 测试报告 | 20 | 15 |
| · Size Measurement | · 计算工作量 | 15 | 10 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 30 |
| · 合计 | 325 | 420 |

浙公网安备 33010602011771号