《软件工艺》—第2章软件工程的困境

第 2 章 软件工程的困境
软件工艺
软件工程存在的最大问题就是:它假设那种“有组织、有纪律、可计量的开发方式”是唯一可行的方式。软件工程实际上是把工程学的隐喻强加于软件开发之上,从而使我们一叶障目不见泰山,看不到其他开发方式的存在。有一个例子能够将这一问题彰显无遗,那就是软件工程中的“缺陷可能性”和“缺陷排除率”这两个概念:

缺陷可能性:软件项目中预期可能存在的全部错误和缺陷。
缺陷排除率:在将软件项目发布给消费者之前,被排除的缺陷占潜在缺陷总数的百分比。1
这种机械的观点忽略了一个事实:越好的程序员,所犯的错误就越少,并且发现错误也越快。教条主义的软件工程使我们忘记了软件的本质:真正决定项目成败的,是作为个体的程序员的技能、知识和经验。

Bill Curtis等人对大型软件工程项目进行了一组意义深远的现场调研。从这些调研结果中,我们可以清楚地看到杰出的设计师作为个体对整个项目所做的贡献以及他们的重要性:

每个项目组中都会有这样的一两个人。他们通常是资深系统工程师,他们在系统的设计中承担主要责任。在我们研究过的所有项目中,大约有三分之一的项目存在这样的情况:某一个人对整个项目起主导作用,项目的发展方向由他决定,项目的成果依赖于他的工作成果。有时候,项目组的其他成员甚至会将他称为“救世主”。这些真正杰出的设计师拥有的应用领域知识比其他同事丰富得多,因此,在我们的研究结果中,他们显得格外出类拔萃。他们是项目的一种稀缺资源。2

随后,这份研究报告还写道:

软件开发的传统观点往往认为:软件项目的成败不应该依赖于某个关键人物的发挥。但是,很多成功的大型项目的经验却告诉我们:这种理论一旦被用于实践,可谓贻害无穷。优秀的设计师拥有的领域知识不论在深度上还是在广度上都胜人一筹,而这些知识很难通过一组设计过程获得。所以,优秀的设计师的确是不可或缺、不可替代的。3

在期盼通过工程学的超度而达到“有组织、有纪律、可计量的开发方式”时,我们逐渐地迷惑了自己的头脑。其实,我们应该讨论的不是“项目的缺陷可能性”,而是“开发者的缺陷可能性”。

道理很简单:优秀的设计师所犯的错误要比他的同事们少得多,因此优秀设计师的“缺陷可能性”就比较低;同时,优秀的设计师也能够更快地发现系统中的缺陷,因此他的“缺陷排除率”也比较高。对此,Fred Brooks早已作出了精辟的论断:

……系统应该由尽可能少的人员来开发。实际上,绝大多数大型编程系统的经验显示出,一拥而上的开发方法是高成本的、速度缓慢的、低效的,开发出的是缺乏概念完整性的产品。……得出的结论很简单:如果在一个200人的项目中,有25个最能干和最有开发经验的项目经理,那么开除剩下的175名程序员,让项目经理来编程开发。4

简而言之,软件工程的关键问题就在于:它使我们忘记了“是人来开发软件”这样一个简单的事实。软件工程含蓄地给了我们一个承诺:只要能定义出一个有组织、有纪律、可计量的开发过程,任何人都可以成功地完成软件开发。可惜,这只能是一个梦想。正如Curtis的调研报告所表明的:就算有了一个理想的过程,想要获得项目的成功,出类拔萃的开发者仍然是必不可少的。所以,我们有必要认真考虑这样一个问题:如何培养软件开发者,才能使他们也有可能出类拔萃?不过,在回答这个问题之前,我们需要先解决另一个问题:所谓“有组织的软件开发过程”,究竟意味着什么?

1 Jones Capers,《软件质量》(Software Quality),ITP,1997,p.331-332。
2 Bill Curtis,Herb Krasner及Neil Iscoe,《对大型系统软件设计过程的现场调研》(A Field Study of the Software Design Process for Large Systems)。见《ACM通讯》(Communications of the ACM)1988年11月号,pp. 1268-1287,p. 1271。
3 Curtis,《对大型系统软件设计过程的现场调研》,p. 1272。
4 Brooks,《人月神话》,p. 130。或见中译本第34至35页。

时间: 2024-09-20 05:40:29

《软件工艺》—第2章软件工程的困境的相关文章

《软件工艺》—第1章软件工程的悖论

