| 这个作业属于哪个课程 | [软件工程](https://edu.cnblogs.com/campus/gdgy/CSGrade21-12) |
| ----------------- | --------------- |
| 这个作业要求在哪里| [个人项目](https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13014) |
| 这个作业的目标 | 熟悉maven等框架搭建,jprofiler观察资源消耗与调用情况,junit单元测试,熟悉开发流程 |
#正文
#1.GitHub仓库
- [本项目仓库链接](https://github.com/FlyingMantaRay/3121004677)
#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长度小于两百时抛出
异常的自定义:

测试代码:

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