软件单元测试要点总结

       在整个软件开发过程中,问题发现得越晚,所需付出的代价也越高。单元测试能够深入到软件的具体实施细节,有效地验证代码是否与设计相符合,并尽早地识别出软件设计和实施过程中的问题,从而提高软件开发效率,缩短软件开发周期。

       常见的单元测试方法有:

  • 1. 基于需求的测试:此处的需求是指软件单元层面的需求,是单元测试最基本的方法;
  • 2. 接口测试:测试单元模块的输入输出接口是否与预期一致;
  • 3. 背靠背测试:一般用于基于模型的设计,对比模型和代码在相同仿真条件下的输出,验证模型和代码的一致性;
  • 4. 资源使用测试:用于测试当前单元模块所消耗的时间和内存资源;
  • 5. 故障注入测试:用于检查软件中安全机制的有效性。

      在进行单元测试前,首先需要设计合适的测试用例,一般来说可以通过以下几种方式来生成测试用例:

  • 1. 需求分析:最基本的测试用例设计方法,通过分析需求,寻找合适的测试用例,以便直接的验证功能是否符合要求;
  • 2. 等价类分析:根据需求或设计将输入分成若干区域,并从每个分区中选择代表性的点作为测试用例;
  • 3. 边界值分析:根据需求书找输入接口的边界值,通过测试边界值上的模块功能来反映整个范围内的情况。对于一个边界,一般来说可取三个值,一个边界值,一个较大值以及一个较小值,三个值的间隔取决于数据类型决定的最小增量,对于整型,间隔一般取1。

       为了保证测试的完整性,对需求的覆盖程度,需要评估测试用例的结构覆盖度,一般常见的评价指标如下:

  • 1. 语句覆盖度:衡量是否所有语句都被子执行到;
  • 2. 分支覆盖度:所有分支都应该被执行到;
  • 3. MC/DC覆盖度:对于MC/DC而言每一个能够独立影响分支的条件均应该被测试到。

举例如下:

if( (a||b) && c )     balabala;

对于该段语句,如果要满足语句覆盖率达到100%,则只要给出任意一个能够使( (a||b) && c )的结果为true的测试用例即可。

如果要满足分子覆盖率达到100%,则需要使用两个测试用例,使( (a||b) && c )的结果分别为true和false。

而对于MC/DC而言,如果要达到100%的覆盖率,则需要进行如下分析:

当c为false的时候,取a为true,b为false,这时( (a||b) && c )的结果为false,保持c不变,那么无论怎么改变a和b,结果均不会改变,即此时a和b均不会影响( (a||b) && c )的结果,所以当c为false时,只需要测试一种情况即可。

当c为true时,若a和b同时为true,那么当a和b任意一个发生变化时,( (a||b) && c )的结果仍然为true,即此时a和b均不影响结果,而当a和b至少有一个为false时,另一个的变化都会独立影像测试结果,因此均属于符合MC/DC的有效测试用例。

综上所述,对于已给的示例,满足MC/DC覆盖率达到100%的测试用例可取以下4组:

组号abc
1truefalsefalse
2falsefalsetrue
3truefalsetrue
4falsetruetrue

        需要注意的是,单元测试包括结构性测试和功能测试,结构覆盖率关注的是单元模块的路径是否全部被覆盖,侧重于发现程序的结构缺陷,而对于单元模块本身具体的功能并不能完全覆盖,此时就需要进行功能测试。举例来说,如果该单元模块是用来实现正弦计算的,只需要一个测试用例即可使得所有的覆盖率为100%,但是并不能验证正弦计算本身的正确性,因此需要补充相应的测试用例。

       软件单元测试的环境应该尽可能的和实际环境保持一致。如果不一致,应该分析测试环境的不同对测试结果可能产生的影响。必要时,可以在后续的测试中(集成测试或者需求验证过程)补充部分基于目标环境测试。

      一般来说,软件单元测试的环境有:MIL、SIL、PIL、HIL。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值