第 1 章 理解软件工程软件工艺为了看清软件工程适用(以及不适用)的范畴,我们首先需要对软件工程有一个深入的理解.为了理解软件工程,我们首先需要了解在早期的软件工程文献中提到的那些项目.稍做研究,你就会发现一个令人惊讶的事实:这些文献中几乎没有对商用软件的报告.在所有的案例中,绝大多数都是大型国防项目或者小型科研项目.在这两类项目中,开发者通常都需要面对极其严峻的硬件/软件条件:而在现代的商用项目中,环境通常会宽松得多. 一个非常典型的例子就是美国国防部于1969年至1975年间开发的SAFEG

《软件工艺》目录—导读

版权声明 软件工艺 Authorized translation from the English language edition, entitled Software Craftsmanship: The New Imperative, 0201733862 by Pete McBreen, published by Pearson Education, Inc., publishing as Addison-Wesley, Copyright 2001 Pearson Education,

《软件工艺》—第1章软件工程适合你的项目吗?

软件工程适合你的项目吗?软件工艺需要同时开发全新的软/硬件系统的系统工程类项目显然是适于使用软件工程方法的,很多国防项目和航天项目都可以归于这一类.如果我要乘坐一架数控驾驶的航天飞机飞向太空的话,我一定会希望飞行控制软件的开发和检验是以一种"有组织.有纪律.可计量的方式"进行的.起码,如果听说这个软件是"由出价最低的软件公司开发的",我的心里一定不会太好受. 另一方面,如果你的企业需要开发大型的.打包销售的消费类软件,并且又善于作出恰当的工程学权衡,那么你很可能会使

《软件工艺》—第1章谁能取代软件工程?

谁能取代软件工程?软件工艺软件工程的替代品其实还不止一个.在过去的几十年中,人们尝试用很多种不同的方式来开发软件.不过,在开始讨论这些问题之前,我们必须首先摆脱机械刻板的"软件工程"这个隐喻,去了解软件开发的真实本质. 本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接.

《软件工艺》—第1章“有组织的、可计量的”软件开发过程现实吗?

"有组织的.可计量的"软件开发过程现实吗?软件工艺对于软件开发来说,所谓"确定的.可重复的过程"真的能够达到吗?SCRUM软件开发过程1的创始人曾经这样说道: 如果某个过程能够完全确定下来(即能够了解过程所涉及的所有细节,从而将其设计为可以重复地多次运行,并且完全能够预测其结果),那么该过程就被称为"确定过程".从理论上来说,一切确定的过程都可以被自动完成.另一方面,如果人们并未了解某个过程中的所有细节,只是大致地知道在某些初始条件下.通过某些调

《软件需求工程(第2版)》一第2章 软件工程与需求工程2.1 软件工程

第2章 软件工程与需求工程 2.1 软件工程 软件工程是指用工程方法开发和维护软件的过程和有关技术.软件工程起因于上世纪60年代后期出现的"软件危机".所谓"软件危机"实质上是指人们难以控制软件的开发和维护,其具体表现为:大型软件系统十分复杂,很难理解和维护:软件开发周期过长:大型软件系统的可靠性差:软件费用往往超出预算.面对"软件危机",人们通过调查软件系统开发的实际情况,逐步认识到软件的开发和维护有必要采用工程化的方法,于是软件工程在1968

《软件工程方法与实践》—— 第1章 软件工程概述 1.1 引言

本节书摘来自华章出版社<软件工程方法与实践>一 书中的第1章,第1.1节,作者窦万峰,更多章节内容可以访问"华章计算机"公众号查看. 第1章 软件工程概述 1.1 引言 软件工程(Software Engineering,SE)是在20世纪60年代末期提出的.提出这一概念的目的是倡导以工程化的思想.原则和方法开发软件,并用来解决软件开发和维护过程中出现的诸多问题.

《软件工艺师:专业、务实、自豪》一3.7 软件工艺的历史

3.7 软件工艺的历史 早在1992年,Jack W.Reeves就提出,软件开发更像手艺而非工程.虽说如此,但笔者依然认为软件工艺的真正发端是Andy Hunt与Dave Thomas在1999年写的<The Pragmatic Programmer:From Journeyman to Master>.2001年,Pete McBreen出版了<Software Craftsmanship:The New Imperative>,这本书中的大部分理念后来都体现在了软件工艺活动之

《实践者的研究方法》—— 第2章 软件工程 2.3 软件工程实践

2.3 软件工程实践 在2.2节中,曾介绍过一种由一组活动组成的通用软件过程模型,建立了软件工程实践的框架.通用的框架活动--沟通.策划.建模.构建和部署--和普适性活动构成了软件工程工作的体系结构的轮廓.但是软件工程的实践如何融入该框架呢?在以下几节里,读者将会对应用于这些框架活动的基本概念和原则有一个基本了解.   2.3.1 实践的精髓 在现代计算机发明之前,有一本经典著作<How to Solve it>,在书中,George Polya[Pol45]列出了解决问题的精髓,这也正是软件