软件缺陷检测方法及装置制造方法

文档序号:6546166阅读:191来源:国知局
软件缺陷检测方法及装置制造方法
【专利摘要】本发明公开了一种软件缺陷检测方法及装置,其中,方法包括:扫描源代码,检测所述源代码中是否存在缺陷;若所述源代码中存在缺陷,则确定所述缺陷是否为已确认过的误报缺陷;若所述缺陷不是已确认过的误报缺陷,则将所述缺陷显示给用户,以供用户进行确认或修改;若所述缺陷是已确认过的误报缺陷,则拒绝将所述缺陷显示给用户。本发明通过确定所述缺陷是否为已确认过的误报缺陷,将未确认过的缺陷显示给用户,以供用户进行确认或修改,将已确认过的误报缺陷屏蔽掉,不再显示给用户,这样在后续的检测过程中用户就不用再对已确认过的误报缺陷进行重复确认,可以大大减少用户的工作量,减少用户的负担。
【专利说明】软件缺陷检测方法及装置
【技术领域】
[0001]本发明实施例涉及计算机软件技术,尤其涉及一种软件缺陷检测方法及装置。
【背景技术】
[0002]随着科学技术的发展,软件已经成为影响国民经济、军事、政治乃至社会生活的重要因素,而软件缺限的存在容易导致软件产品在某种程度上不能满足用户的需求,对软件质量有着重要的影响。
[0003]所谓软件缺陷,即为计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺限。目前,软件缺陷的检测方法有很多,最常见的是静态分析法,即在不实际执行程序的情况下,对被测试程序源代码进行扫描,提取程序关键语法,解释其语义,理解程序行为,根据预先设定的漏洞特征、安全规则等检测程序中所存在的缺陷。
[0004]但是,上述静态检测方法,一般采用将缺陷所在的位置显示给用户,以供用户确认是否是误报的缺陷,并针对非误报的缺陷进行修改,当用户再次扫描源代码时或者对后续版本的源代码进行扫描时,原来已确认后的误报缺陷会再次被检测出来,这样就需要用户对已确认过的误报缺陷再进行一次确认,致使用户做大量的重复性工作,给用户带来不便。

【发明内容】

[0005]本发明提供一种软件缺陷检测方法及装置,用以解决现有技术中当用户再次扫描源代码时或者对后续版本的源代码进行扫描时,原来已确认后的误报缺陷会再次被检测出来,这样就需要用户对已确认过的误报缺陷再进行一次确认,致使用户做大量的重复性工作,给用户带来不便的缺陷。
[0006]本发明提供一种软件缺陷检测方法,包括:
[0007]扫描源代码;
[0008]检测所述源代码中是否存在缺陷;
[0009]若所述源代码中存在缺陷,则确定所述缺陷是否为已确认过的误报缺陷;
[0010]若所述缺陷不是已确认过的误报缺陷,则将所述缺陷显示给用户,以供用户进行确认或修改;
[0011]若所述缺陷是已确认过的误报缺陷,则拒绝将所述缺陷显示给用户。
[0012]本发明还提供一种软件缺陷检测装置,包括:
[0013]扫描模块,用于扫描源代码;
[0014]检测模块,用于检测所述源代码中是否存在缺陷;
[0015]确定模块,用于若所述源代码中存在缺陷,则确定所述缺陷是否为已确认过的误报缺陷;
[0016]显示模块,用于若所述缺陷不是已确认过的误报缺陷,则将所述缺陷显示给用户,以供用户进行确认或修改;
[0017]拒绝模块,用于若所述缺陷是已确认过的误报缺陷,则拒绝让所述显示模块将所述缺陷显示给用户。
[0018]本发明通过确定所述缺陷是否为已确认过的误报缺陷,将未确认过的缺陷显示给用户,以供用户进行确认或修改,将已确认过的误报缺陷屏蔽掉,不再显示给用户,这样在后续的检测过程中用户就不用再对已确认过的误报缺陷进行重复确认,可以大大减少用户的工作量,减少用户的负担。
【专利附图】

【附图说明】
[0019]图1为本发明提供的软件缺陷检测方法实施例一流程示意图;
[0020]图2为本发明提供的软件缺陷检测方法实施例二流程示意图;
[0021]图3为本发明提供的软件缺陷检测装置实施例一结构示意图;
[0022]图4为本发明提供的软件缺陷检测装置实施例二结构示意图。
【具体实施方式】
[0023]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0024]图1为本发明提供的软件缺陷检测方法实施例一流程示意图,如图1所示,具体包括如下步骤:
[0025]S101、扫描源代码;
[0026]需要说明的是,本实施例的执行主体为图3和图4所示的软件缺陷检测装置,在开始测试被测软件存在的缺陷之前,需要获取到软件的源程序代码,例如,可以采用用户输入或上传的方式。在获取到软件的源程序代码之后,则开始逐行扫描源代码,以检测所述源代码中是否存在缺陷。
[0027]S102、检测所述源代码中是否存在缺陷;
[0028]具体来说,本实施例检测所述源代码中是否存在缺陷可以采用现有技术,例如静态检测法,直接分析源代码,通过词法分析、语法分析和静态语义分析,检测源代码中存在的缺陷,上述方法均为现有技术,这里不再累述。若检测到所述源代码中存在的缺陷,例如,每检测到一个缺陷,则执行一次步骤S103,或者,等检测完源代码中存在的所有缺陷之后,执行步骤S103,若检测到所述源代码中未存在缺陷,则结束本次检测。
[0029]S103、确定所述缺陷是否为已确认过的误报缺陷;
[0030]具体来说,可以采用下述方法来确定:确定所述缺陷是否存在于误报缺陷库中,所述误报缺陷库存储有所述用户已确认过的误报缺陷,例如,所述误报缺陷库中可以存储已确认过的误报缺陷所在的程序代码或者程序代码对应的行号等,当所述误报缺陷库中存储有已确认过的误报缺陷所在的程序代码时,则提取所述缺陷所在的程序代码,确定所述缺陷所在的程序代码是否存在于所述误报缺陷库中,或者,当所述误报缺陷库中存储有已确认过的误报缺陷所在的程序代码对应的行号时,提取所述缺陷所在的程序代码对应的行号,确定所述缺陷所在的程序代码对应的行号是否存在于所述误报缺陷库中,若存在,则确定所述缺陷为已确认过的误报缺陷;若不存在,则确定所述缺陷为未确认过的缺陷。若确定所述缺陷不是已确认过的误报缺陷,则执行步骤S104,若确定所述缺陷是已确认过的误报缺陷,则执行步骤S105。
[0031]S104、将所述缺陷显示给用户,以供用户进行确认或修改;
[0032]S105、拒绝将所述缺陷显示给用户。
[0033]具体来说,上述检测过程可以为每检测到一个缺陷,则确定该缺陷是否为已确认过的误报缺陷,若确定该缺陷不是已确认过的误报缺陷,则将该缺陷显示给用户,以供用户进行确认或修改,若确定该缺陷是已确认过的误报缺陷,则拒绝将该缺陷显示给用户,重复上述过程,直至检测完源代码中存在的所有缺陷;或者,等检测完源代码中存在的所有缺陷之后,一一确定上述所有缺陷是否为已确认过的误报缺陷,相应地,则将不是已确认过的误报缺陷的缺陷一一显示给用户,以供用户进行确认或修改,拒绝将已确认过是误报缺陷的缺陷显示给用户,或者,一一确定上述所有缺陷中不是已确认过的误报缺陷的缺陷,等确定完所有的缺陷之后,然后将这些不是已确认过的误报缺陷的缺陷一次性显示给用户,以供用户进行确认或修改。
[0034]本实施例通过确定所述缺陷是否为已确认过的误报缺陷,将未确认过的缺陷显示给用户,以供用户进行确认或修改,将已确认过的误报缺陷屏蔽掉,不再显示给用户,这样在后续的检测过程中用户就不用再对已确认过的误报缺陷进行重复确认,可以大大减少用户的工作量,减少用户的负担。
[0035]图2为本发明提供的软件缺陷检测方法实施例二流程示意图,如图2所示,本实施例在上述方法实施例一的基础上,进一步增加了根据预设条件对检测到的缺陷进行分类,得到各类型的缺陷这一方法步骤,具体包括如下步骤:
[0036]S201、扫描源代码;
[0037]S202、检测所述源代码中是否存在缺陷;
[0038]需要说明的是,检测所述源代码中是否存在缺陷,待检测完源代码中存在的所有缺陷之后,执行步骤S203。
[0039]S203、根据预设条件对检测到的缺陷进行分类,得到各类型的缺陷;
[0040]具体来说,所述预设条件可以包含下述条件中的至少一种:各缺陷处对应的变量是否是不同的变量;各缺陷从所述对应的变量所在当前节点到所在定义节点的前向踪迹是否相似;各缺陷处的缺陷特征是否一致。下面以所述预设条件为各缺陷处对应的变量是否是不同的变量、各缺陷从所述对应的变量所在当前节点到所在定义节点的前向踪迹是否相似及各缺陷处的缺陷特征是否一致为例,进行详细说明得到各类型的缺陷的过程。分析所述源代码,生成控制流图,所述控制流图是程序控制结构的图形表示,其基本元素为过程块、节点、判定;如果所述源代码由多个代码文件组成,则先生成各自的控制流图,再将控制流图文件合并成一个全局的控制流图文件;确定缺陷所在的当前点,即确定缺陷所在的当前所在的位置,可以为行号,确定缺陷所在当前点对应的变量并记录变量名称以及变量所使用的函数;确定变量所使用的函数是否相同或具有相似的特征;根据控制流图向上分析,确定缺陷所在的定义节点,并记录所述缺陷从缺陷所在当前点到缺陷所在定义节点的前向踪迹;比较上述特征,将满足各缺陷处对应的变量是不同的变量、各缺陷从所述对应的变量所在当前节点到所在定义节点的前向踪迹相似且各缺陷处的缺陷特征一致即所使用的函数相同或具有相似的特征的各缺陷归为同一类缺陷。通过上述方法可以得到各类型的缺陷。需要说明的是,可以采用下述方法判定各缺陷的前向踪迹是否相似,若各缺陷的前向踪迹中所包含的程序点均不影响缺陷的表现形式,即各缺陷的前向踪迹中没有使用缺陷处对应的变量,则确定各缺陷的前向踪迹相似。
[0041]S204、确定各类型的缺陷是否为已确认过的同属于该类型的误报缺陷;
[0042]具体来说,确定所述缺陷是否存在于误报缺陷库中,所述误报缺陷库存储有所述用户已确认过的各类型的误报缺陷;若存在,则确定所述缺陷为已确认过的同属于该类型的误报缺陷;若不存在,则确定所述缺陷为未确认过的同属于该类型的缺陷。若确定所述缺陷不是已确认过的同属于该类型的误报缺陷,则执行步骤S205,若确定所述缺陷是已确认过的同属于该类型的误报缺陷,则执行步骤S206。
[0043]S205、将所述缺陷显示给用户,以供用户进行确认或修改;
[0044]S206、拒绝将所述缺陷显示给用户。
[0045]具体来说,在对上述检测到的缺陷完成分类之后,分别确定各类型的缺陷是否存在于误报缺陷库中,所述误报缺陷库存储有所述用户已确认过的各类型的误报缺陷或者未经分类的误报缺陷;当所述误报缺陷库存储有所述用户已确认过的各类型的误报缺陷时,根据缺陷的类型在所述误报缺陷库中找到对应的类型,然后确定在对应的类型中是否存在上述缺陷对应的误报缺陷,若存在,则确定所述缺陷为已确认过的同属于该类型的误报缺陷,则屏蔽掉所述缺陷,拒绝将所述缺陷显示给用户;若不存在,则确定所述缺陷为未确认过的同属于该类型的缺陷,则将所述缺陷分类别显示给用户,以供用户进行确认或修改;或者,当所述误报缺陷库存储有未经分类的误报缺陷时,分类别确定所述误报缺陷库中否存在上述缺陷对应的误报缺陷,若存在,则确定所述缺陷为已确认过的误报缺陷,则拒绝将所述缺陷显示给用户,若确定所述缺陷不是已确认过的误报缺陷,则将所述缺陷分类别显示给用户,以供用户进行确认或修改。
[0046]需要说明的是,在对上述检测到的缺陷完成分类之后,可以采用如下方式显示给用户:逐个确定上述各类别对应的缺陷是否为已确认过的误报缺陷,相应地,则将不是已确认过的误报缺陷的缺陷按照所在类别逐个显示给用户,以供用户进行确认或修改,拒绝将已确认过是误报缺陷的缺陷显示给用户,或者,逐个确定上述各类别对应的缺陷中是否为已确认过的误报缺陷的缺陷,等确定完所有类别的缺陷之后,然后将不是已确认过的误报缺陷的缺陷按照类别一次性显示给用户,以供用户进行确认或修改,拒绝将已确认过是误报缺陷的缺陷显示给用户。
[0047]本实施例通过将所述缺陷进行分类,以便于用户针对各个类型的缺陷分别确定所述缺陷是否为已确认过的该类型的误报缺陷,将未确认过的该类型的缺陷显示给用户,以供用户针对该类型的进行确认或修改,将已确认过的该类型的误报缺陷屏蔽掉,不再显示给用户,这样在后续的检测过程中用户就不用再对已确认过的该类型的误报缺陷进行重复确认,可以大大减少用户的工作量,减少用户的负担。
[0048]图3为本发明提供的软件缺陷检测装置实施例一结构示意图,如图3所示,具体包括:扫描模块31、检测模块32、确定模块33及显示模块34。
[0049]扫描模块31,用于扫描源代码;
[0050]检测模块32,用于检测所述源代码中是否存在缺陷;
[0051]确定模块33,用于若所述源代码中存在缺陷,则确定所述缺陷是否为已确认过的误报缺陷;
[0052]显示模块34,用于若所述缺陷不是已确认过的误报缺陷,则将所述缺陷显示给用户,以供用户进行确认或修改;
[0053]拒绝模块35,用于若所述缺陷是已确认过的误报缺陷,则拒绝让所述显示模块34将所述缺陷显示给用户。
[0054]本实施例所述的装置用于执行方法实施例一所述的方法步骤,其技术原理和产生的技术效果类似,这里不再累述。
[0055]图4为本发明软件缺陷检测装置实施例二结构示意图,如图4所示,本实施例在上述装置实施例一的基础上,进一步增加了分类模块45。
[0056]扫描模块41,用于扫描源代码;
[0057]检测模块42,用于检测所述源代码中是否存在缺陷;
[0058]确定模块43,用于若所述源代码中存在缺陷,则确定所述缺陷是否为已确认过的误报缺陷;
[0059]显示模块44,用于若所述缺陷不是已确认过的误报缺陷,则将所述缺陷显示给用户,以供用户进行确认或修改;
[0060]拒绝模块46,用于若所述缺陷是已确认过的误报缺陷,则拒绝让所述显示模块44将所述缺陷显示给用户。
[0061]进一步地,所述确定模块43,具体用于确定所述缺陷是否存在于误报缺陷库中,所述误报缺陷库存储有所述用户已确认过的误报缺陷;若存在,则确定所述缺陷为已确认过的误报缺陷;若不存在,则确定所述缺陷为未确认过的缺陷。
[0062]进一步地,所述装置,还包括:
[0063]分类模块45,用于在确定所述缺陷是否为已确认过的误报缺陷之前,根据预设条件对检测到的缺陷进行分类,得到各类型的缺陷;
[0064]相应地,所述确定模块43,还用于确定各类型的缺陷是否为已确认过的同属于该类型的误报缺陷。
[0065]进一步地,所述预设条件包含下述条件中的至少一种:
[0066]各缺陷处对应的变量是否是不同的变量;
[0067]各缺陷从所述对应的变量所在当前节点到所在定义节点的前向踪迹是否相似;
[0068]各缺陷处的缺陷特征是否一致。
[0069]本实施例所述的装置用于执行方法实施例一和方法实施例二所述的方法步骤,其技术原理和产生的技术效果类似,这里不再累述。
[0070]需要说明的是:对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
[0071]本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0072]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
【权利要求】
1.一种软件缺陷检测方法,其特征在于,包括: 扫描源代码; 检测所述源代码中是否存在缺陷; 若所述源代码中存在缺陷,则确定所述缺陷是否为已确认过的误报缺陷; 若所述缺陷不是已确认过的误报缺陷,则将所述缺陷显示给用户,以供用户进行确认或修改; 若所述缺陷是已确认过的误报缺陷,则拒绝将所述缺陷显示给用户。
2.根据权利要求1所述的方法,其特征在于,所述确定所述缺陷是否为已确认过的误报缺陷,包括: 确定所述缺陷是否存在于误报缺陷库中,所述误报缺陷库存储有所述用户已确认过的误报缺陷; 若存在,则确定所述缺陷为已确认过的误报缺陷; 若不存在,则确定所述缺陷为未确认过的缺陷。
3.根据权利要求1或2所述的方法,其特征在于,在所述确定所述缺陷是否为已确认过的误报缺陷之前,还包括: 根据预设条件对检测到的缺陷进行分类,得到各类型的缺陷; 相应地,所述确定所述缺陷是否为已确认过的误报缺陷,包括: 确定各类型的缺陷是否为已确认过的同属于该类型的误报缺陷。
4.根据权利要求3所述的方法,其特征在于,所述预设条件包含下述条件中的至少一种: 各缺陷处对应的变量是否是不同的变量; 各缺陷从所述对应的变量所在当前节点到所在定义节点的前向踪迹是否相似; 各缺陷处的缺陷特征是否一致。
5.一种软件缺陷检测装置,其特征在于,包括: 扫描模块,用于扫描源代码; 检测模块,用于检测所述源代码中是否存在缺陷; 确定模块,用于若所述源代码中存在缺陷,则确定所述缺陷是否为已确认过的误报缺陷; 显示模块,用于若所述缺陷不是已确认过的误报缺陷,则将所述缺陷显示给用户,以供用户进行确认或修改; 拒绝模块,用于若所述缺陷是已确认过的误报缺陷,则拒绝让所述显示模块将所述缺陷显示给用户。
6.根据权利要求5所述的装置,其特征在于,所述确定模块,具体用于确定所述缺陷是否存在于误报缺陷库中,所述误报缺陷库存储有所述用户已确认过的误报缺陷;若存在,则确定所述缺陷为已确认过的误报缺陷;若不存在,则确定所述缺陷为未确认过的缺陷。
7.根据权利要求5或6所述的装置,其特征在于,还包括: 分类模块,用于在确定所述缺陷是否为已确认过的误报缺陷之前,根据预设条件对检测到的缺陷进行分类,得到各类型的缺陷; 相应地,所述确定模块,还用于确定各类型的缺陷是否为已确认过的同属于该类型的误报缺陷。
8.根据权利要求7所述的装置,其特征在于,所述预设条件包含下述条件中的至少一种: 各缺陷处对应的变量是否是不同的变量; 各缺陷从所述对应的变量所在当前节点到所在定义节点的前向踪迹是否相似; 各缺陷处的缺陷特征是否一致。
【文档编号】G06F11/36GK103970657SQ201410196027
【公开日】2014年8月6日 申请日期:2014年5月9日 优先权日:2014年5月9日
【发明者】杨学红 申请人:中国联合网络通信集团有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1