engineering methodologies VS agile methodologies

www.martinfowler.com/articles/newMethodology.html#FromNothingToMonumentalToAgile

engineering methodologies(工程方法,又或则plan-drive methodologies,计划驱动方法),这些方法通

过对开发过程进行严格而详细的规定,以期使软件开发更可预知以及获得更高的开发效率,这种强调前期计

划灵感来源与其他工程领域的实践,从而得名工程方法。不过工程方法虽然存在了很长时间,但并没有引起

人们太多的注意,对其主要的评批是太过于个官僚化,太多德事情需要做,会延缓整个开发进程。

agile methodologies(敏捷方法)以对工程方法的反其道而行得以发展,主要是在无过程和过度过程中寻找

一种平衡,即从合理的过程中获得满意的回报。

敏捷方法与工程方法有一些明显的区别,其中之一反映在文档上,敏捷方法不是面向文档(document-

oriented)的,其倡导的是在给定的任务中使用更少的文档,敏捷方法更象是面向代码(code-oriented):

文档的核心应该是源代码

文档方面的特点并不是敏捷方法的关键所在,文档减少只是表象,其更深层次的特典是:
 
 1.敏捷方法是强调“适应”而不是“预见”,工程方法试图在代码构建之前定制一个详细的计划,若项目庞

大,那么就需要在一个很长的时间跨度内作出详细计划。然后依照计划进行开发。这种方法的本质是拒绝变

化的。而敏捷方法强调的是“welcome change”,其目的就是设计出适应变化的过程,甚至通过改变自身来

适应变化。

 2.敏捷方法是面向人(people-oriented)而非面向过程(process-oriented)的,工程方法的目标是定义一

个适合所有人使用的过程。 而敏捷方法则认为没有任何过程可以替代开发组的技能,所以过程的作用应该是

为开发组提供支持

将设计与建造分离开来?

    《代码大全》的部分比喻在 Martin Fowler的文章中显得有些不合适了,软件工程不同于传统的工程项目,比如土木工程。工

程方法的思路类似与传统的工程项目,将设计与建造完全分开,因为在传统的工程项目了,设计与建造是两个截然不同的活

动,设计是难以预计的,需要昂贵的有创造性的人员,建造过程则比较机械,只需要按部就班的工作,这样在建造过

程中就能使用技能相对较低的人员。然后土木工程与软件工程存在许多不同,首先,土木工程中,设计相对与建造无论是在时

间上还是经费上都要少得多。但软件工程中编码所占的时间一般要少的多,McConnell 指出在大型项目中,编码和单元测试只

占15%,这几乎和桥梁工程中的比例倒过来了。即使把所有测试工作都算作是建造的一部分,设计仍要占到50%。

对比软件工程和传统工程,可以得出一些结论:

    1.在软件开发中,具体建造费用低得可以认为是没有。

    2.软件开发中所有工作都是设计,因此需要富有创造性的才智之士。

    3.创造性的过程是不太容易计划的,因此,可预见性或许是个不可能达到的目标。

    4.我们应该对用传统工程来隐喻软件构造保持足够的警觉,因为它们是不同类型的活动,需要不同的过程。

你可能感兴趣的:(工作,敏捷开发,软件测试,活动,单元测试)