一种基于形式化及统一软件模型的软件可信工程方法

文档序号:6354974阅读:322来源:国知局
专利名称:一种基于形式化及统一软件模型的软件可信工程方法
技术领域
本发明以可信软件开发过程作为主要对象,搭建了结合形式化方法的软件工程理 论体系,改进了现有软件工程非形式化的本质不足,并引入缺陷检测机制,在软件设计阶段 检测并缓和缺陷,属于软件可信领域,特别涉及一种基于形式化及统一软件模型的软件可 信工程方法。
背景技术
随着计算机应用的不断发展,在信息社会中发挥着至关重要的作用。但是软件 的生产现状不能令人满意,软件安全事故、软件质量问题和软件扩展问题已经带来了巨大 的损失。国内外专家及行业巨头已经将软件的可信性作为软件的一个重要属性。软件系 统的可信性质,具体为软件系统需要满足的关键性质,当软件系统一旦违背这些关键性质 会造成不可容忍的损失时,称这些关键性质为高可信性质。其中高可信性质包括可靠性 (reliability)、可靠安全性(safety)、保密安全性(security)、生存性(survivability)、 机密性(confidentiality)、完整性(integrity)和可维护性(maintainability)等。软件 的可信性问题自软件开发以来久已存在。人们在软件工程的实践中从需求分析方法、设计 和测试多个方面提出了一些方法来试图从开发的角度获得和评估软件的这些性质。例如, 在需求分析中软件安全性分析技术,在软件设计中的软件容错技术,在软件测试中的软件 可靠性测试技术。并且,国际上已经开始将软件过程模型与可信软件开发联系起来。例如, 面向可靠性的净室软件工程法、面向安全性的软件开发过程中错误发生机制与软件性质定 量预测模型。形式化方法是一种经实践证明的高质量软件的构建方法,构建可信软件的一种公 认的关键技术。形式化方法最主要的优点为可以进行形式化推理和证明。形式化验证就是 在形式化规约的基础上建立软件系统及其性质的关系,即分析系统是否具有所期望性质的 过程,主要分有两种途径模型检验和定理证明。模型检验是通过搜索待验证软件系统模型 的有穷状态空间来检验系统的行为是否具备预期性质的一种有穷状态系统自动验证技术。 定理证明是将软件系统和性质都用逻辑方法来规约,通过基于公理和推理规则组成的形式 系统,以如同数学中定理证明的方法来证明软件系统是否具备所期望的关键性质。基于定 理证明的形式化验证技术可以看作是以软件系统为公理获得其性质的证明过程。软件安全性是软件可信性的一个重要方面,软件安全缺陷是软件自身的一种内在 属性,是安全问题的根源,被攻击者恶意利用后形成软件攻击,造成巨大的损失。软件的安 全缺陷主要分成两大类,包括软件设计阶段引入的缺陷和软件实现阶段引入的缺陷。在软 件开发生命周期中,设计阶段安全缺陷的发现和修正非常重要,因为修改设计模型消耗的 成本远远小于修改软件成品消耗的成本。目前有大量的工具和方法致力于检测和消除软件 实现阶段的安全缺陷,但是,软件设计阶段安全缺陷检测方法和工具却并不成熟。因此,有 必要对设计阶段引入的安全缺陷进行分析和研究,包括缺陷的内部机制,产生原因等,抽象 软件缺陷的本质结构,进而基于此结构进行形式化建模,构建安全缺陷知识库,使计算机能够自动处理此类缺陷。

发明内容
为了解决传统软件工程的不足,本发明提供了一种基于形式化及统一软件模型的 软件可信工程方法,所述方法包括以下步骤(1)基于形式化语言、传统UML视图,构建包含软件需求设计信息、软件实现信息 和运行环境信息的统一软件模型;(2)根据软件可信工程技术架构,进行所述统一软件模型的一致性和有效性验证, 并自动生成单元测试实例;(3)构建基于所述统一软件模型的软件安全缺陷知识库;(4)基于所述软件安全缺陷知识库,通过定理证明机,发现所述统一软件模型中潜 在的软件安全缺陷;并根据所述潜在的软件安全缺陷给出相应的缓和方案。所述统一软件 模型包括需求部分、设计部分和实现部分,其中,所述需求部分由UML用例图、活动图和状态图组成,所述活动图和所述状态 图作为所述UML用例图的补充,描述需求中的动态信息;所述设计部分由顺序图与形式化 语言组成,以功能单元为最小单位,所述顺序图作为框架,描述了完成预设功能需要调用的 相应功能单元及调用规则;所述形式化语言通过形式化的描述增加了功能单元的语义信 息;所述实现部分由实现功能单元的程序设计语言代码单元组成,且满足所述形式化语言 描述。所述软件可信工程技术架构包括所述统一软件模型、模型验证模块、单元测试模 块、缺陷检测模块、安全知识学习模块、软件可信评估模块和软件安全知识库,其中,所述统 一软件模型贯穿于可信软件生命周期的各个阶段,为其他模块提供了不同层面的形式化语 义信息;所述模型验证模块针对所述统一软件模型中的所述顺序图与所述形式化语言,对 软件设计进行一致性、有效性验证;所述单元测试模块通过功能单元的形式化语言自动生 成所述单元测试用例;所述缺陷检测模块使用所述软件安全知识库中存储的形式化缺陷信 息,查找设计阶段的安全缺陷;所述安全知识学习模块从外界半自动学习安全知识,更新所 述软件安全知识库;所述软件可信评估模块量化评估软件的可信度。步骤(3)中的所述构建基于统一软件模型的软件安全缺陷知识库具体包括根据CWE中的安全缺陷进行安全缺陷分析,抽象软件安全缺陷基本结构;对所述软件安全缺陷基本结构进行形式化建模,构建安全缺陷形式化模型;根据所述安全缺陷形式化模型,构建所述软件安全缺陷知识库。本发明提供的技术方案的有益效果是本发明提供了一种基于形式化及统一软件模型的软件可信工程方法,该方法通过 结合传统软件工程、软件建模方法和形式化方法,互补了各自方法的不足之处,提出了基于 形式化及统一软件模型的软件可信工程方法。统一软件模型是软件可信工程的核心理论, 通过将UML视图的直观性、结构性等优点与形式化语言结合,解决了 UML视图的二义性和语 义的不充分等缺点,同时降低了形式化语言在大型项目中的复杂度,提升其可读性和可维 护性;模型验证模块针对统一软件模型中的顺序图及其形式化语言扩展部分,对软件设计 进行形式化的一致性、有效性验证,发现软件设计中存在的错误、矛盾,能够有效的提升软件的质量;缺陷检测模块基于软件安全知识库,对统一软件模型中的设计部分进行形式化 的安全性验证,该过程能够发现软件设计中存在的安全隐患,有效的提升软件的安全性;单 元测试模块能够在保证代码质量的同时,确保软件设计与实现的一致性;各部分协同工作 在模型运行时引擎上,本方法有效的提高了软件质量、消除了设计缺陷、降低了开发成本和 提高了可维护性等有益效果,解决了传统软件工程的不足。


图1为本发明提供的基于形式化及统一软件模型的软件可信工程方法的流程图;图2为本发明提供的统一软件模型的结构示意图;图3为本发明提供的软件可信工程技术架构的结构示意图;图4为本发明提供的软件安全缺陷知识库构建过程的示意图;图5为本发明提供的软件安全缺陷抽象结构的示意图;图6为本发明提供的软件安全缺陷的Z规格描述示意图;图7为本发明提供的安全性验证的原理图;图8为本发明提供的用例图示意图;图9为本发明提供的Use Case 1的顺序图;图10为本发明提供的op_A函数的Z规格描述示意图;图11为本发明提供的op_A函数的JAVA代码描述意图;图12为本发明提供的一致性验证证明责任的Z规格描述示意图;图13为本发明提供的初始化定理的Z规格描述示意图;图14为本发明提供的前置模式定义的Z规格描述示意图;图15为本发明提供的前置模式定理的Z规格描述示意图;图16为本发明提供的软件安全缺陷知识库基本结构示意图;图17为本发明提供的Z规格基础框架中的事件和系统安全状态的Z规格描述示 意图;图18为本发明提供的操作模式的Z规格描述示意图;图19为本发明提供的顺序图的Z规格定义的示意图;图20为本发明提供的缺陷检测定理的Z规格描述示意图;图21为本发明提供的定理WeakneSS_deteCti0n_l的证明结果的示意图;图22为本发明提供的定理WeakneSS_deteCti0n_2的证明结果的示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方 式作进一步地详细描述。为了解决传统软件工程的不足,本发明实施例提供了一种基于形式化及统一软件 模型的软件可信工程方法,参见图1,详见下文描述101 基于形式化语言、传统UML视图,构建包含软件需求设计信息、软件实现信息 和运行环境信息的统一软件模型;其中,形式化语言本发明实施例以Z语言为例进行说明,具体实现时,还可以为其他的形式化语言,本发明实施例对此不做限制。其中,通过该步骤将软件的整个开发过程(包括需求分析、设计、实现、测试、部署 和维护)转变为统一软件模型的演化过程。参见图2,根据软件生命周期的定义,统一软 件模型包括需求部分、设计部分和实现部分,其中,需求部分由UML用例图、活动图和状态 图组成,活动图和状态图作为UML用例图的补充,描述需求中的动态信息;设计部分由顺序 图与形式化语言组成,以功能单元为最小单位,顺序图作为框架,描述了完成预设功能需要 调用的相应功能单元及调用规则;形式化语言通过形式化的描述增加了功能单元的语义信 息;实现部分由实现功能单元的程序设计语言代码单元组成,且满足形式化语言描述。102:根据软件可信工程技术架构,进行统一软件模型的一致性和有效性验证,并 自动生成单元测试实例;其中,参见图3,软件可信工程技术架构包括统一软件模型、模型验证模块、单元 测试模块、缺陷检测模块、安全知识学习模块、软件可信评估模块和软件安全知识库,其中, 统一软件模型贯穿于可信软件生命周期的各个阶段,为软件可信工程体系中的其他模块提 供了不同层面的形式化语义信息;模型验证模块针对统一软件模型中的顺序图与形式化语 言,对软件设计进行一致性、有效性验证;单元测试模块通过功能单元的形式化语言自动生 成单元测试用例;缺陷检测模块使用软件安全知识库中存储的形式化缺陷信息,查找设计 阶段的安全缺陷;安全知识学习模块从外界半自动学习安全知识,更新软件安全知识库; 软件可信评估模块量化评估软件的可信度。统一软件模型运行时,引擎构建在JAVA虚拟机 之上的一个用于加载、运行统一软件模型的容器,构成软件的后台部分。该步骤将形式化方法融入传统软件工程,即在设计部分使用形式化语言形式化语 言,丰富传统软件工程方法中设计部分的顺序图的语义信息,继承了形式化模型可验证、无 二义性和语义信息丰富的优点。避免了传统软件工程人为不确定因素,实现了统一软件模 型的一致性和有效性验证、安全缺陷的形式化检测、单元测试用例生成;并结合UML视图的 直观性和结构性,一定程度上降低了形式化模型在大型项目中较高的复杂度。103 构建基于统一软件模型的软件安全缺陷知识库;通过该步骤在一定抽象层次上对软件缺陷结构进行分析,给出软件安全缺陷的本 质结构,并抽取缺陷相关数据类型和操作类型,细化系统行为与安全约束,给出安全缺陷的 形式化模型,将其存储在数据库中,为设计阶段安全缺陷的自动检测与缓和奠定基础。其中,参见图4和图5,该步骤以通用缺陷列表CWE(C0mm0n WeaknessEnumeration)为数据来源,分3个主要步骤进行构建,具体为1、根据CWE安全缺陷进行安全缺陷分析,抽象软件安全缺陷基本结构;其中,CffE安全缺陷存在自然语言描述二义性和模糊性,开发人员难以掌握。2、对软件安全缺陷基本结构进行形式化建模,构建安全缺陷形式化模型;该步骤中获取到的安全缺陷形式化模型精确、无二义性,计算机可以直接处理,满 足了实际应用中的需要。3、根据安全缺陷形式化模型,构建软件安全缺陷知识库。抽象软件安全缺陷基本结构由系统行为和安全约束两个基本元素组成,当系统行 为违反了安全约束时,软件安全缺陷成立。因此,可以将系统行为、安全约束和安全缺陷都 形式化为顺序图及其上的操作序列。其中,安全缺陷是缺少某些关键行为的序列。在此基础上,可以进一步将安全缺陷用形式化语言描述,详见下文描述,最后,将形式化后缺陷和 相应的缓和方案存入知识库中,软件安全缺陷的Z规格描述示意图参见图6。104:基于软件安全缺陷知识库,通过定理证明机,发现统一软件模型中潜在的软 件安全缺陷;并根据潜在的软件安全缺陷给出相应的缓和方案。其中,定理证明机本发明实施例以Z规格定理证明机为例进行说明,具体实现时, 还可以为其他形式的定理证明机,本发明实施例对此不做限制。参见图3和图7,缺陷检测 模块实现统一软件模型的安全性验证,它使用统一软件模型中的Z规格描述,基于软件安 全缺陷知识库,通过Z规格定理证明机,发现统一软件模型中潜在的软件安全缺陷,实现了 在设计阶段的软件安全缺陷的形式化检测进行形式化的推理,并且和软件安全缺陷知识库 中的形式化缺陷进行比对,以此来查找潜在的软件安全缺陷,并给出相应的缓和方案。通过该步骤避免了在软件生命周期的后期发现软件安全缺陷,需要付出非常高昂 的缓和成本;并且降低了软件安全性保障对安全专家的个人经验和知识的依赖。下面以一个具体的实施例来说明本发明实施例提供的一种基于形式化及统一软 件模型的软件可信工程方法的可行性,详见下文描述首先建立统一软件模型,需求分析绘制的用例图如图8所示,假设一个系统包含 Use Case 1和he Case 2两个用例,这两个用例需通过顺序图的细化,图9为he Case 1 的顺序图。在这个用例中,用户首先在网页中输入了一个参数,即strjnput,然后提交了该 页面,该页面的客户端部分(由HTML和Javascript构成)与网站后台交互,将str_input 这个参数通过HTTP信道传回,后台将该参数作为输入执行函数op_A并最终返回页面。接 下来通过Z规格来补充顺序图的语义信息,参见图10。可以看出,op_A函数返回了自己的参数,没有做任何操作。前缀op表示该函数是 由设计人员所设计,并需要开发人员通过编程语言来实现;最后,由开发人员按照Z规格描 述,用程序语言代码实现函数,参见图11。统一软件模型的形式化模型验证包括一致性验证和有效性验证。一致性验证对每 个操作模式进行满足不变式与否的检查,其证明责任参见图12。统一软件模型的有效性验证包括状态模式的有效性验证和操作模式的有效性验 证。对于系统的所有状态模式,都应该存在一个初始状态,否则此状态模式是无意义的。因 此,状态模式的有效性验证即是状态模式初始状态是否存在的验证,其证明责任为初始化 定理,参见图13。操作模式的有效性验证是一个操作模式是否满足其前置模式的验证,其证 明责任是前置模式定理,前置模式定义参见图14,前置模式定理Z规格描述参见图15。根据统一软件模型的Z规格描述和以上3个证明责任,即可使用软件可信工程方 法中的模型检测模块,自动化的完成软件模型的一致性和有效性验证。根据上述描述的基 本步骤和技术方案,构建如图16所示的软件安全缺陷知识库,软件安全缺陷知识库中存储 了安全缺陷基础信息、安全缺陷形式化模型、安全缺陷相关扩展、缺陷自动检测支持数据等 内容。为使缺陷检测能够顺利进行,首先要定义资源,即一个顺序图中的与安全相关的各种 元素,其Z规格定义方式如下所示Resource:Resourcel|Resource2|Resource3之后还要定义Z规格框架中的事件和系统安全状态。其中事件类型用行为来表 征;事件由事件类型和所作用的资源构成;安全状态由一系列事件所组成的序列构成,参见图17和图18。下面,利用操作模式的复合建立两个顺序图的Z规格描述,分别为sdl和sd2,参见 图19。最后,使用缺陷检测模块中Z规格定理证明机来检验两张顺序图是否存在缺陷,即检 查由顺序图的Z规格描述是否能推出缺陷库中的缺陷。检测定理如图20所示。对于第一条定理,即theorem weakness_detection_l通过Z/EVES的规约证明 (prove by reduce),得到结果如下所示,通过简单的计算,可以发现n2存在并且等于2,这 就说明对于sdl不存在Wfeakness这个缺陷,参见图21。第二条定理,即theorem weakness_detection_2的结果中并没有包含n2,这就说 明Z/EVES并没有找到n2的值,即n2不存在,缺陷flfeakness存在于sd2中,参见图22。根据缺陷检测的结果,就可以知道设计中是否存在缺陷,如果不存在缺陷,如sdl, 即可由开发人员根据功能单元的Z规格描述进行代码实现;如果有缺陷存在,如sd2,则可 按照系统返回的缓和方案对设计进行改进,从而达到在软件开发之初便发现、控制、规避安 全缺陷,降低软件的开发和维护成本,提高软件的可信性。综上所述,本发明实施例提供了一种基于形式化及统一软件模型的软件可信工程 方法,该方法通过结合传统软件工程、软件建模方法和形式化方法,互补了各自方法的不足 之处,提出了基于形式化及统一软件模型的软件可信工程方法。统一软件模型是软件可信 工程的核心理论,通过将UML视图的直观性、结构性等优点与形式化语言结合,解决了 UML 视图的二义性和语义的不充分等缺点,同时降低了形式化语言在大型项目中的复杂度,提 升其可读性和可维护性;模型验证模块针对统一软件模型中的顺序图及其形式化语言扩展 部分,对软件设计进行形式化的一致性、有效性验证,发现软件设计中存在的错误、矛盾,能 够有效的提升软件的质量;缺陷检测模块基于软件安全知识库,对统一软件模型中的设计 部分进行形式化的安全性验证,该过程能够发现软件设计中存在的安全隐患,有效的提升 软件的安全性;单元测试模块能够在保证代码质量的同时,确保软件设计与实现的一致性; 各部分协同工作在模型运行时引擎上,本方法有效的提高了软件质量、消除了设计缺陷、降 低了开发成本和提高了可维护性等有益效果,解决了传统软件工程的不足。本领域技术人员可以理解附图只是一个优选实施例的示意图,上述本发明实施例 序号仅仅为了描述,不代表实施例的优劣。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和 原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种基于形式化及统一软件模型的软件可信工程方法,其特征在于,所述方法包括 以下步骤(1)基于形式化语言、传统UML视图,构建包含软件需求设计信息、软件实现信息和运 行环境信息的统一软件模型;(2)根据软件可信工程技术架构,进行所述统一软件模型的一致性和有效性验证,并自 动生成单元测试实例;(3)构建基于所述统一软件模型的软件安全缺陷知识库;(4)基于所述软件安全缺陷知识库,通过定理证明机,发现所述统一软件模型中潜在的 软件安全缺陷;并根据所述潜在的软件安全缺陷给出相应的缓和方案。
2.根据权利要求1所述的一种基于形式化及统一软件模型的软件可信工程方法,其特 征在于,所述统一软件模型包括需求部分、设计部分和实现部分,其中,所述需求部分由UML用例图、活动图和状态图组成,所述活动图和所述状态图作 为所述UML用例图的补充,描述需求中的动态信息;所述设计部分由顺序图与形式化语言 组成,以功能单元为最小单位,所述顺序图作为框架,描述了完成预设功能需要调用的相应 功能单元及调用规则;所述形式化语言通过形式化的描述增加了功能单元的语义信息;所 述实现部分由实现功能单元的程序设计语言代码单元组成,且满足所述形式化语言描述。
3.根据权利要求1所述的一种基于形式化及统一软件模型的软件可信工程方法,其特 征在于,所述软件可信工程技术架构包括所述统一软件模型、模型验证模块、单元测试模 块、缺陷检测模块、安全知识学习模块、软件可信评估模块和软件安全知识库,其中,所述统一软件模型贯穿于可信软件生命周期的各个阶段,为其他模块提供了不 同层面的形式化语义信息;所述模型验证模块针对所述统一软件模型中的所述顺序图与所 述形式化语言,对软件设计进行一致性、有效性验证;所述单元测试模块通过功能单元的形 式化语言自动生成所述单元测试用例;所述缺陷检测模块使用所述软件安全知识库中存储 的形式化缺陷信息,查找设计阶段的安全缺陷;所述安全知识学习模块从外界半自动学习 安全知识,更新所述软件安全知识库;所述软件可信评估模块量化评估软件的可信度。
4.根据权利要求1所述的一种基于形式化及统一软件模型的软件可信工程方法,其特 征在于,步骤(3)中的所述构建基于统一软件模型的软件安全缺陷知识库具体包括根据CWE中的安全缺陷进行安全缺陷分析,抽象软件安全缺陷基本结构;对所述软件安全缺陷基本结构进行形式化建模,构建安全缺陷形式化模型;根据所述安全缺陷形式化模型,构建所述软件安全缺陷知识库。
全文摘要
本发明公开了一种基于形式化及统一软件模型的软件可信工程方法,属于软件可信领域,所述方法包括以下步骤基于形式化语言、传统UML视图,构建包含软件需求设计信息、软件实现信息和运行环境信息的统一软件模型;根据软件可信工程技术架构,进行所述统一软件模型的一致性和有效性验证,并自动生成单元测试实例;构建基于所述统一软件模型的软件安全缺陷知识库;基于所述软件安全缺陷知识库,通过形式化语言定理证明机,发现所述统一软件模型中潜在的软件安全缺陷;并根据所述潜在的软件安全缺陷给出相应的缓和方案。本方法有效的提高了软件质量、消除了设计缺陷、降低了开发成本和提高了可维护性等有益效果,解决了传统软件工程的不足。
文档编号G06F21/00GK102136047SQ201110046569
公开日2011年7月27日 申请日期2011年2月25日 优先权日2011年2月25日
发明者曹坤宇, 曹燕, 李晓红, 邢金亮, 陈世展, 饶国政 申请人:天津大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1