在软件开发领域,缺陷是很正常的,也是我们日常生活的一部分。所有工程团队都在努力尽可能减少缺陷,因为缺陷会对用户产生负面影响,而修复缺陷则会耗费公司的时间和金钱。
预防缺陷是一项复杂的任务,但我们可以通过遵循最佳实践来减少代码中的缺陷数量,例如编写非常详细的描述以覆盖所有可能的用例,使用干净的代码开发功能,或编写健壮的测试等等。
谁负责确保没有缺陷?
我们可以说责任完全在 QA(质量保证)工程师(如果有的话)身上,但这不仅是错误的,而且也是不公平的,因为我们将所有责任都委托给了他们。
在一些团队中,人们认为QA工程师的职责是确保没有任何环节会将引入生产环境。我听过开发人员说:”我写代码,然后QA测试”。但事实不应该是这样。
代码质量是整个团队的共同责任。
什么时候开始考虑代码可能会产生的缺陷?
大多数缺陷都是在开发阶段出现的,而出现这些缺陷的原因各不相同:如果开发人员在任务描述不正确的情况下开始工作,该怎么办?如果验收标准含糊不清甚至没有定义怎么办?
我们必须从创建和完善任务的那一刻起就考虑到缺陷。在开发过程中才考虑这些问题就太晚了。
假设我们有以下软件开发生命周期:
- 需求分析
- 设计
- 实现
- 评审和QA
- 部署到生产环境
无左移的软件开发生命周期
如果你注意到了,QA是在接近生产环境之前的最后阶段,这意味着QA的反馈来得很晚,而开发人员将在部署到生产环境之前的最后一个阶段考虑这些反馈。这可能导致在功能评审时开发人员和QA之间进行无休止的讨论,一个任务可能会有多次来回的交流(就像乒乓球比赛),仅仅是因为在开始开发之前QA没有参与进来。
随着开发阶段的进展,修复缺陷的成本会大幅增长。在开发的早期阶段修复缺陷比在部署到生产环境后修复,要容易和廉价得多。
因此,不使用左移测试会产生几种影响:
- 如果不从第一阶段就注重测试,实施时间就会增加。
- 随着实施时间的增加,任务的反馈会很晚才到达
- 如果反馈来得晚,修改代码的工作量和成本就会更高
那么,什么是左移测试?
使用左移的软件开发生命周期
左移测试意味着我们在一项任务的开始阶段就专注于测试。我们必须考虑所有用例,包括正常路径和边界情况,以确保任务验收标准尽可能详细。
左移测试的好处
- 及早发现缺陷:将测试活动提前到开发过程中,就能及早发现并解决缺陷和问题,从而减少在开发生命周期后期它们所需的成本和精力。
- 提高产品质量:将测试整合到软件开发周期的早期,随着问题在早期阶段被发现和解决,软件的质量得以提高。
- 加速反馈循环:开发人员能更快地收到代码反馈,从而及时做出必要调整,加快迭代和开发周期。
- 降低成本,更快上市:在开发过程的早期发现并修复问题,通过避免昂贵的返工和后期修复缺陷,降低了整体的软件开发成本。
- 加强协作:左移测试从项目一开始就鼓励开发人员、测试人员和其他利益相关者之间的协作,从而培养了一种责任共担和协作的文化。
- 提高客户满意度:左移测试能以更少的缺陷交付更高质量的软件,从而最终提高客户满意度。
如何实现左移测试?
尽早让测试人员参与进来
将测试人员纳入需求收集阶段是成功实施左移的关键,因为他们甚至在开发人员开始编写代码之前就能提供关于如何进行测试的详细视角。
如果开发人员有非常详细的验收标准,并清楚地知道代码应如何运行以及将测试哪些内容,那么缺陷和返工的数量就会大大减少。
然而,这也意味着测试人员角色的演变,测试人员通常侧重于在开发结束后捕捉缺陷,而QA本身则侧重于在整个 SDLC 过程中预防缺陷。这种转变并非一帆风顺,QA在日常工作中适应这些新职能时可能需要一些指导。
在任务中添加非常详细的验收标准
验收标准是一种契约,如果我们事先对问题进行了很好的研究,那么在开发过程中就不应该更改。
在开发之后更改验收标准的代价非常高昂,因为这会迫使程序员因为不正确的需求而重写已经完成的代码。
确保所有团队成员都理解验收标准
开发人员在将代码发送到审核阶段之前必须对其进行测试
通过正确地进行代码测试,可以避免出现多个缺陷和开发人员与质量保证(QA)之间的讨论。单元测试是一种非常强大的工具,可用于减少代码审核时间和代码中的缺陷数量。手工测试成本高昂,应尽量避免。
持续反馈
开发人员应在实施阶段与QA和产品经理(如有)合作,以便他们能尽快向开发人员提供反馈。这样,我们就能减少返工量和后期缺陷的数量。
真实结果
在 JOOR,我们的工程团队中有几个小组,我想向大家展示一些左移测试如何节省时间、缺陷和金钱的数字。
为了简化,我不会展示所有团队和所有季度的数据,但其他团队也取得了类似的成果。
指标
- 周期时间:一个故事从开始到完成需要多长时间
- 开发时间:一个故事在开发过程中需要多长时间
- 审查时间:一个故事从审查中(代码审查和QA)到合并/部署需要多长时间
按季度统计的指标
工作形式
要点
在第二季度,我们没有使用左移测试。我们修复的缺陷百分比为10.3%。如你所见,代码审核时间超过了两天。
在第三季度,我们开始使用左移测试,但你知道事情是如何发展的。在团队中建立一种新的方法并不容易,每个人都需要时间适应并开始看到其中的好处。
尽管如此,我们还是成功地将周期时间缩短了23小时,代码审核时间也减少了6小时。
在最后一个季度,即第四季度,我们将周期时间缩短到了2天11小时,相比6个月前缩短了1天半。代码审核时间缩短到14小时,与最初的2天5小时相比非常短。
除此之外,我们在减少缺陷百分比的同时完成了更多的工作。
正如你所看到的,使用左移测试编程并不会花费更多时间,因为开发时间得以保持,但是代码审核时间却大大缩短,因此我们可以在更短的时间内完成更多的工作,同时也不会增加更多缺陷。