CN103870382B - 一种代码风险的检测方法及装置 - Google Patents
一种代码风险的检测方法及装置 Download PDFInfo
- Publication number
- CN103870382B CN103870382B CN201210529531.0A CN201210529531A CN103870382B CN 103870382 B CN103870382 B CN 103870382B CN 201210529531 A CN201210529531 A CN 201210529531A CN 103870382 B CN103870382 B CN 103870382B
- Authority
- CN
- China
- Prior art keywords
- code
- file
- function
- analysis unit
- code file
- 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
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 16
- 238000004458 analytical method Methods 0.000 claims abstract description 125
- 230000004048 modification Effects 0.000 claims abstract description 55
- 238000012986 modification Methods 0.000 claims abstract description 55
- 238000000034 method Methods 0.000 claims abstract description 45
- 239000000284 extract Substances 0.000 claims abstract description 7
- 230000006870 function Effects 0.000 claims description 196
- 230000008878 coupling Effects 0.000 claims description 30
- 238000010168 coupling process Methods 0.000 claims description 30
- 238000005859 coupling reaction Methods 0.000 claims description 30
- 238000007373 indentation Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 4
- 238000011160 research Methods 0.000 description 2
- 238000012827 research and development Methods 0.000 description 2
- 238000013522 software testing Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012502 risk assessment Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种代码风险的检测方法及装置,该方法包括:扫描单元从预设的代码文件中提取函数和类;代码分析单元依据预设的函数风险阈值和类风险阈值分别对所述函数和所述类进行分析,得到存在风险的函数信息和类信息;文件分析单元依据预设的文件风险阈值对获取的代码文件和代码文件的修改记录进行分析,得到存在风险的代码文件信息;报告生成单元依据所述存在风险的函数信息、类信息和代码文件信息生成代码风险报告。根据本发明提供的技术方案,能够有效检测出软件产品的代码中的风险。
Description
【技术领域】
本发明涉及软件测试技术,尤其涉及一种代码风险的检测方法及装置。
【背景技术】
软件产品是需要最终交付给用户,由用户直接或间接的使用软件产品;其中,代码用于正确且详细的描述软件,是软件的最终载体,因此代码的质量对软件的质量具有重要意义。
代码风险是区别于代码中语法错误和语义错误的一种代码异常情况,代码风险并不是一种代码错误,而是从软件产品的代码的可靠性、可测性、可读心和可维护性等角度出发,对不符合条件的代码给出提示信息的代码质量的控制手段。
目前的代码质量检测工具都是对语法错误、语义错误或编程规范等进行检测,并给出检测结果,例如,PC-Lint是一款C/C++软件代码静态分析工具,能够检测出使用未初始化的变量等一般的语法错误。Logiscope是用于保证软件质量和进行软件测试的测试产品,能够对代码中的语法错误进行检测。但是,目前没有对代码风险进行检测的工具和方法。
【发明内容】
本发明提供了一种代码风险的检测方法及装置,能够有效检测出软件产品的代码中的风险。
本发明的具体技术方案如下:
根据本发明一优选实施例,一种代码风险的检测装置,包括:扫描单元、代码分析单元、文件分析单元、报告生成单元;其中,
扫描单元,用于从预设的代码文件中提取函数和类;
代码分析单元,用于依据预设的函数风险阈值和类风险阈值分别对所述函数和所述类进行分析,得到存在风险的函数信息和类信息;
文件分析单元,用于依据预设的文件风险阈值对获取的代码文件和代码文件的修改记录进行分析,得到存在风险的代码文件信息;
报告生成单元,用于依据所述存在风险的函数信息、类信息和代码文件信息生成代码风险报告。
上述装置中,代码分析单元对函数进行分析具体包括:代码分析单元对函数的嵌套深度、函数的行数、函数内局部变量个数和圈复杂度进行分析。
上述装置中,代码分析单元获得函数的嵌套深度具体包括:
当识别出函数中一行代码比前一行代码缩进时,函数的缩进深度加1;
或,当识别出一组嵌套字符时,函数的嵌套的层级数加1。
上述装置中,代码分析单元获得函数内局部变量的个数具体包括:当在函数的代码中识别出与预设的局部变量名相同的局部变量时,将函数内局部变量的个数加1。
上述装置中,代码分析单元获得函数的圈复杂度具体包括:在函数中识别出逻辑判断词时,在圈复杂度基数上将所述函数的圈复杂度加1。
上述装置中,代码分析单元对类进行分析具体包括:代码分析单元对类的离心耦合度进行分析。
上述装置中,代码分析单元获得类的离心耦合度具体包括:依据识别出的类与类之间的调用关系,得到类调用的外部类的数目,所述类调用的外部类的数目等于离心耦合度。
上述装置中,文件分析单元对代码文件进行分析具体包括:代码分析单元对代码文件的总行数进行分析。
上述装置中,文件分析单元获得代码文件的总行数具体包括:
文件分析单元调用行数统计命令,将代码文件的文件名作为参数值输入所述行数统计命令;
所述行数统计命令运行后依据所述文件名找到代码文件,统计所述代码文件的总行数。
上述装置中,文件分析单元对代码文件的修改记录进行分析具体包括:代码分析单元对代码文件的修改次数和修改代码文件的人员信息进行分析。
上述装置中,代码分析单元获得代码文件的修改次数具体包括:
文件分析单元依据预设的修订记录格式,确定版本号字段在代码文件的修订记录中的位置,依据所述位置在代码文件的修改记录中找到版本号,并统计版本号的总数,所述版本号的数量等于代码文件的修改次数。
上述装置中,代码分析单元获得修改代码文件的人员信息具体包括:
文件分析单元依据预设的修订记录格式,确定人员信息字段在代码文件的修订记录中的位置,依据所述位置在代码文件的修改记录中找到修改代码文件的人员信息,并统计修改代码文件的人员信息数。
一种代码风险的检测方法,包括:
扫描单元从预设的代码文件中提取函数和类;代码分析单元依据预设的函数风险阈值和类风险阈值分别对所述函数和所述类进行分析,得到存在风险的函数信息和类信息;
文件分析单元依据预设的文件风险阈值对获取的代码文件和代码文件的修改记录进行分析,得到存在风险的代码文件信息;
报告生成单元依据所述存在风险的函数信息、类信息和代码文件信息生成代码风险报告。
上述方法中,代码分析单元对函数进行分析的方法为:代码分析单元对函数的嵌套深度、函数的行数、函数内局部变量个数和圈复杂度进行分析。
上述方法中,代码分析单元获得函数的嵌套深度的方法为:
当识别出函数中一行代码比前一行代码缩进时,函数的缩进深度加1;
或,当识别出一组嵌套字符时,函数的嵌套的层级数加1。
上述方法中,代码分析单元获得函数内局部变量的个数的方法为:当在函数的代码中识别出与预设的局部变量名相同的局部变量时,将函数内局部变量的个数加1。
上述方法中,代码分析单元获得函数的圈复杂度的方法为:在函数中识别出逻辑判断词时,在圈复杂度基数上将所述函数的圈复杂度加1。
上述方法中,代码分析单元对类进行分析的方法为:代码分析单元对类的离心耦合度进行分析。
上述方法中,代码分析单元获得类的离心耦合度的方法为:依据识别出的类与类之间的调用关系,得到类调用的外部类的数目,所述类调用的外部类的数目等于离心耦合度。
上述方法中,文件分析单元对代码文件进行分析的方法为:代码分析单元对代码文件的总行数进行分析。
上述方法中,文件分析单元获得代码文件的总行数的方法为:
文件分析单元调用行数统计命令,将代码文件的文件名作为参数值输入所述行数统计命令;
所述行数统计命令运行后依据所述文件名找到代码文件,统计所述代码文件的总行数。
上述方法中,文件分析单元对代码文件的修改记录进行分析的方法为:代码分析单元对代码文件的修改次数和修改代码文件的人员信息进行分析。
上述方法中,代码分析单元获得代码文件的修改次数的方法为:
文件分析单元依据预设的修订记录格式,确定版本号字段在代码文件的修订记录中的位置,依据所述位置在代码文件的修改记录中找到版本号,并统计版本号的总数,所述版本号的数量等于代码文件的修改次数。
上述方法中,代码分析单元获得修改代码文件的人员信息的方法为:
文件分析单元依据预设的修订记录格式,确定人员信息字段在代码文件的修订记录中的位置,依据所述位置在代码文件的修改记录中找到修改代码文件的人员信息,并统计修改代码文件的人员信息数。
由以上技术方案可以看出,本发明提供的具有以下有益效果:
从代码的类信息、函数信息和代码文件三个方面对软件的代码进行分析,不是简单的对代码进行语法错误、语义错误或编程规范等的检查,而是综合分析整个代码,自动地、准确地检测出代码中隐藏的风险,并给出风险提示信息,提醒研发人员对代码中的风险进行修改,提高代码的可靠性、可测性、可读性、和可维护性,保证代码的质量,从而提高软件产品的质量;此外,帮助研发人员及时发现并规避代码中可能出现的问题,减少软件在线上出现bug的概率,增强代码的健壮性和稳定性。
【附图说明】
图1是本发明实现代码风险的检测装置的优选实施例的结构示意图;
图2是本发明实现代码风险的检测方法的优选实施例的结构示意图。
【具体实施方式】
本发明的基本思想是:扫描单元从预设的代码文件中提取函数和类;代码分析单元依据预设的函数风险阈值和类风险阈值分别对所述函数和所述类进行分析,得到存在风险的函数信息和类信息;文件分析单元依据预设的文件风险阈值对获取的代码文件和代码文件的修改记录进行分析,得到存在风险的代码文件信息;报告生成单元依据所述存在风险的函数信息、类信息和代码文件信息生成代码风险报告。
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
本发明还提供一种代码风险的检测装置,图1是本发明实现代码风险的检测装置的优选实施例的结构示意图,如图1所示,该装置包括:扫描单元10、代码分析单元11、文件分析单元12和报告生成单元13。
基于上述系统,本发明还提供一种代码风险的检测方法,图2是本发明实现代码风险的检测方法的优选实施例的结构示意图,如图2所示,该优选实施例包括以下步骤:
步骤201,扫描单元依据预设的关键字从获取的代码文件中提取函数和类。
具体的,代码风险的检测装置和软件位于同一设备上,扫描单元依据预设的文件路径,在所述设备中获取软件的一个以上代码文件,每个代码文件中保存软件的代码,该软件的代码作为本优选实施例中的待检测代码。
扫描单元读取获取的代码文件中的代码,对代码进行语法分析,然后依据预设的函数关键字对代码进行扫描,得到代码文件中的函数;例如,函数关键字为function,则扫描单元将function作为关键字对代码进行扫描,即可获得代码文件中待检测代码中的函数,获得的函数可以包括普通函数和类的成员函数;扫描单元依据预设的类关键字对读取的代码文件中的代码进行扫描,得到代码文件中的类;例如,类关键字为class,扫描单元将class作为关键字对代码文件中的代码进行扫描,即可获得代码文件中待检测代码中的类;其中,本优选实施例中,类指的是Cpp编程语言中的类,获得的类包括类的定义、类中的成员变量和类的成员函数。
扫描单元将获取的待检测代码中的类和函数发送给代码分析单元进行进一步的风险分析。
步骤202,代码分析单元依据预设的函数风险阈值和类风险阈值分别对函数和类进行分析,得到存在风险的函数信息和类信息。
具体的,用户预先将函数风险阈值和类风险阈值写入到配置文件中,将配置文件保存到设备中,然后将配置文件在设备中的存储路径配置到代码分析单元,代码分析单元在收到扫描单元提供的类和函数后,依据配置文件的存储路径获取配置文件,从该配置文件中读取出预设的函数风险阈值和类风险阈值,然后依据预设的函数风险阈值和预设的类风险阈值分别对待检测代码的函数和类进行分析。
本优选实施例中,从嵌套深度、函数的行数、函数内局部变量个数和圈复杂度四个方面对函数信息进行分析,对应的,所述函数风险阈值包括以下四个阈值:嵌套深度阈值、函数的行数阈值、函数内局部变量个数阈值和圈复杂度阈值,需要依据这四个阈值对函数进行判断,只要函数的数据大于其中一个阈值,就认为该函数存在风险。
其中,所述嵌套深度包括缩进深度和嵌套的层级数,本优选实施例中,认为过分深层的缩进或嵌套是产生混乱代码的罪魁祸首之一,因此如果函数具有过分深层的缩进或嵌套是难以理解和维护的,例如,可以将嵌套深度阈值设置为4,如果函数中存在4层以上的缩进或嵌套,则认为该函数存在风险;代码分析单元依据收到的函数,对函数中的代码进行扫描,当识别出函数中某行代码比前一行代码缩进时,则该函数的缩进深度加1,当识别出存在一组嵌套字符“{}”时,则嵌套的层级数就加1,在依据上述方法获得缩进深度或嵌套的层级数后,依据预设的嵌套深度阈值,判断函数的缩进深度或嵌套的层级数是否大于该嵌套深度阈值,如果大于该嵌套深度阈值,则认为该函数存在风险,该函数是存在风险的函数。
代码分析单元依据预设的关键字对函数进行分析,将关键字的行数以及关键字之间的函数代码的行数相加,如果相加后得到的行数大于函数的行数阈值,则认为该函数存在风险,该函数是存在风险的函数;例如,函数的行数阈值为200,当函数的行数超过200时,就认为该函数是相对难以理解和维护的,该函数就是存在风险的函数。例如,对于如下函数:
预设的关键字为“{”和“}”,则包括关键字“{”和“}”在内的函数行数为3。
代码分析单元对函数进行分析,依据预设的局部变量名,当在函数中的代码识别出与预设的局部变量名相同的局部变量,则将函数内局部变量的个数加1,从而得到函数中函数内局部变量的个数,如果函数内局部变量的个数大于函数内局部变量个数阈值,则认为该函数存在风险,该函数是存在风险的函数;例如,预设的函数内局部变量个数阈值为20,如果一个函数内局部变量个数超过20,则认为这个函数很难理解,属于有风险的函数;例如,对于如下函数:
该函数的局部变量为int a、int b和bool c,函数内局部变量个数为3。
所述圈复杂度指的是使用Tom Mccabe的方法计算函数中逻辑判断词的数量,函数的圈复杂度的计算方法为:函数的圈复杂度基数为1,当代码分析单元在函数中识别出if、while、for、and、or、repeat、case等逻辑判断词时,圈复杂度加1;如果函数的圈复杂度大于圈复杂度阈值,则认为该函数存在风险;例如,函数的圈复杂度阈值可以设置为10,如果一个函数的圈复杂度大于10,则认为这个函数的逻辑过于复杂,需要对这个函数进行简化处理,这个函数是存在风险的函数;例如,对于如下函数:if(((status=Success)and done)or(not done and(numLines>=maxLines))),这个函数的圈复杂度的计算方法为:1(圈复杂度基数)+1(if)+1(and)+1(or)+1(and),因此这个函数的圈复杂度等于5。
类之间的调用关系如果超过某种复杂程度,表示这个类存在风险,类的调用关系包括类的入度和类的出度;其中,类的入度也称为向心耦合度,指的是依赖该类的外部类的数目(i.e incoming dependencies),该数目越大,表示该类担当的职责越大,也就越稳定,例如,类A被类B和类C调用,那么类A的向心耦合度为2;类的出度也称为离心耦合度,指的是该类依赖的外部类的数目(i.e outgoing dependencies),该数目越大,表示该类过多的调用外部类,该类不稳定,因此受被调用类的影响较大,例如,类A调用类B、类C和类D,则类A的离心耦合度为3;本优选实施例中,从类的离心耦合度这方面对类进行分析,则预设的类风险阈值为离心耦合度阈值,只要类的离心耦合度大于离心耦合度阈值,就认为该类存在风险,属于存在风险的类;代码分析单元对类中的代码进行分析,依据预设的语法规则,识别出类与类之间的调用关系,依据类与类之间的调用关系得到该类可以调用的外部类的数目,这个数目就是该类的离心耦合度,如果该类的离心耦合度大于离心耦合度阈值,则该类就是存在风险的类;例如,对于如下类的定义:class B{A a;},表示类B引用了类A,类B可以调用类A,类B的离心耦合度为1;例如,可以将离心耦合度阈值设置为5,如果类的离心耦合度超过5,则认为该类是不稳定的类,是存在风险的类。
代码分析单元将存在风险的函数信息和类信息发送给报告生成单元。
步骤203,文件分析单元获取代码文件和代码文件的修改记录,依据预设的文件风险阈值对代码文件和代码文件的修改记录进行分析,得到存在风险的代码文件信息。
具体的,用户对软件的代码文件修改后,可以调用命令提交修改后的代码文件给版本控制系统,版本控制系统为该用户的修改生成对应的版本号,并对代码文件的版本和修改记录进行统一的管理,所述版本控制系统可以为并发版本系统(CVS,ConcurrentVersions System)或Subversion等版本控制系统。文件分析单元向版本控制系统发送获取文件请求,该获取文件请求中携带获取的代码文件的文件名;版本控制系统收到获取文件请求后,调用命令,将其中的文件名作为命令的参数值输入到命令,命令运行后依据文件名得到对应的代码文件的修订记录,然后将该代码文件的修改记录返回给文件分析单元;其中,代码文件的修改记录包括版本号、修改文件的人员信息和修改时间;例如,文件分析单元在收到代码文件的修改记录后,依据其中的修改时间和预设时间信息从代码文件的修改记录中提取最近几天之内的代码文件的修改记录;例如,所述时间信息为7天,则文件分析单元就在收到的代码文件的修改记录中提取最近7天内的修改记录;同时,代码分析单元据预设的文件路径,在设备中获取软件的一个以上代码文件。
例如,对于Subversion版本控制系统,运行svn log xxx命令,其中xxx为代码文件的文件名,就可以得到该代码文件的修改记录;对应的修改记录可以是:r123︱jim︱date,其中,r123为版本号,jim是修改该代码文件的人员信息,date为修改时间。
用户预先将文件风险阈值写入到步骤202中的所述配置文件中,将配置文件保存到设备中,然后将配置文件的保存路径配置到文件分析单元,文件分析单元在得到代码文件和代码文件的修改记录后,依据配置的保存路径获取配置文件,从中读取出预设的文件风险阈值,然后依据预设的文件风险阈值对代码文件和代码文件的修改记录进行分析。
代码风险阈值包括一段时间内代码文件的修改次数阈值、一段时间内修改代码文件的人员数阈值和代码文件的总行数阈值;例如,7天内代码文件的修改次数阈值为5,如果代码文件在7天内的修改次数超过5次,则该代码文件就是存在风险的代码文件;7天内代码文件的修改人员数阈值是3,如果代码文件在7天内参与修改的人员的总数大于3,则该代码文件就是存在风险的代码文件;代码文件的总行数阈值为2000,如果代码文件中代码的总行数大于2000,该代码文件是存在风险的代码文件。
文件分析单元在对代码文件的修改记录进行分析时,依据预设的修订记录格式,确定版本号字段在修订记录中的位置,依据该位置在提取的代码文件的修改记录中找到版本号,并统计找到的版本号的总数,所述版本号的数量等于代码文件的修改次数,如果该修改次数大于一段时间内代码文件的修改次数阈值,则表示该代码文件的修改次数过多,是存在风险的代码文件;这里,由于版本控制系统在每次代码文件的修改后都生成对应的版本号,因此依据版本号的数量可以获得代码文件在一段时间内的修改次数;文件分析单元依据预设的修订记录格式,确定人员信息字段在代码文件的修订记录中的位置,依据所述位置在代码文件的修改记录中修改代码文件的人员信息,并统计修改代码文件的人员信息数,如果该修改人员数大于一段时间内代码文件的修改人员数阈值,则表示该代码文件参与修改的人较多,是存在风险的代码文件;文件分析单元调用行数统计命令,将需要统计的代码文件的文件名作为行数统计命令的参数值,该行数统计命令运行后可依据代码文件的文件名,找到该代码文件,并统计代码文件的总行数;如果得到的代码文件的总行数大于代码文件的总行数阈值,则认为这个代码文件比较难理解和难维护,该代码文件是存在风险的代码文件;例如,对于linux平台,运行的代码统计命令为wc-1xxx,其中xxx表示代码文件的文件名。
文件分析单元将分析得到的存在风险的代码文件信息发送给报告生成单元。
步骤204,报告生成单元依据存在风险的函数信息、类信息和代码文件信息生成代码风险报告。
具体的,报告生成单元接收扫描单元发送的存在风险的函数信息、存在风险的类信息,并接收文件分析单元发送的代码文件信息;其中,存在风险的函数信息包括:函数的圈复杂度、嵌套深度、函数代码的行数、函数内局部变量的个数、函数所在代码文件的路径、函数名及参数;存在风险的类信息包括:类的离心耦合度、类的名称以及类所在代码文件的路径;代码文件信息包括:代码文件的总行数、代码文件的路径、代码文件的修改次数和修改代码文件的人员信息。
报告生成单元将收到的存在风险的函数信息、类信息和代码文件信息进行格式转换,生成易读取的XML格式或HTML格式的代码风险报告,方便用户查看代码风险报告;这里,代码风险报告中仍然包括存在风险的函数信息、类信息和代码文件信息,信息中内容也与报告生成单元收到的信息一致,只是代码风险报告与这些信息的格式不同而已。
为实现上述方法,如图1所示,所述代码风险的检测装置中:
扫描单元10,用于从预设的代码文件中提取函数和类;
代码分析单元11,用于依据预设的函数风险阈值和类风险阈值分别对所述函数和所述类进行分析,得到存在风险的函数信息和类信息;
文件分析单元12,用于依据预设的文件风险阈值对获取的代码文件和代码文件的修改记录进行分析,得到存在风险的代码文件信息;
报告生成单元13,用于依据所述存在风险的函数信息、类信息和代码文件信息生成代码风险报告。
其中,代码分析单元11对函数进行分析具体包括:代码分析单元对函数的嵌套深度、函数的行数、函数内局部变量个数和圈复杂度进行分析。
其中,代码分析单元11获得函数的嵌套深度具体包括:当识别出函数中一行代码比前一行代码缩进时,函数的缩进深度加1;或,当识别出一组嵌套字符时,函数的嵌套的层级数加1。
其中,代码分析单元11获得函数内局部变量的个数具体包括:当在函数的代码中识别出与预设的局部变量名相同的局部变量时,将函数内局部变量的个数加1。
其中,代码分析单元11获得函数的圈复杂度具体包括:在函数中识别出逻辑判断词时,在圈复杂度基数上将所述函数的圈复杂度加1。
其中,代码分析单元11对类进行分析具体包括:代码分析单元对类的离心耦合度进行分析。
其中,代码分析单元11获得类的离心耦合度具体包括:依据识别出的类与类之间的调用关系,得到类调用的外部类的数目,所述类调用的外部类的数目等于离心耦合度。
其中,文件分析单元12对代码文件进行分析具体包括:代码分析单元对代码文件的总行数进行分析。
其中,文件分析单元12获得代码文件的总行数具体包括:文件分析单元调用行数统计命令,将代码文件的文件名作为参数值输入所述行数统计命令;所述行数统计命令运行后依据所述文件名找到代码文件,统计所述代码文件的总行数。
其中,文件分析单元12对代码文件的修改记录进行分析具体包括:代码分析单元对代码文件的修改次数和修改代码文件的人员信息进行分析。
其中,代码分析单元12获得代码文件的修改次数具体包括:文件分析单元依据预设的修订记录格式,确定版本号字段在代码文件的修订记录中的位置,依据所述位置在代码文件的修改记录中找到版本号,并统计版本号的总数,所述版本号的数量等于代码文件的修改次数。
其中,代码分析单元12获得修改代码文件的人员信息具体包括:文件分析单元依据预设的修订记录格式,确定人员信息字段在代码文件的修订记录中的位置,依据所述位置在代码文件的修改记录中找到修改代码文件的人员信息,并统计修改代码文件的人员信息数。
本发明的上述技术方案,从代码的类信息、函数信息和代码文件三个方面对软件的代码进行分析,不是简单的对代码进行语法错误、语义错误或编程规范等的检查,而是综合分析整个代码,自动地、准确地检测出代码中隐藏的风险,并给出风险提示信息,提醒研发人员对代码中的风险进行修改,提高代码的可靠性、可测性、可读性、和可维护性,保证代码的质量,从而提高软件产品的质量;此外,帮助研发人员及时发现并规避代码中可能出现的问题,减少软件在线上出现bug的概率,增强代码的健壮性和稳定性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (20)
1.一种代码风险的检测装置,其特征在于,该装置包括:扫描单元、代码分析单元、文件分析单元、报告生成单元;其中,
扫描单元,用于从预设的代码文件中提取函数和类;
代码分析单元,用于依据预设的函数风险阈值和类风险阈值分别对所述函数和所述类进行分析,得到存在风险的函数信息和类信息;
文件分析单元,用于依据预设的文件风险阈值对获取的代码文件和代码文件的修改记录进行分析,得到存在风险的代码文件信息;其中,文件分析单元对代码文件进行分析具体包括代码分析单元对代码文件的总行数进行分析;文件分析单元对代码文件的修改记录进行分析具体包括代码分析单元对代码文件的修改次数和修改代码文件的人员信息进行分析;
报告生成单元,用于依据所述存在风险的函数信息、类信息和代码文件信息生成代码风险报告。
2.根据权利要求1所述的装置,其特征在于,代码分析单元对函数进行分析具体包括:代码分析单元对函数的嵌套深度、函数的行数、函数内局部变量个数和圈复杂度进行分析。
3.根据权利要求2所述的装置,其特征在于,代码分析单元获得函数的嵌套深度具体包括:
当识别出函数中一行代码比前一行代码缩进时,函数的缩进深度加1;
或,当识别出一组嵌套字符时,函数的嵌套的层级数加1。
4.根据权利要求2所述的装置,其特征在于,代码分析单元获得函数内局部变量的个数具体包括:当在函数的代码中识别出与预设的局部变量名相同的局部变量时,将函数内局部变量的个数加1。
5.根据权利要求2所述的装置,其特征在于,代码分析单元获得函数的圈复杂度具体包括:在函数中识别出逻辑判断词时,在圈复杂度基数上将所述函数的圈复杂度加1。
6.根据权利要求1所述的装置,其特征在于,代码分析单元对类进行分析具体包括:代码分析单元对类的离心耦合度进行分析。
7.根据权利要求6所述的装置,其特征在于,代码分析单元获得类的离心耦合度具体包括:依据识别出的类与类之间的调用关系,得到类调用的外部类的数目,所述类调用的外部类的数目等于离心耦合度。
8.根据权利要求1所述的装置,其特征在于,文件分析单元获得代码文件的总行数具体包括:
文件分析单元调用行数统计命令,将代码文件的文件名作为参数值输入所述行数统计命令;
所述行数统计命令运行后依据所述文件名找到代码文件,统计所述代码文件的总行数。
9.根据权利要求1所述的装置,其特征在于,代码分析单元获得代码文件的修改次数具体包括:
文件分析单元依据预设的修订记录格式,确定版本号字段在代码文件的修订记录中的位置,依据所述位置在代码文件的修改记录中找到版本号,并统计版本号的总数,所述版本号的数量等于代码文件的修改次数。
10.根据权利要求1所述的装置,其特征在于,代码分析单元获得修改代码文件的人员信息具体包括:
文件分析单元依据预设的修订记录格式,确定人员信息字段在代码文件的修订记录中的位置,依据所述位置在代码文件的修改记录中找到修改代码文件的人员信息,并统计修改代码文件的人员信息数。
11.一种代码风险的检测方法,其特征在于,该方法包括:
扫描单元从预设的代码文件中提取函数和类;代码分析单元依据预设的函数风险阈值和类风险阈值分别对所述函数和所述类进行分析,得到存在风险的函数信息和类信息;
文件分析单元依据预设的文件风险阈值对获取的代码文件和代码文件的修改记录进行分析,得到存在风险的代码文件信息;其中,文件分析单元对代码文件进行分析的方法为代码分析单元对代码文件的总行数进行分析;文件分析单元对代码文件的修改记录进行分析的方法为:代码分析单元对代码文件的修改次数和修改代码文件的人员信息进行分析;
报告生成单元依据所述存在风险的函数信息、类信息和代码文件信息生成代码风险报告。
12.根据权利要求11所述的方法,其特征在于,代码分析单元对函数进行分析的方法为:代码分析单元对函数的嵌套深度、函数的行数、函数内局部变量个数和圈复杂度进行分析。
13.根据权利要求12所述的方法,其特征在于,代码分析单元获得函数的嵌套深度的方法为:
当识别出函数中一行代码比前一行代码缩进时,函数的缩进深度加1;
或,当识别出一组嵌套字符时,函数的嵌套的层级数加1。
14.根据权利要求12所述的方法,其特征在于,代码分析单元获得函数内局部变量的个数的方法为:当在函数的代码中识别出与预设的局部变量名相同的局部变量时,将函数内局部变量的个数加1。
15.根据权利要求12所述的方法,其特征在于,代码分析单元获得函数的圈复杂度的方法为:在函数中识别出逻辑判断词时,在圈复杂度基数上将所述函数的圈复杂度加1。
16.根据权利要求11所述的方法,其特征在于,代码分析单元对类进行分析的方法为:代码分析单元对类的离心耦合度进行分析。
17.根据权利要求16所述的方法,其特征在于,代码分析单元获得类的离心耦合度的方法为:依据识别出的类与类之间的调用关系,得到类调用的外部类的数目,所述类调用的外部类的数目等于离心耦合度。
18.根据权利要求11所述的方法,其特征在于,文件分析单元获得代码文件的总行数的方法为:
文件分析单元调用行数统计命令,将代码文件的文件名作为参数值输入所述行数统计命令;
所述行数统计命令运行后依据所述文件名找到代码文件,统计所述代码文件的总行数。
19.根据权利要求11所述的方法,其特征在于,代码分析单元获得代码文件的修改次数的方法为:
文件分析单元依据预设的修订记录格式,确定版本号字段在代码文件的修订记录中的位置,依据所述位置在代码文件的修改记录中找到版本号,并统计版本号的总数,所述版本号的数量等于代码文件的修改次数。
20.根据权利要求11所述的方法,其特征在于,代码分析单元获得修改代码文件的人员信息的方法为:
文件分析单元依据预设的修订记录格式,确定人员信息字段在代码文件的修订记录中的位置,依据所述位置在代码文件的修改记录中找到修改代码文件的人员信息,并统计修改代码文件的人员信息数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210529531.0A CN103870382B (zh) | 2012-12-10 | 2012-12-10 | 一种代码风险的检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210529531.0A CN103870382B (zh) | 2012-12-10 | 2012-12-10 | 一种代码风险的检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103870382A CN103870382A (zh) | 2014-06-18 |
CN103870382B true CN103870382B (zh) | 2018-11-09 |
Family
ID=50908938
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210529531.0A Active CN103870382B (zh) | 2012-12-10 | 2012-12-10 | 一种代码风险的检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103870382B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105183467B (zh) * | 2015-08-28 | 2019-04-12 | 北京奇艺世纪科技有限公司 | 一种消息提示方法及装置 |
CN106557859B (zh) * | 2015-09-29 | 2020-12-11 | 阿里巴巴集团控股有限公司 | 一种验证方法和设备 |
CN106156633B (zh) * | 2016-06-23 | 2018-11-23 | 扬州大学 | 面向软件修改的风险分析方法 |
CN107168759A (zh) * | 2017-05-04 | 2017-09-15 | 工业和信息化部电信研究院 | 一种软件代码存储方法 |
CN109308253B (zh) * | 2017-07-27 | 2022-07-12 | 华为终端有限公司 | 一种代码检测方法及装置 |
CN107704264A (zh) * | 2017-10-09 | 2018-02-16 | 郑州云海信息技术有限公司 | 实现代码重构的方法、装置、设备及计算机可读存储介质 |
CN110377519B (zh) * | 2019-07-22 | 2023-06-23 | 中国工商银行股份有限公司 | 大数据系统的性能容量测试方法、装置、设备及存储介质 |
CN113138923A (zh) * | 2021-04-23 | 2021-07-20 | 上海中通吉网络技术有限公司 | 通过分析修改代码确定测试范围的方法及装置 |
CN117290846A (zh) * | 2022-06-16 | 2023-12-26 | 中兴通讯股份有限公司 | 一种代码管理方法、装置、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006285319A (ja) * | 2005-03-31 | 2006-10-19 | Yokogawa Electric Corp | エンジニアリングステーション |
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN101075208A (zh) * | 2007-07-19 | 2007-11-21 | 中兴通讯股份有限公司 | 应用于白盒路径测试的测试用例生成方法 |
CN101286119A (zh) * | 2008-05-27 | 2008-10-15 | 华耀环宇科技(北京)有限公司 | 一种通过分析代码变化确定功能点变化的方法 |
CN102521126A (zh) * | 2011-12-05 | 2012-06-27 | 北京邮电大学 | 基于模块分解技术的软件缺陷检测系统的复杂性分析方法 |
CN102609649A (zh) * | 2012-02-06 | 2012-07-25 | 北京百度网讯科技有限公司 | 一种自动采集恶意软件的方法和装置 |
-
2012
- 2012-12-10 CN CN201210529531.0A patent/CN103870382B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006285319A (ja) * | 2005-03-31 | 2006-10-19 | Yokogawa Electric Corp | エンジニアリングステーション |
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN101075208A (zh) * | 2007-07-19 | 2007-11-21 | 中兴通讯股份有限公司 | 应用于白盒路径测试的测试用例生成方法 |
CN101286119A (zh) * | 2008-05-27 | 2008-10-15 | 华耀环宇科技(北京)有限公司 | 一种通过分析代码变化确定功能点变化的方法 |
CN102521126A (zh) * | 2011-12-05 | 2012-06-27 | 北京邮电大学 | 基于模块分解技术的软件缺陷检测系统的复杂性分析方法 |
CN102609649A (zh) * | 2012-02-06 | 2012-07-25 | 北京百度网讯科技有限公司 | 一种自动采集恶意软件的方法和装置 |
Non-Patent Citations (2)
Title |
---|
代码质量静态度量的研究与应用;黄沛杰 等;《计算机工程与应用》;20110811;第47卷(第23期);61-63,107页 * |
航天型号软件代码质量度量评估实现;孙梦璘 等;《系统工程与电子技术》;20090415;第31卷(第4期);956-959页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103870382A (zh) | 2014-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103870382B (zh) | 一种代码风险的检测方法及装置 | |
AU2010350247B2 (en) | Code inspection executing system for performing a code inspection of ABAP source codes | |
CN104077140B (zh) | 用于持续集成的自动化编译方法和编译装置 | |
US20110145653A1 (en) | Method and system for testing complex machine control software | |
US10747641B2 (en) | System and method for cause point analysis for effective handling of static analysis alarms | |
CN103257919B (zh) | 脚本程序检查方法和装置 | |
CN104899147A (zh) | 一种面向安全检查的代码静态分析方法 | |
CN113434395B (zh) | 测试用例的自动化生成方法、装置、设备及介质 | |
CN106371997A (zh) | 一种代码检查方法及装置 | |
CN108920140A (zh) | 一种前后端统一校验方法 | |
CN103294596A (zh) | 一种基于程序不变量的合约式软件故障预警方法 | |
US20150286555A1 (en) | System and method for converting the business processes to test-centric activity diagrams | |
Chen et al. | Automatic fault tree derivation from little-jil process definitions | |
CN103279631A (zh) | 设计模式制导的爪哇代码评审方法 | |
Kim et al. | Adding examples into java documents | |
CN115904989A (zh) | 一种接口测试方法、装置、设备及可读存储介质 | |
Rai et al. | Method level text summarization for java code using nano-patterns | |
CN110287700A (zh) | 一种iOS应用安全分析方法及装置 | |
Li et al. | Elegant: Towards effective location of fragmentation-induced compatibility issues for android apps | |
CN111258562B (zh) | Java代码质量检查方法、装置、设备和存储介质 | |
CN112256575A (zh) | 一种代码质量管理方法、系统及相关设备 | |
CN115357492A (zh) | 一种用于Java软件的形式化验证方法及装置 | |
CN111027073B (zh) | 漏洞检测方法、装置、设备及存储介质 | |
JP2016048554A (ja) | 制御機器プログラムコードを作成するコンピュータ実施方法および関連するメッセージ管理環境 | |
Sokolsky et al. | Monitoring assumptions in assume-guarantee contracts |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |