《软件工程:方法与实践》 读书笔记
敏捷开发与精益方法:
通过时间的积累,大家先后发明了许多轻量级的开发方法,例如:极限编程,水晶软件开发方法,自适应软件开发,动态系统开发方法等。虽说有这么多方法,人们再疑惑该用什么方法的时候就在思考一个问题,这些方法的特点或者说是不同点以及同为开发方法一定也还会有共同相通的地方;随后人们意识到了这些方法的价值观与原则是一致的,那么类似于理论物理里面想要建立大一统定理,人们也对这些个方法的一致性进行识 别,逐渐建立了“敏捷方法”的概念。
精益的思想则是由于最明显的制造业管理价值率先称为了一套管理方法体系,追求一定代价下的最高收益。
二者有鲜明的区别,但是在软件工程里面即有软件开发又有工程的意义,所以二者相互结合,相互互补,对软件开发技术的进步起到了关键的影响。
由于,软件开发的构造过程是一个没有接受外界信息的过程,这段时间有点闭门造车的意味;并且,软件开发的过程绝对无法避免会是整体功能的丰富的同时带来了巨大的代码量,这对后面再来做修改或者重构是灾难型的,那时候修改的难度不会亚于重头再来,整体重构。所以,为了减少这类恐怖的工作量后者说是工作代价,在软件开发的过程中一定要做到敏捷开发,完全没有必要做到把最终的终极目标想得特别清楚,只需要一个大概较为明确的方向,让我们的大体方向不要偏离我们的目标即可;先制定一个小小的目标,又具有类似整体功能的主要部分就行了。在编写代码时只要先知道哪些地方可能会有功能的扩展,或者内容的补充,留下足够的接口或者略超出目标内容的接口,那么就只需要专注于前期的阶段性目标努力就行了。再者,更加重要的一点,也是更加无法事先解决的一点就是一个产品的用户需求是动态的,即这个动态型有两个方面的体现:
随着用户的年龄增长,时代的进步,人们思想理念的变化,人们对一件产品(或者说是工具)的需求是会改变的。最能说明这点的一个例子就是近来兴起的共享理念让人们找到了多年以来无法充分发挥环保能力的释放途径,书籍已经早已没必要买新书,反而一些科目的旧书比新书还热销;汽车在市中心已经不一定是最快的工具了,共享单车的横空出世深讨人们欢心。我们的软件开发过程也必须放大视角,有前瞻远嘱的全局观,这样才能创造出不过时的产品,时代变化之快,我们也要频繁的分析市场需求,争取准确的抓住用户的心,这要才能抓住未来。
另一个方面就是即使在产品构造之前做过相关的用户需求的调研,但是用户对于一个尚未出世的东西的了解很少,对于自己的需求也是不能详尽描述的,只有在得到初代产品的时候,用户们使用了产品,对于自己的需求的痛点才有更加真实,更加翔实的感觉,这样才能在我们也许即将偏离航行的时候点亮那盏曾今或许模糊的明灯,而不至于让我们重复做一些无用功。
敏捷强调短周期诞生产品,让用户(如果产品还是个雏形可以将其交给一些志愿调试者)使用,更早的发现其中的问题,更早地解决它,而不至于小问题变成大问题,让开发的代价尽量不会随着时间的增加而增加。
敏捷开发的重要的价值观:个体和交互 重于 过程与工具;可以工作的软件 重于 详尽的文档;客户合作 重于 合同谈判;响应变化 重于 遵循计划。我们同时尊重以上的所有价值,它们都有很重要的意义,但是在一些二者无法调和矛盾的时候我们必须做出选择时,更应该重视左侧的价值。
敏捷开发的原则:
1·我们的最高优先级是持续不断地、及早地交付有价值的软件来使客户满意;
2·拥抱变化,即使是在项目开发的后期,敏捷过程愿意为了客户的竞争优势而采取变化;
3·经常的交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期;
4·业务人员和开发人员必须在项目的整个阶段紧密合作;
5·围绕着被激励的个体构建项目,为了个体提供所需的环境和支持,给予信任,从而达到目的;
6·在团队内和团队间沟通信息的最有效的和最高效的方式是面对面的交流;
7·可工作的软件是进度的优先度量标准;
8·敏捷过程倡导可持续开发项目开发者,开发人员和用户,应该维持一个可持续的步调;
9·持续的追求技术卓越和良好设计,可以提高敏捷性;
10·以简洁为本,它是减少不必要工作的艺术;
11·最好的体系结构、需求和设计是从自组织的团队中涌现出来的;
12·团队定期的反思如何变得更加高效,并相应的调整自身的行为。