做软件开发的同鞋可能都或多或少的听说过敏捷开发,但是实际采用这种开发模式的项目场景可能就比较少了,今天针对敏捷开发能实际解决的问题做一个基本的介绍,让有兴趣的小伙伴能对敏捷开发的内涵有个基本的认识。
软件开发存在些什么问题?
硬体世界的突破与发展速度逐渐趋缓,软体世界的需求扶摇直上,面对环境的瞬息万变,再加上对各类软件质与量上的快速需求,以往有时间慢慢处理的问题,越来越难以即时处置,例如:
.客户连需求都讲不清楚,分析师只好也不清不楚的混过
.客户的需求一变再变,设计也只好一改再改
.开发时程的估计有两种方法:掷茭 & 闭着眼睛喊
.项目准时关闭?你求神保佑吧…
.加班是必需的,伤肝是正常的,谁叫你入错行
.我们PM的全名是Post Man,把客户的邮件转寄工程师,再把工程师的邮件回寄客户
.那个谁谁谁呢?唉!人又被其他项目拉走了…
.交付给客户的每个版本,开发周期越来越长,却依然觉得时间紧迫
.无法依据原始规划,如期产出最终成品
.版本交付时,仍存在明显缺陷,双方都不满意
.开发时间很长,过程中需求不断变化,致使初始规划显得很不正确
.规划赶不上变化,新的需求很难加入原始规划中
.为能如期达交,往往开发人员会牺牲质量
.极重的开发压力,让所有人员心情沉重,士气受创
为何要导入敏捷开发?
原有的设计流程通常是预测性(Predictive)或称顺序式(Sequential)的设计流程,它启动时的假设情境是—已建立完整的愿景,愿景中所有的需求均已定义清楚,同时已策划出实现愿景的详细计划(战术),换言之,原有的设计流程是基于下列假设条件而进行规划的:
需求不会变更,而且已被完全理解,所以设计初期就应明确所有需求。
项目开始前,即可确认预计要采用的「技术」,该技术是足够的且能发挥正常功效以完成整个设计。
“人”可以像机器一样可预测并且能够可靠工作。
只有计划能以“精准并且保持需求不变”的情境为前提,开发前期用于计划的投入才有价值。
可惜的是,某些设计项目,在期初通常只有大方向,客户往往也难以清楚表示“需求”,随着开发的进程,客户越懂越多,以前没想到的需求往往就会随时浮现。同时,新的技术层出不穷,可能真正要开发时,该项软体技术已经过时。再加上开发人员的认知、技术、传达、构思方式不仅人人不同,甚者,不同时间也会出现差异。这些林林总总的噪音加进来,让过往著重初始规划,与规划完成后才进行分工设计的模式,不仅在开发前期投资很高,也感觉初始规划显得很不正确。
敏捷开发适用于实体产品的开发吗?
在项目开发过程中,有几个主要的情况,是难以采用敏捷开发的,包含:
在价格竞争的环境下,若试运行或塑模(Modeling)成本过高,我们是难以取得此项成本。
敏捷开发主要的精神在于较短的开发循环(建立在反复式开发方式上)以及渐进式开发与交付。若试运转的时间过长或取得运作结果的时效过慢,发现问题时可能机会已然失去。
顾客对产品缺陷的容忍度极低。如果今天你买了一辆汽车,每半年叫你回原厂做一次调整,你愿意吗?但观察近年上市的软件,都是初版发行后,会不断的调适(debug)与升级,这也不知道是我们使用者真的拥有较大的容忍度,还是已被厂商洗脑而认为这是正常的。
所以敏捷开发较适用软件开发,又称为敏捷软体开发。对于其他开发,虽然无法一体适用,但敏捷开发中所推荐的一些观念与工具,仍可引用在其他类型的开发项目上,增进开发的绩效。
敏捷开发的发展
2001年,十七名软件开发人员聚会(因在美国犹他州的雪鸟度假村,俗称雪鸟会议)讨论1957~1997年间的一些让开发不那么沈重的方法与框架,并由Jeff Sutherland,Ken Schwaber和Alistair Cockburn起草,一同发布了「敏捷软件开发宣言」。
2005年,由Alistair Cockburn和Jim Highsmith领导的小组编写了一份项目管理原则的附录,即「相互依存声明」,以便根据敏捷软件开发方法来指导软件项目管理。
2009年,Robert C Martin编写了软件开发原则的扩展,即软件工艺宣言(Software Craftsmanship Manifesto),根据职业行为和掌握程度来指导敏捷软件开发。
2011年,敏捷联盟建立了敏捷实践指南、敏捷实践、术语和元素工作定义的演化开放式汇编,以及来自敏捷从业者社群的经验指南。
2016年,将敏捷实践指南进行调适并更名为「敏捷词汇」
敏捷开发的基本精神
将产品开发工作细分微小化,因此大大的减少了前期规划和设计的数量。
运用迭代(冲刺)这种短时间(1周~1月)的运作的模式来进行1至数个Story的开发与验证。每个迭代都具有跨功能的团队,包含了规划、分析、设计、程序编码、单元测试和验收测试。在迭代结束时,将工作产品向利益相关者展示。透过上述方式让整体风险分散与降低,并使产品能够快速获得反馈与适应变化。
迭代的方式,可能不会一次增加足够的功能来保证可立即发布使用,但是目标是在每次迭代结束时,有一个可用的发行版(最小化程序缺点)。
完整产品的发布或新功能可能需要多次迭代。
敏捷开发的框架
如同我们所熟知改善活动有许多不一样的手法,如QC Story、8D、VA/VE、Lean、DMAIC、DMADV‧‧‧等多种不同类型的框架,敏捷软件开发的框架也因派别与视角的差异而有持续的发展,例如:自适应软件开发(Adaptive software development,ASD)、敏捷建模(Agile modeling)、终极程序设计(eXtreme Programming :XP)、迅速应用程序开发、统一处理程序与动态系统开发法(DSDM)、Scrum法、看板(Kanban)法、水晶清透法(Crystal)、功能驱动开发(Feature Driven Development: FDD) ‧‧‧,其中Scrum法是目前看到最广泛被使用的敏捷开发框架。
敏捷开发的几个重要作法
每个框架的发展都有其自成系统的工具与之搭配,真的是族繁不及备载,此处仅列出几个在Scrum中较具特色的管理方法(此处不涉及软体设计的专业技术):
迭代和增量式软件开发:此为相对于传统「瀑布式开发」的对立作法,瀑布式开发认为初期应有明确的需求与目的,故先做好完整的规划,将总体目标分拆给不同的群体,各自群体努力工作,完成子系统,然后汇总进行测试。我借用一本书(敏捷开发的逆袭) 的作者Teddy Chen 的比喻来描述两种不同的模式:切一块蛋糕给人享用,应是纵切的,每块蛋糕都有鲜奶油层、蛋糕层、水果层、布丁层‧‧‧(敏捷开发推荐运用基本版本+多次的迭代版本的发布方式,让顾客拿到的每个版本都是可以实际使用的)。而不应该横切,单吃奶油或单吃布丁层,没人会觉得吃到的是成品蛋糕。不幸的是,在很多时候,我们的开发设计,往往采用横切法:需求定义>设计规划>概念设计>各自分工从事细部设计>模型建置>汇整测试>设计修正>原型测试>放行。
非常短的返馈回路和适应周期:敏捷的 Stand up(站立会议)或日常scrum作法,运用简短的会议,让团队成员相互报告他们前一天(或阶段)对于团队的迭代(或阶段)目标与成果、今天(或阶段)打算做的目标以及他们可以看到的任何障碍或阻碍,进行资源调配与设计对应方案。频繁的讨论与分享,一有问题大家就会知道,也有可能获得回馈,人员也不致觉得太孤单。
测试引导开发与结对编程(Pair-Programming):对由业务需求进行分析,分解为不同的Story。然后两个人同时对某一Story进行运作,经过讨论取得共识后,先由一人建构测试代码,这样写出来的测试代码就真实反映了业务功能需求。接着由另一个人控制键盘,编写功能的实现代码。先写测试代码,能够让开发人员明确目标,就是让测试通过。Pair做事有很多好处,两个人在一起探讨很容易产生思想的火花,也不容易走上偏路。
持续集成(Continuous Integration)与客户参与(Customer Engagement):敏捷开发中提倡持续集成,短时间(一天之内十几次甚至几十次)的集成,由于集成很频繁,每一次集成的改变也很少,开发过程中有什么问题或者产品经过一轮迭代后,能够以最快速度得到客户的反馈,即使集成失败也容易定位错误。
小版本发布(Frequent Releases):在敏捷开发中,希望而是尽量多的产品发布频率,一般以周、月为单位。这样,客户每隔一段时间就会拿到发布的产品进行试用,而我们可以从客户那得到更多的反馈来改进产品。
较少的文档(Minimal Documentation):简单可读的代码才是好的代码,我们的理想为,所写的东西别人一看就能够看懂。故而很少需要对代码进行补充注释。
公开与合作(Collaborative Focus),在敏捷开发中,每个人都有权力获得系统任何一部分的代码,基于互信与合作原则对系统进行优化。这样每个人都能熟悉系统的代码,即使团队的人员变动,风险也低。
自动化测试(Automated Testing):由于需要频繁的迭代与验证回馈,测试的时间与成本势必增加, QA人员则需要有自动化测试的开发能耐。
最后,奉上案例:learun.cn
原文:windy
相关推荐
在本资源中,我们主要探讨的是敏捷软件开发的原则、模式与实践,特别是在C++编程语言中的应用。这一主题源于《敏捷软件开发》一书的第19章,该章节通过一个具体的薪水支付案例来阐述敏捷开发的方法。在这个案例中,...
【敏捷软件开发C#版源码】是针对C#编程语言的一个实践项目,它与《敏捷软件开发》这本书紧密关联,旨在帮助读者更好地理解和应用敏捷开发的理念和方法。敏捷开发是一种以人为本、迭代、增量的软件开发方法论,强调...
在当今快速变化的软件开发领域,传统开发模式已经难以满足市场需求的多变性与竞争的激烈性。敏捷项目开发模式的出现,正是为了解决这些挑战,它通过一种迭代和增量的方式,使得软件开发能够更加灵活、高效和质量可控...
在“软件开发新模式文章集锦”中,我们可以深入探索一系列关于现代软件开发的重要主题,这些主题涵盖了从项目管理到质量保证的关键方面。以下是对每个文件名所代表知识点的详细阐述: 1. **共创软件联盟简介.doc**...
敏捷软件测试作为当前软件开发领域的一种热门方法论,强调的是在整个开发周期中持续进行软件测试,以确保产品能够在每个迭代中交付预期质量和满足用户需求。Lisa Crispin 和 Janet Gregory 是敏捷测试领域的权威专家...
《敏捷软件开发:原则、模式与实践》是Robert C.Martin(通常被称为Uncle Bob)的一部经典著作,深入探讨了软件开发领域的敏捷方法。这本书是面向软件开发人员、项目经理和软件项目领导们的,旨在帮助他们应对软件...
在软件行业中,敏捷开发已经成为许多团队首选的开发模式,因为它能够提高效率,缩短产品上市时间,并确保团队能够及时调整方向以满足客户需求。本资料包中的"软件敏捷开发过程文档"提供了一个全面的框架,帮助开发者...
敏捷开发的核心理念体现在2001年发布的《敏捷软件开发宣言》中,它提出了四个价值观: 1. **个体和互动**高于流程和工具。 2. **可工作的软件**高于详尽的文档。 3. **客户合作**高于合同谈判。 4. **响应变化**...
在Java开发中,这可能意味着探索新的库、框架或编程模式,以提高开发效率和软件质量。 总之,敏捷软件开发方法论在Java开发中扮演着至关重要的角色,它提供了一种适应性强、反馈迅速、质量保障的开发方式,帮助团队...
异地分布式敏捷软件开发是现代软件工程中的一种重要开发模式,其核心优势在于能够将开发团队分散在不同的地理位置上,同时采用敏捷开发的快速迭代和灵活性特点,从而实现高效率和成本节约。然而,在异地分布式敏捷...
这本综合性、实用性的敏捷开发和极限编程方面的指南,讲述了在预算和时间要求下软件开发人员和项目经理如何使用敏捷开发完成项目:使用真实案例讲解如何用极限编程来设计、测试、重构和结对编程;包含了极具价值的可...
《30天软件开发:告别瀑布拥抱敏捷》是一本关于敏捷软件开发的实用指南,特别是针对Scrum方法进行深入讲解。这本书承诺在短时间内通过敏捷开发方法提高软件开发的效率和质量,而且特别强调在30天内可以完成一个全新...
### 敏捷软件开发知识点概览 #### 一、敏捷软件开发概述 敏捷软件开发是一种以人为本、迭代渐进的方法论,旨在通过灵活调整计划来快速响应变化,提高软件产品的质量和客户满意度。它强调团队协作、客户合作、响应...
本教程将深入探讨敏捷软件开发的核心原则、实践模式以及实施策略。 一、敏捷软件开发的核心原则 1. **个体和互动高于流程和工具**:敏捷方法重视团队成员之间的沟通和协作,而非僵化的流程和工具。 2. **可工作的...
### 敏捷软件开发宣言解析 #### 一、宣言的核心价值观 **《敏捷软件开发宣言》** 是2001年由一群资深软件开发者提出的指导原则,旨在改变传统的软件开发方式,提升开发效率与质量。宣言提出了四个核心的价值观: ...
敏捷软件开发方法是一种在21世纪初期被广泛采纳的软件开发模式,它的出现是对传统工程方法的一种革新,强调灵活性、适应性和以人为本的原则。本文将深入探讨敏捷软件开发方法的理论与实践,包括其核心理念、起源、...
在敏捷开发中,这样的代码会通过迭代的方式逐步完善,每次迭代都会增加新功能或优化现有功能。团队会频繁地进行代码审查,确保代码质量,并且在每次迭代结束时都有可用的软件版本,以便尽早得到用户反馈,及时调整...
随着信息技术的快速发展,软件开发模式也在不断地演进,其中敏捷开发模式因其高效、灵活的特点被越来越多的企业所采用。传统的测试方法往往难以适应敏捷开发的速度与变化,因此如何在敏捷开发中有效地实施测试成为了...