虽然人们普遍关注软件开发成本,并且从提供开发生产率改进的技术中获得了激动人心的进步,但软件测试成本和生产率往往被忽视,或者干脆说“这就是它的成本,这就是它的生产率。”具有讽刺意味的是,软件测试成本和时间通常与开发软件所需要的时间和成本相近。
Boris Beizer报告称,“开发一个可工作的程序的一半工作量一般都消耗在测试活动上。”
IDT对软件测试进行独立调查(详见第4章),收到超过700份回复。其中我们提出的一个问题是总程序的计划百分之多少消耗在测试上。46%的回复认为占30%~50%,另外19%认为占50%~70%。
与软件测试相关的成本和时间占项目总成本和计划的很大一部分,因此,对提高测试效率和减少劳动时间的改进会有显而易见的效果。评估影响的主要考虑因素有:
哪些方面,有多少测试可以自动化?
预期减少多少测试时间和计划?
对提高测试覆盖率和质量的影响的期望是什么?
是否还需考虑其他要降低的因素?
有多少测试程序可以自动化?并非项目中所有测试都能够或应该自动化。作为AST的最佳对象是那些最常重复和劳动密集型的测试。只运行一次或很少运行的测试是不值得进行自动化的测试,除非规定的环境中要求自动化,例如,手动测试很困难或非常耗时。此外,如果每次发布测试用例都会变化,从而AST每次都需要改变也不值得自动化。第6章将进一步介绍“是否需要自动化以及哪些要自动化”。
对大部分项目而言,我们的经验是40%~60%的测试能够且应该自动化。对每个项目都应该进行初步的高层次评估。第6章详细介绍了这种做法。随着在更多项目中实施AST的经验积累,将不断地改善你根据历史数据对测试程序中应用AST的等级的精确估算能力。
预期减少多少测试时间和计划?在任何测试自动化之前,应计算ROI。计算ROI的细节参见第3章。此外,还要考虑在这些测试领域中可自动化的最佳候选测试的需要:自动化测试计划和开发、测试数据生成、测试执行和结果分析、错误状态和监视以及报告的生成,这会在下一节讨论。
经验表明,在测试执行阶段中,AST对减少项目进度有很大的影响。这个阶段一般包括的活动有:执行测试、分析测试结果、修正错误和生成测试报告。根据经验,如果这些过程自动化了,可以节省大量的时间。
经验还表明,在最初的测试自动化实施阶段,即测试自动化的开发阶段,将会有初始的时间增长。
1、自动测试计划和开发——初始测试的工作量增加
自动化测试初期增加了测试工作的复杂程度。在决定引入自动测试工具之前,需要考虑许多特殊的地方,关于这一点的讨论将贯穿整本书。例如,需要回顾计划的AUT或SUT,以确定它是否与测试工具兼容。有时市场上没有能满足自动化需求的工具,这时就需要自己开发测试软件和框架。此外,需要审查未自动化测试提供支持的样本数据的有效性。需列出所需数据的种类和变体,然后为获取或开发需要创建的样本数据制定计划,这将在下一节中讨论。还需要考虑测试脚本的模块化和复用。自动化测试具有自己的开发工作类型,具备自己的小型开发生命周期。必须支持测试开发生命周期的计划,可以与应用程序开发工作同时进行,具有增加测试计划工作的效果。
过去,测试过程的开发是一个缓慢、昂贵且耗时的过程。当软件需求或软件模块改变时,测试工程师往往要重新开发已有的测试过程,并从头开始创建新的测试过程。利用测试管理和自动测试工具的能力来生成或修改测试过程(参考第1章的介绍),花费的时间只是耗费手动测试过程的一小部分。
2、生成测试数据——测试工作/计划减少
使用测试数据生成工具也有助于减少测试工作。有效的测试策略需要仔细获取和准备测试数据。如果测试数据不佳,功能测试将遭受挫折。相反,如果测试数据良好,将有助于改善功能测试。好的测试数据是结构化的,可以增进理解,提高可测性。正确选择数据的内容,可以减少维护工作,并更具灵活性。在需求模糊的情况下,数据的准备工作有助于将注意力集中在业务上。
数据字典和详细的设计文档对确定样本数据非常有用。除了提供数据元素名称,数据字典还可能提供数据结构、基数、使用规则和其他有用信息。设计文档,特别是数据库模式(schema)的设计文档,同样有助于确定程序与数据之间的交互情况,以及数据和元素之间的关系。
因为有太多的可能性,通常无法测试所有的输入输出的组合和变体,以检验应用程序的功能性及非功能性需求是否得到满足。但是,自动化测试以及各种测试设计技术可帮助缩小大量的数据输入输出组合和变体。其中一种测试技术是“数据流覆盖”,旨在将数据流包含进所选择的测试过程步骤中。使用这种技术有助于确定测试路径的选择,以便满足所有适合的路径的数据流的某些特性。还有其他一些技术,比如边界条件测试技术。
【编辑推荐】