一种基于马尔可夫模型的软件错误定位系统及错误定位方法
【专利摘要】一种基于马尔可夫模型的软件错误定位系统及错误定位方法,属于软件调试【技术领域】,由测试信息获取模块、自定制模块、图形交互界面模块、一步转移概率矩阵模块、错误定位模块、错误修正模块、数据库模块组成,具体步骤包括:测试信息获取模块编写执行测试用例获取测试信息;自定制模块构建错误定位技术备选集,划分错误类型;一步转移概率矩阵模块计算一步转移概率矩阵;错误定位模块预测当前的错误类型,选择相应的错误定位技术进行错误定位,计算备选集中各技术定位错误的代价,进而确定当前错误的类型并更新一步转移概率矩阵和错误历史序列;错误修正模块修正定位到的错误,继续进行错误定位或结束。本发明更快、更准确地实现了软件错误定位。
【专利说明】一种基于马尔可夫模型的软件错误定位系统及错误定位方
法【技术领域】
[0001]本发明属于软件调试【技术领域】,采用马尔可夫过程建立错误类型预测模型,根据预测结果从错误定位技术备选集中选择相应的错位定位技术来实施。
【背景技术】
[0002]计算机的应用日益广泛,但是计算机软件远没有达到零错误的要求。提高软件质量已经成为软件工程领域亟待解决的重要问题。调试软件错误首先需要定位错误定位。统计错误定位技术通过分析动态程序行为来定位程序错误,对程序单元的可疑度进行预测。将运行失败测试用例取得的频谱信息与运行成功测试用例取得的频谱之间的差异性作为程序单元的可疑度评价的指标。当前大多数基于程序频谱的错误定位技术都是针对某种类型的程序单元及其程序频谱信息来建立统计模型。然而,目前的软件错误定位技术通常针对某种错误类型或程序单元而设计,在定位某类错误时具有稳定的准确性,但无一被证明具有一般意义的有效性。在现代软件研制过程中,受到新的开发技术、开发过程及编程环境等的影响,程序特征和错误类型愈来愈多。这种情况下,如果随机选择一种错误定位技术,可能会导致定位错误的效 果不理想,而选择所有的定位技术进行尝试,代价过大。于是,如何选择一个最佳的错误定位技术就成了亟待解决的问题。
[0003]与此同时,由实践经验可知,单元测试中发现的错误的类型和属性是相关的。因此,当某种错误定位技术能够准确定位某个错误时,对于同一待测程序中存在的其他错误也具有较好的效果。基于以上情况,本发明提出了集成多错误定位技术进行错误定位的方法,对基于不同类型频谱的错误定位技术的结果进行集成,有效地提高定位效果。
[0004]本发明在此基础之上,将多个错误定位技术作为备选集,在单元测试环境中使用马尔可夫模型预测错误类型并选择合适的技术来实施,相比以往的单技术方法能够更准确地定位到软件错误。
【发明内容】
[0005]本发明技术解决问题:克服现有技术的不足,提供一种基于马尔可夫模型的软件错误定位方法,更快、更准确地实现了软件错误定位。
[0006]本发明技术的解决方案是:一种基于马尔可夫模型的软件错误定位系统,如图1所示,包括:
[0007]测试信息获取模块:用户(测试工程师)使用gCC(gC0V)或Ilvm等编译系统软件对被测试程序进行插装,统计程序语句执行次数等信息。用户(测试工程师)编写并运行测试用例,将获得的测试用例执行成功与否、程序每个语句执行的次数等测试信息保存到excel文件中,然后将excel文件中的测试信息通过图形交互界面模块存储到数据库模块的数据库中。进行错误定位的首先要运行测试用例,根据有无失败的测试用例判断程序中有无错误,需不需要进一步实施错误定位。[0008]自定制模块:本发明系统及发明方法,需要用户注册用户账号,登录进入错误定位系统。在自定制模块中,用户选择错误定位技术构成错误定位技术备选集,并在图形交互界面中选择这些错误定位技术,如系统中尚没有某些错误定位技术,用户可通过图形交互界面添加这些错误定位技术到数据库,最终将错误定位技术备选集保存到数据库中。因本发明方法解决的问题是现在不存在一种错误定位技术能够普遍高效的定位错误,因而在选择错误定位技术组成备选集时,不做特别的要求,选择当前一些定位错误效果较佳的错误定位技术即可,这点体现本发明方法的普遍适用性。结合备选集中的错误定位技术将软件中出现的错误分类,鉴于不同技术在定位不同类型错误时的准确度不同,花费的代价不同,且目前尚无通用的错误类型描述手段,本发明不失一般性地使用错误定位技术来对错误进行分类。在自定制模块需用户在图形界面上确定被定位的程序及其版本,并保存到数据库中。自定制模块的具体实施是用户通过图形交互界面模块与数据库模块之间配合完成的。
[0009]图形交互界面模块:图形交互界面模块负责用户沟通测试信息获取模块、自定制模块、一步转移概率矩阵模块、错误定位模块、错误修正模块及数据库模块,具体实现其余各模块对数据库的操作。图形交互界面模块具体完成以下工作:用户登录自己的账号,如没有账号则需注册新的账号;用户根据自定制模块构建的错误定位技术备选集在图形交互界面选择或添加相应的错误定位技术,根据自定制模块确定要进行错误定位的程序版本,选择相应版本的程序进行错误定位;图形交互界面显示一步转移概率矩阵模块中的一步转移概率矩阵;图形交互界面显示错误定位模块预测的当前错误的类型并进一步确定当前错误的类型,确定当前错误类型后更新数据库中的错误历史序列,进而触发一步转移概率矩阵模块中更新一步转移概率矩阵的事件,并及时显示在图形交互界面上。
[0010]一步转移概率矩阵模块:一步转移概率矩阵模块根据数据库模块存储的错误历史序列和自定制模块构建的错误定位技术备选集,计算获得一步转移概率矩阵并在图形交互界面模块进行显示。当第一次使用本系统定位错误时,因错误历史序列为空,我们将备选集中的错误定位技术同等看待赋予相同的概率。
[0011]错误定位模块:错误定位模块结合一步转移概率矩阵模块的一步转移概率矩阵信息和测试信息获取模块获取并在数据库模块中保存的测试信息,预测当前错误的类型并选择相应的错误定位技术定位错误,然后计算备选集中各错误定位技术定位当前错误的代价,花费代价最小的错误定位技术即是当前错误的真实类型,确定当前错误真实类型后,更新数据库模块中数据库中的错误历史序列,触发更新一步转移概率矩阵模块一步转移概率矩阵的事件。
[0012]错误修正模块:错误修正模块根据错误定位模块定位到的错误的位置,结合业界使用的错误修正方法修正错误,然后进行新一轮的测试,直到程序中没有错误。
[0013]数据库模块:数据库模块中存储着测试信息获取模块中获取的测试信息、自定制模块中构建的错误定位技术备选集、程序错误历史序列信息和用户注册信息等。
[0014]基于马尔可夫模型的软件错误定位方法,实现流程如图2所示,具体步骤如下:
[0015](I)测试信息获取:用户(测试工程师)使用gcc与gcov或Ilvm等编译系统软件对被测程序进行插装,编写运行测试用例,统计运行测试用例获得的测试用例成功执行与否、语句执行次数等测试信息。将统计获得的测试信息保存到excel文件中,通过图形交互界面模块保存到数据库模块中的数据库中。[0016](2)自定制信息:使用本发明系统需要用户登录进入系统,如没有账号需先进行注册。用户登录后需要选择错误定位技术构成错误定位技术备选集,如用户要添加新的错误定位技术,可通过图形交互界面进行添加。用户根据构建的错误定位技术备选集将错误类型分类。用户在进行错误定位前需要确定被定位的程序及其版本,如第一次使用本发明系统则添加相应的程序名称。上述用户信息、错误定位技术备选集信息和被测试程序版本信息均通过图形交互界面保存到数据库模块的数据库中。
[0017](3)信息存储:前两个步骤获取的测试信息和用户自定制的信息均通过图形交互界面模块的图形交互界面存储到数据库模块的数据库中。保存在excel文件中的测试信息通过图形交互界面保存到数据库相应的表中。用户通过在图形交互界面上的操作完成用户注册/登录、错误定位技术备选集构建和程序版本选择/添加,同时将相应的自定制信息保存到数据库模块的数据库中。
[0018](4) 一步转移概率矩阵:根据数据库模块存储的程序的错误历史序列,使用本发明方法提供的算法建立一步转移概率矩阵。当第一次实施错误定位时,因无错误历史序列,我们做特殊处理,具体见后面详细论述。错误定位完成后,更新数据库中的错误历史序列同时触发更新一步转移概率矩阵的事件,进而更新一步转移概率矩阵,使得一步转移概率矩阵总对应最新定位到的错误。
[0019](5)错误定位:根据一步转移概率矩阵模块的一步转移概率矩阵信息和数据库模块中的错误历史序列信息和错误定位技术备选集信息,预测当前错误的类型。然后选择和当前错误类型相应的错误定位技术,结合数据库模块中数据库中的测试信息,计算在该错误定位技术下,程序每条语句含有错误的可疑度,生成可疑度列表。参考生成的可疑度列表,从前往后在源程序中查找程序错误,最终确定程序的位置。计算错误定位技术备选集中所有错误定位技术对应的程序可疑度列表,比较错误所在程序中的位置在各错误定位技术对应的可疑度列表中的位置,位置最靠前的可疑度列表对应的错误定位技术所对应的错误类型即是当前错误的真实类型。
[0020](6)错误修正:根据前面定位到的错误的位置,用户(测试工程师)使用业界使用的错误修正方法在源程序上修正错误。修正错误后继续进行测试如仍有错误则开始新一轮的错误定位,如没有错误则错误定位结束。
[0021]本发明与现有技术相比的优点在于:
[0022](I)本发明实现的一种基于马尔科夫模型的错误定位系统,将测试信息获取、错误定位、错误修正等等通过数据库与图形交互界面联系在一起,能够高效的定位错误,同时还提供了友好的操作界面。
[0023](2)本发明在分析单元测试的特性及预测软件错误类型可行性的基础上,采用马尔可夫过程建立预测模型,根据预测的错误类型从错误定位备选集中选择相应的错误定位技术来实施错误定位,能更快的定位到程序中存在的软件错误,更快地实现软件错误定位。
[0024](3)由实践经验可知,单元测试中发现的错误的类型和属性是相关的。因此,当某种错误定位技术能够准确定位某个错误时,对于同一待测程序中存在的其他错误也具有较好的效果,对基于不同类型频谱的错误定位技术的结果进行集成,有效地提高定位效果。
[0025](4)本发明将多个错误定位技术作为备选集,在单元测试环境中使用马尔可夫模型预测错误类型并选择合适的技术来实施,不需考虑错误的内在逻辑和语言特性,实现无偏差的预测错误类型,相比以往使用单个错误定位技术的方法能够更准确地定位到软件错误。
【专利附图】
【附图说明】
[0026]图1为本发明错误定位系统的组成框图;
[0027]图2为本发明错误定位方法的实现流程图;
[0028]图3为实验程序中本发明方法使用Tarantula、FOnly组成备选集的定位效果示意图;
[0029]图4为实验程序中本发明方法使用CB1、SOBER组成备选集的定位效果示意图;
[0030]图5为实验程序中本发明方法使用DES-CB1、DES-S0BER组成备选集的定位效果示意图;
[0031]图6为真实程序中本发明方法使用Tarantula、FOnly组成备选集的定位效果示意图;
[0032]图7为真实程序中本发明方法使用CB1、SOBER组成备选集的定位效果示意图;
[0033]图8为真实程序中本发明方法使用DES-CB1、DES-S0BER组成备选集的定位效果示意图。
【具体实施方式】
[0034]如图1所示,本发明一种基于马尔科夫模型的软件错误定位系统由7个模块组成:测试信息获取模块、自定制模块、图形交互界面模块、一步转移概率矩阵模块、错误定位模块、错误修正模块和数据库模块。
[0035]整体实现过程如下:
[0036](I)测试信息获取:用户(测试工程师)使用gcc与gcov或Ilvm等编译系统软件对被测程序进行插装,编写运行测试用例,统计运行测试用例获得的测试用例成功执行与否、语句执行次数等测试信息。将统计获得的测试信息保存到excel文件中,通过图形交互界面模块保存到数据库模块中的数据库中。
[0037](2)自定制信息:使用本发明系统需要用户登录进入系统,如没有账号需先进行注册。用户登录后需要选择错误定位技术构成错误定位技术备选集,如用户要添加新的错误定位技术,可通过图形交互界面进行添加。用户根据构建的错误定位技术备选集将错误类型分类。用户在进行错误定位前需要选择被定位的版本的程序,如第一次使用本发明系统则添加相应的程序名称。上述用户信息、错误定位技术备选集信息和被测试程序版本信息均通过图形交互界面保存到数据库模块的数据库中。
[0038](3)信息存储:前两个步骤获取的测试信息和用户自定制的信息均通过图形交互界面模块的图形交互界面存储到数据库模块的数据库中。保存在excel文件中的测试信息通过图形交互界面保存到数据库相应的表中。用户通过在图形交互界面上的操作完成用户注册/登录、错误定位技术备选集构建和程序版本选择/添加,同时将相应的自定制信息保存到数据库模块的数据库中。
[0039](4) 一步转移概率矩阵:根据数据库模块存储的程序的错误历史序列,使用本发明方法提供的算法建立一步转移概率矩阵。当第一次实施错误定位时,因无错误历史序列,我们做特殊处理,具体见后面详细论述。错误定位完成后,更新数据库中的错误历史序列同时触发更新一步转移概率矩阵的事件,进而更新一步转移概率矩阵,使得一步转移概率矩阵总对应最新定位到的错误。
[0040](5)错误定位:根据一步转移概率矩阵模块的一步转移概率矩阵信息和数据库模块中的错误历史序列信息和错误定位技术备选集信息,预测当前错误的类型。然后选择和当前错误类型相应的错误定位技术,结合数据库模块中数据库中的测试信息,计算在该错误定位技术下,程序每条语句含有错误的可疑度,生成可疑度列表。参考生成的可疑度列表,从前往后在源程序中查找程序错误,最终确定程序的位置。计算错误定位技术备选集中所有错误定位技术对应的程序可疑度列表,比较错误所在程序中的位置在各错误定位技术对应的可疑度列表中的位置,位置最靠前的可疑度列表对应的错误定位技术所对应的错误类型即是当前错误的真实类型。
[0041](6)错误修正:根据前面定位到的错误的位置,用户(测试工程师)使用业界使用的错误修正方法在源程序上修正错误。修正错误后继续进行测试如仍有错误则开始新一轮的错误定位,如没有错误则错误定位结束。
[0042]各模块的具体实现过程如下:
[0043]1、测试信息获取模块
[0044]由于本发明系统及发明方法是针对不存在普遍高效的错误定位技术,而提出的将已有的错误定位技术组成备选集的基于马尔可夫模型的软件错误定位系统及定位方法,因而本发明系统及方法不解决测试用例编写运行获取测试信息等方面的工作,但本系统能够工作的前提是用户(测试工程师)按照业界常规的编写执行测试用例获取测试信息。自动化错误定位技术实质是根据测试用例执行成功与否与语句被执行的次数计算每个语句的可疑度,最终将程序所有的语句按照可疑度降序排列生成一个可疑度列表。为获得每个语句执行的次数,可以使用gcc编译程序时结合gcov —起工作(具体看gcc和gcov的用户手册),或者使用Ilvm编译系统来获得,或其他的一些获得语句执行次数的工具。将这些测试信息保存在excel文件中:每个测试用例对应一个excel表格,每个excel表格中存储程序每个语句是否被该测试用例执行通过,及该测试用例成功与否等信息,所有的测试用例的表格保存为一个excel文件,即为当前程序版本的测试信息。Excel文件中存储的测试信息通过图形交互界面模块存储到数据库模块的数据库中。
[0045]2、自定制模块
[0046]本发明系统需要用户注册登录来实施错误定位。用户通过图形交互界面与数据库系统交互后,如登录成功,会获得数据库中存储的与该用户关联的一些信息,如该用户存储的错误定位技术、该用户已测试的不同的程序和不同版本的程序以及相应的错误历史序列等信息。用户(测试工程师)使用这些信息通过图形交互界面模块来实现自定制模块的错误定位技术备选集构建、错误类型划分及程序和程序版本的选择等任务。自定制模块中用户(测试工程师)选择已有的自动错误定位技术组成错误定位技术备选集,实际实现是用户通过图形交互界面模块选择已添加过的错误定位技术,或者添加新的错误定位技术,然后选择这中间的多个错误定位技术组成备选集。自定制模块中划分错误类型是结合备选集中的错误定位技术将软件中出现的错误分类,鉴于不同技术在定位不同类型错误时的准确度不同,花费的代价不同,且目前尚无通用的错误类型描述手段,本发明不失一般性地使用错误定位技术来对错误进行分类。当错误定位技术备选集S为T1, IV..,Tm (Ti表示第i个错误定位技术),则错误类型分别用T1, IV..,Tffl标示。如当Ti定位当前错误代价最小,即当前错误所在程序位置在Ti对应的可疑度列表位置最靠前的地方,则当前错误类型即为Ti。错误历史序列即为定位修正的错误的类型序列,通过图形交互界面模块保存到数据库中。当用户(测试工程师)第一次使用本系统时错误历史序列为空。用户在该模块通过图形交互界面确定程序及程序的版本等信息。自定制模块主要功能是设计相应的错误定位信息及错误定位策略,具体实施由图形交互界面模块和数据库模块配合完成。
[0047]3、图形交互界面模块
[0048]图形交互界面模块实现图形交互界面,可以选择开发成客户端形式,也可选择网页的形式,本发明系统的实现选择客户端模式,使用C#开发完成。图形交互界面是沟通各模块的桥梁,尤其是其余模块与数据库模块的数据交互。数据库模块的数据库系统是基础,其余模块(除图形交互界面模块与数据库模块)是具体如何使用数据库中的数据来高效定位程序中错误的策略,图形交互界面模块的图形交互界面是外在表现形式。图形交互界面的具体实现是:用户在主界面登录系统(如没有账号需先进行注册)。登陆后主界面会显示该用户已定位错误的程序及对应的程序版本,及已添加的错误定位技术。在主界面用户可以选择程序及程序版本,也可以添加新的程序来定位;用户可以选择已有的错误定位技术构成错误定位技术备选集,也可添加新的错误定位技术结合已有的错误定位技术构成备选集,或完全使用新添加的错误定位技术构成备选集;选择或添加程序及程序版本后,用户可将excel文件中的测试信息通过主界面保存到数据库中以供下面定位错误使用;以上这些完成后点击错误 定位按钮会弹出新的图形交互界面,在新的界面上会显示已选择版本程序的一步转移概率矩阵和错误历史序列;点击预测错误类型按钮会显示根据一步转移概率矩阵和上个错误类型预测的错误类型;预测出错误类型后选择相应的错误定位技术定位错误,将该位置信息输入交互界面点击确定真实类型即可确定当前错误的真实类型;确定当前错误的真实类型后点击更新按钮即可更新一步转移概率矩阵和错误历史序列。
[0049]4、一步转移概率矩阵模块
[0050]一步转移概率矩阵模块使用数据库中存储的错误历史序列及错误定位技术备选集等信息计算获得一步转移概率矩阵,如当错误定位技术备选集S为T1, IV..,Tm,有m个错误定位技术,错误历史序列Q为4,4,...,&“表示第j个错误的类型为I,对应的错
误定位技术为1.)有η-1个错误,则定位第η个错误时对应的一步转移概率矩阵P为:
[0051]
【权利要求】
1.一种基于马尔可夫模型的软件错误定位系统,其特征在于包括:测试信息获取模块、自定制模块、图形交互界面模块、一步转移概率矩阵模块、错误定位模块、错误修正模块和数据库模块;其中: 测试信息获取模块:用户使用编译系统软件对被测试程序进行插装,统计程序语句执行次数等信息;同时编写并运行测试用例,将获得的测试用例执行成功与否、程序每个语句执行的次数的测试信息保存到excel文件中,excel文件中的测试信息通过图形交互界面模块将测试信息存储到数据库模块的数据库中; 自定制模块:用户注册用户账号,登录定位系统,然后用户构建错误定位技术备选集,根据备选集划分错误类型,用户选择或添加被测试程序版本信息;自定制模块的具体实施是用户通过图形交互界面模块与数据库模块交互配合完成的; 图形交互界面模块:负责用户沟通测试信息获取模块、自定制模块、一步转移概率矩阵模块、错误定位模块、错误修正模块及数据库模块,具体实现其余各模块对数据库的操作;用户登录自己的账号,如没有账号则需注册新的账号;用户根据自定制模块构建的错误定位技术备选集在图形交互界面选择或添加相应的错误定位技术,根据自定制模块确定错误定位的程序版本;图形交互界面显示一步转移概率矩阵模块的一步转移概率矩阵;图形交互界面显示错误定位模块预测的当前错误的类型及确定当前错误的真实类型,并在确定当前错误类型后更新数据库中的错误历史序列,进而触发一步转移概率矩阵模块更新一步转移概率矩阵的事件,即时显示在图形交互界面上; 一步转移概率矩阵模块:根据 数据库模块存储的错误历史序列和自定制模块构建的存储于数据库中的错误定位技术备选集,计算获得一步转移概率矩阵信息,在图形交互界面模块进行显示; 错误定位模块:结合一步转移概率矩阵模块的一步转移概率矩阵信息和测试信息获取模块获取并在数据库模块中存储的测试信息,预测当前错误的类型并选择相应的错误定位技术定位错误,计算备选集中各错误定位技术定位当前错误的代价,确定当前错误的真实类型,更新数据库中的错误历史序列,触发更新一步转移概率矩阵模块一步转移概率矩阵的事件; 错误修正模块:根据错误定位模块定位到的错误的位置,结合错误修正方法修正错误,然后进行新一轮的测试,直到程序中没有错误; 数据库模块:存储测试信息获取模块获取的测试信息、自定制模块构建的错误定位技术备选集、程序错误历史序列信息和用户注册信息等。
2.一种基于马尔可夫模型的软件错误定位方法,其特征在于实现步骤如下: (1)测试信息获取:用户使用编译系统软件对被测程序进行插装,编写并运行测试用例,统计运行测试用例获得的测试用例成功执行与否、语句执行次数等测试信息,将统计获得的测试信息保存到excel文件中,通过图形交互界面保存到数据库中; (2)自定制信息:用户注册/登录进入系统,用户登录后选择/添加错误定位技术构成错误定位技术备选集,根据构建的错误定位技术备选集划分错误类型,选择/添加被定位的程序及版本;用户信息、错误定位技术备选集信息和被测试程序版本信息通过图形交互界面保存到数据库中; (3)信息存储:保存在excel文件中的测试信息通过图形交互界面保存到数据库相应的表中,用户通过在图形交互界面上的操作完成用户注册/登录、错误定位技术备选集构建和程序版本的选择/添加操作,并将相应的自定制信息保存到数据库。 (4)一步转移概率矩阵:根据数据库中存储的程序错误历史序列,建立一步转移概率矩阵。错误定位完成后,更新数据库中的错误历史序列同时触发更新一步转移概率矩阵的事件,更新一步转移概率矩阵; (5)错误定位:根据一步转移概率矩阵信息、错误历史序列信息和错误定位技术备选集信息,预测当前错误的类型;选择相应的错误定位技术,结合数据库中的测试信息,计算在该错误定位技术下,程序每条语句包含错误的可疑度,生成可疑度列表;参考生成的可疑度列表,确定程序中错误的位置,计算获得错误定位技术备选集中所有错误定位技术对应的程序可疑度列表;确定当前错误的真实类型; (6)修正错误:根据前面定位到的错误的位置,用户使用错误修正方法在源程序上修正错误,修正错误后继续进行测试如仍有错误则开始新一轮的错误定位,如没有错误则错误定位结束。·
【文档编号】G06F11/36GK103455417SQ201310308553
【公开日】2013年12月18日 申请日期:2013年7月20日 优先权日:2013年7月20日
【发明者】张震宇, 刘畅, 张云乾 申请人:中国科学院软件研究所