AICon全球人工智能与机器学习技术大会周四开幕,点击查看完整日程>> 了解详情
写点什么

什么是敏捷软件测试

  • 2010 年 12 月 09 日
  • 本文字数:3344 字

    阅读完需:约 11 分钟

【编者按】敏捷的理念已经深入人心,开发过程已经渐入佳境,测试的处境却稍显尴尬。测试从业者应该何去何从,怎样才能拥抱敏捷,体现出自己新的价值呢?InfoQ 特地邀请了来自 Google 的敏捷测试专家段念,为读者答疑解惑,希望所有测试从业者可以从中得到自己的答案。更多关于敏捷测试的内容,请访问 InfoQ 中文站敏捷测试相关内容。

在与不少测试从业人员讨论到敏捷的时候,被问得最多的大约是两个问题:“到底什么是敏捷软件测试?”,“敏捷软件开发还需要测试工程师吗?”。前一个问题是对于敏捷测试本身定义的疑问,第二个问题则是对敏捷开发将测试工程师排除在外的担心。其实,在探寻这两个问题答案的过程中,我们可以更清晰的了解敏捷软件开发中测试的工作定义,测试价值观,以及敏捷开发中开发与测试工程师的配合。鉴于这两个问题的意义,在本敏捷测试专栏的第一篇文章中,本人尝试从自己的实践出发,尽可能清楚的回答这两个问题。

确实,相对于敏捷开发红遍大江南北的状况而言,对敏捷测试的讨论则低调得多。敏捷联盟定义了敏捷的 4 个价值声明,以及伴随的 12 条支持原则,这 12 条原则中没有一条单独提到测试。这是不是意味着测试在敏捷开发中并不重要呢?实际上,如果仔细研读敏捷的 12 个原则,以及各种不同的敏捷实践,就会发现,测试在敏捷开发中占有非常重要的地位。无论是原则中的“频繁交付”,还是对“可工作的软件”的度量,或是敏捷开发实践中的“测试驱动开发”,“行为驱动开发”,都离不开测试的支持。在本人看来,敏捷开发中不把测试单独拿出来描述的原因,恰恰是因为在敏捷开发中,测试不再是一个单独的、和开发独立的过程,而是变成了驱动开发、衡量产出的主要的手段,成为了敏捷开发中所有工程师在工作时必须时刻考虑和实践的一个部分。简而言之,敏捷软件测试更多的是一种理念,而非过程。

既然是这样,为什么我们还要在这个专栏中专门来讨论“敏捷软件测试”?本人接触过不少软件开发和测试工程师,他们所处的组织有的正在努力向敏捷开发转型,有的已经实践了一段实践的敏捷开发,但由于由来已久的工作习惯,他们中的绝大多数并不能自觉的认识到测试在敏捷开发中的关键作用,而是有意无意的将测试仍然看作是与开发截然分开的“下一个阶段”,导致在实践敏捷开发的过程中遇到种种问题:要么是忽略了代码质量,导致在频繁的迭代过程中,每一个迭代的问题层出不穷;或是沿用原有的方法安排对系统的系统测试,导致测试团队疲于奔命,却总也赶不上开发所要求的进度。在这种情况下,专门来讨论敏捷软件开发中的测试,也就是敏捷软件测试的话题,对这些工程师应该会有一些帮助。

那么,到底什么是敏捷软件测试?很难给敏捷测试下一个精确、完善的定义,在本人看来,接纳了敏捷的核心价值观(沟通,简单,反馈,勇气,尊重),在敏捷软件开发过程中开展的测试就可以被称作是敏捷软件测试。因此,敏捷软件测试并不是一个与敏捷软件开发同一层次的划分,而是敏捷软件开发中的一部分,与传统的测试不同,敏捷软件测试并不是一个独立的过程,相反,它与整个敏捷开发中的其他活动交织在一起,处处都能看到它的影子。由于敏捷软件测试并不倾向于一个单独的过程定义,本人拟从敏捷软件测试与传统测试观点的比较、敏捷软件测试中采用的方法、测试工程师在敏捷软件测试过程中的工作等方面来阐述之。在这篇文章中,我们主要从宏观的角度来描述敏捷软件测试,而在本专栏的后续文章中,我们将对敏捷软件测试中采用的方法、工程师在敏捷软件测试中的工作内容等进行进一步的描述。

敏捷软件测试是建立在敏捷核心价值观的基础上,为了更生动的描述其与传统软件测试的区别,本人从自己的实践经验出发,尝试给出包含了本人认为包含了敏捷测试关键要素的“敏捷测试检查表”:

项目

检查点

注释

