于丽
摘要:软件架构设计是软件开发过程中非常关键的环节,为了能够及时应对软件开发中用户需求的变化,应当采用方便快捷的轻量级开发模式。敏捷开发采用的是一种以人为核心的、循序渐进的开发流程,能够快速响应软件需求的变化,及时调整软件架构的设计思路,比较适应动态环境下的软件开发。该文在对传统开发流程和敏捷开发流程进行分析比较的基础上,对敏捷架构设计中的关键技术进行剖析,结合实际的项目提出了一种基于敏捷开发模式的软件架构设计方法。
关键词:敏捷开发模式;软件架构;重构技术;迭代
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)06-0091-02
软件开发通常需要在完成问题的定义和规划的基础上,经历需求分析、软件设计、编写代码和软件测试等四个阶段[1],其过程是一个复杂、甚至循环反复的过程。传统的开发方法通常需要在进行具体的开发之前确定用户的全部需求,然后据此制定一个跨越整个软件项目开发周期的详细计划,之后的开发过程均以此为依据。这种开发模式的优点是可以很好地保持整个软件设计的一致性,而缺点就是一旦情况发生改变,需要调整框架结构,这个详细的计划就有可能作废,导致产生大量的没有应用价值的复杂文档,无谓地提高了软件开发的成本和难度。为了规避上述这些传统的重型开发方法的弊端,近年来出现一种新的轻量级软件开发方法——敏捷开发方法,该方法是一种典型的轻型软件开发方法,它集众多轻型软件开发方法的优点,强调以人为本,突出“适应性”的特点[2],能够快速根据软件开发过程中的各种变化及时作出调整,最大限度降低软件开发的成本和风险。
本文在比较敏捷开发与传统开发方法的优缺点的基础上,分析了敏捷开发模式的核心思想和设计理念,结合具体项目探讨了基于敏捷开发模式的软件架构的设计方法,包括采用的设计技术、构建思路和执行规范等。
1 敏捷开发模式与传统开发方法的比较
敏捷开发是近来备受关注的软件开发方法,它是一种基于迭代思想的软件开发方式,以人为核心驱动整个软件开发流程的实施和推进,它是管理软件开发过程的一种新方法和新思路。在敏捷软件开发中,软件项目被划分成若干个子项目,通过多次迭代细化完成,每次迭代都有明确的目标并能快速交付可运行的软件[3]。敏捷开发侧重概念和软件架构的设计而简化软件的详细设计部分,为后期留下调整的空间。采用敏捷开发的软件项目时,其软件架构在初期的设计只是做到刚好满足需求即可,后期根据对于软件需求的理解和更新需求,采用重构技术逐步调整设计。敏捷开发由一组简单却相互依赖的实践步骤结合而形成的有机整体,突出了存在于“人”之间的关联,包括程序员之间的沟通、开发团队与客户之间的反馈,注重双方创新的勇气和软件系统的简单 [4]。通常从软件项目启动之初,就强调通过周期性的软件测试来获得需求反馈,程序员尽可能早地把软件初稿交给客户使用,并配合客户通过使用该软件发现其中的漏洞,进而对软件的初稿进行优化,同时及時应对客户对软件提出的新的需求。表1显示了敏捷开发模式与传统开发方法的区别和优势。
表1 敏捷开发模式与传统开发模式的比较
[开发阶段\&方法对比\&敏捷开发模式\&传统开发模式\&需求分析\&将用户需求进行分解,形成开发故事,通过迭代细化,增加新的用户故事\&开发初始阶段获取用户需求,制作详细的需求分析文档,该文档指导整个开发周期\&软件设计\&根据客户的当前需求进行设计,最简单的既是最好的,不过分构建,不做预先设计\&获得用户需求文档后,严格按照文档实施设计\&代码编写\&利用重构技术简化代码,编程人员与测试人员结对编写通过测试的代码,持续集成\&由编程人员编写,由测试人员对代码进行审核\&软件测试\&在编写代码之前先编写测试代码,自动化完成测试\&编码完成后单独进行各种测试\&]
从表1可以看出,敏捷开发对传统的软件开发的四个阶段都进行了相应的改进,模糊了“阶段”的概念,避免了传统软件开发方法的繁琐和死板,使其更加灵活,可以及时响应客户的最新需求动态调整开发过程和软件架构,将简单的、不多的开发步骤不断迭代细化、优化改进为用户最为满意的结果。
2 基于敏捷开发模式的软件架构设计
通过前面的分析,基于敏捷开发的架构设计包括三方面的核心要素:一是敏捷架构设计的整体思路;二是敏捷架构设计所采用的关键技术;三是设计和执行过程的规范化管理。
2.1 设计思路
敏捷开发的突出优势在于以快速的、增量式的开发方式,第一时间将可工作的软件交付客户手中,然后根据与客户的交流,反馈软件的使用情况,根据客户需求调整软件结构。它是一种始终以人为核心的,迭代升华、循序渐进的开发方法,这一思想贯穿敏捷软件开发的方方面面。对于软件架构的设计也遵循这一原则,图1显示了基于敏捷开发模式的软件架构设计过程。
从图1可以看出,敏捷型软件的开发过程也是软件功能逐渐完善,版本逐渐升级的过程。换句话说,敏捷开发中架构设计采用的是进化式的设计方法,即在软件开发的整个周期中,通过一次又一次的迭代细化来修改、完善和充实设计方案,使得架构获得最优化,最大限度满足客户对软件的需求。需要注意的是,采用进化式的软件架构方法应遵循三个原则:1)当前迭代架构的设计应当最大限度避免伤害已经实现的架构和功能;2)当前迭代架构的实际应当与邻域模型始终保持一致,避免邻域误解而造成开发成本的增加;3)架构设计要完整,架构模型的各个层次应当统一。
在敏捷开发中,每一次迭代的架构设计过程大概需要经过6个环节,首先根据用户的整体需求提取出当前迭代中的需求,然后进行邻域建模,随后根据该模型进行概念性架构设计,若此次设计符合客户需求,下一步进行软件架构的细化,之后是对该架构设计进行用户的验证,如果用户的需求发生变化,则重新进行第一阶段的需求分析。
2.2关键技术
敏捷开发中的关键技术有两个方面,一是重构技术,在敏捷开发中就是通过重构技术快速适应不断变化和频频变更的设计环境的。所谓重构,就是充分利用软件现有的功能,通过对整体架构和程序代码的局部调整,提高软件质量和性能,使软件架构的设计模式更加合理化,提高软件的延伸性。本质上说,重构就是在尽量保留软件现有功能的基础调整软件的内部结构,降低软件的升级成本。重构技术贯穿软件开发的整个过程,包括架构重构、设计重构、代码重构和业务重构等[5]。二是设计模式,在软件的重构过程中,通常使用设计模式来改进已有的设计。设计模式实际上是众多软件开发人员在开发过程总结出来的技巧和设计经验,可以反复借鉴。在敏捷开发中,代码重构阶段可以借助设计模式,使程序更加可靠和便于理解。敏捷开发中的设计模式如图2所示。
2.3 过程管理
根据敏捷开发的简单、沟通、反馈、勇气、快速交付可工作软件等基本原则,一个成功的敏捷架构需要开发团队相互合作共同完成以下四个步骤:第一,由产品负责人制定产品列表,并对列表中用户故事按照优先级进行排序,然后从中选择一组作为当前设计目标,罗列出其中的子任务;第二,由架构师制定初始架构,包括架构愿景的确立、架构样式的定位和设计模式的建立等;第三,架构师和团队增量维护架构,即在客户对于交付的产品有新的需求或者需求发生改变时,应及时给予响应,架构师应当与团队之间不断进行沟通,促进整个团队与整体架构的认识,通过重构的方式增量維护架构;第四,确定每次迭代架构增量内容,通过架构师和团队成员的沟通,获得对于架构的反馈意见,获得新增的架构内容。
一般来说,所有的建模都是在白板上完成的“足够”的建模,通过以上四个步骤,模型会随着每次迭代慢慢成长、逐步改进,最终完全符合用户的需求。
3 敏捷开发模式在“在线教学系统”项目软件架构中的应用
该在线教学系统是一个面向高职院校的中小型软件开发项目,由于项目的开发周期较短,用户需求不明确,因而该系统的客户需求极可能发生变化,此种情况下,采用简单快捷、适应能力强的轻型敏捷开发模式再合适不过。下面结合该项目的开发实际阐述敏捷软件开发方法的具体应用。
3.1 初始化功能模块的确定
敏捷软件开发强调现场客户的参与。在软件开发过程中,开发人员随时与该软件的主要客户,如教师、学生登沟通相关业务问题、、汇报项目进展情况,并获得反馈与支持。根据此项目的用户需求,确定了最初的用户故事,选择在线考试子模块为优先实现的功能模块,如图3所示。
3.2 迭代式开发
软件开发小组根据架构师提出的初始软件架构,由编程人员和测试人员两两结对共同进行软件的设计、编码和测试,整个过程遵循简单、重构、集体所有的原则, 便于优化系统内部结构以消除冗余,提高代码的质量和可读性。开发人员应当尽快将初始的架构予以实现并交付客户试用,获得反馈意见。根据用户的反馈信息,在“在线教学系统”项目中,在线考试子模块需要增加身份验证模块、输入有效性验证以及信息加密存储等系统安全性设计内容。
3.3 小型发布
敏捷软件开发要求结合业务和技术情况,快速交付可工作的产品,并确定下一次发布的范围,即小型发。结合本系统的开发时间要求,整个开发周期的发布计划如表2 所示。
4 结束语
本文详细分析了敏捷开发模式中软件架构的设计方法,并系统阐述了敏捷开发实际软件开发案例“在线教学系统”项目中的应用,充分显示了敏捷开发的简洁性和灵活性的特点。
参考文献:
[1] 张海藩. 软件工程[M]. 北京:清华大学出版社,2010.
[2] 李白桦. 学生管理信息系统的敏捷开发[J].大连铁道学院学报,2006,27(4):60-62,68.
[3] 李声威, 王爱景, 谭红星. 敏捷开发中软件架构设计与实践[J]. 电脑与信息技术,2015,23(3):1-4,11.
[4] 刘朝霞. 基于敏捷软件模式的在线教学系统研究与开发[J].天津科技大学学报,2009,24(2):63-66,73.
[5] 白玲.敏捷开发下的重构技术[J]. 中小企业管理与科技,2014(11):245-246.