65.9K
CodeProject 正在变化。 阅读更多。
Home

敏捷开发:第 2 部分

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.40/5 (31投票s)

2008年10月6日

CPOL

14分钟阅读

viewsIcon

64906

敏捷开发的快速 FAQ。

目录

引言

本文是一个敏捷开发的快速 FAQ。通过阅读本文,您将了解敏捷开发的基础知识以及实施敏捷开发的不同方法。

您能解释一下重构的概念吗?

如果您阅读过 XP 的生命周期,在实现任务之后,有一项工作就是代码重构。重构是指在不改变代码行为的前提下,改变软件的内部结构以提高其质量的过程。没有任何代码能在第一次就达到完美的架构、编码规范和高复用性。通常它会随着时间的推移而改进。它帮助开发人员今天实现必要的解决方案,明天改进/优化代码。重构是指在不改变系统功能的情况下,通过改变系统来改进其内部结构的过程。以下是在重构期间执行的三项主要活动。

简化复杂代码

XP 关注的是轻量级和简洁。这不仅适用于流程,也适用于编码。当您看到可以简化代码时,请与您的开发伙伴讨论并实现它。例如,下面展示了一段代码,它被简化成了一个方程。

图:简化代码

将相似的操作移入可重用代码。如果我们有相似的操作,就将它们移到一个可重用代码中。例如,在下面的类中,我们有各种排序函数,它们分别按电话、代码、姓名和日期进行排序。我们可以将它们合并到一个名为 `sort` 的函数中,并使其变得简单。

图:可重用代码

删除重复和冗余

当项目时间紧迫时,项目很容易出现大量重复。因此,当开发人员完成任务后,他们可以审查这些重复项。例如,下面的图“删除重复项”展示了如何从客户表中删除电话号码的重复。客户表中有重复的字段,如手机号码、固定电话号码和办公电话号码。从抽象的角度来看,这些都代表电话号码。因此,我们将客户表分成两个表:客户表和客户电话表,并在它们之间建立关系。

图:删除重复项

下面是另一个场景,我们有一个发票类,其中包含两个方法 `GenerateInvNo` 和 `CreateInvNo`,它们执行相同的操作,即生成唯一的发票编号。我们可以通过将这两个方法合并为一个来重构/改进代码。

图:代码重复

没有任何代码是完美的,它需要被完善。

在特性驱动开发(FDD)中,什么是特性?特性是指为最终客户增加价值并可以计划的过程。简而言之,它具有两个特征:

  • 我们可以规划和安排一个特性。
  • 它应该是能为最终用户提供价值的东西。

图:特性

简而言之,特性不一定与用例或用户故事相匹配。它也应该是可规划和可管理的。特性是在给定的时间盒内交付的(我们将在接下来的章节中详细讨论这一点)。

您能解释一下 FDD 项目的整体结构吗?

FDD 是一种迭代交付项目的方法。我们不是一次性交付项目,而是在规定时间内交付特性。让我们了解一下 FDD 的周期是如何进行的。我们将有两种视图:整体流程和详细迭代流程。下面的图“FDD 项目结构”展示了 FDD 项目的步骤式方法。

下面的要点是针对每个迭代循环的(接下来的章节将更详细地介绍这些内容)。

  • 识别特性:在此阶段,我们识别项目中的特性。请记住一点,特性不是简单的用户视角的需求;我们应该能够安排一个特性。
  • 确定特性优先级:大爆炸理论是错误的。许多项目经理试图在第一步就交付所有东西,但这在实践中是困难的。相反,首先交付最需要的功能,然后是下一个需要的功能,最后是所谓的锦上添花的功能。要以一种特性接一种特性的方式交付,我们需要从用户的角度对特性列表进行优先排序。
  • 定义迭代和时间盒:您首先想到的可能是我们应该交付一组特性,但在 FDD 中情况并非如此。我们根据迭代的大小进行交付。迭代是基于“时间盒”的,这样我们就能知道迭代的时长。根据时间盒,决定是否可以交付特性。
  • 规划迭代:在每次迭代开始时,我们需要规划如何执行计划。
  • 创建发布:我们根据“规划迭代”阶段制定的计划进行编码、测试和交付。如果一切正常,我们就继续前进,否则我们就进入下一个迭代。

图:FDD 项目结构