团队

  • 测试工程师是否与开发工程师建立了紧密联系?

  • 测试工程师是否与客户建立和紧密联系?

  • 是否参加每日站立会议?是否与开发工程师可以展开随时的,面对面的,对等的讨论?

  • 是否保持和客户的良好沟通?是否和客户一起维护良好定义的验收测试?

反馈

  • 项目是否建立了合适的验收测试?

  • 是否项目中每个人都能随时了解当前工作与可交付产品的距离?

  • 是否建立了针对开发质量的度量标准?

  • 开发工程师是否能够快速得到对提交代码的反馈?

  • 使用 Dashboard、燃尽图等方式展示当前工作与可交付产品之间的距离

  • 建立单元测试覆盖率等度量指标

  • 使用持续集成或频繁的构建让开发工程师快速得到提交代码的质量反馈

质量文化

  • 是否建立了开发与测试工程师共享质量目标的原则?

  • 团队是否注重开发质量,并在工作中尽可能保证高的开发 / 代码质量?

  • 共享质量目标意味着质量责任由所有工程师共同承担

  • 不仅关注最终的产出,不断对代码进行重构,保证代码质量

开发测试

  • 是否进行了充分的开发测试?

  • 是否设立了持续集成环境,并以持续集成的结果作为能够继续提交代码和发布的条件?

  • 是否建立了足够多的自动化测试,以及在设计时关注自动化测试的要求?

  • 开发测试应该建立一定的测试覆盖率标准,例如,在单元测试这个级别上,建立 60% 或 80% 的覆盖率要求

  • 通过使用 TDD、BDD 等技术,保证产品和代码的可测试性

  • 建立足够多的自动化测试,保证测试能够满足快速迭代的要求

检查表提到了“团队”、“反馈”、“质量文化”和“开发测试”四个方面的内容,在本人看来,这四个方面体现的就是敏捷软件测试与传统软件测试的最大的不同。传统软件测试关注的是通过尽可能完备的“覆盖”去发现尽可能多的问题,把测试和开发当成是两个独立的过程,测试是对开发阶段产生成果的验证。而敏捷软件测试则建立了一种不同的质量文化:测试的目的是为了保证产品快速发布,也就是对生产率本身的提高。基于“验证”的出发点必然会要求测试与开发的独立,以及尽可能“客观”和“完备”的度量产品质量;而基于“生产率”的出发点则要求建立敏捷的团队,要求测试与开发尽可能紧密,要求建立具有高度可测试性的软件,以及基于这些的高度自动化测试。

在检查表列出的所有项目中,“质量文化”是基础,“团队”是敏捷软件测试得以实施的条件,“反馈”和“开发测试”则是敏捷软件测试的具体方法。当然,你可以可以从敏捷的核心价值观来阶段这些项目:“团队”关注的是沟通尊重;“反馈”直接对应于反馈;“质量文化”基于勇气(承担质量责任的勇气)与尊重;而“开发测试”则是反馈简单的具体体现。

另一个在本文最初提出来的问题是:“敏捷软件开发还需要测试工程师吗?”,对这个问题,业界有不同的观点。有人认为需要,因为总有一些是需要测试工程师的技能完成的工作;当然,也有人认为不需要,因为敏捷开发中的测试注重开发测试与自动化测试,开发工程师就可以自己搞定与测试相关的工作。在实践中,那些大规模实践敏捷开发的公司(例如 Google),倾向于在组织中设置数量较少的测试工程师,在项目中分配较少的测试资源,甚至对某些项目,完全不使用测试工程师。

就我的个人实践经验,对大部分的项目,尤其是为明确的客户开发的项目,需要在敏捷开发团队中设置专职的测试工程师,因为:

  1. 测试与开发具有不同的思维方式:测试更注重全面的验证和检查一个系统,而开发工程师往往很难在大的范围内建立这样的思维方式。因此,无论是从系统的层面验证产品,或是从应用系统的角度发现值得测试和验证的点(access point),专职的测试工程师都更有效。
  2. 专职的测试工程师能够更关注于测试基础,建立测试需要的基础架构:由于测试工程师具有更好的对测试的理解,通常他们能够更多的考虑测试的需求而开发适合项目的测试基础架构(自动化测试框架),而开发工程师可以使用这些框架来建立面向功能或代码的测试。

但是,不得不说的是,敏捷开发对开发和测试工程师都提出了更要的要求,尤其是对测试工程师而言,传统的只能“精确模拟用户操作”的测试工程师,因为不能为产品带来生产率的提升,在敏捷开发的团队中,很难有所作为。在本专栏的后续文章中,我们会进一步讨论测试工程师在敏捷软件开发中的工作和任务。

关于作者

