胡 霞
[摘要]在软件开发过程中,敏捷开发思想是现阶段最新的软件开发思想,它可以让软件开发团队具有快速工作和响应变化能力的价值观和原则。因此,就这一先进思想在实际项目开发的应用提出一些观点。
[关键词]敏捷软件开发方法极限编程项目开发实践
中图分类号:TJ8文献标识码:A文章编号:1671-7597(2009)1220066-01v
一、引言
敏捷软件开发思想是近几年在软件领域兴起的新思潮,使用该思想设计出来的软件灵活、高效、高质,将其与传统的开发原则结合起来,能有效地提高软件开发的效率,是越来越多的软件开发者所追捧的一种开发思想。将该思想引入到小型项目开发过程中,解决传统方法在适应需求变化方面的不足,能有效控制需求变更和客户对开发过程的透明性带来的风险,以求在较短的时间内获得较为满意的效果。
二、敏捷软件开发思想
(一)简介
敏捷软件开发是以Robert C.Martin为代表的软件行业的领军人物提出的软件开发思想。在2001年初,由于看到许多公司的软件团队陷入了不断增长的过程的泥潭,一批业界专家聚集在一起概括出了一些可以让软件开发团队具有快速工作和响应变化能力的价值观和原则。他们称自己为敏捷联盟,在随后的几个月中,他们创建出了一份敏捷联盟宣言(The Manifesto of the Agile Alliance)。
人和交互重于 过程和工具
可以工作的软件 重于 面面俱到的文档
客户合作 重于 合同谈判
随时应对变化 重于 遵循计划
敏捷联盟以他们亲身实践及帮助他人的实践提示更好的软件开发的方法。该方法强调了以人为核心、通过迭代、循序渐进地进行软件开发,它更加灵活,更能够适应不断变化的需求,提高了软件开发的质量,大大提高了软件开发的效率,同时也缩短了软件产品开发的周期。
(二)极限编程模型
敏捷软件开发的模型有XP(极限编程,eXtreme Programming)、FDD(特性驱动开发,Feature-Driven Development)、Scrum、ASP(自适应软件开发Adaptive Software Development)、DSDM(动态系统开发方法,Dynamic System Development Method)、AUP(敏捷统一过程,Agile Unified Process)、Crystal等。本课程中主要通过研究极限编程模型,来学习敏捷软件开发思想。
XP是一种灵巧的软件开发方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手:加强交流;从简单做起;寻求反馈;勇于实事求是。XP将复杂的开发过程分解为一个个相对比较简单的小周期;通过团队人员之间、团队与客户之间反复的交流及其它一系列的方法,开发人员和客户在整个过程中均可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程,缩短软件开发的周期,提高软件开发的效率和质量。
三、敏捷软件开发在项目开发中实践
按照敏捷开发提出的设计要求,在项目开发中,结合具体的开发项目、企业文化和团队实际情况合理地利用敏捷开发方法,真正帮助解决项目开发中可能出现的危机和潜在的困难,以生产出高品质的软件产品。以下几个方面是本人在项目开发具体的实施过程的一点心得:
(一)以人为本,组建完整团队
敏捷软件开发思想认为,“原则、模式和实践都是重要的,但是使它们发挥作用的是人”“过程和技术对于项目的结果只有次要的影响。首要影响的是人。”由此可见,具有较强的团队合作力量,凝聚在一起的团队具有最强大的软件开发实力。传统的软件开发模型要求将用户需求精确化、完全化,形成最终的需求分析报告,并要求在软件开发过程中不允许再发生变化。而传统的软件开发模式下,客户与软件开发人员并不能经常性地交流,往往开发人员完成的需求分析并不是真正用户所需要的,或者是用户的需求一旦发生新的变化,很容易引发软件危机,项目以失败告终或是软件残缺不全。而在敏捷软件开发中更加注重团队合作,这里所指的团队并不仅仅指一支团结的软件开发团队,更重要的是把客户加入到开发团队中来。客户与开发者紧密地工作在一起,进行有效的沟通与及时的反馈,以便于彼此知晓对方所面临的问题,客户与开发人员工作距离越近,需求越精确化,因为沟通不够而出现问题的可能性就越小。
(二)让软件代替文档
在软件开发中,没有文档的软件是一种灾难,然而过多地文档比过少的文档更糟,在很多项目开发过程中,大部分都是为了文档而文档,而每次同步大量的文档需要花费大量的时间,而不同步的文档反而容易造成团队成员重大的误导,反而导致了进度拖延。因此,我们要求软件开发过程中的文档尽可能的简短,给我的开发文档,没有太多东西,但是你想要的全有,而且特细致。而代码是最真实的表达者,在软件开发过程中,我们尽量地使用可以工作的软件来代替文档说明,并通过人与人之间的直接交流,从而完成对整个系统时常变化的脉络的把握。因此在开发初期我们可以选用一些原型设计工具(例Axure Rp),完成对系统的结构设计,能够较快地获取最初的用户故事,并根据这些用户故事构建项目基础结构,并根据结构,确定第一个版本发布计划,并完成首次版本的开发与设计,“越早交付上线就能够越早地为企业提供价值,也就能越早地体现出该软件及其开发的工程价值与社会价值”。
(三)短周期迭代交互
敏捷软件开发中要求项目每两周就进行一次迭代,每次迭代都是一次较小的交付,该交付可能成为确认,也可能被舍弃。这样可以将可能出现的问题避免了扩散,有效地避免传统开发过程中出现的返工现象。开发者将迭代的结果向客户演示,根据客户的反馈结果确定迭代的取舍。每次的迭代都必须要求用户参加,并得到客户的许可方可进行。在迭代的交流过程中,使用素材卡来获取记录新的用户故事,并及时与用户交流沟通,确认新的变化与需求,并形成新的迭代计划,从而很好的拥抱不断变化的需求。
(四)持续地进行代码的重构
虽然我们设计的代码有些已经能够按照要求在工作,它并没有出错,但我们却建议去修理它,为了是使我们的软件模块更加易于阅读和修改。我们可以根据软件设计的原则来消除我们软件设计的臭味,以防我们设计的软件出现僵化性、脆弱性、牢固性、粘滞性、不必要的复杂性、不必要的重复、晦涩性等软件气味,防止我们的软件腐化。大部分开发人员在完成项目实践过程中,习惯于不停地复制、粘贴代码,这样很容易造成了代码的冗余,并且不利于软件模块的修改。如果我们及时地按照软件设计的原则来进行代码的重构,可以大大节省了今后代码更新所需要的时间,同时也提高了软件开发的工作效率,因此在此过程中,我们鼓励软件开发人
员大胆地运用软件工程的相关知识,依据软件设计原则来进行代码的重构,同时也不会害怕经常变化的需求。
四、敏捷软件开发实践中遇到的困难
敏捷开发思想的出现,在软件行业引起了一轮研究热潮,由于越来越多的人对它的追捧,往往会背道而驰,走入敏捷开发思想的误区,主要表现在以下几个方面:
(一)难以实现的结对编程
俗话说:“三个臭皮匠胜过一个诸葛亮!”在敏捷开发过程中提倡的结对编程,也就是说代码都是由结对的程序员共同完成的,结对人员中,一个控制键盘并输入代码,另一个观察着输入的代码,寻找代码中的错误和可以改进的地方,两个人频繁互换角色,这样可以达到事半功倍的效果。在整个项目组中,结对编程的关系可以经常变换,不过前提是该项目被划分成一个个最小的功能模块,这样的方式极大地促进知识在团队中的传播,同时也能够更加促进了项目各功能模块之间衔接,可以大大地减少缺陷率。组员之间通过这样的结对编程可以相互交换思想,加快知识的传播。在企业中,往往出现的是一个萝卜一个坑,很难做到二个开发人员结对完成代码的编写。
(二)敏捷软件开发工具的缺乏
与传统的软件开发相比,敏捷开发往往缺少开发工具和集成环境支持的软件开发方法,这使得敏捷开发推广比较困难。期待着能够早日出现更成熟、便捷、人性化、可视化的开发工具、集成环境,以及在此类开发工具、集成环境支持下进行敏捷软件开发的成功典型案例库。
五、结束语
敏捷设计就是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。本人也是初涉敏捷软件开发思想,对其中的精华可能理解还不够深入,以上仅是一些在课程中应用的一点思考。如果能够将敏捷设计的一些思想使用到软件开发过程中,将会事半功倍的效果,这种软件开发思想反映了软件开发中较先进的理论软件开发价值观和原则。
参考文献:
[1](美)Robert C.Martin著,邓辉译,敏捷软件开发(原则、模式与实践),清华大学出版社(北京),2003年9月.
[2](美)Martin Fowler著,侯捷、熊节译,重构-改善有代码的设计,中国电力出版社(北京),2003年8月.
[3](美)Grady Booch著,贾爱霞译,面向对象的分析与设计,机械工业出版社(北京),2003年1月.
作者简介:
胡霞,女,31岁,江苏大丰人,苏州工业职业技术学院工程师,主要研究方向:软件开发。