|
2006年9月23日,由希赛网承办的2006中国软件工程大会暨系统分析员年会在湖南长沙召开。以下是与会专家段念“企业自动化的策略、过程和误区”主题演讲具体内容。
 段念在分会场上做主题演讲(本图由新浪科技提供)
各位好,首先自我介绍一下。我是北京测试时代的段念,从1998年开始从事软件测试工作,目前主要从事软件测试咨询、培训和测试服务。很高兴有这个机会和大家就软件测试自动化方面的内容进行探讨。
本次报告分为四个部分:“梦想和现实——测试自动化理想与现状”、“冲出迷雾——真实的测试自动化及发展趋势”、“拨云见日——建立企业的测试自动化体系”和“过犹不及——谨防测试的过度自动化”。在这四个部分的介绍中,我们首先讨论自动化测试的现状,然后介绍测试自动化的过去和现在,在接下来的部分中,我们介绍在企业中建立测试自动化体系的具体方法,并用几个案例和大家分享这方面的经验,在最后一个部分中,我们讨论如何预防测试过度自动化。
在介绍自动化测试之前,我们先看看“什么是测试”。简单来说,测试的目标是两个:“发现系统中存在的问题”和“证明系统能够满足用户的需求”。就“发现系统中存在的问题”来说,其主要的工作是“寻找一个最小的测试集合,使其能够发现大多数问题”。
那么,如何评价一个已有的测试呢?一般来说,可以从四个方面对一个测试进行评价:“测试能否发现问题或是证明系统功能的正确性?”、“测试的覆盖如何(能够测试多个行为)?”、“测试执行、分析、调试的开销如何?”、“测试的维护开销如何?”。一个好的测试,就是能够发现问题或是证明系统功能正确性、能够良好覆盖需求、具有较少的测试执行、分析、调试,以及维护开销的测试。
接下来我们看看自动化测试。第一个问题是,为什么需要自动化测试?Boris Beizer在《 黑盒测试: 软件和系统功能测试技术》中有一段经典的描述:“我看到的最悲哀的景象之一就是一个人在键盘上手动操作一些可以自动运行的东西。这是悲哀的但也是有趣的。”为什么说是悲哀的?——对于从事这件重复的冗余的事情来工作者说,日复一日的重复工作是悲哀的;为什么又说是有趣的?——对旁观者来说,一个人用一些机械的手工工作来完成本可以用自动化测试工具完成工作,有时候也是一件有趣的事情。
那么,自动化测试到底能给我们带来什么呢?首先,自动化测试是建立在测试的基础上的,因此我们不能指望自动化测试能解决我们所有的问题——至少,一个设计不出来的测试自动化测试也对此无能为力。自动化测试能够带来的好处主要是两个方面:减少测试的维护开销,以及减少测试的执行、分析和调试开销。对于其他的两个评价测试的方面,自动化测试也不能比手工测试做得更好。
曾经有个测试工程师向我描述过他对于“自动化测试”的梦想:“一个宽大的控制台,控制台上有一个闪烁着红光的按钮,只要轻轻一按这个按钮,一阵喀嚓喀嚓声音之后,一张完整的报告就出现在面前”——很美好的梦想,可惜,这个梦想距离现实还很有些距离。
自动化测试的现状究竟如何呢?其实就目前来说,自动还测试还远远不能达到完全不需要测试工程师干预的程度。我们都知道,软件测试可以被划分成软件测试需求、软件测试计划、软件测试设计、软件测试执行和软件测试评估总结这几个阶段,自动化测试仅仅能够在软件测试设计、执行和评估总结的阶段发挥有限的作用,因此,我们通常把测试自动化理解为“测试的部分过程的部分自动化”
那么,测试自动化究竟是什么呢?要回答这个问题,我们先看看“测试自动化不是什么”。
测试自动化不是录制回放——更准确的说,测试自动化不仅仅是录制回放;通过录制回放方式的确可以进行一些简单的自动化测试工作,但这种纯粹的录制回放存在相当多的问题——首先是对结果的验证方式,纯粹的录制回放缺乏对结果的验证支持;其次,如果有多组不同的数据需要进行测试,纯粹的录制回放也很难应付。
测试自动化不仅仅是测试工具的应用——一说起测试自动化,很多人头脑中立刻反映出来的就是测试工具,当然,测试自动化一定需要工具的支持,但测试自动化不仅仅是测试工具的堆积,就好像在原始社会,有了汽车,那也不能就说明进入了现代社会,测试自动化是一个系统的工程。
测试自动化不是自发的冲动——在有些组织中,测试自动化是一些测试工程师自发的行为,甚至这些组织还会认为,只要这些工程师足够聪明,他们就能逐渐鼓捣出一个适合公司的自动化测试体系来,这种认识显然是不对的。
测试自动化不是发现问题的最佳手段——很容易理解,由于测试自动化是建立在手工测试的基础上的,因此测试自动化最合适的是用在验证性质的回归测试阶段,而不能指望它去发现最多的错误。
因此,我们可以明显地看到,测试自动化具有明显的约束。那么,测试自动化具有这么多的约束,那么它到底能做什么呢?接下来我们就看看“真实的测试自动化及发展趋势“。
自动化测试真正可以做的事情包括:“减少测试阶段的执行工作量”——但必须说明的是,自动化测试在减少测试阶段的执行工作量的同时,又增加了测试设计和开发的工作量。自动化测试可以减少执行过程中的人为出错的可能性;能够在某些人工无法达到的测试——例如性能测试——中发挥作用,以及辅助进行测试管理。
要在组织内实现测试的自动化,就需要建立自动化测试体系。自动化测试体系是我们经常能够听到的一个概念,那么,它究竟是什么呢?简单的说,自动化测试体系是指适用某种环境的测试工具、过程、人员结构和方法的集合。特别要强调的是,自动化测试体系既不单指某种工具,也不仅仅指某种测试技术,它是工具、过程、人员和方法的组合。
过程是测试自动化的核心,没有过程,我们的自动化测试就没有了“骨架”,过程中关注了测试自动化中的全部因素:工具、资源和方法,过程是将这些因素合理组织起来的桥梁。
自动化测试工具是自动化测试的重要组成部分,但光有工具是没有办法建立起组织的自动化测试体系的。很多工具厂商往往会宣称“我的工具就是一个完整的自动化测试体系”,但其实,这种体系仅仅是指一个工具体系,而不是马上能够为企业带来效益的体系,任何工具都必须在过程的指导下才能发挥其作用。
另一方面,要在组织内引入自动化测试,适应于自动化测试的组织结构是不可或缺的。有些组织对自动化测试的认识有误解,以为要在企业做测试自动化,就必须将全部的测试工程师都变成自动化测试工程师。其实,自动化测试工程师的技能要求更接近开发工程师,需要有较强的设计、编码能力,而对一个组织来说,除了自动化测试工程师,还需要测试业务和设计人员、手工测试人员。一个建议的比例是各占1/3。
要在一个组织内建立自动化测试的体系是一件很有挑战性的工作,我经历过一些组织的自动化测试尝试过程,有些成功了,有些失败了。这些成功和失败的经历也给我了不少的经验和教训,我希望通过我的经验为大家指出企业自动化测试尝试过程中的有效方法和陷阱。
在组织中引入自动化测试,可以从“认识自动化测试策略”、“了解测试现状”、“了解测试工具的约束和使用”、“尝试在小规模的项目中引入自动化测试”、“为测试自动化改变组织”、“持续改进”几个方面来入手。
自动化测试的策略是自动化测试中需要遵循的原则和方针。这里我提醒大家需要注意的是:
将所有工作中的特定部分作为应用自动化的候选对象。
从高度冗余的任务或场景开始考虑。
将乏味且人工容易出错的工作进行自动化。
首先关注开发成熟、理解透彻的用例或场景。
优先选择应用中相对稳定的部分,而非易变的部分。
指派几位专家负责自动化,不要让测试团队的每个人都做这项工作。
牢记不要追求100%的自动化,手工测试仍然至关重要。
对组织的测试现状了解,可以作为自动化测试尝试的一个前提条件。主要关注的问题有3个:
高层对测试自动化的态度如何?
组织中有人有测试自动化的经验或者经历吗?
可以在哪个项目中尝试进行测试自动化吗?
如果高层对测试自动化的期望不正确(一般是抱了太高的期望),首先要做的事情就是纠正他们的想法,因为为一个无法达到的期望去做这件事情,风险太大了。另外,如果组织中有人有测试自动化的经验,对组织的自动化测试引入是非常有好处的;最后,一定要找到至少一个可以进行测试自动化尝试的项目,不能是太大或者太关键的项目,以避免失败的风险。
对测试工具的了解和掌握也是进行测试自动化工作的重要内容。这里的要点是要“自我主导”,而不要被测试工具厂商牵着鼻子走。我建议的测试工具评估和选择程序是:
事先要列出“我”希望工具具有的功能,然后按图索骥
用评估表为工具进行评估
寻找有经验的帮手
引入自动化测试往往需要首先在小项目中进行尝试,为什么要选择“小”的项目呢?主要是从风险和可操作性方面来考虑的。大的项目,或是对公司至关重要的项目,容不得闪失,因此也就不适合用来做自动化测试的尝试,而小的项目,便于控制。
另外,需要指派专人负责自动化测试的尝试工作,否则,缺乏控制的尝试往往会以失败告终。
除了工具、项目的选择以外,建立适合自动化测试的组织也同样关键。这方面可以从以下内容着手:
提升测试组织对测试自动化的认识
分配自动化测试工程师
建立适合测试自动化的测试流程
提升开发组织对测试自动化的认识
组织级的改变
只有在组织上进行配套的工作,才可能成功实现自动化测试。
在引入了自动化测试的以后,只有对自动化测试过程进行持续改进,才能让自动化测试尽快地发挥应有的作用,取得应有的效果。持续改进的关键是度量和根据度量结果做出相应的行动。
可以用于对自动化测试进行度量的指标包括:
哪些自动化测试的内容提高了测试效率?
哪些自动化测试的内容取得了最大的收益?
哪些是影响自动化测试进行的主要因素?
当然,在企业中成功引入了自动化测试之后,并不是就能够从此高枕无忧了。和开发人员容易犯的“功能镀金”的毛病一样,自动化测试工程师也容易做一些导致过度自动化的事情。
在前面的策略中我们提到,千万不要试图将所有问题交给自动化解决,但在组织成功引入了自动化测试之后,还是会有一个不自觉地将自动化测试无限扩大的趋势。在这方面,我的建议是一定要做好度量工作,及时发现扩大化的自动化趋势并坚决制止。
另外的容易导致过度的自动化的问题包括“过于追求精妙的脚本”和“扩大的自动化框架”等内容,因此,需要企业在自动化测试方面通过绩效导向等工作,将测试工程师的注意力转移到真正能体现测试自动化效益的方面来。
[2006中国软件工程大会暨系统分析员年会专题报道]
|