个人项目
作业所属班级 | 软件工程2024 |
---|---|
这个作业要求在哪里 | 个人项目 |
我理解的作业目标 | 通过实践了解并熟悉PSP表格 |
一、github
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 8 | 8 |
Estimate | 估计这个任务需要多长时间 | 8 | 8 |
Development | 开发 | 675 | 1050 |
Analysis | 需求分析(包括学习新技术) | 30 | 400 |
Design Spec | 生成设计文档 | 40 | 30 |
Design Review | 设计复审 | 20 | 10 |
Coding Standard | 代码规范 | 15 | 10 |
Design | 具体设计 | 60 | 50 |
Coding | 具体编码 | 360 | 480 |
Code Review | 代码复审 | 30 | 60 |
Test | 测试 | 120 | 40 |
Reporting | 报告 | 40 | 60 |
Test Report | 测试报告 | 20 | 10 |
Size Measurement | 计算工作量 | 10 | 20 |
Postmortem & Process Improvment Plan | 事后总结,并提出过程的改进计划 | 10 | 30 |
合计 | 723 | 1108 |
三、模块接口的设计与实现过程
(1)需求分析
题目:论文查重
描述如下:
-
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
-
要求输入输出采用文件输入输出。
-
答案文件中输出的答案为浮点型,精确到小数点后两位。
(2)设计
主要参考:
相似度算法——SimHash算法
海量数据相似度计算之simhash和海明距离
(3)实现过程
PlagiarismChecker类
- Main函数:程序运行的整体流程,通过调用各函数实现功能。
- 提醒用户输入两篇文本的绝对路径,用字符串存储路径;
- 调用FiletoString(),将文本转换成字符串;
- 调用SimHashUtils.calSimHash(),计算simHash;
- 调用calHammingDistance(),计算海明距离;
- 计算相似度并将相似度输出到文件中;
- FiletoString函数:通过Java自带的BufferedReader,FileReader等通过路径读取文件的文本内容。
- calHammingDistance函数:根据计算得到simHash值计算海明距离,为Main中相似度的计算提供数据。
- ResulttoFile函数:通过Java自带的PrintWriter等将计算结果输出到用户提供的文件中。
MD5Utils类
- getMD5Hash函数:计算给定输入字符串的MD5哈希值。其中,MD5是一种广泛使用的哈希算法。
SimHashUtils类
- calSimHash函数:为给定的文本计算simHash。
- 将输入文本分组。
- 使用MD5Utils.getMD5Hash()计算MD5哈希。
- 根据哈希值进行权重处理。
- 权重运算后得出simHash值。
四、性能分析
- 程序本身占用内存较少;
- 虽然满足了用户的输入需求,但无交互界面,操作也不方便;
- 程序运行时间较短;
- 有时计算误差较大;
五、单元测试展示
六、模块部分异常处理说明
- 将 NoSuchAlgorithmException 异常转换为 RuntimeException 异常并重新抛出,以便更容易地处理这种情况。
catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); }
七、总结
- 这是我第一次经历一个完整的项目流程,有太多不熟悉的内容,因此在需求分析花费了很多时间,也通过这次项目接触到了很多新技能,比如github的使用,git指令,psp表格等。
- 我在近半个月才开始接触Java,因此在程序实践过程中遇到了很多困难,查询了很多博客,也咨询了身边的同学,花费了很多时间在具体编码上才勉强完成了这一程序功能。
- 由于我的编程能力较弱,因此在看到作业需求时,甚至不知道该如何实现这个功能。
- 作业难度对我来说较高,时间较短,因此没有很好的完成性能分析和测试部分,希望往后随着学习的深入,能够完整的实现PSP全流程。