软件测试不仅仅限于白产品说明书和程序当做黑盒子来对待,如果具有编程经验,即使只有一点,也可以对软件的体系结构和代码进行测试。
在某些行业中,此类验证不如黑盒测试通用。然而,如果测试军队、金融、工业自动化、医药类软件,或者有幸在组织严格的开发模式下工作,在代码的级别验证产品就是例行公事。
如果在测试软件的安全问题,那么这是必须进行的。
一、静态白盒测试:检查设计和代码
静态测试是指测试非运行部分——检验和审查。
白盒(或者称为透明盒)测试是指访问代码,能够查看和审查。
静态白盒测试是在不执行软件的条件下有条理的仔细审查软件设计、体系结构和代码、从而找出软件缺陷的过程,有时称为结构化分析。
(1)进行静态白盒测试的首要原因是尽早发现软件缺陷,以找出动态黑盒测试难以发现或隔离的软件缺陷。在开发初期让测试小组集中精力进行软件设计的审查非常有价值。
(2)进行静态白盒测试的另外一个好处是,为黑盒测试员在接受软件进行测试时设计和应用测试用例提供思路。
对于静态白盒测试最不幸的就是常常不能善始善终。许多小组错误地认为这样耗时太多,费用太高,没有产出。
二、正式审查
1、正式审查(formal review):就是进行静态白盒测试的过程,正式审查的含义很广,从两个程序员之间的简单交谈,到软件设计和代码的明细、严格检查均属于此过程。
2、正式审查有4个基本步骤:
(1)确定问题。
审查的目的是找出软件的问题——不仅是出错的项目,还包括遗漏项目。
全部的批评应该直指代码或设计,而不是其设计实现者。
(2)遵守规则。
审查要遵守一套固定的规则,规则可能设定要审查的代码量(通常有数百行),花费多少时间(数小时),哪些内容要做评价等。
(3)准备。
每一个参与者都为审查做准备,并尽自己的力量。根据审查的类型,参与者可能扮演不同的角色。
(4)编写报告。
审查小组必须做出审查结果的书面总结报告,并使报告便于开发小组的成员使用。
进行正式审查要按照已经建立起来的过程执行。随意“聚在一起进行代码审查”是不够的,实际上还会造成危害。
如果过程随意,就会遗漏软件缺陷,参与者很可能感觉这样做是在浪费时间。
如果审查正确地进行,就可以证明这是早期发现软件缺陷的好方法。
3、除了发现问题,坚持正式审查还有一些间接效果:
(1)交流
正式报告中未包含的信息得以交流。
(2)质量
程序员的代码经过逐个功能、逐行代码仔细复查,常常会使程序员变得更加仔细。
(3)小组同志化
如果审查正确进行,就会建立软件测试员和程序员对双方技艺的相互尊重,并且更好地了解相互的工作及需求。
(4)解决方案
尽管是否讨论解决方案取决于审查的规则,但是解决方案应该用于处理严重问题。
4、同事审查
召集小组成员进行初次正式审查最简单的方法是通过同事审查的方式,这是要求最低的正式方法,有时称为伙伴审查。
同事审查常常仅在编写代码或设计体系结构的程序员,以及充当审查者的其它一两个程序员和测试员之间进行。
5、走查
走查(Walkthrough)是比同事审查更正规化的下一步。
走查中编写代码的程序员向5人小组或者其它程序员和测试员组成的小组做正式陈述。
审查人员应该在审查之前接到软件拷贝,以便检查并编写备注和问题,在审查过程中提问。
审查人员之中至少有一位资深程序员是很重要的。
6、检验
检验(inspections)是最正式的审查类型,具有高度组织化,要求每一个参与者都接受训练。
检验和同事审查和走查的不同之处在于表述代码的人——表述者(presenter)或者宣读者(reader)——不是原来的程序员。
其余的参与者称为检验员(inspector),其职责是从不同的角度审查代码。
有些检验员还同时被委任为会议协调员(moderator)和会议记录员(recorder),以保证检验过程遵守规则及审查有效进行。