您的位置:首页 > 其它

Agile敏捷软件开发方法

2009-05-30 22:53 429 查看
2001年2月,新方法的一些创始人在美国犹他州成立Agile 联盟(http://www.agilealliance.org/ )
Agile方法是在保证软件开发有成功产出的前提下,尽量减少开发过程中的活动和制品的方法。笼统的讲就是,“刚刚好”(Just enough),即开发中的活动及制品既不要太多也不要太少。

• 基于适应而非预测
• 以人为导向而非过程导向

我预言XP对当今时代的作用可与CMM在八十年代和九十年代初的作用相媲美
-- Tom DeMarco, Cutter Trends Report

新方法在实践中取得了巨大的成功
• IONA公司的Obix技术支持小组在采用了XP方法后,软件生产率提高了67%
• SPG( software productivity group) 的Capers Jones则称,SCRUM方法可提高生产率6倍

Agile 具体方法:
• Extreme Programming (简称XP)
• SCRUM
• Crystal Methodologies (简称Crystal)
• Feature Driven Development(简称FDD)
• Dynamic Systems Development Methodology(简称DSDM)
• Adaptive Software Development(简称ASD)
• Pragmatic Programming等

• 由Kent Beck提出,是Agile方法中最引人注目的一个
• XP最初实践于1997年Crysler公司的C3项目 (Smalltalk开发)
• 适用于10人以下项目组、开发地点集中的场合
• 广泛用于需求模糊和挥发性强的场合

Website: http://www.xprogramming.com http://www.extremeprogramming.org/

XP方法(4个核心价值):
 交流(Communication)
项目相关人员之间充分、多渠道(最好面对面)的沟通
简化(Simplicity)
• 在系统可运转的前提下,做最简洁的工作
• 在开发中不断优化设计,时刻保持代码简洁、无冗余
反馈(Feedback)
强调各种形式(如小交付、短迭代等)的反馈
 胆识(Courage)
面对压力做正确的判断并敢于付诸行动(如敢于丢弃设计不良的代码,疲惫时立即休息等)

SCRUM方法:
• 由Ken Schwaber和 Jeff Sutherland 提出
• 名称来自Rugby Scrum(英式橄榄球)
• 最初实践于Easel公司(1993年)
• 是对迭代式面向对象方法的改进
• 基于复杂性理论,过程分为确定性(Defined)过程和经验性(Empirical)过程
• 适用于需求难以预测的复杂商务应用产品的开发

• 提出的SCRUM Meeting、Sprint、Backlog、SCRUM Master、SCRUM Team、Demo等模式已被PLOP (Pattern Language Of Programs)作为组织和过程模式(Organizational and Process Pattern)的标准
• 被认为可提高生产率6倍(微软的开发过程与此类似,另一与此类似的开发过程是Borland 的Quattro项目,每人周产出1000行的交付代码)
Website: http://www.controlchaos.com/ http://www.jeffsutherland.org/scrum/index.html

SCRUM方法(开发过程):
(1) 计划和体系结构设计(确定性过程)
将Backlog(急待完成的一系列任务,包括:未细化的产品功能要求、Bugs、缺陷、用户提出的改进、具竞争力的功能及技术升级等)按优先级排序形成Backlog 列表,根据该表和风险评估制订产品交付基线。
建立系统体系结构(如为已有系统改进,则只作有限分析、调整),将Backlog项按高内聚低耦合的原则分解为一系列问题包(Packets,每个Packet是一组对象或构件的集合) ,依据同样原则相应划分若干个开发小组(SCRUM 小组),分配各小组合适的Backlog项或问题包。建立开发运行环境。

(2) Sprint(经验性过程)
该过程由若干个迭代的冲刺(Sprint) 活动组成,直至风险评估认为产品可交付为止。一个Sprint是在限定时间段内(Sprint周期,通常为1~6周,可在前一个Sprint结束时调整)的一系列开发活动(包括分析、设计、编码、测试等),每个SCRUM小组并行开发且必须步调一致(在一个Sprint结束后,均须完成所分配的Backlog项并有可执行的产出)。

每个Sprint包含以下活动:
• 开发。对分配的Backlog工作进行分析,打开packets,进行领域分析,然后设计、开发、实施、测试、文档化这些改动。
• 打包(Wrap)。封装packets,产生一个满足Backlog需求的可执行版本。
• 评审(Review)。所有的SCRUM小组一起开会,提交各自的工作并演示(Demo),然后提出和解决问题(Issue)及难点(problem),增加新的Backlog项;发布、审查或调整产品的标准规范;进行风险评估并提出合适的对策;确定下一个Sprint的工作内容和结束时间。
• 调整(Adjust)。根据评审会汇集的信息,对受影响的Packets进行适当调整和巩固。
(3) 交付和巩固(确定性过程)
一旦根据风险评估结果认为可交付产品时,即进入该阶段。该阶段的活动包括:组装,系统测试和回归测试(Regression),准备培训材料,完成最终文档。
SCRUM过程认为一个产品的开发将一直持续下去,除非经风险评估后认为应停止。产品交付后的巩固活动类似于传统方法中的维护和改善,目的在于整理Sprint期压力下忽略的工作,为下一阶段的开发做准备,以便轻装上阵。

项目管理组。由产品经理领衔,包括总设计师,各SCRUM小组组长,市场、销售的高级职员及典型用户。 若干个SCRUM小组。各小组由组长(SCRUM Master)领衔。每个小组都是跨专业的(通常包括开发人员、文档人员、质量控制人员或用户代表等),通常为3~7人,以使小组内有充分的交流。
SCRUM OF SCRUM。
SCRUM会议(SCRUM Meeting)。
Sprint评审会议。

推荐书籍:
Agile Project Management with Scrum
《硝烟中的scrum-and-xp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息