摘 要: 随着社会分工越来越细,面向信息系统软件研发的企业和部门越来越多地专注于特定领域的产品开发,并在企业和部门资产库中积累了大量的基于单个项目的软件需求。目前,这些需求像一个个孤立的“烟囱”,很难用于相同领域后续项目的开发,造成了企业财富和成果的大量浪费。分析了领域需求与项目需求的关系,描述了领域需求库的构成与建立过程、领域需求库管理方法,用于指导系统化软件需求复用,为企业领域工程工作的开展和研究奠定基础。
关键词: 领域需求; 领域需求库
随着信息技术的飞速发展,社会分工越来越细,面向信息系统软件研发的企业和部门越来越多地专注于特定领域的产品开发。在产品开发过程中,这些企业和部门积累了大量的基于单个项目的软件需求,并已经进行了条目化管理。目前,这些项目需求通常分散在各个项目的需求库和需求文档中,像一个个孤立的“烟囱”,很难用于相同领域后续项目的开发。这种现状,一方面,导致了企业财富和成果的大量浪费;另一方面,新的项目由于无法充分复用已有的需求进行需求分析,最终,往往无法形成真正满足用户需求的信息系统产品。
解决上述问题的一个有效途径就是通过对项目需求逐一进行分析、整合,建立领域需求库,从而达到可以对需求进行系统化复用(Systematic Reuse)的目的。这必将进一步提高产品质量和生产效率,缓解日益严重的软件危机,同时生产和提供能够满足特定领域用户需求的信息系统产品。
基于领域需求库,新的项目的需求分析将不再是从零开始,而是建立在对企业资产大量复用的基础上。
本文分析了领域需求与项目需求的关系,描述了领域需求库的构成与建立过程、领域需求库管理方法,用于指导信息系统软件的需求分析与需求复用,为企业领域工程工作的开展和研究奠定基础。
1 领域需求概述
1.1几个定义
领域:在软件工程环境中,领域是指一组具有相似或相近软件需求的应用系统所覆盖的功能、问题、问题解决方案或知识区域。领域可分为垂直领域和水平领域,其中,垂直领域是指具有相似业务需求的一组相似应用系统所覆盖的业务区域,如财务管理系统、ERP系统等;水平领域是指根据应用系统内部模块的功能性分类而得到的相似问题空间, 如数据库系统、GUI动态库等[1]。本文中的领域特指垂直领域。
领域需求:对领域中若干典型项目的需求进行分析,考虑预期的需求变化、技术演化、限制条件等因素,确定恰当的领域范围,识别领域的共性特征和变化特征,获取一组具有足够可复用性的需求,称为领域需求。
领域需求库:将获取的领域需求条目化和文档化,形成领域需求库,提供系统化需求复用。
1.2 领域需求特点
领域需求是指领域内所有项目的共有需求,而不是某个系统或项目的个别需求,具有稳定、演化、广泛和可复用等特点[2]:(1)稳定。领域的共性需求是在一定时期内稳定不变的。(2)演化。随着领域的不断发展,会产生许多新的需求,这些需求经过在多个项目中不断地付诸实践,有可能演化为共性需求。(3)广泛。领域需求存在于类型广泛的多个项目或系统中。(4)可复用。领域需求是领域内所有项目共性需求的高度概括,具有较高的可复用性。
1.3 领域需求与项目需求
领域需求与项目需求的关系可以概括为:领域需求来源于领域内所有项目的需求,是在项目需求之上高度抽象的共性的需求;领域需求是构建项目需求的可复用构件,并随着项目需求的发展而不断演化;领域需求可为领域中的新项目提供复用,同时,领域中的项目需求也可以演化为领域需求;领域需求涵盖了所有项目,某一个具体的项目需求无法代表领域需求。领域需求与项目需求的关系如图1所示。

2 领域需求库描述模式
2.1 领域需求库输入
为了建立可复用领域需求,使用领域需求库作为需求容器。通过对哪些“原料”进行加工才能形成装入这个容器的产品呢?既然领域需求来源于领域内所有项目的需求,那么领域需求库的主要输入也就是各个项目的需求分析活动产生的需求资源,主要包括项目需求文档、项目需求库表等。
2.2 领域需求库文档结构
本节对领域需求库这个容器中的产品进行定义,这些产品帮助定义可复用软件需求。能够提供系统化复用的领域需求库需要囊括用户需求和产品需求,这些需求通过一系列文档来描述,而且文档之间具有纵向的层次关系和横向的关联关系。对每类需求文档需要横向分析文档的构成要素及要素间的相互关系,明确领域需求库文档应包含哪些信息和如何组织这些信息。参考项目需求文档结构,结合领域需求库实际需要,定义如下的领域需求库文档结构,如图2所示。

