个人项目
作业所属班级 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13136 |
我理解的作业目标 | 1. 写一个程序实现论文查重 2.学习使用性能分析工具 3.学习如何进行单元测试 |
项目github地址https://github.com/ztz-100/ztz-100/tree/main
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 8 | 8 |
Estimate | 估计这个任务需要多长时间 | 8 | 8 |
Development | 开发 | 675 | 1050 |
Analysis | 需求分析(包括学习新技术) | 30 | 400 |
Design Spec | 生成设计文档 | 40 | 30 |
Design Review | 设计复审 | 20 | 10 |
Coding Standard | 代码规范 | 15 | 10 |
Design | 具体设计 | 60 | 50 |
Coding | 具体编码 | 360 | 480 |
Code Review | 代码复审 | 30 | 60 |
Test | 测试 | 120 | 40 |
Reporting | 报告 | 40 | 60 |
Test Report | 测试报告 | 20 | 10 |
Size Measurement | 计算工作量 | 10 | 20 |
Postmortem & Process Improvment Plan | 事后总结,并提出过程的改进计划 | 10 | 30 |
合计 | 723 | 1108 |
计算模块接口的设计与实现过程
- 主函数 main:主函数负责解析命令行参数,调用其他函数,并处理文件的输入输出。
- 文件读取函数 read_file():接受文件路径作为参数,以只读模式打开文件,并读取文件内容到动态分配的缓冲区中。
- 分词函数 tokenize():接受文本内容作为参数,使用空格和标点符号作为分隔符,将文本分割为词语。
- 相似度计算函数 calculate_similarity():接受原文词语数组、抄袭版词语数组以及它们的长度作为参数,计算它们之间的相似度。
流程图
其中关键算法在于相似度的计算,使用了词语级别的比较方法。
程序首先将文本内容分割成词语,然后逐个比较原文词语和抄袭版词语,统计共同词语的数量,最后计算相似度百分比。
计算模块接口部分的性能改进
计算模块部分单元测试展示
测试类
结果