第一次个人编程作业

这个作业属于哪个课程 软件工程
这个作业要求在哪里 作业要求
这个作业的目标 论文查重个人项目 + 单元测试 + 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流相应操作时会出现的异常: FileNotFoundExceptionIOException

对应测试

  • testErrorIntestEmptyIn 均是测试 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
posted @ 2020-09-24 00:32  Yim_WW  阅读(186)  评论(0编辑  收藏  举报