构件化软件开发

2024-06-20

构件化软件开发(精选9篇)

构件化软件开发 篇1

摘要:由传统的企业信息系统开发方式的不足引出软件构件化思想, 对构件的概念进行了介绍。给出构件化企业信息系统开发方法的框架, 简要分析开发过程。由复用过程中存在大量构件但查找困难的实际问题找到关键技术, 提出一种解决方案, 即.NET平台下C#语言构件的开发过程。扩展标记语言 (eXtensible Markup Language, XML) 作为该方案描述语言, 重点解决构件及其描述的一体化问题。

关键词:软件构件,企业信息系统,.NET平台,C#语言

0引言

当前, 企业信息系统需求呈井喷状态, 软件规模越来越大, 而人们对于软件开发周期的要求却越来越短。使用传统的信息系统开发方法, 大量的重复劳动导致开发效率的降低。而使用构件化技术开发信息系统不仅能显著提高软件的质量, 降低开发人员的劳动强度, 而且能随着系统业务流程的变化而变化。因此, 基于构件技术开发企业信息化系统方法受到了业内人士的普遍关注。

软件构件是指具有相对独立功能和可复用价值的软件成分, 是粗粒度、相对独立、可替换的软件系统组成部分, 能够完成明晰功能的软件实体, 可独立部署并易于第三方组装。它的使用同开发、生产无关, 构件其实就是对一组类的组合进行封装, 并完成1个或多个功能, 为用户提供多个接口。整个构件隐藏了具体的实现, 只通过接口对外提供服务。

1企业信息系统的构件化开发方法

信息系统是稳定性和可变性相统一的实体。其稳定性特征表明, 大部分信息系统在信息模型和功能上有类似之处, 尽管不同领域对信息系统的功能需求各异, 但在一定范围内系统所处理的信息结构是相对稳定的, 变化的只是其内容;同时, 信息系统所涉及到的业务种类有限, 处理过程也具有相似性, 不同的只是其运作和控制方式上的差异。正是基于信息系统的稳定性和基础业务的相似性, 从而可以将相同的操作进行抽象, 将实体信息及其处理处理过程封装在不同的构件中。

基于构件的信息系统开发与传统开发方式不同之处在于分析、设计和实现等各个阶段中所充实的工作不再是从零开始, 而是从开发转变为系统集成, 可以看成是一个以组装构件为主的软件开发过程。一种可行的构件化企业信息系统开发框架如图1所示。

上述方法可以快速建立信息系统, 其核心部分是构件。根据构件处理信息的不同, 可将其分为3类:

① 通用基本构件:是特定于计算机系统的构成成分, 如基本的数据结构、用户界面元素等;

② 领域共性构件:是企业信息系统所属领域的共性构成成分, 它们存在于该领域的各个应用系统中;

③ 应用专用构件:是每个应用系统的特有构成成分。信息系统开发中的重复劳动主要指前两类构成成分的重复开发。

因此, 通过凝结共性, 通用基本构件和领域共性构件将具有良好的可复用性, 由此可将开发者的主要精力聚集在系统专用构件的开发及各构件的组装工作中。

企业信息系统的构件化方法摒弃“一切从零开始”的开发模式, 而是以已有工作为基础, 充分利用积累的知识和经验, 通过用户需求和问题域的详细分析发掘可重用的成分, 在旧系统中提炼或新开发通用基本构件和领域共性构件。开发者的精力投入专属新系统功能的构件开发过程。所有构件经过测试、标准化、描述和分类后导入构件库, 从而新系统的开发是构件开发、组装和系统测试的过程。

2复用中的实际问题及关键技术

2.1复用中的实际问题

在实际的开发中, 软件的复用程度并不理想。基于构件的软件开发将开发的重点由原来的软件编程转变为利用已有构件组合集成新的软件系统。由于建立一个应用需要复用很多已有的软件构件, 这些构件可能是在不同的时间、由不同的人员开发的, 并且有不同的用途, 因此需要将它们组装在一起。除了良好的软件架构和合理的软件开发过程指导外, 程序员对构件的正确理解和准确利用至关重要。软件复用面临一个矛盾:一方面存在大量的可复用构件, 另一方面程序员很难找到真正需要的构件。要解决这个问题, 就需要对构件的静态特性和动态行为做出准确、全面的描述, 并建立构件库对构件进行合理的分类和组织, 提供良好的检索方法支持。

2.2关键技术

基于上述软件复用中的实际问题可以看出, 构件的描述技术作为构件化软件设计中的关键技术之一, 在基于构件软件开发 (CBSD) 的应用实践中占有重要地位。构件描述是指以构件模型为基础, 解决构件的精确描述、理解及组装的问题。它规定了一个软构件所需的结构和内容, 不仅用于指导软件构件的设计、开发、管理、组装和测试等活动, 而且可用于构件库的组织、存储、检索和浏览。

3解决方案

面向对象基于Web的.NET技术是企业信息系统开发中经常采用的开发平台。.NET平台非常适合于构件化布署, 采用构件化工程方法, 将代码与逻辑和业务对象的剥离能够实现软件复用。一个.NET平台下采用C#语言提炼、开发和加工构件的过程示意图如图2所示。C#是面向构件的编程语言, 对构件开发有很好的支持。XML描述能嵌入C#构件注释中。传统构件描述中采用数学符号 (难以理解、实现、维护及推广) 或直接使用自然语言 (很难保证构件质量) , 而XML具有良好的扩展性和自描述性, 因此可将XML作为构件描述语言。

用C#等语言开发的源代码, 构成各个功能模块。将能够复用的功能模块提取出来, 通过标准的接口定义, 解耦合 (构件与数据库、应用环境等分离, 真正意义上实现独立, 以适用于其他应用系统) , 并通过XML描述对构件进行良好的注释。VSTS (Visual Studio Team System, Microsoft 开发工具) 编译源码后, 生成2个文件, DLL程序集 (构件) 和含有构件描述数据的XML文档。通过XML构件描述解析工具的解析将XML文档转换为构件描述元数据, 最后, 构件源码、程序集和构件描述元数据3类形式的文件通过构件入库管理系统一起入构件库。

这样, 使用者在构件库中搜索到所需构件时, 通过阅读详细的描述信息能够清楚地了解构件的基本功能, 正确地应用于企业信息系统的开发, 而且当构件升级为新版本时, 其描述信息也能随之更新, 避免了描述与实体的脱节。

4结束语

企业信息系统构件化开发方法的框架具有通用意义, 可用于基于构件开发软件的过程中。上述提出的.NET平台下C#语言开发构件的过程已应用于工程实践中, 构件的XML描述能够自动载入构件库, 实现了构件体与描述的一体化, 提高了构件的精确描述度和理解力。

参考文献

[1]杨芙清, 梅宏.构件化软件设计与实现[M].北京:清华大学出版社, 2008.

[2]王志坚, 费玉奎, 娄渊清.软件构件技术及应用[M].北京:科学出版社, 2005.

[3]LOWY J.Programming.NET Components[M].GravensteinHighway North Sebastopol:O’Reilly Media, 2005.

构件化软件开发 篇2

今天我们上了王斌老师的课,王老师对基于插件及构件技术的软件工程做了详细的讲解,使我对这个领域也有了一些粗浅的认识,有了一些自己的理解。

