个人项目
这个作业属于哪个课程 | 软件工程2024 |
---|---|
这个作业要求在哪里 | 个人项目 |
这个作业的目标 | 使用算法实现论文查重,学习使用测试工具和性能分析工具,加深对PSP开发流程的认识 |
我的Github地址(https://github.com/kushui86/3122004390)
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | *计划 | 40 | 30 |
Estimate | ·估计这个任务需要多少时间 | 1500 | 1500 |
Development | 开发 | 420 | 400 |
Analysis | 需求分析 (包括学习新技术) | 180 | 150 |
Design Spec | 生成设计文档 | 60 | 70 |
Design Review | 设计复审 | 30 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
Design | 具体设计 | 100 | 100 |
Coding | 具体编码 | 240 | 200 |
Code Review | 代码复审 | 60 | 40 |
Test | 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | 120 | 110 |
Test Repor | 测试报告 | 40 | 30 |
Size Measurement | 计算工作量 | 60 | 50 |
Postmortem & Process Improvement Plan | 测试报告 | 40 | 40 |
Test Repor | 事后总结, 并提出过程改进计划 | 60 | 60 |
合计 | 1500 | 1370 |
设计与实现过程
需求
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
实现原理
通过SimHash算法并结合实际的代码来实现,通过对不同文本的SimHash值进而比较“海明距离”,从而判断两个文本的相似度。
开发环境及依赖
编程语言:java 1.8
编程工具:Intellij IDEA 2022.3.2
项目构建工具:maven
性能分析工具:JProfiler 9.2
单元测试:JUnit 4.12
HTML解析:Jsoup 1.11.3
分词处理:hanlp 1.8.1
模块设计
main()方法为主函数入口,simHash算法作为最重要的设计,编写了四个函数方法位于service包中,并设置了四个对应的接口给main函数调用,文件的读写操作以及对HTML文件的标签等特殊字符的处理,均作为工具方法位于util工具包中。
函数调用关系
性能分析
调用次数最多的是com.hankcs.hanlp包提供的接口, 即分词、取关键词与计算词频花费了最多的时间。整体程序逻辑较为简单,各个函数及方法耗时较短。
测试部分
通过generate生成test类后,在test类中进行环境配置
运行单元测试后
测试结果如下:
由于test3和test5模拟出了异常值情况所以在测试中并不会跑通.
但在主程序中会报出异常值.
由于结果过多一下展示test1的结果;
测试结果保存在ans.test中: