2.3 如何做好软件测试分析与设计
那么如何做好软件测试分析与设计呢?根据上面的阐述,我认为有两个方面:能力+基因。基因是先天决定的,在这里看一下如何提高能力。
探索式测试在第1.2.2节提到,它是提高软件测试分析和设计的非常重要的手段之一。正如第2.1节所述,软件测试分析和设计的重要目的是发现软件缺陷,目前自动化测试的主要目的还是在回归测试上,回归测试的主要目的是:产品加入了新的模块,修改了一批缺陷或者重构后是否会对以前测试通过的测试用例造成影响,也就是说提高对改造后软件质量的信心。而对于产品中的新特性中是否存在缺陷,主要还是要通过探索式测试来发现。探索式测试是集测试分析、测试设计、测试执行于一体的测试方法,采用精益的方法,阶段性进行,每次测试完毕需要进行总结,从而进行下一轮的测试活动,见图1-11所示。
如果企业有没有实行探索式测试,建议你能够每天拿出半到一个小时对你现在的产品进行探索式测试,对于提高你的测试和分析水平是非常有必要的。
在2.2.1-4节讲到,可以采用头脑风暴进行发散式思维。头脑风暴可以汇集集体的力量,从而分析并设计出更全面的测试用例。建议团队每周能够拿出半个小时就某一话题(比如文件上传、登录、注册)进行一次基于头脑风暴的软件测试分析与设计。
前面已经提及阅读别人写的测试用例与缺陷报告,一方面可以提高对业务知识的理解,另一方面也可以借鉴别人的思维从而提高自己的测试分析与设计水平。
掌握系统所涉及的IT知识,可以更好的分析和设计测试用例。比如了解第3.3.6节提到的结构优化中的虚拟节点知识。如果系统设计师想仅仅通过简单地向分布式网络中添加节点来提高网络的性能,你就可以告诉他如果不加虚拟节点,黏连效应会带来缓存雪崩,达不到性能提高的愿景。
IT时代,打电子类游戏不管对于成年人还是青少年都是作为消遣活动的一种手段(当然,对于青少年还是需要监护人进行有效的监控)。寻宝游戏、密室逃脱游戏和找不同游戏这三种游戏是对提高软件测试分析与设计的思维能力是非常有益处的。
在通常的项目过程中,虽然采用了测试的左移和测试的右移,在软件开发完毕后仍旧需要进行一次软件测试执行的。低效的软件研发过程往往会挤压测试的时间,测试在某些情况下都会面临时间短,任务重的情形。回过头来看一下著名的质量三角形,如图1-15所示。
时间短,任务重。时间这个点就缩小,为了保证质量有增大Cost(加入更多的测试人员或者使用高效的测试工具)和减小Scope(减少测试范围)这两种方式来实现。Time 减少,SCOPE、COST不愿意变,质量势必会下降。
对质量的要求要根据软件产品的类型而定,航空航天、军工、杀毒防毒软件等这些产品,对质量要求高,软件退出准则就严格。互联网企业可以采用灰度发布,用户测试的方式,对质量要求相对低一些,软件退出准则就可以松懈些。
在时间短、任务重的情形可以采用探索式测试和基于风险的测试来解决。
•探索式测试。
80%的缺陷集中在20%的模块,这是帕累托法则(又名80/20法则)在缺陷在模块分布上的体现。通过前几轮的探索式的测试,一般可以发现缺陷集中的模块,在时间短、任务重的情形下需要在下面的测试中集中火力对这20%的模块实现高密度的集中式测试,从而降低产品总体缺陷数。
•基于风险的测试。
把测试用例按照风险进行分级(风险等级=危害程度×发生概率),优先测试风险等级高的测试用例,这对于时间短、任务重的情形下也是一种很好的解决方法。
古人云:“熟读唐诗三百首、不会作诗也会吟”。笔者认为软件测试分析与设计也存在最高境界,就是经过快速了解产品业务知识后,通过经验结合自觉快速分析设计出高效的测试点。要达到这种层次最高境界,不是一天两天就可以通过学习达到的,则要通过十年、二十年甚至更长时间的沉淀来获得。一个人最可怕的就是十年还在原地踏步,这就需要认真把握每一天,不断地学习和积累,不断地思考与实践。经验(Experience)=时间(Time)+努力(Strive)+学习(Study)+基因(Gene)。这4个方面缺一不可。
作为本章最后,笔者还要再次提及一下“纯软件测试”的理念。武林大侠李小龙先生摒弃了各家武林门派中华而不实的招数,认为武术就是攻与防两方面,创建了自己的截拳道。我认为作为软件测试,关键在于测与试两个方面。所谓测,即验证需求:对已知的需求进行验证;所谓试,即发现缺陷,发现未知的缺陷。对于已知的已知缺陷通过测来发现,对于已知的未知缺陷与未知的未知缺陷通过试来实现。在第6.2.1-4节讨论自动化测试的时候还将提及这个概念。
本章没有专门讲软件测试分析和设计的具体方法,而是给了大家一些思路。比软件测试知识更重要的是软件测试思想。
2.6 本章总结
2.6.1 介绍内容
•软件测试分析与设计重要性分析
•做好软件测试分析与设计的能力
Ø思维能力
u逻辑思维
u逆向思维
u发散思维
u整体思维
u简单思维
u极端思维
Ø学习能力
uIT知识
u业务知识
u从失败获取知识
u经验积累和分享
Ø其他能力
u沟通能力
u提问能力
u基因能力
•如何做好软件测试分析与设计
Ø探索式测试
Ø头脑风暴
Ø阅读测试用例与缺陷报告
Ø学好IT知识
Ø锻炼思维的游戏
•如何处理时间短、任务重的情形
•软件测试分析与设计的最高境界