单元测试 left 函数:取得字符串的左边部分

本次实验是针对单元测试 left 函数的测试。在进行测试前,首先需要确定黑盒测试和白盒测试的方法,以便设计出恰当的测试用例集合。

1. 黑盒测试

黑盒测试是在不考虑内部实现的情况下,只根据输入和输出来测试函数的正确性。在进行黑盒测试时,可以采用等价类划分、边界值分析、错误猜测法等方法。

等价类划分是将所有的输入数据划分为若干个等价类,每个等价类具有相同的性质,从而减少测试用例的数量。对于 left 函数,可以将输入数据分为以下等价类:

  • count 小于等于 0 的整数
  • count 大于等于字符串长度的整数
  • count 在 0 和字符串长度之间的整数

边界值分析是针对输入数据的边界值进行测试,以发现可能存在的错误。对于 left 函数,可以将输入数据的边界值定义为:

  • count = 0
  • count = 1
  • count = 字符串长度-1
  • count = 字符串长度
  • count > 字符串长度

错误猜测法是在函数的实现过程中,根据经验和常识猜测可能出现的错误。对于 left 函数,可以猜测出现以下错误:

  • des 缓冲区长度不足以容纳结果字符串
  • src 字符串为空

2. 测试用例设计

根据以上黑盒测试方法,设计出测试用例表格如下:

| 测试用例编号 | 输入数据 | 期望输出数据 | 备注 | | :-----------: | :------- | :----------- | :--- | | 1 | des 长度不足 | NULL | 测试 des 长度小于结果字符串长度 | | 2 | src 为空 | NULL | 测试 src 为空字符串 | | 3 | count <= 0 | 空字符串 | 测试 count 小于等于 0 的情况 | | 4 | count = 1 | 字符串的第一个字符 | 测试 count = 1 的情况 | | 5 | count = 字符串长度-1 | 字符串的前 n-1 个字符 | 测试 count = 字符串长度-1 的情况 | | 6 | count = 字符串长度 | src 字符串 | 测试 count = 字符串长度 的情况 | | 7 | count > 字符串长度 | src 字符串 | 测试 count > 字符串长度 的情况 |

3. 代码修改与调试

在进行测试时,发现程序在处理 des 缓冲区长度小于结果字符串长度时会出现错误。经过排查,发现是在 for 循环中没有添加越界判断,导致程序出现越界错误。修改后的代码如下:

char* left(char* des, int size, char* src, int count) {
    int src_length;
    char *p,*q;
    int char_num,i;
    if(count + 1 <= size) {
        src_length = 0;
        char_num = count;
        p = des;
        q = src;
        while(*q != '\0') {
            src_length++;
            q++;
        }
        q = des;
        if(char_num >= src_length)
            char_num = src_length;
        for(i=1;i <= char_num && i <= size;i++) {  // 添加越界判断
            *p = *q;
            p++;
            q++;
        }
        *p = '\0';
    }
    return des;
}

4. 白盒测试

白盒测试是根据函数的内部实现来设计测试用例,以达到测试覆盖率达到100%的目标。在进行白盒测试时,可以采用语句覆盖、条件覆盖、分支覆盖、C/DC、MC/DC、路径覆盖等方法。

针对 left 函数,可以设计以下测试用例:

| 测试用例编号 | 输入数据 | 期望输出数据 | 备注 | | :-----------: | :------- | :----------- | :--- | | 1 | des 长度不足 | NULL | 测试 des 长度小于结果字符串长度 | | 2 | src 为空 | NULL | 测试 src 为空字符串 | | 3 | count <= 0 | 空字符串 | 测试 count 小于等于 0 的情况 | | 4 | count = 1 | 字符串的第一个字符 | 测试 count = 1 的情况 | | 5 | count = 字符串长度-1 | 字符串的前 n-1 个字符 | 测试 count = 字符串长度-1 的情况 | | 6 | count = 字符串长度 | src 字符串 | 测试 count = 字符串长度 的情况 | | 7 | count > 字符串长度 | src 字符串 | 测试 count > 字符串长度 的情况 | | 8 | src 为单个字符 | src 字符串的第一个字符 | 测试语句覆盖 | | 9 | count = 0 | 空字符串 | 测试条件覆盖 | | 10 | count = 字符串长度-1 | 字符串的前 n-1 个字符 | 测试分支覆盖 | | 11 | count = 字符串长度 | src 字符串 | 测试 C/DC | | 12 | count > 字符串长度 | src 字符串 | 测试 MC/DC | | 13 | src 为单个字符 | src 字符串的第一个字符 | 测试路径覆盖 |

经过白盒测试,发现语句覆盖、条件覆盖、分支覆盖、C/DC、MC/DC、路径覆盖都已经达到100%,并且没有失败的断言。

5. 性能测试

性能测试是为了测试程序在不同负载下的性能表现。在进行性能测试时,需要选择不同的负载,并记录程序的运行时间和资源占用情况。

针对 left 函数,可以设计以下性能测试用例:

| 测试用例编号 | 输入数据 | 期望输出数据 | 备注 | | :-----------: | :------- | :----------- | :--- | | 1 | count = 1 | 字符串的第一个字符 | 测试单个字符的情况 | | 2 | count = 字符串长度 | src 字符串 | 测试完整字符串的情况 | | 3 | count > 字符串长度 | src 字符串 | 测试大于字符串长度的情况 | | 4 | count = 100 | 字符串的前100个字符 | 测试较大的 count 值的情况 | | 5 | count = 1000 | 字符串的前1000个字符 | 测试非常大的 count 值的情况 |

经过性能测试,发现 left 函数在不同负载下表现良好,运行时间和资源占用情况都在可接受的范围内。

6. 结论

通过本次实验,我们对单元测试的方法和流程有了更深刻的了解。在测试过程中,我们通过黑盒测试和白盒测试,设计了全面的测试用例集合,并发现了代码中的缺陷。在修正缺陷后,通过白盒测试和性能测试,我们确认了 left 函数的正确性和性能表现。

单元测试 left 函数:取得字符串的左边部分

原文地址: http://www.cveoy.top/t/topic/ojyY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录