软件需求获取形式化的案例研究

2010-05-13 08:46邹盛荣,彭昱静,郭忠伟,刘春秋,周塔,卫丽,顾爱华
现代电子技术 2009年12期

邹盛荣,彭昱静,郭忠伟,刘春秋,周 塔,卫 丽,顾爱华

摘 要:软件需求获取是软件建模和分析的基础,传统的软件需求建模方法主要有2个重大的缺陷:一是非形式化的需求描述常导致需求的歧义性和不一致性,因而难以确认和验证;二是易变性。针对此问题,结合实例提出用UML(Unified Modeling Language)的用例驱动获取软件需求,并将得来的需求用形式化B方法的机器来表示需求,实现了软件需求的形式化。实践证明,用例驱动的软件需求获取可以有效地获取正确、合理的软件需求,加上用形式化B方法的需求描述,可以有效地避免上述两大缺陷。

关键词:需求获取;UML;用例驱动;B方法;形式化需求

中图分类号:TP309文献标识码:A

文章编号:1004-373X(2009)12-045-04

Case Study of Acquiring Formal Software Requirement

ZOU Shengrong,PENG Yujing,GUO Zhongwei,LIU Chunqiu,ZHOU Ta,WEI Li,GU Aihua

(Information Engineering College,Yangzhou University,Yangzhou,225009,China)

Abstract:Acquiring software requirement is the basis of software modeling and analysis,traditional software requirement modeling has two important defects:one is informal requirements description often leads toambiguity and inconsistency of requirements,so it is difficult to validate and verificate;and the other is variability.According to the above problems,this paper presents the use case driven analysis method of software requirements by Unitied Modeling Language(UML),and describes it by formal method,relizes formal software requirement.Practice proves that acquiring software requirement of use case driven can obtain effectively correct and reasonable software requirement,in addition to requirement description of formal B method.This method effectively avoids the above problems.

Keywords:requirement acquirement;UML;use case driven;B method;formal requirement

0 引 言

随着计算机技术的发展,软件规模日益庞大,软件开发也日益复杂。随之而来的问题是许多IT系统都无法实现期望,它们要么无法实现业务目标,要么无法有效支持用户任务,要么成本很难控制在预算之内。究其原因,相当多的软件失败是因为需求不明白或者不确定而致。自1991年J.Martin提出“需求工程”[1] 概念后,需求分析作为软件工程的一个重要阶段开始形成一门独立学科,称为需求工程。软件需求的重要性正在不断提高,因为它是用户预先知道将以什么样的成本,获得什么样产品的途径。

需求工程在软件系统开发中的重要性已不容置疑。需求的获取是需求工程的主体,是软件系统开发过程中最为困难,也是最为重要的部分。只有真正满足用户需求的软件产品才能为用户接受,不能满足用户需求的产品,不管采用了多么先进的技术,对用户来说都是毫无用处的。根据Leffingwell 在1997 年的研究,软件项目中40%~60%的问题都是在需求的获取和分析阶段埋下了祸根[2]。在过去几年,文献主要强调需求建模和规约方法,现在重点转移到了软件需求获取的有效方法。

传统的需求分析过程通常采用数据流图等方式来描述系统的逻辑模型。由于这些非形式化以及半形式化方法所需求的描述都未给出数学意义上严格的语法和语义说明,因此需求阶段建立的模型或多或少的带有不精确性、不完全性和不一致性。形式化方法(Formal Methods)是全面系统地使用基于数学的语言、技术和工具,精确地说明、开发和验证的软件系统,使用形式化方法描述的规约具有规范性和无二义性,而且形式化语言是一种机器可处理的描述语言,可以保证软件复用自动化成为可能。

1 用例驱动的需求获取

1.1 用例模型

用例模型是系统既定功能和系统环境的模型,它可以作为客户和开发人员之间的契约。系统建模有许多种方法,每种建模方法,均可满足不同的目的。然而,用例模型最重要的作用是将系统行为传达给客户或最终用户,因此模型必须易于理解。用例模型驱动了需求分析之后开发工作的各个阶段和UML的各个模型。

用例模型采用若干个用例图描述。用例图是一个参与者和用例以及另外的定义和说明的可视化表示。用例图不仅是一个图,而且是系统想要的行为的全文档化模型[3-5]。

1.2 用例

用例表示一个完整的给用户传值的功能性单元。用例是系统和用户之间的动作序列,而不是逐条的个体需求。显著的用例改进了这一问题。现在,需求是用例的形式,需求以顺序的方式提供系统的行为,以相关的替换和异常信息结束。用例只说明了系统要做什么,而且在设计上领先,因为它对于收集需求和开始设计过程都非常便利。

1.3 参与者

参与者和用例从功能需求的分析中就确定了,功能需求具体化为用例,用例通过给参与者提供某个值的结果来满足功能需求。业务分析员是选择首先表识参与者,然后再表识用例或者相反。

1.4 用例关系

用例描述的是系统外部可见的行为,是系统为某一个或几个参与者提供的一段完整服务[4]。从原则上来讲,用例之间都是并列的,它们之间并不存在包含的从属关系,但是从保证用例模型的可维护性和一致性角度来看,可以在用例之间抽象出包含(include)、扩展(extend)和泛化 (generalization)这几种关系。这几种关系都是从现有的用例中抽取出公共的那部分信息,然后通过不同的方法重用这部分公共信息,以减少模型维护的工作量。

1.5 案例分析

这里分析一个体液免疫的实例。体液免疫是由B细胞介导的免疫应答。体液免疫可由胸腺依懒性抗原(TD)和非胸腺依懒性抗原(TI)诱发。这里讨论由TD诱发的体液免疫。

TD诱发的体液免疫必须要有抗原递呈细胞APC(Antigen Presenting Cell) 和辅助T细胞(TH细胞)。TD诱发的体液免疫过程大致如下:当抗原侵入机体内时,抗原递呈细胞识别抗原,并处理和递呈抗原状决定族给辅助T细胞;辅助T细胞识别抗原状决定族,然后把抗原状决定族传递给B细胞,辅助T细胞自身活化,增殖分化成效应T细胞;B细胞接受来自辅助T细胞的抗原状决定族,活化并增殖分化为效应B细胞和记忆细胞;效应B细胞产生抗体,当同种抗原再次进入机体时,记忆B细胞便分化成大量的效应B细胞,进而使抗体与抗原结合,抗体将抗原杀死[6]。

分析上述体液免疫的过程,可以把该软件系统需要实现的功能归结为以下几个问题:

(1)抗原入侵机体;

(2) 抗原递呈细胞摄取抗原;

(3) 抗原递呈细胞处理抗原;

(4) 抗原递呈细胞递呈抗原状决定族给辅助T细胞;

(5) 辅助T细胞识别来自抗原递呈细胞传递的抗原;

(6) 辅助T细胞传递抗原决定簇给B细胞;

(7) 辅助T细胞增殖、分化形成效应T细胞;

(8) B细胞接受辅助T细胞的抗原决定簇;

(9) B细胞增殖、分化形成记忆B细胞;

(10) B细胞增殖、分化形成效应B细胞;

(11) 效应B细胞产生抗体;

(12) 记忆B细胞记忆抗原;

(13)同一种抗原再次进入B机体,记忆B细胞增殖分化成大量的效应B细胞;

(14) 抗体和抗原结合杀灭抗原。

根据上述这些问题,可以把所涉及的操作归结为:入侵、识别、摄取、处理、传递、活化、增殖分化、产生、记忆、结合并杀灭这几个方面。根据这些分析结果,可以创建以下用例:入侵(Intrusion);摄取(Inhale);处理(Processing);传递(Present);活化(Activation);增殖分化(Proliferation and Differentiation);产生(Produce);记忆(Memory);识别(Recognition);结合并杀灭(Binding and Kill)。

根据上述分析,系统的参与者分别为抗原递呈细胞(APC);辅助T细胞(TH);B细胞(B);抗原(antigen);记忆B细胞(memory B cell);效应B细胞(effect B cell);抗体(antibody)。

根据上述分析,可以画出图1所示的体液免疫用例图。

图1 体液免疫用例图

这里采用顺序图建立对象间的动态交互的模型。

由TD介导的体液免疫过程已在上面详细描述,由于篇幅限制,体液免疫的顺序图不再列出,但是它的形式化描述将在下面介绍。

2 形式化需求

2.1 形式化B方法的介绍

B方法是形式化方法之一。B方法以规格说明语言的研究为背景,在引入一些面向对象机制等特点的同时,保留了语言的优点。B方法使用相对简单且运用人们熟悉的符号表示法广义代换表达状态的转换,从软件的规格说明到编码的形成是一致的形式描述,使程序和程序的规格说明处于统一的数学框架之下,以一种基于集合论的符号表示法来书写,减少了出现语义错误的可能性。这种数学框架是通过谓词变换和扩展的最弱前置条件为前提的[6,7]。

B包含一种AMN的结构化机制,AMN是B方法中的一种基本封装机制,非常接近人们在程序设计中所熟知的一些概念,如类(SIMULA)、抽象数据结构(CLUE)、模块(MODULA-2)、包(ADA)、对象(EIFFEL)等概念[8,9]。

AMN中有赋值和条件语句,也有前置条件、多重赋值、约束选择、卫、无约束选择。AMN中没有定序和循环,理解AMN的根据是状态及改变状态的操作,即包括静态和动态分析。静态对应状态的定义,动态对应其操作[10]。

