| 这个作业属于哪个课程 | 软件工程 |
| :-----------------: | :---------------: |
| 这个作业要求在哪里| 个人项目 |
| 这个作业的目标 | 熟悉maven等框架搭建,jprofiler观察资源消耗与调用情况,junit单元测试,熟悉开发流程 |
正文
1.GitHub仓库
2.PSP
| PSP2.1 Stages | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 50 |
| Estimate | 估计这个任务需要多少时间 | 20 | 30 |
| Development | 开发 | 300 | 400 |
| Analysis | 需求分析 (包括学习新技术) | 300 | 420 |
| Design Spec | 生成设计文档 | 30 | 20 |
| Design Review | 设计复审 | 20 | 20 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
| Design | 具体设计 | 100 | 120 |
| Coding | 具体编码 | 300 | 360 |
| Code Review | 代码复审 | 30 | 50 |
| Test | 测试(自我测试,修改代码,提交修改) | 300 | 500 |
| Reporting | 报告 | 60 | 70 |
| Test Report | 测试报告 | 60 | 60 |
| Size Measurement | 计算工作量 | 30 | 30 |
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 30 |
| 合计 | 1600 | 2180 |
3.计算模块接口的设计与实现过程
-
MainPaperCheck
只有一个main函数,顺序进行文件读入,并将内容写到字符串中,具体是按行读的,可以减少对内存的瞬间占用(详见读写模块)
参数的设定样式使其能在cmd运行

然后调用模块计算结果并返回,逻辑比较朴素

-
SimHashUtils
作用:计算simhash
有getHash与getSimHash方法
getHash流程图:

详细注解:

getSimHash流程图:

详细解析:


-
TxtIOUtils
作用:处理读写
有readTxt与writeTxt模块,按行读的,可以减少对内存的瞬间占用,写时用\r\n适应多平台
流程图:

详细注解:


-
HammingUtils
作用:用于计算汉明距离
有getHammingDistance与getSimilarity方法
getHammingDistance:根据simhash计算并返回海明距离
流程图:

代码中有详细的注释:

getSimilarity:传入simhash调用getHammingDistance得到distance并计算相似度
流程图:

代码与详细注解:

-
ShortStringException
作用:自定义一个异常,应对字符串过短
详细解析:

-
pom配置
作用:从中央仓库或镜像仓库下载外部依赖包
用maven进行项目管理 pom中加入汉化包与测试工具

4.计算模块接口部分的性能改进
jprofiler overview:

调用:

可以看到 调用最多的是汉化包 程序的优化已经需要依赖于数学理论的突破与汉化算法内部的优化 已经达到瓶颈。
5.计算模块部分单元测试展示
-
MainTest
作用:测试项目总体运行情况

测试结果:



-
TxtIOUtilsTest
在案例中设置路径不存在的情况
作用:测试正常读写与文件路径为空的情况


测试结果:


-
SimHashUtilsTest
设计一个字符串 检查能否得到simhash
作用:测试这个类中的两个方法


覆盖率:

-
HammingUtilsTest
设计了哈希值长度不相等的情况
作用:检查哈希值不相等是否有在较短字符串前补0,并检查正常运行

结果:

覆盖率:

-
ShortStringExceptionTest
设计了str长度小于200的情况
作用:检查这个自定义的异常处理是否生效

结果:

覆盖率:

6.计算模块部分异常处理说明
-
读写文件异常
针对路径不存在等情况捕捉


测试结果已经在上文测试部分给出 -
字符串过短异常ShortStringException
汉化包无法处理长度在200以下的字符串 所以要自定义一个异常 在str长度小于两百时抛出
异常的自定义:

测试代码:

测试结果已经在上文测试部分给出