软件产业存在的一个普遍问题就是缺乏统一定义的名词术语来描述我们的工作。客户所定义的"需求"对开发者似乎是一个较高层次的产品概念,而开发人员所说的"需求"对用户来说又像是详细设计了。实际上,软件需求包含着多个层次,不同层次的需求从不同角度与不同程度反映着细节问题。
IEEE软件工程标准词汇表(1997年)将需求定义为:
(1)用户解决问题或达到目标所需的条件或能力。
(2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或能力。
(3)一种反映上面(1)或(2)所描述的条件或能力的文档说明。
IEEE的定义包括从用户角度(系统的外部行为),以及从开发者角度(一些内部特性)来阐述需求,其关键的问题是一定要编写需求文档。
另外,以下列出其他几种关于"需求"的定义:
*需求是用户所需要的并能触发一个程序或系统开发工作的说明;
*需求是从系统外部能发现系统所具有的满足于用户的特点、功能及属性等;
*需求是指明必须实现什么的规格说明。它描述了系统的行为、特性或属性,是在开发过程中对系统的约束。
从以上的定义中,我们依然无法得到有关"需求"的清晰概念,真正的"需求"实际上存在人们的脑海中,任何文档形式的需求(例如:需求规格说明)仅是一个模型或一种叙述。
需求分析奠定了软件工程和项目管理的基础。我们在建造软件系统这座大厦的时候,如果需求分析的基础不够坚实和牢固,那么往往会导致软件系统问题百出,甚至被马上丢弃。在建造软件系统的过程中,我们经常习惯地沿用一些不规范的方法,其后果便是产生一条鸿沟--开发者开发的与用户所想得到的软件存在着巨大的"期望差异"。
我们也许会问:为什么人们开发一个软件系统会比建造一座摩天大厦要难得多?一是因为软件行业缺乏准确而又统一的语言来定义或描述相应的工作,真正的"需求"实际上存在于人们的头脑中;二是因为软件开发过程难以用一种工程化的方法来统一规范和有效实施。因此"需求"这个名词的定义不仅仅是从用户角度对系统外部行为的描述,以及从开发人员角度对系统内部特性的描述,其关键的一点是"需求"必须文档化。