掌桥专利:专业的专利平台
掌桥专利
首页

一种城轨联锁软件代码静态度量方法及系统

文献发布时间:2023-06-19 09:26:02


一种城轨联锁软件代码静态度量方法及系统

技术领域

本发明涉及计算机技术领域,尤其涉及一种城轨联锁软件代码静态度量方法及系统。

背景技术

目前使用的城轨联锁软件中,出于安全性质的考虑,经常在代码中编写安全性质的防护性代码。这些防护性代码不影响软件的正常使用,主要是为了防止在软件使用过程中出现参数传输错误或其他可能出现的小概率错误。

由于这些防护性代码在正常的软件静态测试中往往被视为不可达代码,从而导致在进行常规的软件代码静态测试时会影响正常代码的静态度量结果,而且对于测试人员来说,往往将上述防护性代码视为代码本身编写的失误,从而无法清楚地获知测试代码关乎的产品安全性。

针对城轨联锁代码,每次进行静态度量分析时,都会出现大量影响结果的防护性和安全性冗余代码,亟需提供一种更为准确的城轨联锁软件代码静态度量方法。

发明内容

本发明实施例提供一种城轨联锁软件代码静态度量方法及系统,用以解决现有技术中在对代码进行分析时,将防护性代码作为不可达代码,从而导致静态度量结果不可信的缺陷,使得开发人员以及开发验证人员在对带测试代码进行评估时,更加清晰直观的认识到该段代码的安全性。

第一方面,本发明实施例提供一种城轨联锁软件代码静态度量方法,主要包括:获取城轨联锁软件中各防护性代码的类型;根据防护性代码的类型对防护性代码进行屏蔽处理;对经过屏蔽处理后的城轨联锁软件进行静态度量。

可选地,上述根据防护性代码的类型对防护性代码进行屏蔽处理,主要包括:利用正则匹配替换的方式,根据防护性代码的不同类型,将防护性代码替换为可被静态度量工具识别的不同注释,以实现对防护性代码的屏蔽处理。

可选地,在对经过屏蔽处理后的城轨联锁软件进行静态度量之后,还可以包括:根据所述静态度量的结果,获取城轨联锁软件中各函数所包含的各类型的防护性代码的个数;根据城轨联锁软件中各函数所包含的各类型的防护性代码的个数,确定各类型的防护性代码的占比;根据每个函数所包含的各类型的防护性代码的占比,并结合静态度量结果,判断函数是否满足预设条件;若函数满足预设条件,则降低静态度量的标准,并重新对经过屏蔽处理后的城轨联锁软件进行静态度量;若静态度量的结果依然不合格,则对函数中的防护性代码进行修改。

可选地,上述静态度量结果,主要包括:代码总行数、所述函数的个数、分支复杂度、圈复杂度、扇出数、扇入数以及代码深度。

作为可选地,根据每个函数所包含的各类型的防护性代码的占比,并结合静态度量结果,判断所述函数是否满足预设条件,主要包括:将每个函数所包含的各类型的防护性代码的占比与第一阈值进行比较;将静态度量结果中的圈复杂度与第二阈值进行比较;将静态度量结果中的扇出数与第三阈值进行比较;在占比大于第一阈值的基础上,若圈复杂度大于所述第二阈值或扇出数大于第三阈值,则判断函数不满足所述预设条件;否则,则判断函数满足所述预设条件。

可选地,若占比不大于第一阈值,则判断函数满足预设条件;或者在占比大于第一阈值的基础上,若圈复杂度不大于第二阈值或扇出数不大于第三阈值,则判断函数满足预设条件。

可选地,防护性代码包括联锁断言防护代码。

第二方面,本发明实施例还提供一种城轨联锁软件代码静态度量系统,包括:代码识别单元用于获取城轨联锁软件中各防护性代码的类型;屏蔽处理单元用于根据防护性代码的类型对防护性代码进行屏蔽处理;静态度量单元用于对经过屏蔽处理后的城轨联锁软件进行静态度量。

第三方面,本发明实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述城轨联锁软件代码静态度量方法的步骤。

第四方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述城轨联锁软件代码静态度量方法的步骤。

本发明实施例提供的城轨联锁软件代码静态度量方法及系统,针对因某些原因不得不编写的防护性质代码,进行类型识别,对于不影响软件正常使用的防护性代码,在进行静态测试时进行屏蔽,以达到对正常执行代码的测试,并将防护性代码个数及占比作为一种度量标准进行可视化,使得开发人员以及开发验证人员在对软件代码进行评估时,能够更清晰、直观的获取到该段代码的安全性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种城轨联锁软件代码静态度量方法的流程示意图;

图2是本发明实施例提供的另一种城轨联锁软件代码静态度量方法的流程示意图;

图3为本发明实施例提供的一种城轨联锁软件代码静态度量系统的结构示意图;

