第一次个人编程作业
个人项目——论文查重
前言
| 这个作业属于哪个课程 | 软件工程 |
|---|---|
| 这个作业要求在哪里 | 作业要求 |
| 这个作业的目标 | 代码实现、性能分析、单元测试、异常处理说明、记录PSP表格 |
代码已上传个人github
需求
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
- 原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
- 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
- 从命令行参数给出:论文原文的文件的绝对路径。
- 从命令行参数给出:抄袭版论文的文件的绝对路径。
- 从命令行参数给出:输出的答案文件的绝对路径。
PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 40 |
| · Estimate | · 估计这个任务需要多少时间 | 30 | 40 |
| Development | 开发 | 300 | 350 |
| · Analysis | · 需求分析 (包括学习新技术) | 120 | 150 |
| · Design Spec | · 生成设计文档 | 30 | 50 |
| · Design Review | · 设计复审 | 30 | 40 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 50 |
| · Design | · 具体设计 | 50 | 60 |
| · Coding | · 具体编码 | 200 | 300 |
| · Code Review | · 代码复审 | 30 | 50 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 60 | 30 |
| Reporting | 报告 | 30 | 50 |
| · Test Repor | · 测试报告 | 30 | 50 |
| · Size Measurement | · 计算工作量 | 10 | 10 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
| 合计 | 400 | 500 |
需求分析&思路
- 论文查重,即比对文本相似度,通过上网查询,找到需要的相关知识
- 查看了各种方法后,决定使用海明距离来实现项目需求
模块接口的设计与实现过程

类图说明:PaperPass类的main()方法中创建两个Paper类,paper对象调用split()将论文以两个字符为一个基本单元划分文本特征,然后调用PaperComparator.compare()对原文文件和抄袭文件的文本特征进行比较。
模块接口部分的性能改进
JProfiler的性能分析图:

程序中耗时最大的函数:Paper类的初始化方法:

模块部分单元测试展示
@org.junit.Test
public void testMain(){
String[] paths = {
"E:\\test\\orig.txt",
"E:\\test\\orig_0.8_add.txt",
"E:\\test\\ans.txt"
};
try {
PaperPass.main(paths);
} catch (IOException e) {
e.printStackTrace();
}
}
测试的函数:main()方法。
单元测试的测试覆盖率截图:

模块部分异常处理说明
找不到文件或文件不存在

IO异常

浙公网安备 33010602011771号