个人项目

这个作业属于哪个课程 软件工程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中:

posted @ 2024-03-14 09:22  韩乐阳  阅读(17)  评论(0编辑  收藏  举报