「质量」这个名词在许多领域都会被提到,也没有完全相等与严谨的定义。不过在 RUP 所规范的软件开发领域里,我们认为「质量」应该满足以下条件:一、产品应该按预定计划流程完成生产;二、产品应该满足或超越预定需求;三、前述需求应该可以被预定的方法予以衡量。
「测试」在整个开发流程里所扮演的角色与介入方式。这篇文章要介绍该用什么方法或衡量工具,才能让产品满足或超越预定需求。
测试的五个面向
「测试在大多数人的认知中,大概就是测试「软件产品的功能」罢了,而且由于时间有限,约莫只要把「功能测试」确实做完也就很不错了。不过,在 RUP 准则里,我们认为合乎「质量」的测试应该做到下述五个面向的工作:分别是功能测试、可靠度测试、效能测试三个基本测试工作,及使用性测试与支持性测试两个延伸性的测试工作。
· 功能测试 ( Functional testing ):这是最基本的测试。主要目的在于精确检测系统在各种使用环境( usage scenarios )中的运作与反应行为,验证产品是否确实符合预定需求。此外,它也包括对系统特性( features )及安全性( security )的测试。
· 可靠度测试 ( Reliability testing ):这是第二个测试面向,目的在检测系统在预设环境下的运作是否正常与稳定。例如,有些系统会随着运作时间拉长而产生渐次延迟等各种不正常的现象,测试人员必须找出导致异常的原因,确保系统运作是「完全可靠,不会倾向失误 ( 包括系统崩溃、响应停摆、占用内存等 ) 情形」。 以下是建议进行的检测工作项目,包括系统结构测试 ( 测试程序代码的语法及处理程序是否正常、简洁,而且不会造成延迟或瓶颈 ) 、压力测试 ( 以严酷环境来检测出系统的运作上限 ) 、竞争测试 ( 同时有两个以上要求被提出时,系统面对这种竞争要求的真实反应情形 ) 、容量测试 ( 系统处理大量数据的反应行为 ) 等。
· 效能测试 ( Performance testing ):目的在于检测当系统运作于上述两个条件 ( 功能与可靠度 ) 的环境下,其面对平均负载与尖峰负载时的真实反应能力。简言之,就是测试系统的真正效能表现。效能测试包括标竿测试 (benchmark tests) 、负载测试 (load tests) 与效能表现测试 (performance profile tests) 。
上述三种测试面向,是我们认为要完成一项「质量产品」最基本的测试工作。此外,也建议再进行以下两种测试。
· 使用性测试 ( Usability testing ):目的是检测系统是否可以让最终使用者觉得方便好用。因此这项测试会从使用者角度出发,评估系统在人类行为、美观、操作接口、文字说明、辅助与导览工具、训练教材等涉及使用者操作行为方面的表现。
· 支持性测试 ( Supportability testing ):为检测系统是否可以部署在预设的环境,并评估其在被使用时的维护与后续支持能力。此外,这个测试也包括安装测试 (installation tests) 与环境调校测试 (configuration tests) ,可以检测系统在什么样的硬件环境下会运作得更好。
从上述五个面向的测试可以清楚看出, RUP 准则几乎把所有「设想之内」与「意料之外」的情形与环境都纳入测试工作范围。目的就是要透过一套严谨的程序质量 (Process Quality) 规范,确保产品质量 (Product Quality) 。
测试工作相当多样且复杂,要完全做好并不简单;诀窍就在于善用工具。
善用工具
大家都清楚善用工具的好处。例如,使用电表而不是自己的手去测量电压或电流,或是当朋友之间争论到底谁比较胖,除了找第三者提供「目测答案」,还会利用「体重计」或「脂肪仪」来做精准的量测,如此才能取得有公信力的答案。
上述都是使用工具的范例。同样的,软件测试工作也必须运用合适的工具。测试是相当繁琐复杂、且不容出错的工作,测试人员需要模拟、检测、追踪、报告的各种环境与控制变因之庞杂,其实已经超出人类大脑的想象与运算能力,而且任何一项测试行为都可能因为缺少严谨控制的环境或变因而被扭曲,甚至导致完全相反的结果。此时唯有具备精准控制与监视能力,而且不会疲劳、偷懒、发脾气、生病的科学性与专门工具,才能完全胜任这些工作。
测试的真谛
「合格的测试」才能确保合格的产品,而且也唯有合格的产品才是开发团队与客户所冀求的,这就是测试工作的真谛。所以,当你花了一千亿美元经费建造一艘航天飞机之后,请不要以一千美元的草率测试方法毁了它。