软件工程(Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。

而软件体系结构则是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组组合连接起来。这一定义注重区分处理构件、数据构件和连接构件,这一方法在其他的定义和方法中基本上得到保持。

构件化软件开发 篇3

1 构件化软件开发概述

1.1 构件化软件开发

构件化软件开发是将产品标准化生产理念应用于软件开发过程的一种思想,这种思想将职能性软件视作一种可以重复利用的标准化构件,对已经设计完成的标准化构件进行分类保存,在软件开发过程中一旦需要用到这一标准化软件构件,就可以到数据库中搜索相应软件,加入到软件中去,这样可以减少开发软件的费用,减少了时间的浪费,提高了开发质量。构件化概念从软件技术发展成熟以后开始进入到软件设计领域,经过多年的发展、不断的完善,现在已经基本上形成了自己的体系,这是一种有组织的并且很完整的机制。

1.2 嵌入式实时软件构件化开发的必备条件

与传统的软件设计开发过程相比,嵌入式实时软件的设计开发过程并没有太大的区别,但是在开发嵌入式实时软件时,要充分考虑到它自身的特点,即实时性和可扩展性,在进行软件设计时,以满足其实时性和可扩展性的需求。在众多软件中嵌入式实时软件系统是最适宜应用构件化开发技术的,因为嵌入式实时软件系统是一种微观上的软件系统,其应用的领域也主要集中在一些生产用品、生活用品中,并不需要满足传统意义上软件系统的兼容性和操作性的高要求,只需要具备容易上手、操作简单的功能就可以,这就是软件的构件化开发所具备的必需条件。

在嵌入式实时软件系统的构件化开发的过程中,必须从软件系统应用的角度出发,对实际中的相关细节进行系统、科学的设计,并进行开发和管理。在软件开发过程中,开发人员应该对软件的功能需求进行分析,并根据实际需求在软件构件数据库中搜索相关的软件构件。如果嵌入式实时软件系统的功能需求比较简单,开发人员可以直接使用软件构件数据库中的构件进行开发 ;如果嵌入式实时软件系统的功能需求比较复杂或难以实现,开发人员可以将软件构件库中几种软件构件进行组合来进行开发。这时会不断更新构件库,从而形成一个动态的构件库,为嵌入式软件系统可持续开发提供了更加系统、更加全面的软件构件库支持。

2 构件化的嵌入式实时软件开发

构建合理的构件化的嵌入式实时软件框架是软件系统开发的基础,通过软件框架可以充分体现出构件化软件开发方式的优势,构件化开发框架具有的易于理解、拆解、组合等特性,使得嵌入式实时软件得到广泛普及,相关开发技术水平也得到大幅度的提高。

在开发嵌入式实时软件时,理想的构件化软件框架不仅应该包括软件系统中的各个组成部分,而且还应该包括各个组成部分之间的逻辑关系。而这种逻辑关系非常的重要,如果嵌入式实时软件框架中只针对软件内容进行设计,而忽略框架内部各个部分的逻辑结构,没有对各个组成部分进行逻辑结构进行设计,在软件的开发过程中就会整个软件的逻辑关系混乱,会导致系统开发面临瘫痪的危险。因为在软件开发过程中职能软件构件会因为自身逻辑关系的问题,而不能在构件化软件设计过程中自由运用,这时就需要重新根据软件设计中所需的逻辑关系来修改软件构件的逻辑关系,这样一来,就会耗费大量的人力、物力和时间,严重影响了嵌入式实时软件构件化开发的效率,也不符合嵌入式实时软件构件化开发的特点,必然要予以解决。

CBRTSF是目前相对成熟的完全构件化嵌入式实施软件开发系统,通过赋予构件接口优先级,维持构件黑盒特性,以实现构件重复利用 ;通过集中显示表示构件的交互关系,增强构件可维护性、扩展性 ;应用策略、机制分离思想,赋予构件分离、合成功能,增强构件灵活性。CBRTSF软件开发系统充分展现了嵌入式实时软件的构件化开发的高效和强适应性的特点。

3 构件化嵌入式软件开发环境

软件开发环境是软件开发过程中不可或缺的支撑工具,也是开发过程中所需的最基本的工具,而嵌入式实时软件的开发更是离不开一个科学、合理的软件开发环境,在良好的开发环境支持下,嵌入式实时软件的开发过程才会更好的展现出它的优势,才可能体现出良好的扩展性、实时性,并实现兼顾功能性、可定制、可维护性的要求,设计出一种适合嵌入式实时软件开发的开发环境是至关重要的。

当前的软件开发环境多数是针对传统意义的软件系统设计需求而设计的,不能满足嵌入式实时软件系统开发的特殊需求,而正是由于当前缺少相应的开发环境,导致了嵌入式软件的构件化开发不能稳定地进行。同时嵌入式实时软件的构件化开发过程包括两方面内容 :嵌入式实时软件的开发系统和庞大的构件开发系统,这是一个系统性的开发过程,所以在对嵌入式实时软件构件化开发环境进行配置时,不仅要关注嵌入式实时软件系统开发的需求,还要关注构件化开发过程的需求,并将二者有机的结合在一起,充分满足各自的运行需求,这样才可以为嵌入式实时软件的构件化开发提供一个科学、合理的开发环境。

现阶段,在嵌入式实时软件系统的构件化开发领域中,有学者提出了一种基于模块化的软件开发环境设计的思想,具体而言是在软件开发过程中设置一个模型,在这个模型的规范下软件开发软件和被开发软件统一进行开发和被开发活动,这样一来,由于是在同一个模型规范下设计出来的,嵌入式实时软件的构件化开发活动就可以做到有机的统一,能够进行积极的信息交互,根据软件开发软件对被开发软件进行设计开发,也可以针对被开发软件的设计需求,对软件开发软件进行改造升级,让其更加适应软件开发活动。实现嵌入式实时软件构件化开发和软件设计环境的综合统一是极其重要的,不但可以使嵌入式实时软件构件化开发顺利进行,而且还能够促进嵌入式实时软件构件化开发和软件开发环境都得到十足的发展。

4 构件化软件设计技术特点及开发过程

4.1 构件化软件设计技术特点

构件化软件开发的主要优点就是可以使软件开发活动变得更加简便、易行,减轻软件设计工作的负担,提高软件设计工作的效率,软件设计时根据软件框架将软件构件化的过程,是软件开发的重要流程,也是软件开发的主要工作之一,理想状态下的软件设计路径应该有以下两个优点 :一是框架结构具有良好的扩展性 ;二是框架中的构件好具有很强的重用性。

嵌入式实时软件系统的构件化开发的最主要的目标是实现软件系统开发的高效,而软件系统开发的效率主要体现在开发过程中对软件构件库中构件使用的频率,即重用率,软件开发过程中,重用率越高,构件化软件开发的效率就越高。所以基于构件化的软件开发方式发展面临的主要问题即如何在嵌入式实时软件系统开发过程中提高软件构件的重用率。AOP是目前实现构件正交的主要途径,但其对支撑环境要求较高,AOP支撑环境在嵌入式实时软件开发领域尚处于萌芽阶段,但AOP仍不失为一种理想的构件软件设计技术。鉴于目前多数嵌入式实时软件开发者具有较为丰富的领域知识与设计开发能力,有学者提出以领域作为正交判断法,以领域贯穿特性作为判断法则,实现构件公共操作,以此法析出的构件层次性好,可增加构件重用机会,且具有较高的正交性,甚至可集中显示非正交关系构件,进而提高软件扩展性。

4.2 支持重用的软件过程与软件平台

软件过程在软件开发活动中担当着至关重要的角色,而在当前的软件开发环境下,还不能使构件化软件开发技术与软件过程很好的进行匹配,会出现不能很好地为构件化软件开发活动提供过程支持,或过程系统不能有效的支持构件化软件的开发活动,不能系统的满足构件化软件开发活动的需求。所以立足于构件化软件开发的具体要求,将构件化软件系统开发活动与软件开发过程进行高度的匹配,同样是构件化软件开发活动中急需要解决的一个重要问题。软件过程是软件的开发活动中一个软件开管理主体,可以有效降低软件开发风险。对于嵌入式实时软件构件化开发,一个优秀的软件过程的目标与软件开发的功能目标必须要统一,并可以针对软件的构件化开发起到指导性的作用,使得嵌入式实时软件构件化开发活动在软件过程的指导下,始终能够保持对开发风险的高度敏感,确保构件化开发过程中的安全与稳定。同时因为构件化软件开发活动自身的特点,这一软件的开发过程还必须保证有较高的普遍指导意义,因为构件化软件开发活动就是一种针对不同软件性质、软件内容的一种软件构件的数据服务主体,在其运行过程中必然要为各种各样的嵌入式实时软件提供软件构件服务,相应的软件过程也必然会面临各种各样软件设计目标的考验,所以构件化软件设计活动的软件过程,要有普遍性和特殊性相结合的特性,为构件化软件设计活动提供更加广泛、深入的安全保障。

软件开发平台是软件开发的基础,Open Platform是目前较为成熟的构架化嵌入式平台,其自身有效性、可靠性较好、可以明显提高构件化软件开发活动的效率。

5 结论

随着社会经济技术的发展,嵌入式实时软件系统已经深入到社会经济发展的各个领域,产生了与人民生活水平息息相关的联系,并仍保持着极高的发展速度在社会经济各个领域快速发展,所以在嵌入式实时软件的开发活动中,始终强调较高的开发效率,而构件化开发在嵌入式实时软件开发过程中实现了较高的效率,经过实践的检验被证明是一种行之有效的软件开发形式,能够极大的提升软件开发的效率,是面向软件开发现代化、面向软件开发未来的软件开发形式。

摘要:随着社会经济的快速发展,电子信息产品在社会经济生活中得到广泛的应用,与之相对应的嵌入式实时软件的开发活动也变得炙手可热,成为软件开发领域关注的焦点。嵌入式实时软件在当今社会经济生活中得到广泛的应用,所以在其开发技术上,应该将开发重点放在组建规范化、标准化的开发过程和技术手段上。本文从开发技术研究的角度,将嵌入式实时软件的构件化开发相关技术与现实生活中的应用联系在一起,对嵌入式实时软件的构件化开发的相关技术进行探讨与研究。

构件化软件开发 篇4

在航空领域中树脂基等复合材料因其具备高比模量和高比强度的作用优势,被广泛应用于实践。然而,随着该类材料应用技术研究的不断深入,其使用成本较高的缺陷问题日益突出。在此行业状态下,开发出一种树脂基复合材料的新型成形方法,已经成为实现航空业快速稳定发展的急需解决问题。VARI(VacuumAssisted Resin Infusion),是一种在真空状态下利用单面模具,将树脂浸润于纤维后固化成型的工艺方法。该工艺方法的应用不仅能够使树脂基复合材料在低温固化、热压罐以及结构件整体性的条件要求下实现成型,还能作用于零孔隙含量的航空典型结构件成型。因此,其被誉为生产航空典型结构件的制造工艺中最具发展潜力的工艺技术。然而,在该工艺技术的实际应用过程中,其存在制造复杂、涉及技术标准多以及工艺规范要求高的问题特点,这就在一定程度上阻碍了技术普及的发展进程。基于此,相关建设人员应通过仿真软件来提高VARI 工艺方法成型的过程效率,从而满足航空业发展对典型结构件的应用需求。

构件化软件开发 篇5

1.1 自动连续视频播放构件的使用

有了动态链接库文件App_Code.dll,在其他任何一个需要使用股票实时接收信息系统的程序中都要可以调用了,而且程序设计变得特别简单,下面介绍使用App_Code.dll的步骤:

(1)新建一个网站,如“GP”。

(2)在当前网站中新建一个名称为“Bin”的文件夹,点击项目文件夹,在出现的快捷菜单中选择“添加引用”(或者在“网站”菜单中选择“添加引用”),会弹出一个添加引用对话框,将“App_Code.dll”文件导入到该文件夹中。

1.2 页面整体布局(Show Gp Chart.aspx)

(1)整个页面用表格布局。

(2)左边用于添加自选股和查看对应的股票,下面放置一个名称为“Literal2”的Literal控件,用于显示添加的自选股。

(3)右边的上面用于显示股票的基本信息,如今日开盘价、昨日收盘价、今日最高价、今日最低价、成交量和成交额等信息。

(4)右边左下方,用于显示股票的买入和卖出竞价信息(如买一至买五的价和量),以及当前最新价格。

(5)右边右下方,主要有3部分,第一部分是显示日期和时间,第二部分是显示股票名称、及分时、日K线等链接,第3部分是用于显示K线图。

主页面布局设计效果如图1所示。

1.3 页面局部布局

1.3.1 我的自选股界面(左边)

在表格的一个单元格中进行设计,主要控件及功能如表1所示。

1.3.2 股票行情

(1)股票基本信息的显示

股票基本信息通过表1进行定位,通过Literal显示相关信息,主要控件及功能如表2所示。

(2)股票的买入和卖出竞价信息的显示

股票的买入和卖出竞价信息通过右边左下方表格进行定位,通过Literal显示相关信息,主要控件及功能如表3所示。

(3)股票实时图、K线及日期时间信息的显示

股票的买入和卖出竞价信息通过右边右下方表格进行定位,通过Literal显示相关信息,主要控件及功能如表4所示。

1.4 事件处理代码

(1)为页面加载添加事件(Page_Load事件)

首先创建构件类的实例,然后通过参数接收股票代码,将股票代码作为参数传递到构件类中,分别显示股票名称、开盘价、收盘价、竞卖价、当前买入报价及量和当前卖出报价及量,并通过Literal1显示当前股票的分时图,通过建构件类的Bind Filed Rec Value To Literal方法,将自选股绑定到Literal2控件中,详细代码如下:

(2)为“查询”按钮添加事件

查询按钮的功能是首先根据用户输入的代码创建一个超链接,然后直接转向该链接,显示该股票信息,代码如下:

(3)为“添加到自选股”按钮添加事件

“添加到自选股”按钮首先判断有股票是否在自选股中,如果已经存在就没有必要添加了,否则就将股票添加到数据库(因添加数据是数据库最基本的操作,这里就不详述了),然后再重新调用构件类的Bind Filed Rec Value To Literal方法,将更新后的自选股显示出来,关键代码如下:

(4)为“分时”、“日K线”、“周K线”和“月K线”超链接按钮添加事件

“分时”按钮的功能是先确定股票代码,然后调用构件类的produceiframe方法,动态创建一个内部框架,并通过Literal1控件显示出来,这样分时K线图就可以通过Literal1控件在指定位置了,代码如下:

“日K线”、“周K线”和“月K线”按钮的代码与“分时”按钮相同,只不过传递的参数不同而已。

2程序运行效果

当程序开始运行时,由于未选择股票,则显示默认的股票(600000,浦发银行)的信息,如图2所示。

当选择一个股票(如自选股中的“中国核电”,程序即显示“中国核电”股票的相关信息,如图3所示。

当单击“日K线”超链接时的运行效果,如图4所示。

当单击“周K线”和“月K线”超链接时的运行效果,如图5所示。

如果将该软件安装在服务器上,也可以通过手机访问,效果如图6、图7、图8和图9所示。

3结语

股票实时接收信息系统能够实时接收股票信息,方便用户炒股,而且可以根据用户特点,设计自己喜欢的界面效果,通过IE浏览器和手机模拟测试,效果良好。

参考文献

[1]刘友生,等.基于构件的ASP.NET(C#)网站开发教程.北京:化学工业出版社,2011.

[2]刘友生,等.构件化Web项目开发(ASP.NET C#).北京:清华大学出版社,2011.

[3]刘友生.自动连续视频播放构件开发与使用[J].电脑编程技巧与维护,2014,(05).

[4]刘友生.用构件快速开发等级限额投票系统[J].电脑编程技巧与维护,2014,(07).

星载嵌入式软件的构件化体系研究 篇6

1968年,在北大西洋公约组织(NATO)召开的软件工程会议上,首次提出来了软件危机(Software Crisis)的概念[1]。会议上,Mcllroy提交了一篇题为《Mass-Produced Software Components》的论文,首次提出了软件构件(Software Components)以及构件工厂等概念,指出软件复用的一个重要基础就是需要有充足的软件构件。稍后,NATO制定了关于软件复用的一套指导性标准,其中就有关于构件及利用标准构件来实现软件复用的基本思路。

1软件构件化的好处及困难

所谓的构件就是指封装的、规范的、可重用的软件模块。广义上讲,构件可以是需求分析、设计、代码、测试用例、文档或软件开发过程的中其他产品;狭义上来说,构件一般指对外提供一组规约化接口的、符合一定标准的、可替换的软件系统的程序模块[2]。

通过软件构件实现软件的复用,可以提高软件研制效率,增强软件可靠性,提升软件技术竞争力,实现共享知识促进软件开发的技术进步和标准化,从长远看,肯定能提高星载软件的研制能力。可以说软件构件是最有价值的软件资产。

但是我们也应该清醒地看到,在星载嵌入式环境下实现软件构件的困难,包括:

1.1环境的适应性

不同的用户需求产生了不同的载荷功能要求,不同的架构设计师构建了不同的卫星载荷的硬件系统,上层的需求变化,底层的硬件环境变化,那么处于中间层的星载嵌入式软件,需要有一种复用机制来以不变应万变,需要通过构件抽象去适应不同需求、不同硬件的差异,并由此负担了资源成本和效率的代价。

1.2新技术的追踪

复用构件是为了新产品的研制,然而软件产品耦合的因素很多,操作系统、处理器、编程语言……这些技术因素都在发展变化中,那么随之而来的问题是:大多数情况下,我们的研发部门只是技术发展方向的追随者,不是引领者,如何保证在目前的技术体系下设计的构件产品,有较长的使用寿命,在将来一段时期内的项目中都能被复用?积累的软件构件会不会有朝一日因为技术淘汰而用无可用?这就需要构件设计者能敏锐的把握新技术的发展方向并应用在构件设计中。

1.3资源的限制

一般的软件系统的处理器性能、存储器容量等资源都较为丰富,软件的性能要求方面不多,构件粒度的定义有较大的伸缩度。而星载嵌入式软件,软硬件结合紧密,需要充分考虑硬件因素,在软硬件资源局限性较大的同时,对实时性和可靠性要求高,并行、同步、中断、时序、可靠性等等方面有更多的苛刻限制,所以星载嵌入式环境下软件构件开发更有难度。

1.4复用的成本

相对于专用化设计,构件化显然需要额外增加软件的调度、接口、层次,增加了软件本身的通信成本、资源成本、规模成本和管理成本。

同时,为避免错误扩散,提高构件的适用能力,就必须构件经过更严格的软件测试,因此开发可复用构件的费用要比开发一般模块的费用要昂贵,W.Tracz认为开发可复用构件的费用比开发一般模块要超出30%〜200%。收回在复用项目上的投资需要时间,W.Tracz发现,在一个软件上的投资只有在该可复用构件第3次被复用之后才能收回[3]。

2构件体系的技术策划

星载嵌入式软件的构件体系建立是一个系统工程,也是一个循序渐进的过程,需要从研究构件特征及关系入手,建立一个构件模型,通过构件描述语言来解决构件的描述、组装问题;然后有目的的生产构件或者从已有星载载荷系统中挖掘提取构件;建立构件库对构件进行有效的分类、组织、检索及配置管理;在构件模型的基础上研究构件组装机制,并按照构件化软件架构开展软件的开发活动。

嵌入式环境下软件构件体系的架构示意如图1:

2.1构件模型

软件构件只有存在于一个定义好的软件环境(构件标准)里才能实现互联互通互操作,才能发挥效用,每个构件都提供了一套服务,软件怎么使用其他构件提供的服务、构件怎样命名、怎么在运行时发现新构件和它们的服务,因此首先必须建立一个软件构件模型,通过构件模型来全面定义构件的基本属性、构件接口结构、构件应用的框架、构件间的交互机制等内容,并提供创建构件和实现构件的规则。

国内外的研究机构根据自己的领域特征曾提出一些嵌入式构件模型,国外的如PECT、Koala、PBO[4]以及PECOS等构件模型,国内的CBMESP、Z-CCM、DRSCDE等构件模型,它们对实时嵌入式系统的构件开发都提出了有效的解决方案,但大多数都局限于具体实时嵌入式应用领域,与特定软件平台紧密相关,难以做到开放性、普适性,并在构件的易用性、可移植性、可靠性和质量保证方面仍存不足。

因此,通过对星载领域的软件进行分析,对其中的稳定需求和共同特征进行抽象,形成星载领域的构件模型,在此基础上,设计开发适合领域环境的构件,并加以提炼入库,以备将来复用[5,6]。并且使用构件描述语言以严格而又易于理解的方式,为构件交互、构件组装和构件开发人员提供全面准确的构件信息,将构件模型进行形式化的描述。

构件模型一般可以从概念、内容、语境等角度,对构件的属性、接口、环境、关联等若干个主要元素进行定义,一个典型的构件模型元素结构如图2:

2.2构件的开发和组装

领域模型建立后,就可以按照模型定义,借鉴通用构件模型的某些特点,从实际开发环境和开发平台出发,研究分析、设计出适合星载领域软件开发和组装的构件,明确定义构件的接口以及接口配置,并进行文档化;另外,还可以通过软件再工程的手段,从已有的大量星载载荷软件资产中标识并提取可复用的构件。

构件的开发设计一定要摆脱与特定硬件平台、软件平台的耦合,以提高构件的普适性、可移植性和高复用性。

构件的组装集成是软件构件中的核心技术,构件组装集成是要通过构件的接口或者连接件来协调各个构件的行为,通过将一定数量的构件按照约定的交互机制及组装机制集成,使通过构件组合成的软件产品能够满足星载实时嵌入式系统的特定功能及非功能盖求,如服务功能、资源约束限制、环境依赖及构件时间行为等,从而实现构件的价值。

按照软件的基本结构,经常采用的构件组装机制,包括构件顺序组装、构件选择组装、构件循环组装、构件并行组装、构件同步组装和构件中断组装。

星载嵌入式环境下的构件组装受到从构件模型、需求,到构件粒度大小、组装平台特点、运行环境等多种要素的制约,同时兼顾构件之间的行为联系、数据联系等等问题,因此构件组装必须要需要结合具体的应用要求,对构件的服务功能进行选择和连接。

2.3构件的测试

一个构件的开发设计完成以后,必须通过测试来检査构件能否满足任务书中的设计指标,是否符合构件规范中的结构关系。

构件测试是构件体系结构中的重要一环,关键的原因就是构件的开发者和使用者相分离,在实际应用过程中,构件的运行环境和条件未必与构件开发时的约束一致,而且构件的使用者往往不拥有构件的源代码,这就对构件提出了很高的质量要求,必须通过严格的测试来保证。例如美国的Ariane5火箭发射失败的原因就是复用了Ariane4系统中的构件,而没有重新进完备的测试[5]。

随着构件的规模和复杂性增加,构件的生产成本越来越高,构件中存在的缺陷和故障造成的各类损失也大大增加,甚至会带来灾难性的后果,因此,在构件入库前必须对构件进行全面的测试。确保每个构件的正确性,才能确保将来集成此构件的每个载荷应用软件的可靠性!

因此,相对于以往的应用软件测试,构件测试的项目更多、要求更高,需要针对构件的所有属性来设计测试用例,只有测试的有效性得到充分保证,构件化才能实用化。

2.4构件的应用

传统的星载嵌入式软件开发一般都要经过系统需求分析、概要设计、详细设计、单元测试、软硬件集成、确认测试等几个阶段。而利用构件进行软件开发的过程有别于传统的开发方法,通过分析开发过程中的构件需求,然后在构件库中提取可以沿用的构件,或者进行少量改造就可以适用的构件,将新开发的构件与库中提取的构件进行集成、测试,形成最终的软件产品。传统开发方法与构件开发方法过程的对比见图3:

可见,基于构件的星载软件开发,不能完全沿用以往软件开发的过程、质量控制、文档等技术要求,需要建立一套与之适应的开发方法和研制规范。

2.5构件的管理

对星载嵌入式软件构件的管理,应结合构件化的特点,从构件库管理、配置管理、绩效管理等多方面入手,才能真正把软件构件化工作落到实处。

设计出的各类构件需要在构件库中组织、存储,当构件达到一定规模以后,构件检索将是一项构件管理的重要工作。每个星载嵌入式软件构件都需要在时间、空间、能力、接口、环境、其他非功能性需满足的前提下,进行匹配分析来确定是否能复用,所以如何提髙构件检索过程的效率、査全率和查准率是基于构件的软件开发成功的一个关键。

传统的构件检索方法如基于构件关键字描述的检索方法,其检索结果的查全率较高。然而由于缺乏对构件接口功能语义的准确描述,其检索结果的准确率和效率较低。另一方面,基于形式化描述方法的构件检索效率和查准率都高,然而出于形式化逻辑中精确的接口匹配要求,以及构件用户提供形式化的构件查询请求较为困难,导致检索结果的查全率较低。

因此,要在构件库结构基础上,设计检索方法,并开发适合星载软件开发环境的构件检索、构件编辑等工具。

构件库在建设的过程中,还要注意对构件的配置管理控制,对构件的版本必须严控,过多的构件分支肯定会给项目带来管理和技术上的风险[7,8,9,10]。例如图4中,两个有关联的的构件A 1.0,构件B 1.0已经在某项目X中被复用和验证,项目Y中也集成了构件A和构件B,尽管构件B发生了技术状态变化,版本演变到了1.1,但集成后的应用功能、性能依然能保证正常,而到了项目Z时,构件B演变到1.2,技术状态出现的变化却最终导致在集成时出现了bug。

此外,还需要开发构件管理工具,对构件的组装情况进行标识、记录、检索、追踪,便于对构件的错误修复和升级换代。

作为研制管理部门,还需要进行构件的绩效管理,既要从利益角度去激励设计构件用以复用,也要提高设计者的责任意识,达到利益与责任的均衡。

3结束语

总之,构件化带来的好处显而易见,但我们也要认识到构件复用带来的问题和困难,任意构件都只具有资源、功能、接口等一定条件下有限的适用性,构件错误会随着应用数量的增加而扩散,因此需要针对星载软件领域的实际来策划构件体系结构和模型,需要改进传统的开发方法,并建立与之适应的管理体制,只有精心规划、认真探索和开拓,才能通过软件构件化工作,真正提高星载软件的可靠性、研制效率和研制能力。

摘要:软件构件技术是当前软件工程的一个热点研究领域,本文从软件构件体系的角度,全面叙述了如何通过构件化技术方法,提高星载软件的研制效率和研制能力,为解决星载软件重复研发,可靠性保障成本较高的问题提供了一条技术解决方案。

关键词:软件工程,构件,星载软件

参考文献

[1]史济民.软件工程原理、方法与应用[M].北京:高等教育出版社,1990.

[2]李航.基于通用试验体系结构支撑平台的组件框架设计模式[J].软件,2013,34(5):85-87.

[3]Tracz W.Software reuse maxims.ACM SIGSOFT Software Engineering Notes,1988,13(4):28-31.

[4]David B.Stewart,Richard A.Volpe,and Pradeep K.Khosla.Design of dynamically reconfigurable real-time software using port-based objects[J].IEEE Trans.Software Eng.,1997,23(12):759-776.

[5]李景峰等.一种特定领域软件开发模型[J].西安电子科技大学学报,2000,5.

[6]景涛,白成刚,胡庆培.构件软件的测试问题综述[J].计算机工程与应用.2002 38(24).

[7]路志,戴志涛.版本控制系统在嵌入式系统实验中的应用[J].软件,2014,35(11):86-90.

[8]Wang S,Liu Z,Sun Q,Zou H,Yang F.Towards an accurate evaluation of quality of cloud service in service-oriented cloud computing.Journal of Intelligent Manufacturing,2014,25(2):283-291.

[9]Wang S,Zheng Z,Wu Z,Lyu M,Yang F.Reputation Measurement and Malicious Feedback Rating Prevention in Web Service Recommendation Systems.IEEE Transactions on Services Computing,2015,8(5):755-767.

构件化软件开发 篇7

目前,主要的嵌入式系统软件验证方法包括基于马尔科夫的验证方法[8]、基于定理证明的验证方法和基于调试代理软件的验证方法[9]。最常用的是基于马尔科夫的嵌入式软件验证方法。但利用传统方法进行嵌入式系统软件的验证,验证的项目主要为软件的功能性设计要求,并且只能在软件设计的后期才能进行验证,难以对非功能性的设计要求进行准确分析与验证,导致嵌入式软件的稳定性与安全性难以得到保障[10]。

针对传统方法存在的缺陷,提出一种基于模型检查的嵌入式软件构件化分析与验证方法。利用SMV检查工具对嵌入式软件运行状态进行分析与检验,实现对嵌入式软件的分析与验证。仿真实验证明了改进算法在嵌入式软件构件化分析与验证方面的优势。

1 嵌入式软件构件化验证模型设计

对嵌入式系统中的软件进行构件化验证,主要通过重复使用模块化软件来建立嵌入式软件构件化验证的模型,实现对嵌入式系统软件的验证。

通常情况下,一个完整的嵌入式系统软件包括多个子系统软件,其软件系统具有较高的构件化特征。对嵌入式系统中构件化软件进行分析与验证,能够为嵌入式系统安全稳定的运行提供保障。由于分析与验证过程需要消耗大量能量,能量成为嵌入式系统中一种特殊的资源消耗,嵌入式系统的运行时间与能量消耗呈正相关,运行时间越长,能量消耗越多。因此,可以利用能量消耗的时间特性对嵌入式软件构件化的验证过程建模。

设计一种验证模型,在验证模型中加入嵌入式系统主要可以利用资源(包括存储空间、缓冲区、消息队列、传感器)特征向量,使该模型能够反映嵌入式软件构件运行时主要可以利用资源的变化情况。设计验证模型时需要包含如下参数:假设VP是资源利用状态的集合,对于每一嵌入式资源利用状态都有vi∈VP,且P的初始状态为vi∈VPInit;FP为资源状态的映射集合,FP=(fP1,fP2,⋯,fPK),其中K为嵌入式系统中可利用资源种类的数目;WP表示可利用资源的有穷集合,WP=(VP,FP(VP));ΓP为资源利用状态的转换集。通过以上参数的描述,将嵌入式软件构件化验证的模型转化为多元组的形式进行构建:

2 嵌入式软件构件化验证方法设计与实现

本文构建立了嵌入式软件构件化验证的模型,将嵌入式软件构件化验证模型中软件运行路径逐一遍历,直到获取正确的软件运行路径,实现模型检查算法设计,最终实现基于模型检查的嵌入式软件构件化分析与验证。

2.1 基于时序逻辑CTL算子的模型检查算法

首先获得嵌入式软件运行过程中的时序逻辑CTL算子,通过CTL算子获取嵌入式软件构件化验证模型中软件运行路径的有关性质,并逐一遍历,直到搜索出正确的软件运行路径,设计了模型检查算法。具体过程如下所述:将时序逻辑CTL划分为分支时间算子和线性时间算子。其中,分支时间算子包括软件的全部运行路径A和特定的运行路径E,线性时间算子包括G(always,经常)、F(sometimes,偶尔)、X(next time,下一时刻)和U(until,直到)。引入上述构建的嵌入式软件构件化验证模型,利用时序逻辑CTL中的分支时间算子和线性时间算子描述嵌入式软件构件化验证模型中软件运行路径的相关性质,如图1所示。图1(a)为EFg,表示“资源利用状态的集合VP中存在一条运行路径使布尔量公式g在某种运行状态下为真”;图1(b)为AFg,表示“资源状态的映射集合FP中所有运行路径中布尔量公式g在某种运行状态下为真”;图1(c)为EGg,表示“可利用资源的有穷集合WP中存在一条运算路径使得布尔量公式g在该路径中的全部状态下都为真”;图1(d)为AGg,表示“资源利用状态的转换集ΓP中布尔量公式g在全部运行路径中的全部状态下都为真”,通过对这些条件进行逐一判定,最终选择正确的软件运行路径,完成模型检查算法设计。

2.2 基于模型检查的嵌入式软件验证的实现

针对嵌入式软件进行分析与验证的模型检查工具主要包括:贝尔实验室开发的SPIN工具、赫尔辛基工业大学开发的PROD工具、CMU大学开发的SMV工具等。每种模型检查工具都有不同的特点,其中,SMV工具结构简单、运算量小、准确率高。因此本文将SMV工具作为嵌入式软件分析与验证的模型检查工具。

SMV工具是根据“符号模型检查”的原理开发,目的是通过对符号模型对软件的性能进行检查,随着SMV工具功能的不断完善,SMV工具已经被广泛应用于软件有限状态的检查。本节将上述模型检查算法利用SMV语言的形式表达,构建SMV模型检查工具,完成嵌入式软件构件化分析与验证,具体步骤如下所述:

一个完整的SMV模型检查工具由两个部分构成,分别为:一个状态转换系统;一个CTL公式组,能够准确描述嵌入式软件的属性。通过这两个部分可以将嵌入式软件的构件化验证过程描述为一个二叉树BDD的形式。SMV模型检查工具只需要对嵌入式软件二叉树BDD的运行状态进行搜索,将搜索结果进行逐一判定,判定后输出的结果分为:正确和错误,即为模型检查算法对嵌入式软件构件化的验证结果,实现了嵌入式软件的构件化验证。

2.3 部分代码设计

利用SMV模型检查工具对嵌入式系统的构件化进行验证与分析,部分程序如下所述:

3 实验结果及分析

3.1 实验环境设置

为了验证改进算法在嵌入式软件构件化验证方面的有效性,需要进行仿真实验。嵌入式软件构件化分析与验证的运行环境为:Windows 7操作系统,利用Ratio⁃nal Rose 2003生成MDL文件;以嵌入式软件的非功能性设计要求为依据,对改进算法和传统算法的性能进行比较。研究表明,资源的占用程度、投影路径中非法信息检验、能耗行为的路径是嵌入式软件构件化的具体属性,本文以手持PDA为例,以这三个属性为目标,对手持PDA软件进行构件化验证。

3.2 不同算法下仿真实验结果及分析

首先利用上述获得的SMV模型检查工具对PDA的通信的驱动程序和信息交互序列的驱动程序运行资源的占用情况进行检验。这两种驱动程序包含三类资源,分别为r1,r2和r3,软件在进行状态转换过程中需要占用的资源数量和资源种类利用向量进行描述,例如,<[r1,6],[r2,4]>表示嵌入式软件在进行不同状态转换的过程中需要占用6个r1资源和4个r2资源。手持PDA中软件的通信程序驱动和信息交互序列的驱动程序构成的状态转换空间包括6种状态,分别为(s0|s0),(s1|s1),(s2|s1),(s3|s1),(s4|s1)、(s5|s1)。

3.2.1 不同算法下嵌入式软件运行资源的占用情况验证

首先利用不同算法对手持PDA软件进行资源的占用情况方面验证,以验证软件在状态转换的过程中需要占用的资源是否满足设计要求。利用传统算法进行验证结果表明:传统算法只能检测出软件在状态转换的过程中需要占用的资源种类为3种,但不能检测出具体的资源名称和占用资源的数量;而利用改进算法进行验证结果表明:手持PDA通信的驱动程序在进行转换的过程中有一个资源处于非法状态,即(s4|s1),该程序在进行状态转换的过程中需要的资源为[r1,2],[r2,5],[r3,3]。(s4|s1)状态在转换的过程中对资源r2的需求量为5,而在实际程序中r2的资源总的数量为4,因此可推出该状态在转换的过程中有1个资源不符合设计要求,体现了改进算法的巨大优势。

3.2.2 不同算法下嵌入式软件运行中投影路径中非法信息检验验证

为了进一步验证改进算法的有效性,本文以PDA中信息交互序列的驱动程序为例,对信息交互过程中投影路径中的非法信息进行检验。结果表明,利用传统算法进行投影路径中非法信息检验,没有搜索出对应的投影路径中存在的非法信息;而改进算法结果表明:PDA在进行信息交互的过程中,在组合状态空间内存在一个与信息交互行为相对应的投影路径,但是该路径存在一个非法状态(s2|s1),占用资源[r2,r3],表明在此信息交互行为的状态下,嵌入式软件系统不满足设定的资源限制条件,需要PDA软件的编写者对软件进行及时修改,以保证嵌入式软件的安全性。嵌入式软件的非法信息验证界面如图2所示。

3.2.3 不同算法下嵌入式软件运行中能耗行为的路径比对验证

在PDA中,为了对比不同算法在嵌入式软件能耗行为的路径方面的验证性能。利用不同算法对PDA非功能性的能耗行为的路径进行检验。首先搜索出满足非功能性行为的路径共19条。然后利用不同算法对这19条路径消耗的能耗进行对比。

实验结果为:实际情况下所有有路径中最大能量为44.6,对应的投影路径为s0|s0(0,0)2.9→s1|s1(0,0)5.5→s2|s1(0,2)4.1→s3|s1(0,4)5.4→s4|s1(0,7)5.6→s5|s1(0,9)4.8,改进算法下所有路径中最大能量为46.3,对应的投影路径为s0|s0(0,0)2.9→s1|s1(0,0)5.5→s2|s1(0,2)4.1→s3|s1(0,4)5.4→s4|s1(0,7)5.6→s5|s1(0,9)4.8;传统算法下最大能量为29.7,对应的投影路径为s0|s0(0,0)2.8→s1|s1(0,0)5.5→s2|s1(0,1)4.0→s3|s1(0,3)5.3→s4|s1(0,5)5.3→s5|s1(0,9)4.7。通过仿真实验表明,传统算法与实际的能耗值相差较大,并且对应的投影路径不一致;而改进算法与实际的能耗最为接近,并且对应的投影路径一致,充分体现了改进算法在嵌入式软件能耗行为的路径设计验证方面的优越性。

4 结语

针对传统算法存在的缺陷,提出一种基于模型检查的嵌入式软件构件化分析与验证方法。利用SMV检查工具对嵌入式软件运行状态进行分析与检验,实现对嵌入式软件的分析与验证。仿真表明,改进算法能够对嵌入式软件构件化的非功能性方面的设计要求进行准确分析与验证,为嵌入式系统安全稳定的运行提供了保障。

摘要:对嵌入式软件构件化进行准确分析与验证,能够为嵌入式系统安全、稳定的运行提供保障。提出一种基于模型检查的嵌入式软件构件化分析与验证方法。设计一种用于检查软件构件的模型,为嵌入式软件构件化分析与验证提供理论基础;将嵌入式软件系统模型用SMV语言的形式表达,利用SMV模型检查工具实现对嵌入式软件运行状态的分析与检验。实验结果表明,该模型能够对嵌入式软件构件化的非功能性方面的设计要求进行准确分析与验证,为嵌入式系统安全稳定的运行提供了保障。

关键词:模型检查,嵌入式软件,构件化,SMV

参考文献

[1]王锋,张弛.构件化嵌入式软件设计模型验证工具的研究[J].通讯世界,2014(21):36.

[2]王博,白晓颖,贺飞.可组合嵌入式软件建模与验证技术研究综述[J].软件学报,2014,25(2):234-253.

[3]符宁,杜承烈,李建良,等.AADL分级调度模型的分析与验证[J].计算机研究与发展,2015,52(1):167-176.

[4]胡宁,叶宏.嵌入式操作系统的形式化验证方法[J].航空计算技术,2015(2):96-100.

[5]白海洋,李静,赵娜.基于时间自动机的嵌入式软件模型可调度性验证[J].计算机工程与科学,2013,35(3):121-127.

[6]赵竞雄.嵌入式系统威胁与风险评估过程仿真分析[J].计算机仿真,2014,31(4):295-298.

[7]黄传林,黄志球,胡军,等.基于扩展Sys ML活动图的嵌入式系统设计安全性验证方法研究[J].小型微型计算机系统,2015(3):408-417.

[8]谢开斌,陈海明,崔莉.物联网软件体系结构中的感执模型的求精[J].软件学报,2014,25(8):1659-1670.

[9]王诚.硬件构件化的嵌入式底层构件开发技术分析[J].中国科技博览,2013(9):134.

构件化软件开发 篇8

基于构件的软件开发方法[1],其思想是使软件能够像硬件那样,通过各部分的动态组装完成整个应用系统的功能。基于构件的软件工程CBSE(Component Based Software Engineering)逐渐成为软件开发的主流模式[2],已成为近几年学术界和产业界共同关注和研究的热点。

1 构件模型

相对于传统对象而言,构件将抽象程度提到一个更高的层次,整个构件隐藏了具体的实现,只用接口提供服务。这样,构件可以将底层的多个逻辑组合成高层次上的粒度更大的新构件,甚至直接封装到一个系统中,使模块的重用从代码级、对象级、架构级到系统级都可能实现[3,4,5]。

1.1 构件模型

为了在后期使用构件时能够快速检索到需要的构件,必须对构件进行分类。构件可以使用多种分类方法。本系统先将构件分为原子构件Ca和复合构件Cc两大类,原子构件是不能再分的构件,复合构件是由原子构件或复合构件组成的构件。

原子构件可表示为Ca=(IDa,Na,Ta,Ia,Oa,Ma,Da),其中,IDa为原子构件唯一标识;Na为原子构件名称;Ta为原子构件类型集合(包括子类型集合),父类型和子类型用树形结构表示;Ia为原子构件输入接口集合(包括各接口的名称、参数、参数类型);Oa为原子构件输出接口集合(包括各接口的名称、参数、参数类型);Ma为原子构件消息集合;Da为原子构件描述信息(包括构件存储路径、索引关键字、功能描述、编写语言、作者、制作日期、版本)。

复合构件可表示为Cc=(IDc,Nc,Tc,Ic,Oc,Mc,Dc,IDas,Ras),其中,IDc为复合构件唯一标识;Nc为复合构件名称;Tc为复合构件类型集合(包括子类型集合),父类型和子类用树形结构表示;Ic为复合构件输入接口指针集合,该指针指向组成复合构件的原子构件对应输入接口;Oc为复合构件输出接口指针集合,该指针指向组成复合构件的原子构件对应输出接口;Mc为复合构件消息集合;Dc为复合构件描述信息(包括构件存储路径、索引关键字、功能描述、编写语言、作者、制作日期、版本);IDas为组成复合构件的原子构件IDa集合;Ras为组成复合构件的原子构件的连接关系。

原子构件和复合构件又可以根据功能划分为界面构件、通信构件、数据库构件、业务构件等。其中,每一类构件又可细分为很多子类。构件粒度越小,复用度越高,构件耦合度越低,但构件库中构件的数量也会随着粒度的变小而剧增,这会给构件的检索带来不便。因此,应根据具体需求,把握好构件的粒度。可参考式(1)[6]:

其中,C为某构件,G为该构件的粒度,μ为构件C所聚集的某一用例,B(μ)为该用例的活动图中的分支数,A(μ)为该用例活动图中的活动数,α为分支数所占的权重比例,β为活动数所占的权重比例。根据实际应用经验可以认为,对于一般的业务用例,合理的α值为0.6,β值为0.4。但是,对于某些分支条件很多(大于7)的业务用例,α值提高为0.7,β值降低为0.3,以更好地反映实际特征。

1.2 基于构件的软件开发过程

面向构件的软件开发过程如图1所示。具体描述如下:

(1)总体设计者对业务系统进行需求分析后得到功能需求和框架需求。

(2)构件分析者根据功能需求进行构件需求分析后得到构件需求;同时框架实现者根据框架需求对系统框架进行实现。

(3)构件实现者根据构件需求对构件进行实现,并经过严格测试和修改后得到合格的构件。

(4)构件库管理者可以将新制作的构件注册入库,为了能快速检索到构件,构件入库时必须对其信息进行精确全面的描述。本文使用XML描述构件信息,并使用XML Schema对构件描述文档进行合法性检验,只有描述合法的构件才可以入库,从而确保构件描述信息的一致性和完整性。构件库管理者可以对构件库中的构件进行删除、注销、检索等操作。

(5)构件组装者根据具体需要从构件库中检索需要的构件,并在系统框架下进行组装后形成应用系统,构件组装者还负责对应用系统的测试与维护。

(6)应用系统交付用户使用并提出修改意见与建议,构件组装者再根据用户需求进行修改。

2 基于构件的软件框架

面向构件的软件开发过程中,构件组装和运行需要特殊的环境,这种特殊的运行环境称为框架。一个框架由一些规则、建议和习惯组成,它们从构件的角度定义了一个系统结构,并定义了系统的各组成部分之间是如何通信和实现互操作的。因此,设计框架时,必须自己定义构件及框架的规范,使用者只有遵循这些规范,才能将构件集成到框架中。本系统框架包括构件组装框架和构件运行框架两部分,这两个框架由系统框架管理器管理,以确保系统在某一时刻,只能处于其中一个框架下。系统处于构件组装框架时,可实现构件组装、功能模块组装、应用系统集成、应用系统修改、应用系统功能扩展等功能。系统处于运行框架时,能够完成相应的业务处理功能,但不能对其进行配置。基于构件的软件框架结构如图2所示。

2.1 构件组装框架

传统的构件组装大多使用代码方式调用构件接口,此方式比较复杂。本框架提供一种图形化的构件组装界面,开发者可以轻松高效地集成新的应用系统或对已有系统进行扩展。

如图2所示,构件组装框架主要包括构件制作工具、构件测试工具、构件库管理工具、构件组装工具、模块管理工具、模块组装工具。其中,制作工具、构件测试工具只提供简单的构件制作和测试功能,构件实现者可以选择市场上其他工具进行构件制作及测试;构件库管理工具具有构件注册、注销、删除、检索等功能,模块管理工具具有模块注册、修改、删除、检索等功能,这两个工具实现起来相对简单;构件组装和模块组装时生成对应的XML配置文档,通过这些XML配置文档将构件粘合成应用系统。本文使用的XML配置文档主要包括:(1)构件描述文档:对构件信息进行描述,以便使用构件时能方便获取构件信息;(2)构件适配文档:对构件接口连接关系进行描述;(3)模块适配文档:对模块之间以及构件和模块之间连接关系的描述;(4)菜单适配文档:将菜单与对应业务模块绑定,以便用户点击对应的菜单时,触发该功能模块运行。组装时,通过这些XML配置文档,将构件组装成子模块、功能模块直至整个综合测试系统,需要时查找模型中相应的标签位置并灵活插入,这样在对系统修改时,只需要修改相应的构件,其他部分不受影响。此方法支持系统的快速开发和修改,具有较高的灵活性和较好的可扩展性,达到了令人满意的伸缩性。

在组装时,构件组装者根据应用系统的需求检索相关构件,如果构件库中无此构件,则必须制作相关构件并放入构件库中,再将检索到的构件通过构件组装工具进行组装。为了不使应用系统在组装过程中太复杂,先将构件组装成业务构件,再将业务构件组装成功能模块,最后将功能模块组装成应用系统。

2.1.1 构件组装

构件组装工具的核心是解决构件适配问题。大多数情况下,使用不同语言制作的构件都需要做某种方式的修改以便与其他构件相匹配,这个过程称为构件适配,适配方法有白盒法、黑盒法和灰盒法。文献[7]对三种方法的技术、特点和实现的难易程度进行了分析,结论是采用灰盒法既可以实现构件组装的灵活性,又不至于使适配技术过于复杂。本文在对各种灰盒法的适配技术进行比较后,采用基于连接器的适配技术。此方法将构件功能的实现与其交互作用的实现相分离,从而增加构件组装的可配置性,在现有技术条件下,它是实现构件动态组装的有效途径之一。

构件连接器可以表示为CL=(IDcl,Ncl,Rcls),其中,IDcl为连接器唯一标识;Ncl为连接器名称;Rcls为连接关系集合,包含有多个接口连接关系,每个连接关系Rc可表示为Rcl=(IDsc,IDdc,DTc,Dc,MSc),其中,IDsc表示源构件唯一标识,IDdc表示目标构件唯一标识,DTc表示数据类型,Dc为数据的值,MSc表示消息。

2.1.2 模块组装

通过模块组装工具可以将业务模块组装成功能模块。本文使用类似连接器的方法设计模块连接器。

模块连接器可以表示为:ML=(IDml,Nml,Rmls),其中,IDml为模块连接器唯一标识;Nml为模块连接器名称;Rmls为连接关系集合,包含有多个模块接口连接关系,每个连接关系Rml可表示为Rml=(IDsm,IDdm,DTm,Dm,MSm),其中,IDsm表示源模块唯一标识,IDdm表示目标模块唯一标识,DTm表示数据类型,Dm为数据的值,MSm表示消息。

模块连接器信息用XML适配文档进行描述,其XML schema源码如下:

2.1.3 菜单配置

菜单描述工具的主要功能是将菜单与对应功能的模块进行绑定,生成菜单适配文档。本系统菜单嵌套最多为三级,菜单适配文档可表示为FL=(IDm,IDf1,IDf2,IDf3),其中IDm表示功能模块ID,IDfi为第i级菜单ID,i=1,2,3。其源码可参考前文给出的模块适配文档XML schema源码。

2.2 构件运行框架

构件运行框架主要包括:构件调度器、构件实例化工具以及各种XML配置文档解析器。其中,配置文档解析器的功能是解析对应的XML配置文档,其实现相对简单,在此不作介绍。下面重点介绍构件调度器和构件实例化工具。

2.2.1 基于工作流控制的构件调度模型

构件调度是一个动态过程,调度之前难以知道构件运行所需要的全部信息,因此很难一次性建立构件调度模型。即使建立了模型,随着构件调度的执行,各种因素发生变化,也会使模型不能反应信息的动态变化而导致构件调度失败。

工作流技术[7,8]最初被广泛应用于解决企业的项目调度问题,现已逐渐扩展到许多领域。工作流技术可以全面描述过程的信息,在运行时能够动态监视业务过程的执行情况,因此可得到过程执行的实时信息,如:过程执行、资源利用、时间计划情况等,并能根据这些信息生成新的调度方案。因此,工作流技术可以应用于解决构件调度问题。

本文提出一种基于工作流技术的构件调度模型,模块包括:过程控制模型、公共资源服务模型、消息处理模型、工作流数据模型。各模型之间的调用关系如图3所示。

过程控制模型是构件调度模型的核心和骨架,定义应用系统所有构件的处理流程,描述构件调度问题的约束,包括模块之间以及组成模块的构件之间的逻辑关系、详细描述(执行所需的信息、资源)等。这些信息可以在构件调度过程中通过各种XML配置文档解析器解析对应的XML配置文档获取。利用这些信息可以预测并找出工作流所管理的全部过程实例之间存在的资源冲突情况。通过把产生资源冲突的过程实例按照一定的规则抽取出来就可以得到项目调度的动态模型。由于过程实例的执行情况不断变化,如某些过程实例执行结束、某些实例被终止、某些活动被挂起、某些异常出现等,因此按照一定的周期动态地从这些过程实例中所得到的过程模型也会随之不断更新,得到“最新”的调度模型,这解决了调度模型不能反映信息动态变化的问题。

公共资源服务模型定义构件调度过程中需要的公共服务资源,如数据库服务、打印服务等。

消息处理模型定义构件调度过程中的事件属性,它是一个构件向另一个构件发出的某种通知。

工作流数据模型定义了与构件调度模型执行密切相关的数据。从某种意义上讲,它确定构件执行过程状态转换的条件。

2.2.2 构件实例化

构件是动态调用的,即应用系统运行前构件都没有实例化,只有在执行过程中调用时才实例化。可以借助反射机制实现构件动态实例化。本文的构件实例化工具是在.NET平台下用C#语言实现,其关键代码如下:

3 应用实例

本文设计的基于工作流控制的构件化软件框架已经在某型设备接口测试系统中得到应用。某型设备有多种待测接口,下面以其A/D接口测试为例说明本系统的有效性。

图4为对某型设备A/D、D/A接口构件划分结果图。构件通过构件连接器组装成业务模块,业务模块通过模块连接器组装成功能模块。组装后的某型设备接口测试系统对A/D接口测试结果如图5所示。测试中,A D接口的通道13测试误差大于设定误差的最大值,未通过测试;其他接口各通道的测试误差均小于其最大误差要求,通过测试。

实践应用证明,该软件框架可以实现基于构件的应用系统的插座式组装,使其能从原子构件集成子模块、功能模块直至整个应用系统。此方法支持系统的快速开发和修改,具有较高的灵活性和较好的可扩展性,达到了令人满意的伸缩性。

针对目前大多数软件模块间耦合紧密、软件可复用性低、可扩展性差等问题。将XML、工作流和构件技术相结合,设计了图形化方式构件组装框架和构件运行框架。用户可以在构件组装框架下集成应用系统,在构件运行框架下运行组装的系统可以实现相应的业务功能。实践证明,该软件框架可以实现基于构件的应用系统的插座式组装,使其能从原子构件集成子模块、功能模块直至整个应用系统。此方法支持系统的快速开发和修改,具有较高的灵活性和较好的可扩展性,避免了软件的重复开发,节省了大量费用,达到了令人满意的伸缩性效果。

摘要:基于XML技术,采用构件化设计方式,搭建了构件组装和运行框架,并研究了基于工作流控制方式的构件动态调度策略。用户可以在构件组装框架下集成应用系统,并实现相应的业务功能。

关键词:XML,工作流,构件,接口测试

参考文献

[1]杨芙清,王千祥,梅宏,等.基于复用的软件生产技术[J].中国科学,2001,31(4):363-371.

[2]任洪敏,钱乐秋.构件组装及其形式化推导研究[JJ.软件学报,2003,l4(6):1066-1074.

[3]王强,何克清,李兵,等.基于MMF的互操作性软构件库管理模型的研究[J].计算机工程,2005,31(16):57-58.

[4]吴信永,宋东,刘飞.基于构件技术的通用ATS框架设计[J].计算机测量与控制,2008,16(2):141-143.

[5]王忠杰,徐晓飞,战德臣.基于特征的构件模型及其规范化设计过程[J].软件学报,2006,17(1):39-47.

[6]徐玮,保林,李昭原.企业信息系统业务构件研究[J].软件学报,2003,14(7):1213-1220.

[7]王志坚,费玉奎,娄渊清.软件构件技术及其应用[M].北京:科学出版社,2005.

构件化软件开发 篇9

关键词:构件化设计,嵌入式软件,软件测试,模式

0 引言

在软件工程中,为了保证软件产品的品质,软件测试是必要的环节与手段。随着嵌入式软件在军用和民用高科技项目中的广泛使用,在其发挥巨大作用的同时,其可靠性也引起了人们的关注,针对嵌入式软件的测试越来越受到重视。

为了对嵌入式软件进行自动的、实时的闭环测试,需要一个嵌入式测试平台为软件系统提供相应的测试环境,而针对不同的嵌入式软件,用来搭建的测试环境也不尽相同,为此运用构件化技术对不同的嵌入式软件进行环境设置,建立测试环境平台,以满足测试的要求。

通过构件化技术搭建的测试环境可以提供面向测试的软件系统,便于测试人员开展测试工作。同时将面向对象的软件分析设计方法中的模式应用在嵌入式测试平台搭建中能够更好的处理软件系统设计或实现中某些特殊的、重复出现的问题。嵌入式软件测试开发环境本质上是一个交互式系统,而模式是针对交互式系统的体系结构设计的比较典型的一种,它为交互式系统的软件系统的开发的应用框架提供了基础[1]。

1 构件化嵌入式测试模式

构件是系统中实际存在的可更换使用的软件形式,它实现特定的功能,符合一套接口标准并实现一组接口。一个好的系统,包括用来进行测试的系统平台,使用构件化设计能扩展测试应用的范围并且将构件化思想应用在嵌入式测试技术领域中,结合模式技术可以为特定设计环境中重复出现的问题提供了有效的解决方案,并且在此基础上可以按照软件体系结构的思想构建出具有特定属性的系统测试平台[2]。在系统测试平台的搭建过程中可以应用模式将整个过程通过语境、问题和解决方案来进行描述,其流程图如图1所示。

当前大多数的桌面软件系统是交互式系统,这类软件系统通过图形用户接口来达到与用户的高度交互,便于增强系统的可用性,通过较便利的访问方法,能使得用户快速地学习应用程序并产生结果。

交互式系统内核通常是稳定的,而用户接口经常发生改变,通常需要不断调整与用户业务过程的接口,因此内核独立于用户接口是交互式系统设计的重点。在软件模式中可以将交互式系统分为三个部分:第一部分是系统的核心功能和数据,它独立于特定的输出表达或输入方式;第二部分是向用户提供了丰富的显示信息,它可以从模型获得数据,每个模型可能有多个视图;第三部分用来处理用户的输入、视图和控制器共同构成了用户接口。

通过三个部分之间的变更传递机制保证了用户接口和模型之间的一致性[3]。该模式为交互式系统的软件系统的开发的应用框架提供了基础,它通过模型与用户接口的分离,可实现数据的多视图显示,同步化显示视图的更新,同时可实现运行期间用户接口对象的替换,为交互式系统的设计与实现提供了有效的解决方案[4]。

2 构件化测试开发仿真平台

为实现对嵌入式软件进行自动的、实时的闭环测试,嵌入式软件仿真测试平台分为两层,分层体系结构如图2所示。

测试开发环境运行于宿主机,是面向软件测试的图形化、交互式的软件系统,测试人员可以根据被测软件的要求,通过测试前对系统的各种资源进行配置,组织被测软件的输入,来驱动被测软件运行,同时实现测试过程中测试数据的实时监控、显示以及与被测软件的交互,测试结束后能够自动保存被测软件的输出结果,从而对嵌入式软件进行自动的、实时的闭环测试[5]。测试开发环境是仿真测试环境的重要组成部分。

仿真模型开发环境完成对目标系统交联设备的仿真建模。目的是建立被测软件的设备交联环境,模拟被测软件的真实运行环境完成必要的内部数据解算,通过接口仿真实现各交联设备模型与被测单元之间的数据交换。

实时内核是处理测试时实时数据的程序模块。主要任务是完成对测试任务的实时调度,测试数据的实时传递等功能。通过分析,可以确定测试开发环境的主要功能应当包括如下六个方面:1)测试文档管理;2)测试脚本开发环境;3)测试面板的搭建;4)测试环境配置;5)测试数据分析;6)日志管理。

