本篇共分以下几个章节。
第1章,软件测试的基本知识:首先讲解一些软件测试的基本知识,如果你对软件测试的基本概念已经非常熟悉了,那么就可以简单浏览,甚至跳过本章的内容。
第2章,传统的软件测试的设计方法:本章主要介绍软件测试中最经典的5个黑盒测试方法(等价类/边界值、决策表、状态转换图、决策树和正交测试法)和7个白盒测试(语句、分支、条件、判定/条件、MC/DC、路径和控制流覆盖)方法。
第3章,探索式软件测试设计方法,本章主要介绍基于经验测试法中目前最流行的探索式软件测试方法。
第4章,基于风险的软件测试。本章主要介绍基于风险的软件测试方法以及风险级别的确定和调整。
第5章,专项软件测试设计。本章主要介绍性能测试和嵌入式软件的测试方法。
第6章,云计算、大数据的软件测试方法:本章主要简单介绍基于云的产品、大数据产品应该如何测试以及应注意的事项。
1.1 软件测试的基本理论
软件测试的基本理论是软件测试的基础。在本书的开始,我们先学习和回顾一下软件测试的基本术语,这样可便于更深入地探讨软件测试的其他知识。
1.1.1 软件测试的定义
关于软件测试的定义有很多,这里主要介绍以下几个。
定义一:"软件测试是为了证明程序有错,通过运行程序发现其中存在的问题。"这个定义是在软件测试的第一部权威书籍《软件测试的艺术》中定义的,参见参考文献【1】。
从这个定义中可以看出。
·软件测试可以证明软件有错。
这是显而易见的。通过测试,可以发现软件中的缺陷,这也证明了软件中存在错误。
·软件测试不能证明软件没有错。
没有一个软件是不存在缺陷的,通过软件测试,我们可以找到软件中的错误,但是不可以找到软件中的所有错误。
这个定义是目前比较流行的软件测试定义。
定义三:"软件测试是验证软件产品是否满足用户显性或者隐性需求的活动。"
这个定义是基于质量的定义而延伸出来的。质量的定义为"满足用户显性或者隐性需求的活动",所以这个定义可以简化为"软件测试是验证软件产品是否满足质量的活动"。另外,这里定义中的"隐性需求"是指用户需求规格说明书中没有写出来的,如软件的易用性、可靠性、可维护性、效率等。
定义四:"软件测试包括验证(Verification)和确认(Validation)两种类型。"验证是指后一步是否满足前一步的需求,在软件开发过程中可以理解为需求分析是否满足用户需求,设计是否满足需求分析,开发是否满足设计。而确认是指最终产品是否满足用户的最初需求,如图1-1所示。
图1-1 验证与确认
1.1.2 软件测试术语
1.冒烟测试(Smoking Testing)
在大部分软件测试工作中,单元测试与集成测试是由开发工程师完成的,而系统测试是由软件测试工程师完成的。为了提高软件测试工程师测试的有效性,当软件测试工程师拿到开发工程师提交的版本后,就需要进行一次冒烟测试。冒烟测试主要指测试软件版本中的主要功能是否实现,速度很快,一般一到两个小时即可完成。夸张地说,抽一根香烟的时间就可以完成测试。还有一个说法来源于硬件测试,一般硬件组装完毕,上电后,如果电路出现冒烟故障,则不必进行更深入的测试。在软件测试中,如果冒烟测试没有通过,就需要返回给开发工程师重新修改后再测试。
2.回归测试(Regression Testing)
回归测试又称衰竭性测试。为了确保修改或增加的功能没有给软件其他未改变的(或者以前测试通过的)部分带来影响,软件测试工程师进行每轮测试时,需要对先前测试过的模块再进行测试,这种测试称为回归测试。回归测试最好使用自动化软件测试工具来实现。关于回归测试,如图1-2所示。
图1-2 修改部分与新功能对原有功能的影响
3.白盒测试(White Box Testing)
白盒测试是通过分析组件/系统的内部结构进行的软件测试。白盒测试用例分析方法包括语句覆盖、分支覆盖、条件覆盖、条件/分支覆盖和路径覆盖等技术。白盒测试也可以在系统测试中进行(关于白盒测试的方法,本篇2.6节会详细介绍)。
4.黑盒测试(Black Box Testing)
黑盒测试是基于系统功能或非功能规格说明书来设计或者选择测试用例的技术,它不涉及软件内部结构。也就是说,测试工程师不需要了解程序内部是如何实现的,只需考虑输出内容的特性对应输入内容的要求。黑盒测试也可以基于代码来实现,如通过输入函数的参数和返回值来了解被测函数的功能是否得到实现。
案例1-1:函数级别黑盒测试。
函数float calcualteSimilty(String a, String b),返回0.00~1.00小数点精度为两位的浮点数。比较字符串a,b的相似程度,0.00表示一点不相似,1.00表示完全相似。可以用下面的测试用例来实现函数级别的黑盒测试,特别声明,这里不需要了解函数内部是如何实现的,只关心函数输入与输出的对应关系。测试用例如下:
calcualteSimilty("a","a"); //1.00 calcualteSimilty("a","z"); //0.00 calcualteSimilty("azza","zaaz"); //0.00 calcualteSimilty("",""); //1.00 calcualteSimilty(null,null); //1.00 String s="this is a very long string,include 100 words…" calcualteSimilty(s,s); //1.00 calcualteSimilty("中国人","外国人");//0.67 calcualteSimilty("@","@"); //1.00 calcualteSimilty(""," "); //1.00 … |
5.单元测试(Unit Testing)
单元测试又称组件测试,是对单个软件组件进行的软件测试【与IEEE610一致】。单元测试一般采用软件测试驱动与桩的技术。
案例1-2:单元测试。
对图1-3的模块B进行单元测试如下。
本文选自《软件测试技术实战-设计、工具及管理》第一章,本站经人民邮电出版社和作者的授权。
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。