个人项目

这个作业属于 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包时,也是打包了很久,因为有个错误一直无法解决,通过这次项目,我认识到一个好用的编译软件真的非常重要,
它可以提高你的开发效率。