发明名称 一种基于谓词执行序列的软件动态缺陷定位方法
摘要 一种基于谓词执行序列的软件动态缺陷定位方法,包括五个步骤:(1)对含缺陷的程序插桩;(2)加载程序的测试用例,运行插有输出谓词执行序列桩函数的程序;(3)分别收集程序运行正确时,和运行错误时,桩函数的输出信息;(4)对收集到的谓词运行信息做统计学分析,统计学分析又包括统计谓词执行序列、统计谓词执行序列向量、计算谓词关联缺陷度和谓词排序这四小步;(5)根据第四步中得到的谓词序列,对谓词依序进行查找,直到找到缺陷为止。该方法将谓词的执行序列信息贯穿到关联缺陷定位的四个基本步骤中,以提高定位效率,而且方法简单,容易实现。
申请公布号 CN101872325A 申请公布日期 2010.10.27
申请号 CN201010219288.3 申请日期 2010.06.25
申请人 北京航空航天大学 发明人 郑征;李伟;梁宇;蔡开元
分类号 G06F11/36(2006.01)I 主分类号 G06F11/36(2006.01)I
代理机构 北京慧泉知识产权代理有限公司 11232 代理人 王顺荣;唐爱华
主权项 1.一种基于谓词执行序列的软件动态缺陷定位方法,其特征在于:它包括以下五个步骤:第一步对含缺陷的程序插桩;插桩是为了得到程序运行时的谓词执行序列信息,对程序中的分支谓词:if、while、for以及return语句中的谓词进行插桩;桩函数要求在程序运行时输出谓词的状态信息,状态信息包括两种:第一种信息是,该谓词的编号;第二种信息是,待测程序在加载测试用例后,运行正确或错误时,谓词的执行状态,用“+”表示谓词执行判定为“真”,“-”表示谓词执行判定为“假”;第二步加载程序的测试用例,运行插有输出谓词执行序列桩函数的程序;记录程序运行正确的次数和运行错误的次数,为便于后文的说明方便,用m表示运行正确的次数,n表示运行错误的次数;第三步分别收集程序运行正确时,和运行错误时,桩函数的输出信息;第四步对收集到的谓词运行信息做统计学分析,该步骤分为五小步:(一)利用得到的信息,统计程序中单个谓词在程序一次运行中的执行序列;程序每运行一次,对单个谓词的执行有三种情况:执行多次;执行一次;不执行;程序运行到某谓词时,若该谓词判定为“真”,计为1,若该谓词判定为“假”,计为0,程序一次运行,若该谓词执行了多次,则它的执行序列是0和1所组成的序列;若只执行了一次,则它的执行序列就只有一个数:0或1;若没有被执行,则它此次的执行序列为空;用这种方法统计,则单个谓词共有m个程序运行正确的执行序列,和n个程序运行错误的执行序列;(二)利用谓词的执行序列,统计出单个谓词的执行序列向量P<sub>4</sub>;P<sub>4</sub>是一个四维向量,包括n<sub>01</sub>、n<sub>10</sub>、n<sub>00</sub>,n<sub>11</sub>这四个值,其中n<sub>01</sub>和n<sub>10</sub>分别用来记录谓词的执行序列中在一次程序运行的结果中,从0变化到1的次数和从1变为0的次数;而n<sub>00</sub>和n<sub>11</sub>分别记录谓词执行序列中连续两次为0的次数和连续两次为1的次数;在一次程序运行中,若某谓词执行了多次,分别记录n<sub>01</sub>、n<sub>10</sub>、n<sub>00</sub>,n<sub>11</sub>的值;若只执行了一次:谓词执行序列为0时,设定n<sub>00</sub>=0.5,n<sub>01</sub>=n<sub>10</sub>=n<sub>11</sub>=0;谓词执行序列为1时,设定n<sub>11</sub>=0.5,n<sub>01</sub>=n<sub>10</sub>=n<sub>00</sub>=0;若该谓词没有执行,则n<sub>01</sub>=n<sub>10</sub>=n<sub>11</sub>=n<sub>00</sub>=0;从而,得到单个谓词m个程序运行正确的执行序列向量和n个程序运行错误的执行序列向量;(三)利用谓词执行序列向量P<sub>4</sub>,计算单个谓词的缺陷关联度;定义单个谓词的缺陷关联度P<sub>diverge</sub>=|P<sub>4+</sub>-P<sub>4-</sub>|,这里的P<sub>4+</sub>表示程序正确运行时谓词的执行序列向量,P<sub>4-</sub>表示程序错误运行时谓词的执行序列向量;P<sub>4+</sub>的计算方法为:m个程序运行正确的执行序列向量相加,然后进行归一化处理,即<img file="FSA00000175557000021.GIF" wi="321" he="116" />程序运行正确的执行序列向量)/m;P<sub>4-</sub>的计算方法为:n个程序运行错误的执行序列向量相加,然后进行归一化处理,即<img file="FSA00000175557000022.GIF" wi="319" he="115" />程序运行错误的执行序列向量)/n;(四)利用第三步得到的谓词执行信息,对程序中的每个谓词执行上述的(一)至(三)步,直至得到全部谓词的缺陷关联度;(五)按照缺陷关联度的高低,将所有谓词从高到低排序;第五步根据第四步中得到的谓词序列,对谓词依序进行查找,直到找到缺陷为止。
地址 100191 北京市海淀区学院路37号北航自动化科学与电气工程学院