个人项目
个人项目
| 这个作业属于哪个课程 | JMU计算21级班级博客 |
|---|---|
| 这个作业要求在哪里 | 个人项目 |
| 这个作业的目标 | 完成个人编程作业编码部分 |
项目Git链接:https://github.com/EternityLH/text_checker
1. PSP表格记录时间
| *PSP2.1* | *Personal Software Process Stages* | *预估耗时(分钟)* | *实际耗时(分钟)* |
|---|---|---|---|
| Planning | 计划 | 10 | 15 |
| · Estimate | · 估计这个任务需要多少时间 | 90 | 120 |
| Development | 开发 | 60 | 80 |
| · Analysis | · 需求分析 (包括学习新技术) | 30 | 15 |
| · Design Spec | · 生成设计文档 | 20 | 10 |
| · Design Review | · 设计复审 | 10 | 10 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 15 | 15 |
| · Design | · 具体设计 | 30 | 55 |
| · Coding | · 具体编码 | 40 | 65 |
| · Code Review | · 代码复审 | 20 | 25 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 30 | 40 |
| Reporting | 报告 | 20 | 20 |
| · Test Repor | · 测试报告 | 20 | 20 |
| · Size Measurement | · 计算工作量 | 15 | 15 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 15 |
| · 合计 | 420 | 520 |
2. 计算模块接口的设计与实现过程
下面使用流程图展示核心算法设计:

3. 计算模块接口部分的性能改进
使用 CodeSonar 进行代码优化分析,消除所有警告:

使用 JProfiler 对代码包进行分析:

4. 计算模块部分单元测试展示
按照题目所示要求,使用命令行指令对绝对路径进行访问,同时生成output文件夹记录结果,指令如下:
python plagiarism_checker.py C:\Users\Eternity\Desktop\orig.txt C:\Users\Eternity\Desktop\orig_add.txt C:\Users\Eternity\Desktop\output.txt
第一次单元测试样例:

测试结果如下:

对原测试样例进行如下修改:

测试结果变为如下结果:

5. 计算模块部分异常处理说明
- 文件读取异常 (FileNotFoundError):当无法打开或读取指定的原始文件或复制文件时,会引发该异常。设计目标是提供有意义的错误消息,指示文件路径是否正确、文件是否存在以及是否有适当的读取权限。
- 编码异常 (UnicodeDecodeError):当读取文件时遇到无法解码的字符时,会引发该异常。设计目标是在异常发生时,提供清晰的错误消息,指出发生编码异常的具体位置和原因。
- 命令行参数异常 (IndexError):当命令行参数数量不符合预期时,会引发该异常。设计目标是在参数数量不正确时,向用户提供正确的用法说明,并指示需要提供的参数数量和顺序。
- 停用词表加载异常 (LookupError):当加载中文停用词表时遇到问题时,可能会引发该异常。设计目标是提供明确的错误消息,指示停用词表是否存在、是否需要更新或修改。
以文件读取为例:
class PlagiarismCheckerTest(unittest.TestCase):
def test_file_not_found(self):
# 准备测试数据
original_file = "nonexistent_file.txt"
copied_file = "copied_file.txt"
# 执行测试
with self.assertRaises(FileNotFoundError):
calculate_similarity(original_file, copied_file)
适用错误场景:尝试计算不存在的原始文件的相似度。
浙公网安备 33010602011771号