编程之美—《三角形测试用例》
2014-04-30 11:01
134 查看
设计测试用例是软件测试中相当关键的一部分,因此在面试过程中,经常会被问到怎么设计测试用例,根据一个功能点,设计多少种测试用例等类似的问题。在这里还是就一个古老的话题,谈谈如何设计测试用例。
例子:输入三角形的三条边长,判断是否能构成一个三角形(不考虑退化三角形,即面积为零的三角形),是什么样的三角形(直角、锐角、钝角、等边、等腰)。
函数声明为:byte GetTriangleType(int ,int, int)。
(1) 如何用一个byte来表示各种输出情况?
(2) 如果你是一名测试工程师,应该如何写测试用例来完成功能测试呢?
问题(1)解法:
步骤一:首先要考虑三角形的状态,简单分为三角形和非三角形两种,其中三角形又包括直角,锐角,钝角,等边,等腰。
步骤二:题目要求用一个byte来表示各种输出结果,一个byte为8个bit,能够表示0~255,即一个byte可以表示256种状态,自然我们可以穷举所有可能的三角形状态,然后对其一一编号,如将非三角形编号为0,直角三角形编号为1、锐角三角形为2,依次类推。但考虑,一个直角三角形同时也可能是等腰三角形,一个等边三角形同时也是锐角三角形,那么在上述的编码的基础上,要想表达更精确,需要继续扩展编码。但这样的编码没有规律可循,容易造成混淆。
步骤三:为了克服穷举无规律可循的问题,可以考虑按标志位编码,将1个byte从右到左(或者从左到右)依次按位赋予含义,如下表所示:
以上表中,第0位表示等腰,第1位表示等边,等等。各位取1表示该状态为真,其中第7位表示该状态是否为三角形,是则为1,否则为0。那么便可很方便的表示几种状态同时存在,如10010001则表示这是一个直角等腰三角形。剩余的第6位和第5位可以留作错误编码,比如用于表示两边之和小于第三边等。
问题(2)解法:
作为一名测试者,要测试一个程序,具体的工作就是要分析程序可能出现的漏洞,并编制测试用例来有针对性的进行测试,观察程序是否正常工作。通常测试可以分为以下三个方面:程序在正常输入下的功能测试,测试程序在非法输入时的表现,测试程序对边界值附近输入的处理。
设计三角形的测试用例,如下:
预期输入:a,b,c (三个数值,代表三条边的长度)
预期输出:采用问题1中的编码输出,即非三角形或三角形的具体状态
1. 程序在正常输入下的功能测试,如下表所示:
注:须要交换三边长度顺序以确保对每条边的判断,如对用例1还须要测试(1,2,4)及(2,4,1)等5组用例(后面的用例应做相同的操作)
2. 测试程序在非法输入时的表现,如下表所示:
3. 测试程序对边界值附近输入的处理(假设1<=a,b,c<=100),如下表所示:
注:中间值通常能被正确处理,而边界值则往往因为判断语句使用<、>、<=、>= 而引起错误
以上表格中尚未包括换位枚举。读者可以扩充滴。。。。
例子:输入三角形的三条边长,判断是否能构成一个三角形(不考虑退化三角形,即面积为零的三角形),是什么样的三角形(直角、锐角、钝角、等边、等腰)。
函数声明为:byte GetTriangleType(int ,int, int)。
(1) 如何用一个byte来表示各种输出情况?
(2) 如果你是一名测试工程师,应该如何写测试用例来完成功能测试呢?
问题(1)解法:
步骤一:首先要考虑三角形的状态,简单分为三角形和非三角形两种,其中三角形又包括直角,锐角,钝角,等边,等腰。
步骤二:题目要求用一个byte来表示各种输出结果,一个byte为8个bit,能够表示0~255,即一个byte可以表示256种状态,自然我们可以穷举所有可能的三角形状态,然后对其一一编号,如将非三角形编号为0,直角三角形编号为1、锐角三角形为2,依次类推。但考虑,一个直角三角形同时也可能是等腰三角形,一个等边三角形同时也是锐角三角形,那么在上述的编码的基础上,要想表达更精确,需要继续扩展编码。但这样的编码没有规律可循,容易造成混淆。
步骤三:为了克服穷举无规律可循的问题,可以考虑按标志位编码,将1个byte从右到左(或者从左到右)依次按位赋予含义,如下表所示:
以上表中,第0位表示等腰,第1位表示等边,等等。各位取1表示该状态为真,其中第7位表示该状态是否为三角形,是则为1,否则为0。那么便可很方便的表示几种状态同时存在,如10010001则表示这是一个直角等腰三角形。剩余的第6位和第5位可以留作错误编码,比如用于表示两边之和小于第三边等。
问题(2)解法:
作为一名测试者,要测试一个程序,具体的工作就是要分析程序可能出现的漏洞,并编制测试用例来有针对性的进行测试,观察程序是否正常工作。通常测试可以分为以下三个方面:程序在正常输入下的功能测试,测试程序在非法输入时的表现,测试程序对边界值附近输入的处理。
设计三角形的测试用例,如下:
预期输入:a,b,c (三个数值,代表三条边的长度)
预期输出:采用问题1中的编码输出,即非三角形或三角形的具体状态
1. 程序在正常输入下的功能测试,如下表所示:
注:须要交换三边长度顺序以确保对每条边的判断,如对用例1还须要测试(1,2,4)及(2,4,1)等5组用例(后面的用例应做相同的操作)
2. 测试程序在非法输入时的表现,如下表所示:
3. 测试程序对边界值附近输入的处理(假设1<=a,b,c<=100),如下表所示:
注:中间值通常能被正确处理,而边界值则往往因为判断语句使用<、>、<=、>= 而引起错误
以上表格中尚未包括换位枚举。读者可以扩充滴。。。。
相关文章推荐
- PythonChallenge闯关游戏——第11-15关
- ASP.NET动态引用WebService接口
- 一个简单的界面,使用wxpython
- Google Guava 库用法整理
- [leetcode]Reorder List @ Python
- Java NIO Channel
- asp.net mvc 将Enum绑定在DropDownList了
- Image processing of watermark with blind extraction
- C语言基础—基本运算
- 代码生成器
- PHP内核探索:Zend虚拟机
- 编程工具的一些问题
- Eclipse建立自己的user libraries
- java设计模式之——策略模式
- PHP内核探索:PHP脚本的执行细节
- 程序学习方法
- eclipse中使用SVN进行合并
- java内部类的分析
- 使用Eclipse中提供的Refactor(重构)工具
- PHP内核探索:如何执行PHP脚本