图4是本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

软件代码的静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。在本发明实施例中所提出城轨联锁软件代码静态度量方法,主要是借助相关的软件度量工具进行的。

其中,代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面,可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。静态结构分折将描述对象和类之间的静态关系,通过建立对象和类之间的各种静态联系,模拟客观事物的静态结构。

静态分析工具一般分为静态度量工具和静态检查工具,其中,静态检查工具主要是通过扫描发掘代码中隐藏的潜在故障,而静态度量的目的主要是对代码进行静态复杂度度量,一般包括获取代码行数,函数个数等,也可以包括获取分支复杂度,圈复杂度,代码深度等等。通过获取这些数据,可以直观获取当前的代码规模以及复杂度情况;且复杂度度量结果可以为代码分析提供可视化数据、可以对代码的重构提供指导;还可以借助复杂度度量结果对代码的重构效果进行度量。

本发明实施例提供了一种城轨联锁软件代码静态度量方法,如图1所示,包括但不限于以下步骤:

步骤S1:获取城轨联锁软件中各防护性代码的类型;

步骤S2:根据防护性代码的类型对防护性代码进行屏蔽处理;

步骤S3:对经过屏蔽处理后的城轨联锁软件进行静态度量。

针对现有技术在每次进行城轨联锁代码的静态度量的过程中,所出现的大量影响度量结果的防护性和安全性冗余代码,将其均视为代码本身编写的失误,从而导致软件代码的静态测试无法正常开展,或者测试结果远远不能达到预期的效果,增加了人力、物力的付出。

在本发明实施例中,测试人员可以在对联锁软件进行第一次代码静态度量前,记录常见的防护性代码以及冗余代码格式,并在静态度量时进行输入。在具体测试时,先将防护性代码以及冗余代码这些类型的代码进行记录,并分析每个类型的代码个数以及防护性代码占总代码的比重。然后,根据防护性代码的不同类型对各个防护性代码进行屏蔽处理。最后,可以对屏蔽处理后的城轨联锁软件继续后续其他静态度量项的检测。

如联锁断言防护代码是一种较为常见的防护性代码,其作用为:在判断条件错误时抛出错误,使联锁宕机或上电锁闭,这种断言防护经常写在一种判断分支中或作为开头入参检查和结尾条件检查,而这些断言的运行判断条件往往是不可能成立的,所以会出现静态度量时的不可达代码。

为了克服类似不可达代码这一类防护性代码对静态度量的影响,在本发明实施例中,根据防护性代码的不同类型,对每一种类型的代码采取对应的屏蔽处理方法,以实现对每个防护性代码的屏蔽处理,本发明实施例不对采用的具体的屏蔽处理工具和处理方法作具体地限定。

最后,采用如Findbugs或Checkstyle等代码静态度量工具对经过屏蔽处理后的城轨联锁软件进行静态度量。

本发明实施例提供的城轨联锁软件代码静态度量方法,针对因某些原因不得不编写的防护性质代码,进行类型识别,对于不影响软件正常使用的防护性代码,在进行静态测试时进行屏蔽,以达到对正常执行代码的测试,并将防护性代码个数及占比作为一种度量标准进行可视化,使得开发人员以及开发验证人员在对软件代码进行评估时,能够更清晰、直观的获取到该段代码的安全性。

基于上述实施例的内容,作为一种可选实施例,上述步骤S2中所述的根据所述防护性代码的类型对所述防护性代码进行屏蔽处理,可以包括:利用正则匹配替换的方式,根据防护性代码的不同类型,将防护性代码替换为可被静态度量工具识别的不同注释,以实现对防护性代码的屏蔽处理。

正则表达式(regular expression)是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑,是一种可以用于查找、匹配、处理字符串、替换和转换字符串,输入输出等操作的屏蔽处理方式。且各种语言都支持,例如.NET正则库,JDK正则包,Perl、JavaScript等各种脚本语言都支持正则表达式。

具体地,在本发明实施例中,可以根据步骤1中通过对城轨联锁软件中各防护性代码进行类型标注后,在步骤S2中,根据不同的类型,采取正则匹配替换的方式,利用与每个防护性代码对应的可被静态度量工具识别的不同注释字符串对其进行屏蔽处理。最后,对经过屏蔽处理后的城轨联锁软件进行静态度量。

本发明实施例提供的城轨联锁软件代码静态度量方法,采用针对不同的类型的防护性代码,利用可被静态度量工具识别的不同注释进行屏蔽的方法,以达到对屏蔽后的执行代码的测试,使得开发人员以及开发验证人员在对软件代码进行评估时,能够更清晰、直观的获取到该段代码的安全性。

