敏捷与测试

一、商业社会讲一个多快好省,软件开发也不例外。 随着这几年敏捷概念和方法的流行,越来越多的组织和项目选择了敏捷开发模式。现实中很多情况是,开发团队一顿敏捷猛如虎,测试,部署,运维团队跟在后面擦屁股,苦不堪言。技术人最擅长的就是解决问题,于是有了DevOPS,也有了TDD。 软件测试的重要性不言而喻,

一、商业社会讲一个多快好省,软件开发也不例外。

随着这几年敏捷概念和方法的流行,越来越多的组织和项目选择了敏捷开发模式。现实中很多情况是,开发团队一顿敏捷猛如虎,测试,部署,运维团队跟在后面擦屁股,苦不堪言。技术人最擅长的就是解决问题,于是有了DevOPS,也有了TDD

软件测试的重要性不言而喻,没有经过测试的软件部署,就好比是厕所里扔炸弹,一旦引爆,后果不堪设想。比如今天你狂欢双11剁了手,明天XX电商给你发一封信说对不起,订单都丢了,你都没有工具抹眼泪。

二、敏捷从何而来?

2001211日至13日,在美国雪鸟滑雪胜地,17个软件行业大咖来了一次团建,交谈、滑雪、休闲,当然还有聚餐。他们试图找到共识,最终的成果就是《敏捷软件开发宣言》。

由这份宣言可见,敏捷的起源是一种思想,一种价值观。当时并没有官方的敏捷实践指南,极限编程、ScrumDSDM、自适应软件开发、水晶系列、特征驱动开发、实效编程这些框架或技术,只要遵循个体和互动高于流程和工具,都可以海阔凭鱼跃,天高任鸟飞。

随后敏捷的理念开始被行业接纳,并迅速发展,在软件开发领域更是几乎到了无处不见的境地。软件工程毕竟是工程,开发只是工程项目的一部分,敏捷向上下游的传导已经势不可挡,毕竟战斗机的引擎拉着牛车跑,是经不住实践和道路的考验的。

三、敏捷测试怎么测?

敏捷测试是遵从敏捷软件开发原则的一种测试实践。敏捷开发模式把测试集成到了整个开发流程中而不再把它当成一个独立的阶段。因此测试变成了整个软件开发过程中非常重要的环节。敏捷团队是跨职能的,测试工程师要在一个冲刺内完成对其可交付成果的测试。

听起来很美,但细思极恐。因为大部分敏捷测试用到的基本测试方法和技术与传统测试是一样的。在传统测试中,测试一般安排在产品已经开发完成后,针对完整的产品设计测试用例。产品功能测试和UI测试这一部分往往是手工或者半手工完成的。在单个冲刺内完成这一套动作,而且每个冲刺都要重复,对于崇尚小团队作业的敏捷团队来说,无疑是不现实的。

所以在敏捷背景下,测试必须自动化。

四、自动化测试技术演进

第一阶段:手工测试

起初我们的面向业务的测试类型种类单一,仅有手工测试一种模式,同时测试手段偏传统,强调测试的计划性,从需求分析、用例设计、用例编写到最终的测试报告都要求非常详细的文档记录。

第二阶段: 自动化测试初期

随着业务体量的增加,传统模式的手工测试方式渐渐跟不上变化,而且测试开发比越来越大。为了应对这些问题,开展了自动化测试。经过一段时间的推进,各应用组的UIwebApp)自动化测试、接口自动化测试陆续开展起来。

该模式被称作冰激凌模式,这个模式中UI自动化测试的投入比例最大,接口自动化测试的比例次之,单元测试最小。一个问题是,UI自动化测试脚本维护成本较高,结合环境不稳定、测试数据等各种因素,脚本执行成功率偏低,这样下来UI自动化测试对测试效率提升并不明显。

第三阶段 自动化测试演变阶段

随着敏捷开发、DevOps的推进以及微服务开发框架的兴起,自动化测试将重心向接口自动化测试方向转移。大部分自动化测试投入都在接口层,由于系统的接口总量相对固定、接口本身相对稳定,因此接口自动化回归测试的复用率高,维护成本小,可以非常明显的提高测试效率和测试覆盖率。同时随着接口自动化测试平台的投入使用,极大的降低了功能测试人员接口测试的学习成本和脚本的编写成本。

但是这还不够,系统85%的缺陷是伴随着代码的产生而出现的。缺陷产生阶段便把问题解决掉而避免蔓延可以大大的降低其开发的投入成本,缺陷的发现时间越早修复的成本越低,这样可以减少版本修改缺陷的时间,减少测试版本打包、提测、回归的次数,从而从整体上缩短业务价值交付的时间。(于是就有了TDD,篇幅所限,TDD我们会单独写一片文章介绍)

总而言之,自动化测试的下沉,带来的价值是测试效率的提高、系统质量的提升和投入成本的降低。因此,更为合理的自动化测试模式应该是下图模式:

这个模式就是著名的自动化测试金字塔模式,它提倡单元测试的投入比例最大,其次是接口自动化测试,最后是UI自动化测试。最原始的自动化测试金字塔模式,没有考虑手工测试层面,但是手工测试是必不可少的。需要说明的是金字塔模式中的单元测试是一个宽泛的概念,可以认为是代码层面的一系列质量保证过程,包括静态代码扫描,单元测试自动化等。

五、敏捷测试现状

软件质量报道针对敏捷测试现状做了一份调研,抽取几个比较有意思的数据跟大家分享。感兴趣的同学可以根据文末链接,查看详细报告极其信息解读。

下列哪几项是敏捷测试获得成功的要素?

专职测试人员在敏捷开发团队中主要工作或发挥的作用?

在编程中全面采用(单元)测试驱动开发(UTDD)吗?

单元测试的代码行覆盖率达到多少

六、敏捷测试的未来

敏捷宣言发起者之一Martin Fowler,曾被问到,最初写宣言的17个人应该在敏捷运动中占有特殊的地位吗?

老马说,不。我们写了宣言,我们将成为其未来发展的一部分,但我们在未来没有特殊的作用,这个角色必须向前发展。关键是:因为我们放手了,我们最终建立了一个可以自我进化的社区,可以解决我们甚至没有想象到的挑战,并不断努力。它是一个不断学习、成长和变化的社区,这是我们最大的长处。因为只要我们能够保持灵活,不断改变,那么无论我们面临什么挑战,我认为我们都有未来。

测试作为产品质量的保障性工作,必将在飞速迭代,持续集成的软件工业新趋势中扮演更加重要的角色,这场敏捷革命在未来是否会由测试引领向前,值得关注。

作者:陈旭