您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 软件工程-实践者的研究方法讲义_第三章
软件工程第3章敏捷开发主要内容敏捷是什么敏捷及变更的成本费用敏捷过程极限编程其他敏捷过程模型自适应软件开发Scrum动态系统开发方法Crystal特征驱动开发精益软件开发敏捷建模敏捷过程工具集小结敏捷软件工程敏捷软件工程是哲学理念和一系列开发指南的综合。这种哲学理念推崇让客户满意和软件尽早增量发布;小而高度自主的项目团队;非正式的方法;最小化软件工程工作产品以及整体精简开发。开发方法强调超越设计和分析(尽管并不排斥这类活动)的发布及开发人员和客户之间主动和持续的沟通。敏捷软件工程软件工程师和其他项目共利益者共同组成敏捷开发团队,这个团队是自我组织的并掌握着自己的命运。一个敏捷团队能够培养所有参与人员之间的交流与合作。孕育了基于计算机系统和软件产品的现代商业环境,正以飞快的节奏不断变化着,敏捷软件工程提出了可用于特定类型软件和软件项目的不同于传统软件工程的合理方案。事实证明,这一方法可以快速交付成功的系统。敏捷软件工程敏捷开发恰当的称呼应当是“类软件工程”,它保留了基本框架活动:客户沟通、策划、建模、构建、交付和评估,但将其缩减到一个推动项目组朝着构建和交付发展的最小任务集(有人认为这是以牺牲问题分析和方案设计为代价而实现的)敏捷软件工程接受敏捷理念的客户和软件工程师有共同的观点:唯一真正重要的工作产品是在合适时间提交给客户的可运行软件增量。如果敏捷团队认为过程可行,开发出的可交付软件增量能使客户满意,则表明敏捷方法已经正确实施。敏捷软件开发宣言个人和这些个人之间的交流胜过开发过程和工具可运行的软件胜过宽泛的文档客户合作胜过合同谈判对变更的良好响应胜过了按部就班地遵循计划亦即,虽说上述右边的各项很有价值,但我们认为左边的各项具有更大的价值敏捷方法本质上讲,敏捷方法是为了克服传统软件工程中认识和实践的弱点开发而成的。敏捷开发可以带来多方面的好处,但它并不完全对立于传统软件工程实践,也不能作为超越一切的哲学理念而用于所有软件工作。敏捷方法不确定性意味着变更,而变更意味着付出昂贵的成本,特别是在其失去控制或疏于管理的情况下。而敏捷方法最具强制性的特点之一就是它能够通过软件过程来降低由变更所引起的代价。惯例过程模型的主要缺陷(COC02a)忘记了开发计算机软件的人员的弱点。软件工程师在工作方式上有很大差别,在技能水平、主动性、服从性、一致性和责任心方面也有巨大差异。一部分人可以通过书面方式很好地沟通,而有些人则不行。过程模型可以“利用纪律或者宽容来处理人的这一共同弱点”,大多数惯例过程模型选择了纪律,“不能一致连贯地做同一件事是人性的弱点,因而高度纪律性的方法学非常脆弱。”什么是敏捷敏捷已经成为当今描述现代软件过程的时髦用词。每个人都是敏捷的,敏捷团队是能够适当响应变化的灵活团队。变化就是软件开发本身,软件构建有变化、团队成员在变化、使用新技术会带来变化,各种变化都会对开发的软件产品以及项目本身造成影响。我们必须接受“支持变化”的思想,它应当根植于软件开发中的每一件事中,因为这是软件的心脏与灵魂。敏捷团队意识到软件是团队中所有人共同开发完成的,这些人的个人技能和合作能力是项目成功的关键所在。敏捷及变更的成本费用软件开发的传统方法中变化的成本费用随着计划的进展成非线性增长。这种方法在软件开发团队收集需求时相对容易适应变化。但是假设如果在进行确认测试的过程中变更一个主要的功能。这一变更需要对软件的体系结构设计进行修改,包括设计和构建三个新组件,修改另外五个组件,设计新的测试等,则费用会迅速上升。见课本41页图3.1。敏捷及变更的成本费用敏捷的拥护者认为,一个设计良好的敏捷过程“拉平”了变更成本曲线,使软件开发团队在没有超常规的时间和费用影响的情况下,在软件项目后期能够适应各种变化。敏捷过程任何一个敏捷过程都可以由所强调的三个关键假设来识别:1.提前预测哪些需求是稳定的而哪些需求会变更非常困难。同样,预测项目进行中客户优先级的变更也很困难。2.对很多软件来说,设计和构建是交错进行的。3.从制定计划的角度看,分析、设计、构建和测试并不像我们所设想的那么容易预测。敏捷联盟定义的12条原则1、我们最优先要做的是通过尽早、持续交付有价值的软件来使客户满意。2、即使在开发的后期,也欢迎需求变更。敏捷过程利用变更为客户创造竞争优势。3、经常交付可工作软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。4、在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。敏捷联盟定义的12条原则5、围绕受激励的个人构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。6、在团队内部,最富有效果和效率的信息传递方法是面对面交谈。7、可工作软件是进度的首要度量标准。8、敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一种长期、稳定的开发速度。敏捷联盟定义的12条原则9、不断地关注优秀的技能和好的设计会增强敏捷能力。10、简单——使不需要的工作最大化的艺术——是必要的。11、好的架构、需求和设计出自于自组织团队。12、每隔一定时间,团队会反省如何才能更有效地工作,并相应调整自己的行为。敏捷过程是什么如何建立能解决不可预测性的过程?答案就在于过程的自适应性。即敏捷过程必须具有自适应性。但是原地踏步式的连续适应性变化收效甚微,因而,敏捷软件过程必须增量地适应。敏捷开发的立场将敏捷软件开发作为许多传统软件工程的对立面,它们在优越性和适用性方面存在着许多争论。没有人反对敏捷。而真正的问题在于“什么是最佳实现途径”?同等重要的还有,如何构建满足用户当前需要的软件,同时展示具有能满足客户长期需求的扩展能力?人的因素基本能力共同目标精诚合作决策能力模糊问题解决能力相互信任和尊重自我组织敏捷过程模型所有的敏捷方法(或多或少地)都遵循敏捷软件开发宣言以及敏捷原则。常见的敏捷过程模型有极限编程、自适应软件开发、动态系统开发方法、Scrum、Crystal、特征驱动开发等。极限编程XPXP使用面向对象方法作为推荐的开发范型。XP包含了策划、设计、编码和测试4个框架活动的规则和实践。如课本图3-2所示。极限编程课本图3-2极限编程过程极限编程策划:策划活动开始于建立一系列描述待开发软件必要特征与功能的“故事”。每个故事由客户书写并置于一张索引卡上,客户根据对应特征或功能的全局业务价值度标明权值。极限编程设计:XP设计严格遵循KIS原则,即使用简单而不是复杂的表述。另外,设计为故事提供不多也不少的实现原则,不鼓励额外功能性设计。极限编程编码:XP推荐的故事开发和基本设计完成之后,团队不应直接开始编码,而是开发一系列用于检测本次(软件增量)发布的包括所有故事的单元测试。XP编码活动中的关键概念之一是结对编程。极限编程测试:在编码开始之前建立单元测试是XP方法的关键因素。所建立的单元测试应当使用一个可以自动实施的框架,这种方式支持代码修改之后即时的回归测试策略。一旦将个人的单元测试组织到一个“通用测试集”,每天都可以进行系统的集成和确认测试。XP验收测试,也称为客户测试,则客户规定技术条件,并且着眼于客户可见的、可评审的系统级的特征和功能。工业极限编程IXPIXP是XP的一种有机进化。它由XP的最低限要求、以客户为中心、测试驱动精神组成。IXP合并了六个新实践。准备评估项目社区项目承租测试驱动管理回顾持续学习关于XP的争论对XP的批评意见有:需求易变矛盾的客户需求需求的非正规表示正规设计的缺乏每一个软件过程都有缺陷,而且许多软件机构已经成功地使用了XP。关键是认识到一个过程的弱点在哪里,然后使其适应于组织机构的特定要求。自适应软件开发(ASD)自适应软件开发着眼于人员协作和团队自我组织。ASD的生命周期包含思考、协作和学习三个阶段,如课本图3-3所示:自适应软件开发课本图3-3自适应软件开发动态系统开发方法(DSDM)DSDM是一种提供“通过在可控项目环境中使用增量原型开发模式完全满足对时间有约束的系统的构建和维护”的敏捷软件开发方法。ScrumScrum原则和敏捷宣言一致组织小型团队达到“沟通最大化,负担最小化,非语言描述、非形式化知识”。过程对技术和业务变化必须具有适应性,以“保证制造具有最好可能的产品”。过程生产频繁发布“可检查、可调整、可测试、可文档化、可构建”的软件增量。开发工作和开发人员划分为“清晰的、低耦合的部分或包”。坚持在产品构建过程中进行测试和文档化。Scrum过程提供“在任何需要的情况下都能完成产品的能力。ScrumScrum强调使用一组“软件过程模式”,这些过程模式被证实在时间紧张的需求变化的和业务关键的项目中是有效的。待定项(backlog):一个能为用户提供商业价值的项目需求或特征的优先级列表。冲刺(sprint):由一些工作单元组成,这些工作单元是达到待定项中定义的需求所必需的,并且必须在预定的时间段内完成。冲刺过程不允许有变更。Scrum例会:Scrum团队每天召开的短会。Scrum课本图3-4Scrum过程流动态系统开发方法(DSDM)DSDM协会定义了一个称为DSDM生命周期的敏捷过程模型。该生命周期定义了3个不同的迭代循环,前面还加了两个生命周期活动:可行性研究业务研究功能模型迭代设计和构建迭代实现特征驱动开发特征“是可以在2周或更短时间实现的具有客户价值的功能”。强调特征定义是为了如下好下:特征是小块可发布功能,用户可以方便地描述、轻松地理解其相互关系,更好地评审以发现歧义性错误和遗漏。特征可以组织为具有层次关系的业务相关分组。特征很小,其设计、代码都可以很容易、很有效地检查。项目计划、进度和跟踪都由特征层次驱动,而不是可任意调整的软件工程任务集。特征驱动开发课本图3-5特征驱动开发精益软件开发精益软件开发LSD在软件工程领域适应于精益制造的原则。精益原则鼓励LSD过程消除耗损、把质量体现于产品、创造知识、遵从承诺、快速交付、尊重成员以及整体优化。敏捷建模AMAM是一种用于对软件系统有效建模和文档化的实践方法学。AM是可以有效和以轻量级方式用于软件开发项目的软件建模价值、原则和实践的集合。由于敏捷模型只是大致完善,而不要求完美,因此敏捷模型比传统的模型还要有效。敏捷建模AM有目的建模使用多个模型前进灯内容重于表述形式理解模型及工具适应本地需要敏捷统一过程AUP敏捷统一过程采用了一个“全局串行”以及“局部迭代”的原理来构建基于计算机的系统。采用经典UP阶跃性活动——开始、加工、构建以及变迁,UP提供一系列覆盖,能够使团队为软件项目构想出一个全面的过程流。然而,在每一个活动里,一个团队迭代使用敏捷,并且将有意义的软件增量尽可能快地交付给最终用户。敏捷统一过程AUP每个AUP迭代执行以下活动:建模实现测试部署配置及项目管理环境管理小结(课本57页)作业P57-58页3.11
本文标题:软件工程-实践者的研究方法讲义_第三章
链接地址:https://www.777doc.com/doc-212981 .html