上述定义的 FDD 周期是一个总体视图。让我们深入了解每次迭代是如何执行的。下面的图“迭代步骤”详细展示了迭代的执行过程。

  • 迭代启动:迭代的时长已经确定,但以防万一您想对其进行验证,那么这是该阶段。 (译者注:原文此处为 "Iteration kick start",意为迭代启动,但结合上下文,更像是“迭代验证”或“迭代准备”阶段)
  • 规划本迭代的特性:在此阶段,我们准备工作分解结构 (WBS)。我们将特性映射到 WBS 中的工作包。此计划必须得到最终用户的批准。
  • 研究需求:在此部分,我们编写详细的需求文档/用户故事或用例。
  • 设计架构:在此阶段,我们规划迭代和特性的整体架构。一旦设计完成,我们就会审查架构是否存在任何问题,并进行迭代以完成审查。
  • 编写测试计划:在开始编码之前,我们编写测试计划来验证迭代的特性。
  • 执行:我们根据迭代设计阶段确定的设计进行编码。
  • 测试:执行完成后,我们运行“编写测试计划”阶段编写的测试计划。如果出现任何失败,我们会回到执行阶段进行修复。我们还会在此阶段运行用户视角的验收测试计划。
  • 部署:最后,我们完成工作,并将系统部署到最终客户的 premises。
  • 下一个迭代:在此阶段,我们分析已交付的特性,并将它们传递到下一个迭代。如果一切顺利,我们将进行下一个迭代。

图:迭代步骤

测试在每次迭代结束时进行。这确保了对每次迭代的每个可交付成果进行频繁的检查。

您能解释一下时间盒的概念吗?

FDD 中的每个迭代都必须限制在一定的时间范围内。决定每次迭代时间长度的过程称为时间盒。在上一个问题中已详细解释了这一点。

何时选择 FDD,何时选择 XP?

XP 的迭代很短,即 1 到 4 周。这对于小型项目来说很好,但对于大型项目而言,迭代会持续数月。这时 FDD 就派上用场了。FDD 的迭代可以持续数月甚至数年。

什么是 SCRUM?

SCRUM 是一种方法论,它认为传统的处理方法无法解决客户需求的快速变化。因此,它采用了一种经验主义的方法,认为问题无法被完全理解或定义。而是将重点放在团队应对不断出现的需求的能力上。

在 SCRUM 中,产品负责人、产品待办事项列表和冲刺是什么意思?

在我们理解 SCRUM 周期之前,先熟悉一些关于 SCRUM 的术语。

  • 产品负责人是指最终客户或用户。
  • 产品待办事项列表是指为软件项目要开发的优先事项列表。
  • 冲刺是指产品目录的任务分解。这是开发团队的详细任务分解。

下面的图“产品目录和冲刺”展示了一个典型的产品目录如何分解成冲刺。图的左侧,产品待办事项列表中有两个项:“创建客户”和“创建供应商”。要完成“创建客户”,开发人员需要执行以下冲刺任务:“编写业务逻辑”、“设计 UI”和“准备测试计划”。

图:产品目录和冲刺

您能解释一下 SCRUM 的流程吗?

图“SCRUM 流程”展示了项目中的开发流程是如何进行的。我们将一步一步地理解 SCRUM 流程。

  • 第 1 步:产品负责人(即客户)创建一个产品日志列表(功能列表)。
  • 第 2 步和第 3 步:在此阶段,我们与客户会面并对产品目录进行优先排序。我们与客户讨论哪些功能是必须的,以及应该首先交付哪些功能。
  • 第 4 步和第 5 步:在这两个阶段,我们将产品目录分解为称为冲刺待办事项列表的任务。
  • 第 6 步:我们开始执行冲刺任务并监控冲刺活动。
  • 第 7 步和第 8 步:一旦我们完成了冲刺活动,我们就通过进入冲刺阶段来处理下一个冲刺/任务。
  • 第 9 步:如果没有更多的冲刺/任务,则产品日志已完成,这意味着项目已完成。

图:SCRUM 流程

您能解释一下 SCRUM 中的不同角色吗?

SCRUM 在角色名称方面有不同的术语。以下是角色的列表及其含义。“猪”角色是指那些致力于项目的人。如果项目失败,会影响这些人。所以,“猪”角色包括开发人员、客户、项目经理等。

  • 产品负责人是指最终客户或用户。
  • Scrum Master 是流程驱动者。这些人是 Scrum 流程的驱动者。他们是 Scrum 流程的顾问。
  • “鸡”角色是指间接参与项目的人。他们并不能真正从项目中获益,但他们的反馈对项目很有价值。如果项目不成功,他们不应承担责任。

图:SCRUM 角色

您能解释一下 DSDM 吗?

DSDM,也称为动态系统开发方法,具有以下特点:

  • 它基于 RAD(快速应用程序开发)。
  • DSDM 最适合具有紧张时间表和预算的项目。
  • 它是迭代和增量的。

图:DSDM 特性

您能解释一下 DSDM 的不同阶段吗?

