第1章 需求工程概述
1.1需求工程的重要性
随着计算机应用的不断发展和深入,软件系统的日益大型化、复杂化,软件的开发成本越来越高,软件开发的风险也越来越大。Standish集团公司的研究报告称:在美国,每年用于软件开发的费用在一千亿美元以上,其中,大型公司开发一个软件项目的平均成本为2322万美元,中等大小的公司为1331万美元,小型公司则为434万美元。调查显示,31%的项目在完成之前被取消,进一步研究的结果还表明:527%的项目实际所花费的成本为预算成本的189%[1]。根据该公司的另一项分析,项目失败或严重超支的8个最重要原因中有5个都与需求相关:需求不完整、缺乏用户的参与、客户期望不实际、需求和需求规格说明的变更、提供许多不必要的功能[2]。
一些具体的案例令人触目惊心:伦敦股票交易项目TAURUS,在花费了数百万英镑之后于1993年被取消(项目失败的总损失估计达到几亿英镑)。调查结果显示,许多问题源于未能协调那些不一致的需求[3]。Swanick空中交通控制系统原计划在1998年完工,但直到2001年尚未交付使用,额外开支高达1亿英镑以上。经官方调查,发现其中的一个主要原因在于“缺乏健壮的需求规格说明导致无法继续进行系统实现”[4]。
与此同时,另外的一些调查和研究显示:一个与需求相关的错误发现和解决越迟,其修复的代价越昂贵。ADavis研究发现,在需求阶段检查和修复一个错误所需的费用只有编码阶段的1/5到1/10,而在维护阶段做同样的工作所需付出的代价却是编码阶段的20倍[5]。这意味着在维护阶段修复一个错误的代价与需求阶段修复一个同样的错误的代价的比值可高达200∶1。
诸如此类的调查研究目前已有很多。虽然项目失败涉及的原因多种多样,但正如RGlass所说,“项目需求无疑是在软件项目前期造成麻烦的一个最大原因。一个又一个的研究已经发现,当项目失败时,需求问题通常正是核心问题。”[6]因此,在软件开发过程中,必须及早、有效地发现和解决与需求相关的问题。
在很长一段时间里,人们并没有充分认识到软件需求的作用,软件工程界也一直没有将需求工程作为一个独立的部分进行深入的分析和研究。直到上世纪90年代中期,随着软件系统开发中出现诸多问题,人们才逐渐认识到软件需求在整个软件开发中的重要性。通过一系列关于软件需求的重要学术会议进行广泛而深入的研究和讨论,由IEEE创办的专门研究软件需求的国际期刊《Requirement Engineering》的出版发行标志着需求工程作为一门独立的子学科正式形成。