敏捷开发碰上系统测试这颗钉子了

作为">测试人员,在每次迭代结束时拥有稳定、有效的代码的想法让我心潮澎湃。而且,不管您信不信,许多年前(也许是 20 年前),在敏捷软件开发大行其道之前很久,我任职的公司就已经这么做了。在两周时间内,开发人员疯狂地编码。我们将获得一个稳定的构建版本,在它之上运行一组(手动)回归测试,然后宣布它已可供测试人员使用。测试团队将在接下来的两周内处理该构建版本,执行越来越复杂的测试,同时我们又针对下一个“稳定”构建版本疯狂地编码。

而且我们都在同一地点工作,所以这种方法确实很有效。当然,我们没有制定里程碑,仍然存在大量缺陷。而且我们也没有利益相关者来审核每次迭代。我们缺少敏捷软件交付的一个关键方面,那就是时间盒:满足利益相关者需求 的稳定、有效的代码。

情况没怎么变化,甚至在敏捷开发诞生之后,它带来的所有优点仍然存在。为了执行复杂测试,独立测试机构仍在“挑选”里程碑,然后在下一次迭代时继续测试它们。我们仍在尝试解决让测试团队与开发团队处理完全相同的代码的问题。而且,我们仍在以折衷方式解决满足利益相关者需求的稳定、有效的代码 的定义。

敏捷开发碰上系统测试这颗钉子了

但随着敏捷开发及其“done, done, done”定义的出现,这又引发了新的抱怨。开发人员感觉测试人员正在损害他们的“速度需求”。测试人员在开发人员前进到下一步时才查找代码中的缺陷。至少在我以前的工作中,这是符合预期的。开发人员不会这么说,“那已经是两周以前的事了,我现在正在处理其他事情。”但如果在测试中发现了根本性的问题,它们真的符合“done, done, done”原则吗?似乎是哪里出错了。

好吧,您会说,实现自动化怎么样?这不是一种基本的敏捷原则吗?要执行测试驱动的开发 (TDD)?没有单元测试,开发人员就无法交付任何代码?如果这足以证明一个里程碑构建版本是稳定的,以及该有效的代码满足利益相关者的需求,为什么我们使用传统测试方法还会发现如此多的缺陷?我们该如何定义进行验证来满足利益相关者需求?如果开发团队正在进行演示,它们展示了什么?它是否是完全一体化的演示,在整个系统的上下文中向利益相关者展示了新功能的价值?系统越复杂,答案越可能为“否”。

这里发生了什么?让我们稍微深入分析一下。首先,我们有一个采用敏捷方法的开发组织,但您可能已经注意到,我提到了一个“独立”测试团队。敏捷专家一般会推荐嵌入式测试人员。敏捷流程以整体团队 方法为基础(而且这为它的成功做出了巨大贡献)。那么为什么要有一个独立测试团队?因为应用程序是一个系统的一部分,这个系统非常大,不能再包含测试了。即使拥有包括全面的 TDD 和单元测试,以及一定复杂程度的测试(手动或自动化)的最好想法,开发团队也无法包含系统测试:完整的系统集成、大规模性能、大负载、大型数据集、安全性,您一定明白了。从组织上讲,有一个独立测试团队来负责下一个层次的测试,这通常是为了通过卓越测试中心来实现规模经济。

所以,情况可能有点类似于:

图 1. 集成测试已落伍了

而且至少在某段时间内,测试人员会花 N 天时间来进行安装和配置,结果却发现一些基本功能无效。我们称之为 gross breakage,因为它是一个无法使用的构建版本,并且它确实不是任何人的错。它是人们处理复杂事物的方式的一种表现。我们了解了深入的细节,变成了越来越小的领域的专家,因为我们可 掌握的细节量限制了我们可深入理解的区域。这创造了边界和需要交接工作的地方。

系统集成测试的一个全新世界

