CN116126680B - 一种软件系统配置错误诊断方法和系统 - Google Patents

一种软件系统配置错误诊断方法和系统 Download PDF

Info

Publication number
CN116126680B
CN116126680B CN202211474627.1A CN202211474627A CN116126680B CN 116126680 B CN116126680 B CN 116126680B CN 202211474627 A CN202211474627 A CN 202211474627A CN 116126680 B CN116126680 B CN 116126680B
Authority
CN
China
Prior art keywords
configuration
program
statement
error
list
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202211474627.1A
Other languages
English (en)
Other versions
CN116126680A (zh
Inventor
王伟
周英楠
王俊勇
刘煜昊
李超
段莉
金�一
李浥东
刘吉强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jiaotong University
Original Assignee
Beijing Jiaotong University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jiaotong University filed Critical Beijing Jiaotong University
Priority to CN202211474627.1A priority Critical patent/CN116126680B/zh
Publication of CN116126680A publication Critical patent/CN116126680A/zh
Application granted granted Critical
Publication of CN116126680B publication Critical patent/CN116126680B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供的一种软件系统配置错误诊断方法和系统,通过对程序执行数据构造频谱信息,计算卡方检验数快速定位导致配置错误的配置选项。同时,对配置选项的控制流和数据流抽象为向量,进行向量距离计算,判断配置选项之间是否存在关联关系。解决了多配置错误的诊断难题,同时指出了配置选项之间是否存在约束和关联关系。避免了由于模式匹配造成的漏报,同时使用频谱、卡方检验数和距离度量的方法不局限于特定的软件程序,具有普适性和广泛性,适用于更多的软件程序。

Description

一种软件系统配置错误诊断方法和系统
技术领域
本发明涉及计算机科学技术领域,尤其涉及一种软件系统配置错误诊断方法和系统。
背景技术
配置错误是指软件本身的程序设计没有错误,但是由于用户错误地使用某个配置选项的值,导致软件系统出现了不符合用户期望的值,甚至是程序崩溃。配置错误在生产生活中会导致巨大的损失,同时,由于配置选项数量的庞大,以及每个配置选项所设计的范围较广,造成配置空间巨大,很难进行错误的定位。因此,需要建立配置错误的诊断模型,当软件程序发生配置错误时,配置错误诊断模型可以辅助用户进行错误配置选项的快速定位。由于软件不同功能之间的重叠性,造成大量的配置选项之间存在约束和关联,因此,导致配置错误的配置选项往往并非是单一的。
配置错误诊断研究主要分为白盒和黑盒方向,白盒使用程序分析的方法,分析程序的源代码进行诊断;黑盒则使用除了源代码的其他外部信息,例如日志文件等。白盒方向因为从程序的内部分析错误原因,准确率较高。
ConfDiagnoser从配置选项读取点进行程序切片,获取布尔表达式的结果来构建向量结构,然后进行动态插装获得错误执行过程的执行概要文件,对比正确和错误概要文件中发生最大偏移的布尔表达式,逆向切片完成布尔表达式到配置选项的映射,完成单个配置错误的诊断。ConfDoctor对配置选项读取点进行前向切片和堆栈跟踪中最顶部堆栈帧对应的程序语句进行后向切片,将两个切片语句进行取交集操作,根据交集集合的覆盖情况来获取导致错误的选项。这两个工作以及他们的改进工作都是针对单配置错误诊断的经典模型,均采用了程序切片和其他技术的相组合的方法;
cDep关注于寻找关联关系,首先观察得出关联关系的模式,将其对应于代码中进行模式匹配,通过匹配已经预定义好的关联关系得到符合该关系的配置选项,该工作第一次关注到配置关联之间的关系。
发明内容
本发明的实施例提供了一种软件系统配置错误诊断方法和系统,用于解决现有技术中存在的问题。
为了实现上述目的,本发明采取了如下技术方案。
一种软件系统配置错误诊断方法,包括:
基于被检测的软件源代码,随机生成配置数据作为错误注入;
执行配置数据,记录执行的结果以及执行过程中软件源代码的每条语句的覆盖情况,构建程序谱;
基于程序谱,通过计算软件源代码的每条语句与导致程序错误的卡方检验数,获得每条语句的出错可疑度;
通过将所有语句的出错可疑度进行降序排列,再进行向后程序切片操作,获得配置选项列表;
基于配置选项列表,将某条配置选项是否流经某条语句构建为一个向量结构,重复该过程获得多个向量结构;
迭代计算所有配置选项对应的向量结构之间的距离,基于所有配置选项对应的向量结构之间的距离的绝对值大小,获得配置选项之间的关联列表;
将配置选项列表与配置选项之间的关联列表进行合并处理,获得软件系统配置错误诊断结果。
优选地,执行配置数据,记录执行的结果以及执行过程中软件源代码的每条语句的覆盖情况,构建程序谱包括:
将配置数据中的配置选项的读取点作为分析起点,基于WALA框架对每个配置选项进行前向的程序切片,获得配置选项影响的程序语句集合S={s1,s2,s3,…,sy},基于ASM框架对程序语句集合S的前后加入插桩代码,用于记录执行过程中每条语句的覆盖情况;
基于配置选项信息,随机生成m个输入集合TCi={C1,C2,C3,…,Cn},Cj表示第j个配置选项的值;
将TCi注入被检测的软件源代码中,获得TCi在程序语句集合S上的覆盖率以及程序执行结果R;R取0或1,当R为0时表示程序没有出现错误,为1时表示程序的执行发生错误;
将输入集合TCi和程序执行结果R表示为程序谱P,其中Pxy取0或1,为0表示TCx的执行路径没有覆盖语句sy
优选地,基于程序谱,通过计算软件源代码的每条语句与导致程序错误的卡方检验数,获得每条语句的出错可疑度包括:
对程序谱P中的信息进行统计,获得如下变量:
N表示输入集合的数量,Nf表示R为1的输入集合的数量,Ns表示R为0的输入集合的数量,Nc(si)表示覆盖语句si的输入集合的数量,Ncf(si)表示覆盖语句si且R为1的输入集合的数量,Ncs(si)表示覆盖语句si且R为0的输入集合的数量,Nu(si)表示没有覆盖语句si的输入集合的数量,Nuf(si)表示没有覆盖语句si且R为1的输入集合的数量,Nus(si)表示没有覆盖语句si且R为0的输入集合的数量,H0表示假设为程序的执行结果和语句si的覆盖率无关;
根据卡方检验公式
计算x2(si)临界值的差值判断是否可以拒绝H0的假设,如果不能拒绝则x2(si)临界值的差值为该条语句si的可疑度。
优选地,通过将所有语句的出错可疑度进行降序排列,再进行向后程序切片操作,获得配置选项列表包括:
将所有语句的出错可疑度进行降序排列;
对可疑度最高的语句si进行向后切片操作,获得影响该语句的配置选项;
重复执行上述第二个子步骤,完成所有语句si的向后切片操作,获得影响所有语句的配置选项,并获得配置选项列表。
优选地,基于配置选项列表,将某条配置选项是否流经某条语句构建为一个向量结构包括:
将配置选项列表对应的程序进行划分,获得多个块结构,将块结构迭代地相链接,获得块序列;
将所有语句si的向后切片操作的结果进行剪枝操作,包括:将和执行顺序无关的语句丢弃,删除外部调用指令,删除输出流和异常检测语句;
将上述第二个子步骤的执行结果抽象为多个向量N
N=(N1,N2,...,Ni,...,Nn)i=1,...,n;
式中,若某条语句si的向后切片操作的结果否流经该某条语句si,则将向量N设置为1,否则为0。
优选地,迭代计算所有配置选项对应的向量结构之间的距离,基于所有配置选项对应的向量结构之间的距离的绝对值大小,获得配置选项之间的关联列表包括:
通过式
计算向量N之间的距离,将计算结果进行升序排序,获得配置选项之间的关联列表;式中,Wi表示第i维数据的加权值,slicei表示Ni为1的配置选项在第i个块结构中的切片语句数量,blocki表示第i个块结构中所有语句的数量,m表示Xi和Yi都为0的数量,n表示向量的总维度。
优选地,将配置选项列表与配置选项之间的关联列表进行合并处理,获得软件系统配置错误诊断结果包括:
基于合并后的配置选项列表与配置选项之间的关联列表进行判断,若某个配置选项首次出现在了关联选项中,则删除该某个配置选项的排序。
第二方面,本发明一种软件系统配置错误诊断系统,包括错误预诊断模块、关联分析模块和输出模块;
错误预诊断模块用于:
基于软件源代码,随机生成配置数据作为错误注入;
执行配置数据,记录执行的结果以及执行过程中每条语句的覆盖情况,构建程序谱;
基于程序谱,通过计算每条语句与导致程序错误的卡方检验数,获得每条语句的出错可疑度;
通过将所有语句的出错可疑度进行降序排列,再进行向后程序切片操作,获得配置选项列表;
关联分析模块用于:
基于配置选项列表,将某条配置选项是否流经某条语句构建为一个向量结构;
迭代计算所有配置选项对应的向量结构之间的距离,基于所有配置选项对应的向量结构之间的距离的绝对值大小,获得配置选项之间的关联列表;
输出模块用于:
将配置选项列表与配置选项之间的关联列表进行合并处理,获得软件系统配置错误诊断结果。
由上述本发明的实施例提供的技术方案可以看出,本发明提供的一种软件系统配置错误诊断方法和系统,通过对程序执行数据构造频谱信息,计算卡方检验数快速定位导致配置错误的配置选项。同时,对配置选项的控制流和数据流抽象为向量,进行向量距离计算,判断配置选项之间是否存在关联关系。解决了多配置错误的诊断难题,同时指出了配置选项之间是否存在约束和关联关系。避免了由于模式匹配造成的漏报,同时使用频谱、卡方检验数和距离度量的方法不局限于特定的软件程序,具有普适性和广泛性,适用于更多的软件程序。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的一种软件系统配置错误诊断方法的处理流程图;
图2为本发明提供的一种软件系统配置错误诊断方法的过程示意图;
图3为本发明提供的一种软件系统配置错误诊断系统的逻辑框图。
图中:
101.错误预诊断模块102.关联分析模块103.输出模块。
具体实施方式
下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。
为便于对本发明实施例的理解,下面将结合附图以几个具体实施例为例做进一步的解释说明,且各个实施例并不构成对本发明实施例的限定。
本发明提供一种软件系统配置错误诊断方法和系统,用于解决现有技术中存在的如下技术问题:
只针对单配置错误
ConfDiagnoser和ConfDoctor只关注到了单个配置选项的诊断工作,忽略了配置选项之间的约束和关联关系。同时,ConfDoctor严格限定了配置错误的类型只能为崩溃性错误,导致诊断模型的实用性下降。其次,ConfDiagnoser需要实现构建大量的正确执行概要文件,通过对比概要文件的差异来定位错误。这种诊断方式需要花费大量时间完成概要文件的构建,面对突然的配置错误时很难快速地完成定位;
模式定义覆盖率问题
cDep采用预定义关联关系,然后进行代码层面的模式匹配的方法。模式匹配的方式高度依赖于模式定义的全面性,如果模式定义存在遗漏,那么关联关系的分析将产生大量的漏报。其次,该工作针对Hadoop的相关组件进行代码层面的匹配,需要根据Hadoop组件的代码编写方式完成特定模式接口的编写,对其他软件的适配性较小,人工完成部分较多,效率低下。
参见图1和2,本发明提供的一种软件系统配置错误诊断方法,包括如下步骤:
基于被检测的软件源代码,随机生成配置数据作为错误注入;
执行配置数据,记录执行的结果以及执行过程中被检测的软件源代码的每条语句的覆盖情况,构建程序谱;
基于程序谱,通过计算被检测的软件源代码的每条语句与导致程序错误的卡方检验数,获得每条语句的出错可疑度;
通过将所有语句的出错可疑度进行降序排列,再进行向后程序切片操作,获得配置选项列表;
基于配置选项列表,将某条配置选项是否流经某条语句构建为一个向量结构;
迭代计算所有配置选项对应的向量结构之间的距离,基于所有配置选项对应的向量结构之间的距离的绝对值大小,获得配置选项之间的关联列表;
将配置选项列表与配置选项之间的关联列表进行合并处理,获得软件系统配置错误诊断结果。
应当理解的是,上述的程序切片的方向是根据源代码的语句的顺序(语序),向前指的是沿程序的执行方向,与之相反,向后则为逆程序执行方向。
如图2所示,本发明提供的方法主要分为配置错误预诊断和关联关系分析两部分,在配置错误预诊断基于卡方检验的方法计算程序语句的可疑度(可建立可疑度列表),通过对程序语句进行后向切片定位到导致错误的配置选项。图中的可疑度列表、配置选项列表以及最终输出的错误列表中的A、B、C、c、op等均表示软件代码,图中所示仅是举例,对本发明的方法不构成特别的限定。本发明提供的优选实施例中,其具体包括如下过程:
首先将将配置选项的读取点作为程序分析的起点,基于WALA框架对每个配置选项进行前向的程序切片获得配置选项影响的程序语句集合S={s1,s2,s3,…,sy}。基于ASM框架对切片语句集合的前后加入插桩代码,用于记录语句的覆盖情况。
接下来根据用户手册中的配置选项信息随机生成m个输入集合TCi={C1,C2,C3,…,Cn},Cj表示第j个配置选项的值。将TCi注入被检测的软件源代码中,获得其在S上的覆盖率以及程序执行结果R。R取0或1,当R为0时表示程序没有出现错误,为1时表示程序的执行发生错误。将以上信息表示为程序谱P,其中Pxy取0或1,为0表示TCx的执行路径没有覆盖语句sy
接下来对程序谱中的信息进行统计获得以下变量。
N表示输入集合的数量,Nf表示R为1的输入集合的数量,Ns表示R为0的输入集合的数量,Nc(si)表示覆盖语句si的输入集合的数量,Ncf(si)表示覆盖语句si且R为1的输入集合的数量,Ncs(si)表示覆盖语句si且R为0的输入集合的数量,Nu(si)表示没有覆盖语句si的输入集合的数量,Nuf(si)表示没有覆盖语句si且R为1的输入集合的数量,Nus(si)表示没有覆盖语句si且R为0的输入集合的数量,H0表示假设为程序的执行结果和语句si的覆盖率无关。
根据卡方检验公式可得:
计算x2(si)临界值的差值判断是否可以拒绝H0的假设,如果不能拒绝则差值为该si的可疑度。从可疑度最高的si开始向后进行切片,获得影响该条语句的配置选项。
按照si的可疑度降序获得配置选项可疑度的降序列表作为这个阶段的输出结果。
进一步的,关联关系分析的具体过程如下:
首先按照启发式的方法将软件程序进行块结构的划分,使其能反应数据流和控制流变化的同时更简短。如果任意多个相连的结构,内部中没有控制分支只包含数据流的变化,将这种结构合并为一个块。这种合并方式可以反映出配置选项在数据流上的关系,同时减少了流图的节点。如果软件中某个方法被大部分配置选项所执行,则认为这个方法用于实现配置选项的基本操作,例如外部读写等。如果将这种方法进一步拆分,它们在频谱信息中作用较小,并且浪费存储资源,因此不再对它们的内部进行块结构的划分。最后将块结构迭代地链接在一起,形成更长的块序列,完成流图的构建。
本阶段复用配置错误预诊断中的切片结果。首先将切片结果进行剪枝,将和执行顺序无关的语句丢弃,减少内存的消耗。切片语句集合为IR指令,可以通过指令中的字符串进行快速筛选。删除外部调用指令,即库函数等不在分析范围内的程序包;删除输出流和异常检测语句。将切片语句是否流经块结构抽象为一个向量N,如果切片结果经过,则设置为1,否则为0。
N=(N1,N2,...,Ni,...,Nn)i=1,...,n
接下来进行距离度量分析,计算向量之间的距离,表示执行路径是否接近来反映配置选项之间的关联性,在这里向量的距离和关联性成反比。向量X,Y之间的关联关系距离公式表示为
本发明为了消除每个块结构中切片语句数量不同的问题引入了Wi,表示第i维数据的加权值。slicei表示Ni为1的配置选项在第i个块结构中的切片语句数量,blocki表示第i个块结构中所有语句的数量。在距离计算过程中,0的值会影响整个精度。它只是表明执行还没有通过,不是一个数值的影响,但0值也参与了计算过程。在本发明提供的实施例中定义一个偏置来抵消0的影响。m表示Xi和Yi都为0的数量,n表示向量的总维度。
将距离结果按照升序排序得到关联列表。
最后,按照预诊断模块的结果组织错误列表配置选项顺序,同时加入其相关联的配置选项。当一个配置选项首次出现在了关联选项中,则删除预诊断模块中他的排序。即一个配置选项可以在关联列表中出现多次,但是不能同时出现在预诊断列表和关联列表。这样可以保证用户根据错误列表进行错误排查时的效率,不会出现多次相同的排查。
第二方面,本发明提供一种执行上述方法的软件系统配置错误诊断系统,其提出了针对软件系统的配置错误诊断模型,用于解决单个或多个配置选项所导致的配置错误。本模型首先计算每个配置选项的可疑度,同时将每个配置选项的数据流和控制流抽象为向量,通过计算向量之间的距离判断配置选项之间是否存在关联关系。最后将两个模块的结果进行结合,输出错误列表。
模型接收源代码作为输入,如图3所示,分为配置错误预诊断模块101、关联分析模块102以及输出模块103。配置错误预诊断模块101首先自动随机生成大量的配置数据作为输入进行错误注入,记录程序的执行结果以及在每条语句的覆盖情况,构建程序谱。通过计算每条语句与导致程序错误的卡方检验数得到每条语句的出错可疑度。按照语句可疑度的降序向后程序切片得到配置选项列表。
关联分析模块102对每个配置选项进行控制流和数据流分析,将配置选项是否流经某条语句构建为一个向量结构,迭代的计算所有配置选项对应的向量之间的距离,距离越小则配置选项的关联性越强,从而获得配置选项之间的关联列表。
最后,输出模块103将两个模块的结果进行整合,按照配置选项可疑度进行排序,同时附加与其想关联的其他配置参数。
综上所述,本发明提供的一种软件系统配置错误诊断方法和系统,通过对程序执行数据构造频谱信息,计算卡方检验数快速定位导致配置错误的配置选项。同时,对配置选项的控制流和数据流抽象为向量,进行向量距离计算,判断配置选项之间是否存在关联关系。本发明首次提出了基于卡方检验的配置错误定位方法,通过计算语句的可疑性结合程序分析的方法获得配置选项的可疑度,相比ConfDiagnoser和ConfDoctor的诊断方法具有更强的可解释性和诊断效率。同时提出了一种基于距离度量的配置选项关联分析方法,本发明提出的关联关系分析方法依赖于配置选项之间执行路径的距离关系,相比于cDep的模式匹配方法来说可以适用于不同类型的软件,不需要预先对软件进行人工的代码分析总结,大大提高了效率和覆盖率。最后本发明系统地给出了一种解决配置错误诊断的模型,当发生配置错误时,通过卡方检验的方法获得可疑配置选项,如果错误未能排除则考虑发生多配置错误,需要结合本模型给出的关联配置选项结果再次进行排查,相比于传统的单个配置选项错误,在实际生产生活中具有更高的实际应用价值。
本发明提供的方法相比较与ConfDiagnoser和cDep还具有如下优点:
本发明配置选项可疑度计算部分相比于ConfDiagnoser,在程序切片时引入数据流分析,更为全面。同时引入了程序谱和卡方检验的分析方法,启发式的概要文件构造来说更具有可理解性;
cDep在关联分析部分使用模式匹配的方法,这样的设计方法很难完全的覆盖所有关联类型,而且高度依赖于关联类型的定义。其次cDep在分析关联关系使用污点传播的技术,这种技术存在过污染的隐患,一旦过污染会浪费大量的存储和计算资源。因此,cDep在设计过程中忽略了很多控制流上的代码关联,虽然缓解了过污染的问题,但是在一定程度上缩小了分析范围,降低了准确性。
本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

Claims (8)

1.一种软件系统配置错误诊断方法,其特征在于,包括:
基于被检测的软件源代码,随机生成配置数据作为错误注入;
执行配置数据,记录执行的结果以及执行过程中所述软件源代码的每条语句的覆盖情况,构建程序谱;
基于程序谱,通过计算所述软件源代码的每条语句与导致程序错误的卡方检验数,获得每条语句的出错可疑度;
通过将所有语句的出错可疑度进行降序排列,再进行向后程序切片操作,获得配置选项列表;
基于配置选项列表,将某条配置选项是否流经某条语句构建为一个向量结构,重复该过程获得多个向量结构;
迭代计算所有配置选项对应的向量结构之间的距离,基于所有配置选项对应的向量结构之间的距离的绝对值大小,获得配置选项之间的关联列表;
将配置选项列表与配置选项之间的关联列表进行合并处理,获得软件系统配置错误诊断结果。
2.根据权利要求1所述的方法,其特征在于,所述的执行配置数据,记录执行的结果以及执行过程中所述软件源代码的每条语句的覆盖情况,构建程序谱包括:
将配置数据中的配置选项的读取点作为分析起点,基于WALA框架对每个配置选项进行前向的程序切片,获得配置选项影响的程序语句集合S={s1,s2,s3,…,sy},基于ASM框架对程序语句集合S的前后加入插桩代码,用于记录执行过程中每条语句的覆盖情况;
基于配置选项信息,随机生成m个输入集合TCi={C1,C2,C3,…,Cn},Cj表示第j个配置选项的值;
将TCi注入被检测的软件源代码中,获得TCi在程序语句集合S上的覆盖率以及程序执行结果R;R取0或1,当R为0时表示程序没有出现错误,为1时表示程序的执行发生错误;
将输入集合TCi和程序执行结果R表示为程序谱P,其中Pxy取0或1,为0表示TCx的执行路径没有覆盖语句sy
3.根据权利要求2所述的方法,其特征在于,所述的基于程序谱,通过计算所述软件源代码的每条语句与导致程序错误的卡方检验数,获得每条语句的出错可疑度包括:
对程序谱P中的信息进行统计,获得如下变量:
N表示输入集合的数量,Nf表示R为1的输入集合的数量,Ns表示R为0的输入集合的数量,Nc(si)表示覆盖语句si的输入集合的数量,Ncf(si)表示覆盖语句si且R为1的输入集合的数量,Ncs(si)表示覆盖语句si且R为0的输入集合的数量,Nu(si)表示没有覆盖语句si的输入集合的数量,Nuf(si)表示没有覆盖语句si且R为1的输入集合的数量,Nus(si)表示没有覆盖语句si且R为0的输入集合的数量,H0表示假设为程序的执行结果和语句si的覆盖率无关;
根据卡方检验公式
计算x2(si)临界值的差值判断是否可以拒绝H0的假设,如果不能拒绝则x2(si)临界值的差值为该条语句si的可疑度。
4.根据权利要求3所述的方法,其特征在于,所述的通过将所有语句的出错可疑度进行降序排列,再进行向后程序切片操作,获得配置选项列表包括:
将所有语句的出错可疑度进行降序排列;
对可疑度最高的语句si进行向后切片操作,获得影响该语句的配置选项;
重复执行上述第二个子步骤,完成所有语句si的向后切片操作,获得影响所有语句的配置选项,并获得配置选项列表。
5.根据权利要求4所述的方法,其特征在于,所述的基于配置选项列表,将某条配置选项是否流经某条语句构建为一个向量结构包括:
将配置选项列表对应的程序进行划分,获得多个块结构,将块结构迭代地相链接,获得块序列;
将所述的所有语句si的向后切片操作的结果进行剪枝操作,包括:将和执行顺序无关的语句丢弃,删除外部调用指令,删除输出流和异常检测语句;
将上述第二个子步骤的执行结果抽象为多个向量N
N=(N1,N2,...,Ni,...,Nn)i=1,...,n;
式中,若某条语句si的向后切片操作的结果否流经该某条语句si,则将向量N设置为1,否则为0。
6.根据权利要求5所述的方法,其特征在于,所述的迭代计算所有配置选项对应的向量结构之间的距离,基于所有配置选项对应的向量结构之间的距离的绝对值大小,获得配置选项之间的关联列表包括:
通过式
计算向量N之间的距离,将计算结果进行升序排序,获得配置选项之间的关联列表;式中,Wi表示第i维数据的加权值,slicei表示Ni为1的配置选项在第i个块结构中的切片语句数量,blocki表示第i个块结构中所有语句的数量,m表示Xi和Yi都为0的数量,n表示向量的总维度。
7.根据权利要求6所述的方法,其特征在于,所述的将配置选项列表与配置选项之间的关联列表进行合并处理,获得软件系统配置错误诊断结果包括:
基于合并后的配置选项列表与配置选项之间的关联列表进行判断,若某个配置选项首次出现在了关联选项中,则删除该某个配置选项的排序。
8.一种软件系统配置错误诊断系统,其特征在于,包括错误预诊断模块、关联分析模块和输出模块;
所述错误预诊断模块用于:
基于软件源代码,随机生成配置数据作为错误注入;
执行配置数据,记录执行的结果以及执行过程中每条语句的覆盖情况,构建程序谱;
基于程序谱,通过计算每条语句与导致程序错误的卡方检验数,获得每条语句的出错可疑度;
通过将所有语句的出错可疑度进行降序排列,再进行向后程序切片操作,获得配置选项列表;
所述关联分析模块用于:
基于配置选项列表,将某条配置选项是否流经某条语句构建为一个向量结构;
迭代计算所有配置选项对应的向量结构之间的距离,基于所有配置选项对应的向量结构之间的距离的绝对值大小,获得配置选项之间的关联列表;
所述输出模块用于:
将配置选项列表与配置选项之间的关联列表进行合并处理,获得软件系统配置错误诊断结果。
CN202211474627.1A 2022-11-23 2022-11-23 一种软件系统配置错误诊断方法和系统 Active CN116126680B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211474627.1A CN116126680B (zh) 2022-11-23 2022-11-23 一种软件系统配置错误诊断方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211474627.1A CN116126680B (zh) 2022-11-23 2022-11-23 一种软件系统配置错误诊断方法和系统

Publications (2)

Publication Number Publication Date
CN116126680A CN116126680A (zh) 2023-05-16
CN116126680B true CN116126680B (zh) 2023-07-21

Family

ID=86294525

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211474627.1A Active CN116126680B (zh) 2022-11-23 2022-11-23 一种软件系统配置错误诊断方法和系统

Country Status (1)

Country Link
CN (1) CN116126680B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108170467A (zh) * 2017-12-02 2018-06-15 西安财经学院 约束限定聚类和信息度量软件胎记特征选择方法、计算机
CN111596317A (zh) * 2020-05-25 2020-08-28 北京航空航天大学 一种多维故障的检测和识别方法
CN114661503A (zh) * 2022-01-26 2022-06-24 天津大学 基于程序切片的软件关联配置错误诊断方法及装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009089294A2 (en) * 2008-01-08 2009-07-16 Teamstudio, Inc. Methods and systems for generating software quality index
US20180150742A1 (en) * 2016-11-28 2018-05-31 Microsoft Technology Licensing, Llc. Source code bug prediction
US11789805B2 (en) * 2021-02-02 2023-10-17 Quantum Metric, Inc. Detecting, diagnosing, and alerting anomalies in network applications

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108170467A (zh) * 2017-12-02 2018-06-15 西安财经学院 约束限定聚类和信息度量软件胎记特征选择方法、计算机
CN111596317A (zh) * 2020-05-25 2020-08-28 北京航空航天大学 一种多维故障的检测和识别方法
CN114661503A (zh) * 2022-01-26 2022-06-24 天津大学 基于程序切片的软件关联配置错误诊断方法及装置

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
Deepgauge: Multi-granularity testing criteria for deep learning systems;Lei Ma等;Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering;全文 *
Robustness of Spectrum-based fault localisation in environments with laberling perturbations;Xu Yanhong等;Journal of Systems and Software;第147卷;全文 *
Software Fault Localization:Techniques,Issues and Remedies;Amol Saxena;IAENG International Journal of Compute Science;第49卷(第02期);全文 *
自动化软件错误定位技术研究进展;虞凯等;计算机学报;第35卷(第08期);全文 *
软件错误定位研究综述;曹鹤玲等;计算机科学;第41卷(第02期);全文 *

Also Published As

Publication number Publication date
CN116126680A (zh) 2023-05-16

Similar Documents

Publication Publication Date Title
Hayes et al. Advancing candidate link generation for requirements tracing: The study of methods
Ali et al. Assessing the effectiveness of input and output coverage criteria for testing quantum programs
Di Nucci et al. A test case prioritization genetic algorithm guided by the hypervolume indicator
Soremekun et al. Astraea: Grammar-based fairness testing
Selim et al. Model transformation testing: The state of the art
Cook Process discovery and validation through event-data analysis
CN111831556A (zh) 软件多故障解耦及并行定位方法及装置
Yang et al. A lightweight fault localization approach based on xgboost
Li et al. Comet: Coverage-guided model generation for deep learning library testing
Cosman et al. Pablo: Helping novices debug python code through data-driven fault localization
US8335749B2 (en) Generating a set of atoms
Hu et al. Identify and Update Test Cases When Production Code Changes: A Transformer-Based Approach
CN116126680B (zh) 一种软件系统配置错误诊断方法和系统
Aman et al. Empirical Study of Fault Introduction Focusing on the Similarity among Local Variable Names.
Asghari et al. Effective Software Mutation-Test Using Program Instructions Classification
Yuan et al. Incorporating multiple features to predict bug fixing time with neural networks
Wen et al. Effective isolation of fault-correlated variables via statistical and mutation analysis
Elgendy et al. A Survey of the Metrics, Uses, and Subjects of Diversity-Based Techniques in Software Testing
Gerten et al. Inference and test generation using program invariants in chemical reaction networks
Ji et al. BayesFLo: Bayesian fault localization of complex software systems
Yousofvand et al. Automatic program bug fixing by focusing on finding the shortest sequence of changes
Song et al. Slicing executable system-of-systems models for efficient statistical verification
Cai et al. Towards Large Language Model Aided Program Refinement
CN115037648B (zh) 基于数据流约简的智能合约测试用例生成方法及系统
Geijtenbeek Process Miner: how sure are you? Comparing behavioral qualities in event log

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant