软件工程第一次个人编程作业

文章介绍了Gitcode仓库中的一个项目,涉及计算模块接口设计与实现,包括读写文件、编辑距离算法以及相似度计算。通过PSP表格展示了开发过程的时间管理。针对编辑距离算法进行了性能改进,并提供了单元测试代码以确保功能正确性。对于空文件情况,设计了异常处理机制,返回0.00作为结果。
摘要由CSDN通过智能技术生成

1.gitcode仓库地址

gitcode仓库地址:https://gitcode.net/weixin_60966187/papercheck

2.psp表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划6030
·Estimate· 估计这个任务需要多少时间6030
Development开发10501260
· Analysis· 需求分析 (包括学习新技术)300420
· Design Spec· 生成设计文档6060
·Design Review· 设计复审3030
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)3030
· Design· 具体设计120120
· Coding· 具体编码300360
· Code Review· 代码复审3030
· Test· 测试(自我测试,修改代码,提交修改)180210
Reporting报告240220
· Test Repor· 测试报告6060
· Size Measurement· 计算工作量6060
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划120100
· 合计13501510

3.计算模块接口的设计与实现过程

函数
mainTestmain
txtTesttxtRead(读取文件)
txtWrite(写入文件)
editDistanceTesteditDistance(获得最小距离)
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";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值