源代码分析装置、用于该装置的计算机程序及其记录介质的制作方法

文档序号:12512743阅读:250来源:国知局
源代码分析装置、用于该装置的计算机程序及其记录介质的制作方法
本发明涉及一种源代码分析装置、用于该装置的计算机程序及其记录介质,涉及一种在根据预先定义的分析规则分析的分析对象源代码中发现缺陷的情况下,能够提供缺陷修改方案的源代码分析装置、用于该装置的计算机程序及其记录介质。
背景技术
:静态程序分析(StaticCodeAnalysis)是分析计算机软件的多种方法中的一种。该方法的特征在于,不直接运行软件,以开发中的软件源代码为对象进行分析。静态分析工具(StaticAnalysisTool)是用于被开发成实现利用软件自动进行静态程序分析而开发的程序,而不是利用人手。一般情况下,源代码的大小非常庞大,用人手一一进行静态程序分析几乎不太可能。因此,可以说使这种分析实现自动化是静态分析工具的作用。静态分析工具根据种类能够从源代码中检测出多种缺陷或漏洞,并将通过分析检测出的缺陷告知用户。现有技术中公开过多种如上所述的静态分析工具形式的源代码分析装置。但是,现有的公开或使用的源代码分析装置仅提供缺陷检测以及生成对其的检测信息的有限的功能,因此存在对于检测出的缺陷的修改工作需要依赖用户(程序员)的个人知识和经验的局限性。技术实现要素:(一)要解决的技术问题本发明是考虑到如上所述的问题而提出的,其目的在于提供一种在根据预先定义的分析规则分析的分析对象源代码中发现缺陷的情况下,能够提供缺陷修改方案的源代码分析装置、用于该装置的计算机程序及其记录介质。(二)技术方案根据为实现上述目的的本发明的一个方面,公开一种源代码分析装置,其包括:源代码分析模块,包括:语法分析部,从源代码中提取并提炼分析所需的信息;缺陷检测部,以在语法分析部提炼的分析所需的信息为基础,检测源代码中能够成为问题的缺陷;修改示例生成部,以在缺陷检测部检测出的缺陷信息以及在语法分析部提炼的分析所需的信息为基础,生成修改示例信息和注意事项信息中的至少一种;分析结果传送部,将生成的缺陷信息、修改示例信息、注意事项信息中的至少一种构成为综合分析结果信息并传送至分析结果输出模块;以及分析结果输出模块,包括:缺陷输出部,在从源代码分析模块接收的综合分析结果信息中提取并输出缺陷信息;修改示例输出部,在从源代码分析模块接收的综合分析结果信息中提取并输出修改示例信息和注意事项信息中至少一种。优选地,所述修改示例生成部对于一个缺陷信息生成一个或一个以上的修改示例信息或者注意事项信息。优选地,所述缺陷检测部的缺陷信息检测是通过执行用于检查各自是否存在缺陷的各检查器的功能来实现的,所述各检查器将综合分析结果信息传送至修改示例生成部,所述综合分析结果信息包括针对检测缺陷信息时检测出的缺陷信息生成的修改示例信息和注意事项信息中的至少一种。优选地,所述修改示例信息包括对检测出缺陷信息的源代码行‘添加’另一代码行、‘变更’为另一代码行、‘删除’检测出的代码行中的至少一种。优选地,包含于所述修改示例信息中的修改示例代码,将检测出缺陷信息的检查器根据预先设定的模板分析并推测源代码的结果作为输入值来生成。根据本发明的另一个方面,公开一种储存在介质中的计算机程序,其作为在源代码分析装置中用于执行源代码分析功能和分析结果输出功能的计算机程序,所述源代码分析功能包括:语法分析功能,从源代码中提取并提炼分析所需的信息;缺陷检测功能,以从语法分析功能中提炼的分析所需的信息为基础,在源代码中检测能够成为问题的缺陷信息;修改示例生成功能,以在缺陷检测功能中检测出的缺陷信息和在语法分析功能中提炼出的分析所需的信息为基础,生成修改示例信息以及注意事项信息中的至少一种;分析结果传送功能,将生成的缺陷信息和修改示例信息、注意事项信息中的至少一种构成为综合分析结果信息,并传送至分析结果输出功能;所述分析结果输出功能包括:缺陷输出功能,在从源代码分析功能接收的综合分析结果信息中提取并输出缺陷信息;修改示例输出功能,在从源代码分析功能接收的综合分析结果信息中提取并输出修改示例信息和注意事项信息中的至少一种。根据本发明的另一个方面,公开一种记录有计算机程序的计算机可读记录介质,其为记录有在源代码分析装置中用于执行源代码分析功能和分析结果输出功能的计算机程序的记录介质,所述源代码分析功能包括:语法分析功能,从源代码中提取并提炼分析所需的信息;缺陷检测功能,以从语法分析功能中提炼的分析所需的信息为基础,在源代码中检测能够成为问题的缺陷信息;修改示例生成功能,以在缺陷检测功能中检测出的缺陷信息和在语法分析功能中提炼出的分析所需的信息为基础,生成修改示例信息以及注意事项信息中的至少一种;分析结果传送功能,将生成的缺陷信息和修改示例信息、注意事项信息中的至少一种构成为综合分析结果信息,并传送至分析结果输出功能;所述分析结果输出功能包括:缺陷输出功能,在从源代码分析功能接收的综合分析结果信息中提取并输出缺陷信息;修改示例输出功能,在从源代码分析功能接收的综合分析结果信息中提取并输出修改示例信息和注意事项信息中的至少一种。(三)有益效果如上所述的本发明构成为在根据预先定义的分析规则分析的分析对象源代码中发现缺陷的情况下,能够提供缺陷修改方案,因此,在对源代码进行缺陷修改时,不依赖用户(程序员)的个人知识和经验,能够进行较为客观且提高的缺陷修改操作。附图说明图1是示出本发明的一个实施例的源代码分析装置的结构图,图2示出本发明的一个实施例的源代码分析装置的分析结果信息的构成例,图3示出通过本发明的一个实施例的源代码分析装置的缺陷检测部的检查器发现缺陷的源代码的页面例,图4示出本发明的一个实施例的源代码分析装置的点击修改示例按钮后的综合分析结果的输出页面例,图5示出本发明的一个实施例的源代码分析装置的点击修改示例按钮后的综合分析结果输出页面中示例菜单的显示例,图6示出本发明的一个实施例的源代码分析装置的点击修改示例按钮后的综合分析结果输出页面中缺陷信息的显示例,图7示出本发明的一个实施例的源代码分析装置的点击修改示例按钮后的综合分析结果输出页面中修改示例信息的显示例,图8示出本发明的一个实施例的源代码分析装置的点击修改示例按钮后的综合分析结果输出页面中注意事项信息的显示例,图9示出用于本发明的一个实施例的源代码分析装置的体现检查器类别中XML输出类别的例子,图10示出用于本发明的一个实施例的源代码分析装置的体现检查器类别中代码生成类别的例子。具体实施方式本发明在不脱离其技术思想或主要特征的情况下可以多种形式实施。因此,本发明的实施例的所有方面仅仅是单纯的例,从而不能限定地进行解释。第一、第二等术语可用于说明多种构成要素,但是所述构成要素不能限定于所述术语。所述术语仅用于将一个构成要素区分于另一个构成要素。例如,在不脱离本发明的权利范围的情况下,第一构成要素可命名为第二构成要素,类似地,第二构成要素也可命名为第一构成要素。“和/或”术语包括多个相关记载的项目的组合或多个相关记载的项目中的任意项目。在提及某个构成要素“连接”或“接入”另一个构成要素时,应理解为,可以直接连接或接入所述另一个构成要素,也可以是其中间存在其他构成要素。与此相反,在提及某个构成要素“直接连接”或“直接接入”另一个构成要素时,应理解为其中间不存在其他构成要素。在本申请中使用的术语仅用于说明特定的实施例,并不是为了限定本发明。除非在上下文上有明确表示其他意思,则单数包括复数的表示。在本申请中,“包括”或“具备”、“具有”等术语是为了指定在说明书中记载的特征、数字、步骤、动作、构成要素、部件或它们的组合的存在,应理解为不排除一个或以上的其他特征或数字、步骤、动作、构成要素、部件或它们的组合的存在或附加可能性。除非有不同定义,包括技术性或科学性术语在内,在此使用的所有术语具有与本发明所属
技术领域
的普通技术人员普遍理解的含义相同的含义。与普遍使用的定义在词典的术语相同的术语应解释为具有与相关技术的上下文所具有的含义一致的含义,除非本发明有明确定义,不得解释为异常的含义或过度形式性的含义。下面,参照附图对本发明的优选实施例进行详细说明,且与附图编码无关地、相同或对应的构成要素使用相同的附图标记,并省略对此的重复说明。在对本发明进行说明时,若认为对相关的公知技术的具体说明有可能混淆本发明的要旨,则省略对其的详细说明。图1是本发明的一个实施例的源代码分析装置的结构图,图2是本发明的一个实施例的源代码分析装置的分析结果信息的构成例。本实施例的源代码分析装置A包括源代码输入模块100、源代码分析模块200、分析结果输出模块300以及控制模块400,例如,用于实现源代码分析装置的计算机程序可以在普通的计算机硬件上驱动。例如,源代码输入模块100以代码文件的形式接收分析对象源代码,以使后述的源代码分析模块200进行分析处理。例如,代码文件的输入可通过用户的文件输入或开放(open)操作实现。源代码分析模块200从为进行分析而输入并传送的源代码中生成综合分析结果240A,其包括缺陷信息220A以及修改示例信息230A、修改时会发生的各种种类的注意事项信息230B。分析结果输出模块300以从源代码分析模块200接收的综合分析结果240A为基础,给用户展示缺陷信息220A、修改示例信息230A、注意事项信息230B。根据实施例,源代码分析模块200和分析结果输出模块300可集成为一个模块来实现。作为优选实施例,源代码分析模块200包括:语法分析部210、缺陷检测部220、修改示例生成部230、分析结果传送部240。语法分析部210执行从接收的源代码中提取并提炼(refining)分析所需的各种信息的作用。例如,分析所需的信息可为抽象语法树(AbstractSyntaxTree)或源代码行数、位置信息等。缺陷检测部220以在语法分析部210提炼的分析所需的信息为基础从源代码中检测出可能成为问题的缺陷信息220A。例如,所述缺陷检测部220的缺陷信息220A的检测可通过检查是否有缺陷的检查器的功能运行来实现。例如,缺陷信息220A由实际发生缺陷的源代码的文件名、行等位置信息和缺陷的种类、实际成为缺陷原因的部分、如发生缺陷的源代码流的实际缺陷信息等构成。所述语法分析部210的语法分析功能以及缺陷检测部220的缺陷信息检测功能可通过与公知的多种静态分析工具(StaticAnalysisTool)的语法分析功能以及缺陷信息检测功能相同或类似的构成来实现。静态分析工具有公知的基于语法(Syntactic)分析或基于语义(Semantic)分析方式的多种常用产品,因此省略其详细说明。所述缺陷检测部220的缺陷信息220A检测是通过用于检查各自是否存在缺陷的各检查器的功能运行来实现的,所述各检查器将包括针对检测缺陷信息220A时检测出的缺陷信息220A生成的修改示例信息230A和注意事项信息230B的综合分析结果信息240A传送至修改示例生成部230。例如,综合分析结果信息240A可以以修改示例可扩展标记语言(XML)文件的形式构成,但不是必须限定于此种形式。另外,在相同的一个检查器的情况下,也可根据分析出的源代码的结构,传送不同的修改示例信息230A和注意事项信息230B。并且,当检查器根据缺陷的特点不需要非得对检查出的缺陷提供修改示例信息230A和注意事项信息230B的情况下,可不提供这些信息,或者,只提供修改示例信息230A或只提供注意事项信息230B。并且,对于一个缺陷信息220A可生成多个修改示例信息230A和注意事项信息230B,以生产多个应对方案,对此将在后面进行说明。在本实施例的说明中,对一起提供修改示例信息230A和注意事项信息230B的情况进行示例说明。修改示例生成部230以缺陷检测部220检测出的缺陷信息220A以及语法分析部210提炼的分析所需的信息为基础,来生成修改示例信息230A和注意事项信息230B。修改示例信息230A是指能够告知如何将在缺陷信息220A内发生的缺陷修改为实际源代码的修改示例代码。例如,以修改示例信息230A中告知的信息为基础修改源代码,则不会发生缺陷。所述修改示例信息230A可包括对检测出缺陷信息220A的源代码行进行“添加”另一代码行、“变更”为另一代码行、“删除”检测出的代码行中的至少一种。注意事项信息230B是指用户在修改源代码时可能发生的多种注意事项信息。例如,可为,有助于用户修改源代码的信息,或者为按照修改示例信息230A告知的修改示例修改代码时,可能发生的附带的问题,或者为因源代码分析装置A无法自动生成而需要用户亲自修改的事项等。分析结果传送部240将先前生成的缺陷信息220A或修改示例信息230A、注意事项信息230B构成为综合分析结果信息240A,并传送至分析结果输出模块300。这种综合分析结果信息240A可为文件或储存器内的数据,也可包含有其他信息。并且,根据缺陷的种类,在一个缺陷信息220A中,修改示例信息230A或注意事项信息230B可以不存在或存在更多。作为优选例,分析结果输出模块300包括缺陷输出部310和修改示例输出部320。缺陷输出部310在从源代码分析模块200接收的综合分析结果信息240A中提取缺陷信息220A展示给用户。一般情况下,这种信息可以是如上所述的源代码的文件名、如行等的位置信息、缺陷的种类或成为缺陷的实际原因的部分、导致缺陷发生的源代码流等。修改示例输出部320在从源代码分析模块200接收的综合分析结果信息240A中提取修改示例信息230A和注意事项信息230B展示给用户。一般情况下,这种信息可以是如上所述的对于如何修改实际代码的修改示例代码信息和修改源代码时可能发生的多种注意事项信息。根据实施例,缺陷输出部310和修改示例输出部320可同时执行输出或额外输出其他信息。下面,通过各示例页面对本实施例的源代码分析装置的具体实施例进行示例说明。图3示出通过本发明的一个实施例的源代码分析装置的缺陷检测部的检查器发现缺陷的源代码页面例。发现缺陷时页面的右侧上端表示有修改示例按钮。图4示出本发明的一个实施例的源代码分析装置的点击修改示例按钮后的综合分析结果的输出页面例。页面上分别显示缺陷信息、修改示例信息、注意事项信息。对于一个缺陷信息,可提供一个或一个以上的修改示例信息或注意事项信息。图5示出本发明的一个实施例的源代码分析装置的点击修改示例按钮后的综合分析结果输出页面中示例菜单的显示例。示例菜单的数量可根据检查器的种类和源代码而变得不同。各示例菜单可通过点击左侧端的三角形标记收回或展开。图6示出本发明的一个实施例的源代码分析装置的点击修改示例按钮后的综合分析结果输出页面中缺陷信息的显示例。缺陷信息菜单告知如何修改检查器检测出的缺陷。图7示出本发明的一个实施例的源代码分析装置的点击修改示例按钮后的综合分析结果输出页面中修改示例信息的显示例。在修改示例菜单中告知如何修改源代码的哪个部分。所述示例代码尽可能以与实际代码相同的方式提供。在页面中由红色标注(gradation)且由“-”开始的行是表示要删除的代码,由绿色标注且由“+”开始的行相当于需要添加的代码。需要修改的代码行相隔很远或是其他文件时,可显示多个框(box)。图8示出本发明的一个实施例的源代码分析装置的点击修改示例按钮后的综合分析结果输出页面中注意事项信息的显示例。注意事项信息说明修改源代码后可能发生的多种情况或者注意事项。因此,其数量和内容可根据检查器的种类以及源代码而发生变化。下述的源代码是本发明的一个实施例的源代码分析装置的修改示例XML文件的例,表1是表示下述源代码的修改示例XML文件的主要标签或者变量的定义例的表。通过下面的源代码和表1的示例,能够理解本实施例的修改示例XML文件。[表1]alarm表示最上位缺陷要素。scaSCA最上位要素。alternative分别包括一个应对方案的要素。desc表示应对方案的说明要素。(=资源属性)arg表示应对方案说明要素的参数值。code表示变更的代码要素。note表示注意事项要素。(note)desc表示注意事项的说明要素。(=资源属性)(note)arg表示注意事项的说明要素的参数值value表示注意事项中变更的值的要素‘sca’或者‘Sca’作为‘SmartCodeAlternative’的缩写,为了方便,命名为包括本实施例的修改示例XML文件所包括的多个应对方案(alternative)的上位要素的示例名称。图9示出用于本发明的一个实施例的源代码分析装置的体现检查器类别中XML输出类别的例子,图10示出用于本发明的一个实施例的源代码分析装置的体现检查器类别中代码生成类别的例子。针对图9,从上位类别开始进行简单的示例说明。最上部的‘AlarmXMLMaker’类别,在输出提醒时若有Sca例程(instance),则一起输出。中间的‘Sca’类别负责ScaAlternative例程的生成,且检查器生成应对方案时,使用该函数。最下部的‘ScaAlternative’类别(应对方案信息类别)包括说明、代码、注意事项信息,并且有代码的添加/变更/删除信息接收‘CodeGenerator’类别所生成的代码信息或从原始源代码接收的情况。在图10中,‘CodeGenerator’类别(代码生成类别)将根据一定的模板对原始源代码进行分析以及推测的结果作为输入值,生成修改示例代码。‘CodeGenerator’类别包括用于添加行的‘SimpleCodeGenerator’、用于生成类型的‘TypeCodeGenerator’、用于生成变量的‘VariableCodeGenerator’、用于生成函数的‘FunctionCodeGenerator’等。表2示出用于本发明的一个实施例的源代码分析装置的检查器结构的一个例子,表3示出用于本发明的一个实施例的源代码分析装置的检查器结构的另一例子,表4是表示用于本发明的一个实施例的源代码分析装置的检查器结构的又一例子。[表2]例题1是检查除了dot(.)运算符之外的二元运算符和前后操作数需用空格区分的检查器。可通过在提供的源代码中使用二元运算符‘-’的部分的左右插入空格来编写应对方案代码(修改示例代码)。该例题没有特别的注意事项。[表3]例题2是提示对通过数组类型的参数接收的数组类型的变量不能使用sizeof的检查器。应对方案代码在1、3号行上发生,此时由于1号行的变更生成函数接口变更的注意事项。如果函数接口变更,则该函数的声明或使用的部分也需要修改。在3号行的strncpy中的第三个参数的始点加入在应对方案代码1中添加的长度值的变量。没有与此相关的特别注意事项。[表4]例题3是检查无效果的函数调用的检查器。例如,在memset中,第三个参数的值为0时,成为无实际含义的代码。应对方案1是在能够推测需要初始化的缓冲大小时,则表示该大小,而无法推测时,使用<<length>>等指定的标识符表示。应对方案2是创建附加条件的应对方案。当memset的第二个参数不是单一常数时,有可能交换使用了第二、第三个参数。因此,应对方案2提议对memset的第二、第三个参数值进行互相交换。相关检查器也没有特别的注意事项。作为一例,所述表2至表4中示例的各检查器的应对方案可通过所述图9中示例的‘Sca’类别和‘ScaAlternative’类别(应对方案信息类别)来提供。作为另外一例,所述表2至表4中示例的各检查器的应对方案可通过所述图10中示例的‘CodeGenerator’类别(代码生成类别)来提供。‘Sca’类别、‘ScaAlternative’类别(应对方案信息类别)以及‘CodeGenerator’类别(代码生成类别)可事先与各检查器的缺陷内容相应地设置。本发明的实施例包括用于执行多种通过计算机实现的操作的程序和记录该程序的计算机可读介质。所述计算机可读介质可单独包括或以组合的形式包括程序指令、数据文件、数据结构等。所述介质可以是为本发明特别设计和构建的,或者也可以是计算机软件普通技术人员公知而可使用的。计算机可读记录介质的例子包括:磁性介质,如硬盘、软盘以及磁带;光学介质(opticalmedia),如CD-ROM、DVD、USB驱动器等;磁光学介质,如光盘(flopticaldisk)等;以及特别构成为存储和执行程序指令的硬件装置,如只读存储器(ROM)、随机存取储存器(RAM)、闪存等。所述介质可以是包括传送对程序指令、数据结构等进行指定的信号的载波的光或者金属线、波导管等的传输介质。程序命令的例子不仅是如通过编译器制作的机器语言代码,还包括可使用解释器等且通过计算机运行的高级语言代码。作为一例,本发明的源代码分析装置是通过以下形式来实现:通过用于执行源代码分析功能和分析结果输出功能的计算机程序来执行计算机功能操作。源代码分析功能通过所述源代码分析模块来被提供,分析结果输出功能通过所述分析结果输出模块来被提供。通过源代码分析功能进一步执行源代码分析模块的具体功能,分析结果输出功能进一步执行分析结果输出模块的具体功能,从而能够提供本发明的源代码分析装置的全部功能。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1