测试用例设计原则
概述
E.W.Dijkstra的一句名言对测试的不彻底性作了很好的注解:“程序测试只能证明错误的存在,但不能证明错误的不存在”。由于穷举测试工作量太大,实践上行不通,这就注定了一切实际测试都是不彻底的,也就不能保证被测试程序在理论上不存在遗留的错误。
设计测试用例是一项细致并且需要具备高度技巧的工作,稍有不慎就会顾此失彼,发生不应有的疏漏。
测试用例设计中容易出现的问题
1. 杀虫剂现象
1990年,Boris Beizer在其编著的《Software Testing Techniques》(第二版)中提到了”杀虫剂怪事”一词,测试人员对同一测试对象进行的测试次数越多,发现的缺陷就会越来越少的现象。就像老用一种农药,害虫就会有免疫力,农药发挥不了效力。这种现象的根本原因就是测试人员对测试软件过于熟悉,形成思维定势。
由于软件开发人员在开发过程中可能碰见各种各样的主客观因素,再加上不可预见的突发性事件,所以再优秀的软件测试员采用一种测试方法或者工具也不可能检测出所有的缺陷。为了克服这种现象,测试人员需要不断编写新的测试程序或者测试用例,对程序的不同部分进行测试,以避免被测试软件对单一的测试程序具有免疫力而使软件缺陷不被发现。也可以引用新人来测试软件,刚刚进来的新手往往能发现一些意想不到的问题。
2. 用例的覆盖问题
测试用例设计得再精美,覆盖率不够也是枉然。测试用例的覆盖度不够很容易造成缺陷遗漏,因此测试用例的覆盖率是一个非常重要的问题,需要考量如何才能有效度量和确认测试用例的覆盖程度,同时测试用例的评审也是非常关键。
3. 测试用例的修改更新
测试用例在形成文档后也还需要不断完善。如:
- 在测试过程中发现设计测试用例时考虑不周,需要完善
- 在软件交付使用后反馈的软件缺陷,而缺陷又是因测试用例存在漏洞造成
- 软件自身的新增功能以及软件版本的更新,测试用例也必须配套修改更新
测试用例集是动态的,用例设计过程就是不断的维护和更新的过程。
测试用例设计的基本原则
因此,测试用例除了应该符合基本的测试用例编写规范,还要遵守以下几条基本设计原则:
1. 基于测试需求的原则
应按测试级别的不同要求,设计测试用例。如:
- 单元测试依据详细设计说明
- 接口测试依据概要设计说明
- 配置项测试依据需求规格说明
- 系统测试依据用户需求(系统/子系统设计说明、软件开发任务书等)
2. 基于测试方法的原则
应明确所采用的测试用例设计方法。为达到不同的测试充分性要求,应采用相应的测试方法,如:
- 等价类划分
- 边界值
- 错误推测法
- 正交实验法
- 因果图
- 决策表等
3. 兼顾测试充分性和效率的原则
测试用例集应兼顾测试的充分性和测试的效率;每个测试用例的内容应完整具有可操作性。
4. 测试执行的可重复性原则
应保证测试用例执行的可重复性。
练习题:
某在线购物平台的”商品加入购物车”功能需求描述如下:
- 功能入口:商品详情页的”加入购物车”按钮
- 核心逻辑:用户点击按钮后,所选商品(包括商品ID、数量、规格)应被加入其个人购物车
- 数量规则:单次加入数量必须为1-10件(包含1和10)
- 结果显示:页面需给出明确操作反馈(成功提示或失败原因)
请基于测试用例设计的基本原则,为该功能设计测试用例,并简要说明每个用例体现了哪项(或哪些)原则。