如图2所示,领域需求库文档按纵向层次分为用户需求文档和产品需求文档两类,这两类文档互相关联以保持其一致性。用户需求文档由一张用户需求库表和若干个用户故事组成,前者是用户需求的条目化列表,类似需求概览,用户可以从中得到一些需求的基本信息,而每一条需求的详细信息在对应的用户故事中加以描述;产品需求文档由一张产品需求库表和若干个用例阐述组成,同样地,前者包含一些产品需求的基本信息,而每一条需求的详细信息在对应的用例阐述中加以描述。
2.3 领域需求库建立过程
首先建立用户需求库表,对相同领域的多个项目的条目化需求库表进行分析、整合、提炼和抽象,对符合领域需求特点的需求按信息需求、活动需求、未来需求进行分类,建立起领域用户需求库表,如表1所示。

从项目的需求库表中已经能够得到除需求阐述之外的多数信息,但没有需求阐述的领域需求几乎是没有多少复用价值的。需求阐述主要从项目的需求文档中收集素材。为了克服和避免需求描述注意力过于集中在软件设计和实现的问题上,而忽略了用户真正关心的主题(即软件要做什么,实现哪些功能的问题),引入分布式敏捷开发中所采用的“用户故事”方法进行用户需求阐述。
关于用户故事的编写,没有一定的模板可以遵循,每个用户故事代表一个独立的功能。一个好的用户故事应该具备6种特性[3],这6种特性的单词首字母缩写为INVEST,含义分别如下:I—Independent,独立:可以独立实现。N—Negotiable,可协商:有利于与用户协商。V—Valuable,有价值:必须对最终用户有可感知到的价值,即必须实现的是端到端的业务。E—Estimable,大小可估计:能够大致估计出一个范围,足以进行实现的计划安排。S-Sized Appropriate,大小合适:保证大小可评估。T—Testable,可验证:可测试性永远是好的需求所具备的特性之一。
作为参考,可以学习Connextra公司,通过使用一个简略模板将角色融入用户故事,每个故事使用下面的格式编写:
我作为(角色),想要(功能),以此(商业价值)。
例:作为一个管理员,可以批量创建用户,以便快捷地导入已经有的用户数据。
类似地,对多个项目的需求库表进行分析、整合、提炼和抽象,对符合领域需求特点的需求,按功能需求、性能需求、接口需求对需求进行分类,并与领域用户需求建立关联,建立起领域产品需求库表,如表2所示。

产品需求除了具有与用户沟通的作用外,还是分析人员与设计和编码人员之间的桥梁,为此,采用面向对象系统分析中的用例阐述来描述产品需求。用例阐述模板与示例[4]如图3所示。

3 领域需求库管理
类似于项目需求,领域需求也在不断演化与更新中,为保持领域需求库的新鲜可用,需要对领域需求库进行管理。对领域需求库进行管理的目的就是管理领域需求,以保持领域用户需求与产品需求、领域需求与项目需求的一致性。需求管理主要工作包括需求变更控制、需求双向追踪。
既然领域需求是依托项目需求建立的,一旦项目需求发生了变化,需要及时更新领域需求库,以反映需求的变迁和演化。需要注意的是,项目需求的变更并不一定必然引起领域需求变更,需要对项目需求变更进行仔细分析,判断是否是领域共性需求,由此决定是否变更领域需求。
为保持领域用户需求和产品需求的一致,需在领域需求库表中对这两种需求进行双向追踪,以保证用户需求与产品需求的良好对应和关联。
遵循本文的方法和步骤,已经建立了领域需求库,并对其进行了恰如其分的管理,实现了系统化的需求复用。以此为基础,现在已可以步入领域工程殿堂了,从可复用软件需求起步,进一步实现可复用软件体系架构,可复用软件设计,直到可复用软件代码。为了复用目的而设计的软件将为解决软件危机提供一条有效途径,帮助企业和部门提高生产效率,节约成本,同时提供高质量的满足用户需求的信息系统产品。
参考文献
[1] 林正奎,杨德礼.领域分析方法研究综述[J].计算机工程与设计,2006,27(4):593-596.
[2] 郭莹,杨美红,王筠,等. 面向服务的领域需求分析方法及模型研究[J]. 计算机应用,2009,29(12):131-134.
[3] COHN M. 用户故事与敏捷方法[M].石永超,张博超,译.北京:清华大学出版社,2013.
[4] 青润. 软件工程之全程建模实现[M]. 北京:电子工业出版社,2004.
