一种基于模型检验的时序软件质量缺陷检测方法及系统的制作方法

文档序号:6601000
专利名称:一种基于模型检验的时序软件质量缺陷检测方法及系统的制作方法
技术领域
本发明涉及一种在软件源代码中检测缺陷的技术,具体讲涉及一种基于静态分析 的软件质量缺陷检测方法,属于计算机信息安全技术领域。
背景技术
随着信息技术的高速发展,软件产品(从底层的操作系统到高层的应用程序)代 码量越来越大,程序设计越来越复杂,其本身存在着大量的质量缺陷,危害着信息系统的可 用性、可靠性和安全性,因此如何检测软件程序中可能存在的缺陷成为目前信息技术领域 高度关注的热点。软件质量缺陷的检测方法很多,根据是否需要执行被测软件的角度可分为两种 一种是动态分析技术,通过实际运行程序代码来发现其可能存在的缺陷;一种是静态分析 技术,它不实际运行代码而只是通过静态地查看代码以找出潜在的缺陷。静态分析是手动或者借助自动化检测系统来对源代码或者反汇编代码清单进行 审查的方法。常用的静态分析自动化软件缺陷检测系统例如RATS、ITS4以及检查java代 码的PMD。上述自动化代码缺陷检测系统工作原理如下使用钩子函数,在遇到用户自定义 属性中的触发条件时,利用一个“钩子”来调用相应的分析函数判断是否违背了所给属性。 该方法虽然能在软件质量检测中发现缺陷,但是仍存在着明显的缺点一、不能保证缺陷发 现的完全性;二、虚假错误的缺陷报告占多数,耗费很多额外的人力、物力去进一步分析审 查;三、对于缺陷的描述能力不足,某些类型的缺陷不能够很好地被描述;四、不具有跨过 程分析的能力,对于全局性、比较微妙的缺陷,则无能为力。

发明内容
本发明目的在于提供一种基于模型检验的,分析能力强、缺陷定位准确、误报率 低、可读性高的软件质量缺陷检测方法及系统,从而满足分析各种代码缺陷的要求,达到快 速发现软件的缺陷,缩短软件开发周期,提高软件质量,节约软件开发成本的。为实现上述目的,本发明提供了一种基于模型检验的时序软件质量缺陷检测方 法,其改进在于所述方法的具体步骤如下步骤A、输入被检测源代码,并根据所述被检测源代码选择缺陷模式;步骤B、对所述被检测的源代码进行预处理;步骤C、对合并完的源代码模型进行控制流图压缩;步骤D、判断所说缺陷模式的自动机中的终止状态在所述被检测的原程序的建模 中相对应的安全模型中是否可达,如果所述终止状态可达,判断所述被检测的源代码程序 存在缺陷;如果所述终止状态不可达,则判断所述被检测的源代码程序不存在缺陷;步骤E、结果处理将步骤D中检测完的源程序代码终止状态的位置信息转换为于 原始源代码的位置信息;步骤F、输出将最终的判断结果输出显示出来供用户阅读。
本发明一种基于模型检验的时序软件质量缺陷检测方法的另一优选技术方案为 所述步骤B包括Bi、分析所述被检测的源代码文件,并生成控制流图;B2、如果所述被检测的源代码程序由多个代码文件组成,则先生成各自的控制流 图,再将控制流图文件合并成一个全局控制流图文件;B3、根据生成的控制流程图建模。本发明一种基于模型检验的时序软件质量缺陷检测方法的再一优选技术方案为 所述步骤C中压缩包括Cl、将所述被检测的源代码模型里与所述缺陷模式没有关系的内容删除;C2、将状态等价的所述源代码模型合并。本发明一种基于模型检验的时序软件质量缺陷检测方法的第四优选技术方案为 所述步骤C中所述被检测源代码根据在所述步骤A中所选择的缺陷模式进行源代码模型压缩。本发明提供了一种基于模型检验的时序软件质量缺陷检测系统,其改进在于所 述系统包括源代码模型生成器、时序缺陷模式库、源代码模型压缩器、时序模型检验器和结 果生成模块,所述时序缺陷模式库连接源代码模型生成器和时序模型检验器,所述源代码 模型生成器经所述源代码模型压缩器连接时序模型检验器,所述时序模型检验器通向结果 生成模块。本发明一种基于模型检验的时序软件质量缺陷检测系统的另一优选技术方案为 所述源代码模型生成器将被检测源代码的转化为一种形式化的状态自动机模型。本发明一种基于模型检验的时序软件质量缺陷检测系统的再一优选技术方案为 所述时序缺陷模式库用于存储时序缺陷并用形式化语言对所述时序缺陷描述建模,从而形 成用于检测的时序缺陷模式。本发明一种基于模型检验的时序软件质量缺陷检测系统的第四个优选技术方案 为所述源代码模型压缩器使用时序缺陷模式对被检测的程序系统模型进行压缩。本发明一种基于模型检验的时序软件质量缺陷检测系统的第五个优选技术方案 为所述时序模型检验器将压缩后的源代码模型与所述缺陷模式进行对比检验,判断所述 被检测程序是否违背了缺陷模式。本发明一种基于模型检验的时序软件质量缺陷检测系统的第六个优选技术方案 为所述结果生成模块将时序模型检验器的输出转化为检测人员能易懂的形式本发明有益效果本发明的方法及系统将软件缺陷的发现从完成阶段提前到开发 编码阶段,节约开发成本,提高软件质量;直接定位到被检测的程序源代码中,方便用户使 用和分析;对被测程序进行压缩,提高软件质量检验效率;将抽象的程序的控制流模型通 过图形化显示,增加用户直观上的认识;误报率低,可读性强、易操作,缺陷定位准确。专业术语(1)软件质量保障一种有计划的,系统化的行动模式,为项目或者产品符合已有技术需求提供充分信任所必需的;设计用来评价开发或者制造产品的过程的一组活动。(2)软件缺陷软件未达到产品说明书标明的功能;软件出现了产品说明书指明 不会出现的错误;软件功能超出产品说明书指明范围;软件未达到产品说明书虽未指出但应达到的目标或软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认 为不好。满足上述五种情况之一的软件问题则称为软件缺陷。(3)模型检验模型检验是一种检验系统是否满足给定属性的形式化方法。所谓 形式化方法原则上就是用数学与逻辑的方法描述和验证系统。从描述上讲,分为对系统的 描述和对系统性质的描述,可以用一种或多种语言来描述。描述语言包括自动机,计算树 逻辑,线性时序逻辑,进程代数,η-演算,μ_演算,特殊的程序语言,以及程序语言的子集 等。从验证来讲,主要有两类方法,一类是以逻辑推理为基础,另一类则以穷尽搜索为基础。 穷尽搜索方法统称为模型检验。(4)控制流图该控制流程图是程序控制结构的图形表示,其基本元素是过程块、 节点、判定,控制流程图与程序流程图之间的差异是在控制流程图中,不显示过程块的细 节,而在程序流程图中,着重于过程属性的描述。(5)时序逻辑时序逻辑用于对并发程序的推理,包括在考虑描述程序中单独语 句的行为的一组公理的情况下证明程序的属性。它们能够描述事件在时间上的顺序,不用 显式地引入时间。(B)Kripke模型如果一个时序逻辑表达式的含义总是能够由一个有穷状态系统 的带标记的状态转换图来确定,那么这样的结构就被称为Kripke模型。Kripke结构是一个 三元组M = <S,R,L>,这里S表示状态集合,RSS表示全部的转换关系,L SP (AP)是标志S 中的每个状态在此状态下一组为真的原子命题集合。这里AP是一组原子命题名字。(7)LTL,线性时序逻辑时序逻辑的一种,是CTL*的子集。把状态树看成是有限条 或无限条路径的集合,一条路径代表着系统一次可能的运行情况。


图1为本发明系统的结构示意图;图2为本发明系统的工作流程图。
具体实施例方式本发明的提供的一种基于模型检验的时序软件质量缺陷检测方法的具体步骤如 下步骤A、输入被检测源代码,并根据所述被检测源代码选择缺陷模式。步骤B、对所述被检测的源代码进行预处理,步骤B具体包括Bi、分析所述被检测的源代码文件,并生成控制流图;B2、如果所述被检测的源代码程序由多个代码文件组成,则先生成各自的控制流 图,再将控制流图文件合并成一个全局控制流图文件;B3、根据生成的控制流程图建模。步骤C、据在所述步骤A中所选择的缺陷模式对合并完的源代码模型进行控制流图压缩,该压缩具体包括Cl、将所述被检测的源代码模型里与所述缺陷模式没有关系的内容删除;C2、将状态等价的所述源代码模型合并。步骤D、判断所说缺陷模式的自动机中的终止状态在所述被检测的原程序的建模中相对应的安全模型中是否可达,如果所述终止状态可达,判断所述被检测的源代码程序 存在缺陷;如果所述终止状态不可达,则判断所述被检测的源代码程序不存在缺陷;步骤E、结果处理将步骤D中检测完的源程序代码终止状态的位置信息转换为于 原始源代码的位置信息;步骤F、输出将最终的判断结果输出显示出来供用户阅读。如图1所示,本发明提供的一种基于模型检验的时序软件质量缺陷检测系统包 括源代码模型生成器、时序缺陷模式库、源代码模型压缩器、时序模型检验器和结果生成 模块,时序缺陷模式库连接源代码模型生成器和时序模型检验器,源代码模型生成器经源 代码模型压缩器连接时序模型检验器,时序模型检验器通向结果生成模块。源代码模型生成器该模块主要功能是对被检测的源代码系统建模,将被检测源 代码的转化为一种形式化的状态自动机模型,以便于后面检验其是否满足给定缺陷模式。 一般情况下,使用一个表示各种系统的公共框架——转换系统(Transition System)来对 系统进行建模,这种转换系统也可以看作是一种Kripke结构。它是一个五元组M= (S,Σ, S0, A,L),其中S系统状态(系统的变量、信道、控制状态等);^o c S系统的初始状态;Σ系统的动作或者输入字符;AGSXSXS系统的转换关系,对系统中每一个状态s e S,存在ε e Σ和t eS,有(s,ε,t) e Δ ;L系统中状态特性的刻画,S —P(AP)是一个标志每个状态所在状态下一组为真 的原子命题的集合。这里AP是一组对系统特定属性刻画的原子命题集合。M的一个运行可以表示成一个无限状态序列P = StlS1S2…,其中Si e S,Stl e S。并 且对所有 i G N,有(Si, ε “ si+1) e Δ。本系统使用程序的控制流图模型,即将被检测的程序源代码控制流图模型转化为 状态自动机。表示为P= (Q, Σ, r, A,Q0, Y C1,F),这里IQtl和F分别表示状态集,初始状态 和最终状态,它们都只包含一个状态{s},即这里不存在状态的转换,只是使用符号栈来表 示程序执行路径;Σ为输入字符,这里它是控制流图中所有的边的集合,也就是程序中的所 有表达式;Γ为栈符号,为控制流图中所有的点的集合,也就是程序中的程序点;Ytl为初 始栈符号,一般情况下为程序的入口点。Δ为此PDA的转换关系,通过下面的算法获得对 所有控制流图中的边巧 2,如果表达式e既不是函数调用也不是函数返回return,加 上转换<, >;如果表达式e调用函数f,则加上转换<,n、>^^<,n丨n2>; 如果表达式e为函数返回return,则加上转换<,巧>^^<,。经过上述的转换关系 的添加规则,便实现了程序控制流图到状态自动机的转化。时序缺陷模式库该库用于存储大量的时序缺陷,即在实际编程开发中发现的不 良编程习惯、程序逻辑错误代码等质量缺陷代码进行总结抽象,然后形式化语言对时序缺 陷描述建模形成用于检测的时序缺陷模式。具体描述方法是把希望系统将要满足的属性 使用特定的形式进行表达,通常使用时序逻辑来表示属性,该方法能够表达系统状态动态 变化特性。下面对时序逻辑及其分类进行探讨。时序逻辑是模态逻辑的一个分支,它能够 描述事件在时间上的顺序,而不用显式地引入时间。时序逻辑可以根据它们在处理潜在的计算树中的分支的不同方式而分为线性时序逻辑LTL和计算树逻辑CTL。CTL*是一个组合 了分支时间和线性时间算子的时序逻辑。对于以上两种时序逻辑,它们的不同之处首先在 于对时间的本质理解不同。线性时序逻辑把时间看作一连串的时刻,一个系统的每个可能 计算路径被认为是分离的;相反,分支时序逻辑提出了在一个给定时间点上有几个可选择 的未来世界,且所有这些这些未来世界被认为是并发的,这样一个系统的所有计算路径被 认为是同时的。其次关注的系统属性也有所不同,LTL关注的是系统执行路径上的属性,将 其描述为路径表达式,而CTL则关注于系统给定状态下的属性,并将其描述为状态表达式。 最后它们的表达能力的也有所不同,虽然都是CTL*的子集,但是CTL表达“公平性”属性方 面能力不足,而LTL逻辑在表达E “存在”类型的属性,比如表达EF(StartedA,Ready)时 也无能为力。本系统采用LTL描述缺陷模式。源代码模型压缩器该模块主要功能是使用缺陷模式对被检测的程 序系统模型进 行压缩,即提供给检验器的程序模型是在压缩过的程序控制流图上生成的状态自动机。采 取压缩的方法主要是检验效率的考虑,如果被检测的软件程序代码文件比较大,则对应的 控制流图将迅速增加,很容易超出模型检测器的时间和空间限制。压缩过程主要是针对缺 陷模式,如果发现系统模型里的内容与缺陷模式没有关系,则删除,达到压缩源代码模型尺 寸的目的。压缩过程主要依据是如果状态等价则合并为同一个状态。以LINUX系统中的特 权模型为例状态(ruid, euid, suid, fsuid, rgid, egid, sgid, fsgid)与状态(ruid, euid, suid, rgid, egid, sgid)是等价关系,可以合并为一个状态。原因如下对状态集合的组成 元素fsuid、euid、fsgid、egid进行分析在LINUX系统中除了进程自身调用setfsuid来 改变fsuid的值之外,fsuid的值通常与euid的值相等;与fsuid类似,除了进程自身调用 setfsgid来改变fsgid的值外,fsgid的值通常与egid的值相等。因此在进程释放特权时, 认为状态(ruid, euid, suid, fsuid, rgid, egid, sgid, fsgid)等价于(ruid, euid, suid, rgid, egid, sgid)。时序模型检验器该模块主要功能是将压缩后的源代码模型与所述缺陷模式进 行对比检验,判断所述被检测程序是否违背了缺陷模式,即是否存在质量缺陷。本系统 采用LTL模型检验方法,表示系统的Kripke结构可以直接对应成一个正则ω自动机, 用A表示,则UA)表示了系统所有可能的行为;然后将时序逻辑表达式转化为BUchi 自动机,用S表示,L(S)表示了该属性下允许的系统行为;模型检测的过程就是判断 是否L (A) ^L (S),即判断系统所有行为是否都属于属性允许的范围。然而求解 L (A) ^L (S)过于困难,便将US)取补,即表示违背属性的行为,检验过程更改为判 断L(A) η L(S)是否为空。为空则表示系统满足属性,不为空则接受的语言表示了系统对 属性可能的违背。结果生成模块该模块主要功能是将时序模型检验器的输出进行转化,表示为检 测人员能够读懂的形式。模型检验器的输出为形式化的模型,即状态自动机的表示形式,使 用该系统的用户很难读懂表达的意思,也无法确定被检测的程序存在缺陷的具体位置。通 过该模块的工作可以将模型检验器的输出结果直接定位到被检测的程序源代码中,方便用 户使用和分析。本发明方法及系统的开发环境可选择=RedHat LINUX9操作系统JAVA集成开发 工具 eclipse ;RedHat LINUX9、jdkl. 4、gcc3. 2 的运行和调试环境;
假设待检测的源代码文件为b. c,缺陷模式是m. fsa,下面就给出检验此文件的具 体流程,如图2所示步骤A输入被检测源代码文件为b. c,选择的缺陷模式是m. fsa ;步骤B预处理将待检测的源代码文件f. c分析并生成控制流图,如果待检测的程 序由多个代码文件组成,则在各自生成控制流图后,它们的控制流图文件则合并成一个全 局控制流图文件,并建模;步骤C压缩然后便是对合并完的控制流图进行压缩。使用缺陷模式m. fsa对生 成的源代码模型进行压缩;步骤D检测判断描述缺陷模式的自动机中的终止状态在与原程序相对应的安全 模型中是否可达,如果终止状态可达,则程序可能违背了缺陷模式,即存在缺陷;步骤E结果处理由于缺陷及其在代码中的位置信息是由模型检测器从压缩的源 代码模型中产生的,为读懂这些信息,因此需要将它们转换为原始的源代码位置信息,方便 用户分析;
步骤F输出用户阅读输出的结果并进行分析,确定缺陷是否存在以及存在位置。
权利要求
一种基于模型检验的时序软件质量缺陷检测方法,其特征在于所述方法的具体步骤如下步骤A、输入被检测源代码,并根据所述被检测源代码选择缺陷模式;步骤B、对所述被检测的源代码进行预处理;步骤C、对合并完的源代码模型进行控制流图压缩;步骤D、判断所说缺陷模式的自动机中的终止状态在所述被检测的原程序的建模中相对应的安全模型中是否可达,如果所述终止状态可达,判断所述被检测的源代码程序存在缺陷;如果所述终止状态不可达,则判断所述被检测的源代码程序不存在缺陷;步骤E、结果处理将步骤D中检测完的源程序代码终止状态的位置信息转换为于原始源代码的位置信息;步骤F、输出将最终的判断结果输出显示出来供用户阅读。
2.根据权利要求1所述的一种基于模型检验的时序软件质量缺陷检测方法, 其特征在于所述步骤B包括B1、分析所述被检测的源代码文件,并生成控制流图;B2、如果所述被检测的源代码程序由多个代码文件组成,则先生成各自的控制流图,再 将控制流图文件合并成一个全局控制流图文件; B3、根据生成的控制流程图建模。
3.根据权利要求1所述的一种基于模型检验的时序软件质量缺陷检测方法,其特征在 于所述步骤C中压缩包括C1、将所述被检测的源代码模型里与所述缺陷模式没有关系的内容删除; C2、将状态等价的所述源代码模型合并。
4.根据权利要求1所述的一种基于模型检验的时序软件质量缺陷检测方法,其特征在 于所述步骤C中所述被检测源代码根据在所述步骤A中所选择的缺陷模式进行源代码模 型压缩。
5.一种基于模型检验的时序软件质量缺陷检测系统,其特征在于所述系统包括源代 码模型生成器、时序缺陷模式库、源代码模型压缩器、时序模型检验器和结果生成模块,所 述时序缺陷模式库连接源代码模型生成器和时序模型检验器,所述源代码模型生成器经所 述源代码模型压缩器连接时序模型检验器,所述时序模型检验器通向结果生成模块。
6.根据权利要求5所述的一种基于模型检验的时序软件质量缺陷检测系统,其特征在 于所述源代码模型生成器将被检测源代码的转化为一种形式化的状态自动机模型。
7.根据权利要求5所述的一种基于模型检验的时序软件质量缺陷检测系统,其特征在 于所述时序缺陷模式库用于存储时序缺陷并用形式化语言对所述时序缺陷描述建模,从 而形成用于检测的时序缺陷模式。
8.根据权利要求7所述的一种基于模型检验的时序软件质量缺陷检测系统,其特征在 于所述源代码模型压缩器使用时序缺陷模式对被检测的程序系统模型进行压缩。
9.根据权利要求5所述的一种基于模型检验的时序软件质量缺陷检测系统,其特征在 于所述时序模型检验器将压缩后的源代码模型与所述缺陷模式进行对比检验,判断所述 被检测程序是否违背了缺陷模式。
10.根据权利要求5所述的一种基于模型检验的时序软件质量缺陷检测系统,其特征在于所述结果生成模块将时序模型检验器的输出转化为检测人员能易懂的形式。
全文摘要
本发明涉及一种基于静态分析的软件质量缺陷检测方法及系统,属于计算机信息安全技术领域。该检测方法具体步骤如下步骤A、输入被检测源代码,并根据被检测源代码选择缺陷模式;步骤B、对被检测的源代码进行预处理;步骤C、对合并完的源代码模型进行控制流图压缩;步骤D、判断被检测的原程序的模型中是否存在缺陷;步骤E、结果处理将检测完的源程序代码终止状态的位置信息转换为于原始源代码的位置信息;步骤F、输出将最终的判断结果显示给用户。本发明检测方法及系统能够提早发现软件缺陷的,缩短软件研发周期,节约开发成本,提高软件质量;并且在被测程序源代码中直接定位,准确定位缺陷;能够提高检验效率,降低误报率。
文档编号G06F11/36GK101833504SQ20101015091
公开日2010年9月15日 申请日期2010年4月19日 优先权日2010年4月19日
发明者张翀斌 申请人:张翀斌
再多了解一些
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1