某甲问道:「测试做太多的话,会不会使得bug解不完?」

    某乙回答:「还不简单。只要不做测试,没有bug.」

    上述对话,反应出许多软件工作人员对于测试的想法。对多数软件开发人员而言,测试大概是仅次于维护之外,令人讨厌的工作。对软件研发主管来说,测试是必要之恶:做得不够后患无穷,做得过多又增加成本,延误商机。因此,如何能够规画与执行一个经济有效的测试工作,当是软件研发主管们须研究的一个课题。

    软件测试的困难,在于它不仅是产品的测试,更是产品设计程序的检验。由于关乎设计的测试,准则不易寻找,经验未必得以再用,他山之石也有应用的局限性,因此难度颇高。欲提高测试的效益,有赖全盘的规画,确实的执行,与事后的检讨改进动作。许多小型软件研发单位,对于软件测试并不重视,但从许多稍具规模的软件公司均配置常设测试人员,乃至于测试品保部门来看,测试工作显然有其学问与价值的。

    测试工作没有佳方法可依循,是因为不同的软件所需的测试手段不同。譬如小型软件与大型系统的做法不同;订制软件与软件包的要求不同;系统软件的测试往往无法采用应用软件所使用的技巧;游戏软件与库存系统有其各自需面对的测试标的。因此,测试人员必须因应软件的特性与资源的限制,加上过去相关的经验,规画适合的测试方式。并随着经验的累积,不断改进作法,才能找出佳的测试方法。

    由此可知,要做好有效的测试,不只是埋头苦干而已,它需要良好的管理,使整件工作获致佳的成果。关于测试的管理工作,可从组织、规画、执行与检讨几个角度来探讨。以下谨笔者粗浅的经验野人献曝一番,希望提供读者基本的协助。

    测试组织之设计

    由于人性总自认为自己的好正确,完全由软件开发人员兼任测试人员,并不值得推荐。实务上往往因软件开发单位的经济规模不够,使得开发人员经常兼任测试人员。但若可行,研发单位应尽可能配置专任的测试人员,尤其是独立于开发小组之外的测试负责人员。尽管是否应设置独立测试小组业界仍有争议,许多人甚至以为保障软件品质唯有从改进软件开发的程序做起,但大部份美国的软件公司均设有独立测试或品保人员乃至于部门,这说明了独立测试仍有其不可摇撼的地位。

    许多的软件研发单位将测试视为次等的工作,从而配置次等人员负责相关工作。如此一来,人员无从参与,也缺乏意愿参与测试工作。结果软件品质不易度量,研发的成果常常被不佳的品质抵销,实为令软件开发人员泄气之事。主管是否能体认到软件测试的重要性,通常是成功的关键。软件测试固然是支持性工作,仍应配置合理的资源,以获取整体之成效。在当前的环境下,给予测试人员较多的关注,毋宁是必要的作法。

    测试工作规画

    测试工作的规画,至少包含两项要点:测试目标的订定与测试资源的配置。攻击需要目标,测试亦然。测试的目的在于找出软件的问题,提供改进之参考。目标若不明,测试人员即不知如何着手。

    测试目标的订定,重要的在于软件通过的准则,亦即测试何时方可结束。常见的情形是:软件开发的进度不断落后,后剩余的时间仅有两个星期,于是测试人员的目标是把后两周用完,尽人事听天命。究竟测试多完整,隐藏的多少错误,测试工作的生产力如何?皆一概不知。反正产品卖出去或上线后有的是时间改进。然而产品销售后再改进,成本往往大幅增高,甚至原有开发人员离职他调,连亡羊补牢都倍感困难。经验一再显示,事前的测试除错比事后维护省时省钱,唯有卖不出去或不能用的软件例外。

    对于测试的要求可简单区分为二:一种是通过目标所订之软件品质;一种是在既定资源内达到佳成效。前者要求山头一定要攻下,不达目的绝不停止。譬如目标为单位测试时间的错误发现率须低于某数字,若超过了得延长测试。此种方式适用于品质要求较高的软件。至于后者则是上市时间已宣布,无法更改者,其目标着重于铲除严重的错误。此种测试较着重测试的准备、经常对测试执行与除错设定时限与数量要求,其中容易遵循的准则即为:重要功能永远先测。这两类测试的需求不同,足以影响到测试的计划、测试的顺序与关心的重点。读者不可不察。

    至于测试资源配置适当性,则是评估测试目标能否达成的重要参考指标。测试人员需要合理的测试资源,譬如要求总研发人力的20%以上。总时程的1/3以上。人力不足,测试流于形式,时程过短,找到错误也来不及除错,均不可取。除了测试在研发的比重,也需注意测试工作本身在规画管理、规格个案订定、测试执行、回归测试、训练准备工作的人力分配。人员的训练与设备的安排尤其容易轻忽,需加以注意。不同阶段测试的资源配置,也必须加以考量,如此可避免测试集中于功能测试,忽略系统测试。这些工作的适切安排,有助于协助测试工作时时都执行重要,也有效的测试。

    测试执行与管理

    测试工作执行在管理上,首先需使测试与开发人员了解轻重缓急。测试人员常常不考虑测试的效果,而只依照测试的方便性来进行测试。譬如软件有十大模块,每一模块有50个测试个案,于是他从第一个模块的第一个个案开始测,测完一整个模块,再进行第二个模块的测试,执行全部完成或无法进行为止。事实上,测试应从重要且常用的项目测起。

    开发人员的除错,则往往从好改的改起。于是100个错误改了90个,系统主要的缺陷仍为克服。测试管理人员需特别注意此事,确保测试工作的效率。

    进行测试管理的好处在于随时可掌握状况,并因应需求及时调整测试策略。譬如测试一段时间后,发现某子系统的问题特别多,即可调整人力,增强该部份的测试。或是某些人的测试绩效较差,则可调整工作之分配,以求整体效果。当然,这些数据的取得有赖相关信息的搜集,包括数量与时间之信息。如果可行,可记录不同测试工作耗用的人力时数,计算耗用成本,以便未来进行测试规划时拥有更精确的参考数据。

    进行相关资料的统计与分析,好运用工具来帮忙,以节省人力并增进效果。如果市面已有的测试管理工具符合需求,也可径行采用。测试结果的统计资料,不妨公布在大家的眼前,使得测试成果可为大家了解,亦能促进工作同仁求取更佳的成绩。附图所显示为一简单的统计图表,显示每周的测试成果、除错成果,与产品残存的问题量,可协助主管决定测试终止及发行产品的时间。