2.6 软件白盒测试
图2-14 软件测试金字塔
由于白盒测试是单元测试的主要内容,所以白盒测试在整个软件测试过程中很重要。
白盒测试覆盖包括语句覆盖、分支覆盖、条件覆盖、分支/条件覆盖、MC/DC(修订的条件/判定)覆盖、路径覆盖、控制流覆盖等,这些是白盒测试技术中基本的概念,将在本节中详细介绍。在介绍之前,看一下本节中将要用到的一个程序,如图2-15所示。
这里包括如下。
3个语句:S1、S2、S3。
2个判断:M1、M2。
4条路径:L1:ace、L2:abe、L3:acd、L4:abd。
8个条件:T1:x>3、T2:z<10、T3:x=4、T4:y>5、F1:x<=3、F2:j>=10、F3:x<>4、F4:y>=5。
2.6.1 语句覆盖测试
语句覆盖(Statement Coverage)又叫行覆盖(Line Coverage)。段覆盖(Segment Coverage)。基本块覆盖(Basic Block Coverage),这是最常用、也是最常见的一种覆盖方式,就是度量被测代码中每个可执行语句是否被执行到了。这里说的是"可执行语句",因此就不会包括像C++的头文件声明、代码注释、空行等。非常好理解,只统计能够执行的代码被执行了多少行。需要注意的是,单独一行的花括号{}也常常被统计进去。语句覆盖常常被人指责为"最弱的覆盖",它只覆盖代码中的执行语句,不考虑各种分支的组合等。假如只要求达到语句覆盖,那么换来的测试效果的确不明显,很难发现代码中更多的问题。
试是发现未知的缺陷"。在某种意义上这也有一定道理。
本章主要介绍目前基于经验测试法中流行的方法:探索式软件测试法。其中包括。
探索式软件测试中用到的一些方法。
基于场景的测试。
3.1 探索式软件测试中用到的一些方法
笔者在本节中不涉及探索式软件测试的理论、思想以及一些相关的模型。关于这些理论、思想和模型,请参看参考文献【6】、【8】和【9】。笔者仅将本人在多年软件测试工作中用到的一些探索式软件测试方法介绍给大家,希望能对从事软件测试的同行有所帮助。
本节描述的软件测试产品对象大多以基于B/S结构的产品为主,少部分会考虑其他类型的产品。
3.1.1 表单输入的测试探索
表单输入在产品中是经常出现的,如要成为某个网站的会员,就要注册一些个人信息,然后通过表单页面上的【提交】按钮,存储到数据库中。对表单元素输入的测试探索中经常需要考虑以下两个方面:
对超长字符或不符合格式的字符(如:电话号码、Email)输入的探索。
对保留字符的输入探索。
1.超长或不符合格式的字符输入的测试探索
由于表单输入的数据最终一般都存入到数据库中,所以对于输入的数据,一定要对其的长度或者类型进行限制,一个正常的操作方法为:输入一个超长或不符合格式的字符串,一般有以下4种处理方式:
(1)超长或不符合格式的字符在输入界面中被锁定:如表单要求输入的字符串最长长度为40,当输入第41个字符时,页面是不允许输入的;再如,表单只允许输入阿拉伯数字,如果输入了一个字符"A",页面也是不允许的。
(2)当在表单内输入超长或不符合格式的字符:在鼠标失去焦点后,利用Ajax和JavaScript技术立即给出错误提示。
(3)超长或不符合格式的字符在输入界面中被输入:但在提交表单时,输入界面会提示表单中有超长或不符合格式的字符,并且表单不允许被提交。
(4)超长或不符合格式的字符在输入界面中被输入:但在提交表单后,会在另外的页面中提示表单中有超长字符或不符合格式的字符被输入,并且表单不允许被提交。
如果在表单输入了超过长度或不符合格式的字符串,提交后界面没有任何提示信息,甚至出现系统崩溃,或者出现数据库发生异常的英文日志显示在页面上,那么这显然是一个Bug。另外,如果输入了一个超长或特殊字符串,符合上述4种处理方法,这时可以通过开发工程师查看对应的代码,尤其是数据存储到数据库之前,程序是否对输入字符的长度或类型进行再一次校验,这是从安全性角度考虑的。举个例子:输入页面的文件名为table.html,后台存入数据库操作的文件名为insert.jsp。一个黑客为了破坏这套系统,它用其他软件制造了一个表单页面代替table.html。在他的页面中输入超过长度或者不符合格式的数据,然后通过insert.jsp提交到数据库中,由于insert.jsp没有对输入字符进行校验,从而造成系统瘫痪。这种案例经常会遇到。
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。