下面通过论述的实例来获得体液免疫形式化B的需求。

2.2 用B形式化需求

根据上述用例图,定义如下转换规则[11]:

(1) 所有的参与者用枚举集合来表示,并把相应的变量、不变式等封装在参与者的机器里;

(2) 所有的用例用枚举集合来表示,并把相应的变量、不变式等封装在参与者的机器里;

(3) 参与者与用例的关联关系用二元关系组成的枚举集合来表示,并把相应的变量、不变式等封装在关联关系的机器里。

因为在本例里,没有参与者与用例的关联关系,所以不在此列出,方法类似规则(2)。根据以上规则,得出参与者与用例关联关系的机器如下:

MACHINE

Association

SETS

ACTOR={Antigen,antibody,TH,B,APC,effect T,effect B,memory B};

USECASE={instrusion,present,processing,recognition,inhale,activation,proliferate,differentiate,producce,memory,bind and kill};

ASSOCIATION={(Antigen,intrusion),(APC,inhale),(APC,present)(APC,processing),(TH,recognition),(TH,present),(TH,activation),(TH,proliferate),(TH,differentiate),(B,recognition),(B,activation ),(B,proliferate ),(B,differentiate ),(effect B,produce),(memory B,memory),(memory B,proliferate),(memory B,differentiate),(antibody,bind and kill)}

VIRIABLES

actor,usecase,association

INVARIANT

actor∈ACTOR∧

usecase∈USECASE∧

association∈ASSOCIATION

INITIALIZATION

actor,usecase,association:={},{},{}

OPERATIONS

END

这样就可以把参与者与用例之间的关系用形式化B的语言表示出来,而参与者机器和用例机器在这里不一一列出。

下面再来看如何把顺序图转换成形式化B的语言,定义以下几个规则:

把顺序图中的对象用枚举集合来表示;

把顺序图中对象之间的操作名用枚举集合来表示;

把顺序图中对象之间的操作顺序用枚举集合来表示;

定义常量并对其设置前置条件;

定义变量并对变量设置不变式;

根据转换规则,得到顺序图形式化B的机器表示形式如下:

MACHINE

ImmuneResponse

SETS

OBJECT={ Antigen,antibody,TH,B,APC,effect T,effect B,memory B };

MESSAGE={ instrusion,present,processing,recognition,inhale,activation,proliferate,differentiate,producce,memory,bind and kill };

MSGID={m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16}

CONSTANTS

ID_max

PROPERIES

ID_max∈NAT1

VARIABLES

object,msgid,msg,sequence

INVARIANT

object∈OBJECT∧msg∈object→MESSAGE∧

msgid∈object→MSGID∧

sequence∈sequence(MSGID)

INITIALIZATION

object,msg,msgid,sequence:= {},{},{},{}

OPERATIONS

Sequence(i1)

PRE i1∈ MESSAGE→msgid∧ i1>=msgid

THEN sequence:=sequence(msgid)

END

END

这里得到了形式化B的规格说明,避免非形式化需求描述的歧义性,并且形式化的规则说明易于验证前后的一致性等问题。

3 结 语

采用基于用例建模的方法进行需求获取。该方法的主要好处是以用户为中心,用例方法可以使用户更清楚地认识到新系统允许他们做什么。把用例建模获取的需求变成形式化B的描述方法,形式化的需求具有无歧义、精确性等优点,能提高规格说明的正确性。下一步的工作就是用B方法的证明技术来验证机器,并将其精化、程序实现。

参考文献

[1]Zave P.Classification of Research Efforts in Requirements Engineering[J].ACM Computing Surveys,1997,29(4):315-321.

[2]WIegers K E.软件需求[M].陆莉娜,译.北京:机械工业出版社,2000.

[3]F Martin.UML精粹[M].2版.徐家福,译.北京:清华大学出版社,2002.

[4]汤小康,王志刚,曹步文.UML用例图的Z形式规范[J].计算机与现代化,2006(11):12-13,16.

[5]范晓平.UML建模实例详解[M].北京:清华大学出版社,2005.

[6]陈慰峰.医学免疫学[M].4版.北京:人民卫生出版社,2007.

[7]裘宗燕.B方法[M].北京:电子工业出版社,2004.

[8]邹盛荣,阳雪平,郭峰,等.免疫因子网络的Immune-B模型设计[J].吉首大学学报:自然科学版,2006,27(3):27-32.

[9]Zou Shengrong.Modeling Distributed Algorithm Using B[A].Proceeding of the International Grid and Cooperative Computing Conference[C].2004:683-689.

[10]张志锋,徐洁,邓璐娟,等.基于B的UML形式化需求分析[J].计算机技术与发展,2007,17(8):133-135.

[11]侯丽珍,蔡小娟,邹恒明.软件需求的形式化转换模型[J].计算机工程,2007,33(5):73-75.