这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13136 |
这个作业的目标 | 个人项目开发 |
Github链接
https://github.com/shishuiliuqing/shishuiliuqing
程序实现
1.本次个人项目通过java进行实现,由 3 个类构成--Paper 类、FileToActicle 类、Main 类。Paper 类执行论文相关操作,FileToActicle 类执行文件操作,Main 类作为程序主入口。
2.通过 java.io.FileReader 类进行文本文件的导入,java.io.FileWriter 类进行结果文件的输出。
3.通过标记两篇文章(文章的标点符号均删除)中的连续相同文本并进行删除,最终根据删除后文本的长度与删除前文本长度相除,从而得出相似度。
性能分析图
单元测试
删除标点符号
//删除文章中的标点符号,回车,空格
private String delete(String article) {
return article.replaceAll("[\\s,。:“”、!;?《》()*+\\-/]", "");
}
比较操作:将字数多的文章作为比较原文,从比较原文开头开始截取一个词长的长度,从另一篇文章中判断是否有相同文本并标记,然后删除比较原文的第一个字,然后继续截取,以此循环,最终直到比较原文被完全删除,从而另一篇文章的所有连续相同文本均被标记后删除。
//将本文与另一文章进行相似比较,删除所有与另一文章相同的词和语句
private void articleCompare(Paper anotherArticle) {
//比较原文
String original = anotherArticle.getArticle();
//词长
int wordLength = 3;
//文本连续判断,若连续则把连续片段标记为 *
while (original.length() >= wordLength) {
//从文章开头取一个词
String word = original.substring(0, wordLength);
if (!markWord(word)) {
char character = word.charAt(wordLength - 1);
markCharacter(character);
}
//删除文章第一个字
original = deleteFirstCharacter(original);
}
//把剩余不足一个词长的文字进行判断
for (int i = 0; i < wordLength - 1 && i < original.length(); i++) {
markCharacter(original.charAt(i));
}
article = article.replace("*", "");
}
代码覆盖率
运行结果
异常处理
任一路径没有输入
任一路径输入有误
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 25 | 30 |
Estimate | 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | 50 | 60 |
Analysis | 需求分析 (包括学习新技术) | 60 | 240 |
Design Spec | 生成设计文档 | 5 | 10 |
Design Review | 设计复审 | 30 | 60 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 20 | 30 |
Coding | 具体编码 | 120 | 200 |
Code Review | 代码复审 | 25 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 60 |
Reporting | 报告 | 60 | 70 |
Test Repor | 测试报告 | 15 | 25 |
Size Measurement | 计算工作量 | 5 | 5 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 25 |
合计 | 495 | 875 |