前言
软件测试在软件诞生的那一天就开始了,越来越多的公司和组织获得了软件测试的巨大回报,这是提高软件质量最有效的方法,也是提高公司产品质量的重要手段。
曾经一个朋友聊天时说过,一个90年代的程序设计师和一个90年代的测试工程师,那么到了我们现代的这个社会,程序设计师可能不知道如何下手,但是测试工程师还是可以按照他的思路来测试这个产品(对于较简单的非网络软件)。
起初听到这个事情很不以为然,但是仔细坐下来好好想想,这里面隐藏着一个软件测试方面的巨大的难题。那就是我们的软件测试方法一直都没有改变过,曾经很多人提出过这方面的理论和技术,但是很多都是以失败告终了。那么为什么软件测试改进这么难,编程语言在层出不穷的变换着,唯独测试方面停滞不前。仔细想一想,是因为软件的多样性,曾经有学者提出建立像维基百科那样,建立一个测试百科,由世界各地的测试工程师上传自己的测试用例,也提出过携带环境测试等等一些理论。所以我们对软件测试新方法迫不及待。
第一节 软件失效
当我们看到这个名词的时候,我相信很多测试工程师都会有同感,在你们的工作过程中发现过很多软件失效,“人类本身就是一个麻烦的制造者”,我们不仅扪心自问,“我们是否可以真正以来软件处理这些重要的全球性任务?对于许多灾难“船只抛锚”、“火箭爆炸”、“金钱损失”,甚至于“夺走人类的生命”。人类并不完美,难免会犯错误,任何人。
第二节 商业中的软件测试
如今软件测试已经系统化的应用到了商业软件测试中,但是在真正的测试中往往是这样的,当我们测试到一定的程度的时候,bug的数量不在增加了,这个使我们往往很苦恼,从测试用例中一遍一遍的运行,希望发现bug。但是很多的时候我们的测试经理很略了一个很大的方面,那就是测试工程师的心理,我们往往在很苦闷的寻找一个东西,往往变现的很是急躁,但是如果我们有了地图,或者有了提示,那么我们再寻找的话,往往会轻松很多。我们暂且称之为测试瓶颈。
这个时候我们需要转变测试方法,举一个例子,农民在喷洒农药的时候,时间长了,有一些虫子不但不死,反而对其的药性有抵抗力,这是时候农民往往回换一种药。软件测试亦是如此,这个时候我们就得换一种测试方面。这是软件测试原理中的第五条:杀虫剂侼论。
第三节 探索性软件测试
第一次看到这个词语你可能会感到惊讶,从此以上面我们可以看出,那就是在探索中测试。
那么我们从这里在分为:局部探索性软件测试、全局探索性软件测试以及混合探索性软件测试。
局部探索性软件测试:
进入这个话题之前,我们先看一个比喻性的招聘广告:
急需一名软件测试人员,该职位要求根据那些乱七八糟且只有半截的规格说明书(如果还能找到的话)来测试一个高度复杂且基本不带任何文档的软件产品。不要指望当初的开发人员,他们基本不愿也不会帮助你。该产品的使用环境广泛,支持多用户、多平台、多语言和其他很多必须支持的环境。我们不清楚如何定义它们,但是安全性和性能是最重要的,而且软件发布后不允许处任何问题,否则我们就玩完了。
我们必须承认上面说的都是反话。但是这里提到情况,我敢打赌他们是不会招聘到人的。
这个广告告诉我们,测试工程师必须有完整的产品规格说明书,必须清楚产品框架,必须了解产品的使用过程和功能。
测试就是有所改变,有所不变。
1)你必须判断软件运行的表现是否符合设计的预期?
2)当用户为了某个功能购买了软件,可是该软件时候实现了这个功能?
3)软件运行时,是否足够快,足够安全,足够稳定?
那么在局部探索性软件测试我们可以依赖于以下几种:
1)合法输入和非法输入
2)输入筛选器
3)输入检查
4)异常处理代码
5)默认输入或者用户提供的输入?
6)常规输入还是非常规输入?
7)使用输出来指导输入选择
全局探索性软件测试:
我们暂且把全局探索性软件测试看着一次旅行,你到了摸一个大城市之后,比如英国伦敦,这个城市中会分为:商业区、历史区、旅游区、娱乐区、旅馆区、破旧区。
1、商业区测试类型:
商业区是一个城市的经济核心,相比软件,商业区就是软件中最主要的功能。
那么我们有以下几种测试方法,
1)指南测试法
要求测试人员通过阅读用户手册并严格按照手册的建议执行。如果手册描述了摸个特性以及如何使用该特性时,测试人员要特别留心那些指令。其目的是尽量忠实地执行用户手册中描述的每个场景。虽然许多帮助系统只描述了软件的特性,而不涉及场景,但他们一般对于英爱使用那些输入以及操作用户界面来执行软件的特性都会给出具体的建议。因此这个测试法不仅可以验证软件确实实现了手册中所描写和各种软件特性,并且还能验证手册的准确性。
2)卖点测试法
在一个城市中都有这个城市的亮点,我们也通常叫做卖点,比如北京天安门,王府井。香港的购物街。拉斯维加斯的赌城。
在软件测试中,我们的卖点往往就是我们广告上面说的最多的那个功能。那么测试人员可以在这些软件的卖点上面去测试。
3)地标测试法
我们去一个第一个往往首先会看地图,然后再看指南针。
在软件测试中,我们可以把主要的功能标注出来,这就是“地标”,然后按照前后顺序,依次运行。
4)快递测试法
在商业去中数据的信息量往往占了很大的比例。
软件测试中,我们可以把一个输入数据作为快递,标记,跟着这个数据,直到整个生命周期。查看是否符合要求。
5)深夜测试法
我们往往在白天和网上会看到商业区的繁华,但是在凌晨以及深夜,那么这个繁华区往往会有另一番风趣。
软件测试中,就是在深夜运行这个程序,然后查看软件在深夜运行的记录。
2、历史区测试法
1)恶邻测试法
在我们旅游的城市,我们往往会根据导游的提示,有目的的去访问那里,但是,那些往往我们不去访问的地方往往是肮脏的。
那么在我们的软件里面,我们根据软件说明书,按照编辑给我们设置的路径去操作,那么这个时候我们假如打破逻辑,就会找出很多未知的缺陷。
2)博物馆测试法
博物馆是战士古董的地方,在软件里面,我们把一些老的代码比作这些代码,一些程序员在引入这些代码的过程中,往往没有修改就运行了,我们的测试目的是在这些老代码的基础上,看能不能在新的功能上正确的实现。
3)上一版测试法
这点类似于回归测试,我们在这里不相信阐述。
3、娱乐区测试类型
1)配角测试法
我们在关注某一个产品的时候往往关注了这个产品的主要功能,而忽略的次要功能,例如:我们再测一个数据页面显示的功能,当我们输入相应的数据,页面很好的显示出来的,那么我们再其页面的右下方发现了一个打印按钮,这就是我们此方法的用武之地了。
2)深巷测试法
我们再旅游的时候,有些地方总有一些游客特别想去,但是有些地方游客很是不愿意光顾,比如,垃圾回收站,废品处理站。
在软件里面我们也可以这样做,假如:我们再跟踪一个数据的时候,我们往往关注的是这个数据能不能很好的读取或者被运算,我们都忽略一个很大的误区,好的设计者会很好的运用变量的生命周期耳朵,即:当这个数据不再使用的时候,那么就应该销毁,不这么的做的后果就是,数据没有被及时回收,内存不能释放,造成内存泄露。严重的时候甚至影响系统运行。
3)通宵测试法
人假如几天几夜不合眼的话,那么工作效率就会变差。
软件也是如此,虽然是没有生命的,但是他的每个变量和元素都是有生命周期,让软件长时间工作,同时记录其运行日志。一旦发生崩溃或者异常,我们就能很快的锁定。
旅游区测试类型
1)收藏家测试法
测试人员应该确保每一个输出的结果,编辑一个表格来表示的他,然后从中找出破绽
2)长路径测试法
我们在软件中假如一个功能到另外一个功能中间要进行很多操作,也许在操作的过程中就能发现bug。
3)超模测试法
这个测试法要求测试人员能够关注UI的每一个细节,输出显示字符的大小,按钮的大小,字符的长短。
4)测一送一测试法
“buy one get one free”,很简单,我们再运行程序的时候,同时运行一个拷贝,那么我们再两个程序同时去争抢一个内存的时候,或者时候运行导入,两个程序就会争夺一个导入文件,那么这个时候程序往往就会出错
旅馆区测试类型
1)取消测试法
有些程序在软件运行的过程中是不让被取消的,那么我们可以做,虽然有点抢人所爱,我们可以在运行的过程中,单机关闭,直接断掉计算机电源,在进程中杀掉这个进程。
2)懒汉测试法
在有一些软件中,我们往往会碰到系统默认值,那么我们可以更改这些值或者删除或者使用特殊符号。观察系统异常。
破旧区测试类型
1)逆向测试法
比如在一个打印程序中,系统会让用户选择打印那一页,我们输入字母,观察系统是不是有这方面的处理能力。
2)歹徒测试法
运用非法输入
3)错序输入法
比如时间格式,我们不按照提示输入会怎样?
4)强迫症输入法
我们一边又一边的输入数据,强迫软件运行