3 构件化嵌入式软件测试开发环境设计

在构件化设计的研究基础之上可知,嵌入式软件测试的开发环境是一个面向测试的交互式软件系统,通过构件化设计的该系统可针对不同的嵌入式软件进行系统化的测试,其中包括自测与外部测试等,同时应用模式技术可使该系统能更容易的实现嵌入式的测试环境,满足被测软件功能与性能的测试。

3.1 构件构架模型创建

通过构件化的形式建立系统模型其创建重点在于通过分析软件应用领域将核心功能从设想的输入和输出行为中分离出来,其中系统内核所需的数据和功能封装在所设计的构件模型中,并通过构件的应用体现出来。

基于对嵌入式软件测试开发环境的设计与分析,可以得到整个嵌入式测试系统环境的构件图,其中构件与组件包的关系如图3所示。

从图3中可以看出,在整个嵌入式测试系统环境的搭建过程中,系统分为主要的六个构件部分,并以两个组件包为依托,通过预定义接口的形式,将测试的不同构件关联成了一个整体,形成嵌入式测试的系统平台。系统构件包括:测试文档管理构件、测试配置构件、日志管理构件、测试脚本构件,以及测试脚本开发程序组件包和测试面板组件包。

测试文档管理构件起着分级处理测试环境文档的作用,其内容包括模型接口文档、日志文档和测试配置、测试脚本文件等,能有效地组织测试工作和管理测试。

测试配置相对比较重要,主要是针对被测试的系统、测试工作的时间周期和测试过程中的输入和输出进行配置管理,这样能较好地体现出系统的通用性和可扩展性。

在测试过程中,对每项工作都要有相应的记录,因此日志管理是必不可少的,通过后台运行的监控进行对测试过程中所发生的事件进行自动捕捉,并记录测试人员在测试各个阶段中的活动。

测试脚本构件包含了测试脚本中所支持的各种测试任务的链表,表中测试任务包括测试任务的执行时间、任务的优先级特性和周期特性,以及测试人员所施加的测试动作序列的集合。测试人员根据不同测试用例要求,生成不同的测试脚本动作序列,这些测试动作序列的描述,可以由相应的处理程序编译为相应的测试指令,再通过编译器的实时解析就可以完成对被测软件自动化测试的驱动。

测试脚本开发程序组件包,是为了测试人员更方便地生成测试脚本而提供的测试脚本开发程序包,可以支持文本和图形两种方式来生成测试脚本。它依赖于测试配置构件,在生成测试脚本时需要测试配置的信息。同时提供对生成的测试脚本的语法进行检查。

测试面板开发程序组件包,提供了以图形方式建立的测试面板,其中包括数据的显示,便于用户在测试开发过程中监视、查看测试过程。同时也允许用户在测试过程中,实时地添加一些测试命令,完成用户与被测软件的交互。通过在测试开发环境中提供一组封装的控件,允许用户采用图形化配置的方式来搭建测试面板。它依赖于测试配置构件,在搭建面板时需要测试配置的信息。