段念:Google 中国高级测试经理,毕业于华中科技大学,先后在通讯、嵌入式软件、互联网等多个行业的国内外知名公司中从事软件开发与测试工作。对软件测试中的技术和管理工作有独到见解,对软件测试团队管理、自动化测试、性能测试与开发测试有较多研究。


感谢张凯峰的策划以及审校。

2010 年 12 月 09 日 05:0012522

评论 1 条评论

发布
用户头像
文章不错,但是还有错别字。审核校验不严谨😂
2021 年 09 月 27 日 06:23
回复
没有更多了
发现更多内容

技术盘点:Unity SDK 开发中有哪些大坑?

环信

TcaplusDB x 和平精英 ,两周年生日快乐!

TcaplusDB

数据库 nosql TcaplusDB

PyFlink 开发环境利器:Zeppelin Notebook

Apache Flink

Zeppelin notebook pyflink 开发环境利器

又上新台阶!腾讯云TcaplusDB &与华为鲲鹏完成兼容性认证

TcaplusDB

数据库 nosql TcaplusDB

现在动手玩转腾讯游戏核心数据库!TcaplusDB华东客户Hands-on活动

TcaplusDB

数据库 nosql TcaplusDB

腾讯云TcaplusDB携手《穿越火线》亮相IGS大会腾讯云游戏&新文娱分论坛

TcaplusDB

数据库 nosql TcaplusDB

关于数据库应用的一些思考

石云升

数据库 8月日更

TcaplusDB x 王者荣耀|五五开黑节,我们无惧挑战!

TcaplusDB

数据库 nosql TcaplusDB

TcaplusDB君 · 行业新闻汇编(8月12日)

TcaplusDB

数据库 nosql TcaplusDB

TcaplusDB君 · 行业新闻汇编(8月9日)

TcaplusDB

数据库 nosql TcaplusDB

快手基于 Flink 构建实时数仓场景化实践

Apache Flink

flink 解决方案 实时数仓架构 快手

SmartNews:基于 Flink 加速 Hive 日表生产的实践

Apache Flink

flink hive airflow

如何搭建SpringcloudAlibaba基础环境(一)

燃着的半支烟

Java 微服务

TcaplusDB君 · 行业新闻汇编(8月8日)

TcaplusDB

数据库 nosql TcaplusDB

TcaplusDB X 光与夜之恋|你的恋爱我来守护

TcaplusDB

数据库 nosql TcaplusDB

TcaplusDB X 光与夜之恋,来谈一场高沉浸式的恋爱吧

TcaplusDB

数据库 nosql TcaplusDB

腾讯云TcaplusDB荣获全球云计算大会优秀解决方案奖!

TcaplusDB

数据库 nosql TcaplusDB

TcaplusDB君 · 行业新闻汇编(8月)

TcaplusDB

数据库 nosql TcaplusDB

为联邦学习互信提供“技术解”,星云Clustar荣获FTL-IJCAI 21 最佳应用论文奖

星云Clustar

联邦学习 论文 IJCAI 纵向联邦学习 联邦学习互信

TcaplusDB君 · 行业新闻汇编(8月7日)

TcaplusDB

数据库 nosql TcaplusDB

TcaplusDB X 黎明觉醒,探索不止,黎明将至

TcaplusDB

数据库 nosql TcaplusDB

TcaplusDB数据库 X《大主宰:大千世界》,战斗永不停歇

TcaplusDB

数据库 nosql TcaplusDB

TcaplusDB君 · 行业新闻汇编(8月10号)

TcaplusDB

数据库 nosql TcaplusDB

如何短时间突击 Java 通过面试?

Java架构师迁哥

腾讯云TcaplusDB X 大主宰·大千世界|万道争锋,独领其风

TcaplusDB

数据库 nosql TcaplusDB

数据库准实时数据同步平台成为新引擎,山西证券携手DataPipeline跑出加速度

DataPipeline数见科技

服务全球用户,EMQ X Cloud 新增欧洲部署支持

EMQ映云科技

服务器 mqtt 部署与维护 Cloud emq

Linux内核内存管理:地址转换和MMU

Linux服务器开发

操作系统 内存管理 Linux内核 内核开发 地址转换

为什么Kafka的数据不写了?

BUG侦探

DNS gopack Linux操作系统

TcaplusDB君 · 行业新闻汇编(8月11日)

TcaplusDB

数据库 nosql TcaplusDB

PyFlink 开发环境利器:Zeppelin Notebook

阿里云大数据AI技术

数据cool谈(第2期)寻找下一代企业级数据库

数据cool谈(第2期)寻找下一代企业级数据库

什么是敏捷软件测试-InfoQ