第2章 软件测试分析与设计
2.1 软件测试分析与设计重要性分析
现在软件测试界对软件自动化测试非常重视,每年有各种各样的软件测试大会,而这些大会的关注点都集中在软件自动化测试,对软件测试自动化开始重视了,这是一件好事情,本书下篇也都是介绍软件测试自动化的。但是另一方面,据权威报告,2019年在中国仅有5%的软件公司做到了完全意义上的软件自动化测试,这说明了什么?请读者自己思考一下。读者都知道软件开发,不管采取什么样的开发模型,都离不开分析、设计、编码、测试和部署5个环节,而软件测试也可以分为测试分析、测试设计、测试准备(包括测试数据的准备、测试代码的开发、测试环境的搭建等几个方面)、测试执行和测试总结。而现在AI技术刚刚起步,虽然一些大厂开始尝试用AI技术来进行软件测试分析、设计与执行,但是效果并不理想,MBT(Model Base Test:基于模型的软件测试)落地也非常困难,自动化软件测试也仅仅在软件测试执行方面起到了非常重要的作用,虽然随着DevOps概念的提出,软件测试的左移和右移也被提出,但是发现缺陷仍旧是软件测试的关键目标,而大部分缺陷还是需要靠人工测试来完成,软件自动化测试主要作用也仅仅在回归测试起到关键的作用。一方面在开发自动化软件测试代码之前,肯定也进行手工测试,否则自动化测试中的断言是无法获知的;另一方面自动化软件测试对被测程序也要进行分析和设计,所以软件测试分析与设计是软件测试的灵魂,是一个不可被忽略的要素。
正如第一章所述,软件分析有6W2H法则、CPIE模型、KART模型、SBTM模型、HTSM模型、ACC模型、MFQ模型和PPDCS模型。软件设计包括传统的软件测试和基于质量的软件测试方法。这些测试分析和设计技术是非常重要的,但是仅仅通过这些法则、模型、技巧就够了吗?就能够做好软件测试分析与设计工作吗,答案是否定的。比如下面这种情形大家可能都遇到过,产品做得很好,但是《产品安装手册》写得非常粗糙,团队虽然知道DevOps提倡自动化发布产品,但是由于各种因素限制,本企业没有实现,产品上线仍旧需要运维工程师通过研发人员书写的《产品安装手册》进行产品安装和升级工作。然而低质量的《产品安装手册》严重阻碍了运维工程师的工作,,早就提交的产品,客户在一段时间内没有得到使用。这种情形下问题出在哪了呢?也许产品的自身质量非常的好。这就是研发人员没有把运维工程师也作为客户,仅仅把最终的产品使用者才作为客户,从而没有对《产品安装手册》认真测试过。本章专门对软件测试分析与设计进行思考,使其可以真正落地运作。
2.2 做好软件测试分析与设计的能力
现在讨论一下做好软件测试分析与设计工作所需要的能力。这些能力包括思维能力、学习能力和其他能力。
2.2.1思维能力
思维能力包括逻辑思维、逆向思维、发散思维、整体思维、简单思维和极端思维能力。
1. 逻辑思维
逻辑思维是一种建立在数学基础上的思维方式,是一种科学的思维方式。逻辑思维是基于大家都共识的公理基础上,通过逻辑推演的方式来思考问题的思维方法。比如有一个问题:地球之外如果有智慧生物,可否与地球人进行交流的?有一种回答:地外智慧生物与地球人就如同地球人与地球上的蚂蚁一样是不可以进行交流的。这种方式属于典型的类比式思维,是一种不严谨的思维方式,这里的致命点在于为什么能把地外智慧生物、地球人与蚂蚁在一起进行讨论,三者其实是风马牛不相及的东西。而逻辑思维方式是先建立两个公理:1)数学是智慧生命共有的语言,2)如果地外智慧生物向地球人发射数学信息,那么地外智慧生物与地球人就可以沟通了。基于这两点共识基础上,如果地球人收到了2、3、5、7、11… 质数序列,或者3.1415926…,就说明地外智慧生物与地球人开始沟通了。
通过逻辑思维方式对于学习业务知识是非常有用的,笔者以前测试过会计软件,在会计业务中收入与花费一定要保持平衡是一个基本规律,基于这个规律就可以推出各种业务知识了。
2.逆向思维
逆向思维也是作为测试分析与设计的时候需要掌握的技能,最经典的逆向思维故事就是司马光砸缸。一个小朋友不小心掉入了水缸,按照通常思路肯定是想办法把缸里的小朋友救出来,但是聪明的小司马光砸缸急中生智,想出把缸砸破,让水流出来,这样落缸的小朋友起码可以先不被淹死,然后把缸砸得更破,从而救出那个小朋友。
在电子商务系统中先选择商品,然后下单,最后支付。在测试这个场景的时候,可以考虑以下几种情形,系统会如何应答。
•A用户下单后没有支付。
•B用户没有选择商品,就进入下单的界面(通过拷贝粘贴URL)。
•C用户下单,支付过程中发现没有绑定任何银行卡并且支付宝、微信钱包也都没有钱。
•…
3. 发散思维
发散性思维其实也是逆向思维的一个扩展,如图2-1所示,是对上传文件功能的测试思维导图。
图2-1 测试文件上传
首先考虑正常的文件上传,然后可以从文件大小、文件格式、与文件名及目录及安全性几方面考虑。
•文件大小(比如10K-20M)。
Ø文件比规定的大小要大,考虑边界值选择上传的文件大小为20M、20.1M。
Ø文件比规定的大小要小,考虑边界值选择上传的文件大小为10K、9.9K。
•文件格式(比如JPG、GIF和PNG三种格式的图片文件)。
Ø选择上传的文件名为a.exe上传。
Ø选择上传的文件名为a.exe a.txt,打开写入“这是一个加图片文件”,然后把文件改为a.jpg后上传。
Ø选择上传的照片文件,名为pic.jpg,改名为pic.txt后上传。
•与文件名及目录。
Ø选择文件,把文件删除,点击【上传】按键。
Ø选择文件pic.jpg,把文件名改为my.jpg,点击【上传】按键。
Ø选择文件,把服务器上的文件所处的目录删除,点击【上传】按键。
•安全性。
Ø在上传过程中,把pic.jpg改为pic.txt。
Ø在上传过程中,把pic.txt改为pic.jpg。
Ø在上传过程中,把pic. jpg改为pic.exe(假设服务器为Windows Server 2019,pic.jpg是一个病毒文件)。
发散性思维设计测试用例可以自己独自进行,但是笔者建议最好每个小组每周就一个专题进行半小时的通过头脑风暴的方式进行一次。
4. 整体思维
整体思维就是看待一个被测产品,不要只见树木不见森林,而要对产品整体进行测试。中国有一家非常有名的通信公司,当时它们的终端产品、核心网、基站单独工作都没有问题,但是整合起来一起工作就发现问题了,于是成立了整体测试部门,笔者也正是这个机会进入了这家企业。另外比如一个电子商务系统,可以建立这么一个测试用例。
(1)注册一个用户。
(2)利用这个用户登录系统。
(3)修改登录密码。
(4)用修改过的密码重新登录。
(5)通过分类选择一些产品放入购物车。
(6)通过查询选择一些产品放入购物车。
(7)进入购物车,修改产品A和产品B的数量。
(8)对产品A下单。
(9)支付产品A。
(10)修改支付密码。
(11)对购物车内的产品B下单并且用修改后的支付密码支付。
(12)确认其中产品A。
(13)对产品A写评语。
(14)对产品B提出退货。
(15)确认产品B退货申请。
(16)退货成功,确认钱是否退回。
如果各位阅读过James,A.Whittaker的《探索式软件测试》[6]一书,整体思维观念与此书中的“最长路径测试法”是一致的。
5. 简单思维
简单思维法就是用最简单的方法去处理问题。有一次楼道一位朋友听说我是学计算机的,他们家的打印机突然坏了,让我去看一下,我花了一个多小时终于把问题找到了,造成打印机不能工作的原因竟然是没有插上PC机,我想了许多复杂的情形,就是没有想到这一点。在软件测试中比如测试表单提交是否测试一下放弃操作,测试是否接受协议的时候选择不接受等等。其实仍旧在James,A.Whittaker的《探索式软件测试》[6]一书,提到的旅馆区测试也就是这种思维方式。
6. 极端思维
极端思维正是与简单思维相反的一种思维方式,比如测试转账过程中突然把服务器的电给断了,或者把客户机或服务器网给断了,查看会发现什么情形。前几年就有一个报道,某一用户在通过Internet在电脑上通过一家电子商务网站支付一个商品的时候突然断电了,当这个用户再次打开电脑,连上网进入到这家电子商务网站,发现钱已经从自己MAST卡中扣除,但是电商处显示支付失败,这笔钱就真空消失了。