设计模式

什么是敏捷开发:

把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

简单的说,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法

* 个体和交互胜过过程和工具

*  可以工作的软件胜过面面俱到的文档

*  客户合作胜过合同谈判

*  响应变化胜过遵循计划

并提出了以下遵循的原则:

*  我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。

*  即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。

*  经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。

*  在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。

*  围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。

*  在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。

*  工作的软件是首要的进度度量标准。

*  敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。

*  不断地关注优秀的技能和好的设计会增强敏捷能力。

*  简单是最根本的。

*  最好的构架、需求和设计出于自组织团队。

*  每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。

测试驱动开发:

我们实现任何一个功能都是从测试开始

持续集成:

由于集成很频繁,每一次集成的改变也很少,即使集成失败也容易定位错误。

结对编程:

站立会议:

每天早上,项目组的所有成员都会站立进行一次会议,由于是站立的,所以时间不会很长,一般来说是15-20分钟。

会议的内容并不是需求分析、任务分配等,而是每个人都回答三个问题:

1.你昨天做了什么?

2.你今天要做什么?

3.你遇到了哪些困难?

站立会议让团队进行交流,彼此相互熟悉工作内容,如果有人曾经遇到过和你类似的问题,那么在站立会议后,他就会和你进行讨论。

小版本发布:

尽量多的产品发布,一般以周、月为单位。这样,客户每隔一段时间就会拿到发布的产品进行试用,而我们可以从客户

那得到更多的反馈来改进产品。正因为发布频繁,每一个版本新增的功能简单,不需要复杂的设计,这样文档和设计就

在很大程度上简化了。又因为简单设计,没有复杂的架构,所以客户有新的需求或者需求进行变动,也能很快的适应。

以合作为中心:

现场客户:

敏捷开发中,客户是与开发团队一起工作的,团队到客户现场进行开发或者邀请客户到团队公司里来开发。

如果开发过程中有什么问题或者产品经过一个迭代后,能够以最快速度得到客户的反馈

自动化测试:

为了减小人力或者重复劳动,所有的测试包括单元测试、功能测试或集成测试等都是自动化的

可调整计划:

敏捷开发中计划是可调整的,并不是像以往的开发过程中,需求分析->概要设计->详细设计->开发->测试->交付,

每一个阶段都是有计划的进行,一个阶段结束便开始下一个阶段。而敏捷开发中只有一次一次的迭代,小版本的发布,

根据客户反馈随时作出相应的调整和变化。

当然测试驱动开发最重要的功能还在于保障代码的正确性,能够迅速发现、定位bug。而迅速发现、定位bug是很多开发人员

的梦想。针对关键代码的测试集,以及不断完善的测试用例,为迅速发现、定位bug提供了条件。

测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码。也就是说在明确要开发某个功能后,

首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。

然后循环进行添加其他功能,直到完全部功能的开发。

我们这里把这个技术的应用领域从代码编写扩展到整个开发过程。应该对整个开发过程的各个阶段进行测试驱动,

首先思考如何对这个阶段进行测试、验证、考核,并编写相关的测试文档,然后开始下一步工作,最后再验证相关的工作

及时重构。

无论是功能代码还是测试代码,对结构不合理,重复的代码等情况,在测试通过后,及时进行重构。关于重构,

我会另撰文详细分析。

小步前进。

软件开发是个复杂性非常高的工作,开发过程中要考虑很多东西,包括代码的正确性、可扩展性、性能等等,

很多问题都是因为复杂性太大导致的。极限编程提出了一个非常好的思路就是小步前进。把所有的规模大、

复杂性高的工作,分解成小的任务来完成。对于一个类来说,一个功能一个功能的完成,如果太困难就再分解。

每个功能的完成就走测试代码-功能代码-测试-重构的循环。通过分解降低整个系统开发的复杂性。这样的效果非常明显。

几个小的功能代码完成后,大的功能代码几乎是不用调试就可以通过。一个个类方法的实现,

很快就看到整个类很快就完成啦。本来感觉很多特性需要增加,很快就会看到没有几个啦

极限编程(ExtremeProgramming,XP)是一门针对业务和软件开发的规则,它的作用在于将两者的力量集中在共同的、

可以达到的目标上。它是以符合客户需要的软件为目标而产生的一种方法论,XP使开发者能够更有效的响应客户的需求变化,

哪怕是在软件生命周期的后期。它强调,软件开发是人与人合作进行的过程,因此成功的软件开发过程应该充分利用人的优势,

而弱化人的缺点,突出了人在软件开发过程中的作用。极端编程属于轻量级的方法,认为文档、架构不如直接编程来的直接。

 XP强调四种价值:交流,简易,回馈,勇气

一、XP的核心思想

从长远看,早期发现错误以及降低复杂度可以节约成本。极限编程强调我们将任务/系统细分为可以在较短周期解决的一个个

子任务/模块,并且强调测试、代码质量和及早发现问题。通常,通过一个个短小的迭代周期,我们就可以获得一个个阶段性

的进展,并且可以及时形成一个版本供用户参考,以便及时对用户可能的需求变更作出响应。

二、XP的十二种方法

规划策略(ThePlanningGame);

结对编程(Pairprogramming)

测试(Testing)

重构(Refractoring)

简单设计(SimpleDesign)

代码集体所有权(CollectiveCodeOwnership)

持续集成(ContinuousIntegration)

现场客户(On-siteCustomer)

小型发布(SmallRelease)

每周40小时工作制(40-hourWeek)

编码规范(CodeStandards)

系统隐喻(SystemMetaphor)

三、XP的四个核心价值

极限编程中有四个核心价值是我们在开发中必须注意的:沟通(Communication)、简单(Simplicity)

反馈(Feedback)和勇气(Courage)。

XP用“沟通、简单、反馈和勇气”来减轻开发压力和包袱;无论是术语命名、专著叙述内容和方式、过程要求,

都可以从中感受到轻松愉快和主动奋发的态度和气氛。这是一种帮助理解和更容易激发人的潜力的手段。XP用自己的实践,

在一定范围内成功地打破了软件工程“必须重量”才能成功的传统观念。

XP精神可以启发我们如何学习和对待快速变化、多样的开发技术。成功学习XP的关键,是用“沟通、简单、反馈和勇气

”的态度来对待XP;轻松愉快地来感受XP的实践思想;自己认真实践后,通过对真实反馈的分析,来决定XP对自己的价值;

有勇气接受它,或改进它。

TDD好处:

速度快

文档

代码同步

容易定义错误

Scrum:是一个敏捷开发的管理工具,周期在2-4周

角色:

ProductOwner:客户,给我们提需求

ScrumMaster:协调团队

ScrumTeam:团队

三种活动:

thesprintplanningmeeting:把三个角色召开会议,直到计划

ailyscrummeetings:晨会

sprintreviewmeetings:复审,反思

三种产物:

theproductbacklog:优先级(要完成的产品)

thesprintbacklog:在一个周期都不能更改需求

aburndownchart:

相关推荐