第一次个人编程作业
这个作业属于哪个课程 | 软件工程 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | <自主完成一个编程项目并上传至Github中管理,熟悉项目开发的简单流程> |
一.PSP表格
二.计算模块接口的设计和实现过程
共创建了4个类用于实现不同的功能:
-
TextIOUtil类:包含两个静态方法
1.1 readText方法:用作读取文件,并转换成字符串。
1.2 writeText方法:用作把结果从字符串转换成文件,并写出。
都是使用java.io包提供的方法实现 -
SimHashUtils类:包含两个静态方法
2.1 getHash方法:用于得到一个字符串的Hash值,提供给下面的方法使用。(使用MD5的方法获得hash值)
2.2 getSimHash方法:传入字符串,得到该字符串的SimHash值。
获得SimHash值的算法流程图:
(1) 分词:
(2) 获得hash值:
(3) 加权、合并:
(4) 降维:
-
HammingUtils类:包含两个静态方法
3.1 getHammingDistance方法:传入两个SimHash值的字符串,计算出海明距离。
3.2 getRepetitionRate方法:根据上述方法获得的海明距离计算得出两个文本的重复率。
-
MainTextRechecking类:主类,使用命令行传入的参数,并调用上述的方法,得出最终的结果。
对静态方法的调用如下:
三.计算模块接口部分的性能改进
-
overview:
-
方法的调用情况:
分析:程序在对文本的分词上花费了很长时间。
并长时间用int型数组对特征向量进行相应的计算以获取字符串的SimHash值。
四.计算模块部分单元测试展示
- 读取模块测试:
测试结果:
路径不存在的情况下,会出现异常
代码覆盖率:
- 计算SimHash的模块测试:
测试结果:
文本过短的情况下,会出现自定义的异常
代码覆盖率:
- 计算海明距离模块测试:
测试结果:
代码覆盖率:
- 主方法的测试:
测试结果:
代码覆盖率:
五.计算模块部分异常处理说明
自定义一个异常:
在分词前进行判断异常是否存在:
参考的文章:
SimHash算法
Jprofiler使用
单元测试使用