好了,对这个问题已讲得够多了。如果您仍在阅读,那么您就处在这个世界中了。而且您可能以与我们同样的方式至少已经尝试过 3 次来解决它:向构建流程中添加执行比传统的构建版本中包含的测试更为复杂的测试,也就是单元测试。您构建一个 lights-out 自动化安装程序来安装和配置该构建版本,验证和配置测试工具环境,执行自动化的测试套件,然后报告结果。

如果我们能简化这一过程,将会怎么样?或者让它可供越来越复杂的异构系统(通过 SOAP、MQ、SOA 等利用各种外部系统)访问,又会怎么样呢?现在有一些 服务虚拟化 工具允许随时执行全面的集成测试。这意味着配置复杂异构系统所需的硬件和时间更少,从而可在每个构建版本上运行集成测试。如果开发团队采用了持续集成,这就意味着可在每个集成构建版本上进行集成测试。

图 2. 服务虚拟化

通过一旦处于生产或分段环境中随即进行记录、随后对测试的复杂系统中的组件进行智能存根,服务虚拟化即可工作。我喜欢将此想成是虚拟化系统的复杂性,将更改的部分视为我希望测试的部分。这适用于许多情形,然而特别适用于系统中的其他组件未更改或未快速更改时。它实际上与在不同测试中逐渐减少更改的变量数量的测试最佳实践完全一致。关于服务虚拟化,有许多真正令人兴奋的好处:

虚拟化系统的复杂性以便简化测试环境安装 智能服务虚拟化包括有状态性功能,它允许您的测试做一些有趣事情,比如表现为一个服务每隔 X 次中断一次 虚拟化的服务组件数据池和企业测试数据工具(比如 Optim)中的测试数据管理 服务可在存在之前虚拟化 测试团队可与开发团队处理相同的里程碑,因为安装不再是瓶颈

这将我们带回到了敏捷软件开发和在每次迭代结束时交付稳定、有效的代码的承诺上。当测试人员和开发人员可同时处理相同代码并真正实现高质量构建时,它真正是一个全新的世界。Green Hat 技术现在已包含在 IBM Rational Test Workbench 和 IBM Rational Test Virtualization Server 中。

时间: 2024-10-14 10:04:02

敏捷开发碰上系统测试这颗钉子了的相关文章

微软软件研发策略转变之路 从瀑布式走向敏捷开发

长久以来,身为"软件开发商"的微软的名声并不太好,倒不是人们对微软的软件产品不满意,而是其更新周期太过漫长,比如Office.Windows.SQL Server和Exchange等主打产品的更新周期都长达3年左右,这其中的主要原因就是微软在软件项目的开发中采用了瀑布式开发模式.但随着用户对软 件的需求越来越苛刻,瀑布式开发模式已经难以满足新型软件的开发要求,而微软也不得不改变自己的软件研发策略. 国外科技媒体Arstechnica日前发文对微软软件研发策略的转变之路进行了分析. 以下

敏捷开发学习分享

程序员都很懒,你懂的! 敏捷不是快,而是拥抱变化(不断反馈的一个过程).                                                        简单的说,敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征.换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态. 敏捷原则:主张简单,拥抱变化,可持续性,

需求采集为小公司敏捷开发中的用户服务

网页制作Webjx文章简介:最近也许是因为大家面试很多,讨论用户需求采集的话题越来越多,好像突然大家一下子都在关注产品的这一流程.当然需求采集的方法很多,众多前辈们也都总结了许多,完全可以参考甚至搬到自己的项目中来实现.这些方法用到大公司大项目上,只要把握的好,数据分析工作做 最近也许是因为大家面试很多,讨论用户需求采集的话题越来越多,好像突然大家一下子都在关注产品的这一流程.当然需求采集的方法很多,众多前辈们也都总结了许多,完全可以参考甚至搬到自己的项目中来实现.这些方法用到大公司大项目上,只

敏捷开发与项目管理实战之敏捷需求分析

