杨帆
摘要:软件产品线是一种面向特定领域的大规模、大粒度的软件复用技术,目前已被软件开发人员普遍接受。基于软件产品线的需求分析是产品线技术研究领域的一个关键问题。通过对软件产品线的需求进行类型分解,并在此基础上对需求形式化表示;通过分析需求的相似性,提出用FR-NFR矩阵模型来描述需求,并基于FR-NFR矩阵来度量需求差异。差异度量的最终目的在于确保复用质量的同时,提高现有核心资产的复用率和为产品线的演化提供支持。
关键词:软件产品线;需求形式化表示;FR-NFR矩阵;差异度量
中图分类号:TP311 文献标识码:A 文章编号:1674-1161(2014)11-0040-03
软件产品线是一组软件密集的系统,共享一个公共的、受管理的特征集,满足一个特定的市场阶段或任务的特别需要,并且是一种规定的方式,从一组公共核心资产开发出来的。随着人们对产品线技术认识的不断发展,这种大粒度、大规模的软件开发方法也不断被接受和使用。同一领域的产品,其开发过程中包含了大量的相似性,这就为在开发过程中使用复用技术提供了可能。需求分析作为软件产品线开发的一个重要部分,其分析的合理性及正确性直接影响后续工作的开展及质量。因此,对需求共性和特性的分析,对需求的形式化表示,以及如何度量需求之间的差异成为软件产品线技术研究的重点。
1 软件产品线需求分析
1.1 软件需求分类
需求作为一个人为术语,在软件行业中的使用可能很不一致。有时需求被视为对系统应该提供的服务或对系统的约束的一个高层次抽象描述;而另一种极端情况,它被定义为是对系统功能的详细的、用数学方法的形式化描述。因此,可以根据对象的不同,从两个方面来描述软件需求:1) 用户需求是用自然语言加图表的形式给出关于系统需要提供哪些服务,以及系统操作受到哪些约束的声明。2) 系统需求是详细给出系统将要提供的服务以及系统所受到的约束。
从这2个定义可以看出,对于用户来说,软件需求是用户对系统的要求;而对于系统来说,软件需求是系统对用户要求的一种满足反馈。用户的需求是概括性的、非结构化的;系统的需求是详细的,结构化的。用户需求和系统需求都包括功能需求、非功能需求和领域需求3个部分。其中,功能需求包括对系统应该提供的服务、如何对输入做出反应,以及系统在特定条件下的行为的描述;非功能需求是对系统提供的服务或功能给出的约束;领域需求是来自系统的应用领域的需求,反应了该领域的特点。
1.2 软件产品线需求分析过程
软件产品线需求的分析过程对应着软件产品线工程。因此,该过程可以分为面向产品线的领域需求过程,以及面向产品线中某个具体产品的应用需求过程。
领域需求过程的参与者包括领域专家和分析人员。其过程是确定需求范围,以及在产品线范围定义的基础上建立面向整个产品线的需求模型,找出产品线中所有产品的共性和可变性,形成整个产品线可复用的需求核心资产库。应用需求过程的参与者包括用户和分析人员,其过程是根据具体产品的需求模型,获得最后的需求规格说明书。
领域需求过程区分领域内产品的共性和可变性,将来自系统应用领域的需求分离出来,这些需求带有系统的共性,每个产品都要符合这些共性需求的约束,因此对这类需求差异分析的意义不大。本文的需求差异分析主要是针对应用需求过程中用户提出的功能和非功能需求。
2 需求形式化表示
用户需求是由软件产品的使用者提供的,因此不可能使用任何实现模型来描述,而只能用自然语言、图表或者直观的图形来描述,易现描述不够清楚、需求混乱和需求混合的问题。将用户需求系统化、结构化是需求形式化表示的基础,通过类型分解法可以直观的体现需求之间的相似性。
2.1 需求类型分解法
由于用户需求是概括性的、非结构的,而系统需求是详细的、结构的。因此,如何将用户需求转变成开发过程中使用的系统需求是该分解方法的重点。需求类型分解法的具体步骤为:
1) 操作:用户通过自然语言或者图形语言描述自己所需产品的需求。
2) 规约:该过程所使用的自然语言和图像语言必须是用户和系统分析人员都可接受、可理解的、唯一性可确定的语言
3) 操作:需求分析人员得到用户需求之后,将其分解成用户功能需求和用户非功能需求,并将分解后的结果返回给用户进行新一轮的确认。
4) 规约:将分解结果返回给用户进行再确认的同时,附带用户可理解的功能分解说明。
5) 操作:在反复确认之后,需求分析人员将用户的功能需求分解成系统的功能需求,将用户的非功能需求分解成系统的非功能需求。
6) 规约:将用户需求细化成若干项系统需求,每项系统需求要求具有原子性和相互正交性,即每一项系统需求有且只有一个功能点,并且彼此间不相同。
如图1所示,这个过程的参与者只有用户和需求分析人员。从图中可以看到,需求分解的过程就是一个从概括到详细,从非结构到结构的过程。将用户需求系统化,是需求形式化表示的基础。
2.2 FR-NFR矩阵模型
通过类型分解法,可以将用户需求细分为若干项系统功能需求(Function Requirement,FR)和若干项系统非功能(Non-Function Requirement,NFR)。这是FR-NFR矩阵的两个重要组成元素。
FR-NFR矩阵是一个二维矩阵,其中功能需求(FR)作为矩阵的横坐标,非功能需求(NFR)作为矩阵的纵坐标。以该矩阵为模型,矩阵内部的元素可以有两种表现形式:一种是数值;一种是逻辑值。因此FR-NFR矩阵又可以分为数值矩阵和逻辑矩阵。
定义1:数值矩阵用V表示,是可度量的二维需求集合。用横轴表示功能需求,纵轴表示非功能需求,其中每个元素vij(i为功能需求,j为非功能需求)表示一个功能和非功能的数值映射,其值表示需求的具体参数,其中vij为集合R的元素。
定义2:逻辑矩阵用L表示,是不可度量的二维需求集合。用横轴表示功能需求,纵轴表示非功能需求,其中每个元素lpq(p为功能需求,q为非功能需求)表示一个功能和非功能的逻辑映射,取值范围是(0,1),其中0表示功能和非功能不相关,1表示功能和非功能相关。
由前面的规定可知,需求在分解的时候要遵循原子性,即每个需求只能唯一对应一个功能,所以需求的复用率提高也对应着构件复用率的提高。
3 差别度量
由于每个用户需求都可以形式化的表示成FR-NFR矩阵。所以,需求的差异度量可以分为可量化的数值差异度量和非可量化的逻辑差异度量。
可量化的数值差异度量对应数值矩阵,需求之间的差别可以直观的通过矩阵自动或半自动的比较出来。例如每秒钟处理的事务、事件响应时间、无效的概率、目标系统数、提示画面数目等。
非可量化的差异度量对应逻辑矩阵,需求之间的差别可以通过需求间映射的“存在”或“不存在”来初步体现,接下来的工作需要具体分析人员来人为规定差别的度量形式,具体情况具体分析。例如是否需要可维护性,以及如何定义可维护性等。
由此可见,基于FR-NFR矩阵的差别度量方法,在可量化的差异度量方面做到了部分自动化,而在非可量化的差异度量方面,虽然还需要需求分析人员的参与,但逻辑矩阵的使用缩减了差别比较的范围,减少了工作量。
4 需求差异度量模型
在求得需求分解模型和需求形式化表示模型之后,可以通过建立它们差别度量和验证机制之间的逻辑顺序关系来描述需求差异度量模型。如图3所示,模型分为4个主要的模块:用户需求定义、需求形式化、差异度量和验证机制。
5 对产品线演化的支持及验证
产品线演化是只产品线受内部或外部影响,随着时间的推移,朝着特定的方向累积变化,在演化的同时,一切不适应演化的产品线资产都要随之改变或更新。以FR-NFR矩阵为基础的差异度量机制,很好的支持了产品线演化。为进行差异比较,把需求原子化,在演化的过程中,降低了资产相互之间的耦合度,提高了复用率的同时,也降低了不适当演化的风险。
6 结语
基于FR-NFR矩阵的需求差异分析,将概括性的用户需求映射到具体的模块或构件上,在简化需求差异比较的同时,增加了需求和系统构件的可复用比率,减少了由于需求定义不准确而造成的出错风险,降低了分析成本,软件产品线演化技术提供支持。
参考文献
[1] 杨芙清,梅宏,黄罡,等.构件化软件设计与实现[M].北京:清华大学出版社,2008.
[2] SOMMERVILLE,I.Software Engineering Eighth Edition[M].London: Pearson Education, 2007.
[3] 唐文忠,李剑.基于产品线需求分析的过程改进研究[J].计算机技术与发展,2008.7,18(7):104-108.
[4] 朱亚峰,姚郑.软件产品线需求过程和方法浅论[J].计算机工程与设计,2008.8,29(16):4215-4219.
[5] D.MCGREGOR, J. The Evolution of Product Line Assets[R].PA:Software Engineering Institute, Carnegie Mellon University,2003:
1-3.