第一次个人编程作业
| 这个作业属于哪个课程 | 软件工程2024-双学位(广东工业大学) |
|---|---|
| 这个作业要求在哪里 | 软件工程第二次作业 |
| 这个作业的目标 | 1. 在Gitcode仓库中新建一个学号为名的文件夹 2. 记录PSP表格 3. 使用编程语言完成论文查重程序 4. 使用Code Quality Analysis分析代码 5. 使用Studio Profiling Tools来优化代码 6. 使用Gitcode来管理代码 7. 使用单元测试对项目进行测试,并使用插件查看测试分支覆盖率等指标 |
| 其他参考文献 | 无 |
我的GitCode链接 |
论文查重
PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 60 | 60 |
| ·Estimate | ·估计这个任务需要多少时间 | 60 | 60 |
| Development | 开发 | 300 | 380 |
| ·Analysis | ·需求分析(包括学习新技术) | 60 | 60 |
| ·Design Spec | ·生成设计文档 | 20 | 30 |
| ·Design Review | ·设计复审 | 10 | 30 |
| ·Coding Standard | ·代码规范(为目前的开发制定合适的规范) | 10 | 10 |
| ·Design | ·具体设计 | 30 | 50 |
| ·Coding | ·具体编码 | 60 | 60 |
| ·Code Review | ·代码复审 | 10 | 20 |
| ·Test | ·测试(自我测试,修改代码,提交修改) | 30 | 50 |
| Reporting | 报告 | 30 | 30 |
| ·TestReport | ·测试报告 | 20 | 10 |
| ·Size Measurement | ·计算工作量 | 10 | 10 |
| ·Postmortem & Process Improvement Plan | ·事后总结,提出过程改进计划 | 10 | 20 |
| ·合计 | 360 | 440 |
论文查询程序设计
经过调研,决定采用python的difflib库来实现需求。(该库能较为方便的实现论文查重功能)
difflib中常用两个类:SequenceMatcher 和 Differ,它们都可以用来比较两个序列(如字符串、列表、元组等)之间的差异,并生成相应的结果,十分方便。
difflib 库中的 SequenceMatcher 类是 Python 的一个非常有用的工具,用于比较两个序列之间的相似度,找出它们之间最长的连续匹配的子序列。它可以用于比较任何类型的序列(如字符串、列表或元组),非常适合于文本比较和差异分析等场景。
SequenceMatcher模块
我们需要从 difflib 模块导入 SequenceMatcher 类:
from difflib import SequenceMatcher
然后创建一个 SequenceMatcher 对象,通过传入两个序列来初始化:
matcher = SequenceMatcher(None, "文本1", "文本2")
获取匹配度
SequenceMatcher 提供了 ratio() 方法来计算两个序列之间的相似度(返回值是一个在 0 到 1 之间的浮点数,1 表示完全匹配):
similarity = matcher.ratio()
print(similarity)
找出匹配的块
使用 get_matching_blocks() 方法来获取序列之间匹配的块:
matching_blocks = matcher.get_matching_blocks()
for block in matching_blocks:
print(block)
查找差异
difflib.SequenceMatcher 提供了 get_opcodes() 方法,返回一个操作码列表,描述如何从第一个序列变换到第二个序列。可以显示两个序列之间的差异。
opcodes = matcher.get_opcodes()
for tag, i1, i2, j1, j2 in opcodes:
print(f"{tag}: a[{i1}:{i2}] b[{j1}:{j2}]")
这里的 tag 表示操作类型(如 'replace'、'delete'、'insert' 或 'equal'),i1:i2 表示第一个序列中受影响的范围,而 j1:j2 表示第二个序列中受影响的范围。
性能优化

浙公网安备 33010602011771号