敏捷软件开发读书笔记
对于每一本书,序言和前两章通常是比较重要的部分。
目前我看的敏捷软件开发这本书的前几章节,有些是自己已知的,有些是自己已经忘记,或者根本不知道的。写这篇文章,也是把自己的理解放在里面。
##敏捷软件开发宣言 敏捷软件开发宣言的4个原则如下:
a. 个体和交互 胜过 过程和工具 b. 可以工作的软件 胜过 面面俱到的文档 c. 客户合作 胜过 合同谈判 d. 响应变化 胜过 遵循计划
敏捷软件开发的宣言,其实是基于一个基本的外部环境:
软件发展越来越快(周期在缩短),需要能再最短的时间内做出最好的产品,能够快速的改变。
然后,需要基于下面一个基本事实:
软件需要人来开发,也许用设计这个词更妥当些,人与人之间的沟通成本在开发中占据很大一部分。
假设客户需要做一个公司的介绍网站,也许,他会说: 我需要一个网站能够介绍公司,做一个类似XXX的就可以。但是,绝对不会跟实现人员这么说:需要一个网站,左边一个内容框大小是600 * 800,右边的十600*400,中间隔着10px。即使有这样的客户,也会在你实现之后,仔细地看,然后: 嗯…把左边这个框再调大点看看效果。
归根结底来说:
软件产品是客户思维世界的具现,实现具现过程的是开发者。开发者只有在与客户不断地沟通才能完成这个具现的过程。在一般情况下(绝大多数都是这样),客户的思维世界是定性的,模糊的,比如,我有一个红色的苹果(究竟有多红?形状呢?有把吗?周围的环境是什么样的?)。
从某种程度上来说,软件开发和文学很相似,文学是把世界用文字的形式描述给人看,但是软件开发是把世界用软件的形式描述出来。
乱扯了一通,我们看看上面的四个敏捷宣言到底什么意思。
个体与交互 胜过 过程和工具
敏捷开发过程中,提倡多交流,开发人员之间交流的典型例子就是结对编程。
整个的工作环境,提倡是开放式,讨论式。
可以工作的软件 胜过 面面俱到的文档
没有面面俱到的文档不代表没有文档。 一些文档还是非常重要的,比如接口定义文档,架构文档等,都能够提高开发效率,只是简单的一瞥,就能明白需要的一切。
可以工作的软件本身就是很好的流程,状态的说明。
与之相关的一个概念是持续集成: 软件处于时刻可发布状态。
客户合作 胜过 合同谈判
与客户一起工作,至少要与能够代表客户意志的进行合作。能够及时沟通需求上的问题,能够参与到讨论当中,甚至能够参与到开发中: 比如提供
响应变化 胜过 遵循计划
Nothing endure bu change. 变化是无法避免的,只能去适应。
敏捷开发中,通常通过缩短迭代周期来减少变化带来的不利影响。这样,即使变更,通常只影响比较小的部分(一次迭代时间)。