软件测试(第2版)
上QQ阅读APP看书,第一时间看更新

1.4.2 软件测试的原则

为了进行有效的测试,测试工程师必需掌握软件测试的基本原则。一般有下面几条原则可作为测试的基本原则。

(1)尽早测试

应当把“尽早和不断地测试”作为座右铭。由于软件的复杂性和程序性,错误在软件生命周期各个阶段都可能产生,所以不应把软件测试仅仅看作是软件开发过程中一个独立阶段的工作,而应当把它贯穿到软件开发的各个阶段中。在软件开发的需求分析和设计阶段就应开始测试工作,编写相应的测试文档。同时,坚持在软件开发的各个阶段进行技术评审与验证,尽早的开展测试执行工作,一旦代码模块完成就应该及时开展单元测试,一旦代码模块被集成成为相对独立的子系统,便可以开展集成测试,一旦有BUILD提交,便可以开展系统测试工作。由于及早的开展测试执行工作,测试人员尽早的发现软件缺陷,大大降低了BUG修复成本。但是需要注意,“尽早测试”并非盲目的提前测试活动,测试活动开展的前提是达到必须的测试就绪点。

(2)全面测试

软件是程序、数据和文档的集合,那么对软件进行测试,就不仅仅是对程序的测试,还应包括软件“副产品”的“全面测试”。需求文档、设计文档作为软件的阶段性产品,直接影响到软件的质量。阶段产品质量是软件质量的量的积累,不能把握这些阶段产品的质量将导致最终软件质量的不可控。

“全面测试”包含两层含义:第一,对软件的所有产品进行全面的测试,包括需求、设计文档,代码,用户文档等。第二,软件开发及测试人员(有时包括用户)全面的参与到测试工作中,例如对需求的验证和确认活动,就需要开发、测试及用户的全面参与,毕竟测试活动并不仅仅是保证软件运行正确,同时还要保证软件满足了用户的需求。

“全面测试”有助于全方位把握软件质量,尽最大可能的排除造成软件质量问题的因素,从而保证软件满足质量需求。

(3)全过程测试

“全过程测试”包含两层含义:第一,测试人员要充分关注开发过程,对开发过程的各种变化及时做出响应。例如开发进度的调整可能会引起测试进度及测试策略的调整,需求的变更会影响到测试的执行等等。第二,测试人员要对测试的全过程进行全程的跟踪,例如建立完善的度量与分析机制,通过对自身过程的度量,及时了解过程信息,调整测试策略。

“全过程测试”有助于及时应对项目变化,降低测试风险。同时对测试过程的度量与分析也有助于把握测试过程,调整测试策略,便于测试过程的改进。

(4)独立的、迭代的测试

“独立的、迭代的测试”包含两层含义:第一,应当将测试过程从开发过程中适当的抽象出来,作为一个独立的过程进行管理。软件开发瀑布模型只是一种理想状况。为适应不同的需要,人们在软件开发过程中摸索出了如螺旋、迭代等诸多模型,这些模型中需求、设计、编码工作可能重叠并反复进行的,这时的测试工作将也是迭代和反复的。如果不能将测试从开发中抽象出来进行管理,势必使测试管理陷入困境。第二,测试工作应该由独立的专业的软件测试机构来完成。通常,程序的设计者对自己的程序印象深刻,并总以为是正确的,倘若在设计时就存在理解错误,或因不良的编程习惯而留下隐患,那么程序员本人很难发现这类错误。

(5)Pareto原则。测试发现的错误中80%很可能起源于20%的模块中,例如,在美国IBM公司的OS/370操作系统中,47%的错误仅与该系统的4%的程序模块有关。所以一定要注意测试中的错误集中发生现象,如果发现某一程序模块似乎比其他程序模块有更多的错误倾向,则应当花较多的时间和精力测试这个程序模块。

(6)对测试出的错误结果一定要有一个确认的过程。一般由工程师A测试出来的错误,一定要由工程师B来确认,严重的错误可以召开评审会进行讨论和分析。

(7)制订严格的测试计划。制订严格的测试计划,并把测试时间安排得尽量宽松,不要希望在极短的时间内完成一个高水平的测试。

(8)完全测试是不可能的,测试需要终止。想要进行完全的测试,在有限的时间和资源条件下,找出所有的软件缺陷和错误,使软件趋于完美,是不可能的。一个中等规模的程序,其路径组合近似天文数字,对于每一种可能的路径都执行一次的穷举测试是不可能的,即使能穷举测试,也没法找到程序中所有隐藏的错误。同时费用将大幅增加,漏掉的软件错误数量并不会因费用上涨而显著下降,越是在测试后期,为发现错误所付出的代价就会越大。因此,要根据测试出错误的概率以及软件可靠性要求,确定最佳停止测试时间,而不能无限地测试下去。

(9)注意回归测试的关联性。回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误出现的现象并不少见。

(10)妥善保存一切测试过程文档。妥善保存一切测试过程文档的意义是不言而喻的,测试的重现性往往要靠测试文档。