第一次个人编程作业
这个作业属于哪个课程 | 22级计科1班 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业目标 | 设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率 |
作业GitHub地址
https://github.com/mamatsali/3122004915
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 40 | 40 |
· Estimate | · 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 240 | 360 |
· Analysis | · 需求分析 (包括学习新技术) | 120 | 150 |
· Design Spec | · 生成设计文档 | 20 | 25 |
· Design Review | · 设计复审 | 10 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
· Design | · 具体设计 | 20 | 25 |
· Coding | · 具体编码 | 30 | 35 |
· Code Review | · 代码复审 | 20 | 40 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 100 |
Reporting | 报告 | 60 | 50 |
· Test Repor | · 测试报告 | 30 | 25 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 15 |
· 合计 | 700 | 905 |
2、开发环境
编译语言:Java
IDE:Intellij IDEA
项目构建工具:maven
依赖的外部 jar 包:汉语言处理包
3、计算模块接口的设计与实现过程
3.1设计思路与流程图
3.2接口设计与实现
TextIO接口:其功能是通过文件IO流,对文件进行读写操作,其在项目中的作用为读入要进行对比文本,并将其转换为字符串;以及将模拟数据写出到一个txt文件中。
HashTool接口:Hashtool接口中包含两个静态方法,分别为getHash和getSimHash;其中,getHash是作为getSimHash的工具方法,其作用是通过MD5算法将字符串转换为哈希值。
HammingTool接口:Hamming接口中包含getHammingDistance方法和getSimilarity方法,其中getHammingDistance方法需传入两个SimHash值,比较其对应位数是否相等,相等则
distance增加1,否则不变。
ShortException接口:该接口提供ShortException异常,其主要作用是在输入文本字数太少时发出提示信息(经测试,字数过小时,查重的效果并不理想,故本项目对字数的多少进行了一定的限制)。
4 .软件模块功能测试
4.1 TextIO以及Tool模块测试
目的:测试TextIO模块的文件读写功能
测试用例:orig.txt文件 new.txt文件
异常处理:文件路径缺失时,会返回异常提示
预计结果:成功读出orig.txt文件中的内容,并将Double类型数据 d 写入new.txt文件中
@Test
public void TestTextIO() {
String s1 = TextIO.readText("D:\系统自定义修改\new桌面\软件工程个人项目\SoftwareProject\TestData\orig.txt");
System.out.println(s1);
Double d = 0.54;
TextIO.writeText("D:\系统自定义修改\new桌面\软件工程个人项目\SoftwareProject\TestData\new.txt",d);
}
结果:达成测试目标
4.2 Tool模块测试
目的:测试Tool模块的转换hash值功能、转换simhash值功能,计算海明距离功能,计算相似度功能
测试用例:orig.txt文件 orig_0.8_dis_15.txt文件 new.txt文件
异常处理:文本过短或文本关键词太少时,会抛出异常信息
预计结果:成功将orig.txt与orig_0.8_dis_15.txt转换为simhash值,计算出其海明距离,得出相似度
@Test
public void getSimHashTest() {
String s = HashTool.getSimHash(TextIO.readText("D:\系统自定义修改\new桌面\软件工程个人项目\SoftwareProject\TestData\orig.txt"));
System.out.println(s);
}
@Test
public void getHammingToolTest() {
String s1 = HashTool.getSimHash(TextIO.readText("D:\系统自定义修改\new桌面\软件工程个人项目\SoftwareProject\TestData\orig.txt"));
String s2 = HashTool.getSimHash(TextIO.readText("D:\系统自定义修改\new桌面\软件工程个人项目\SoftwareProject\TestData\orig_0.8_dis_15.txt"));
System.out.println(s1);
System.out.println(s2 );
Double d = HammingTool.getSimilarity(s1,s2);
System.out.println(d);
}
4.3异常处理测试
若文件路径错误/缺失,则抛出异常,并给出“文件路径不存在”提示
若文本过短,则抛出shortException异常,并给出"该文本过短!请更换更长的文本进行比对"提示
若文本长度足够,但关键词不足5个,则会被判定为冗余文章,抛出异常提示
4.4 测试覆盖率
4.5打成jar包,并在命令行模式下运行程序
jar包所在位置
通过命令行运行jar包,并且传入参数
其重复率数值成功写入new文件中
5.性能测试与内存占用情况