静态检测方法和静态检测装置的制造方法

文档序号:10512091阅读:412来源:国知局
静态检测方法和静态检测装置的制造方法
【专利摘要】本发明公开了一种静态检测方法和静态检测装置。该方法包括:判断源代码中的程序语句为不可达语句或者可达语句;若判断出所述程序语句为不可达语句时,跳过所述不可达语句;若判断出所述程序语句为可达语句时,对所述可达语句进行缺陷计算。本发明提供的静态检测方法和静态检测装置中,若判断出程序语句为不可达语句时跳过该不可达语句,若判断出程序语句为可达语句时对该可达语句进行缺陷计算,本发明的方案可实现从源代码的程序语句识别出不可达语句,并在缺陷计算过程中跳过该不可达语句,极大的减少了后续进行缺陷确认时人工确认的工作量,从而提高了静态检测的效率。
【专利说明】
静态检测方法和静态检测装置
技术领域
[0001]本发明涉及通信技术领域,特别涉及一种静态检测方法和静态检测装置。
【背景技术】
[0002]软件测试的主要目的在于发现软件中存在的错误(Bug),对于如何处理测试中发现的错误,将直接影响到测试的效果。只有正确、迅速、准确地处理这些错误,才能消除软件的错误,保证要发布的软件符合设计的目标。近年来,面向故障的静态检测技术得到快速的发展,大量的软件测试工具被研制出来,并且在对一些大型商业软件和开源软件的测试中发现了大量的以前测试没有发现的软件故障和安全隐患。静态检测能够从源代码级别检测出软件中可能隐含的缺陷,并将这些缺陷在软件实际部署之前暴漏出来,减少后期缺陷修复的成本,提高软件的质量和可信性。
[0003]随着软件规模越来越大,软件中的代码量也随之增加。静态检测一般包括静态分析和人工确认两个阶段。静态分析过程中会检测出大量缺陷,而后这些缺陷需要经过人工确认才能得出去除。
[0004]但是,现有技术存在如下技术问题:软件中存在不可达路径,不可达路径上的代码在程序操作过程中永远不可能被执行到。静态检测过程中会检测出很多不可达路径上的缺陷,导致大量误报缺陷的产生。而静态检测过程中检测出的缺陷均需要通过人工方式逐一进行确认,确认是否是误报,这会耗费大量的人工确认的工作量,从而降低了静态检测的效率。

【发明内容】

