CN106021116B - 复杂系统中不可达函数调用路径检测方法 - Google Patents

复杂系统中不可达函数调用路径检测方法 Download PDF

Info

Publication number
CN106021116B
CN106021116B CN201610397496.XA CN201610397496A CN106021116B CN 106021116 B CN106021116 B CN 106021116B CN 201610397496 A CN201610397496 A CN 201610397496A CN 106021116 B CN106021116 B CN 106021116B
Authority
CN
China
Prior art keywords
function
node
source code
unreachable
path
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.)
Expired - Fee Related
Application number
CN201610397496.XA
Other languages
English (en)
Other versions
CN106021116A (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 Information Science and Technology University
Original Assignee
Beijing Information Science and Technology 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 Information Science and Technology University filed Critical Beijing Information Science and Technology University
Priority to CN201610397496.XA priority Critical patent/CN106021116B/zh
Publication of CN106021116A publication Critical patent/CN106021116A/zh
Application granted granted Critical
Publication of CN106021116B publication Critical patent/CN106021116B/zh
Expired - Fee Related 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

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

本发明提供一种复杂系统中不可达函数调用路径检测方法,包括:步骤1、针对源代码进行函数指针处理,以区分出函数指针的声明、赋值、使用;步骤2、将经过函数指针处理的源代码生成源代码的中间代码;其中所述中间代码包括多个函数单元,每一函数单元以一个函数为基本处理单元,且每一函数单元中包括至少一个基本代码块;提取每个基本代码块内部的数据流信息和各个基本代码块之间的控制流信息,并存放在json文件中;步骤3、判断控制流信息中分支节点是否具有确定的走向以进行不可达控制流的检测。

Description

复杂系统中不可达函数调用路径检测方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种复杂系统中不可达函数调用路径检测方法。
背景技术
随着社会的不断进步和计算机技术的迅速发展,软件作为计算机的灵魂,在国民经济和社会生活等方面的应用日益广泛。与此同时,随着用户需求的不断提高,在软件功能不断增强的同时其规模也在不断扩大,从而导致整个软件系统越来越复杂。由于软件复杂度是产生软件缺陷的主要根源,因此复杂度的不断提高对软件的测试和维护工作也是一个新的挑战。
路径测试法作为一种基本的测试方法,其关键在于如何准确地获取测试路径的集合。其中基路径测试是Tom McCabe首先提出的一种路径测试技术,该方法的分析粒度定位在语句级,因此对于复杂系统来说,基于基路径的测试工作量就会非常繁重。
而基于函数调用的路径测试方法将分析粒度扩展为函数,以函数为基本单元,在单个函数完成单元测试的前提下,该方法不仅可以有效地对测试路径集进行优化,同时也可保证测试完全。针对于复杂系统,该测试方法的优势更为突出,在保证测试充分的同时在很大程度上提高了测试的效率。
函数调用路径集的获取是使用面向函数调用路径测试方法的关键。由于动态执行系统耗时耗力,因此针对复杂系统可通过静态分析源代码获取系统的函数调用路径。其中提高该测试方法效率的关键在于不可达路径的检测。首先,不可达路径的检测和去除不仅提高了函数调用路径提取的准确度、避免了冗余测试用例的生成耗费,同时降低了不可达路径对测试覆盖率的影响。其次,排除了不可达路径上信息的干扰,更有助于软件系统的理解、分析和错误定位。但是现有技术中缺少准确高效的复杂系统中不可达函数调用路径的检测方法。
发明内容
针对现有技术中存在的缺陷,本发明要解决的技术问题是提供一种复杂系统中不可达函数调用路径检测方法。
为了解决上述问题,本发明实施例提出了一种复杂系统中不可达函数调用路径检测方法,包括:
步骤1、针对源代码进行函数指针处理,以区分出函数指针的声明、赋值、使用;
步骤2、将经过函数指针处理的源代码生成源代码的中间代码;其中所述中间代码包括多个函数单元,每一函数单元以一个函数为基本处理单元,且每一函数单元中包括至少一个基本代码块;提取每个基本代码块内部的数据流信息和各个基本代码块之间的控制流信息,并存放在json(JavaScript Object Notation)文件中;
步骤3、判断控制流信息中分支节点是否具有确定的走向以进行不可达控制流的检测。
其中,所述步骤1具体包括:
根据预设的第一匹配模式对源代码进行匹配,所述第一匹配模式的表达式为:[a-z]*[()[]*[*][_a-zA-Z]*[_a-zA-Z0-9]*[]][]*[();如果源代码与第一匹配模式匹配,则该部分源代码为函数指针的声明或使用;判断字典中是否存在该指针记录;如果不存在,说明匹配的是函数指针的声明,需将函数指针名作为键存放在字典中;如果存在,说明匹配的是函数指针的使用,则先从字典中查找该指针对应的函数,然后将源代码中的指针名和函数名进行等效替换;
根据预设的第二匹配模式对源代码进行匹配,所述第二匹配模式的表达式为:[]*[_a-zA-Z]*[_a-zA-Z0-9]*[]*[=][]*[_a-zA-Z]*[_a-zA-Z0-9]*;如果源代码与第二匹配模式匹配,则该部分源代码为函数指针的赋值;将其所指向的函数存放在字典内该键所对应的值中。
其中,所述步骤2具体包括:
步骤21、以经过函数指针处理的源代码作为输入,通过GCC编译器生成源代码的中间代码;其中所述中间代码包括多个函数单元,每一函数单元以一个函数为基本处理单元,且每一函数单元中包括至少一个基本代码块;
步骤22、针对每一函数单元中的函数生成数据流信息,所述数据流信息以结构树的形式表示,该结构树中的叶子节点为其父节点的解释说明;
步骤23、提取基本代码块之间的控制流信息并同时提取基本代码块中的函数调用信息,将所述控制流信息以结构树的形式进行存储。
其中,所述步骤3具体包括:
步骤31、分析所述控制流信息的结构树,以获取控制流中的起始节点;
步骤32、判断该当前节点是否为分支节点,如果否则只保存其控制流路径信息;如果是则对起始节点到当前节点之间的路径采用路径敏感分析方法,获取该局部路径上的数据流信息;
步骤33、分析该控制流信息的结构树中的各个节点之间数据流信息是否存在冲突;如果有冲突则该路径为不可达控制流路径;如果没有冲突则采用深度优先方法遍历控制流信息中的下一个节点,并以该节点作为当前节点,返回步骤32。
其中,所述步骤33中还包括:针对不可达控制流,删除该分支下的所有控制流信息。
本发明的上述技术方案的有益效果如下:上述方案中提出了一种基于程序静态分析的不可达函数调用路径检测方法,将函数指针和函数调用对数据流的分析因素考虑在内,结合数据流分析和探测分支相关性方法,以控制流中的分支节点为关键点,进行不可达控制流的检测与去除,通过对处理后的控制流进行分析提取排除不可达路径的函数调用路径信息。实验结果表明,该方法可以有效地对数据流的变化进行分析,准确地对函数调用路径中的不可达路径进行检测。
附图说明
图1为本发明实施例中的函数调用效果比对图;
图2为本发明实施例中的数据流存储结构示例图;
图3为本发明实施例中的数据流信息提取实例图;
图4为本发明实施例中的控制流存储结构示例图;
图5为本发明实施例中的控制流信息提取实例图;
图6为函数调用路径提取实例图;
图7为函数调用路径信息对比图。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
首先对本发明实施例中所使用概念进行说明以便于理解。
1、控制流图:
控制流图由节点(N)和边(E)组成,其中每个节点表示一个基本代码块,每条边有一个起始节点(B)和一个终止节点(D),表示基本代码块中的一个控制流。因此控制流图可以用一个四元组表示<N,E,B,D>(E∈N×N,B∈N,D∈N)。
2、函数调用路径集:针对程序源代码,由函数调用关系得到的从程序入口点到出口点的函数名序列的集合,表示为G={P0,P1,…,Pn},Pi={F0,F1,…,Fn}表示其中的一条函数调用路径,Fj表示一个函数,Fj和Fj+1的相邻关系表示Fj调用了Fj+1,或Fj与Fj+1顺序执行。
3、不可达函数调用路径:在静态分析得到的函数调用路径集(G)中,如果存在一条路径(P),任何输入都不会使该路径从起点完整地执行到终点,则称该路径为不可达函数调用路径。可表示为且P∈G,若Pex={F0,…,Fj(j≠n)},则P∈Ginfeasible。其中Pin表示函数调用路径P的输入,Pex表示函数调用路径P的动态执行序列,Ginfeasible表示不可达函数调用路径集。
本发明实施例提出了一种不可达函数调用路径检测方法,包括:
1、函数指针处理
函数指针处理旨在排除其对函数调用路径静态提取的干扰及对数据流的影响。如图1所示,用存在关联关系的两段源代码进行实验:其中源代码A中采用了函数指针的形式对函数进行调用操作,而源代码B仅在源代码A的基础上对函数指针的使用部分略微调整,将函数指针和其所指向的函数进行替换。针对于源代码A通过动态执行的方法提取其函数调用路径。针对于源代码B借鉴以下的参考文献[12]中的静态提取函数调用路径的方法提取其函数调用路径。实验显示两个源代码获取的函数调用路径完全一致,该结果表明在使用函数指针进行函数调用的代码中,无论是显示指针名还是显示其所指向的函数名,其调用效果是等效的。
鉴于如图1所示的实验得出的结论,可将蜕变测试的原理运用于函数指针的处理中,在不影响函数调用路径提取和后期测试效果的前提下,根据函数指针和函数间的关联关系将两者进行等效替换。在对源代码进行静态分析时采用一种pattern:action的方式。操作时先设定模式(pattern)和动作(action)之间的对应关系,当匹配到某条模式时执行相应的动作。对于函数指针的处理,主要匹配的模式是函数指针的声明、赋值和使用。针对于普通的函数指针,将使用字典对指针和函数之间的关联信息进行保存。字典是一个由键值对构成的简易的存储结构,便于数据的存取和快速检索。
模式pattern如表1所示:
表1模式列表
表中共有2种模式,左侧为模式序号,右侧为该模式的类正则表达式。匹配到模式M1和M2时其执行的操作各不相同:
匹配到模式M1时,首先判断字典中是否存在该指针记录;如果不存在,说明匹配的是函数指针的声明,需将函数指针名作为键存放在字典中;如果存在,说明匹配的是函数指针的使用,可先从字典中查找该指针对应的函数,然后将源代码中的指针名和函数名进行等效替换。
匹配到模式M2,说明出现了函数指针的赋值操作,需将其所指向的函数存放在字典内该键所对应的值中。
在静态分析过程中采用自顶向下的分析策略,如果一个函数指针的指向发生变化,则及时更新字典中该函数指针所对应的函数名,保证信息提取的准确性。
2、信息提取步骤;
函数调用路径是以函数为分析粒度提取出的程序执行路径。但进行不可达函数调用路径信息提取时如果仍以函数为分析粒度,将遗漏大量的控制流和数据流信息,从而极大的降低后期检测的效率和准确度。因此在进行信息提取时以函数为处理单元,将粒度缩小为基本代码块,针对每个基本代码块中的控制流和数据流信息进行提取。以经过函数指针处理的源代码作为输入,借助于GCC编译器生成源代码的中间代码。中间代码中以函数为基本处理单元,每个函数单元由若干个基本代码块组成。可从中提取每个基本代码块内部的数据信息和各个基本代码块之间的控制信息,然后存放在特定格式的json文件中。
一个程序可能由多个函数构成,一个函数内又可能包含多个基本代码块,并且每个基本代码块中涉及到的变量可能也不止一个。这种复杂对应关系的存储结构树如图2所示。其中一个结构树存放一个函数内的数据流信息,树中的叶子节点是对其父节点的解释说明。针对于图3左侧的程序源代码,其数据流信息的提取结果如图3右侧所示。
同数据流类似,控制流信息也是以函数为基本处理单元。在提取控制流信息的同时对代码块中的函数调用信息也进行提取,并将其作为代码块中的一个属性值保存在json文件中,其文件结构树如图4所示。一个结构树存放一个函数内的控制流信息。
针对图3中的源代码,其控制流信息的提取过程如图5所示。其中为了更加直观地展示函数内的控制结构,通过对json文件中的控制流信息进行分析可得到单个函数的控制流图。
3、不可达判定步骤
由于提取的控制流信息中包含函数调用信息,因此可通过对不可达控制流的检测来达到检测不可达函数调用路径的目的。所以研究重点应放在如何通过静态分析检测含有函数调用信息的不可达控制流。
肖庆等人在文献[13]中用实例证明路径敏感方法能够精确地获取路径上各分支节点的组合关系、区分不同路径上的控制信息,可用于不可达路径的检测和去除。其中完整路径分析方法需要准确记录每条不同路径上的状态信息,所以其复杂性和代价比较大[13]。基于这一情况,论文提出沿着控制流图中的执行路径,采用自顶向下的分析策略,针对路径起点到待分析节点之间采用路径敏感分析方法进行不可达信息的检测。
静态分析检测不可达路径常用的方法有两种,其中基于路径条件可满足性[14-15]过于复杂,进行不可达路径的检测耗费太大,针对于复杂系统来说实用性比较差。关于探测分支相关性[16-18],1997年Bodik等人指出一个复杂程序9%至40%的条件语句都存在相关性,通过分析条件相关性可以高效地进行不可达路径的检测[19]。
基于以上分析,在利用路径敏感分析方法自顶向下检测不可达控制流时,可以控制流中分支节点为关键点,结合节点中的数据流进行分析,通过探测该分支节点的走向是否确定来进行不可达控制流的检测。当检测到一个不可达分支时,可直接将该分支下的所有控制流信息移除,这样可在很大程度上提高检测的效率。
在获得单个函数内控制流和数据流信息的基础上进行不可达判定的步骤如下:
1)从函数内控制流中的节点入手分析,获得控制流中的起始节点。
2)判断该节点是否为分支节点,如果不是,则只保存其控制流路径信息。如果是分支节点,则针对于起始节点到该分支节点之间的路径采用路径敏感分析方法,获取该局部路径上的数据流信息。
3)分析各节点中的数据流信息间是否存在冲突。若产生冲突,则判定存在不可达控制流,即可将冲突分支下的所有控制流信息移除。如果不存在冲突,则按深度优先遍利的思想获取控制流中的下一个节点,然后执行第二步的操作。
如此循环执行,直到控制流中的所有节点都遍历完毕,即可得到单个函数处理后的控制流信息,然后利用课题组已有算法从中提取函数调用路径。
针对以上研究思路,给出检测单个函数内不可达控制流信息的核心算法(optimize)如下:其中funcation_name为函数名,所需全局信息为该函数的控制流信息(Ctokens)和数据流信息(Dnodes),输入为控制流中节点名称(node_name)及从控制流中起始节点沿遍历序列到该节点之前局部路径上的数据流信息集合(Dfront),node_name的初始值为控制流图中的起始节点,Dfront的初始值可设为Null。输出为该函数中经处理后的控制流信息(Ctokens)。
其中get_tokens、get_nodes、find_token、del_token是针对控制流和数据流存储文件的相关操作。detect(Dfront,Dnode)用于检测Dfront和Dnode中的数据流信息是否存在冲突,该方法的返回值为Bool类型,如果存在冲突返回True,否则返回False。combine(Dfront,Dnode)表示将Dfront和Dnode中的数据流信息进行集成。optimize(node,Dfront)表示递归调用本算法,以node和Dfront为新的输入再次执行。
该控制流信息的节点中含有函数调用信息,因此可通过检测不可达控制流来进行不可达函数调用路径的检测。由于不可达函数调用路径在程序动态执行时不存在,故检测到不可达信息将进行去除操作。
5实验与评测
在实验中,通过分析函数指针及函数调用对程序中数据流的影响,静态获取程序中的函数调用路径,从而对论文中提出的不可达函数调用路径的检测方法进行验证。
图6中左侧部分为实验源代码,不进行函数指针的处理直接对源代码进行静态分析,且并未对不可达函数调用路径进行检测与去除,得函数调用路径图如图6右侧所示。其中<begin>和<end>节点分别表示main函数的开始和结束。
针对图6中的源代码进行函数指针的处理,然后考虑不同因素对数据流的影响,获取其函数调用信息。其中条件T1表示是否考虑函数指针对数据流的影响,T1表示考虑,表示不考虑。条件T2表示是否考虑函数调用对数据流的影响,T2表示考虑,表示不考虑。针对不同的情况进行分析得其函数调用路径信息如图7所示。
图7中不同情况下函数调用路径信息的对比分析结果如表2、表3所示,其中路径的可达性用feasible/infeasible表示。
表2函数调用路径编号对应表
表3函数调用路径对比分析
本发明实施例中引用的参考文献列表如下,本发明实施例将以下参考文献全文引用于此:
[1]单锦辉,姜瑛,孙萍.软件测试研究进展[J].北京大学学报(自然科学版),2005,41(1):134-145.
[2]蔡开元.软件可靠性工程基础[M].北京:清华大学出版社,1995.
[3]梅玲霞,张忠林.软件测试中基路径获取方法的研究[J].兰州交通大学学报,2011,1:6-9.
[4]解圣霞.基于基本路径测试的程序图自动生成的应用研究[J].通化师范学院学报,2009,12:32-35.
[5]WatsonAH,McCabeTJ,WallaceD R.Structuredtesting:Atestingmethodologyusingthe cyclomatic complexitymetric[J].NISTspecialPublication,1996,500(235):1-114.
[6]MUYong min,ZHENGYuhui,ZHANG Zhi hua et al.The algorithmofinfeasible paths extraction orientedthe functioncallingrelationship[J].CHINESE JOURNAL OF ELECTRONICS,2012,21(2):236-240.
[7]MARTINSE,TOYOTACM,YANAGAWARL.Constructing self-testable softwarecomponents[C]//Proceedings ofthe 2001InternationalConference on DependableSystems andNetworks.Washington:IEEE Computer Society,2001:151-160.
[8]YANJ,ZHANGJ.An efficient method to generate feasible paths forbasis path testing[J].Information ProcessingLetters,2008,3(107):87-92.
[9]Ngo M N,Tan H B K.Detecting large number of infeasible pathsthrough recognizing their patterns[C]//Proceedings ofthe 6th Joint Meetingofthe European Software Engineering Conference and theACM SIGSOFT Symposiumon the Foundations ofSoftware Engineering(ESEC/FSE),Cavat near Dubrovnik,Croatia,2007.NewYork,NY,USA:ACM,2007:215-224.
[10]Bang L,AydinA,Bultan T.Automatically computing path complexityofprograms[C]//Proceedings of the 201510th JointMeeting on FoundationsofSoftware Engineering.ACM,2015:61-72.
[11]牟永敏,姜智荧,张志华.面向C程序插装的路径提取[J].计算机工程与应用,2011,47(1):67-69.
[12]牟永敏,杨志嘉.基于函数调用路径的软件实现与设计一致性验证[J].中国科学:信息科学,2014(10):1290-1304.
[13]肖庆,宫云战,杨朝红,金大海,王雅文.一种路径敏感的静态缺陷检测方法[J].软件学报.2010(02):209-217.
[14]Peres L M,Vergilio S R,Jino M,et al.Path selection in thestructural testing:proposition,implementation and application of strategies[C]//Computer Science Society,2001.SCCC'01.Proceedings.XXI InternatinalConference ofthe Chilean.IEEE,2001:240-246.
[15]Gilles A,Sylviane S E.Explanation-Based Generalization ofInfeasible Path[C]//Software Testing,Verification andValidation(ICST),2010Third International Conference on.IEEE,2010:215-224.
[16]Chen T,Mitra T,RoychoudhuryA,et al.Exploiting branch constraintswithout exhaustive path enumeration[C]//Proceedings of the 5th InternationalWorkshop on Worst-Case Execution Time Analysis(WCET’05),Palma de Mallorca,Spain,2005:40-43.
[17]SuhendraV,Mitra T,RoychoudhuryA,et al.Efficient detection andexploitation ofinfeasible paths for software timing analysis[C]//Proceedingsofthe 43rd annual Design Automation Conference.ACM,2006:358-363.
[18]Zhunag X,Zhang T,Pande S.Using Branch Correlation to IdentifyInfeasible Paths for Anomaly Detection.[J].Proceedings of Annual IEEE/ACMInternational Symposium on Microarchitecture,2006:113-122.
[19]Bodik R,Gupta R,Soffa M L.Refining data flow information usinginfeasible paths[J].Lecture Notes in Computer Science,1997,22(6):361-377.
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (4)

