作业要求
作业地址
cenkuntao/3121005077
PSP表格
| PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
| Planing |
计划 |
10 |
5 |
| · Estimate |
估计这个任务需要多少时间 |
5 |
2 |
| Development |
开发 |
320 |
313 |
| · Analysis |
需求分析 (包括学习新技术) |
20 |
20 |
| · Design Spec |
· 生成设计文档 |
5 |
8 |
| · Design Review |
· 设计复审 |
2 |
2 |
| · Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
1 |
1 |
| · Design |
· 具体设计 |
10 |
6 |
| · Coding |
· 具体编码 |
280 |
360 |
| · Code Review |
· 代码复审 |
15 |
10 |
| · Test |
· 测试(自我测试,修改代码,提交修改) |
360 |
300 |
| Reporting |
报告 |
20 |
16 |
| · Test Repor |
· 测试报告 |
20 |
13 |
| · Size Measurement |
· 计算工作量 |
5 |
3 |
| · Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
10 |
7 |
|
合计 |
1083 |
1063 |
静态代码质量分析
全部python代码经过pylint工具的分析并消除警告报错
框架及关键设计
框架设计

similarity模块详细设计
- 作用:文本提取
- 说明:通过BeautifulSoup库从html代码中提取文字
- 返回:去除html标签的文本字符串
participle
- 作用:分词
- 说明:通过jieba库对文本进行分词
- 返回:分词列表
clean
- 作用:文本内容清洗
- 说明:使用正则表达式对分词列表进行清洗,保留中英文与数字
- 返回:关键字列表
calc_similarity
- 作用:余弦相似度计算
- 参数:两份关键字列表
- 说明:使用gensim库,分别根据关键字列表计算词频并构造向量,计算两者的余弦相似度
- 返回:余弦相似度
模块接口的性能分析与改进
性能分析
- 使用cProfile进行性能分析
- 使用flameprof火焰图进行分析结果可视化
- 性能分析结果如下图所示:

- 结果分析:从图中我们可以看出各部分的结果较均匀,并没有很大的瓶颈所在,因此不着手记性优化
各模块单元测试
- 使用unittset工具进行单元测试
- 使用coverage工具进行分支覆盖率分析
filehandle模块
- 分别对read_file、write_answer函数进行测试
- 对write_answer函数的测试如下所示:
- 思路:根据函数传参path、sim,分别使用可用的与不可用的path进行测试,分别使用大于0.6小于0.6的sim进行测试
- 截图如下所示:

similarity模块
- 对participle函数的测试如下所示:
- 思路:手动构造字符串传给participle函数,给出预期结果并判断
- 截图如下所示:

分支覆盖率
- 分支覆盖率100%
- 截图如下所示:

异常处理说明
文件读异常
- 目标:当目标文件路径路径读取失败的失败,给用户返回相应的提示
- 单元测试:
- 当文件路径为空的时候,读取不到文件,提示文件读取失败
- 测试样例如下:
def test_write_file(self):
res = write_answer('')
self.assertIsNone(res)
- 结果如下:

文件写异常
- 目标:当目标路径文件写入失败的时候,给用户返回相应的提示
- 单元测试:
- 当文件路径为空的时候,无法写入文件,提示写入失败
- 样例代码如下:
def test_write_file3(self):
res = write_answer('', 0.711)
self.assertIsNone(res)
- 结果如下:
