Agile方法研究综述
Agile方法研究综述
http://www.softline.org.cn/everyone.asp?ArticleID=254
钱乐秋② 张敬周①② 朱三元①②
①(上海计算机软件技术开发中心)
②(复旦大学计算机与信息技术系)
(zjz@ssc.stn.sh.cn)
关键词 Agile方法,轻载方法,CMM,XP
AN OVERVIEW OF AGILE METHODOLOGY
QIAN Le-Qiu② ZHANG Jing-Zhou①② ZHU San-Yuan①②
①(Shanghai Development Center of Computer Software Technology)
②(Department of Computer and Information Technology, Fudan University)
Key words Agile Methodology, Lightweight Methodology, CMM, XP
1. 引言
质量和生产率是软件工程的两个核心目标,这两个目标相互作用相互影响,在具体的软件开发实施中要作具体的权衡。随着技术的迅速发展和经济的全球化,软件开发出现了新的特点,即在需求和技术不断变化的情况下实现快节奏的软件开发,这就对生产率提出了很高的要求。ISO-9000、CMM、SPICE目前已被公认为软件质量保障方面的事实标准,但由于其强调管理和控制,追求项目的可预测性和过程状态的可视性,在提高生产率方面并未予以足够的重视,实施时一方面需要大量中间制品(过程文档)的制作,给开发人员带来很大负担,另一方面,追求可预测性与实际需求的模糊和快速变化不相协调。在此情况下,出现了一些新的开发方法。
新的方法主要有Extreme Programming (简称XP)、SCRUM、Crystal Methodologies、Feature Driven Development(简称FDD)、Dynamic Systems Development Methodology(简称DSDM) 、Adaptive Software Development(简称ASD)、Pragmatic Programming等,统称轻载(Lightweight)方法,以区别于传统的开发方法(称重载方法,Heavyweight)。2001年2月,新方法的一些创始人在美国犹他州成立了Agile 联盟,将轻载方法正式更名为Agile方法,Agile有轻巧、机敏、活力的意思[1]。
Agile 方法目前还没有一个明确的定义,其特点是对软件生产率的高度重视,主要适用于需求模糊或快速变化下的、小型项目组的开发。有人称,Agile方法是在保证软件开发有成功产出的前提下,尽量减少开发过程中的活动和制品的方法,笼统的讲就是,"刚刚好"(Just enough),即开发中的活动及制品既不要太多也不要太少,在满足所需的软件质量要求的前提下,力求提高开发效率。
这些新方法提出后,引起了软件界的广泛重视,Tom Demarco认为(Cutter Trends Report),"XP对当今时代的作用可与CMM在八十年代和九十年代初的作用相媲美"。新方法在实践中也得到了巨大的成功,如IONA公司的Obix 技术支持小组在采用了XP方法后,软件生产率提高了67%[7];软件生产率组织(SPG)的Capers Jones则称,SCRUM方法可提高生产率6倍[13]。
2. Agile方法的核心理念及特点
任何软件开发方法都有一个相应的价值系统(Value system),方法通过价值系统对过程加以指导,方法只有在其应用周境(context)与价值系统相吻合时才能发挥真正效力,价值系统的基础是对世界的信仰和对软件开发特点的认识,可以说是核心理念。
Agile方法的代表人之一Martin Fowler提出了Agile方法的核心理念[2]:适应和以人为本[2]。
2.1 Agile方法基于适应而非预测。
人们不可能在软件开发之前准确地把握当时的需求及其之后的走势,这一点已由Peter Wegner用数学的方法给出了严格的证明[27,28]。设想有一个虚拟的"理想软件",它是对用户的最大满足,并能随时间的推移和形势变化而与现实保持即时同步,那么软件需求实质上是对"理想软件"的粗略的外部描述。理论上来说,软件开发应是一个跟踪过程,只能通过软件开发过程的自适应性来逼? quot;理想软件",不可能完全实现。
根据自动控制理论,自适应系统是一个强反馈系统。在软件开发中,需求的获取和分析、软件设计、编码等实质上均为前馈环节,真正的反馈环节应该是用户对可运行软件的使用、使用中与"理想软件"的比较判断及判断后与开发人员的信息交流。另外,控制理论还要求,反馈和前馈这一回路的响应速度应大于被跟踪(或被适应)的系统的变化速度,这就要求软件开发有快速的产出能力。
基于适应性特点,Agile方法通过快速、短迭代式的开发,不断产出和演化可运行软件,加强项目有关人员的信息交流等手段来提高反馈的速度、力度和准确性。在软件过程改进方面,Agile方法通过对实际反馈信息的度量,根据用户满意度(时间和质量的权衡)进行微调,相当于缺陷驱动的改进方式。
2.2 Agile方法是以人为导向而非过程导向。
软件开发中,人的因素是第一位的。人是过程的主体,而人的工作承受力是有限的,任何超出人正常承受力的过程必然导致过程结果的偏离,这一点在注重过程改进的方法中往往被忽视或低估。Agile方法认为,软件开发中的绝大部分是需要创造力的设计工作,软件人员是创造性的工作者,有主观上做好工作的意愿,不同于大工业时代生产流水线上被动性的工人,因此,在管理理念上应注重领导和协作,而非命令和控制,充分发挥软件人员的能动性和创造力。软件开发应首先着眼于有用的可执行的软件,也就是首先考虑商务目标,而不是为过程而过程。
Agile方法特别强调软件开发中相关人员间信息交流,Alistir Cockburn在对数十个项目案例调查分析后提出,"项目失败的原因最终都可追溯到信息没有及时准确地传递到应该接收它的人",而人特别擅长面对面的交流,cockburn认为面对面交流的成本要远远低于文档交流的成本,因此,Agile方法的一个共同特点就是,努力营造诚信、开放的组织氛围,根据项目中信息流通的具体情况,按高内聚、松耦合的原则将项目组划分为若干个小组(每个小组以不超过10人为宜,组员均在一个工作间内工作),通过小组内各种渠道的沟通,来减少中间制品的工作负担,提高应变能力。
2.3 Agile方法中的价值系统和指导原则
Agile联盟提出了"四个价值"、"十二个指导原则"[1]。
Agile方法的四个价值:
(1) 较之于过程和工具,更注重人及其相互作用的价值。
(2) 较之于无所不及的各类文档,更注重可运行的软件的价值。
(3) 较之于合同谈判,更注重与客户合作的价值。
(4) 较之于按计划行事,更注重响应需求变化的价值。
Agile方法的指导原则:
(1) 在快速不断地交付用户可运行软件的过程中,将使用户满意放在第一位。
(2) 以积极的态度对待需求的变化(不管该变化出现在开发早期还是后期)。Agile过程紧密围绕变化展开并利用变化来实现客户的竞争优势。
(3) 以几周到几个月为周期,尽快、不断地交付可运行的软件供用户使用。
(4) 在项目过程中,业务人员和开发人员最好能一起工作。
(5) 以积极向上的员工为中心建立项目组,给予他们所需的环境和支持,对他们的工作予以充分的信任。
(6) 在项目组中,最有用、最有效的信息沟通手段是面对面的交谈。
(7) 项目进度度量的首要依据是可运行的软件。
(8) Agile过程高度重视可持续开发。项目发起者、开发者和用户应能始终保持步调一致。
(9) 应时刻关注技术上的精益求精和设计的合理,这样能提高软件的快速应变力。
(10) 简单化(尽可能减少不必要工作的艺术)是基本原则。
(11) 最好的框架结构、需求和设计产生于自组织的项目组。
(12) 项目组要定期对其运作方面进行反思,提出改进意见,并相应进行细调。
此外,Agile方法实施中一般采用面向对象技术(接口定义良好的其它开发技术也可),另外还强调在开发中要有足够的工具(如配置管理工具、建模工具等)支持。
2.4 Agile方法的适用范围[2]
Martin Fowler认为,新方法不是到处可适用的。在以下情况下,适合采用Agile方法:
l 需求不确定和易挥发(Volatile,意指今天的要求明天就不需要了)的场合。
l 有责任感和积极向上的开发人员 。
l 用户容易沟通并能参与。
在以下情况下,不适合Agile方法:
l 超过50人的项目组
l 开发范围被限定(如由合同限定了价格)
3. Agile具体方法介绍
Agile方法是一组开发方法的统称,下面介绍几个典型的Agile开发方法。
3.1 XP(Extreme Programming)[3~9]
由Kent Beck提出,是Agile方法中最引人注目的一个,名称中Extreme的含义是将好的开发实践(Practices)运用到极致。XP最初实践于 1997年Crysler公司的C3项目(人员薪金管理),采用Smalltalk语言开发。适用于10人以下项目组、开发地点集中的场合,现已成为小组开发方法的一个典型,被业界广泛用于需求模糊和挥发性强的场合。XP基于四个价值(values)提出了十二个核心实践(Practices)。
3.1.1 XP方法的四个价值:
l 交流(Communication)。项目相关人员之间充分、多渠道(最好面对面)的沟通。
l 简化(Simplicity)。在系统可运转的前提下,做最简洁的工作;在开发中不断优化设计,时刻保持代码简洁、无冗余。
l 反馈(Feedback)。强调各种形式的反馈,如小交付、短迭代、先考虑测试再编码等。
l 胆识(Courage)。面对压力做正确的判断并敢于付诸行动,如,敢于丢弃设计不良的代码,疲惫时立即休息等。
3.1.2 XP方法的十二个核心实践:
l 工作团队(Whole Team)。所有的小组成员应在同一个工作地点工作。成员中必须有一个用户代表(On-site User),由他/她来提出需求,确定开发优先级,把握开发的动向。通常还设一?quot;教练"(Coach)角色,来指导XP方法的实施及与外部的沟通协调等。小组每个成员都应围绕用户代表,充分贡献自己的技能。
l 计划(Planning Game)。包括两类:交付计划和迭代(Iteration)计划,前者是在项目开始时对软件交付日期的粗略估计,后者是在每个迭代开始时对本次迭代的工作安排。二者都可在执行时调整,只不过迭代计划要更为具体和准确。
l 系统比拟(Metaphor)。系统比拟是待开发软件系统的一个形象化比喻,这个比喻必须是每个组员都熟悉的,它相当于一个粗略的软件体系结构(Architecture),使用户和开发人员建立一个一致的框架,从而指导开发的进行。
l 小交付(Small release)。经常交付可运行的、具有商业价值的小软件,供用户代表评估或最终使用。这里的"小"意味着软件模块能尽快(可在一个迭代内完成)、不断地交付。
l 测试(testing)。XP要求先开发测试用例(可自动执行)然后进行编码(testing then coding),而且测试要不断进行,保证代码测试要100%通过。分两种测试:单元测试和验收测试(Acceptance test)。单元测试由开发人员负责,验收测试由用户代表负责。
l 简洁设计(Simple Design)。有两个含义:一是设计只考虑当前定义的功能而不考虑以后需求的变化,二是指该设计是完成目前功能所需的最简洁的设计,要简单易懂、没有冗余。
l 结对开发(Pair Programming)。开发人员两人结一对,在一台机器前进行开发,一人打字编程另一人查看其编码,配对的两人是不固定的,建议每天轮换。
l 设计改进(Design Improvement)。在整个开发过程中,应对程序结构进行持续不断的梳理(Refactoring,在不影响程序的外部可见行为的情况下,按高内聚松耦合的原则对程序内部结构进行改进), 保持代码简洁、无冗余。
l 持续集成(Continuous Integration)。保持项目组中所有开发的模块始终是组装完毕、集成良好且可执行的,一旦新的模块通过了单元测试,应立即将其组装、集成,形成新的可执行系统。
l 代码共享(Collective code Ownership)。任何结对开发者在任何时候都可改进项目组中的任何代码。
l 编码标准(Coding Standard)。对编程风格(命名、注释、格式等)要有一个大家认可的、共同遵守的标准,使整个程序如同一人编写。
l 可持续步调(Sustainable Pace)。整个项目的开发节奏应该是可长期维持的,XP提出每周40小时工作制,即不要加班,以使开发人员能长期保持工作的高效率。
3.1.3 XP开发过程:
l 整体开发过程
如图1所示,用户代表提出用户故事(User stories,类似于用例,但更简单,不超过三句话即可,一般只涉及功能要求),项目组据此进行讨论提出系统比拟,在此活动中有可能要进行体系结构的刺探(Spike,意在试探解决有关技术难点,走通技术路线)。在系统比拟和用户故事的基础上,根据用户设定的优先级制订交付计划(制订计划中可能需要对某个技术难点进行刺探),然后开始多个迭代过程(每个迭代一般为1~3周),在迭代期内产生的新用户故事不在本迭代内解决,以保证开发不受干扰。经验收测试通过后交付使用。
l 迭代过程
如图2所示。根据交付计划和项目速率(Project velocity,实际开发时间和估计时间的比率,如估计1天完成的工作实际为2天,项目速率为2),选择要优先完成的用户故事或待消除的Bugs,将其分解为可在1~2天内完成的任务,制定本次迭代计划,然后通过每天的站立会议(Stand up meeting,参加人员站着开会以缩短时间/提高效率)解决碰到的问题、调整迭代计划,会后是代码共享式的开发工作,开发人员要确保新功能100%通过单元测试,并立即组装形成新的可运行版本,由用户代表进行验收测试。
l 代码共享的编程
如图3所示。
3.1.4 XP的实践和发展 约定应随之塑造和演化。 Crystal方法系列对具体的开发过程并没有严格的要求。它强调某个方法应有哪些角色及多少人参与、组织结构如何、迭代周期多长、应有哪些中间文档、采用哪些工具等。如Crystal Clear,用在6人左右的项目组(无下层小组),迭代周期应为2-3个月,角色应有项目资助者、高级设计开发员、设计开发员、用户,开发制品有:交付序列、进度安排、有注解的用例、设计纲要、通用对象模型、可执行代码、移植代码、测试用例、用户手册。 |
Agile方法研究综述相关推荐
- 白宁超计算机科学院,基于主动学习的传统中医症状本体构建方法研究综述.PDF...
基于主动学习的传统中医症状本体构建方法研究综述.PDF 计算机技术应用 • the Application of Computer Technology 基于主动学习的传统中医症状本体构建方法研究综述 ...
- 无人机集群任务规划方法研究综述论文解读
无人机集群任务规划方法研究综述&论文解读 参考文献 引言: 任务规划理论模型: 分布式任务规划理论 分布式智能规划方法的出现: 无人机集群应用的核心技术 集中式: 分布式 集散式 基于逻辑与规 ...
- 文本摘要常用数据集和方法研究综述
[1]侯圣峦,张书涵,费超群.文本摘要常用数据集和方法研究综述[J].中文信息学报,2019,33(05):1-16. 文章目录 LCSTS 数据集定义 NLPCC 数据集定义 自建数据集及其对应方法 ...
- 【论文阅读】二.Webshell检测方法研究综述
目录 一.论文题目 二.作者信息 三.论文地址 四.论文内容 1.webshell检测的分类 2.基于静态文本的检测 3.基于动态行为的检测 4.基于日志分析的监测 5.future works 一. ...
- 自动语音识别(ASR)自监督方法研究综述
©作者 | 蔡杰 单位 | 北京大学硕士生 研究方向 |QA 语音 AI 作为人工智能的应用技术之一,近年来正逐渐从实验室研究,越来越多地走向实际应用和价值创造的新阶段.其中的 ASR(Automat ...
- 停车位检测方法研究综述
作者 | dianyunPCL 编辑 | 点云PCL 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[目标检测]技术交流群 摘要 泊 ...
- 【Journal of Computer-Aided Design Computer Graphics】基于生成对抗网络的行人重识别方法研究综述
文章目录 引言 数据集介绍 基于GAN的行人重识别方法分类 2.1基于风格转换的方法 2.2基于数据增强的方法 2.3基于不变性特征学习的方法 3 基于GAN的方法性能对比分析 总结 引言 对于行人检 ...
- 中文文本自动校对方法研究综述
摘要 文本自动校对作为自然语言处理领域的热点方向,受到人们的广泛研究.针对不同错误类型的中文文本,可将其分为拼写纠错.语法纠错和语义纠错3类.首先简要介绍了中文文本校对的相关信息,然后分别对基于传统与 ...
- 综述:基于影像基因组学的肺癌诊断治疗方法研究
介绍: 肺癌是世界上发病率和死亡率最高的恶性肿瘤之一,据美国癌症协会和癌症统计中心统计,每年超过15万个病人死于肺癌,20万个新诊病例.肺癌的致病因素有很多种,其发病率和死亡率都是最高的,是癌症中的第 ...
最新文章
- Vue入门八、非父子组件间通讯
- excel单元格调用mysql数据_Excel 使用单元格的值 查询MySQL数据库并返回数据给相应的单元格...
- 最简单的视音频播放示例9:SDL2播放PCM
- Apple Mac OS X每日一技巧026:Spotlight打开文件所在的文件夹
- element-ui中el-table的表头、内容样式
- Google搜索技巧总结
- Python3网络爬虫开发实战,使用IP代理爬取微信公众号文章
- 5招详解linux之openEuler /centos7防火墙基本使用指南
- canny edge_Canny Edge检测器简介
- HTML URL 编码参考手册:ASCII 编码参考手册
- tex 表格内容换行_如何让latex表格中一个单元格的文字换行
- Java NIO简介
- ubuntu和windows之间实现复制粘贴
- C语言实现动态数组大小
- 手机端(android与ios)黑客安全检测工具锦集
- “骑驴找马”被上司发现了,怎么办?
- oracle期末(一)
- Kaggle时间序列(Time Series)教程 2-趋势(Trend)
- Android 二维图形处理引擎 Skia
- 股市或许就是你的取款机
热门文章
- 计算机更改锁屏密码忘记了怎么办,以前的旧电脑忘记密码了屏幕密码锁屏密码怎么办 试试这几种方法吧...
- 什么是计算机编程,以及vb软件的介绍及教程,[计算机软件及应用]vb编程入门.ppt...
- OneDrive for Business 在墙内速度真比 OneDrive 好得多吗?
- 【系统分析师之路】我的软考修行路(写在2019年最后一周)
- CentOS7安装quilt
- 使用curl抓取百度首页
- 安装了微软正版验证补丁的解决方法
- 移动硬盘删除文件时提示“文件或目录损坏且无法读取”的解决方法-chkdsk 命令的巧用
- react使用createContext
- 前端收集(前端学习资源)