第 7 章 用测试描述需求和契约
张刚
在现代软件设计中,测试已经不再是传统的测试。自从“极限编程”方法学提出测试驱动开发,测试就已经突破了质量检验或者质量保证的功能范畴,成为软件开发活动中一个基础却重要的实践。本章我们将介绍软件开发的重要范式:测试先行。测试先行对于高效和高质量地进行软件开发极为重要。
本章的结构如下。
将测试作为一个建设性活动:从对测试认知的升级出发,说明测试已经不仅仅是传统意义上的测试,而是一个建设性的活动。
从 V 模型到 I 模型:通过把需求分析和系统测试合二为一,把接口设计和模块测试、单元测试合在一起,加快反馈周期。
用测试澄清和文档化需求:介绍 BDD 工具的使用,展示如何使用类自然语言描述需求。
用测试澄清职责和契约:介绍 BDD 和 JUnit 等工具在模块设计粒度上的使用,展示如何使用这些工具说明设计契约。
测试先行:讨论测试先行的开发范式,及其对质量和效率的重大影响。
7.1 将测试作为一个建设性活动
一个项目的测试活动应该在什么时候开始?“在项目的前期就应该开始”,大多数人会这样回答。测试人员应该在早期就参与需求的制定和评审活动,这是一个教科书式的回答,正确性当然毋庸置疑。但实际情况是怎样的呢?
现状并没有预想的那样乐观。在实际的工作场景中,大量团队,特别是有专职测试人员的团队,经常在开发工作几乎完成时才开始真正认真地对待测试。在项目的早期,测试人员多数忙于其他项目,也不知道如何介入正在进行的需求分析等活动,并且从参与的必要性上讲,也没有感到多么紧急。
这种比较典型的情况反映出大家对于测试活动的价值存在认知不足的问题。如果只是把测试作为质量保证活动,那么它在项目前期无法发挥作用几乎是必然的。不过,如果今天你还是这样认识测试,那么是时候升级一下认知了。
人们对测试所发挥作用的认知,经历了一个渐进的过程。这里我们以 SWEBOK(软件工程知识体系)[38] 为例,看一下测试定义的变迁。SWEBOK 对测试的定义包括两段。在第一段中,它如此描述测试:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了现代软件设计中测试的重要性以及测试先行的范式。传统的测试已经不再是简单的质量检验或者质量保证,而是成为软件开发活动中一个基础却重要的实践。文章强调了测试不再仅仅是在编码完成之后以发现错误为目的的活动,而是贯穿软件开发和维护的全生命周期的活动。从 V 模型到 I 模型的转变,强调了测试前置的策略,即在任何一个阶段都可以应用测试前置的策略。文章介绍了 I 模型的特点,包括在需求阶段、设计阶段和编码阶段立即验证质量,从而带来快速的反馈,大幅提升各环节的效率和质量。此外,文章还介绍了测试先行的设计,以及如何用测试澄清和文档化需求。通过引入 BDD 框架,文章展示了如何将自动化测试与需求文档结合,从而提升沟通效果和质量保障能力。整体来说,本文强调了测试在软件开发中的重要性,并介绍了测试先行的开发范式,以及对质量和效率的重大影响。文章还讨论了测试先行带来的关键影响及具有的优势,包括使契约显式化,以及测试先行对测试人员的角色提出了新的技能要求。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件设计:从专业到卓越》
《软件设计:从专业到卓越》
立即购买
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论