敏捷开发核心的角色是“人”,是“笨人”开发软件的方法学。
敏捷开发的核心方法是,测试,重构,迭代。唯一的目的就是编写出高质量的源代码。测试,重构,迭代,都是围绕这一个目的展开。只是在不同的阶段,不同的情景下,侧重点不一样。
1、测试、重构、迭代
敏捷提倡测试优先,在编写任何一个功能前,首先写出测试代码。这叫测试驱动开发(TDD)。
TDD主要有两个好处,一是为重构保驾护航。重构的经典书籍《重构:改善既有代码的设计》明确指出,重构是在保证程序既有功能不变的情况下,对源代码的改善。而保证程序功能不变的重要的手段,就是有测试,有了测试,我们才能放心对代码进行重构。因为这种重构是“安全的”,每次重构后我们可以进行测试。如果没有相应的测试,我觉得哪个程序员都不敢轻易的更改代码,这种改变有不可预料的风险,让人感觉很痛苦。但是有测试保驾护航的的重构,是心情愉快的,想重构那只管重构,反正有测试为验证。
同时,重构是敏捷开发中的一个重要实践。在迭代开发中,绝对不能少了重构。
TDD的第二个好处,就是改善设计。因为了要能对代码能够测试,这个目标“逼迫”程序员对程序进行“解耦”,因为耦合密切的功能,很难进行测试,所以“逼迫”程序员对接口编程。对“接口”编程,是公认的面向对象设计的一个良好实践。可以设计出遵守“单一职责”和“开闭原则”的类和模块。
像我这种笨人很适合用TDD,因为这个方法可以给我带来重构的信心,也能帮助我带来模块化的代码。
2、迭代、重构、测试
敏捷提倡迭代开发持续集成,开始没必要做出详细的设计方案,而是逐步的增加功能,完善设计。像我这种笨人,在接到一个软件项目时候,顶多可以做到理解客户需求(因为笨,也不可能全部理解),做不到根据一下子设计出满足客户需求的软件构架方案。比如系统应该有哪个模块,格模块之间有什么关系,我看不到那么深。即使调动全部脑子细胞,也做不到这点。
在开始,只做出满足客户部分需求的系统,然后逐步的增加功能以致满足客户全部需求。在每一次迭代前,我都会考虑,怎样在目前的系统架构中实现增加的需求。如果增加需求很容易,那就直接增加,如果很困难,那就修改系统架构,要保证在系统架构中增加任何功能都是和谐的,心情愉快的。当然,做到这点的前提是,在上一次的迭代,做的足够好,我们有大量遵守了“单一职责”和“开闭原则”的类和模块。这样,在本次迭代中,修改系统构架才不会困难,才愿意修改系统构架。
所以用敏捷的方法开发软件,要大脑时时刻刻保持清醒,如果我们脑力无法在开始做出强大出色的完美的设计,那就在整个开发过程中,尽量充分利用智慧有限的大脑,随时随地改善设计,改善代码。为了大脑能够保持清醒,各种修身养性的方法中第一条就是休息好。所以敏捷告诉我们,要想我们的大脑清醒,那就每周工作40小时。
敏捷为什么提倡开始“简单设计”,就是因为“笨人”做不到完美的设计,只能在开发过程中,逐步领悟软件涉及的问题领域的问题本质,才慢慢的改善设计。
3、群体的智慧
敏捷提倡结对开发和代码共享,为什么要这样小故事胜过千言万语。
多样、独立的思考,会碰撞出比群众中最聪明的人还英明的决策。这真实三个臭皮匠顶上一个诸葛亮。我为什么认为敏捷是方法是一个好方法,这是一个重要的原因。他们通过实践知道了,在软件开发中团队的力量大于个人。从两个完全不同的领域得出惊人一致的结论。
因为编程的是笨人,所以要借助群体的智慧,至于一个编码,一个在旁边看,这只是表面上形式而已。结对编程和代码集体所有的本质深刻原因是群众的智慧大于个人。
呵呵,像我这中笨人,最适合结对编程了,经常遇到有的问题想不到,别人一提醒,马上就明白了。可惜我只是个soho,每人和我结对编程,这是一大遗憾。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!