单元测试——持续测试(09)

发表于:2022-9-26 09:25

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈磊    来源:51Testing软件测试网原创

分享:
  2.3  单元测试
  动态测试通过运行被测程序检查运行结果与预期结果的差异,并分析运行效率和健壮性等指标。动态测试的第一步是单元测试。
  单元测试指在与程序其他部分相隔离的情况下对软件中的最小可测试单元进行检查和验证,这里的最小可测试单元通常指函数或者类。单元测试与被测系统同源,也就是说,单元测试的代码和被测系统的代码在一个代码仓库中。从这个角度可以看出,单元测试大部分情况下是开发工程师自己撰写的,但是在持续测试实践中起着重要的作用。
  测试工程师通常会从系统质量保障的角度督促开发工程师对单元测试进行补充和完善。绝大部分情况下,测试工程师会通过前面介绍的白盒测试用例设计方法检查开发工程师开发的单元测试是否符合要求,通过代码覆盖率及单元测试通过率判断单元测试是否通过,这也是后面要介绍的质量门禁中一个非常重要的指标。既然由开发工程师完成单元测试,那么如何评价单元测试的好与坏呢?
  变异测试(mutation testing)就是为了评价单元测试写得好与坏、对与错而存在的,这是因为根据测试覆盖率的高与低并不能完全评价一个测试的好与坏。如代码清单2-1所示,有一个做单元测试的需求。
   public double cal(int a,int b){
        renturn a/b;
   }
代码清单2-1
  针对上述代码编写的测试用例如代码清单2-2所示。该段代码可以完全覆盖代码清单2-1中的行。
   public void test_cal(){
      assertTrue(cal(1,1)>0);
      assertTrue (cal(0,10)=0);
   }
代码清单2-2
  如果存在特殊需求,需要修改代码清单2-1中的代码,修改后的代码如代码清单2-3所示。
   public double cal(int a,int b){
        renturn a/(b-1);
   }
代码清单2-3
  此时通过原始的单元测试已不能够发现对应测试的问题,因此仅仅通过行覆盖率评价一个单元测试不再完美。因此我们引入了变异测试。变异测试也称作“变异分析”,是一种在细节方面改进程序源代码的软件测试方法。这里的变异是基于良好定义的变异操作,这些操作或者模拟典型应用错误(如使用错误的操作符或者变量名称),或者强制产生有效的测试(如使每个表达式都等于0)。变异测试是覆盖率的一个很好的补充,相较于覆盖率,它能够使单元测试更加健壮。推荐使用变异测试框架Pitest。
  在已有的项目中使用Pitest并不难,只需要在对应Maven的pom.xml文件中加入Pitest的Maven插件即可,具体如代码清单2-4所示。
   <plugin>
      <groupId>org.pitest</groupId>
      <artifactId>pitest-maven</artifactId>
      <version>LATEST</version>
    </plugin>
代码清单2-4
  然后,运行mvn org.pitest:pitest-maven:mutationCoverage,得到对应的结果。变异测试是评价单元测试的,因此并不需要每次都运行持续集成,按照固定周期执行评价即可。如果团队维护一个完善的单元测试,当单元测试执行失败时,那么引起单元测试失败的问题是不是一个缺陷呢?
  IEEE 729-1983对缺陷有一个标准的定义:从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、故障等问题;从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背。从缺陷的定义可以看出,软件缺陷都是运行后影响某些正常或者预设行为的情况,从开发阶段开始就有可能引入了缺陷。缺陷从发现到修复、关闭要历经一个缺陷生命周期,从而完成不同角色之间的流转。其中会涉及多个人,如开发工程师、测试工程师、产品经理甚至运维工程师,每个人做了缺陷生命周期中不同部分的工作。
  开发工程师在写代码的同时会不断调试代码,因此有两类代码。一类是实现业务的代码,一类是单元测试代码,单元测试代码也是在不断调试中完善的。按照正常流程,开发工程师在本地调试成功,通过单元测试后,就可以把代码提交代码仓库的feature分支了。因此,如果本地的单元测试失败,开发工程师会继续调试并修改单元测试代码,这种情况并不能算软件缺陷,只能算开发调试。
查看《持续测试》全部连载章节
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号