我们的客户工作机会联系我们Blogs中 文 or English
首页 > 资源
资源RESOURCES

为什么敏捷更适合于软件开发?

 

软件开发是复杂的

复杂的问题是指那些不可预知的问题。软件开发中任何事情都可能是复杂的。当复杂的事情交互时,复杂的程度就难以形容了。软件开发中复杂性有三个维度:需求,技术和人。

软件需求是复杂的,因为他们不但不明确,而且经常变化。许多需求不同且需求经常变动的干系人常常很难把需求表达清楚。而且客户只有在听取了别人的意见,或者使用了软件的初版之后,才真正开始明白他们需要的是什么。

软件开发使用先进的技术帮助应对商业挑战并占得市场先机。这些先进技术跟新换代快,并且常常不可靠。事实上,有着新优势新技术甚至是技术革新都是常见的。软件技术的复杂性经常被混合。因为经常有许多不同技术的需求(来自不同的源头或公司),用接口把它们连接起来是一件更为复杂的事情。

在下图中,纵轴表示需求的复杂度,横轴表示技术的复杂度。两种复杂度的交点定义了整个项目的复杂度。现今几乎所有的软件开发项目都是复杂的

 

复杂性的第三个维度是开发软件的人。软件开发需要有创造力并且有才能的人,但是他们的技能,智力水平,经验,观点,态度和偏见都不尽相同。这些人工作在一起,工作成果会变得很难预测。

 

管理复杂项目

如果用某一个流程能重复的产出质量可接受的结果,这个流程叫做预定义流程控制。当预定义流程控制由于一些中间活动的复杂性而不能成功时,就需要使用经验主义流程控制

当流程底层的运作机制容易理解时,使用预定义流程控制是很典型的。当流程太复杂以至于预定义控制无法处理时,经验主义方法是比较合适的。

—B. A. Ogunnaike and W. H. Ray,
Process Dynamics, Modeling, and Control

我们无时无刻不在使用定义流程,因为有了它们的帮助,我们可以不用照看生产过程也可以组装出高质量低价格的产品,比如日用品。然而,当产品的质量差到无法使用时,反攻会使价格无法接收,或者产量低到的平摊成本过高。从长远角度来看,第一次制造成功新产品时,经验主义流程相比用预定义流程控制之后的反攻代价来得更低。

敏捷开发方法,如Scrum,通过经验主义流程控制中的检查,适应和透明性,来应对软件开发项目中的复杂性。