1.2 什么是软件需求
“需求”这个词在日常生活中经常使用。通常的需求是指人对于客观事物需要的表现,体现为愿望、意向和兴趣,因而成为行动的一种直接原因。例如,当某个顾客向裁缝师傅订做一套服装时,这位裁缝师傅首先要获得这位顾客的一些数据,如身高、胸围、腰围、臂长和样式等,然后根据这些数据制作服装。这些数据就是该顾客订做服装的具体需求。试想,如果裁缝师傅将顾客的这些具体需求弄错或者根本不知道的情况下,无论其如何精心制作,使用多好的面料,其所做的工作都将是枉然的!因为客户可能根本不能穿,或者穿着不舒适。这个例子说明,需求对最终产品能否适用是至关重要的。同理,对于软件开发来说,软件需求就是软件用户认为其所使用的软件应该具备的功能和性能。
对于软件需求的定义,不同的研究人员有不同的看法。A Davis认为,软件需求是从软件外部可见的、软件所具有的、满足于用户的特点、功能及属性等的集合[5]。I Sommerville认为,需求是问题信息和系统行为、特性、设计和实现约束的描述的集合[7]。而M Jackson等人则认为,需求是客户希望在问题域内产生的效果[8,9]。在比较正式的文档中,IEEE软件工程标准词汇表将需求定义为[10]:①用户解决问题或达到目标所需的条件或能力;②系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力。其中①是从用户的角度定义的,②是从软件系统的角度定义的。
关于软件需求还有其他不同的定义。产生这些不同形式的定义的原因,一是需求工程的发展过程还不太长,人们的认识还在不断深入;二是真正的“需求”实际上是在人们的脑海中形成的,很难给予准确的定义。这也是导致需求工程难度很大的原因之一。不过,根据这些定义,我们可以认为软件需求是指软件系统必须满足的所有功能、性质和限制。
对于一个软件系统,不同的人对它应具有的功能和性能会有不同的需求。例如,对于文字处理系统这一软件,A先生打算将其用于编辑英文论文。于是他希望文字处理系统具有能简单地描述数学公式、检查英语单词和文法等功能。B先生则打算利用文字处理系统制作贺年卡片。他希望系统具有能处理图片和进行彩色打印的功能等。C先生则希望文字处理系统具有简单地制作中文文档和快速打印的功能等。于是,即使对于同一个文字处理系统,由于使用者的立场不同,其应具有的功能和性能也变得有所不同。因此,对于软件开发者来说,在开发一个软件系统之前,应考虑该系统的使用者有什么样的需求,该软件能解决什么问题等。否则,开发出的软件要么使用者不满意,要么根本不能使用,从而导致软件开发费用和时间的浪费。