第一次个人编辑作业
这个作业属于哪个课程 | 软件工程 |
---|---|
这个作业要求在哪里 | 个人项目作业 |
这个作业的目标 | 论文查重算法实现+PSP+性能改进+单元测试+异常处理 |
github链接
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 60 |
·Estimate | ·估计这个任务需要多少时间 | 60 | 100 |
Development | 开发 | 560 | 860 |
·Analysis | 需求分析(包括学习新技术) | 65 | 90 |
·Design Spec | ·生成设计文档 | 60 | 80 |
·Design Review | ·设计复审 | 15 | 25 |
·Coding Standard | ·代码规范(为目前的开发制定合适的规范) | 10 | 20 |
·Design | ·具体设计 | 40 | 40 |
·Coding | ·具体编码 | 200 | 350 |
·Code Review | ·代码复审 | 40 | 60 |
·Test | ·测试(自我测试,修改代码,提交修改) | 55 | 80 |
Reorting | 报告 | 40 | 70 |
·Test Report | ·测试报告 | 25 | 35 |
·Size Measurement | ·计算工作量 | 10 | 10 |
·Postmortem&Process Improvement Plan | ·事后总结,并提出过程改进计划 | 20 | 25 |
合并 | 670 | 1020 |
计算模块接口的设计与实现过程
绝对路径
接口设计:读取文件->字符串预处理和匹配->输出文件
实现过程:文本相似度完全转化求最小编辑距离(由于生成文章已经不符合常见的语义逻辑),通过对最小编辑距离法求出的最短距离进行归一化处理得出“相似度”结果。
算法
最小编辑距离法是比较经典的动态规划算法
状态转移方程
f[i][j] = f[i-1][j-1] \ s1[i]==s2[j]
f[i][j] = min(f[i][j-1],f[i-1][j],f[i-1][j-1])+1 \ s1[i]!=s2[j]
空间预期消耗O(nm)
时间预计消耗O(nm)
计算模块接口部分的性能改进
去除多余的标点符号
利用匹配正则表达式有利于提高运行效率以及精确度。
CPU Load
类的消耗时间
类的内存消耗
计算模块部分单元测试展示
测试代码
测试结果
覆盖率
由于是第一次写单元测试,覆盖率较低,以及存在很多不完整的地方来不及改动。
计算模块部分异常处理说明
总结:
这次作业尝试了很多以前未曾尝试的操作,也真正意识到自己所学的知识有多薄弱,过去几天一直在补掌握不牢固的java知识,拖到ddl才能把作业做好。
不过总的来说收获还是很大的,从0到1的突破就是最大的成功,尽管这个项目做的不堪入目,但还是很欣慰自己能够有这样的机会。种一棵树最好的时间是十年前,其次是现在。亡羊补牢,为时不晚。