| 软件工程 | 计科21级12班 |
|---|---|
| 作业要求 | 个人项目 |
| 作业目标 | 学会java建立项目的过程,了解论文查重系统的实现算法,学会计算性能并提高代码性能 |
| github链接 | github地址 |
PSP
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 40 |
| Estimate | · 估计这个任务需要多少时间 | 20 | 10 |
| Development | 开发 | 200 | 240 |
| Analysis | 需求分析 (包括学习新技术) | 50 | 50 |
| Design Spec | 生成设计文档 | 30 | 20 |
| Design Review | 设计复审 | 20 | 20 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 35 | 30 |
| Design | 具体设计 | 60 | 60 |
| Coding | 具体编码 | 120 | 150 |
| Code Review | 代码复审 | 45 | 45 |
| Test | 测试(自我测试,修改代码,提交修改) | 100 | 100 |
| Reporting | 报告 | 120 | 100 |
| Test Repor | 测试报告 | 20 | 30 |
| Size Measurement | 计算工作量 | 15 | 15 |
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 30 |
| 合计 | 895 | 940 |
题目描述
- 题目:
论文查重 - 描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份文件上经过增删改的论文的文件,在答案文件中输出其重复率(相似度)
算法实现流程图设计

关键算法的原理

计算模块部分的设计与实现
1. 模块设计


2.函数与方法介绍
| 函数与方法 | 作用 |
|---|---|
| main函数 | 首先检查传入的命令行参数是否包含了原文文件路径、抄袭版论文文件路径和答案文件路径。如果参数个数小于3,则输出错误提示信息并返回,再调用其他函数 |
| readFile(String filePath) | 从文件中读取文本内容的方法 |
| calculateSimilarity(String text1, String text2) | 计算相似度的方法 |
| writeResult(String filePath, double similarity) | 将结果写入文件的方法 |
3.算法的实现过程
- 检查传入的命令行参数是否包含了原文文件路径、抄袭版论文文件路径和答案文件路径。如果参数个数小于3,则输出错误提示信息并返回
- 从对应的命令行中获取对应文件的路径
- 将获取到的路径作为参数传给readFile方法获取文本内容
- 将获取到的文件的文本内容传给calculateSimilarity方法计算两个文件的相似度
- 将得到的结果调用writeResult方法写入到答案文件中,并给出相应的提示信息
计算模块接口的部分性能改进
1.性能测试工具:JProfiler
2.性能分析图:



计算模块部分单元测试展示
主类测试
点击查看主类测试的具体代码
public static void main(String[] args) {
if (args.length < 3) {
System.out.println("请提供原文文件、抄袭版论文文件和答案文件的路径!");
return;
}
String originalFile = args[0]; // 获取原文文件路径
String plagiarizedFile = args[1]; // 获取抄袭版论文文件路径
String answerFile = args[2]; // 获取答案文件路径
try {
String originalText = readFile(originalFile); // 从原文文件中读取文本内容
String plagiarizedText = readFile(plagiarizedFile); // 从抄袭版论文文件中读取文本内容
double similarity = calculateSimilarity(originalText, plagiarizedText); // 计算相似度
writeResult(answerFile, similarity); // 将相似度结果写入答案文件
System.out.println("相似度计算完成!请在对应的结果文件中查看计算结果"); // 输出计算完成的提示信息
} catch (IOException e) {
System.out.println("发生错误:" + e.getMessage()); // 输出错误信息
}
}
主类测试的覆盖率

在命令运行main.jar进行测试
- 检查orig_0.8_add.txt

- 结果:

- 所有文件的测试结果
| 文件 | 相似度 |
|---|---|
| orig_0.8_add.txt | 0.99 |
| orig_0.8_del.txt | 0.40 |
| orig_0.8_dis_1.txt | 0.41 |
| orig_0.8_dis_10.txt | 0.41 |
| orig_0.8_dis_15.txt | 0.41 |
计算模块部分异常处理说明
对IOException e错误进行异常捕捉

报错提示
- 运行命令行没有指定三个文件绝对路径:

- 指定的文件不存在:
