这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11146 |
这个作业的目标 | 实现论文查重算法,学会使用PSP表格估计,学会 Git commit 规范,学会单元测试 |
目录
1. Github仓库
https://github.com/graceon/checkArticle
2. PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 20 |
· Estimate | · 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | 465 | 525 |
· Analysis | · 需求分析 (包括学习新技术) | 30 | 30 |
· Design Spec | · 生成设计文档 | 60 | 60 |
· Design Review | · 设计复审 | 60 | 60 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 15 | 15 |
· Design | · 具体设计 | 30 | 30 |
· Coding | · 具体编码 | 180 | 240 |
· Code Review | · 代码复审 | 60 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 30 | 30 |
Reporting | 报告 | 60 | 60 |
· Test Report | · 测试报告 | 30 | 30 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 20 |
Total | · 合计 | 545 | 605 |
3. 计算模块接口的设计与实现过程。
- CommandParse创建Article对象加载原始论文和待检测论文,并使用ArticleCompare.compare进行比较
- 论文特征在Article构造函数中计算过程
- 将文章中所有可能存在的双字词的hash值作为特征保存到排序集合中
- ArticleCompare.compare
- 由于特征是以整数形式从小到大排序存储到集合中的,采用双指针法,计算2个整数集合共同元素的个数
4. 计算模块接口部分的性能改进。
占用时间最多函数展示
public Article(String pathname) throws IOException, ZeroFeature {
//省略大部分初始化代码
while ((line = reader.readLine()) != null) {
//使用正则表达式分割这一行,分割这一行的短句
String[] subSentence=line.split(splitSymbol);
//逐个短句分析
for(String word:subSentence){
//每2个汉字作为双字词
for (int i = 0; i < word.length()-1; i++) {
//获取双字词的Hash值作为,添加到特征集合sortedHashFeature中
int hash = word.substring(i, i + 2).hashCode();
sortedHashFeature.add(hash);
}
}
}
}
分析可得Article构造函数中计算特征的过程占用时间最多,并且使用正则表达式分割逗号句号和分割双字词使用时间较多。
但都是 Java 语言自带方法优化难度较大。
5. 计算模块部分单元测试展示。
单元测试的测试覆盖率截图
命令行输入参数不足
测试非抄袭文件查重率
测试正常功能