方法 | 基本原则 | 主要特点 | 限制 |
---|---|---|---|
自闭症谱系障碍 | • 适应文化 • 任务驱动、基于组件的迭代开发过程鼓励协作 | 组织服务于适应性系统的目的,该系统鼓励出现而不是严格的计划或决定论。 | ASD 与概念和文化有关,而不是实际软件开发。 |
数字数据管理系统 | • 利用 RAD 控制、时间盒方法 • 授权 DSDM 团队 | 使用原型制作;各种用户角色,例如大使、远见者和顾问 | 该方法本身可能适用于所有人;但是详细介绍该方法复杂性的白皮书仅限于相关利益相关者。 |
经验值 | • 客户驱动的开发 • 每日构建 | 重构——系统不断地重新设计以适应变化并提高响应能力。 | 不太重视或关注全局视图和管理。 |
SCRUM | • 独立、小型、自组织、自管理的团队; • 30 天周期 | 用 Scrum 的新产品开发视图取代旧的定义和可重复的软件开发方式。 | 30天周期的无缝执行虽然有详细的规范,但是集成和验收测试没有详细说明。 |
软驱 | • 五步流程 • 面向对象、组件或基于特征的开发 | 方法简单;系统功能的设计与实现;对象建模。 | 只专注于设计和实施。需要其他支持方法。 |
自适应软件开发 (ASD):复杂软件开发过程的极简方法
介绍
自适应软件开发 (ASD) 是极限编程和 Scrum 等其他敏捷框架中鲜为人知的框架。它在业内人士中不太受欢迎的原因可能是一种误解,认为它不是满足软件开发实验室不断变化和快节奏环境需求的理想框架。
好消息是这只是一种误解。而且,坏消息是,它确实粉碎了你的信仰,因此,挑战你忘却、重新学习并无缝地适应你自己的新信仰体系!
自适应软件开发是最早的敏捷方法之一。它是 Jim Highsmith 和 Sam Bayer 在快速应用程序开发 (RAD) 方面的工作成果。这种方法有趣地验证了一个事实,即不断适应软件开发过程是很正常的。
这种验证消除了对任何软件开发周期中经常涉及的未知和不确定性的恐惧。事实上,这种验证为后来的方法论以更加开放和平衡的心态迎接不确定性和混乱铺平了道路。
然后让我们探讨这种不太流行的自适应软件开发敏捷方法的各个方面。
简短的历史
自适应软件开发是软件工程中的一个经典例子,必然是发明之母的谚语。在 1990 年代初期,当 Sam Bayer 和 Jim Highsmith 充分利用 RAD 并创建 RADical Software Development 时,他们意识到这些方法还不够。
重要的是要有一个鼓励组织内部以及与客户协作的过程。他们意识到,他们需要一个让所有利益相关者都能轻松应对软件开发固有不确定性的过程,同时为过程本身的持续、一致和真正的学习腾出空间。
正是出于这些需求,自适应软件开发应运而生。海史密斯在 2000 年出版了一本书,名为:自适应软件开发:管理复杂系统的协作方法,拜耳和海史密斯都成为 2001 年敏捷宣言的签署者之一。
在技术领域,自适应软件开发引入了:
更短的迭代
更快的速度
更多协作
更容易应对不确定性
更加开放地忘记和重新学习。
什么是自适应软件开发?
ASD 是一种开发方法,鼓励在整个软件开发项目中不断学习。它相信这是顺利渡过软件开发固有复杂性的唯一正确途径。遵循严格的计划或原则不会增加业务或产品的价值;它提出。
自适应软件开发制定了最低限度的指导方针,使其成为一种极简主义的方法,旨在通过删除所有不“有趣”和“有机”的东西来提高效率。
是的,ASD 强烈提倡一种既有趣又自然或有机的软件开发过程。海史密斯对此有一个有趣的术语——涌现。他相信最好的软件总是偶然的结果。
当必要的情况自行出现时,它们会产生一种有可能改变世界的产品。根据海史密斯的说法,这种情况的结合就是出现。
以下是定义 ASD 的一些主要原则:
有足够的出现空间而不是决定论
专注于称为应用程序功能的结果,而不是任务
与生命周期的表面变化相比,更喜欢管理周期的深层变化
面向高速迭代和生命周期
使用时间盒迭代周期和风险驱动计划等技术
尽管有足够的不确定性和混乱空间,但仍能够快速向客户交付增值产品的能力。
在自适应软件开发中,项目经历一个迭代周期。这个周期涉及三个经常重叠的阶段。让我们详细探讨每一个。
我们的产品负责人喜欢我们,因为我们确保不与内置质量妥协。以下是我们如何引领成功的敏捷转型。
适应性生命周期的三个阶段
适应性生命周期是 20 世纪 80 年代中期开始的螺旋生命周期的演变。螺旋式生命周期的主要问题是它对可预测性的依赖。尽管 RAD 的可预测性和确定性较差,但螺旋式生命周期实践者的心态仍未改变。
自适应软件开发中的自适应生命周期试图通过反思来解决改变思维方式的问题,并完全按照该反思命名此过程中的阶段。
在软件开发过程中将不确定性和混乱视为“正常”的自适应生命周期的这些阶段是推测、协作和学习。
推测
描述自适应生命周期第一阶段的“推测”一词本身就反映了自适应软件开发示例的全部内容。投机阶段谨慎而有意地消除了经常带来许多不必要的包袱和紧张的计划因素。
这个阶段让团队完全自由地欢迎和接受结果,而不必担心未知或不确定性。它完全消除了始终正确的有害需求,让所有利益相关者都放心。
在推测阶段:
定义项目任务说明
创建和分享要实现的目标的总体思路
团队采用可帮助他们在整个项目周期中根据需求进行调整和更改的工具。
大多数情况下,投机阶段发现自己分为两个步骤。这些步骤大致称为项目启动步骤和适应性规划步骤。顾名思义,启动的第一步涉及作为项目基础的东西。这包括项目管理信息、任务说明和其他基本工具和信息。
在自适应规划中,不同的产品功能会根据他们的专业知识和技能分配给不同的团队。这需要团队决定:
项目的时间表
开发周期数
根据一致决定的时间框,每个周期将花费的时间
循环的主题和目标
每个循环的组件分配
项目的任务列表
推测阶段的目的是:
消除不必要的计划负担
开放全流程,创造创新空间
将计划保持在最低限度或最基本的水平
为最终产品设置适当的框架
允许通过小迭代对每个新的推测阶段进行探索和实验。
自适应软件开发的推测阶段涉及三个主要工具,团队使用这些工具开始流程。他们是:
章程:此工具包含带有视觉摘要的项目愿景。它定义了业务成果并突出了主要的产品差异化因素。
数据表:其中包含项目和客户的基本信息。这是项目所有利益相关者关注的焦点。
产品规格大纲:其中包含有关产品规格的详细信息。它定义了所需的组件或产品的特性。
合作
正是在这个阶段,真正的发展才开始。这个阶段是关于群体出现的。它是关于将不同的经验、知识和技能结合在一起。这形成了一个协作环境,在这个环境中,多样性是整个开发周期中创造力和创新的基石。
协作阶段的内在原则是:
多样性对于有效收集、分析海量数据或信息并将其应用于产品开发至关重要
协作或协作环境是充分利用这种多样性的唯一真正方式
当这种多样性被彻底应用时,就不需要构建复杂的应用程序。多样性使他们能够有机地发展。
通过在传统项目管理技术和渐进式协作环境之间取得平衡来实现协作
一种根深蒂固的感觉,一种开放式的涌现方式。
这些原则可以由了解协作在自适应软件开发中的重要性的强大且经验丰富的团队来构建。如果团队遵循相互信任、相互尊重、相互参与和相互承诺的四个基本原则,协作阶段就会取得巨大成功。
学习
自适应软件开发全都与实验和探索有关。因此,它自然也提供了很好的学习机会。学习阶段正是关于这一点。
在每次迭代之后发生的这个阶段,敏捷软件开发团队聚集在一起分析其知识、技能和专业知识水平。这是通过以下方式完成的:
研究技术评论
研究项目回顾
通过焦点小组和其他可能或可用的方式促进用户反馈。
在其他方法中,学习阶段也称为回顾或回顾。为了充分利用这一阶段,应该:
短迭代和多次迭代,因为短迭代意味着更小的错误。而且,从小错误中吸取教训比从大错误中吸取教训更容易、成本更低。
几次密集的迭代将帮助团队发现产品中最小的错误
最终用户对用户体验的慷慨贡献
包括开发人员和最终用户在内的所有利益相关者对假设的诚实评估
接受消除各自利益相关者的基本假设的结果
就定义适应性周期下一步的共同学习达成共识。
学习阶段是适应性生命周期中非常关键的阶段,因为它为下一步行动定下基调,并在整个软件开发过程中引导利益相关者朝着正确的方向前进。这一阶段的成功取决于有效的协作,这是第二阶段,也是适应性生命周期的核心。
从顶级软件开发公司
构建功能丰富的软件 950+ 开发人员 | 10年以上的经验
自适应软件开发的主要特征
ASD 不仅仅是构建组件或产品功能。它还涉及对现有组件进行必要的修改。这与它的起源有关。
自适应软件开发起源于快速应用程序开发或 RAD。这是因为意识到 RAD 的机械和极端线性方法不起作用。
为了解决这个问题,Jim Highsmith 和 Sam Bayer 经过多年的不懈努力,提出了围绕持续开发过程的适应性生命周期。其主要特点是:
尽管是开放式的,但特定的任务驱动着它
它是一个基于特征的
它鼓励频繁和小的迭代
它采用时间盒
它是风险驱动的
它容忍变化
它具有基于组件的循环。
ASD 的风险驱动功能具有有趣的内涵。这意味着它创造了一种氛围,在这种氛围中,失败是不受抑制的,而且失败得太快了!当然,它相信快速失败并通过彻底吸取教训快速前进!
ASD 中的风险驱动方法要求在项目开始时通过将高风险项目置于周期的早期来识别风险。如果尽早识别风险,则减少组件故障会更容易且成本更低。
而且,如果没有降低风险的可能性,加速失败可能有助于在项目开始时相应地修改组件。
自适应软件开发宣称几乎所有的东西都会过于频繁地改变,从而彻底改变了软件开发过程。它教会了痴迷于计划的行业根本不要对计划挑剔。这有助于它创造一个环境,在这个环境中,变化不会压倒一切,而是激发创造和创新。
与其他方法的广泛比较
将 ASD 与其他方法区分开来的一个主要因素是 ASD 周期是以组件为中心而不是以任务为中心。ASD 中的组件是一组功能,重点始终放在预期结果上。这些特性或组件是协同计划、实施和交付的。
ASD 中的组件不仅仅是按钮、表单字段或其他界面元素等视觉或有形实体。它本质上也包括负责创建这些有形实体的所有无形事物。
存在三个这样的组件:主要组件、技术组件和支持组件。
主要部件
主要组成部分是指业务的方式和与之相关的事物。
技术组件
技术组件代表实现主要组件所需的技术基础设施。它们包括硬件和网络基础设施以及软件基础设施。软件基础设施包括操作系统、数据库、框架等。
通常,技术组件几乎可以使用。但是,如果不是,则需要根据自适应生命周期的确切要求安装它们。
支持组件
顾名思义,它包括其他两个组件未涵盖的所有内容。它可能包括与软件开发、培训材料和成功的自适应软件开发过程所需的其他类似事物有关的外部因素的文档。
2015 年,电气和计算机工程作者兼 Payame Noor 大学教授 Mahdi Javanmard 进行了一项名为:敏捷与传统软件开发方法的比较。
在同一篇论文中,他还比较了不同的敏捷方法。以下是他在同一项研究中提供的表格的摘要:
与其他敏捷方法相比的其他一些差异:
特征驱动开发 (FDD) 为其工程实践设定了规定。它的软件开发过程取决于工程实践,例如持续构建、领域对象建模和个人代码所有权。
在 ASD 中,绝对没有坚持任何类型的技术。
与极限编程或 XP 不同,ASD 是一个基于组件的过程,其中组件在推测阶段被分配到周期以实现无缝实施。
与此相反,XP 侧重于面向任务的方法。开发人员在当前迭代的每个计划会议之后挑选故事,将它们分解为任务,估计它们,并就它们的实施达成一致。
自适应软件开发的优势
自适应软件开发过程应运而生,以摆脱其他软件开发过程中存在的问题。了解它的优势会很有趣。
一个精心设计的框架,可以快速开发复杂的软件应用程序
更短和更小的迭代有助于在一开始就发现错误
较短的迭代意味着检测到较小的错误,与较大的错误相比更容易处理
更短的迭代也具有成本效益
一个有意设计的框架,允许出现、探索和实验
通过营造协作和学习的氛围,鼓励所有利益相关者之间的绝对透明
将最终用户及其反馈整合到开发过程中
以平衡的方式允许多样性文化
对短迭代进行密集测试以减少出现错误和其他漏洞的可能性
非常注重结果
鼓励责任文化,几乎没有留下糟糕结果的余地
自适应软件开发的陷阱
任何事物都有一些缺点是很自然的,即使它是为了最高利益。自适应软件开发有其自身的陷阱。他们是:
它的开放式方法需要Scrum 团队具有一定的成熟度和经验。很难有一个成熟且经验丰富的团队,能够接受和处理有时的不确定性。
在任务驱动的框架中,一开始就制定了一个非常简短的计划。对于习惯于将详细计划作为关注点的头脑来说,这可能是一个挑战。
自适应软件开发在不断的用户反馈中茁壮成长。开发人员必须获得详细的反馈,这有时是一个挑战。此外,最终用户并不总是清楚他们想要的解决方案是什么。
协作可能会很棘手,因为它有时可能会导致不必要的会议和讨论,从而导致项目延迟。
糟糕的协作也可能导致模棱两可的决策。
由于在每次迭代中进行密集和频繁的测试,基线成本会增加。
随着自适应软件开发过程的快速步伐,细致的文档变得很困难。
与结构相对良好的其他传统方法相比,自适应软件开发生命周期更难衡量。
它的开放式敏捷方法可能会导致团队取得不一致的进展。
结论
根据讨论,很明显,所有敏捷方法论本质上都是在努力拥抱变化,而不是被它淹没。
所有这些方法,包括自适应软件开发,都促进协作、适应和密集迭代。自适应软件开发在这些方法中很特别,因为它直接解决了规划的讽刺或悖论。
不完全是放弃计划,而是通过协作和学习更加重视涌现、探索和创新。对于以下企业来说,这是一个很好的框架:
• 有信心有足够的心理和基础设施准备好接受自适应软件开发
• 准备好承担增加的基准成本
• 渴望看到他们的产品处于不断发展的状态
• 准备好探索新的想法或方法
• 足够灵活以适应持续的风险缓解和测试
如果您是这样一家企业,认为它确实具备无缝实施自适应软件开发框架所需的条件,请不假思索地聘请软件开发人员并为之努力!