敏捷过程不是一种技术,不是一门科学,也不是一种产品。它们构成了一个有些难以定义的空间。敏捷方法,或更准确地说,敏捷软件开发方法或过程,是用于开发软件系统的一系列方法和实践。任何尝试定义它们都会遇到自我和营销姿态。为了本文的目的,我们可以通过两种方式定义这个空间
通过列举。指出该集合中可识别的成员:XP(极限编程)、Scrum、精益开发、DSDM(动态系统开发方法)、Crystal、FDD(特性驱动开发)、敏捷 RUP(Rational Unified Process)或 OpenUP 等。(尽管有些人会声称 RUP 是反敏捷的)。
通过某种谓词。评估对“敏捷宣言”1 的遵守程度,但采用稍微主观的方法。或者更模糊地,通过符合 Jim Highsmith 对敏捷生态系统的标准:“混沌有序”(即,同时是混乱和有序的)、协作的和精简的。
曾经有人尝试通过与其他方法对比来定义敏捷方法。在他们 2003 年出版的《平衡敏捷与纪律》一书中,Barry Boehm 和 Richard Turner 将它们与有纪律的方法进行了比较,2 但敏捷方法也可能需要高度的纪律。许多后来者似乎有意阐明与某种神话般的、非常糟糕的“瀑布过程”的对比,认为瀑布过程携带了软件开发实践中的所有弊端。
我将这个空间称为敏捷性:构成这些敏捷方法一部分的概念、过程和实践的集合,即使它们并非都特定于这些方法——例如,迭代。我将对敏捷性感兴趣的人员、团队和组织的社会背景,包括用户、评论家或研究人员,称为敏捷世界。我使用术语 敏捷主义者 来指代关键的倡导者——敏捷性的发言人,他们通过发出响亮的声音或产生重大影响来使自己可见。
我的第一个主张是,敏捷性不是一种技术、科学或产品,而是一种文化。我意识到这提出了一个更加困难的任务:定义文化。荷兰社会学家 Geert Hofstede 将文化定义为“心智的集体编程,它将一个群体或类别的人与另一个人区分开来。” 3 语言学家 Helen Spencer-Oatey 将文化定义为“一群人共享的一组模糊的态度、信仰、行为规范以及基本假设和价值观,这些态度、信仰、行为规范以及基本假设和价值观会影响每个成员的行为以及他对他人行为‘意义’的解释。” 4
这个定义的一个含义与文化的功能有关。更具体地说,除了作为人们行为的影响因素外,文化还会影响人们如何解释他人的行为。文化的这种解释功能在跨文化情境中尤为重要,因为一种文化的行为规范可能会被其他文化群体误解或视为不协调。
我们可以在敏捷世界中观察到其中的一些现象,人们会说或写诸如“这非常瀑布式”之类的话,但他们通常从未见过瀑布式项目。例如,与敏捷主义者可能声称的不同,瀑布式项目可能在现场有客户并提供持续集成。通常,他们的目标不是瀑布式的内在属性,而是糟糕项目的特征。因此,“瀑布式”成为“另一种文化”的代名词——替罪羊、稻草人、皮纳塔。
一种文化可以是丰富多样的,正如侨民可以证明的那样,学习另一种文化是困难的,因为它所依赖的许多价值观都在我们从小就开始的长期教育过程中嵌入到我们的大脑中。这同样适用于敏捷性;由于没有明确的潜在科学或完善的知识体系,因此大部分知识实际上是通过口头传统和模仿来传播的(即,通过看到某事物的完成方式来学习如何做某事)。
在他的著作《自私的基因》中,5 并作为基因概念的类比,英国生物学家理查德·道金斯重新引入了模因的概念(mimeme 的缩写,源自希腊语 μíμhsiV,模仿),作为文化的复制“块”——驻留在人脑中的信息单元、文化传播单元、文化进化的基本构建块,6 从某种意义上说,这是作为文化不可或缺的一部分从一个人传递到另一个人。
模因的关键特征之一是它们易于复制;宿主是人脑,媒介是自然语言。“如果一个模因能够成功复制自身,它就会这样做。” 7 在这种复制中成功的模因是那些挑战其宿主、使其宿主对自身感觉良好、易于描述或记住、不无聊、脱颖而出的模因。“有效的模因将是那些导致高保真度、持久记忆的模因”,而不一定是“重要或有用的”模因。 8 模因有点像计算机病毒。“模因现在以光速在世界各地传播,并且复制速度甚至使果蝇和酵母细胞相形见绌。它们在媒介之间和媒介之间随意跳跃,并且被证明实际上是无法隔离的。” 9
看看一个软件项目,无论是否敏捷,我们如何应用模因学来更深入或不同地理解我们观察到的现象?在 2005 年一篇关于项目管理的文章中,昆士兰大学的 Jonathan Whitty 邀请我们“考虑我们称之为项目以及管理项目的大部分内容都是一种错觉:人类大脑巧妙地构思、塑造和方便地标记的一系列感觉、期望和感觉的人为构造。” 10 麻省理工学院的 Peter Senge 也认为,这些“隐性思维模式以图像、假设和故事的形式存在于意识层面以下,我们在头脑中携带关于我们自己、他人、机构以及世界各个方面的信息。” 11
我们在管理敏捷软件项目中知道和实践的大部分内容都以模因的形式在我们的大脑中积累。由于它们通过非常不同的路径到达那里,并且因为它们不像基因那样完美复制,所以我们最终得到不同的集合;没有真正的共同、共享的理解,只有共享理解的错觉,而这种错觉本身正在敏捷世界内外制造一些问题。
巧妙地使用积极的形容词是敏捷模因成功的一部分:谁想不敏捷?由于没有敏捷性的绝对尺度,我们都可以声称我们是敏捷的,比你、他们或上个月更敏捷。成千上万的人“发现”他们“做敏捷”已经很多年了。(顺便说一句,XP 中极限这个词的使用被证明是双向的,既促进了复制,又因为其在某些软件开发文化中的负面含义而减缓了采用。)
你可能会反驳说,敏捷性不仅仅是一个单一的自我复制的想法,而是一套复杂的想法、实践、经验等等。这就是我们引入模因复合体的地方,它是 模因复合体 的缩写,是 Hans-Cees Speel 用于更好地作为一个群体复制的模因集合的术语。 12 构成敏捷性核心的 50 个左右的模因是相互关联并相互支持的,XP 的创建者已经注意到并强调了他们敏捷模因复合体的小子集。敏捷团队(以及敏捷用户组和咨询公司)已被证明是复制、发展和传播敏捷模因复合体中敏捷模因的有效手段。
当研究的事物从其通常的环境中移除时,就会发生去语境化。当我们切断与自然或原始环境的关系时,事情开始变得不同或表现不同。
对于敏捷性,去语境化是通过大量非常短的书籍、简短的演示文稿、博客文章、幻灯片、电报风格的电子邮件线程等进行的。想法(模因)被复制,但以缩短的形式复制,其中只进行并重复——为了记忆而反复强调——一个小的方面,以使模因坚持下去。最常见的是,遗漏的是想法、概念或过程适用的确切上下文,或者是在其中创建并发现有用的上下文。这些简短形式的模因逐渐成为自身的漫画、小图标或仅仅是口号。
有时我们看到明确地驳斥上下文为不相关的,并且媒介明确或隐含地声明了某种形式的思想普遍性。例如,诸如“迭代必须为期三周”之类的简短模因在没有明确上下文的情况下毫无意义(如果我的项目只有三周长并且只有三个人怎么办?)。其他受欢迎的还有“没有 BUFD”(大型预先设计)或“YAGNI”(你不需要它)。它们在给定的上下文中都具有一定的价值,但太多时候在多次复制的过程中失去了这种上下文。我曾见过这种态度导致大规模敏捷项目失败,原因是软件架构的某些重点,即没有立即为最终用户产生任何价值,被当地的敏捷主义者系统地驳回,直到他们撞到墙(即,一个点,超过这个点,如果没有一些相当大规模的重构,他们就无法取得进展,而这些重构将不适合在一个或两个 sprint 内完成)。
与几乎以数字方式编码的基因不同,模因一旦变得稍微复杂,通常就会以低保真度复制。敏捷模因也无法幸免于这种快速漂移。
行话是特定于某个群体或行业的术语。它就像俚语或隐语,赛博朋克科幻作家布鲁斯·斯特林将其定义为“一个小知识集团刻意封闭的语言……一种在现实世界中没有吸引力的超专业极客文化语言。”
去语境化过程中的一步是将关键要素从其正常的日常“香草”根源中分离出来,并赋予它们更具异国情调的名称,即使概念相同或非常接近(见表 1 中的示例)。这增加了模因的可复制性,模因使用新名称变得“更可爱”并且更容易记住。宿主作为特殊的小型“内部”群体一部分的感觉进一步增加了可复制性:“我在我的组织中很特别,我与一小群其他特殊的人,一个精英群体结合在一起。” 这个群体的成员通过说一种叫做敏捷语的特殊隐语来互相识别。
再加上一系列或多或少鼓舞人心的隐喻,包括高尔夫或自清洁烤箱。效果将迅速稳定:由于模因的广泛复制,使用行话的人群更大,并且“选择性”吸引力降低。这意味着这些术语开始失去其特定含义。因此,我们最终会得到大量人在没有任何上下文的情况下使用术语。
表 1 |
|
香草 | 敏捷语 |
需求、要求、用例、场景 | 用户故事、传奇、史诗 |
阶段、迭代 | 冲刺 |
未计划的工作项 | 待办事项列表 |
返工、重新设计、修改、报废 | 重构 |
事后分析、汇报、项目结束审查 | 回顾会议 |
进度会议 | Scrum、站立会议、碰头会 |
生产力 | 速度 |
风险、问题、约束 | 障碍 |
团队 | 小组、单元 |
剑桥人类学家罗伯特·昂格写道:“当一群模仿者开始互相模仿时,涌现的结果就是文化。” 13 这就是大多数敏捷社区在几乎没有潜在理论或知识系统组织的情况下创建敏捷文化或敏捷模因复合体的方式。在经历了一段有些混乱的开始之后,敏捷主义学派现在被视为“跨越鸿沟”。每年,在不列颠哥伦比亚省海岸外,在温哥华岛和大陆之间的内通道中,通常独立游荡在海岸附近的各种虎鲸群(或母系家庭)会面进行为期一周的盛大庆祝活动;这被认为是增加了基因库。每年在敏捷和 XP 会议上举行的所有大师和空谈家的盛大聚会,及其支持者,似乎都起到了增加模因库的作用。
然而,在核心群体之外,他们大胆地继续发展和分享敏捷主义,我们目睹了关于敏捷实践的一些关键信息的显着退化。并不是说我们对它们的使用、有效性等了解得不多,而是已知和传播的关于该文化的大部分内容都已变得去语境化。
尽管我们可能没有时间研究、平衡和权衡我们在软件项目中做出的每一个决定,但敏捷性的大部分内容似乎都是教条:时间盒、尽早且频繁地交付、让最终用户参与进来等等。作为失去上下文的一部分,我们也失去了某些实践的理由;新的实践者只能碰碰运气,只是假设由于相同的模因存在于如此多的大脑中,它们一定是好的。
在 1991 年的一篇文章中,道金斯将某些类型的模因描述为“精神病毒”。 14 他稍微推动了一下类比,并将患者描述为表现出一系列“症状”。以下是道金斯对敏捷世界中存在的症状的三种描述。
1. “患者通常会发现自己受到某种深刻的内在信念的驱使,即某件事是真实的、正确的或有德的:这种信念似乎不欠任何证据或理性,但尽管如此,他仍然感到完全有说服力和令人信服。我们医生将这种信念称为‘信仰’。”
敏捷主义者经常忘记,我们的话题不是自然科学,他们没有越来越接近开发软件的唯一正确方法的知识,而这一切都只是一些意见的集合,具有不同程度的共识。
2. “患者通常会积极地将信仰的强大和不可动摇视为一种美德,尽管这种信仰并非基于证据。事实上,他们可能会觉得证据越少,信仰就越有德。”
这种态度通常在敏捷信仰的大师中不太常见,但在一些后来的采用者中却很常见。
3. “患者可能会发现自己的行为对竞争信仰的载体不宽容,在极端情况下甚至杀死他们或主张他们的死亡。他对叛教者(曾经持有信仰但已放弃信仰的人)或异端者(主张不同版本信仰的人——通常,也许显着地,只是非常稍微不同的版本)也可能同样暴力。他也可能对其他可能不利于他的信仰的思维模式感到敌意,例如科学理性的方法,这种方法可能像一块反病毒软件一样发挥作用。”
我现在已经在博客上看到了许多帖子,其中一丝疑虑引发了无数的咆哮——有时甚至是恶毒的攻击。
道金斯关于科学理性方法的最后一句引言将引起真正的科学家以这种方式做出反应:“哦,不,我们来这里是为了将科学融入其中。” 我们现在接近敏捷学领域,其中科学方法,最好是经验定量方法,被应用于敏捷性的各个方面,试图证明或证伪其相对于某些参考的优越性,而这些参考通常是非常漫画式的瀑布式或有纪律的方法。然后,研究问题通常遵循以下模式:看看相对于我们可能有多糟糕,我们可能有多好。
不幸的是,由于运行真正有意义的全面实验的成本和难度(在单个硕士或博士论文的时间框架内),小组实践要素(单个敏捷模因)在本科生群体中进行尝试,使得概括性值得怀疑(并且通常根本不质疑)。
我在这里重申我的断言:这不是自然科学。与可能逐渐接近理解原子如何工作的物理学家不同,没有我们需要通过更努力地挖掘来逐渐获得的软件开发的最终“唯一且正确”的方法。
如果一篇科学论文得出结论,例如,结对编程效率提高了 27.2%,无论是否明确说明“正如在 32 名本科生编写一个简单的桌面程序的 50 到 80 行 Java 代码时观察到的那样”,去语境化迅速将此消息转换为以下内容:“科学证明,结对编程比瀑布式方法有效 27%;” 然后变成这样:“通过采用结对编程,您将将交付时间缩短四分之一。” 上下文丢失了,有时是故意的,有时是天真的。结对编程只是一个敏捷模因的例子;用你最喜欢的模因替换它。
套用房地产人士的座右铭——位置,位置,位置——我想为所有敏捷主义者、敏捷语使用者、好战的敏捷主义实践者和敏捷学研究人员提出一个简单的做法:“上下文,上下文,上下文。”
解释消息来源的项目上下文(领域大小、持续时间等)。如果相关,请说明您自己的历史和背景。我比管理信息系统、数据库或电子商务更了解大型技术软件(指挥和控制、电话交换机、实时嵌入式设备、编译器)。当我在蒙特利尔与 XP 名人 Kent Beck 共进午餐时,我们互相描述了各自的背景,很明显,我们已经获得了不同的软件开发文化,这导致我们采用了不同的方法,每种方法在其自身的上下文中都取得了成功,尽管当去语境化时(主要是由第三方)在表面层面上显然是矛盾的。
上下文驱动测试学派的第一条原则是:“任何实践的价值都取决于其上下文。” 15 定义你的术语。它们是上下文的一部分。在敏捷性成为高中教授的商品之前,仅仅依靠敏捷语是不够的。我的用户故事不是你的用户故事。没有关于 sprint 待办事项列表的 ISO 标准。
其次,如果您不了解其他上下文,请不要将您的消息推广到其他上下文。世界上有很多软件不是面向人类用户的,无法增量交付,只有一个功能,并且在算法上很复杂。敏捷模因复合体的大部分内容并不完全适用,尽管许多敏捷主义者喜欢推断,“如果它在我的上下文中对我有用,我不明白为什么它在你的上下文中不起作用。” 这将弄清楚消息是否适用于模仿者的负担。
上下文驱动测试学派的第三条原则是:人,共同工作,是任何项目上下文中最重要的部分。在向可能在非常不同上下文中运作的其他人开枪之前,先询问上下文。我们犯的许多错误都是由于对共同思维模式的假设过多造成的。Peter Senge 建议“将探 inquiry 和倡 advocacy 相结合……使你自己的推理明确化……积极询问与你自己的观点不同的其他人的观点……你是如何得出结论的?” 16 并非因为一种实践是敏捷模因复合体的一部分,你就必须使用它。
我对我在敏捷世界中目睹的教条主义、偏执、蔑视或仅仅是彻底的无知感到沮丧。我并没有责怪顶级的敏捷主义者,尽管他们有时,只是为了写作和演示的效果,将他们的信息简化为最基本的骨架,简化为口号水平,并且他们省略了上下文——来源和适用性。
然而,随着敏捷性跨越鸿沟——如果你参加任何大型软件会议,如 SD East 或 West 或 OOPSLA(面向对象编程、系统、语言和应用程序),你就会看到——越来越多的人以强烈的信念和很少的背景说(或重复)相当不明智的信息,嘲笑任何敢于质疑他们主张的人,即使这只是对范围或上下文的澄清。
因为写下这些话,我将被当作敏捷主义事业的叛徒、瀑布式教堂的捍卫者、恐龙、超级老顽固而被枪杀,尽管我在适当的上下文中以及用我 33 年以上的经验的有色眼镜来评价敏捷性或敏捷实践。但我希望我的朋友和同事们保持冷静的头脑,质疑假设,不要过多假设共同的、共享的思维模式,并将他们听到、阅读、说或写的内容情境化。
PHILIPPE KRUCHTEN,博士,P.Eng.,是 Kruchten Engineering Services Ltd. 的负责人。他还是 Agile Vancouver 的联合创始人和总裁,以及不列颠哥伦比亚大学的软件工程教授。他领导了 Rational Unified Process 的开发,并且是《Rational Unified Process:简介》一书的作者
最初发表于 Queue 第 5 卷,第 5 期—
在 数字图书馆 中评论本文
Shylaja Nukala, Vivek Rau - 为什么 SRE 文档很重要
SRE(站点可靠性工程)是一种工作职能、一种思维模式以及一套工程方法,用于使 Web 产品和服务可靠地运行。SRE 在软件开发和系统工程的交叉点运作,以解决运营问题并设计解决方案,从而可扩展、可靠且高效地设计、构建和运行大规模分布式系统。成熟的 SRE 团队可能拥有与许多 SRE 功能相关的明确的文档体系。
Taylor Savage - 组件化 Web
如今,软件工程中没有哪项任务能像 Web 开发那样艰巨。Web 应用程序的典型规范可能如下:该应用程序必须跨各种浏览器工作。它必须以 60 fps 的速度运行动画。它必须立即响应触摸。它必须符合特定的一组设计原则和规范。它必须在几乎所有可以想象的屏幕尺寸上工作,从电视和 30 英寸显示器到手机和手表表面。它必须在长期内得到良好的工程设计和可维护性。
Arie van Deursen - 超越页面对象:使用状态对象测试 Web 应用程序
Web 应用程序的端到端测试通常涉及通过 Selenium WebDriver 等框架与 Web 页面进行复杂的交互。隐藏此类 Web 页面复杂性的推荐方法是使用页面对象,但首先需要回答一些问题:在测试 Web 应用程序时,应该创建哪些页面对象?应该在页面对象中包含哪些操作?给定页面对象,应该指定哪些测试场景?
Rich Harris - 消除准入门槛
一场战争正在 Web 开发领域打响。一方是工具制造者和工具用户的先锋,他们以破坏糟糕的旧观念(在这个环境中,“旧”意味着任何一个月前在 Hacker News 上首次亮相的东西)以及关于转译器等的热烈辩论为乐。