随着信息技术的迅速发展和经济的全球化,对软件开发的生产率提出了更高的要求。然而一方面软件开发项目希望能够有更多的可预测性,另一方面用户的实际需求汪汪比较模糊而且常常发生变化,两者的不协调给软件的开发按期完成造成了未知的风险。
软件开发界为了为了满足市场需要,减小这一因素所造成的风险,逐渐兴起了一类以快捷、轻便的思维方式迅速解决了一些传统软件开发企业的生产效率的新的开发方法,这类方法称为敏捷软件开发方法。
2001年2月11日到13日,17位软件开发领域的领军人物聚集在美国犹他州的滑雪胜地雪鸟(Snowbird)雪场。经过两天的讨论,“敏捷”(Agile)这个词为全体聚会者所接受,用以概括一套全新的软件开发价值观。这套价值观,通过一份简明扼要的《敏捷宣言》传递给世界,该宣言中写道:我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。由此我们建立了如下价值观:
也就是说,尽管右项有其价值,我们更重视左项的价值。从而宣告了敏捷开发运动的开始。
与传统开发方法相比,在敏捷开发的整个过程中,有以下几个主要的特点:
(1)敏捷开发的过程有着更强的适应性而不是预设性
从敏捷宣言的第四条响应变化高于预设计划便可以看出来。因为软件开发过程的本身的不可预见性,很多用户在项目开始时不可能对于这个项目有着一个完整而明确的预期。很多对软件的预期都在后期的修改和完善过程中产生。因此高适应性显然更加符合软件工程开发的实际。
敏捷开发实现其适应性的方式主要在于
第一,缩短把项目提交给用户的周期;
第二,增加用户,业务人员,开发人员这三者之间的交流;
第三,通过减少重构的成本以增加软件的适应性。
(2)敏捷开发的过程中,更加的注重人的因素。
在传统软件工程中,个人的因素很少的被考虑到分工中,每个个体都是只是整个代码开发机器的一个小小的螺丝钉,个人的意志和创造力很大程度上的被抹去为了更好的为集体服务。而在敏捷开发过程中,每个个人的潜力被充分的考虑,应用什么技术很大程度上直接由在第一线开发的技术人员决定;每个人的特点和创造力都可以充分地发挥,这样开发出来的软件更加的具有生命力,因为他融入了开发者的心血和创意,开发者不再是进行机械的乏味的堆砌,而是创造属于自己的艺术品,这样的条件下产生的代码必然在质量上更占优势。
(3)在敏捷开发的过程中,整个项目是测试驱动的而不是文档驱动的。
不仅每个模块有着自己的相应的测试单元,开发人员在开发自己的模块的过程中必须保证自己所开发的模块可以通过这一单元的测试,并且集成测试贯穿了整个开发过程的始终。集成测试每天会进行十几次甚至几十次,而不是像传统方法一样只有当各个模块的编码都结束了之后再进行联合调试。这样,在软件开发的进程中每一点改动所引起的问题都容嘉容易暴露出来,使得更加容易在错误刚刚产生的时候发现问题从而解决问题。这样就避免了在最后整个系统完成时错误隐藏的太深给调试造成极大的困难。
在敏捷软件开发中以极限编程为代表
12 个详细原则组成了宣言中提到的 4 个观点,这些原则是区别于传统软件工程的特征所在:
①最高优先级是通过尽早和经常交付有价值的软件来令客户满意;
② 不断地交付软件,以每两周或每两个月为周期,推荐使用较短的周期;
③ 可运行的软件是工作进展的主要度量标准;
④ 以积极的态度对待需求的变化,即使在开发阶段末期也不例外。 敏捷过程利用变化来为客户创造竞争优势;
⑤ 在整个开发过程中,业务人员和开发人员最好能每天一起工作;
⑥ 项目由积极主动的人员来完成,给他们提供所需的环境和支持,信任他们能把工作做好;
⑦ 在开发团队中,最具有效果和最有效率的信息交流手段是面对面的交谈;
⑧ 最好的系统构架、 需求和设计产生于自组织的团队;
⑨ 应时刻关注技术上的精益求精和合理的设计,这样可以提高应变能力;
⑩敏捷过程提倡可持续开发思想。出资人、开发者、用户应该保持长期、恒定的开发速度;
⑪简单化——最佳化未完成的工作的艺术——是至关重要的;
⑫团队应该定期对其运作方法进行反思,考虑如何能变得更有效,提出改进意见,并据此进行相应的调整。
而以“瀑布模型”( Waterfall Model)为代表的传统软件开发方法,团队在开发的前期总是希望把需求分析做细、做完整,尽可能把变化排除在软件开发过程之外从而来减小因为需求变化对软件开发进度、软件质量以及用户的满意程度所产生的影响,也就是说,其软件开发活动是严格按照线性方式进行的,软件活动自由度相对敏捷软件开发较低。
从对比中我们可以发现,相对于传统软件开发而言,敏捷软件开发具有以下特点:
1.以为为本,强调客户和开发团队间的有效沟通和紧密协作,而相比之下,传统软件工程更加依赖于合同和规格的说明。
2.适应性较强,接受开发过程中需求的频繁修改,能有效地应对需求的变更,而传统软件工程中开发活动是严格按照线性方式进行的,所以较不能接受开发过程中对需求进行频繁更改。
3.高度迭代,持续集成。在敏捷软件开发中,将开发过程划分为尽可能短的周期,每次迭代完成用户的部分需求,后面的迭代都是在前面迭代的基础上对系统功能进行修改、细化以及扩展的功能,设计随着需求而发展,直至系统功能完善,相比之下,传统软件开发方法中,代码为预先规划,完全设计,然后生成,对需求和架构设计的不确定性较低。
相比于敏捷软件开发,传统软件开发有两个重要缺陷:
1.由于软件开发早期客户往往不确定自己真实的需要,所以在早期建立的需求模型往往不能准确包含系统所需的功能,但是传统软件工程的开发又是按照计划在线性模式下开发,所以在开发完成后,若客户提出改变需求的要求,将会对系统进行频繁的修改,这会大大影响到系统的兼容性。
2.传统软件工程开发的测试阶段往往都是在整个代码编写完后才进行测试,假如在测试中发现问题,有可能要对整个模块进行修改,这样的返工成本往往是巨大的。
而相比之下,由于敏捷软件开发采用迭代式开发的方式,通过不断发布新版本并演示给客户,似的客户在交互过程中发现自己需要的系统特性,可以避免客户在开发初期不能提供准确详细需求而导致的问题。从这可以看出传统软件工程在需求频繁更变的情况下所变现出的巨大局限性。
尽管如此,这并不意味着传统的软件开发就一无是处,正是因为传统软件开发强调文档对于团队成员的指导作用,开发人员可以在不知道项目细节的情况下进行开发,同时,由于开发计划一开始就已经订好,这样避免了大量同客户沟通交流的迭代会议的召开从而拥有更加富裕的开发时间,有利于开发出更好的产品。而另一方面,超前的预见性和每一阶段都要通过严格的审查才能进行下一个阶段,保证了软件的质量。
敏捷软件开发和传统软件开发这两种方法各有各自擅长的领域,差异很大但是各有千秋。传统软件开发在大型、复杂的系统中优势更为明显,因为这些系统一般都具有安全关键或者其他高可靠性的属性,需求经常相当稳定,环境也具有相当的可预见性。而敏捷软件开发擅长的则是那些系统和开发团队规模较小、客户和系统的使用随时可以到位、需求和环境相对容易变更的项目。在他们各自的领域中它们的优势明显优于对手,并不能一概而论的说哪种开发方式更好、更为优秀。在未来,应用开发领域的发展趋势既需要敏捷,又离不开规范。我们可以看到,一些平衡这两者的方法正在显现,逐步建立方法,而不是自上而下剪枝,而另一方面,方法固然重要,但是同时也应该关注人、价值观念、沟通以及期望管理有关的领域
————————————————
文章出处:
浅析敏捷开发与传统软件开发的区别
作者:hzybuaa