本节书摘来自异步社区《软件工艺》一书中的第1章软件工程的当代解读,作者【美】pete mcbreen,更多章节内容可以访问云栖社区“异步社区”公众号查看。
软件工程的当代解读
软件工艺
在过去的30年中,软件工程社群一直用“工程学”这个略显呆板的比喻来看待软件开发过程。现在,软件工程已经成为了计算机专业学生的一门必修课。在各个大学的计算机系中,软件工程也是一个活跃的研究领域。人们最关注的是软件工程项目中那种确定的、可重复的开发方式。按照ieee的定义,这种方式就是:
软件工程是指采用一种有组织、有纪律、可计量的方式来开发、使用及维护软件,也即在软件领域中对工程学的采用。1
对于强调安全性的软件系统,这种有组织、有纪律、可计量的开发方式已经被证明是非常有效的。例如,为航天飞机编写软件的团队就使用这种开发方式,并成功地获得了缺陷率极低的软件系统:
在这个程序的最后3个版本(平均代码长度为420 000行)中,每个版本只有一个错误;在其最后11个版本中,总共只有17个错误。同等复杂度的商用程序将会有5 000个错误。2
但是,在这样的过程中,其他的约束条件则不得不被放松:
金钱不是关键的约束条件:项目组每年3 500万美元的预算对于nasa来说不过是九牛一毛。但是,这个预算额就意味着每行代码价值1美元。这使得该项目组成为了全美国最值钱的软件组织。3
从工程学的角度来说,这是一个恰当的利弊权衡。面对性命攸关的软件,人们毫无疑问会慷慨地用一切资源来确保系统不出错。但是,对于那些出错的代价相对较低的软件,又应该如何去开发呢?
“足够好的软件”——庶民的软件工程
对于某些软件来说,快速地开发出具有丰富功能的应用程序才是最重要的。这种观点的核心思想是:用户能够容忍程序中的错误,因为他们能够得到很多无法从其他地方获得的有用功能。正如edward yourdon所说:“我将在6个月之内交付一个系统,其中会有5 000个错误——但你一定会非常高兴!”4
实际上,“足够好的软件”只不过是软件工程思想的一个衍生物,它的出现完全合乎逻辑。它体现出了人们在资源、进度、功能和缺陷等各方面作出的工程学权衡。航天飞机的软件最重视安全性,因此必须尽可能地减少其中的缺陷,并同时接受项目组为了提高质量而提出的资源、进度方面的要求;另一方面,打包的商用软件(例如文字处理软件、web浏览器等)则要求开发者快速实现大量的功能,因此开发者就会很自然地作出“节省排除已知缺陷的时间从而压缩进度”的工程学权衡。这种权衡的核心思想是:对于某些类型的已知缺陷,花时间去排除它们并不经济。
1《ieee标准计算机词典》(ieee standard computer dictionary),isbn 1-55397-079-3,ieee,1990。
3《他们编写了好的产品》。
4 edward yourdon,《美国程序员的繁荣与复兴》(rise and resurrection of the american programmer),prentice-hall,1996。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。