通过构件化设计的嵌入式测试平台提供了对测试结果进行数据收集,并将收集到的数据进行分析的功能,能够实现测试过程的回放,以及测试结果数据的过滤、查询、比较和图形化显示,从而减轻测试人员的负担,提高了测试结果数据分析的效率和准确性。

3.2 整体框架建模

在整个测试系统的框架中,将构件的运行环境与测试平台通过组件的形式相交互,所有的已开发的构件都存储在一个构件库中,由构件库来统一管理构件。根据测试的需要在构件库中搜索符合需求的构件,来搭建测试系统平台。在搭建过程中,通过进行性能、安全和有效性的测试,选出用于测试系统的理想构件。如图4所示。

在测试系统的设计上只需考虑构件之间的接口,在不同构件之间定义好合适的业务分割平衡点就可以通过高内聚、低耦合的功能构件,组成满足嵌入式测试需求的业务构件,从而能较好的适应不同嵌入式软件测试的需要。

4 结语

本文将构件化设计与模式应用在嵌入式软件测试开发环境中,并对其进行了分析和设计,为软件系统的开发提供了强有力的支撑,提高了软件系统的可复用性和适应性。构件化技术作是测试环境的重要组成部分,有效的测试开发环境为实现针对嵌入式软件的实时、闭环的系统测试提供了保证。

参考文献

[1]Fontoura M,Pree W,Rumpe B.The UML profile for frameworkarchitectures[M].Pearson Education Limited,2001.

[2]Tsai W T,Na Y,Paul R,et al.Adaptive scenario-based object-o-riented test frameworks for testing embedded systems[C]//26thAnnual International on Computer Software and Applications Con-ference,Oxford,England,2002:321-326.

[3]王益,耿相铭,陈慧.嵌入式测试系统设计[J].计算机工程,2008,34(18):237-238.

[4]王轶辰,徐萍.嵌入式软件机内测试的设计与测试[J].计算机工程,2009,35(17):34-39.

上一篇:电子信封下一篇:计算机基础教育课程