第一次个人编程作业
这个作业属于哪个课程 | 计科22级34班 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | 完成个人项目(论文查重算法)并进行一系列性能测试 |
前言
这次的博客是软件工程的第二次作业,内容是个人项目的练习。
我将分为几个部分依次介绍:
- github地址
- PSP表格
- 接口设计与实现
- 性能分析
- 单元测试
- 异常处理说明
那么,让我们开始吧!
正文
github地址
本次作业的代码已上传github,地址: 个人项目
PSP表格
根据作业要求,我使用PSP表格预测并记录下自己完成各部分的时间
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 1h | 10min |
· Estimate | · 估计这个任务需要多少时间 | 30min | 10min |
Development | 开发 | 2day | 9h |
· Analysis | · 需求分析 (包括学习新技术) | 2h | 2h |
· Design Spec | · 生成设计文档 | 30min | 20min |
· Design Review | · 设计复审 | 10min | 10min |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30min | 10min |
· Design | · 具体设计 | 1h | 30min |
· Coding | · 具体编码 | 1day | 1h |
· Code Review | · 代码复审 | 2h | 10min |
· Test | · 测试(自我测试,修改代码,提交修改) | 1day | 5h |
Reporting | 报告 | 5h | 3h20min |
· Test Report | · 测试报告 | 2h | 3h |
· Size Measurement | · 计算工作量 | 1h | 10min |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 1h | 10min |
· Total | · 合计 | 3day16h | 23h20min |
接口设计与实现
本次项目代码中共有3个函数:find_similarity(),clear_output_txt(),main()。流程图如下:
- find_similarity():
这是本次项目中的核心部分,实现了对待对比文本文件的读取、对比。其中的关键是第三方库difflib的调用,使用difflib库中的SequenceMatcher可以完成对两个文本的相似度计算。
-
clear_output_text():
这个函数会在文本读取出错时执行,清空输出文本的内容(若输出文本不存在,则建立一个内容为空的txt文件) -
main():
通过命令行执行该程序。对各种错误进行了处理、报错。
本程序优点在于调用第三方库difflib,有效减少了代码量。
性能分析
使用PyCharm自带的Profile工具进行性能分析
可以发现图中红色的模块_find_and_load_unlocked,_find_and_load,main是消耗最大的部分,前二者均与模块调用相关
单元测试
- 输入正确的文件名称对比find_similarity()是否能输出想要的相似度
- 测试命令行输入参数错误时是否提示
- 测试各种报错情况是否正常
- 测试当查重的文件为同一文件是否输出有误
- 下面是测试代码的覆盖率,由Coverage得到
异常处理说明
- 命令行输入参数不正确:提示用户正确的输入格式
- 文件为空
- 文件乱码(非UTF-8)