随着国内企业软件开发及测试水平的提升,许多企业开始尝试开展自动化测试的应用,以提高测试效率和测试质量。虽然在国外自动化测试工具应用已经很普遍,但国内许多企业对于软件自动化测试的理解还停留在表面上,没有深入的理解到企业实施自动化测试所要具备的条件以及自动化测试本身的局限性,导致自动化并没有给企业带来多少实际的价值,反而还浪费了资源。 下面是两个企业推行自动化失败的案例:
案例1:L公司是中国一家专注医疗设备与软件研发的高科技企业,产品包括超声,放射,检验和医疗IT。医疗IT软件产品包括超声工作站、放射工作站、叫号工作站、信息系统等。整个软件产品线有80多名工程师,测试工程师有15人。以前公司的测试大部分是手工测试,现在由于软件的版本发布较多,测试团队很难跟上开发的节奏。产品线王总找到测试部经理李华,看是否能开展自动化测试,并要求在下个季度完成自动化技术的预研和实践。测试部经理李华经过与部门两名自动化测试工程师的讨论,决定使用QTP和Winrunner作为测试工具,经过三个月的预研之后,工具可以使用了,但在使用过程中遇到了以下的问题:
1) 自动化工具在录制脚本的时候很多对象无法识别。
2) 由于软件的需求变更较多,程序界面变更较快,原来录制的脚本很难重用。
3) 软件程序的BUG很多,使用测试工具时出现很多的异常,无法顺利跑完脚本。。。。
案例2: K公司是一家主要从事网络游戏咨询服务及相关游戏增值业务,是全球著名,中国最大的游戏增值服务提供商之一,主要提供游戏点卡、游戏装备、虚拟货币、网游账号等网上交易服务。该公司开发团队采用的开发模式为敏捷开发,每周需要发布一个版本,对软件测试团队的要求较高,不但需要快速的测试每一个新版本,而且要找出BUG,这样对于本来偏向于手工测试的质量保证团队是一个非常大的挑战,负责质量的陈副总为了提高测试的效率,直接从IBN公司挖了一个自动化测试高手刘军过来,作为整个测试部门的负责人,意在提高公司自动化测试技术和软件质量水平。但刘军经过6个月的努力,发现自动化测试在K公司根本派不上用场,大部分的项目带是采用手工测试,原本想把测试效率提升一下的刘军,在6个月之后,选择离职。。。。。究其原因,有以下几个:
1)刘军虽然是自动化测试高手,但对于K公司的业务不太熟悉。
2)敏捷开发过程中自动化测试很难派上用场。
3)企业对于自动化能带来的收益过于短视,没有给予一定的时间进行技术积累。
以上两个案例,是目前中国软件企业遇到的普遍性的问题,一方面想提高软件测试的效率,一方面又不想增加测试资源,想走捷径,比如通过一些自动化工具进行辅助测试等等。上个月笔者在北京测试公开课上也遇到了一家中国互联网企业的研发总监,他们面临的问题跟以上两家企业的问题基本上类似,想开展自动化测试但不知从何下手,如:自动化测试团队与开发人员的关系,自动化测试人员的绩效指标,自动化测试团队究竟需要领导哪些支持?自动化测试的人员如何培养?自动化测试能做到什么程度。。。。。。。
带着这些问题,笔者根据以往在华为和阿里巴巴两家著名公司的测试管理经历,和近期对多家企业进行自动化测试辅导的经验,分别从“技术、组织、流程、人”四个方面对自动化测试实施难点进行简要的分析:
1) 从技术方面,目前国内从事自动化测试的工程师还不多,这跟国内一种浮燥的开发氛围有关系。因为企业开展自动化测试,不但需要购买工具,还需要招聘具备开发能力的测试工程师,并且回报周期较长,有的需要半年,有的需要一两年,这一点是很多企业无法实现的。国内自动化测试做得比较好的企业腾讯、阿里巴巴、百度等公司,无不投入了较高的成本,自动化测试技术包括测试工具开发和自动化测试工具应用两类。 测试工具开发是指开发适合自已产品的测试工具,像一些脚本语言PHP、PYTHON、TCL/TK、SHELL等等,主要用于集成测试和单元测试;另一种自动化测试技术是指自动化测试工具的应用,主要是应用各种成熟的测试工具,如QTP,LR,Silktest等等, 这类技术只需要掌握工具即可。由于国内“重开发、轻测试”思想依然存在,很多企业不愿花钱购买自动化测试工具和招聘高素质自动化测试人才。导致测试水平低下,测试跟不上开发的情况屡见不鲜。 企业要想实施自动化测试,必须先过技术关,案例1中的L公司显然技术的积累不够,没有成功自动化测试经验的技术人员很可能导致自动化测试失败。
2) 组织方面,很多公司都建立了系统测试部,但真正有独立自动化测试小组的公司廖廖无几,有的公司也试图让系统测试人员来从事自动化测试,这是一个误区。因为系统测试人员往往偏向于黑盒测试, 他们对于代码逻辑和模块接口方面了解非常少, 很难从事测试工具的开发和自动化测试工具的应用。共创力咨询认为, 自动化测试小组应独立于测系统测试团队, 自动化测试小组更多的职责在于提高测试用例的自动化率, 和维护自动化测试脚本。测试工具开发小组可以独立于测试工具应用小组, 因为前者更偏向于开发, 这个团队的身份其实跟开发团队没有什么两样,他们负责收集自动化工具开发需求,并进行设计开发和验证。后者主要负责工具应用, 他们需要把工具应用到公司的业务中去。自动化测试工具应用小组可以参与一部分的系统测试工作,以撑握和熟悉具体的业务知识, 更好的提高软件自动化率。因此,在组织方面,共创力建议企业开发过程中自动化测试和手工测试分开, 自动化测试分为两个小组, 一个是做工具开发, 一个是自动化工具的应用,两个小组如果人数不多,可以合二为一, 如果人数超过一定规模, 如10个以上, 则可以成立两个单独的小组。
3) 在流程方面, 自动化测试需要有相关测试流程的保障。自动化测试不再跟手工测试一样, 在软件打完包之后进行测试, 自动化测试在编写脚本或写测试用例的时候需要跟开发人员人间作深入的沟通, 了解软件的逻辑实现和模块之间的接口, 如UI的控件实现方式变化之后,开发人员应及时通知测试开发人员, 对测试的脚本进行调整和维护, 对开发人员提交文档的规范性有更高的要求。案例2中的K公司采用了敏捷开发模式, 对于自动化测试工具的应用,显然不太适合, 因为频繁的UI变更,将导致测试用例的维护工作量较大, 还不如做手工测试, 针对K公司这种情况, 共创力建议除了使用自动化测试做一些后台的测试之外,前台依然采用手工测试。
4) 在人方面,自动化测试如何得到保障呢? 最近笔者统计了一下目前研发职位的招聘情况,软件测试人员的招聘职位较多,尤其是高级测试工程师供不应求, 究其原因, 目前很多企业已经意识到了测试这块短板, 但缺乏高水平的测试工程师, 懂开发的工程师都不愿从事测试, 从事测试的工程师基本不懂开发。。。。。这是一种不好的现象, 在华为公司,许多测试工程师同样懂软件开发,在进入公司前需要考查C++基本编程,而且,测试人员的工资待遇不比开发人员差,这就为公司开展各项自动化测试提供了一个基本条件,人员可以得到保证。国内除了几家大公司如华为,中兴,迈瑞,阿里,腾讯等之外,许多公司的测试人员都是不懂开发的,很难真正的推行自动化测试。。。。。
综上所述, 企业要推行软件自动化测试,不是一件容易的事, 领导不但需要支持建立测试开发团队,而且需要招聘有经验的自测试化测试人员,并树立自动化测试部门的权威性,真正给企业带来效益,降低人工测试的成本。随着国内软件企业对质量意识的提升,相信自动化测试逐渐会取代一部分的手工测试,自动化测试的地位也将逐渐显现出来。
最后,笔者根据多年的自动化测试实践经验, 总结出一些经验和教训, 给大家分享:
1) 并不是所有的软件都适合自动化测试, 像有些需要人机界面进行测试的, 只能使用手工测试。如需要通过眼睛判断颜色或通过人操作键盘等等。
2) 自动化测试工具并不能帮助我们找出更多的BUG, 而只能提高测试的效率和质量。自动化测试工具也是需要人去操作和维护的,它只能机械的重复人的动作,而并不比人聪明。
3) 对于版本频繁变更或需求变化较快的软件,尽量不要使用自动化测试工具,因为使用工具维护的成本太高。
4) 对于自动化测试尽量在版本稳定后进行,如前面三轮采用人工测试,软件基本稳定后再使用自动化工具进行回归测试,如果版本不稳定,使用自动化工具将事倍功半,得不偿失。
5) 对于自动化测试技术,需要做长期的规划,针对自身业务的发展状况和开发技术的规划,组织自动化测试小组研究测试方面新的技术,在产品测试的过程中,慢慢积累,不断总结,让测试技术得以沉淀。
6) 自动化测试工程师最好有开发的背景和经验,对于自动化测试工具应用的工程师最好有成功的工具实践经验。因为只有具备成功的经验,对于自动化工具在软件开发过程中的应用会如鱼得水,取得事半功倍的效果。