[0005]本发明提供一种静态检测方法和静态检测装置,用于提高静态检测的效率。
[0006]为实现上述目的,本发明提供了一种静态检测方法,包括:
[0007]判断源代码中的程序语句为不可达语句或者可达语句;
[0008]若判断出所述程序语句为不可达语句时,跳过所述不可达语句;
[0009]若判断出所述程序语句为可达语句时,对所述可达语句进行缺陷计算。
[0010]可选地,所述判断源代码中的程序语句为不可达语句或者可达语句包括:
[0011]判断源代码中的程序语句是否设置有不可达标记,所述不可达标记用于标示不可达语句;
[0012]所述判断出所述程序语句为不可达语句包括:判断出源代码中的程序语句设置有不可达标记;
[0013]所述判断出所述程序语句为可达语句包括:判断出源代码中的程序语句未设置不可达标记。
[0014]可选地,所述判断源代码中的程序语句是否设置有不可达标记之前还包括:
[0015]从源代码中识别出不可达语句;
[0016]为所述不可达语句设置不可达标记。
[0017]可选地,所述从源代码中识别出不可达语句包括:
[0018]将所述源代码转化成控制流图,所述控制流图包括多个节点,每个节点对应源代码中的一条程序语句;
[0019]遍历控制流图中的每个节点,并判断每个节点是否满足该节点对应的执行条件;
[0020]若判断出该节点满足该节点对应的执行条件,确定出该节点对应的程序语句为可达语句;
[0021]若判断出该节点不满足该节点对应的执行条件,确定出该节点对应的程序语句为不可达语句。
[0022]为实现上述目的,本发明提供了一种静态检测装置,包括:
[0023]判断模块,用于判断源代码中的程序语句为不可达语句或者可达语句;
[0024]计算模块,用于若所述判断模块判断出所述程序语句为不可达语句时,跳过所述不可达语句;若所述判断模块判断出所述程序语句为可达语句时,对所述可达语句进行缺陷计算。
[0025]可选地,所述判断模块具体用于判断源代码中的程序语句是否设置有不可达标记,所述不可达标记用于标示不可达语句,判断出源代码中的程序语句设置有不可达标记或者判断出源代码中的程序语句未设置不可达标记。
[0026]可选地,还包括:
[0027]识别模块,用于从源代码中识别出不可达语句;
[0028]设置模块,用于为所述不可达语句设置不可达标记。
[0029]可选地,所述识别模块包括:
[0030]转换子模块,用于将所述源代码转化成控制流图,所述控制流图包括多个节点,每个节点对应源代码中的一条程序语句;
[0031]判断子模块,用于遍历所述控制流图中的每个节点,并判断每个节点是否满足该节点对应的执行条件;
[0032]确定子模块,用于若所述判断子模块判断出该节点满足该节点对应的执行条件,确定出该节点对应的程序语句为可达语句;若所述判断子模块判断出该节点不满足该节点对应的执行条件,确定出该节点对应的程序语句为不可达语句。
[0033]本发明具有以下有益效果:
[0034]本发明提供的静态检测方法和静态检测装置中,若判断出程序语句为不可达语句时跳过该不可达语句,若判断出程序语句为可达语句时对该可达语句进行缺陷计算,本发明的方案可实现从源代码的程序语句识别出不可达语句,并在缺陷计算过程中跳过该不可达语句,极大的减少了后续进行缺陷确认时人工确认的工作量,从而提高了静态检测的效率。
【附图说明】
[0035]图1为本发明实施例一提供的一种静态检测方法的流程图;
[0036]图2为本发明实施例二提供的一种静态检测方法的流程图;
[0037]图3为本发明实施例三提供的一种静态检测装置的结构示意图;
[0038]图4为本发明实施例四提供的一种静态检测装置的结构示意图。
【具体实施方式】
[0039]为使本领域的技术人员更好地理解本发明的技术方案,下面结合附图对本发明提供静态检测方法和静态检测装置的进行详细描述。
[0040]图1为本发明实施例一提供的一种静态检测方法的流程图,如图1所示,该方法包括:
[0041]步骤101、判断源代码中的程序语句为不可达语句或者可达语句,若是判断出所述程序语句为不可达语句时则执行步骤102,若判断出所述程序语句为可达语句时则执行步骤 103。
[0042]本实施例中,可扫描源代码中的程序语句,在扫描源代码中的程序语句的过程中判断源代码中的程序语句为不可达语句或者可达语句。
[0043]步骤102、跳过不可达语句。
[0044]本步骤中通过跳过该不可达语句,实现了无需对该不可达语句进行缺陷计算。
[0045]步骤103、对可达语句进行缺陷计算。
[0046]本实施例提供的静态检测方法中,若判断出程序语句为不可达语句时跳过该不可达语句,若判断出程序语句为可达语句时对该可达语句进行缺陷计算,本实施例的方案可实现从源代码的程序语句识别出不可达语句,并在缺陷计算过程中跳过该不可达语句,极大的减少了后续进行缺陷确认时人工确认的工作量,从而提高了静态检测的效率。本实施例中,识别出不可达语句的过程是自动完成的,无需人工完成,从而提高了识别效率。本实施例的方案可实现从源代码的程序语句识别出不可达语句,降低了缺陷误报率,从而提高了检测准确度。
[0047]图2为本发明实施例二提供的一种静态检测方法的流程图,如图2所示,该方法包括:
[0048]步骤201、从源代码中识别出不可达语句。
[0049]本步骤具体可包括:
[0050]步骤2011、将所述源代码转化成控制流图,所述控制流图包括多个节点,每个节点对应源代码中的一条程序语句。
[0051 ]步骤2012、获取每个节点对应的执行条件。
[0052]本实施例中,节点对应的执行条件为从控制流图的入口节点到该节点的所有需要满足的执行条件的集合。具体地,可获取从入口节点到该节点的所有需要满足的执行条件,并将从入口节点到该节点的所有需要满足的执行条件集合起来以形成节点对应的执行条件。优选地,可通过区间计算技术获得该节点对应的执行条件。
[0053]步骤2013、遍历控制流图中的每个节点,并判断每个节点是否满足该节点对应的执行条件,若是则执行步骤2014,若否则执行步骤2015。
[0054]本步骤中,在遍历控制流图中的每个节点的过程中,判断每个节点是否满足该节点对应的执行条件。优选地,可以从控制流图中的入口节点开始遍历过程。
[0055]步骤2014、确定出该节点对应的程序语句为可达语句。
[0056]步骤2015、确定出该节点对应的程序语句为不可达语句。
[0057]步骤202、为不可达语句设置不可达标记,不可达标记用于标示不可达语句。
[0058]本实施例中,可为识别出的每个不可达语句设置不可达标记。
[0059]步骤203、判断源代码中的程序语句是否设置有不可达标记,若是则执行步骤204,若否则执行步骤205。
[0060]若判断出源代码中的程序语句设置有不可达标记,则表明该程序语句为不可达语句;若判断出源代码中的程序语句未设置不可达标记,则表明该程序语句为可达语句。
[0061 ] 步骤204、跳过不可达语句。
[0062]步骤205、对可达语句进行缺陷计算。
[0063]本实施例提供的静态检测方法中,若判断出程序语句为不可达语句时跳过该不可达语句,若判断出程序语句为可达语句时对该可达语句进行缺陷计算,本实施例的方案可实现从源代码的程序语句识别出不可达语句,并在缺陷计算过程中跳过该不可达语句,极大的减少了后续进行缺陷确认时人工确认的工作量,从而提高了静态检测的效率。本实施例中,识别出不可达语句的过程是自动完成的,无需人工完成,从而提高了识别效率。本实施例的方案可实现从源代码的程序语句识别出不可达语句,降低了缺陷误报率,从而提高了检测准确度。
[0064]图3为本发明实施例三提供的一种静态检测装置的结构示意图,如图3所示,该装置包括:判断模块11和计算模块12。
[0065]判断模块11用于判断源代码中的程序语句为不可达语句或者可达语句。计算模块12用于若判断模块11判断出所述程序语句为不可达语句时,跳过所述不可达语句;若判断模块12判断出所述程序语句为可达语句时,对所述可达语句进行缺陷计算。
[0066]本实施例提供的静态检测装置可用于实现上述实施例一提供的静态检测方法,具体描述可参见上述实施例一。
[0067]本实施例提供的静态检测装置中,若判断出程序语句为不可达语句时跳过该不可达语句,若判断出程序语句为可达语句时对该可达语句进行缺陷计算,本实施例的方案可实现从源代码的程序语句识别出不可达语句,并在缺陷计算过程中跳过该不可达语句,极大的减少了后续进行缺陷确认时人工确认的工作量,从而提高了静态检测的效率。本实施例中,识别出不可达语句的过程是自动完成的,无需人工完成,从而提高了识别效率。本实施例的方案可实现从源代码的程序语句识别出不可达语句,降低了缺陷误报率,从而提高了检测准确度。
[0068]图4为本发明实施例四提供的一种静态检测装置的结构示意图,如图4所示,本实施例在上述实施例三的基础上,判断模块11具体用于判断源代码中的程序语句是否设置有不可达标记,不可达标记用于标示不可达语句,并判断出源代码中的程序语句设置有不可达标记或者判断出源代码中的程序语句未设置不可达标记。
[0069]进一步地,该装置还包括:识别模块13和设置模块14。
[0070]识别模块13用于从源代码中识别出不可达语句。设置模块14用于为不可达语句设置不可达标记。
[0071]具体地,识别模块13可包括:转换子模块、判断子模块和确定子模块。
[0072]转换子模块用于将所述源代码转化成控制流图,所述控制流图包括多个节点,每个节点对应源代码中的一条程序语句。判断子模块用于遍历所述控制流图中的每个节点,并判断每个节点是否满足该节点对应的执行条件。确定子模块用于若所述判断子模块判断出该节点满足该节点对应的执行条件,确定出该节点对应的程序语句为可达语句;若所述判断子模块判断出该节点不满足该节点对应的执行条件,确定出该节点对应的程序语句为不可达语句。
[0073]本实施例提供的静态检测装置可用于实现上述实施例二提供的静态检测方法,具体描述可参见上述实施例二。
[0074]本实施例提供的静态检测装置中,若判断出程序语句为不可达语句时跳过该不可达语句,若判断出程序语句为可达语句时对该可达语句进行缺陷计算,本实施例的方案可实现从源代码的程序语句识别出不可达语句,并在缺陷计算过程中跳过该不可达语句,极大的减少了后续进行缺陷确认时人工确认的工作量,从而提高了静态检测的效率。本实施例中,识别出不可达语句的过程是自动完成的,无需人工完成,从而提高了识别效率。本实施例的方案可实现从源代码的程序语句识别出不可达语句,降低了缺陷误报率,从而提高了检测准确度。
[0075]可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。
【主权项】
1.一种静态检测方法,其特征在于,包括: 判断源代码中的程序语句为不可达语句或者可达语句; 若判断出所述程序语句为不可达语句时,跳过所述不可达语句; 若判断出所述程序语句为可达语句时,对所述可达语句进行缺陷计算。2.根据权利要求1所述的静态检测方法,其特征在于,所述判断源代码中的程序语句为不可达语句或者可达语句包括: 判断源代码中的程序语句是否设置有不可达标记,所述不可达标记用于标示不可达语句; 所述判断出所述程序语句为不可达语句包括:判断出源代码中的程序语句设置有不可达标记; 所述判断出所述程序语句为可达语句包括:判断出源代码中的程序语句未设置不可达 ο3.根据权利要求2所述的静态检测方法,其特征在于,所述判断源代码中的程序语句是否设置有不可达标记之前还包括: 从源代码中识别出不可达语句; 为所述不可达语句设置不可达标记。4.根据权利要求3所述的静态检测方法,其特征在于,所述从源代码中识别出不可达语句包括: 将所述源代码转化成控制流图,所述控制流图包括多个节点,每个节点对应源代码中的一条程序语句; 遍历控制流图中的每个节点,并判断每个节点是否满足该节点对应的执行条件; 若判断出该节点满足该节点对应的执行条件,确定出该节点对应的程序语句为可达语句; 若判断出该节点不满足该节点对应的执行条件,确定出该节点对应的程序语句为不可达语句。5.一种静态检测装置,其特征在于,包括: 判断模块,用于判断源代码中的程序语句为不可达语句或者可达语句; 计算模块,用于若所述判断模块判断出所述程序语句为不可达语句时,跳过所述不可达语句;若所述判断模块判断出所述程序语句为可达语句时,对所述可达语句进行缺陷计笪并ο6.根据权利要求5所述的静态检测装置,其特征在于,所述判断模块具体用于判断源代码中的程序语句是否设置有不可达标记,所述不可达标记用于标示不可达语句,判断出源代码中的程序语句设置有不可达标记或者判断出源代码中的程序语句未设置不可达标记。7.根据权利要求6所述的静态检测装置,其特征在于,还包括: 识别模块,用于从源代码中识别出不可达语句; 设置模块,用于为所述不可达语句设置不可达标记。8.根据权利要求7所述的静态检测装置,其特征在于,所述识别模块包括: 转换子模块,用于将所述源代码转化成控制流图,所述控制流图包括多个节点,每个节点对应源代码中的一条程序语句; 判断子模块,用于遍历所述控制流图中的每个节点,并判断每个节点是否满足该节点对应的执行条件; 确定子模块,用于若所述判断子模块判断出该节点满足该节点对应的执行条件,确定出该节点对应的程序语句为可达语句;若所述判断子模块判断出该节点不满足该节点对应的执行条件,确定出该节点对应的程序语句为不可达语句。
【文档编号】G06F11/36GK105868103SQ201610169984
【公开日】2016年8月17日
【申请日】2016年3月23日
【发明人】杨学红
【申请人】中国联合网络通信集团有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1