基于上述实施例的内容,作为一种可选实施例,在对经过屏蔽处理后的城轨联锁软件进行静态度量之后,还可以包括:根据所述静态度量的结果,获取城轨联锁软件中各函数所包含的各类型的防护性代码的个数;根据城轨联锁软件中各函数所包含的各类型的防护性代码的个数,确定各类型的防护性代码的占比;根据每个函数所包含的各类型的防护性代码的占比,并结合静态度量结果,判断函数是否满足预设条件;若函数满足所述预设条件,则降低静态度量的标准,并重新对经过屏蔽处理后的城轨联锁软件进行静态度量;若静态度量的结果依然不合格,则对函数中的防护性代码进行修改。

由于防护代码此类代码均为固定格式,可利用类似正则表达式匹配的方式匹配出在本次度量中,每个函数所包含的防护性代码个数,并根据其展开后所占代码行数与总代码行数做比,计算防护性代码在本函数中所占代码比例。

但是在城轨联锁软件中,可能存在某些函数出现由于其分支复杂度偏高等问题导致在静态度量结果不符合要求,需要修改,但考虑其安全性质不建议进行过度修改,此时如果结合防护性代码占比可以预估代码安全性,由此评估代码的重构难度。可以预设御用评判修改是否安全的预设条件,通过将函数所包含的各类型的防护性代码的占比并结合分支复杂度等静态度量结果,来进行预设条件的设置。设置当函数满足该预设条件,则对其他度量判断结果例如圈复杂度等的要求进行适当放宽,并重新对经过屏蔽处理后的城轨联锁软件进行静态度量。因为其他度量结果尤其是圈复杂度和扇入扇出是判断代码质量的主要方面,但是如果经过对防护性代码个数或占比的判断后认为该函数安全性达到一定标准,则代表此函数不宜修改,则放宽其他代码静态度量的标准,如果还不满足,在进行代码本体修改。进一步地,若函数不满足该预设条件,则不允许对函数中的防护性代码进行修改,或者根据研发人员的进一步做安全性评估后,再做修改。

本发明实施例提供的城轨联锁软件代码静态度量方法,针对防护性质代码,进行判别,并计入静态度量范围里,以根据防护性代码个数对代码相关产品安全性做大致评估。针对城轨联锁代码来说,实现在每次进行静态度量分析后,对于出现大量影响结果的防护性和安全性冗余代码,根据安全性评判结果进行适当的修改,在不影响产品安全性的基础上,使得开发人员以及开发验证人员在对代码进行静态评估时能够更加清晰直观的认识到该段代码的安全性。

基于上述实施例的内容,作为一种可选实施例,步骤S3中所述的静态度量结果,可以包括但不限于:代码总行数、函数的个数、分支复杂度、圈复杂度、扇出数、扇入数以及代码深度。

其中,同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。分支复杂度则是根据软件代码分支的层数从而用于衡量软件程序的测试及维护难度的参数。分支复杂度说明程序代码测试和维护的难度大。

其中,圈复杂度(Cyclomatic complexity)是一种代码复杂度的衡量标准,在软件测试的概念里,圈复杂度用来衡量一个模块判定结构的复杂程度,数量上表现为线性无关的路径条数,即合理的预防错误所需测试的最少路径条数。圈复杂度大说明程序代码可能质量低且难于测试和维护。

本发明实施例提供的城轨联锁软件代码静态度量方法,通过合理的设置静态度量对象,以对屏蔽处理后的城轨联锁软件执行代码的静态测试,使得开发人员以及开发验证人员在对软件代码进行评估时,能够更清晰、直观的获取到该段代码的安全性。

基于上述实施例的内容,作为一种可选实施例,上述根据每个函数所包含的各类型的防护性代码的占比,并结合静态度量结果,判断函数是否满足预设条件,可以包括:将每个函数所包含的各类型的防护性代码的占比与第一阈值进行比较;将静态度量结果中的圈复杂度与第二阈值进行比较;将静态度量结果中的所述扇出数与第三阈值进行比较;在占比大于第一阈值的基础上,若圈复杂度大于第二阈值或扇出数大于所述第三阈值,则判断函数不满足所述预设条件;否则,则判断函数满足所述预设条件。。

进一步地,若占比小于第一阈值,则判断函数满足预设条件;或者在占比大于第一阈值的基础上,若圈复杂度不大于第二阈值或扇出数不大于所述第三阈值,则判断函数满足预设条件。

作为一种可选地实施例,本发明实施例提供一种城轨联锁软件代码静态度量方法,如图2所示,包括但不限于以下步骤:

步骤Q1:测试人员通过软件开发人员确定并获取城轨联锁软件中各个函数中的防护性代码的类型。

步骤Q2:计算在本次度量中每个函数中所包含的防护性代码的个数,以及在该函数中防护性代码的占比。

步骤Q3:根据各个防护性代码的类型不同,采取对应的屏蔽处理方法,完成对所述防护性代码的屏蔽处理。

步骤Q4:对经过屏蔽处理后的城轨联锁软件进行静态度量,获取城轨联锁软件代码的圈复杂度、条件嵌套数(分支复杂度)、代码总行数、注释行数(或防护性代码行数)、注释代码占比(或防护性代码占比)、扇入扇出等。

进一步地,可以根据预设条件,判断轨联锁软件代码中各函数是否满足预设的修改条件。

例如:设第一阈值为10%、设第二阈值为25、设第三阈值为15,则:在防护性代码占比大于10%的基础上,若圈复杂度不超过25(正常为20),扇出不超过15,考虑修改代码对安全性的影响可以不予修改,即使超过也需根据研发进行评估再做修改。

可选地,还包括:

步骤Q5:在防护性代码占比小于10%时,则修改代码对安全性的影响较小,则判断所述函数不满足所述预设条件。

步骤Q6:如在防护性代码占比超过10%的情况下,若圈复杂度不超过25(正常为20),扇出不超过15,考虑修改代码对安全性的影响可以不予修改,即使超过也需根据研发进行评估再做修改。

基于上述实施例的内容,作为一种可选实施例,防护性代码可以包括联锁断言防护代码。

作为一种可选地实施例,如联锁断言防护代码的作用为在判断条件错误时,抛出错误,使联锁宕机或上电锁闭。这种断言防护代码经常写在一种判断分支中或作为开头入参检查和结尾条件检查,而这些断言的运行判断条件往往是不可能成立的,所以可能会出现静态度量的过程中的不可达代码,故需要对其进行屏蔽处理。

由于联锁断言防护代码均为固定格式,可利用类似正则表达式匹配的方式匹配出本次度量中每个函数所包含的防护性代码个数,并根据其展开后所占代码行数与总代码行数做比计算防护性代码在本函数中所占代码比例。

最后,可利用正则匹配替换的方式屏蔽防护性代码,例如将其暂时替换为可令静态度量工具识别的注释后进行后续静态度量。

图3为本发明实施例提供的一种城轨联锁软件代码静态度量系统的结构示意图,如图3所示,包括但不限于:代码识别单元1、屏蔽处理单元2和静态度量单元3。其中,代码识别单元1主要用于获取城轨联锁软件中各防护性代码的类型;屏蔽处理单元2主要用于根据防护性代码的类型对防护性代码进行屏蔽处理;静态度量单元3主要用于对经过屏蔽处理后的城轨联锁软件进行静态度量。

具体地,可以在对联锁软件进行第一次代码静态度量前,利用代码识别单元1记录常见的防护性代码以及冗余代码格式,并在静态度量时进行输入。

在具体测试时,利用屏蔽处理单元2先对防护性代码以及冗余代码这些类型的代码进行记录,并分析每个类型的代码个数以及防护性代码占总代码的比重。然后,根据防护性代码的不同类型对各个防护性代码进行屏蔽处理。最后,可以对屏蔽处理后的城轨联锁软件继续后续其他静态度量项的检测。

最后,利用静态度量单元3调用码静态度量工具对经过屏蔽处理后的城轨联锁软件进行静态度量。

本发明实施例提供的城轨联锁软件代码静态度量系统,针对因某些原因不得不编写的防护性质代码,进行类型识别,对于不影响软件正常使用的防护性代码,在进行静态测试时进行屏蔽,以达到对正常执行代码的测试,并将防护性代码个数及占比作为一种度量标准进行可视化,使得开发人员以及开发验证人员在对软件代码进行评估时,能够更清晰、直观的获取到该段代码的安全性。

需要说明的是,本发明实施例提供的城轨联锁软件代码静态度量系统,在具体执行时,可以基于上述任一实施例所述的城轨联锁软件代码静态度量方法来实现,对此本实施例不作赘述。

图4示例了一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(communication interface)420、存储器(memory)430和通信总线(bus)440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行城轨联锁软件代码静态度量方法,主要包括:获取城轨联锁软件中各防护性代码的类型;根据防护性代码的类型对防护性代码进行屏蔽处理;对经过屏蔽处理后的城轨联锁软件进行静态度量。

此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

另一方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的城轨联锁软件代码静态度量方法,主要包括:获取城轨联锁软件中各防护性代码的类型;根据防护性代码的类型对防护性代码进行屏蔽处理;对经过屏蔽处理后的城轨联锁软件进行静态度量。

又一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的以执行城轨联锁软件代码静态度量方法,主要包括:获取城轨联锁软件中各防护性代码的类型;根据防护性代码的类型对防护性代码进行屏蔽处理;对经过屏蔽处理后的城轨联锁软件进行静态度量。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

相关技术
  • 一种城轨联锁软件代码静态度量方法及系统
  • 一种基于深度学习的软件代码质量度量方法
技术分类

06120112162173