第一次个人编程作业
| 这次作业属于那个课程 | 软件工程 |
|---|---|
| 这个作业要求在哪里 | 作业要求的链接 |
| 这次作业的目标 | 论文查重 |
1、GitHub 地址
2、PSP 表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 35 |
| Estimate | 估计这个任务需要多少时间 | 30 | 35 |
| Development | 开发 | 300 | 350 |
| Analysis | 需求分析 (包括学习新技术) | 20 | 20 |
| Design Spec | 生成设计文档 | 30 | 38 |
| Design Review | 设计复审 | 15 | 20 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 40 |
| Design | 具体设计 | 30 | 45 |
| Coding | 具体编码 | 400 | 430 |
| Code Review | 代码复审 | 60 | 60 |
| Test | 测试(自我测试,修改代码,提交修改) | 60 | 80 |
| Reporting | 报告 | 45 | 60 |
| Test Repor | 测试报告 | 20 | 20 |
| Size Measurement | 计算工作量 | 15 | 15 |
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 20 |
| 合计 | 1115 | 1268 |
3、模块接口的设计和实现过程
3.1 读写文本文件
- 类名:FileUtils;
- 将 txt 文本文件读取到 StringBuilder 进行拼接,返回调用 simHash() 方法
3.2 核心算法 SimHash、汉明距离
3.2.1 概述
- SimHash 主要思想是降维,将高维的特征向量映射成低维的特征向量,通过两个向量的 Hamming Distance (汉明距离)确定文章是否高度相似。
- Hamming Distance (汉明距离),两个字符串之间的汉明距离是两个字符对应位置的不同字符的个数。
3.2.2 实现流程
- 分词:对需要的文本分词,得到有效的特征向量,将标点、换行、空格等过滤掉,减少无关次的影响。
- hash:通过使用了 MD5 获得字符串的 hash 值 获得各分词的 hash 值,hash 是二进制字符串 。
- 合并:加权求和,W = Hash * weight ,逢1加1,逢0减1.直到把所有的分词hash数列全部判断完毕,计算文档特征向量和。
- 降维:最后对数组进行判断,大于0的记为1,小于等于0的记为0,得到语句的 simhash 值
- 计算:将得到的 simhash 值调用汉明距离模块,计算两二进制字符串的对应位的不同位数,进行计算两字符串的汉明距离,得出相似度。
3.2.3 流程图


3.3 异常类
- 自定义异常类 EmptyTxtException ,当输入文本为空时,即抛出异常告知用户
4、计算模块接口部分的性能改进
4.1 性能分析
- Overview

- 方法调用情况

5、单元测试
5.1 测试读取 txt 文本
- 测试读取文件方法

- 测试写入文件方法

- 文件路径错误,读取失败

- 文件路径错误,写入失败

- 代码覆盖率

5.2 测试 simHash 算法
- 测试 SimHash 算法是否正常运行

- 代码覆盖率

5.3 测试 Hamming Distance
- 测试海明距离算法代码是否正常运行

- 测试过去文件的 simHash 值

- 代码覆盖率

5.4 主程序测试

- 运行结果

- 代码覆盖率

6、异常处理
6.1 文本为空异常处理
- 自定义异常,当输入文本为空时,则抛出异常


6.1 测试异常类


- 运行结果

- 代码覆盖率


浙公网安备 33010602011771号