一种基于模型的侵入式灰盒组装验证方法

文档序号:8922406阅读:591来源:国知局
一种基于模型的侵入式灰盒组装验证方法
【技术领域】
[0001] 本发明涉及一种软件工程技术,尤其是涉及一种基于模型的侵入式灰盒组装验证 方法。
【背景技术】
[0002] 基于构件的软件开发(Component-BasedSoftwareDevelopment,CBSD)是软件工 业化的大趋势。计算机软件构架由手工代码开发模式转变为重用可独立运行的、被封装的 构件模式,它具有更高的灵活性。由于复用算法和软件功能,基于构件的软件开发大大缩短 了软件系统的开发进度,尤其是在经费有限的情况下该方法是实现软件项目开发的最佳选 择。
[0003] 构件是将具有特定功能的模块或代码按照一定的格式进行封装。构件组装则是研 宄如何组装构件的机制,以需求模型为基础,查找合适的构件进行集成以快速开发系统软 件为目的。目前,构件组装技术主要分为黑盒组装方法,白盒组装方法和灰盒组装三种方 法。但各自存在优缺点:黑盒组装方法不需要对构件的实现细节有任何了解,也不需要对构 件进行配置或修改,但"以不变的构件组装成万变的应用"的理念过于现实化,实际应用难 度大。黑盒组装对功能进行抽象描述,使用户无法了解构件是如何运行的,缺乏对黑盒构件 的可信性。白盒组装方法则要求将构件的所有实现细节都展示出来,让复用者理解后再进 行组装,并可按应用需求对构件进行二次修改,但该方法需要用户对实现细节和具体需求 了如指掌,在程序可读性和可维护性方面存在应用的局限性。而灰盒组装方法介于黑盒和 白盒之间,其通过混合使用组装机制来架构系统软件实现用户组装需求,既灵活又高效。因 此,灰盒组装方法是目前构件组装技术的研宄重点和难点。
[0004] 在灰盒组装过程中,即要体现构件的部分实现细节,又要展示构件的部分模块功 能。实际上,构件组装的操作更加复杂,而且组装的正确性和安全性很难保证。涉及如下两 个主要问题:
[0005] 1)如何描述和表达灰盒组装的组装流程?包括展示部分实现细节和部分功能模 块。
[0006] 2)如何有效地对灰盒组装进行验证?包括构件组装的正确性和安全性。
[0007] 在传统的组装场景上,每个组装点的功能需求以push推的形式向构件库发出构 件检索请求,查询是否存在合适的构件,同时以pull拉的形式将目标实例构件插入到组装 点进行集成。这种方式目标明确,组合速度块。但在实际情况下,存在如下问题:
[0008] 1)由于缺少构件规格说明语言,很难正确地、形式化地描述push点的构件需求;
[0009] 2)由于构件库中的构件数量有限,很难准确地检索出满足请求的单个构件实体。
[0010] 因此需要一套系统的基于侵入式组装方式,允许构件以主动的方式进行组合以满 足目标组装点的功能需求。无论是原子构件还是复合构件,其通过一种侵入(intrusion) 的方式强行插入到组装点。虽然,侵入式组装可以弥补传统构件组装的不足,但同样存在一 些问题:
[0011] 1)从实现细节的源代码级来看,侵入式组装将增加一些无用代码或危险代码;
[0012] 2)从组装高层的工作流来看,侵入式组装将附加一些无用的接口或威胁接口。
[0013] 针对这些组装问题,一方面需要保证构件交互的正确性,即对局部而言,交互接口 中的参数,参数顺序等是兼容的;另一方面需要保证组合的构件是安全性的,即对整体而 言,不存在隐藏的威胁,不存在违反既定的需求。而模型检验作为测试的辅助手段,是一种 自动化的、基于有限状态模型的性质验证方法,它通过显式的状态搜索或隐式的不动点计 算来检测系统模型是否满足预期性质,当模型不满足性质时输出反例信息,即模型中违背 性质的状态迹。基于此,将模型检验方法应用检验基于侵入式的灰盒组装方法组装的软件, 可以有效地验证构件组装过程的正确性和安全性,保证基于构件的软件系统的软件质量。

【发明内容】

[0014] 本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于模型的侵 入式灰盒组装验证方法。
[0015] 本发明的目的可以通过以下技术方案来实现:
[0016] 一种基于模型的侵入式灰盒组装验证方法,包括步骤:
[0017] 1)流程设计:根据待开发软件的业务逻辑,设计由多个抽象构件构成的工作流模 型;
[0018] 2)实例化:根据工作流中各抽象构件的功能要求和接口信息在实例构件库中检 索,并确认是否存在匹配的单一实例构件,若为是,则将该实例构件插入至抽象构件所在位 置,若为否,则选择多个实例构件组合为复合构件并侵入至抽象构件所在位置;
[0019] 3)性质验证:转化实例化所产生的配置文件,得到适合于模型检验器NuSMV执行 的Kripke结构脚本,并基于该脚本验证构件组装过程的正确性和安全性。
[0020] 所述实例构件库的构建过程包括步骤:
[0021] A1 :将Java程序进行封装使其构件化,添加组装点,并采用反射技术解析出程序 功能的函数方法,以及组装点的接口信息;
[0022] A2 :根据反射出来的接口信息,确认接口以及接口参数,包括参数个数,参数名称, 参数类型和参数顺序。
[0023] A3 :将解析出的函数方法进行绑定,产生调用关系;
[0024] A4 :将构件化后的Java程序以XML形式保存,输出实例构件的封装文件;
[0025] A5 :将实例构件保存到实例构件库中,建立实例构件的索引信息,同时在封装文件 中标识其相关的应用领域,以提供构件组装时使用。
[0026] 所述步骤1)具体包括步骤:
[0027] 11)新建组装界面,根据待开发软件的业务逻辑绘制工作流;
[0028] 12)设计工作流上抽象构件,并描述抽象构件的接口信息和功能要求。
[0029] 13)在工作流上,标识抽象构件的构件状态,包括初始点,中间点,以及终止点。
[0030] 所述步骤2)中将单一实例构件插入至抽象构件所在位置的过程具体为:根据工 作流调用关系,绑定该实例构件与相邻抽象构件实例化得到的实例构件间的接口参数,包 括参数名称,参数类型,以及参数顺序。
[0031] 所述步骤2)中选择多个实例构件组合为复合构件并侵入至抽象构件所在位置的 过程中:
[0032] 以领域优先原则,采用启发式随机算法给出满足当前抽象构件的实例构件集合, 使得多个实例构件在组合后,既满足接口信息,又满足领域应用的要求;或
[0033] 以功能优先原则,采用相似度计算方法给出多个跨领域的实例构件集合,使得多 个实例构件在组合后,既满足接口信息,又满足领域应用的要求。
[0034] 所述步骤3)具体包括:
[0035] 31)根据实例化配置信息,输出相应的配置文件;
[0036] 32)转化配置文件,产生可用于模型检验器NuSMV执行的Kripke结构脚本;
[0037] 33)检验组装构件是否满足正确性和安全性;
[0038] 34)通过执行模型检验器NuSMV对结构脚本执行检验,根据检验结果判断组装是 否满足正确性和安全性。
[0039] 所述步骤31)具体包括步骤:
[0040] 311)新建一个配置文件,在其中写入配置信息的版本号,并描述组装构件的名称 和功能;
[0041] 312)根据配置信息的接口定义部分,解析接口信息,并将解析得到的接口信息写 入该组装构件的接口定义部分;
[0042] 313)根据工作流上的顺序关系,并发关系,互斥顺序和选择关系,解析并用于描述 构件调用关系,将调用关系写入该组装构件的工作流定义部分。
[0043] 314)使用深度搜索方式对每层的侵入式构件进行标记以区别构件之间的关系,同 时标记组装点与下层构件之间的侵入关系。
[0044] 315)对配置文件进行语法检验,确保每个抽象构件都被实例化。
[0045] 所述步骤32)具体包括步骤:
[0046] 321)根据组装构件内部的实例构件的名称信息,得到转化的状态集;
[0047] 322)根据实例构件状态,以及接口信息中的参数信息,得到实例构件的原子命 题;
[0048] 323)根据工作流上的调用关系,转化为状态迀移关系;
[0049] 324)根据状态集、原子命题和状态迀移关系,构造Kripke结构的可验证脚本。<
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1