第一次软工作业
| 这个作业属于哪个课程 |班级连接|
| ----------------- |--------------- |
| 这个作业要求在哪里|作业连接 |
| 这个作业的目标 | 设计一个文章查重的软件 |
一、需求
1.在Github仓库中新建一个学号为名的文件夹。
2.在开始实现程序之前,在PSP表格[附录2]记录下你估计在程序开发各个步骤上耗费的时间,在你实现程序之后,在PSP表格记录下你在程序的各个模块上实际花费的时间。
3.使用C++ 、Java语言或者python3实现,提交python代码时请附带上requirements.txt,。C++请使用Visual Studio Community 2017进行开发,运行环境为64-bit Windows 10。对于C++/Java,还需将编译好的程序发布到Github仓库中的releases中
4.提交的代码要求经过Code Quality Analysis工具的分析并消除所有的警告。
5.完成项目的首个版本之后,请使用性能分析工具Studio Profiling Tools来找出代码中的性能瓶颈并进行改进。
6.使用Github[附录3]来管理源代码和测试用例,代码有进展即签入Github。签入记录不合理的项目会被助教抽查询问项目细节。
7.使用单元测试[附录4]对项目进行测试,并使用插件查看测试分支覆盖率等指标;写出至少10个测试用例确保你的程序能够正确处理各种情况。
二、个人PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时 | 实际耗时 |
| ---- | ---- | ---- |
| Planing | 计划 | 40 | 30 |
| Estimate | 估计这个任务需要多久时间 | 10 | 10 |
| Development | 开发 | 300 | 480 |
| Analysis | 需求分析(包括学习新技术) | 120 | 240 |
| Design Review | 设计复审 | 20 | 30 |
| Coding Standard | 代码规范 | 10 | 10 |
| Design | 具体设计 | 40 | 30 |
| Coding | 具体编码 | 240 | 240 |
| Code Review | 代码复审 | 60 | 30 |
| Test | 测试 | 60 | 50 |
| Reporting | 报告 | 90 | 120 |
| Test Report | 测试报告 | 20 | 20 |
| Size Measurement | 计算工作量 | 20 | 10 |
| Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 60 | 70 |
| | 合计 | 1110 | 1510 |
三、GitHub地址
四、代码相关
编程语言:Java 14
单元测试:JUnit-4.12
性能分析工具:JProfiler 9.2
依赖的外部 jar 包:IK分词器、Apache读写器
4.1 整体流程

4.2 类
Main类:main方法所在类
HammingUnit:计算海明距离
SimHash:计算SimHash值
4.3核心算法:

五、代码解析
5.1 分词

5.2 加权

计算Hash值

计算海明距离

计算相似度

六、性能分析




可见IK分词器提供的接口被多次调用,该程序在分词、取关键词消耗的时间较多,限制了程序快速运行
七、总结
这次个人程序设计主要难点在于Hash算法与计算海明距离算法的设计上,因为之前很少接触相关设计,因此在这方面的学习消耗了大量的时间
通过在网上寻找他人设计的程序,我也了解到该程序需要用到原本java没有实装的外部开源工具包,也针对这个做了学习,总的来说还是平时设计程序少,真要设计发现自己还是个新手,只能半摸索半实践慢慢做完个人项目
浙公网安备 33010602011771号