第1章需求工程
1.1引言
随着软件应用领域���不断扩展和深入,软件需求的获取、分析和管理逐渐成为软件开发过程中非常重要,但同时又相对困难的活动。早在20世纪70年代中期,研究者就已经发现对软件需求的获取和描述很难达到必要的完整性、一致性和无二义性,而这些需求中存在的缺陷往往会对*终软件产品的质量造成决定性的影响。在20世纪90年代进行的若干项调查研究中,研究者发现,软件需求问题的困难性并没有因为软件开发技术和方法的发展而逐渐减弱,反而呈现出不断增长的趋势,并在实际软件开发活动中展现出巨大的负面影响。一项涉及350家美国软件公司和8000多个软件项目的调研发现,软件需求的缺陷导致近1/6的软件项目彻底失败,近1/4的软件项目开发成本和周期远远超出预算。在欧洲,一项涉及17个欧盟**和3800多个软件开发组织的调研也揭示了同样的现象: 软件开发中一半以上的问题都与软件需求缺陷有着密切的关系。
从软件开发的成本来看,需求中的缺陷传播到软件开发后期导致的修正成本将远远大于在需求分析阶段的早期修正成本。在一项针对GTE,TRW,IBM和HP等公司若干独立软件项目开发成本的分析中,研究者发现了近似相同的需求缺陷修正成本规律: 以需求缺陷在需求分析阶段被发现后导致的修复成本为基准,在设计阶段被发现后导致的修复成本将增长2~5倍,在编码阶段的修复成本将进一步增长10~20倍,在软件维护阶段的修复成本则急速增长至100~200倍。Snyder和Shumate进行的一项统计调查则发现,虽然74%左右的需求缺陷能够在需求获取和分析阶段通过客户交流、复查和协商等方式被发现,但仍然有4%和7%的需求缺陷分别被传播至软件的高层设计和详细设计阶段,而4%的需求缺陷甚至直到软件的维护阶段才会被发现。
因此,如何以一种系统化的方式在软件的整个生命周期中对需求进行有效的管理就成为软件开发过程中的一个重要问题。这也是导致需求工程概念产生的直接原因。
1.2基础知识
1.2.1需求的定义
在一般意义上,需求体现了为解决现实世界中的某个问题而必须具有的性质。特别的,软件需求指代了为解决特定的问题,软件必须表现出的性质。软件所能解决的问题具有广泛的多样性,例如: 通过软件实现对某些人工活动的自动化、通过软件支持特定组织的业务流程、通过软件控制硬件设备等问题。由于软件所能解决问题的复杂性,软件的需求也体现出很强的复杂性。通常,软件的需求是由特定组织内具有不同职能和角色的一组人群各自需求的
…… 如何提高软件产品的质量和生产效率是软件产业发展过程中始终面临的一个重要问题。而软件项目要取得成功,*重要的莫过于了解要开发的软件需要解决哪些问题,此即软件需求所要解决的问题。它的基本任务是准确地定义未来系统的目标,确定为了满足用户的需要系统必须做什么。在此基础上通过对问题及其环境的理解与分析,为问题涉及的信息、功能及系统行为建立模型,将用户需求**化、完全化,*终形成需求规约,为后续的软件设计、实现、测试直至维护提供基础。
同时,软件复用作为避免重复劳动、提高软件质量和生产效率的解决方案,其出发点是软件产品的开发不再采用“从零开始”的模式,而是充分利用过去软件开发中积累的资产,诸如源代码、设计方案、需求规约以及测**例等,实现对软件开发过程中可复用成分*大程度的复用。实践表明在软件的生命周期中,复用发生的时间越早,其带来的收益也就越大。因为一般而言,可复用的需求将导致可复用的设计,而可复用的设计则可进一步导致可复用的代码。当需求被复用时,相应的验收测试,验收测试计划和过程也能被复用。软件复用的研究和实践表明,特定领域的软件复用活动相对容易取得成功。这是由特定领域本身的相对内聚性和稳定性所决定的。内聚性保证了领域有足够的共性; 而稳定性保证了生产可复用资产的投资可以获得足够的回报。
作为软件复用的核心技术,领域工程的主要目的是实现对特定领域中可复用成分的分析、生产和管理; 软件产品线的基本思想是在领域工程的基本上,利用这些可复用资产以及相关的组装和定制技术,开发出新的软件产品。本书主要关注于生产可复用软件资产的领域工程技术上,尤其集中在如下三个方面: 建立领域需求模型的领域分析技术; 对领域需求模型的复用技术; 基于领域需求模型的高层软件体系结构设计方法。本系列丛书的《构件化软件的设计与实现》将涉及领域设计阶段和实现阶段的技术; 本系列丛书的《软件复用过程与资源管理》将介绍面向复用的开发和基于复用的开发中的过程管理,以及所生产资源的管理技术。
本书将以面向复用的需求建模方法和技术为题展开,全书共分5个部分。
第1部分“领域工程概述”包括第1章和第2章,主题是面向复用的需求的基本概念。第1章主要介绍传统软件开发过程中与需求相关的一系列活动,包括需求的捕获、分析、规约、确认和管理等; 第2章则对系统化地生产可复用资产的领域工程技术的起源和背景、相关概念、关键问题等方面进行了概略的介绍。
第2部分“领域工程方法”由第3~第6章组成,分别介绍4种具有代表性的领域工程方法: 面向特征领域分析方法(FODA); 面向特征的复用方法(FORM); 领域特定的软件体系结构方法(DSSA); 青鸟领域工程方法。
第3部分“面向特征的领域建模方法(FODM)”主要介绍北京大学软件所提出的一种领域工程方法。此部分由3章组成,其中,第7章介绍FODM面向特征的领域分析方法; 第8章介绍FODM以特征为驱动的体系结构设计方法; 第9章介绍一个支持FODM领域分析方法的软件工具。
第4部分“基于UML构件规约的需求建模”包括第10章~第12章,其中第10章讲述UML2.0支持的构件模型及规约; 第11章描述如何基于UML构件规约进行需求建模; 第12章介绍一种面向构件的建模工具。
第5部分“面向复用的需求建模实践”主要以若干实例为主线来演示第4部分所描述的FODM方法。其中第13章和第14章分别针对文档编辑器和网上商店领域进行需求建模实践,并在此基础上基于特征进行体系结构的设计; 第15章~第17章则依次针对*******系统、银行信贷系统以及中间件领域进行相应的需求建模,对应的体系结构设计则在本丛书的《构件化软件的设计与实现》中予以阐述。
本书在编写过程中参考了大量的文献。我们也尽可能地将这些文献列于书后。但对于因疏漏而未能列出的参考文献,在此表达深刻的歉意。同时也对所有文献的作者们表示诚挚的感谢。由于时间仓促,加之笔者水平所限,书中难免有不妥或错误之处,敬请读者不吝赐教。
另外,本书受到**863计划(No.2006AA01Z156)和**自然科学基金(No.60528006,60703065)等项目的资助,在此一并表示感谢。