通信软件可重用部件库研究
2012-09-26廖梦怡何伟娜李中华
廖梦怡,何伟娜,李中华
(1.平顶山学院 河南 平顶山 467000;2.郑州大学 河南 郑州 450001)
在某种程度上,软件工程就是用一些支持即插即用软件部件来组成应用程序的一个过程,部件技术就是从一个部件库中选择一些部件,通过这些部件附带的一些它能控制的属性和行为与其他部件进行联系,通过组装使这些部件组成一个新的应用软件。
随着软件技术的快速发展,基于部件开发的软件工程在建造复杂软件中越来越发挥着重要的作用。目前的软件开发技术变得越来越复杂,一些新的应用程序领域的需要也在不断的增加,基于部件的软件工程由于自身的低维护费用和软件产品的可靠性,成为实现这些高科技产品的一门关键技术。
1 通信软件形式化部件设计
部件的重用是部件开发的主要目标,开发代价和重用效益是其主要的设计标准,它们直接决定了软件开发的成本和效益目标,是确定部件开发是否成功的主要标准,文中分别讨论这两种标准,以达到部件开发的最优化。
1.1 通信协议部件分层设计方法
部件的可用性是指该部件经常被用到,并通过该部件支持的重用领域及其功能来评鉴该部件的可用性。可用性用来有效评估部件开发的代价。
1)基于部件使用效益的分析
在一个系统领域部件开发过程中,对于要开发的部件必须考虑它的规模的大小,部件的类型,并参照它所处的支撑环境来定义所开发部件所处的层次。比如,要对一个协议进行开发,那它很可能就是一个系统部件的开发,如果使用的只是它的一个框架,可以只做系统层次上的设计和开发;而对于协议中的一个实体或者服务,则可以使用较低一级的部件进行开发,这样就可以大大减少工作量,减少开发冗余,增加部件开发和使用的效率[1]。
2)基于效益和SDL语言的分层设计方法
对部件的规模和类型进行评估,对部件进行分层开发,可以提高部件开发和使用的效率,分层就是采用对部件进行不同级别的考虑和开发而提高部件开发效益的一种方法。
在通信软件开发中广泛使用的形式化描述语言SDL也采用了分层的描述体制,SDL在协议描述过程中从系统结构上把协议分为4个层次,即:系统级、功能级、进程级、过程级,它们是依次包含关系[2]。
在通信软件部件开发过程中,将此两者结合起来,文中提出一种新的设计方法,即基于效益和SDL语言的分层设计方法,在部件开发的过程中,把部件开发的级别也划分为四级,如图1所示。
图1 部件开发等级Fig.1 Development level of component
在经过SDL语言形式化描述之后,被描述的各个部分就可以被看做同等级别的部件而进行开发,它在逻辑结构上有了国际统一的标准指导,保证了部件开发的准确性,还可以提高协议部件设计和开发的效益。
1.2 通信软件部件分级设计方法
重用代价是部件开发的一个重要标准,如何减少部件重用的代价,成为部件开发成功与否的一个关键问题。分级设计方法主要是通过对需要开发的部件所处某一领域及部件模型的分析和分解,通过随开发应用的时间需求长时期提高部件开发的实例冗余来减少可变特征部分不必要的开发来减少重用代价的。
1)部件重用代价的分析
在一个系统里用原有部件重用进行合成过程中,原来的部件重用有3种形式:
直接重用,不经过任何的修改;
经过修改之后适合新的系统;
没有部件可以重用,需要完全重新开发。
这3种形式组成了新的软件需要的所有部分,它们的设计和开发也就组成了部件库重用代价的全部。
第3种形式是一个新的部件的设计过程,在它的设计和开发之后,重用它的时候,它也可以分为前两种形式,因此暂不考虑第3种形式。可以考虑开发一个部件,它的重用只包括前两种形式。根据这两种形式,类似的可以把一个部件分为两个部分:固定部分和可变部分,其中固定部分就是可以被直接重用的部分,可变部分就是可以修改或者认为在重用过程中可取可不取的部分。如图2所示。
图2 部件开发结构Fig.2 Development of components structure
2)基于重用代价的分级设计方法
部件重用是部件开发的最大动力,是一个部件库开发的直接价值体现。因此部件重用的花费也就成为部件开发的一个最大指标。根据以上部件重用代价的分析,为了降低部件开发的成本,实现部件开发的可用性,提出一种基于特征分解的分级设计方法[3]。
分级的方法是基于一个部件库的方法,如图3所示:在开发一个新的部件模型或者具有新的特征的实例时,不再是开发和设计该部件的全部特征,而是要做以下两方面的工作。
分解新部件,找出同类部件和部件模型中相似的部分,这部分可以直接参照部件库其它部分的设计,不需要重复设计和开发;
找出与其他个别部件公共的部分,把它变成新的次级固定部分,进行设计和开发,补充部件库,不但提供该部件的使用,还为以后该部件模型中该特征的重用提供设计以节省重用费用。
经过以上2个步骤,不但该部件的开发达到了开发代价的最小化,还为以后同类型部件的设计和开发提供了大量的相似部分特征。
图3 部件特征分解Fig.3 Decomposition of components feature
基于代价重用最小化的部件分级设计方法可以使用以下的步骤:
①确定设计的部件领域,部件模型及重用的领域;
②对部件模型进行分析,划分为固定部分和可变部分,固定部分就是在该领域对所有重用该模型的部件都需要的部分,可变部分是该领域该类部件有差异的部分或只有个别部件有的部分;
③把固定部分和可变部分转化为该部件模型的特征,这样一个部件的设计和开发就可以看做该部件特征集合的设计和开发。对部件进行验证,看是否符合部件的特征、固定特征是否是该类部件的公共特征及可变部分是否可以提取出该类部件的共有特征;
④ 对可变特征进行细化分解,找出共有特征,把它变成该类部件的次级固定特征;
⑤对部件的固定特征进行设计和开发,对可变部分进行设计,在开发的过程中通过该部件特征的实例化对固定特征可变特征进行补充,对使用较多的部件特征也可以进行开发。尽量把可变部分转化为固定部分。
⑥基于重用代价的分级设计方法通过整体上对一个部件模型的分解,结合该类部件的重用领域,对该部件划分为固定特征和可变特征的方法来降低其开发的成本。这种方法实际上是通过模型部件中该部件的设计分解和实例化开发补充两个步骤来降低其重用代价的。
1.3 通信软件形式化部件设计方法
在通信软件部件设计和开发的过程中,对于一个部件的开发是没有意义的,开发部件的目的就是为了提高协议或软件开发的效率,开发部件就是在某一领域组建一个部件库或者说一个部件集合,以备软件开发中的重用,从而提高软件开发的效率。开发部件都是基于开发一类或一个领域的一个部件库而言的,因此前面所提出的分层和分级方法是一个部件的设计方法,其实也是一个部件库的设计开发过程。因此说部件的开发和部件库的开发是有很大联系的。
采用基于部件库开发的思路,结合分层和分级的方法,分别在横(分级)竖(分层)两个方向上进行考虑,提出一种新的二元设计方法,来满足部件设计的目的。其步骤如下。
①当给出一个协议时或其某一部分时,结合原来通信协议部件库中原有部件的描述特征,用SDL对其进行描述,根据分层的机制确定它的类型,并进行形式化的描述和设计。
②对要描述的部件利用分级方法进行特征值分解,集合部件库中其他部件的特征进行适度开发,更新部件库。
采用这种方法具有以下优点:
在第一步中进行的形式化描述可以保证部件开发的准确性,无二义性等特征,从整体上利用SDL语言提供了一种国际标准规范;
对部件的设计利用分层分级的方法,采用“协议归类,用则设计,不用保留,不断补充”的思路,极大的减少了部件开发的冗余,提高了部件开发和使用的效益。
在通信协议开发的过程中,采用系统的高效的方法不但保证了协议开发的准确性,也可以大大提高协议的效率。根据以上的分析,在分层分级的部件二元设计方法的基础上给出通信协议软件开发流程图,如图4所示。
图4 形式化部件开发方法Fig.4 Development method of formal component
①利用分层的概念定义基于部件开发的范围,内外环境,建立一个架构框架。部件开发的范围指部件开发后的使用范围,它对于部件功能的复杂性有重大影响。范围越大,部件开发考虑的因素就越多,部件重用组装产生的冗余就越多。怎样定义部件的适用范围,必须考虑其适用范围和开发复杂度及重用冗余的平衡问题。定义架构框架主要指技术框架,包括以下两部分[4]。
定义技术环境,主要包括开发语言、部件模型、执行环境、中间件及部件之间的互操作性等问题。
定义软件基础设施及开发标准,包括采用何种方法进行设计和标准化。对于通信协议部件,一般以RFC文档作为开发标准,采用形式化描述语言SDL对部件进行形式化描述和设计保证其正确性。
②对部件利用SDL语言进行形式化描述,结合部件库中原有部件的描述和设计来确定部件开发的级别和必要性,定义即将使用的部件模型。主要包括在当前部件开发的内外环境中,使用何种结构有利于该领域部件的交互及部件之间的交互,在通信协议部件的设计和开发上,一般采用分层的结构。
③利用分级的概念定义部件内部结构,包括部件的功能、业务,进行细分,利用特征值分解的方法确定固定部分和可变部分及其是否需要继续分为更小的部件,画出部件的功能明细图。
在通信协议部件开发的过程中,部件的内部结构主要包括部件具有的功能模块,部件提供的服务,部件接口等,它可以分为2个部分或根据需要进行更细致的划分。
列出部件的功能,利用形式化描述语言如有限状态机等画出其事务处理过程,详细描述通信过程的接口并给出确切的定义。
④评价部件设计和开发的适当性。对设计的部件进行技术可行性评估和效益代价评估,主要是部件开发的细化和部件使用的频繁化进行协调,原则上对不经常使用的部件,只设计主要功能和接口,在开发使用的过程中再进行细化,对于经常使用的部件进行详细的设计和开发,这样就既考虑了部件开发的效益问题也考虑了部件开发的使用问题。
⑤ 组建部件库,使用科学的方法管理部件库,对存在的部件进行更新和完善,对部件库进行补充和完善。
2 通信协议可重用部件库建立与管理
2.1 通信协议可重用部件库设计
部件库的设计有很多种方法,为了使结构更清晰、搜索更方便,在部件设计时在部件库组织中把部件分为3个部分:名称标记,关键字及简述,主体设计[5]。
1)在名称标记中,采用分级定义法。即对于部件名称标记采用一种规范,规范如下:
部件名称标记的组成有七部分组成,依次为:部件层次名称,协议名称,功能部件名称,进程部件名称,过程部件名称,注释,参数。其中注释写在[]内,参数写在()内,各部分用下划线连接,系统部件名称写在注释[]内,可以用来表明该部件能够使用的系统。
例如:fun_sip_ua_transaction_receive[ua_ua](msg),fun 表示部件层次为功能级,sip表示协议,ua表示功能部件名称,transaction表示进程部件名称,receive表示过程部件名称,ua_ua可以表示在端到端SIP系统中,msg是参数。
各个部分如果缺省(表示该级别通用)可用x代替。第一个参数(部件层次)不能缺省,当名称标记的7个部分不够时,从前向后依次确认,后面缺省默认为通用(即_x)。
例如:fun_sip_ua_transaction[]()是对于事务进程的所有功能而言的。
注释和参数可以缺省。
例如:fun_sip_ua_transaction_receive,表示该部件暂时不需要参数。
2)关键字及简述关键字主要是在部件使用时便于用户的选择及部件库的整合管理工作,对于用户寻找类似信息提供方便,部件库管理者则可以更方便对部件进行统计分类。
3)主体设计主要是部件的各种功能设计,包括主要功能设计、接口设计等。
2.2 通信协议可重用部件库建立与管理
1)部件库的建立及检索
依照上述的部件设计规范,把部件库建立起来,可以根据多重方式进行检索,在建立的部件库中,在设计时就潜在的提供了一种检索或查询的方法,就是基于部件命名标记的关键字检索方法,在部件库的管理中,根据部件命名标记中的七部分标示,可以设置成多条件查询,对使用者和管理者提供很多的方便。
另一种方法就是关键字和简述中进行关键字检索,找出含有关键字的所有部件,根据需要就行使用或修改[6]。
2)部件库的管理
对部件库的管理主要是需要一定的专业人员对部件库进行不断的更新和维护,用户在使用过程中总结出的经验和提出的意见对部件库的更新具有重要的作用,要保持一个部件库强大的功能,必须与时俱进,与不断的协议更新相同步。
3 结束语
文中首先探讨了通信协议部件开发的必要性,就软件开发中部件开发一般考虑的因素,结合通信协议部件的特征[7],提出通信协议部件开发应考虑的一些附加因素,分析了部件开发的代价和效益,结合形式化方法中的SDL描述语言,提出了一种新的部件设计概念,即分层和分级的方法;最后提出部件库设计的一种规范,并建立部件库。
[1]潘红艳,于全.用于通信网络协议开发的形式化方法[J].计算机工程,2004,30(2):129-130.
PAN Hong-yan,YU Quan.Formal method for the development of communication network protocols[J].Computer Engineering,2004,30(2):129-130.
[2]王颖,倪朝,艾波.SDL形式语义定义现状及其改进[J].通信学报,2000,21(4):75-79.
WANG Ying,NI Chao,AI Bo.Formal semantic definition of SDL[J].Journal of communication,2000,21(4):75-79.
[3]宋茂强.通信软件设计基础[M].北京:北京邮电大学出版社,2001.
[4]Katharine Whitehead.基于部件开发[M].北京:人民邮电出版社,2003.
[5]李腊元.通信协议形式化模型的研究[J].计算机学报,1998,21(5):419-427.
LI La-yuan.Research on formal models of communication protocols[J].Chinese Journal of computers,1998,21(5):419-427.
[6]Peter Maurer.部件级编程[M].北京:清华大学出版社,2003.
[7]李杰,王航.一种基于ModBus总线的通信方案探讨[J].工业仪表与自动化装置,2012(4):101-104.
LI Jie,WANG Hang.One kind of explore of communication scheme based on ModBus[J].Industrial Instrumentation&Automation,2012(4):101-104.