测试驱动开发——持续测试(15)

发表于:2022-10-11 09:34

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

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

分享:
  2.7  测试驱动开发
  测试技术已经进入了一个快速发展的时期,各种理论、方法和实践结果层出不穷,这只能说明这个行业正处在高速发展期,在长期的探索中拥有大量的工程实践。测试驱动开发(Test Driven Development,TDD)在DevOps的推动之下也有了很多实践。TDD也分为单元测试驱动开发(Unit Test-Driven Development,UTDD)和验收测试驱动开发(Acceptance Test Driven Development,ATDD)。
  如果说UTDD是一个科学方法论,其实并不完全正确,应该说它是一个工程实践方法。那么单元测试驱动开发是如何实践的呢?下面以计算L为例展开讨论(L的计算没有任何意义,这里只是举例)。L的计算方法如下:
  L=(用户购课数量?用户购课暂未更新完成的数量?用户结业课程数量)×用户购课费用/用户购课数量
  其中,用户购课数量指用户在社区购买的课程数量;用户购课暂未更新完成的数量指用户已经购买但是课程自身还没有更新完的课程数量;用户结业课程数量指用户已经完成了全部学习的课程数量;用户购课费用指用户购买课程的花销。如果L小于或等于0,那么返回0;如果L大于0,那么返回1。根据该逻辑写出的测试代码如代码清单2-20所示。
代码清单2-20
  在写完该单元测试用例后,运行测试代码,因为此时还未写计算L的代码,所以测试结果为Fail。计算L的代码如代码清单2-21所示。
代码清单2-21
  完成了计算L的l()函数后,再次运行测试脚本,测试结果为Pass。此时其实该单元测试驱动开发仍未结束,需要再次为计算L的代码A.l()完成一次重构,这里的重构并非推翻重来,而要精简代码,添加注释。到此,TDD实践才真正结束。依据上述实践过程,得到的单元测试驱动开发实践流程如图2-15所示。
图2-15  单元测试驱动开发实践流程
  一个业务是从写单元测试开始的,首先针对业务功能编写好单元测试代码,然后运行对应的单元测试代码,得到失败的测试结果。接下来,开发人员开始开发业务代码,业务代码开发结束后再次运行对应的单元测试。测试通过后,开发工程师再完善对应代码段的注释、优化实现,完成一次单元测试驱动开发的实践过程。当再次有新的需求、功能进入开发流程时,重复上述循环流程。图2-16 展示了测试视角的单元测试驱动开发流程。
图2-16  测试视角的单元测试驱动开发流程
  站在测试视角,单元测试驱动开发最终会抽象成三大阶段,编写的测试用例执行失败,在完成业务逻辑开发后,单元测试用例通过,然后重构,从而完成TDD的“红绿重构”循环。
  从名称上可以看出ATDD是一种基于需求的工程实践。在开发开始之前,团队整体讨论每一个需求,确定每一个需求(这里以敏捷开发中的feature形容更合适)的验收标准,同时提取出一组验收测试的测试用例(也就是前面章节的验收条件)。这样团队内可以更好地统一认知,消除理解误差,快速通过测试,快速交付系统。
  验收测试驱动开发实施流程(见图2-17)一般是从讨论需求开始的,在团队内部最初讨论需求时,就开始了验收标准的讨论,这样可以在最初就统一对每一个需求的理解和认知。接下来,无论是自动化测试还是手工测试,为需求设计测试用例更加注重的都是业务流程正确性的测试,这部分工作由测试工程师独立完成,并通过与业务需求一线人员交互确认测试用例。验收测试驱动开发在敏捷团队中结合探索测试会更容易落地实现,但是对于传统测试团队来说,如果只靠测试团队是无法完成转变的。
图2-17  验收测试驱动开发实施流程
  2.8  小结
  自动化测试是持续测试得以实现的必要条件,用自动化测试分层理论指导实践可以加快质量保障流程,弥补自动化测试各层的间隙,提高质量保证的效果和效率,保障持续交付流水线的流畅度。
  同时,引入测试驱动开发,在代码层次,在编码之前首先写单元测试脚本,然后编写代码直到单元测试通过,提高代码的交付质量。在开发、设计、写代码之前,首先明确(定义)每个用户故事的验收标准,然后基于用户故事的验收标准进行开发,从而从需求侧就开始进行质量保障活动,这样即将测试活动贯穿于整个制品交付过程,从而更加有效地保障制品的质量。
查看《持续测试》全部连载章节
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号