文章目录
1.gitcode仓库地址
gitcode仓库地址:https://gitcode.net/weixin_60966187/papercheck
2.psp表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 30 |
·Estimate | · 估计这个任务需要多少时间 | 60 | 30 |
Development | 开发 | 1050 | 1260 |
· Analysis | · 需求分析 (包括学习新技术) | 300 | 420 |
· Design Spec | · 生成设计文档 | 60 | 60 |
·Design Review | · 设计复审 | 30 | 30 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
· Design | · 具体设计 | 120 | 120 |
· Coding | · 具体编码 | 300 | 360 |
· Code Review | · 代码复审 | 30 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 180 | 210 |
Reporting | 报告 | 240 | 220 |
· Test Repor | · 测试报告 | 60 | 60 |
· Size Measurement | · 计算工作量 | 60 | 60 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 120 | 100 |
· 合计 | 1350 | 1510 |
3.计算模块接口的设计与实现过程
类 | 函数 |
---|---|
mainTest | main |
txtTest | txtRead(读取文件) txtWrite(写入文件) |
editDistanceTest | editDistance(获得最小距离) getSimilarity(获得相似度) |
main获取文件地址调用txtTest类中的txtRead方法,
txtRead方法得到拼接完成后的字符串,
将得到的字符串作为参数调用editDistanceTest类中的getSimilarity方法,
经过getSimilarity方法调用editDistance方法后得到相似度,
最后由txtWrite方法将结果写入结果文件。
4.计算模块接口部分的性能改进
性能分析图
程序中消耗最大的函数
/**
* 编辑距离算法
* @param str1 原字符串
* @param str2 目标字符串
* @return 返回最小距离: 原字符串需要变更多少次才能与目标字符串一致(变更动作:增加/删除/替换,每次都是以字节为单位)
*/
public int editDistance(String str1, String str2) {
int lenstr1 = str1.length(), lenstr2 = str2.length();
//两个字符串为0的情况,即文件为空
if (lenstr1 == 0)
return lenstr1;
if (lenstr2 == 0)
return lenstr2;
//创建二维数组
int[][] arr = new int[lenstr1 + 1][lenstr2 + 1];
for (int i = 0; i < lenstr1 + 1; i++)
arr[i][0] = i;
for (int i = 0; i < lenstr2 + 1; i++)
arr[0][i] = i;
Character str1Char;
char str2Char;
for (int i = 1; i < lenstr1 + 1; i++) {
str1Char = str1.charAt(i - 1);
for (int j = 1; j < lenstr2 + 1; j++) {
str2Char = str2.charAt(j - 1);
//判断是否相等 如果source[i] 等于target[j],则:d[i, j] = d[i-1, j-1] + 0
if (str1Char.equals(str2Char)) {
arr[i][j] = arr[i - 1][j - 1];
} else {
//如果source[i] 不等于target[j],则根据插入、删除和替换三个策略,
// 分别计算出使用三种策略得到的编辑距离,然后取最小的一个:
//d[i, j] = min(d[i, j - 1] + 1, d[i - 1, j] + 1, d[i - 1, j - 1] + 1 )
//>> d[i, j - 1] + 1 表示对source[i]执行插入操作后计算最小编辑距离
//>> d[i - 1, j] + 1 表示对source[i]执行删除操作后计算最小编辑距离
//>> d[i - 1, j - 1] + 1表示对source[i]替换成target[i]操作后计算最小编辑距离
arr[i][j] = (Math.min(Math.min(arr[i - 1][j], arr[i][j - 1]), arr[i - 1][j - 1])) + 1;
}
}
}
return arr[lenstr1][lenstr2];
}
5.计算模块部分单元测试展示
部分单元测试代码:
@Test
public void testTxtRead() throws Exception {
txtTest test = new txtTest();
test.txtRead("D:\\rgzyTest\\orig.txt");
}
@Test
public void testTxtWrite() {
txtTest test = new txtTest();
test.txtWrite("0.88","D:\\rgzyTest\\test.txt");
}
代码覆盖率
6.计算模块部分异常处理说明
设计目的:防止空文件
处理结果:在结果文件中写入0.00。
if(str2.length()==0){
strRe ="0.00";
}