设计模式
什么是敏捷开发:
把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
简单的说,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法
* 个体和交互胜过过程和工具
* 可以工作的软件胜过面面俱到的文档
* 客户合作胜过合同谈判
* 响应变化胜过遵循计划
并提出了以下遵循的原则:
* 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
* 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。
* 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
* 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
* 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
* 在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。
* 工作的软件是首要的进度度量标准。
* 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。
* 不断地关注优秀的技能和好的设计会增强敏捷能力。
* 简单是最根本的。
* 最好的构架、需求和设计出于自组织团队。
* 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
测试驱动开发:
我们实现任何一个功能都是从测试开始
持续集成:
由于集成很频繁,每一次集成的改变也很少,即使集成失败也容易定位错误。
结对编程:
站立会议:
每天早上,项目组的所有成员都会站立进行一次会议,由于是站立的,所以时间不会很长,一般来说是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: