基于有界模型检验的无线传感网软件代码验证方法

xiaoxiao2020-7-22  17

基于有界模型检验的无线传感网软件代码验证方法
【专利摘要】本发明所述的一种基于有界模型检验的无线传感网软件代码验证方法,该方法首先通过对无线传感网软件源代码分析并建立动态查找表,然后建立软件模型,该模型是无线传感网软件源代码的静态结构和动态行为的抽象,在此基础上定义模型转换规则,实现软件模型转化向C语言的代码转化,最后使用有界模型检验工具对转化后的代码进行有界模型检验。本发明能够有效缓解无线传感网软件模型检验中的状态空间爆炸问题,可应用于无线传感网系统验证。
【专利说明】基于有界模型检验的无线传感网软件代码验证方法
【技术领域】
[0001]本发明涉及一种无线传感网软件代码验证方法,主要利用有界模型检验技术来解决无线传感器网络软件的模型验证问题,属于计算机技术、无线通信、无线传感器网络、实时技术、分布式系统和验证技术的交叉技术应用领域。
【背景技术】
[0002]无线传感网是一种全新的信息获取和处理技术,能够协作地实时监测、感知和采集网络分布区域内各种环境或监测对象的信息,并对这些信息进行处理,获得详尽而准确的信息,传送给需要这些信息的用户。传感器网络可以使人们在任何时间、地点和任何环境条件下获取大量详实而可靠的信息,具有十分广阔的应用前景。
[0003]无线传感网的发展非常迅速,这使得应用在上面的软件也越来越广泛,伴随的软件验证问题也越来越多。无线传感网软件规模越来越大,致使系统复杂性也愈来愈高,除此之外,在很多的不同应用领域都对无线传感网软件有很高的性能要求。模型检验技术为保证应用于无限传感器网络中的软件性能提供了新的思路,其在协议验证领域和硬件领域都获得了很大的成功之后,也被用在有关软件验证问题的解决上。软件相对于硬件有着较高的复杂性,其状态空间规模也较大,有大量的学者致力于这方面的研究。为了及时地发现程序中潜在的问题,已经有人提出将模型检验技术应用到源代码的分析中。建立模型和性质检验是模型检验中的两个重要的步骤,即第一步需要对待验证的软件进行建立模型,然后在通过穷尽搜索软件系统状态的方法来检验性质是否满足。
[0004]模型检验是一种自动验证有穷状态系统的技术,最早是由Clarke和Emerson在1981年提出的,模型检验方法可以在构建系统前对系统的安全性和可靠性进行验证,以尽早发现错误。模型检验实质是利用计算机的快速计算能力,通过穷举被检验系统的状态空间中的每一个状态来验证该系统满足特定的形式描述。在模型检验中涉及两种形式说明语言:一种是用于描述系统模型的模型描述语言,一般使用状态机进行表示,另一种是用于描述系统性质的性质说明语言,一般使用时序逻辑公式进行表示。模型检验的基本思想是用状态迁移系统(S)表示系统的行为,用模态/时序逻辑公式(F)描述系统的性质,这样“系统是否满足所期望的性质”就转化为数学问题“状态迁移系统S是否公式F的一个模型”,用公式表示为S| = F?。对有穷状态系统,这个问题是可判定的,即可以用计算机程序在有限时间内自动确定。模型检验已被应用于计算机硬件、通信协议、控制系统、安全认证协议等方面的分析与验证中,取得了令人瞩目的成功,并从学术界辐射到了产业界。
[0005]模型检验提供一个完整的系统属性验证框架,其优点是模型检验能达到完全自动化的程度,只需用有穷状态模型和逻辑公式分别将系统实现和待验证的系统规范描述出来,之后的判断过程则完全可以由模型检验工具自动完成,不需要人的参与;模型检验过程总会以“是”或“否”的结果中止,当以“否”的结果中止时,说明设计或系统不满足某个给定的性质。此时一个违反性质 的行为反例将会被给出,此反例将对理解错误的真正原因和修正错误提供线索。利用模型检验的优点,对无线传感器网络的软件或协议进行验证,找出其可能存在的威胁和隐患。
[0006]TinyOS操作系统是无线传感网的主流操作系统。网络协议、传感器驱动、分布式服务器及数据识别工具是组成TinyOS的四个主要部分。良好的事件执行模型是促成良好的电源管理的主要因素,因此,该模型也使得时序安排具有灵活性。TinyOS已被应用于TinyOS的感应板和多个平台中的,且软件的应用也有了一定程度的发展,这与TinyOS系统本身的特征如事件驱动模式、组件化编程思想、轻量级线程技术以及主动消息通信技术等密切相关。然而,在传感器网络系统的深入研究就会发现,这些技术可以帮助提高传感器网络的性能,更充分发挥硬件的特性,降低其功耗,并简化应用程序开发过程。
[0007]NesC语言是对C语言的扩展,但与C语言不同的是它是组件化的且它的工作执行模式是基于事件驱动的。NesC采用面向组件编程,并且支持在传感网上的应用开发。TinyOS是一种新型操作系统,它是由NesC语言编写的。大多数基于TinyOS操作系统的应用软件是用NesC,相比之前的编程语言NesC的传感网的开发和应用更方便。组件和接口分别是NesC语言中两个基础的概念。组件可以提供接口,与此同时,其他组件也可以使用这个组件的某些功能,其使用方法是通过引用相同接口声明。不同的组件通过这种方式来实现组件间的相互调用。配件是组件的一种,配件实质是用来描述不同组件接口之间的调用关系;模块的组件另一种定义形式,其主要描述具体实现,如组件中涉及到的接口定义等。以上就是NesC语言组件的两种定义形式,其性质和功能是不同的。而NesC中的接口与组件是不同的,它是组件的一个部分,接口可以理解为函数,也可以是理解为发生的事件,或者是程序或系统的命令,组件是通过接口来实现组件之间的相互衔接和相互联系。

【发明内容】

[0008]技术问题:本发明提出一种基于有界模型检验的无线传感网软件代码验证方法,该方法主要用来实现基于有界模型检验的无线传感网代码验证,缓解模型检验中的状态空间爆炸问题。
[0009]技术方案:本发明所述的一种基于有界模型检验的无线传感网软件代码验证方法,该方法首先通过对无线传感网软件源代码分析并建立动态查找表,然后建立软件模型,该模型是无线传感网软件源代码的静态结构和动态行为的抽象,在此基础上定义模型转换规则,实现软件模型转化向C语言的代码转化,最后使用有界模型检验工具对转化后的代码进行有界模型检验。基于有界模型检验的无线传感网软件代码验证方法具体步骤如下:
[0010]步骤1、对无线传感网软件源代码中的每个节点进行编号,执行程序,并根据执行的顺序记录节点编号和代码行;
[0011]步骤2、提取代码的控制流结构,用控制流程图描述程序各分支语句,并定义对应模块;
[0012]步骤3、建立动态查找表,所述动态查找表是步骤2中提取的控制流与所记录代码行的对应关系;
[0013]步骤4、对无线传感网软件源代码建立对应的软件模型,所述软件模型是无线传感网软件源代码的静态结构和动态行为的抽象,用来描述节点以及节点之间的迁移关系;软件模型的建立是通过相应的无线传感网软件建模工具来完成的,该过程描述网络拓扑结构固定情况下的软件模型;[0014]步骤5、判断上述软件模型的正确性,若模型正确,则执行步骤8,反之执行步骤6 ;
[0015]步骤6、等待一随机时间,重新执行程序;
[0016]步骤7、判断所记录的节点编号和代码行与上次相比,是否发生变化,若发生变化,则返回步骤4,反之退出整个流程;
[0017]步骤8、对无线传感网软件模型静态结构进行抽象:
[0018]步骤81)用三元组的形式表示软件模型,设置无线传感网软件模型为m =(t, n, r), m表示无线传感网软件模型,t表示网络的拓扑结构,η代表模型中的节点,r表示节点之间的迁移;
[0019]步骤82)将三元组对应源代码的具体结构,通过动态查找表将η对应在代码中是定义节点的结构体,r对应在不同模块之间的调用关系;
[0020]步骤9、对无线传感网软件模型的动态行为进行模拟分析,用来确定节点之间的调用关系以及执行顺序,启动模拟器,使用模拟器模拟无线传感网软件模型的动态行为获取各节点函数的执行关系并记录;启动验证器,执行对模型的正确性分析与验证来实现对无线传感网软件的分析;
[0021]步骤10、定义模型转换规则,所述模型转化规则是由用户定义的模型与目标语言之间的映射关系,根据这些关系将模型中的各个部分转化为目标代码的形式之后,进行有界模型检验;用户定义模型转换规则的过程为:首先,定义节点转换规则,实现节点到目标代码的转换;其次,定义节点迁移的转换规则,将节点之间的调用关系对应到目标代码;
[0022]步骤11、根据步骤10中定义的模型转换规则,实现模型到目标代码的转换,所述转换过程是将模型中的各个结构对应于模型转换规则,通过模型转换规则中的定义实现目标代码;
[0023]步骤12、对转换后的目标代码进行有界模型检验,所述有界模型检验的过程是使用有界模型检验工具对转换后的目标代码进行有界模型检验,实现无线传感网软件代码验证,缓解模型检验中的状态空间爆炸问题。
[0024]有益效果:本发明所述的一种基于有界模型检验的无线传感网软件代码验证方法,分析与应用相关的软件是否满足要求,分析能力强、可读性高,能尽早发现软件存在的缺陷和不正确性,其采用的形式化方法可以验证复杂系统。具体来说,本发明所述的方法具有如下的有益效果:
[0025]1、本发明所述的种基于有界模型检验的无线传感网软件代码验证方法包括对无线传感网软件进行源代码建模、对所得到的软件模型进行静态结构和动态行为的分析、定义模型转换规则实现模型到目标语言的转化、使用有界模型检验工具进行有界模型检验。
[0026]2、本发明所述对无线传感网软件进行源代码建模使用相应的建模工具进行建模,该过程的实现是自动化实现的,可以保证无线传感网软件模型的正确性。
[0027]3、本发明所述的对无线传感网软件的模型分析包括静态结构分析和动态行为分析,静态结构的分析主要用于确定模型中的节点以及节点之间的迁移关系,动态行为模拟分析用于确定模型中的节点的调用顺序以及节点执行关系。
[0028]4、本发明所述的对无线传感网软件的模型转换规则是无线传感网软件模型到目标代码的映射关系,根据模型转换规则,可以实现软件模型向目标代码的转化,进而进行有界模型检验。[0029]5、本发明所述的无线传感网软件代码验证方法是基于有界模型检验的,该方法是通过有界的方法来缓解状态空间爆炸问题。
【专利附图】

【附图说明】
[0030]图1是基于有界模型检验的无线传感网软件代码验证过程流程图,
[0031]图2是BlinktoRadio程序的部分静态分析图。
【具体实施方式】
[0032]下面对本发明附图的某些实施例作更详细的描述。
[0033]根据图1,本发明所述的是一种基于有界模型检验的无线传感网软件代码验证过程,该方法建立在模型检验技术的基础上,将算法应用在无线传感网中的BlinkToRadio协议上,并借助建模工具NesClgPAT和有界模型检验工具CBMC。协议源代码是NesC语言,目标代码是C语言。【具体实施方式】为:
[0034]1、给BlinkToRadio源代码中每个节点进行编号,且保证每个节点的编号是唯一的,执行程序,并记录BlinkToRadio在执行过程中的节点编号和代码行。
[0035]2、提取BlinkToRadio代码的控制流,用控制流程图描述程序各分支语句,并定义对应模块,建立动态查找表,该动态查找表记录BlinkToRadio代码控制流与所记录代码行的对应关系。
[0036]3、建立BlinkToRadio的软件模型,所述BlinkToRadio软件模型是由传感器节点以及网络的拓扑结构共同组成。判断该模型正确后,将无线传感网软件模型表示为Hl =(t, n, r)三元组的形式表示无线传感网软件模型,t表示网络的拓扑结构,这里是指Ring结构,η为BlinkToRadio模型中的节点,r表示节点之间的迁移。
[0037]4、对所得的BlinkToRadio软件模型进行分析。
[0038]41)软件模型静态结构的分析。模型静态结构中的节点以及相应的连接关系与源代码的是一致的。所述的静态结构分析是指从编程语言本身出发,确定程序结构。BlinkToRadio是无线传感网一个的应用程序,其实现部分主要包含了三个节点、一个定时器、一个计数值,发送计数值,用NesC编写的BlinkToRadio包含了三个子文件分别为BlinkToRadioC.nc、BlinkToRadi0.h、BlinkToRadioAppC.nc。BlinkToRadioC.nc 如图 2。
[0039]42)软件动态行为的模拟分析,用来确定节点之间的调用关系以及执行顺序。所述BlinkToRadio动态行为主要包含三个部分分别是建模、执行分析和报告结果。基于模型检验的无线传感网软件源代码分析是通过对无线传感网软件源代码建模来实现软件的分析,并通过对模型的正确性分析与验证来实现对软件的分析。对无线传感网软件源代码的建模是基于工具NesOgPAT的,该工具能实现NesC代码的编辑以及词法分析、语法分析等。
[0040]5、定义模型转换规则。所述模型转化规则是定义模型与目的语言之间的映射关系,将模型中的各个部分转化为目的代码的形式,从而进行有界模型检验。
[0041]51)模型中节点的接口转换规则。接口具有双重的性质,它能够描述两种不同的函数,其中一种是接口的提供者提供的函数,另一种是在接口的使用者所实现的函数。该内容在C语言中则为函数的定义,定义了不同对象之间的信息的发送与接收。
[0042]52)模型中节点的组件转换规则。其主要是利用接口与其他组件相互连接,这种连接是一种静态连接,此方法有利于对程序进行静态分析,同时也会增加程序运行时的效率。在C语言中不同的组件则为不同的结构体,其可以采用结构体的形式表达。
[0043]53)模型中节点的模块转换规则。它模块中主要包含了模块使用和提供的接口描述以及模块内部的实现代码两大部分,其实现部分一般为C语言,其声明部分则是自己模块内的函数声明以及所需调用的其他模块内的函数的声明的集合。
[0044]54)模型中节点的配置转换规则。其可以映射为C语言中不同模块之间的调用关系,配置文件在C语言中不必单独存在,其调用关系可以通过不同模块中的函数调用来实现。
[0045]55)模型中节点的命令转换规则。命令是一种函数,其关键字为co_and。command的实现是通过接口的提供者来完成的,其调用过程是由接口的使用者完成。command的语法结构与C语言是一致的,在C语言所定义函数前面加关键字co_and,它实现可调用的命令,接口可以调用这些命令。
[0046]56)模型中节点的事件转换规则。事件也是一种函数,它是在程序的接口中定义的,其关键字为event。此函数与C语言一致,其定义中可以有函数参数、返回值等,它要求调用过程是由接口的提供者完成,实现是由接口的使用者来完成,在定义中前面须加关键字 event ο
[0047]57) Sensorl.App.call.AMControl.start O 是节点 Sensorl 的初始化函数,节点被唤醒时需要调用此函数,将其转换为C语言中节点的变量初始值函数,其执行功能与C++中的构造函数等同。
[0048]58)#assert语句是模型的动态执行分析的判定语句,它用LTL语言描述。语句#assert SensorNetwork = [] (Sensorl.send-><> (Sensor2.rcv_msg));该语句具体解释为Sensorl节点发送消息,判断Sensor2是否接收。C语言支持assert O函数,把需要判定的内容以变量表达作为assert O函数的参数来判定。
[0049]6、根据模型转换规则,实现模型到目标代码的转换。所述转换是将模型中的各个结构对应于模型转换规则,通过模型转换规则中的定义实现目标代码。
[0050]7、对转换后的目标代码进行有界模型检验。所述有界模型检验的过程是使用有界模型检验工具CBMC对转换后的BlinkToRadio目标代码进行有界模型检验,实现无线传感网软件代码验证,缓解模型检验中的状态空间爆炸问题。
【权利要求】
1.一种基于有界模型检验的无线传感网软件代码验证方法,其特征在于该方法首先通过对无线传感网软件源代码分析并建立动态查找表,然后建立软件模型,该模型是无线传感网软件源代码的静态结构和动态行为的抽象,在此基础上定义模型转换规则,实现软件模型转化向C语言的代码转化,最后使用有界模型检验工具对转化后的代码进行有界模型检验,基于有界模型检验的无线传感网软件代码验证方法具体步骤如下: 步骤1、对无线传感网软件源代码中的每个节点进行编号,执行程序,并根据执行的顺序记录节点编号和代码行; 步骤2、提取代码的控制流结构,用控制流程图描述程序各分支语句,并定义对应模块; 步骤3、建立动态查找表,所述动态查找表是步骤2中提取的控制流与所记录代码行的对应关系; 步骤4、对无线传感网软件源代码建立对应的软件模型,所述软件模型是无线传感网软件源代码的静态结构和动态行为的抽象,用来描述节点以及节点之间的迁移关系;软件模型的建立是通过相应的无线传感网软件建模工具来完成的,该过程描述网络拓扑结构固定情况下的软件模型; 步骤5、判断上述软件模型的正确性,若模型正确,则执行步骤8,反之执行步骤6 ; 步骤6、等待一随机时间,重新执行程序; 步骤7、判断所记录的节点编号和代码行与上次相比,是否发生变化,若发生变化,则返回步骤4,反之退出整个流程; 步骤8、对无线传感网软件模型静态结构进行抽象: 步骤81)用三元组的形式表示软件模型,设置无线传感网软件模型为m= (t,n,r),m表示无线传感网软件模型,t表示网络的拓扑结构,η代表模型中的节点,r表示节点之间的迁移; 步骤82)将三元组对应源代码的具体结构,通过动态查找表将η对应在代码中是定义节点的结构体,r对应在不同模块之间的调用关系; 步骤9、对无线传感网软件模型的动态行为进行模拟分析,用来确定节点之间的调用关系以及执行顺序,启动模拟器,使用模拟器模拟无线传感网软件模型的动态行为获取各节点函数的执行关系并记录;启动验证器,执行对模型的正确性分析与验证来实现对无线传感网软件的分析; 步骤10、定义模型转换规则,所述模型转化规则是由用户定义的模型与目标语言之间的映射关系,根据这些关系将模型中的各个部分转化为目标代码的形式之后,进行有界模型检验;用户定义模型转换规则的过程为:首先,定义节点转换规则,实现节点到目标代码的转换;其次,定义节点迁移的转换规则,将节点之间的调用关系对应到目标代码; 步骤11、根据步骤10中定义的模型转换规则,实现模型到目标代码的转换,所述转换过程是将模型中的各个结构对应于模型转换规则,通过模型转换规则中的定义实现目标代码; 步骤12、对转换后的目标代码进行有界模型检验,所述有界模型检验的过程是使用有界模型检验工具对转换后的目标代码进行有界模型检验,实现无线传感网软件代码验证,缓解模型检验中的状态空间爆炸问题。
【文档编号】G06F11/36GK103970652SQ201410179163
【公开日】2014年8月6日 申请日期:2014年4月29日 优先权日:2014年4月29日
【发明者】陈志 , 岳书珍, 岳文静, 王东, 党凯乐, 陈骏, 朱彦沛, 高阳阳, 高显强 申请人:南京邮电大学

最新回复(0)