1.一种复杂系统中不可达函数调用路径检测方法,其特征在于,包括:
步骤1、针对源代码进行函数指针处理,以区分出函数指针的声明、赋值、使用;
步骤2、处理经过函数指针处理的源代码以生成源代码的中间代码;其中所述中间代码包括多个函数单元,每一函数单元以一个函数为基本处理单元,且每一函数单元中包括至少一个基本代码块;提取每个基本代码块内部的数据流信息和各个基本代码块之间的控制流信息,并存放在json文件中;
步骤3、判断控制流信息中分支节点是否具有确定的走向以进行不可达控制流的检测;
其中所述步骤1具体包括:
根据预设的第一匹配模式对源代码进行匹配,所述第一匹配模式的表达式为:[a-z]*[()[]*[*][_a-zA-Z]*[_a-zA-Z0-9]*[]][]*[();如果源代码与第一匹配模式匹配,则该源代码为函数指针的声明或使用;判断字典中是否存在该函数指针记录;如果不存在,说明匹配的是函数指针的声明,需将函数指针名作为键存放在字典中;如果存在,说明匹配的是函数指针的使用,则先从字典中查找该函数指针对应的函数,然后将源代码中的指针名和函数名进行等效替换;
根据预设的第二匹配模式对源代码进行匹配,所述第二匹配模式的表达式为:[]*[_a-zA-Z]*[_a-zA-Z0-9]*[]*[=][]*[_a-zA-Z]*[_a-zA-Z0-9]*;如果源代码与第二匹配模式匹配,则该源代码为函数指针的赋值;将其所指向的函数存放在字典内对应键所对应的值中。
2.根据权利要求1所述的复杂系统中不可达函数调用路径检测方法,其特征在于,其中所述步骤2具体包括:
步骤21、以经过函数指针处理的源代码作为输入,通过GCC编译器生成源代码的中间代码;其中所述中间代码包括多个函数单元,每一函数单元以一个函数为基本处理单元,且每一函数单元中包括至少一个基本代码块;
步骤22、针对每一函数单元中的函数生成数据流信息,所述数据流信息以结构树的形式表示,该结构树中的叶子节点为其父节点的解释说明;
步骤23、提取基本代码块之间的控制流信息并同时提取基本代码块中的函数调用信息,将所述控制流信息以结构树的形式进行存储。
3.根据权利要求2所述的复杂系统中不可达函数调用路径检测方法,其特征在于,其中所述步骤3具体包括:
步骤31、分析所述控制流信息的结构树,以获取控制流中的起始节点;
步骤32、判断当前节点是否为分支节点,否则只保存其控制流路径信息;如果是则对起始节点到当前节点之间的路径采用路径敏感分析方法,获取该路径上的数据流信息;
步骤33、分析所述控制流信息的结构树中的各个节点之间数据流信息是否存在冲突;如果有冲突则该控制流信息路径为不可达控制流路径;如果没有冲突则采用深度优先方法遍历控制流信息中的下一个节点,并以该节点作为当前节点,返回步骤32。
4.根据权利要求3所述的复杂系统中不可达函数调用路径检测方法,其特征在于,所述步骤33中还包括:针对不可达控制流,删除该控制流分支下的所有控制流信息。
CN201610397496.XA 2016-06-07 2016-06-07 复杂系统中不可达函数调用路径检测方法 Expired - Fee Related CN106021116B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610397496.XA CN106021116B (zh) 2016-06-07 2016-06-07 复杂系统中不可达函数调用路径检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610397496.XA CN106021116B (zh) 2016-06-07 2016-06-07 复杂系统中不可达函数调用路径检测方法

Publications (2)

Publication Number Publication Date
CN106021116A CN106021116A (zh) 2016-10-12
CN106021116B true CN106021116B (zh) 2018-07-13

Family

ID=57089945

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610397496.XA Expired - Fee Related CN106021116B (zh) 2016-06-07 2016-06-07 复杂系统中不可达函数调用路径检测方法

Country Status (1)

Country Link
CN (1) CN106021116B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107329974A (zh) * 2017-05-26 2017-11-07 福建师范大学 用于hls指令优化的数据提取方法及其系统
US10768913B2 (en) 2018-08-23 2020-09-08 Oracle International Corporation Method for performing deep static analysis with or without source code
CN109710538B (zh) * 2019-01-17 2021-05-28 南京大学 一种用于大规模系统中状态相关缺陷的静态检测方法
CN110297639B (zh) * 2019-07-01 2023-03-21 北京百度网讯科技有限公司 用于检测代码的方法和装置
CN112181808B (zh) * 2020-09-08 2022-06-28 北京邮电大学 一种程序并发缺陷检测方法、装置、设备以及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073587A (zh) * 2010-12-27 2011-05-25 北京邮电大学 一种程序中不可达路径的静态检测方法
CN104317707A (zh) * 2014-10-15 2015-01-28 中国科学院软件研究所 一种基于程序结构影响感知的软件错误定位方法
CN104360938A (zh) * 2014-10-21 2015-02-18 北京邮电大学 一种故障确认方法及其系统
CN104572476A (zh) * 2015-01-30 2015-04-29 南京邮电大学 一种基于程序切片的软件安全测试方法
CN105138335A (zh) * 2015-08-28 2015-12-09 牟永敏 一种基于控制流图的函数调用路径提取方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073587A (zh) * 2010-12-27 2011-05-25 北京邮电大学 一种程序中不可达路径的静态检测方法
CN104317707A (zh) * 2014-10-15 2015-01-28 中国科学院软件研究所 一种基于程序结构影响感知的软件错误定位方法
CN104360938A (zh) * 2014-10-21 2015-02-18 北京邮电大学 一种故障确认方法及其系统
CN104572476A (zh) * 2015-01-30 2015-04-29 南京邮电大学 一种基于程序切片的软件安全测试方法
CN105138335A (zh) * 2015-08-28 2015-12-09 牟永敏 一种基于控制流图的函数调用路径提取方法及装置

Also Published As

Publication number Publication date
CN106021116A (zh) 2016-10-12

Similar Documents

Publication Publication Date Title
CN106021116B (zh) 复杂系统中不可达函数调用路径检测方法
Ni et al. A cluster based feature selection method for cross-project software defect prediction
CN111459799B (zh) 一种基于Github的软件缺陷检测模型建立、检测方法及系统
CN110287313A (zh) 一种风险主体的确定方法及服务器
Qian et al. Svip: Sequence verification for procedures in videos
CN103200203B (zh) 基于执行轨迹的语义级协议格式推断方法
Sotgiu et al. Explainability-based debugging of machine learning for vulnerability discovery
Wang et al. Smart contract vulnerability detection using code representation fusion
CN106339313A (zh) 一种Java API程序异常与文档的描述不一致自动检测方法
CN105930442B (zh) 一种基于统计计算的网站搜索引擎优化方法及系统
CN103823868B (zh) 一种面向在线百科的事件识别方法和事件关系抽取方法
CN105487983A (zh) 基于智能路径引导的敏感点逼近方法
CN102681932B (zh) 一种检测软件异常输入处理正确性的方法
CN104331361B (zh) 一种用于白盒测试覆盖率计算可视化的测试装置及方法
CN110287114A (zh) 一种数据库脚本性能测试的方法及装置
Chen et al. Exploiting branch constraints without exhaustive path enumeration
CN108920500A (zh) 一种时间解析方法
Korzeniowski et al. Discovering interactions between applications with log analysis
CN109002723A (zh) 一种分段式符号执行方法
CN109299453A (zh) 一种用于构建词典的方法和装置
CN105159835B (zh) 一种基于全局超级块支配图的插桩位置获取方法
CN102779093B (zh) 对象粒度收集的Java不变式检测系统
CN106681910A (zh) 一种基于主机代码解析生成测试案例的方法及装置
Ma et al. A method for discretization of continuous attributes in network performance measurement
Wang et al. Global Semantics with Boundary Constraint Knowledge Graph for Chinese Financial Event Detection

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20180713

Termination date: 20200607