随着敏捷开发模式逐渐走入大众视野,它开始逐步取代了传统的瀑布式开发模式,被越来越多的研发项目团队采用。敏捷开发采用快速迭代,快速发布可用版本的方法,持续输出、持续改进。不同于传统的软件开发模式,敏捷开发模式有着自己鲜明的价值和方法。但即使实践了敏捷,我们可能还会发现,Bug并没有消失。
面对这些Bug的出现,团队成员常常会产生这样的疑惑:
- 为什么明明进行了很多轮的测试,但软件正式上线还是会出现很多Bug?
- 为什么这么明显的Bug,上线之前就没有测试出来?
- 这些Bug,是不是因为测试人员工作不到位造成的?
但实际上,测试人员并不能决定软件质量的好坏。尤其在团队选择敏捷开发模式下,敏捷测试部分也同以往的软件测试流程有所不同。这对测试人员提出了新的要求,带来了新的挑战。那么如何平衡敏捷的快速迭代开发和解决Bug的矛盾呢?
一、为团队设立专职QA
敏捷团队中的敏捷测试人员通常被称为质量分析师、SET、测试工程师、QA Lead,在敏捷团队,大多数人也会把QA当作一个独立的角色使之与其他团队成员区分开来。那么QA之间又有什么不同呢?通常QA可以分为三类:业务侧、技术侧、DevOps侧,这三者形成了QA的三个维度。敏捷团队中的QA可能具备其中的一个或者是这三类中所有的技能。 大多数人也会把QA当作一个独立的角色使之与其他团队成员区分开来。我认为这是一个过时的概念。QA和开发人员的区别在于思维方式的不同。
业务侧QA:他们帮助团队更清晰地了解整个项目的业务问题。通过QA把客户需求转化为验收测试用例,帮助没有技术背景的客户和没有业务视角的程序员打破维度不同的职业壁垒。在用户故事开始之前,敏捷团队QA需要和程序员一起结对讨论用户需求,帮助团队了解更多的业务信息。在此期间,他们会督促软件开发工程师来写验收测试,以确保用户故事能够及时被测试。
技术侧QA:通常在敏捷团队中,技术侧QA都需要有过硬的专业技术,他们甚至和程序员没有任何技术上的差距。他们可以利用丰富的自动化测试知识实现TDD,协助团队为项目选择合适的测试框架,为团队提供一个良好的测试策略,确保产品质量。
DevOps侧QA:在敏捷团队中,DevOps侧QA需要根据迭代节奏和持续交付的原则,帮助团队构建持续集成的测试流水线,以便每次出现问题后都能及时得到反馈并解决。帮助团队以良好的状态高质量地完成持续交付。DevOps方向的QA会通过设置一些脚本来帮助团队成员能够更方便地在本地执行测试,例如代码扫描、单元测试、组件测试和功能测试,并推进团队实现自动化测试的开发与执行。
这三类QA的共同目标,都在于帮助团队在敏捷开发的每个迭代周期都能够更加注重交付给客户的有效价值,并且确保交付给客户的产品质量。敏捷团队中的QA会扮演多种角色,但是他们最终的目的都是为了帮助团队能够实现更快更好的交付业务价值。
二、构建质量驱动型团队
除了在敏捷团队中加入QA,把握三大不同的业务方向,在敏捷过程中,有效的项目监管和控制是至关重要的。而软件的质量也取决于每一个团队成员,通过团队间的充分合作,要做到团队整体对质量负责。
1、确保信息透明
需要让团队成员知晓团队的共同目标,每次交付产品的服务对象和用户需求和质量目标是什么。包括短期目标和长期目标,包括业务动态、发展战略、用户反馈、工作中心、持续改进的状态、项目进度、团队压力等各个方面,信息透明能够打破团队成员间的业务边界,更好地融入团队,彼此协作,这是一个敏捷团队健康与否的重要标志之一。
2、建立及时反馈机制
在敏捷团队中,软件质量的基础在于团队是否能够真正实现持续测试、持续交付、持续集成、及时反馈。这就需要团队建立一个健康向上的合作机制,并不断优化反馈渠道,一个良好和谐的反馈机制可以促进团队的健康发展,有助于构建质量驱动型团队。
3、认真对待Sprint回顾会议
Sprint回顾会议是敏捷软件开发中非常重要的一环,但有些团队的回顾会议流于形式,并没有带来什么效果。Sprint回顾会议是团队检视自身并创建下一个Sprint的机会。Sprint回顾会议的目的在于:
- 回顾前一个Sprint中的情况;
- 找出并加以排序做得好的和潜在需要改进的主要方面;
- Scrum Master制定改进团队工作方式的计划。
在Sprint回顾会议中,最需要保持开放的氛围,团队成员彼此信任,并乐于接受新的想法、观念,最终形成一个质量驱动的高效率团队。
4、打造全员学习的团队氛围
敏捷方法论并不能取代生产力,不同技术水平的开发人员,最终交付的软件质量是不同的,因为我们没有办法让开发人员完成他能力范围之外的工作。敏捷开发仅仅是一种开发模式,它不是银弹,敏捷不能解决问题,只能让问题暴露的更早。如果团队不能解决技术问题。就不能完成持续的高质量交付。因此,构建学习型团队,让团队成员养成不断学习的习惯。这样能够帮助团队从根本上提升研发水平,降低开发成本、提高开发效率并提升产品质量。
项目团队整体对软件质量负责是敏捷开发的基本原则,但要真正做到这点并非易事。需要我们在研发过程中,明确总体的质量目标,并且确保团队所有成员理解清楚各自需要为哪部分的质量负责,在研发项目的全生命周期,需要引入专业的QA人员来站在更高维度对整体质量做把控,需要多职能角色的合作,取长补短,能力互补。同时也要注重团队建设,组建学习型的健康团队。