敏捷软件开发VS传统软件开发
软件开发方法是软件工程理论的重要内容,在软件开发方法中,对于开发软件时的“做什么”和”如何做“,给出了明确的、详细的回答。那软件开发方法的”做什么”和”如何做”之间究竟有什么异同?
下面本文就传统软件开发和敏捷软件开发的来探讨一下。
关于传统软件开发
在软件开发方法出现之前,人们普遍错误的认为开发软件只是编写程序。当时,软件开发活动个体化非常严重,编写程序随心所欲,过分追求编程技巧,造成程序很难阅读和理解,导致后期软件出现问题无法维护,比如不重视需求分析工作,对用户需求了解的不全面,开发出的软件往往与客户要求有很大差距。软件危机一天天加重,为了消除软件危机,人们开始思考软件活动和改进软件开发方法。1965年,以Dijkstra的极力坚持取消goto语句为开端,大家渐渐认识到应该改变传统思维观念,创建新观念,来进行软件开发。渐渐的出现了新的设计方法——结构化设计编程。1971年,IBM公司在设计纽约时报信息管理系统时,使用了结构化设计方法(也称传统软件开发方法),完成了83000行的程序的编写。结构化软
件开发方法成为20世纪70年代和80 年代占主导地位的软件开发方法, 直到现在仍在发挥作用。它的广泛运用, 有效地遏制了软件危机的蔓延。
传统软件开发的生命周期模式是从时间角度对软件开发和维护的复杂问题进行分解, 把软件生命的漫长周期依次划分为若干个阶段, 每个阶段有相对独立的任务, 然后逐步完成每个阶段的任务。一般遵循分析、设计、开发、测试、实施和维护的流程,整个过程用户没有或很少参与,需求基本一次给出。各个阶段的工作按自顶向下、从抽象到具体的顺序进行。传统的生命周期开发方法可以用瀑布模型来模拟,如图1所示。
图1
优点(优缺点是在两种软件设计方法对比的基础上给出的)
>对开发人员的个人技能无太高要求;
>结构化分析,有效遏制了软件危机。
缺陷
>花费时间较长;
>测试放在最后,若出现问题,需要对整个模块进行返工、有可能延迟交付;
>在开发中期冻结用户需求,但由于开发早期客户往往并不能明确自己所需要的功能,导致后期修改难度增加或者修改后会导致整个系统的兼容性受影响。
关于敏捷软件开发
传统软件开发主张采用预先设计的方式,希望通过前期投入来降低未来的投入,但现实中,由于需求的不稳定性,设计不可能一次完成。
由于传统软件开发存在着开发周期长、成本大、产品和用户期望有较大差距的问题,敏捷软件开发在20世纪90年代后期逐渐发展起来,敏捷软件开发是为了适应变化、充分发挥人的主观能动性、简化开发过程、提高开发效率、以人为中心的软件开发,提倡刚好够用,追求快节奏,主要针对传统的软件开发过程复杂繁琐、产生并维护大量文档、缺乏对开发过程中各种变化的有效和及时的反应等问题。2001年2月,敏捷软件开发方法的创始人在美国犹他州成立敏捷联盟,发布了敏捷开发宣言,公布了他们开发软件的新的思维观念,引起了人们的广泛关注。其中,敏捷软件开发的4条价值观是:
>重视个人的创造力和相互沟通甚于软件过程和软件工具;
>重视当前软件甚于理解文档;
>重视用户合作甚于仅仅依赖合同;
>重视对变动的响应甚于一味遵循计划。
敏捷软件开发不同于传统软件开发,其项目初期只是得到大概的需求和架构模型,具体的需求是在后面的每次迭代与客户沟通中逐渐细化。在多次迭代的过程中,一步步完成用户的需求。其软件开发方法可以用软件开发方法的迭代模型来模拟,如图2所示。
图2
敏捷软件的软件开发方法有两种开发模型:
第一种是Boehm 提出的螺旋模型:
(1)分析, 建原型, 评价与修改;
(2)设计, 建原型, 评价与修改;
(3)程序设计, 建原型, 评价与修改;
第二种是Gilb 提出的渐增模型:
(1)完成一部分分析工作;
(2)完成一部分设计工作;
(3)完成一部分程序设计工作;
(4)建原型, 评价与修改;
(5)重复上述过程。
敏捷软件开发有多种开发方法,其中XP极限编程是反响最大、最完善的过程方法。
XP强调4条基本的价值:沟通、反馈、简单和勇气。分别对应1)与客户以及开发团队内部持续的交流。2)通过单元测试和功能测试得到快速反馈。3)总是将焦点放在最小限度的解决方案上。4)积极寻求更简单的解决方法,用于改进代码的设计和质量。
XP对测试极端重视,并将其作为开发的基础。XP认为提前添加测试可避免将与客户需求不一致的代码写入程序模块中。XP还要求采用自动化测试工具,通过测试后,要被整合到系统中去,加入后,需要通过先前系统所做的所有测试。
XP采用渐进的迭代开发过程,比如开发过程中安排6个左右的迭代,每个迭代过程1-3周。XP将注意力集中在当前的迭代上,而不去管将来的需求。这种设计过程的结果是纪律性和适应性的高度统一,使得XP成为敏捷方法中发展最好的一种方法。
优点
>多次迭代获取用户需、完善工程,最终的成品能最大限度的符合客户真实的需求。
>由于是结队编程,减少了很多繁琐不重要的文档,其开发周期较短。
缺点
>由于文档较少,降低了系统的可理解性;
>对开发人员有额外技能要求。敏捷开发强调交互和客户的参与,这就要求参与敏捷开发每个工作人员都具备一定的个人能力和社交技能。
>由于开发过程需要多次迭代,所以要求程序员整个开发过程对软件的整体架构和每一处具体架构都有很清晰的认识,并且对软件开发相当有经验。
>强调客户的参与作用,在实际中有一定困难。
>团队开发,领导者如何管理团队在缺少像传统开发的文档并且需求经常改变的情况下做到协调,很有难度。
敏捷软件开发相比传统软件开发是一个较新的软件开发理念。它更多的表现在理念描述上。他给出基本的价值观、原则和相关实践,但基本的度还是要靠开发人员自己掌握,所以敏捷软件开发具有较高的灵活性,同时也具有很多不确定性,适合有经验和有一定能力的开发人员使用。
应用分析
每种开发模型试用的场合不同,例如,软件开发的瀑布模型适用于在开发期内很少或没有需求变化、对应用领域很熟、低风险项目。敏捷开发适用于一开始不清楚具体需求或对产品要求高的客户、默契度高的团队、开发时间短的项目。
不论采用何种软件开发的方法, 都必须完成一系列性质各异的工作, 这些必须完成的工作要素是:确定“做什么”和“怎么做” , 如何“实现”和“改善”等。采用不同的软件开发方法可能改变这些工作要素的顺序、名称和相对重要性, 但是却不能忽略其中任何一个要素。由于每个软件系统都或多或少有其特殊性, 因此, 不能泛泛地称某种软件开发方法“最好”。但同时,将来随着敏捷软件开发的逐步完善,或许适应性会变得更强。
【参考文献】
[1]高禹,冯相忠.软件开发方法的创新发展过程研究[J].科学学研究,2009,02:180-186.
[2]张志丽.软件开发生命周期法比较之敏捷与传统[J].电脑开发与应用,2013,12:32-34+37.
[3]温力.软件开发方法及其应用[J].广西财政高等专科学校学报,2000,04:60-64.
[4]张友生,李雄.软件开发模型研究综述[J].计算机工程与应用,2006,03:109-115.
[5]范洪涛.敏捷软件开发应用研究[D].西南交通大学,2009.
[6]彭志楠.敏捷开发在软件开发中的应用研究[D].电子科技大学,2009.