开发者博客:www.developsearch.com
目的:就是加快生产,并且保证质量,完全符合业务的前提下,快速交付给客户。
为什么敏捷:
1、用户的需求是一直在变化的,我们应该去认识变化,接受变化,拥抱变化。
我们可以通过沟通、重构代码,来满足用户需求的不断变化。通过沟通,可以把需求变化减少,通过重构代码,构建灵活的程序结构,使得需求变化带来的程序修改减小到最少。当然,这一切的前提是测试,开发未动,测试先行,可以把测试代码的编写理解为最初的设计,那么TDD(测试驱动开发)就很自然了。
2、大多数情况下,用户一开始并不知道他想要什么功能,他只是一个简单的描述,随着项目的进展,他看到你做出来的东西,他 才会对他想要的东西做更清楚的描述。所以,在敏捷软件过程中,它将用户的初期需求整理成user story(XP概念)或者backlog(Scrum概念),然后通过一次次的迭代,和用户一起来开发出想要的软件。
每个Sprint结束以后,要发布可运行的的版本,演示给用户看,同时和用户进行讨论,做的东西是不是用户想要的,另外还要对该 Sprint进行总结
3、相关统计表明,敏捷开发可以将效率提高3~10倍,软件的质量也有更加可靠的保证; 同时,还给团队内的每个成员提供了良好的发展机会,技术和合作水平都能得到相应提高。当然,敏捷的成功前提是其方法本身的适用性和团队对它的深入理解和合理运用。
4、敏捷开发由几种轻量级的软件开发方法组成,包括极限编程、Scrum、精益开发(Lean Development)、动态系统开发方法、特征驱动开发(Feature Driver Development)、水晶开发(Cristal Clear)等等
软件过程流程图:
产品原型 :
建议使用草图和模型来阐明用户界面。并不是所有人都可以理解一份复杂的文档,但人人都会看图。
一个常见的问题是软件新的功能与用户想要的不一致。为了避免这一问题,可以模拟真实操作,改进模拟操作过程中难以理解和不清楚的操作行为。
迭代开发:
几个步骤:
需求制定——》需求分析——》设计编码——》测试、功能验证——》发布版本——》下一个周期
1、需求制定:需求方根据上一个版本,提出的新开发需求或调整等。
2、需求分析:开发及测试人员,与需求方讨论并分析新需求,并验证需求的可行性。
3、涉及编码:根据确认后的需求,设计实现方式并进行编码。
4、测试、功能验证:对软件稳定性进行各种测试,并由配合需求方进行功能验证。
5、发布版本:将这个版本发布给需求方。
6、下一个周期:重复1到5步骤。
7、一系列迭代之后,可以只针对测试活动再补充一个迭代。这个迭代可以将重点放在系统测试、与其他系统的集成度、性能等方面。敏捷开发过程中,可能会导致过少的测试文档。如果迭代周期为1个月左右,可以不必对测试文档过于要求,但要制定好测试策略。
遵循的原则:
1、我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
2、即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。
3、经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
4、在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
5、在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。
会议安排:
1、每日碰头会,15钟左右,总结昨天完成了什么,今天要做什么,存在哪些问题等,可以 用Burndown Chart(燃尽图)来形象展示工作进度。
2、评审会议很重要,传统开发模式往往略过该环节,导致一些错误做法不断重复,好的做法无法推广。
3、每次迭代的时候也都要开一个计划会议和评审会议,一般需要的时间可能会长些,比如半天。这些会议的目的就是对工作查缺补漏。
注:开会时,可以将原先的分组打散,让整个团队都参与到项目的需求讨论和测试中来,这样可以突出成员个人,让大家更乐意参与。
代码检查:
1、刺激团队成员进行代码重构,我觉得一个可行的方法就是代码检查,团队中的高级程序员可以担当这一任务(当然最好是小组成员都参与进来),通过代码检查,要求开发人员对代码进行重构。
测试:
1、编写可测试的需求文档,及早地考虑测试,当需求完成时,可以接受的测试用例也基本一块完成了。
开始就要用“用户故事”(User Story)的方法来编写需求文档。这种方法,可以让我们将注意力放在需求上,而不是解决方法和实施技术上。过早的提及技术实施方案,会降低对需求的注意力。 规划业务需求,可以采用“3W模板”,也就是:
谁(Who)
|
是什么(What)
|
为什么(Why)
|
消费者/用户 | 想将归档过程数字化 | 为了增强沟通,提高分享效率 |
2、单元测试,通过一段时间的测试代码的编写,让大家觉得开发程序的同时,写测试代码是常态。通过写测试代码,对软件进行重构,增强其 灵活性和可维护性。当大家接受了这一概念以后,接下来的TDD就水到渠成了。那么,自动化的集成测试,验收测试也就不再遥远了。当然,结队编程也是后续将 要采用的实践之一。
3、验收测试,不能再让用户充当我们的QA。除了程序开发人员进行单元测试以外,安排的每个任务在提交之前必须由团队QA进行测试,测试通过才可提交关闭。
奖惩:
QA会对验收测试和回归测试中的bug进行统计,代码检查人员也会对程序中需要重构的地方进行统计,当每个Sprint结束的时候,谁的数据最 难看,嘿嘿,你请大家吃一顿大餐吧。谁的数据最好看,奖励一朵小红花,哈哈。这些数据都会在项目管理工具进行公示。
敏捷开发方式能给企业和用户带来以下好处:
1. 精确。瀑布模式通常会在产品起点与最终结果之间规划出一条直线,然后沿着直线不断往前走。然而当项目到达终点时,用户通常会发现那已经不是他们想去的地方。而敏捷方法则采用小步快跑,每走完一步再调整并为下一步确定方向,直到真正的终点。
主要的敏捷方法:
开发者博客:www.developsearch.com