问题背景 敏捷开发中许多活动都是全员参与而非专人参与.需求分析同样也可以是全员参与 的一个活动.这反映了敏捷开发的"个人与交互胜过过程与工具"的价值观.需求分析是在需 求理解的基础上进行的.因此,全员参与需求分析有助于及时发现团队成员对同一个需求理解不一致的 问题,这很大程度上避免了缺陷的引入.另外,也有助于规避人力风险.比如,一个需求的开发者突然 需要请假,其他开发者可以马上顶替他,因为其他人也参与了其负责开发的需求的分析.此外,全员参 与需求分析也有助于全体成员的能力的提升.但问题

创建标准化代码在VS中实现敏捷开发

标准化程序开发是敏捷开发中的核心内容之一.标准化代码不仅有利于团队之间的合作,也有利于模块之间的集成,节省时间与成本.在VS中也为创建标准化代码做出了很多努力.笔者在这篇文章中就跟大家分享一下,在VS平台中创建标准化代码的注意事项.具体的说,就是五大禁令和四大推荐. 禁令一:不要随意检查代码. 这可能跟用户正常的认识有所差异.有些开发人员可能认为在开发过程中,检查代码是必须的.不过在敏捷开发的模型中,这恰恰是禁止的.因为如果在代码的编写中,不时的检查代码,会浪费开发人员大量的时间与精力.当然,这

利用Rational Team Concert在敏捷开发中进行持续集成

本文将介绍如何利用 Rational Team Concert(RTC)在敏捷开发过程中进行持续集成.详细说明了如 何在 RTC 中通过采取一系列的步骤和脚本开发,来保证持续集成过程的连续性和提高整个项目的效率. 同时还阐述了每一步可以利用的工具和最佳实践,从而使开发过程更加规范化,高效化. 概述 Rational Team Concert(RTC)是 Jazz 产品中最重要的一个,是一个可以任务分解集成,源代码版 本控制,进行自动构建和报告的工具.Jazz 做为 IBM 下一代的软件交付平台,

敏捷开发中高质量Java代码开发实践

概述 Java 项目开发过程中,由于开发人员的经验.代码风格各不相同,以及缺乏 统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较 大的测试投入和周期等问题.这些问题在一个项目组初建.需求和设计均具有不 完全可预期性和完备性的全新项目中将尤为突出.本文将结合敏捷开发周期短, 变化快等特点,介绍如何通过在开发过程中采取一系列步骤来保证和提高整个开 发团队的代码质量,并阐述了每一步可以利用的工具和最佳实践,从而使开发过 程更加规范化,成就高质量的代码,减少测试的投入,并促进整个团

windows下JAVA敏捷开发环境搭建步骤教程

  编程开发环境搭建还是挺重要的,第一步是先要搭建环境,有了环境才能开展工作.本文我们来看看windows下JAVA敏捷开发环境搭建步骤. 整个软件项目分为四个环境 开发本地环境.开发环境.测试环境.IDC环境.和传统C++开发不一样的模式是多了第一个开发本地环境.这是为什么呢,因为目前大部分开发人员还是比较熟悉windows下开发.对于mac和linux下直接使用软件并且开发的中国开发者还是少之又少,这套架构就这个现状做出来的.如下是环境搭建架构图: 从环境来说: 一.开发本地环境.开发集成服

使用.NET进行高效率互联网敏捷开发的思考和探索

不知从什么时候开始,创业变得很廉价,谈什么都是互联网,动辄融资千万.这阵风好像也刮向了程序员中,有那么一大批开发者,数据结构不好好学习.数据库原理不扎实掌握,在github上发布几个项目,用nodejs创建一些服务,再用H5写出APP,就自以为迈入了高级程序员的队伍,能够运筹帷幄互联网项目,难道学习新技术.新理念就是快速成长吗,显然不完全是,在这浮躁的氛围中,各种粗制滥造的互联网网站.APP接踵而至,很多看似漂亮的APP,连简单的http接口安全都没有措施应对,很多美丽的响应式网站,目录结构随意