个人项目
| 这个作业属于 | 19网工34班 |
| ---- | ---- | ---- |
| 这个作业的要求在哪里 | 作业要求 |
|这个作业的目标|学会使用PSP表格,学会个人软件软件开发流程,学会利用github来进行代码签入|
github链接
1、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 30 |
· Estimate | · 估计这个任务需要多少时间 | 1530 | 1730 |
Development | 开发 | 1300 | 1340 |
· Analysis | · 需求分析 (包括学习新技术) | 600 | 720 |
· Design Spec | · 生成设计文档 | 80 | 60 |
· Design Review | · 设计复审 | 30 | 30 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 50 | 30 |
· Design | · 具体设计 | 100 | 80 |
· Coding | · 具体编码 | 300 | 240 |
· Code Review | · 代码复审 | 60 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 260 |
Reporting | 报告 | 60 | 90 |
· Test Repor | · 测试报告 | 80 | 60 |
· Size Measurement | · 计算工作量 | 50 | 30 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 40 |
合计 | 1530 | 1730 |
2、计算模块接口的性能与实现过程
1.项目结构
程序实现类
- 主类:
Application: 通过main方法接收参数,调用其它功能函数实现程序的运行。 - 功能类:
FileUtil: 文件输入输出类,通过main方法传递的参数读取指定的文件,并将文件的内容传递到分词类中,最后将查重的结果写进指定的文件中
CuttingFile: 分词类,可以实现简单的中文分词
SimpleCommonWords: 查重算法类,利用简单共有词算法实现论文查重 - 测试类
TestCoverage: 测试类,测试各模块的功能。
项目流程
2.关键函数的分析与实现
实现论文查重的关键是分词函数和文本相似度计算函数
查询资料后发现,比较典型的相似度算法有 SimHash + 汉明距离,余弦相似度等,考虑到时间
问题,最后决定采用Word分词组件与它自带的简单共有词算法进行计算,减少代码工作量
参考:中文分词组件
计算文本相似度的算法
简单共有词算法的流程如下:
原句:我听到老人粗哑却令人感动的嗓音,他唱起了旧日的歌谣
string1=我听到老人粗哑却令人感动的嗓音,他唱起了旧日的歌谣
string2=我旧日令人感动却他的嗓音,老人粗哑的歌谣唱起了听到
分词结果
string1=[我, 听到, 老人, 粗哑, 却, 令人感动, 的, 嗓音, 他, 唱, 起了, 旧日, 的, 歌谣]
string2=[我, 旧日, 令人感动, 却, 他, 的, 嗓音, 老人, 粗哑, 的, 歌谣, 唱, 起了, 听到]
词语数
string1=14
string2=14
共有词数
14
查重结果
result=14/14=1.0
可以看出,即使抄袭文本改变了词语的顺序,通过简单共有词算法依然可以检测出来,
简单共有词算法在实现上较为简单,但是对于文件的查重只能基于共有词数量,查重
的精度不够,只能说是大概。
3、模块接口性能部分的性能改进
从性能分析来看,程序中消耗最大的是中文分词的函数调用,由于是直接调用分词组件来完成的,所以没有继续改进
4、模块部分进行单元测试展示
分词类CuttingFile测试
测试结果
文本相似度计算类SimpleCommonWord测试
测试结果
代码覆盖率
由于插件问题,代码覆盖详细到每一行代码,对于未用到的异常情况处理以及类的声明语句都会判定为未覆盖,
导致覆盖率达不到百分百
邹欣老师的博客:现代软件工程讲义2开发技术-单元测试&回归测试
5、模块部分异常处理说明
通过单元测试的结果可以知道,当两个文本都为空时,控制台会输出报错信息
可以通过在主类中添加判断,如果两个都为空就结束程序
6、项目程序测试
因为在编译软件已经提前把文件编码格式UTF-8,所以在运行程序时代码不需要再加上UTF-8
说明:因为在编码时没有注意到日志输出的问题,所以导致打包成jar包后,在命令行输出运行时,
输出了很多的日志,所用的编译软件打包成jar包比较麻烦,就没有更改
项目运行结果
7、总结
在做这次的项目中遇到了非常多的问题,比如在提交代码到github时,一直无法连接上仓库,换了很多方法都没有成功,
后来请别的同学帮我提交了代码。一开始在引入jar包时,jar包中的中文变成了乱码,后来改了编译软件的文件编码格式才变回
中文,在最后打包jar包时,也是打包了很久,因为有个错误一直无法解决,通过这次项目,我认识到一个好用的编译软件真的非常重要,
它可以提高你的开发效率。