CN110018828B - 源代码检查方法、装置及终端设备 - Google Patents

源代码检查方法、装置及终端设备 Download PDF

Info

Publication number
CN110018828B
CN110018828B CN201910180363.0A CN201910180363A CN110018828B CN 110018828 B CN110018828 B CN 110018828B CN 201910180363 A CN201910180363 A CN 201910180363A CN 110018828 B CN110018828 B CN 110018828B
Authority
CN
China
Prior art keywords
variables
same
source code
variable
configuration 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
Application number
CN201910180363.0A
Other languages
English (en)
Other versions
CN110018828A (zh
Inventor
刘均
覃定鹏
王力
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Launch Technology Co Ltd
Original Assignee
Shenzhen Launch Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Launch Technology Co Ltd filed Critical Shenzhen Launch Technology Co Ltd
Priority to CN201910180363.0A priority Critical patent/CN110018828B/zh
Publication of CN110018828A publication Critical patent/CN110018828A/zh
Application granted granted Critical
Publication of CN110018828B publication Critical patent/CN110018828B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请适用于软件技术领域,提供了源代码检查方法、装置及终端设备,包括:获取需要检查的源代码;获取与所述源代码对应的配置文件,所述配置文件包括所述源代码中循环语句出现的变量;判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的变量相同;若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的变量相同,则发出提示,所述提示包括可能出现问题的位置信息。通过上述方法能够快速查找出出现问题的循环语句行。

Description

源代码检查方法、装置及终端设备
技术领域
本申请属于软件技术领域,尤其涉及源代码检查方法、装置、终端设备及计算机可读存储介质。
背景技术
在软件开发中,经常会使用到循环语句。但若循环语句里存在源代码手误问题,例如条件判断语句“j”写成了“i”,程序还能够正常编译、运行,只有在某些不确定的情况下会出现异常、得不到预期的结果。
对于这种逻辑的非编译阶段的问题,编译器无法检查出来,软件开发者往往需要花费大量的时间和精力,逐行代码排查,最终还可能找不到引起错误所在的地方。这种手误的存在,造成了软件不稳定、给软件开发造成了巨大的时间成本浪费。
故,需要提供一种新的方法以解决上述技术问题。
发明内容
有鉴于此,本申请实施例提供了源代码检查方法、装置及终端设备,以解决现有技术中难以快速查找到出现错误的代码的位置的问题。
本申请实施例的第一方面提供了一种源代码检查方法,包括:
获取需要检查的源代码;
获取与所述源代码对应的配置文件,所述配置文件包括所述源代码中循环语句出现的变量;
判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的变量相同;
若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的变量相同,则发出提示,所述提示包括可能出现问题的位置信息。
本申请实施例的第二方面提供了一种源代码检查装置,包括:
源代码获取单元,用于获取需要检查的源代码;
配置文件获取单元,用于获取与所述源代码对应的配置文件,所述配置文件包括所述源代码中循环语句出现的变量;
变量比较单元,用于判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的变量相同;
提示发出单元,用于若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的变量相同,则发出提示,所述提示包括可能出现问题的位置信息。
本申请实施例的第三方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面所述方法的步骤
本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述方法的步骤。
本申请实施例与现有技术相比存在的有益效果是:
由于在同一行循环语句的所有变量没有都与配置文件的变量相同时,发出提示,而在实际情况中,同一行循环语句的所有变量通常为同一个变量,因此,在发出包括可能出现问题的位置信息的提示后,用户能够及时、准确地发现可能出现问题的源代码。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1是本申请实施例提供的一种源代码检查方法的流程示意图;
图2是本申请实施例提供的一种源代码检查装置的结构示意图;
图3是本申请实施例提供的终端设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
为了说明本申请所述的技术方案,下面通过具体实施例来进行说明。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
具体实现中,本申请实施例中描述的终端设备包括但不限于诸如具有触摸敏感表面(例如,触摸屏显示器和/或触摸板)的移动电话、膝上型计算机或平板计算机之类的其它便携式设备。还应当理解的是,在某些实施例中,上述设备并非便携式通信设备,而是具有触摸敏感表面(例如,触摸屏显示器和/或触摸板)的台式计算机。
在接下来的讨论中,描述了包括显示器和触摸敏感表面的终端设备。然而,应当理解的是,终端设备可以包括诸如物理键盘、鼠标和/或控制杆的一个或多个其它物理用户接口设备。
终端设备支持各种应用程序,例如以下中的一个或多个:绘图应用程序、演示应用程序、文字处理应用程序、网站创建应用程序、盘刻录应用程序、电子表格应用程序、游戏应用程序、电话应用程序、视频会议应用程序、电子邮件应用程序、即时消息收发应用程序、锻炼支持应用程序、照片管理应用程序、数码相机应用程序、数字摄影机应用程序、web浏览应用程序、数字音乐播放器应用程序和/或数字视频播放器应用程序。
可以在终端设备上执行的各种应用程序可以使用诸如触摸敏感表面的至少一个公共物理用户接口设备。可以在应用程序之间和/或相应应用程序内调整和/或改变触摸敏感表面的一个或多个功能以及终端上显示的相应信息。这样,终端的公共物理架构(例如,触摸敏感表面)可以支持具有对用户而言直观且透明的用户界面的各种应用程序。
实施例:
图1示出了本申请实施例提供的一种源代码检查方法的流程图,详述如下:
步骤S11,获取需要检查的源代码;
其中,获取的源代码可以为相同文件夹下的源代码,也可以为不同文件夹下的源代码。
具体地,读入用户选择的文件夹下的源代码到内存中,以便提高后续解析该源代码的解析速度。
步骤S12,获取与所述源代码对应的配置文件,所述配置文件包括所述源代码中循环语句出现的变量;
该步骤中,根据需检查的源代码生成对应的配置文件。当该配置文件包括源代码中循环语句的多少个变量,后续就能够根据该配置文件检查出现该多少个变量的源代码。
比如,在配置文件包括以下信息时:
[Settings]
Count=6
item1=i
item2=j
item3=k
item4=nn
item5=x
item6=y
其中,“Count=6”表示共有6种类型的控制变量名,“item1”、“item2”…“item6”分别为这6种声明的用到的变量名称,对应源代码中循环语句的变量。当循环语句为for循环语句时,例如:
for(int i=0;i<100;i++)循环,对应的是“item1=i”,
for(int nn=0;nn<100;nn++)循环,对应的是“item4=nn”,以此类推。
步骤S13,判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的变量相同;
由于不同行的循环语句的变量通常是不同的,而处于同一行循环语句的所有变量则是相同的,因此,只判断处于同一行循环语句的所有变量是否都与配置文件的变量相同。
步骤S14,若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的变量相同,则发出提示,所述提示包括可能出现问题的位置信息。
本申请实施例中,获取需要检查的源代码以及与所述源代码对应的配置文件,判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的变量相同,若没有,则发出提示。由于在同一行循环语句的所有变量没有都与配置文件的变量相同时,发出提示,而在实际情况中,同一行循环语句的所有变量通常为同一个变量,因此,在发出包括可能出现问题的位置信息的提示后,用户能够及时、准确地发现可能出现问题的源代码。
在一些实施例中,可能出现问题的位置信息包括文件名、行号以及行内容等。此外,发出的提示还可以包括出现的问题的分类说明。
在一些实施例中,若所述源代码中循环语句出现的变量的个数大于1,则所述配置文件还包括所述源代码中循环语句出现的变量的总数,此时,所述步骤S13具体为:
判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的任一相同变量相同;
对应地,所述步骤S14具体为:
若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的任一相同变量相同,则发出提示,所述提示包括可能出现问题的位置信息。
本实施例中,当循环语句出现的变量的个数大于1,选取配置文件包括的任一变量,将同一行循环语句的所有变量都与从配置文件选取的任一变量比较,若同一行循环语句的所有变量都与选取的任一变量不相同,则从配置文件选取另一个变量,再将同一行循环语句的所有变量都与选取的另一变量比较,直到判断出同一行循环语句的所有变量没有都与所述配置文件的任一相同变量相同,或者,直到判断出同一行循环语句的所有变量都与所述配置文件的任一相同变量相同。
在一些实施例中,由于for循环语句是常见的循环语句,因此,可根据for循环语句的结构快速判断出该for循环语句中的变量是否都与任一相同变量相同,此时,所述步骤S13包括:
A1、查找所述源代码中具有for关键字的循环语句;具体地,根据正则表达式“(for)”查找字符串,找到有“for”关键字的循环语句。
A2、判断同一行for循环语句中的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量是否都与所述配置文件的任一相同变量相同;如下为for循环语句的一个示例:for(int i=0;i<100;i++),其中,“int i=0”为初始化表达式,“i<100”为条件表达式,“i++”为末尾循环体。故,对于同一行for循环语句,出现变量的地方只有初始化表达式、条件表达式以及末尾循环体,故,只需判断上述3个部分的变量是否都与所述配置文件的任一相同变量相同,比如,若任一相同变量为“i”,则判断3个部分的变量是否都与“i”相同。
对应地,所述步骤S14具体为:
若所述源代码中同一行for循环语句的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量没有都与所述配置文件的任一相同变量相同,则发出提示。
本实施例中,若初始化表达式的变量、条件表达式的变量以及末尾循环体的变量只有一个与所述配置文件的任一相同变量相同,或者,只有两个与所述配置文件的任一相同变量相同,则表明该行的循环语句可能存在问题,进而发出提示。
在一些实施例中,由于for循环语句中可能存在空格,而在匹配的过程中是逐个字符匹配的,因此,为了能够快速查找、判断出初始化表达式的变量、条件表达式的变量以及末尾循环体的变量是否都与所述配置文件的任一相同变量相同,则在所述步骤S13之前,包括:
删除查找到的具有for关键字的循环语句中等于号前后的空格。
本实施例中,使用正则表达式“[\s]+=[\s]+”查找“=”号前后带有0个或多个空格的字符串;接着,对查找到的字符串使用“=”进行替换,就实现了去掉for所在行里“=”号前后的空格,为下一步的查找和判断做准备。例如,对“for(int j=0;i<100;j++)”去掉空格后将变成:“for(int j=0;i<100;j++)”。
在一些实施例中,所述若所述源代码中同一行for循环语句的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量没有都与所述配置文件的任一相同变量相同,则发出提示,包括:
B1、采用以下正则表达式判断所述源代码中具有for关键字的循环语句的初始化表达式的变量是否与所述配置文件的任一变量相同,以及判断对应的条件表达式的变量是否与所述初始化表达式的变量相同:
for.*.变量=*.;[\s]*[^变量].*.;其中,公式中的变量是指配置文件的任一变量,[\s]*表示条件表达式中数量不等的空格,[^变量]表示在数量不等的空格之后的字符串不是中括号里的变量,.*.;表示匹配到条件表达式的变量之后的字符串;具体地,若配置文件的变量包括“i”、“j”、“k”,则“for.*.变量=*.;[\s]*[^变量].*.;”变为:
for.*.i=*.;[\s]*[^i].*.;
for.*.j=*.;[\s]*[^j].*.;
for.*.k=*.;[\s]*[^k].*.;
例如,在执行“for.*.j=*.;[\s]*[^j].*.;”表达式后,可以查找到“for(int j=0;i<100;j++)”这一行有不一致的情况,因为此处的“i<100”应该为“j<100”才能与前面的初始化表达式变量一致。
B2、若判断出所述源代码中具有for关键字的循环语句的初始化表达式的变量与所述配置文件的任一变量相同,且判断出对应的条件表达式的变量与所述初始化表达式的变量不同,则发出提示。
本实施例中,在匹配出初始化表达式的变量与所述配置文件的任一变量相同后,继续判断条件表达式的变量是否与该初始化表达式的变量不同,若是,则发出提示。具体地,该提示包括的出现的问题的分类说明可以如下所示:条件表达式的变量不一致。
在一些实施例中,所述若所述源代码中同一行for循环语句的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量没有都与所述配置文件的任一相同变量相同,则发出提示,包括:
C1、采用以下正则表达式判断所述源代码中具有for关键字的循环语句的初始化表达式的变量以及条件表达式的变量是否都与所述配置文件的任一相同变量相同,以及判断对应的末尾循环体的变量是否与所述初始化表达式的变量相同:
for.*.变量=*.;.*.;[\s]*[^变量],其中,公式中的变量是指配置文件的任一变量,=*.表示等号以及等号之后的字符串,.*.表示条件表达式,[\s]*表示条件表达式中数量不等的空格,[^变量]表示在数量不等的空格之后的字符串不是中括号里的变量;具体地,若配置文件的变量包括“i”、“j”、“k”,则“for.*.变量=*.;.*.;[\s]*[^变量]”将变为:
for.*.i=*.;.*.;[\s]*[^i]
for.*.j=*.;.*.;[\s]*[^j]
for.*.k=*.;.*.;[\s]*[^k]
例如,执行“for.*.j=*.;.*.;[\s]*[^j]”表达式可以查找到“for(int j=0;j<100;i++)”这一行有不一致的情况,因为此处的“i++”应该为“j++”才能与前面的初始化表达式变量一致。
C2、若判断出所述源代码中具有for关键字的循环语句的初始化表达式的变量以及表达式的变量与所述配置文件的任一相同变量相同,且判断出对应的末尾循环体的变量与所述初始化表达式的变量不同,则发出提示。具体地,该提示包括的出现的问题的分类说明可以如下所示:末尾循环体表达式变量不一致。
需要指出的是,在实际情况中,为了提高查找到出现问题的位置的全面性,则所述若所述源代码中同一行for循环语句的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量没有都与所述配置文件的任一相同变量相同,则发出提示同时包括上述步骤B1、B2、C1、C2,以查找出条件表达式的变量或末尾循环体的变量有问题的for循环语句行。
在一些实施例中,根据同一次检查得到的所有提示生成一个文件,保存该文件。进一步地,在生成该文件后,将该文件发送至指定的终端。
例如,假设某次检查得到的2个提示,则在文件中记载的方式可如下所示:
xxx.cpp(1236):for(int j=0;i<100;j++)提示:条件表达式变量不一致
yyy.cpp(3078):for(int j=0;j<100;i++)提示:末尾循环体变量不一致
其中,“xxx.cpp”和“yyy.cpp”为文件名,“1236”和“3078”为行号,“for(int j=0;i<100;j++)”和“(int j=0;j<100;i++)”为行内容,“条件表达式变量不一致”和“末尾循环体变量不一致”为出现的问题的分类说明。
图2示出了本申请实施例提供的一种源代码检查装置的结构示意图,为了便于说明,仅示出了与本申请实施例相关的部分:
该源代码检查装置2包括:源代码获取单元21、配置文件获取单元22、变量比较单元23、提示发出单元24。其中:
源代码获取单元21,用于获取需要检查的源代码;
其中,获取的源代码可以为相同文件夹下的源代码,也可以为不同文件夹下的源代码。
具体地,读入用户选择的文件夹下的源代码到内存中,以便提高后续解析该源代码的解析速度。
配置文件获取单元22,用于获取与所述源代码对应的配置文件,所述配置文件包括所述源代码中循环语句出现的变量;
变量比较单元23,用于判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的变量相同;
提示发出单元24,用于若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的变量相同,则发出提示,所述提示包括可能出现问题的位置信息。
本申请实施例中,由于在同一行循环语句的所有变量没有都与配置文件的变量相同时,发出提示,而在实际情况中,同一行循环语句的所有变量通常为同一个变量,因此,在发出包括可能出现问题的位置信息的提示后,用户能够及时、准确地发现可能出现问题的源代码。
在一些实施例中,可能出现问题的位置信息包括文件名、行号以及行内容等。此外,发出的提示还可以包括出现的问题的分类说明。
在一些实施例中,若所述源代码中循环语句出现的变量的个数大于1,则所述配置文件还包括所述源代码中循环语句出现的变量的总数,此时,所述变量比较单元23具体用于:
判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的任一相同变量相同;
对应地,所述提示发出单元24具体用于:
若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的任一相同变量相同,则发出提示。
在一些实施例中,由于for循环语句是常见的循环语句,因此,可根据for循环语句的结构快速判断出该for循环语句中的变量是否都与任一相同变量相同,此时,所述变量比较单元23包括:
For循环语句查找模块,用于查找所述源代码中具有for关键字的循环语句;
For结构的变量比较模块,用于判断同一行for循环语句中的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量是否都与所述配置文件的任一相同变量相同;
对应地,所述提示发出单元24具体用于:
若所述源代码中同一行for循环语句的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量没有都与所述配置文件的任一相同变量相同,则发出提示。
在一些实施例中,由于for循环语句中可能存在空格,而在匹配的过程中是逐个字符匹配的,因此,为了能够快速查找、判断出初始化表达式的变量、条件表达式的变量以及末尾循环体的变量是否都与所述配置文件的任一相同变量相同,则该源代码检查装置2还包括:
空格删除单元,用于删除查找到的具有for关键字的循环语句中等于号前后的空格。
在一些实施例中,所述提示发出单元24在具体用于若所述源代码中同一行for循环语句的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量没有都与所述配置文件的任一相同变量相同,则发出提示时,包括:
初始化表达式的变量比较模块,用于采用以下正则表达式判断所述源代码中具有for关键字的循环语句的初始化表达式的变量是否与所述配置文件的任一变量相同,以及判断对应的条件表达式的变量是否与所述初始化表达式的变量相同:
for.*.变量=*.;[\s]*[^变量].*.;其中,公式中的变量是指配置文件的任一变量,[\s]*表示条件表达式中数量不等的空格,[^变量]表示在数量不等的空格之后的字符串不是中括号里的变量,.*.;表示匹配到条件表达式的变量之后的字符串;
第一提示模块,用于若判断出所述源代码中具有for关键字的循环语句的初始化表达式的变量与所述配置文件的任一变量相同,且判断出对应的条件表达式的变量与所述初始化表达式的变量不同,则发出提示。
在一些实施例中,所述提示发出单元24在具体用于若所述源代码中同一行for循环语句的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量没有都与所述配置文件的任一相同变量相同,则发出提示时,包括:
末尾循环体的变量比较模块,用于采用以下正则表达式判断所述源代码中具有for关键字的循环语句的初始化表达式的变量以及条件表达式的变量是否都与所述配置文件的任一相同变量相同,以及判断对应的末尾循环体的变量是否与所述初始化表达式的变量相同:
for.*.变量=*.;.*.;[\s]*[^变量],其中,公式中的变量是指配置文件的任一变量,=*.表示等号以及等号之后的字符串,.*.表示条件表达式,[\s]*表示条件表达式中数量不等的空格,[^变量]表示在数量不等的空格之后的字符串不是中括号里的变量;
第二提示模块,用于若判断出所述源代码中具有for关键字的循环语句的初始化表达式的变量以及表达式的变量与所述配置文件的任一相同变量相同,且判断出对应的末尾循环体的变量与所述初始化表达式的变量不同,则发出提示。
需要指出的是,在实际情况中,为了提高查找到出现问题的位置的全面性,则所述提示发出单元24在具体用于若所述源代码中同一行for循环语句的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量没有都与所述配置文件的任一相同变量相同,则发出提示时,包括:初始化表达式的变量比较模块、第一提示模块、末尾循环体的变量比较模块以及第二提示模块。
在一些实施例中,该源代码检查装置2还包括:
文件生成单元,用于根据同一次检查得到的所有提示生成一个文件,保存该文件。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
图3是本申请一实施例提供的终端设备的示意图。如图3所示,该实施例的终端设备3包括:处理器30、存储器31以及存储在所述存储器31中并可在所述处理器30上运行的计算机程序32。所述处理器30执行所述计算机程序32时实现上述各个方法实施例中的步骤,例如图1所示的步骤S11至S14。或者,所述处理器30执行所述计算机程序32时实现上述各装置实施例中各模块/单元的功能,例如图2所示模块21至24的功能。
示例性的,所述计算机程序32可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器31中,并由所述处理器30执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序32在所述终端设备3中的执行过程。例如,所述计算机程序32可以被分割成源代码获取单元、配置文件获取单元、变量比较单元、提示发出单元,各单元具体功能如下:
源代码获取单元,用于获取需要检查的源代码;
配置文件获取单元,用于获取与所述源代码对应的配置文件,所述配置文件包括所述源代码中循环语句出现的变量;
变量比较单元,用于判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的变量相同;
提示发出单元,用于若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的变量相同,则发出提示,所述提示包括可能出现问题的位置信息。
所述终端设备3可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器30、存储器31。本领域技术人员可以理解,图3仅仅是终端设备3的示例,并不构成对终端设备3的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器30可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器31可以是所述终端设备3的内部存储单元,例如终端设备3的硬盘或内存。所述存储器31也可以是所述终端设备3的外部存储设备,例如所述终端设备3上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器31还可以既包括所述终端设备3的内部存储单元也包括外部存储设备。所述存储器31用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器31还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

Claims (10)

1.一种源代码检查方法,其特征在于,包括:
获取需要检查的源代码;
获取与所述源代码对应的配置文件,所述配置文件包括所述源代码中循环语句出现的变量;
判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的变量相同;
若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的变量相同,则发出提示,所述提示包括可能出现问题的位置信息;
若所述源代码中循环语句出现的变量的个数大于1,则所述配置文件还包括所述源代码中循环语句出现的变量的总数,此时,所述判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的变量相同具体为:
判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的同一变量相同。
2.如权利要求1所述的源代码检查方法,其特征在于,所述若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的变量相同,则发出提示具体为:
若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的同一变量相同,则发出提示。
3.如权利要求1所述的源代码检查方法,其特征在于,所述判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的同一变量相同,包括:
查找所述源代码中具有for关键字的循环语句;
判断同一行for循环语句中的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量是否都与所述配置文件的同一变量相同;
对应地,所述若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的同一变量相同,则发出提示具体为:
若所述源代码中同一行for循环语句的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量没有都与所述配置文件的同一变量相同,则发出提示。
4.如权利要求3所述的源代码检查方法,其特征在于,在所述判断同一行for循环语句中的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量是否都与所述配置文件的同一变量相同之前,包括:
删除查找到的具有for关键字的循环语句中等于号前后的空格。
5.如权利要求3或4所述的源代码检查方法,其特征在于,所述若所述源代码中同一行for循环语句的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量没有都与所述配置文件的同一变量相同,则发出提示,包括:
采用以下正则表达式判断所述源代码中具有for关键字的循环语句的初始化表达式的变量是否与所述配置文件的同一变量相同,以及判断对应的条件表达式的变量是否与所述初始化表达式的变量相同:
for.*.变量=*.;[\s]*[^变量].*.;其中,公式中的变量是指配置文件的任一变量,=*.表示等号以及等号之后的字符串,[\s]*表示条件表达式中数量不等的空格,[^变量]表示在数量不等的空格之后的字符串不是中括号里的变量,.*.表示条件表达式;
若判断出所述源代码中具有for关键字的循环语句的初始化表达式的变量与所述配置文件的同一变量相同,且判断出对应的条件表达式的变量与所述初始化表达式的变量不同,则发出提示。
6.如权利要求3或4所述的源代码检查方法,其特征在于,所述若所述源代码中同一行for循环语句的初始化表达式的变量、条件表达式的变量以及末尾循环体的变量没有都与所述配置文件的同一变量相同,则发出提示,包括:
采用以下正则表达式判断所述源代码中具有for关键字的循环语句的初始化表达式的变量以及条件表达式的变量是否都与所述配置文件的同一变量相同,以及判断对应的末尾循环体的变量是否与所述初始化表达式的变量相同:
for.*.变量=*.;.*.;[\s]*[^变量],其中,公式中的变量是指配置文件的任一变量,=*.表示等号以及等号之后的字符串,.*.表示条件表达式,[\s]*表示条件表达式中数量不等的空格,[^变量]表示在数量不等的空格之后的字符串不是中括号里的变量;
若判断出所述源代码中具有for关键字的循环语句的初始化表达式的变量以及表达式的变量与所述配置文件的同一变量相同,且判断出对应的末尾循环体的变量与所述初始化表达式的变量不同,则发出提示。
7.一种源代码检查装置,其特征在于,包括:
源代码获取单元,用于获取需要检查的源代码;
配置文件获取单元,用于获取与所述源代码对应的配置文件,所述配置文件包括所述源代码中循环语句出现的变量;
变量比较单元,用于判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的变量相同;
提示发出单元,用于若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的变量相同,则发出提示,所述提示包括可能出现问题的位置信息;
若所述源代码中循环语句出现的变量的个数大于1,则所述配置文件还包括所述源代码中循环语句出现的变量的总数,此时,所述变量比较单元具体用于:
判断所述源代码中同一行循环语句的所有变量是否都与所述配置文件的同一变量相同。
8.如权利要求7所述的源代码检查装置,其特征在于,所述提示发出单元具体用于:
若所述源代码中同一行循环语句的所有变量没有都与所述配置文件的任一相同变量相同,则发出提示。
9.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6任一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述方法的步骤。
CN201910180363.0A 2019-03-11 2019-03-11 源代码检查方法、装置及终端设备 Active CN110018828B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910180363.0A CN110018828B (zh) 2019-03-11 2019-03-11 源代码检查方法、装置及终端设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910180363.0A CN110018828B (zh) 2019-03-11 2019-03-11 源代码检查方法、装置及终端设备

Publications (2)

Publication Number Publication Date
CN110018828A CN110018828A (zh) 2019-07-16
CN110018828B true CN110018828B (zh) 2023-02-28

Family

ID=67189471

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910180363.0A Active CN110018828B (zh) 2019-03-11 2019-03-11 源代码检查方法、装置及终端设备

Country Status (1)

Country Link
CN (1) CN110018828B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112949282A (zh) * 2021-02-26 2021-06-11 中国联合网络通信集团有限公司 配置文件检查方法及装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1482539A (zh) * 2002-09-09 2004-03-17 四川中圣计算机软件开发有限责任公司 全中文计算机编程语言
CN101937388A (zh) * 2009-12-17 2011-01-05 北京测腾信息技术有限公司 一种高可扩展性和可维护性的源代码缺陷检测方法及装置
CN102541533A (zh) * 2010-12-27 2012-07-04 北大方正集团有限公司 页面显示方法和设备
CN102799520A (zh) * 2012-06-27 2012-11-28 清华大学 用于源代码配对的静态检查方法及装置
CN103488460A (zh) * 2013-09-04 2014-01-01 用友软件股份有限公司 自动标记源代码的系统和方法
JP2014153777A (ja) * 2013-02-05 2014-08-25 Tokyo Kogei Univ ソースコード検査装置
CN104965788A (zh) * 2015-07-03 2015-10-07 电子科技大学 一种代码静态检测方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7478367B2 (en) * 2005-01-11 2009-01-13 International Business Machines Corporation Dynamic source code analyzer

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1482539A (zh) * 2002-09-09 2004-03-17 四川中圣计算机软件开发有限责任公司 全中文计算机编程语言
CN101937388A (zh) * 2009-12-17 2011-01-05 北京测腾信息技术有限公司 一种高可扩展性和可维护性的源代码缺陷检测方法及装置
CN102541533A (zh) * 2010-12-27 2012-07-04 北大方正集团有限公司 页面显示方法和设备
CN102799520A (zh) * 2012-06-27 2012-11-28 清华大学 用于源代码配对的静态检查方法及装置
JP2014153777A (ja) * 2013-02-05 2014-08-25 Tokyo Kogei Univ ソースコード検査装置
CN103488460A (zh) * 2013-09-04 2014-01-01 用友软件股份有限公司 自动标记源代码的系统和方法
CN104965788A (zh) * 2015-07-03 2015-10-07 电子科技大学 一种代码静态检测方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Java语言中的三种循环语句教学研究;曾新洲;《计算机时代》;20180915(第09期);第51-54页 *
SPOON: A library for implementing analyses and transformations of Java source code;Renaud Pawlak等;《Wiley Online Library》;20150811;第1155-1179页 *
移动互联网应用代码同源性安全分析;占力超;《中国优秀硕士学位论文全文数据库信息科技辑》;20180315;I138-149 *

Also Published As

Publication number Publication date
CN110018828A (zh) 2019-07-16

Similar Documents

Publication Publication Date Title
US10534861B2 (en) Automated term extraction
US20140013299A1 (en) Generalization and/or specialization of code fragments
CN112181386B (zh) 一种基于软件持续集成的代码构建方法、装置及终端
US8650170B2 (en) Systems and methods for inter-object pattern matching
CN107679222B (zh) 图片处理方法、移动终端及计算机可读存储介质
CN110018828B (zh) 源代码检查方法、装置及终端设备
CN113407186A (zh) 控制执行方法、控制执行装置、终端及可读存储介质
CN107077365B (zh) 有选择地加载预编译的头部和/或其部分
CN112948400A (zh) 一种数据库管理方法、数据库管理装置及终端设备
CN109492249B (zh) 设计图的快速生成方法、装置及终端设备
CN114816772B (zh) 基于兼容层运行的应用的排错方法、排错系统及计算设备
CN108521460B (zh) 信息推送方法、装置、移动终端及计算机可读存储介质
US9110893B2 (en) Combining problem and solution artifacts
CN113900956A (zh) 测试用例的生成方法、装置、计算机设备及存储介质
US20150006578A1 (en) Dynamic search system
CN114625663A (zh) 一种测试方法、装置、计算机设备以及存储介质
CN113760237A (zh) 编译地址的更新方法、装置、终端设备及可读存储介质
US11119761B2 (en) Identifying implicit dependencies between code artifacts
CN112596725A (zh) 编程作品的评分方法、评分装置、终端设备及存储介质
CN112015459A (zh) 一种镜像文件的升级方法、装置、终端及可读存储介质
CN113157964A (zh) 一种语音搜索数据集的方法、装置及电子设备
CN111352357A (zh) 机器人的控制方法、装置及终端设备
CN110875876B (zh) 电子红包识别方法、电子红包识别装置及移动终端
CN114610347A (zh) 基于前端组件的数据处理方法、装置、终端及存储介质
CN111382244B (zh) 一种深度检索匹配分类方法、装置及终端设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant