全部博文(180)
分类: 项目管理
2009-11-20 15:36:48
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。 也就是说,把一个大项目分为多个相互联系,但也可以独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
敏捷开发的优点:
允许开发过程中的需求变化;
通过早期迭代可以较早地发现风险;
使代码重用变得可行;
减少了项目返工; etc.
敏捷开发面临的挑战:
大项目的拆分意味着更多子项目的出现,协调这些同步或异步推进的子项目,合理的资源调配都将变得更加复杂。另外,在当前项目和项目组普遍“增容”的情况下,遇到的问题同样成倍增长。人的重要性被提到了更高的高度,而缺乏有效协调手段,减少人员流动和项目变更对整个项目造成的影响也将成为一大挑战……新方法带来众多便利的同时,也相应引发了几乎同样多的问题。
2. 与敏捷开发相关的一些历史信息:
敏捷开发(agile development)概念从2004年初开始广为流行。Bailar非常支持这一理论,他采取了"敏捷方式"组建团队:Capital One的"敏捷团队"包括3名业务人员、两名操作人员和5~7名IT人员,其中包括1个业务信息指导(实际上是业务部门和IT部门之间的"翻译者");另外,还有一个由项目经理和至少80名开发人员组成的团队。这些开发人员都曾被Bailar送去参加过"敏捷开发"的培训,具备相关的技能。
每个团队都有自己的敏捷指导(Bailar聘用了20个敏捷指导),他的工作是关注流程并提供建议和支持。最初提出的需求被归纳成一个目标、一堆记录详细需要的卡片及一些供参考的原型和模板。在整个项目阶段,团队人员密切合作,开发有规律地停顿--在9周开发过程中停顿3~4次,以评估过程及决定需求变更是否必要。在Capital One,大的IT项目会被拆分成多个子项目,安排给各"敏捷团队",这种方式在"敏捷开发"中叫"蜂巢式(swarming)",所有过程由一名项目经理控制。
为了检验这个系统的效果,Bailar将项目拆分,从旧的"瀑布式"开发转变为"并列式"开发,形成了"敏捷开发"所倡导的精干而灵活的开发团队,并将开发阶段分成30天一个周期,进行"冲刺"--每个冲刺始于一个启动会议,到下个冲刺前结束。
在Bailar将其与传统的开发方式做了对比后,他感到非常兴奋--"敏捷开发"使开发时间减少了30%~40%,有时甚至接近50%,提高了交付产品的质量。"不过,有些需求不能用敏捷开发来处理。" Bailar承认,"敏捷开发"也有局限性,比如对那些不明确、优先权不清楚的需求或处于"较快、较便宜、较优"的三角架构中却不能排列出三者优先级的需求。此外,他觉得大型项目或有特殊规则的需求的项目,更适宜采用传统的开发方式。尽管描述需求一直是件困难的事,但经过阵痛之后,需求处理流程会让CIO受益匪浅
3. 敏捷开发的指导思想:
敏捷开发是由一些业界专家针对一些企业现状提出了一些让软件开发团队具有快速工作、响应变化能力的价值观和原则,并于2001初成立了敏捷联盟。他们正在通过亲身实践以及帮助他人实践,揭示更好的软件开发方法。通过这项工作,他们认为:
·个体和交互 胜过 过程和工具
·可以工作的软件 胜过 面面俱到的文档
·客户合作 胜过 合同谈判
·响应变化 胜过 遵循计划
并提出了以下遵循的原则:
·我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
·即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。
·经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
·在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
·围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
·在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。
·工作的软件是首要的进度度量标准。
·敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。
·不断地关注优秀的技能和好的设计会增强敏捷能力。
·简单是最根本的。
·最好的构架、需求和设计出于自组织团队。
·每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
敏捷设计就是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。它致力于保持系统设计在任何时间都尽可能得简单、干净及富有表现力。请记住,敏捷开发人员不会对一个庞大的预先设计应用那些原则和模式。相反,这些原则和模式被应用在一次次的迭代中,力图使代码以及代码所表达的设计保持干净。
4. 我的敏捷开发过程:
我是在实现了引擎之后,跟朋友聊天时才了解到有敏捷开发这么一个软件开发思想; 我也是在整理的过程中才了解到敏捷开发思想的内涵的! 但是我在开发的总体上基本上就是一种敏捷开发的过程!!
ASP(实现一个搜索引擎)中,我的博客已经写过以下博文:
Search Engine 1--配置ASP的运行环境(Hello World程序):、
这是开发平台的熟悉和选取;
Search Engine 2--实现我的搜索引擎的基本原型
这是我实现一个最为简单的模型,尽管我用短短的十几行代码调用百度和Google等的接口,但是我的这么一个原型对于后期的开发起到了指导性的作用,并且这么一个子项目是可以单独调试和运行的!
Search Engine 3--ASP: 实现我的搜索引擎的框架
在这里我完成了基本的界面设计,而其中的功能模块是不可执行的,并没有连接相应的代码块! 首先我的界面是可以运行测试的; 其次我已经添加了我后期开发的接口; 最后我已经把这一部分的功能做到了尽可能完善, 同时因为是模块化的,使得敏捷开发的迭代和循环的开发模式非常易于实现!
Search Engine 4--ASP个性搜索引擎: 个性首页设计
这里我添加了数据库的部分,可以添加新的网页到数据库里边,同时可以实现对数据库中已有的网页的搜索,当然可以直接跳转到相应的网站!
其中,我也演示了一个新功能的添加:
为了更加完善搜索的功能,我演示了如何添加百度和Google的搜索功能接口!
这样的话,我把前期在Search Engine 2 中实现的独立功能添加到了这里, 正好复合敏捷开发中的功能组合思想! 哈哈
Search Engine 5---整理百度和Google的调用接口
这一部分,还是可以看成是对Search Engine 4中功能组合的一种铺垫,因为后期的进一步设计和实现中,迭代和循环可能还会对界面修改和功能添加有新的要求,而我这里就可以为这些要求提供准备,加快整个开发的进程! 当然这也复合敏捷开发中对于代码重用的要求,因为我整理的这些调用接口,是独立的,可直接使用的, 完全就是用于重用的!