敏捷开发中软件架构设计与实践_李声威
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
需求的变化。相比传统软件开发方法,敏捷开发采用重 构技术不断的调整系统的结构,使系统具有较强的能 力适应需求的变更,这样敏捷开发能最大限度的降低 软件的开发风险。
本文在敏捷软件开发和软件架构存在的冲突的基 础上,提出一套敏捷开发中架构设计的方法论,包括敏 捷架构设计的核心思想、采用的设计技术、以及设计过 程规范和执行过程规范。结合实际项目中的架构设计 验证该方法论的有效性。
Abstract:Software architectures play a key role in software development. In traditional software development, software architectures are difficult to change, and it costs drastically to adjust the architectures. By contrast, agile development is a lightweight development method which embraces changes, and can respond quickly to changes. This paper based the analysis on processing development and agile software development, pointed out the conflict between agile and architecture, analyzed the importance of architecture in agile development, and proposes a set of methodologies that uses agile development methods and technologies to design architecture. Combined with the actual project of the architecture design verify the effectiveness of the methodologies. Key words: software architecture; agile development; methodologies
进化式架构设计应要达到的目标要点如下: 首先 Architecture backlog(当前迭代架构要实现的 功能)应该与 Sprint backlog 保持一致。也就是仅对当 前需求进行建模。 其次设计出的架构应与领域模型(Domain Model) 保持一致。避免发生会导致架构失败的领域误解,同时 避免了因架构失败而导致返工,造成开发成本增加,费 时费力的情况发生。 第三架构设计要确保概念的完整性。在各个层次 上统一系统设计的根本指导思想,使自组织团队成员 遵循统一清晰的概念一起工作。 2.2 敏捷架构设计技术 在敏捷开发中,软件系统通过不断重构适应快速 演化、频频变更的环境。在重构过程中,通过使用设计 模式来改善既有的设计。 ● 重构[16]是敏捷开发的重要技术,就是在不改变 软件现有功能的基础上,通过调整程序代码改善软件 的质量、性能,使其程序的设计模式和架构更趋合理, 提高软件的扩展性和维护性。敏捷开发通过不断的重 构使代码更加清晰,更易于维护,同时不需要初期花费 大量的时间进行详细的规划。由于一个 Sprint 周期下 来,客户对交付的产品提出需求变更,则需要对敏捷架 构进行重构,以满足客户需求。 ● 设计模式(Design Pattern)是一套被反复使用、 多数人知晓的代码设计经验和技巧的总结。重构和设 计模式看似不同,但它们在本质上都有一个相同的思 想那就是设计很重要,只是两者达到良好设计的方法 不同。在敏捷开发中,进行重构代码时可以借助设计模 式,使自己的代码更利于重用、更利于被人理解、可靠
LI Sheng-wei1,WANG Ai-jing1,2,TAN Hong-xing1,2
(1.College of Computer and Information Engineering, Henan University, Kaifeng 475001, China; 2.Petro-Cyberworks Information Technology Co., Ltd, Beijing 100007, China)
软件工程作为一个学科方向,越来越受到人们的 关注。迄今为止,软件工程界已经提出了一系列的原 理、方法,解决了软件开发过程中的若干问题。由于软 件产品本身固有的复杂性、易变性以及不可见性,传统 的软件工程方法和技术越来越不能适应新需求[1-3]。
传统软件开发中架构设计采用的是 BDUF(Big Design Up Front)策略,开发之前要确定所有需求,针对 这些需求设计出“完美”而庞大的架构,架构一旦被确 定,将很难改变。与这种官僚式、重量级的传统软件开 发方法相比,敏捷开发[4]是一种轻量级、迭代式、快速交 付可工作软件的开发方法。敏捷开发主张简单化设计, 软件项目的每次迭代在设计架构时只做“刚刚好(Just Enough)”的设计,随着对业务领域的深入理解,逐步调 整设计。这样能避免产生臃肿的架构,也能够快速响应
敏捷软件开发是近来备受关注的软件开发方法, 它是一种以人为核心、迭代、循序渐进的开发方法,它 的核心思想在于快速、增量式的交付可工作的软件。在 敏捷软件开发中,软件项目被切分成多个子项目,经多 次迭代来完成,每次迭代都有明确的目标并能快速交 付可运行的软件。
Scrum[9]在敏捷方法中具有代表性,它是一种迭代 增量式的软件开发过程。它有三个重要的工件:产品列 表(Product Backlog)、Sprint 列 表(Sprint Backlog)和 燃 尽图(Burn Down Chart)。产品列表是项目或者产品预 期交付、排列好优先级的需求清单。产品列表是动态变 化的,产品负责人可以增加、减少列表中的条目,以保 证产品适用性、实用性和竞争力。Sprint 列表是团队当 前 Sprint 的任务清单。和产品列表不一样,它的寿命有 限,仅存活一个 Sprint 时间。Sprint 列表中的任务是由 产品列表选取的需求条目细化和分解而来,选取这些 任务要确保将产品列表条目转化为潜在可交付的产品 增量。燃尽图描述了剩余工作随时间变化的轨迹。燃尽 图有一个 Y 轴和 X 轴,Y 轴表示的是剩余工作量,X 轴表示的是时间。
(1)产 品 负 责 人(Product Owner)制 定 产 品 列 表 (Product Backlog)
产品负责人制定产wk.baidu.com列表(Product Backlog),对列 表中用户故事进行优先级排序。每个 Sprint 迭代开始 的时候团队要选择一组交付物作为当前 Sprint 的承 诺,并罗列出交付用户故事所需完成的所有任务。
1 相关工作
过程是软件工程的三要素之一,是为达到预定目 标的一系列实践活动的集合,它包括工具、方法、材料 以及人等。软件开发过程是软件开发人员以制造软件
收稿日期:2015-02-10 作者简介:李声威(1968-),男,副教授,硕士生导师,主要研究方向:软件工程应用技术;王爱景(1990-),女,硕士研究生,主要研究方向:软件工程应 用技术;谭红星(1969-),男,博士后,副教授,硕士生导师,主要研究方向:软件工程及数据库技术。
敏捷开发是一种迭代、循序渐进的开发方法,这一 思想贯穿敏捷软件开发的方方面面。遵循这一思想,与 功能实现一样,架构的设计也是一个迭代的过程[15]。每 次迭代仅仅对当前的需求进行建模,通过迭代逐步对 架构进行完善。由于项目需求的不可预设性,没必要也 不可能设计出具有弹性的、近乎完美的架构。敏捷开发 中迭代式架构设计过程如图 1 所示。
图 3 敏捷架构设计模式
2.3 设计过程规范 敏捷开发过程区别于重型的软件过程,体现在《敏
捷宣言》中提到的四条敏捷价值观和十二条原则。敏捷 原则简单概括为简单化、沟通、反馈、勇气、快速交付可 工作软件等。敏捷开发中进行架构设计,要符合敏捷开 发原则。一个成功的敏捷架构,需要开发团队按照以下 六个过程规范进行设计。
图 1 敏捷开发中迭代式架构设计过程
第 23 卷第 3 期
李声威等:敏捷开发中软件架构设计与实践
·3·
在敏捷开发中,每一次迭代的架构设计过程大概 分为六个步骤,如图 2 所示:
性更有保证。 在遵循敏捷开发方法的基础上,敏捷架构设计模
式如图 3 所示。
图 2 每次迭代架构设计过程
敏捷开发中进行架构设计的核心思想是进化式设 计。进化式的设计是指在敏捷开发的整个生命周期中, 通过每一次迭代来充实、修改和优化设计方案,以使其 最大限度地符合客户对系统的需求。进化式架构设计 的底线是不伤害到现有架构的能力和已经实现的功 能,同时对其他部分的影响尽可能小。
发及架构分析的基础上,提出一套敏捷开发中架构设计的方法论。结合实际项目中的架构设计验证该方法论的有效性。
关键词:软件架构;敏捷开发;方法论
中图分类号:TP311.52
文献标识码:A
Software Architecture Design and Practice of Agile Development
第 2第3 卷23第卷第3 期3 期 20 1 5 年 6 月 文章编号:1005-1228(2015)03-0001-04
电脑与信息技术 Computer and Information Technology
Vol.23 No.3 Jun. 2015
敏捷开发中软件架构设计与实践
李声威 1,王爱景 1,2,谭红星 1,2
1.2 对敏捷架构的研究和实践 对于遵循敏捷软件开发原则的同时,如何进行架
构设计的问题,引起了软件工程界、研究界和开发者的 广泛兴趣。
文献 [10] 指出敏捷开发软件开发过程中应包含架 构,并提出一种轻量级软件开发方法 (Light Software Development Method)。文献[11]指出采用敏捷方法进行架 构设计,并提出一系列技术和经验。文献[12]指出敏捷方 法和架构之间的悖论,找到一种平衡方法使得敏捷和 架构能够共存。文献[13]指出在 XP 项目中迭代的进行架 构设计,针对业务规则的本质需求进行抽象建模,从本 质需求中抽象出原始架构,开发团队可以选择原始架 构中最重要的模块进行开发,从而展开迭代过程。文献[14] 提出敏捷和架构相互作用点,将架构的功能运用到敏 捷软件开发中。
(1.河南大学 计算机与信息工程学院,河南 开封 475001;2.石化盈科信息技术有限责任公司,北京 100007)
摘 要:软件架构在软件开发中起着非常关键的作用。在传统软件开发中,软件架构难以改变,对架构的调整需要付出较
大成本。与此相比,敏捷开发(Agile Development)是轻量级的,拥抱变化的,能快速响应变化的开发方法。在对敏捷软件开
2 敏捷开发中架构设计方法论
综合以上分析研究,本文提出一套敏捷开发中架 构设计的方法论。该方法论的内容包括四个方面。其一 是核心思想,它明确了敏捷架构设计的整体思路,框定 了方法论的其它方面。其次是敏捷架构设计采用的设 计技术,为敏捷架构的进化及重构提供了保证。最后两 个方面分别是设计过程规范和执行过程规范,为管理 和执行提供支撑。 2.1 核心思想
·2·
电脑与信息技术
2015 年 6 月
产品为目的,在软件工具支持下,采用不同的软件开发 方法完成软件开发期各阶段任务的一系列相关过程[5-6]。 在软件开发过程中,软件开发方法是关系到软件开发 成败的重要因素。
目前采用较多的软件开发过程有 RUP [7]、CMM[8]、 SCRUM 等。RUP,其方法论的核心是软件工程,有比较 明确的过程和阶段,保留了软件生命周期的影子,强调 总体架构设计的重要性,弱化人的重要性等。相比 RUP,SCRUM 方法论的核心是敏捷开发,体现了快速 反馈,强调面对面交流的重要性,强调人的主观能动性 等基本原则。 1.1 敏捷软件开发