DSDM 有三个基本阶段:项目前期、项目生命周期和项目后期。

  1. 项目前期阶段:在此阶段,识别项目,分配项目资金,并确保所有利益相关者的承诺。
  2. 项目生命周期阶段:这是 DSDM 中最长、最详细的阶段。这是实际项目执行发生的地方。本阶段将在下一节中更详细地解释。
  3. 项目后期阶段:在此阶段,系统运行平稳。在此阶段进行的主要活动是维护、增强和项目缺陷修复。维护、增强和缺陷修复可以被视为 DSDM 的迭代和增量性质。

图:DSDM 阶段

您能详细解释一下 DSDM 中的项目生命周期阶段吗?

DSDM 项目生命周期共有五个阶段:

  1. 可行性研究:在此阶段,对用于 DSDM 的项目进行检查。为此,我们需要回答诸如“该项目能否满足业务需求?”、“该项目是否适合 DSDM?”以及“项目中存在哪些主要风险?”之类的问题。
  2. 业务研究:一旦我们确定项目通过了可行性研究,我们就进行业务研究。业务研究包括与最终客户/用户会面,讨论拟议的系统。简而言之,这是一个需求收集阶段。然后对需求进行优先排序和时间盒划分。因此,此阶段的输出是具有时间框架的优先需求列表。
  3. 功能模型迭代:在此阶段,我们开发一个由最终用户审查的原型。
  4. 设计和构建迭代:在前一阶段用户同意的原型在此阶段被设计和构建,并提供给最终用户进行测试。
  5. 实施:一旦最终用户确认一切正常,就可以实施这些特性了。

图:DSDM 项目生命周期

您能解释一下 LSD 吗?

精益软件开发 (Lean software development, LSD) 的原则源自精益制造。下面的图“LSD 原则”显示了所有原则。

图:LSD 原则

让我们简要了解一下这些原则。

  • 消除浪费:只向最终用户交付所需的东西。任何多余的都是浪费。简而言之,任何不能增加价值的东西都是浪费。如果我们能够绕过一个任务但仍然能交付,那么就应该绕过它。
  • 尽可能晚地决定:软件系统是复杂的。它们越接近执行,就越清晰。因此,推迟决策,以便它们可以基于事实而不是假设。例如,您的团队决定使用自动化测试,但当您完成执行时,您发现开发人员每天都在交付更改。执行后,您得出结论,手动测试是最佳选择。糟糕的是,如果您已经购买了自动化工具,那就是浪费钱。
  • 尽可能快地交付:产品交付得越快,您获得的客户反馈就越快,并且您可以更快地改进下一个迭代。这里的概念不是快速编码,而是尝试交付用户确定的小型代码块以获得更好的理解。
  • 激励团队:团队成员是任何项目成功的最重要的方面。激励他们,赋予他们角色,保持团队士气高昂,并尽您所能让他们在项目中感觉良好。高度敬业的团队会按时交付项目。
  • 集成性:软件系统应该以松耦合的组件形式交付。一个组件或模块可以独立运行,并且在集成到项目中时,它能完美地工作。从最终用户的角度来看,它应该是即插即用的。这种精神源自实际生产系统的运作方式。您可以从一家公司采购车轮,从另一家公司采购座椅,然后组装成一辆汽车。

您能解释一下 ASD 吗?

ASD(自适应软件开发)认为变化是真实的。它也从原则上接受错误可能会发生,并且从错误中学习对未来很重要。图“ASD 周期”展示了 ASD 中的三个重要阶段。

图:ASD 周期

让我们详细了解这三个阶段。

图:推测
  • 推测(即规划):这是 ASD 周期的规划阶段。下面的图“推测”详细展示了此阶段发生的事情。
  • 定义项目范围:这是主推测阶段的第一步。在此,我们设定整个项目的目标和范围。
  • 设定范围时间:为前一阶段确定的范围设定时间限制。
  • 确定迭代次数:根据时间限制和范围,我们确定项目将有多少次迭代。
  • 将范围分解为任务:在此部分,我们将范围分解为任务。任务就是开发人员需要完成范围所需进行的开发活动。
  • 将任务分配给开发人员:将任务分配给开发人员。既然我们知道谁将做什么任务,现在就可以进行编码/执行了。
  • 协作(编码/执行):根据任务执行,并进行测试。
  • 学习(审查并向规划提供反馈):在迭代结束时,看看我们学到了什么,并将其应用于下一个迭代。

注意

在上面介绍的所有方法论中,XP 是最常用于敏捷开发的。关于上面介绍的所有 XP 方法论,一个重要的注意事项是,它们都相信接受变化。所有敏捷方法论的原则或多或少都是相同的。所以不要感到困惑,只需了解每种方法论侧重于什么。例如,FDD 以特性为中心进行规划,SCRUM 使用产品负责人和待办事项列表来描述项目,DSDM 则重视 RAD。因此,请理解每种方法论的主题,但是的,共同的观点是它们都相信“接受变化”。

© . All rights reserved.