CN104866412A - JavaScript脚本文件的检测方法和检测系统 - Google Patents
JavaScript脚本文件的检测方法和检测系统 Download PDFInfo
- Publication number
- CN104866412A CN104866412A CN201410060049.6A CN201410060049A CN104866412A CN 104866412 A CN104866412 A CN 104866412A CN 201410060049 A CN201410060049 A CN 201410060049A CN 104866412 A CN104866412 A CN 104866412A
- Authority
- CN
- China
- Prior art keywords
- node
- metric
- function
- script file
- metric terms
- 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.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了JavaScript脚本文件的检测方法和检测系统。其中,该方法包括:获取用户输入的设置信息的获取步骤;通过根据设置信息导入至少一个JavaScript脚本文件的导入步骤;按照JavaScript脚本文件的语法规范将至少一个JavaScript脚本文件一一对应地转换成至少一个语法解析树的语法解析步骤;计算至少一个语法解析树的每个节点的每个度量项目的度量值的计算步骤;以及生成报告的报告步骤。采用本发明的检测方法和检测系统,能够实现多个JavaScript脚本文件的批量指定和批量执行,并且能够自由选择要检测的JavaScript脚本文件的度量项目。
Description
技术领域
本发明涉及JavaScript脚本文件,尤其涉及JavaScript脚本文件的检测方法和检测系统。
背景技术
就软件质量而言,代码质量占据了较大的比重。对于代码质量的检测有一种指标叫做度量(Metrics)。度量是对代码的规模和复杂度、内聚性(代码内相互关联的要素的分散程度)、耦合性(类或模块之间参数、属性等的依赖性的程度)等进行数值化或者量化评价的一种指标。该指标被认为是保障代码的易修改性、易理解性、易测试性的重要的手段之一。
随着BS(浏览器和服务器)架构的Web应用程序的普及,作为一种基于对象和事件驱动并具有相对安全性的客户端脚本语言,JavaScript重新受到了关注。但是,能用来检测JavaScript脚本文件(JavaScript代码)的度量的系统极少,且功能不多。由于Web应用程序的规模越来越大,越来越复杂,因此对JavaScript脚本文件的特性化检测也显得越来越显重要。
目前现有的可以检测JavaScript脚本文件的度量的工具有以下几种:
1)OxyProject Metrics工具,该工具只能统计代码行数。
2)jsmeter工具,该工具能够检测一定程度的度量,但是该工具能够检测的度量项目较少,而且因为该工具本身是用JavaScript开发的Web应用程序,所以需要浏览器的支持,并且无法扩展,使用不便。在使用该工具进行检测时,因为需要上传代码,由服务器端运行检测,并将结果返回给用户,所以其安全性较低。
3)EZ-Metrix工具,该工具能够统计代码行数,但是无法检测特化为面向对象的JavaScript脚本文件,也无法实现多个JavaScript脚本文件的批量指定和批量执行,而且无法扩展。
可见,上述几种现有的检测工具存在有以下这些问题:基本上都只能检测JavaScript脚本文件的代码行数;需要通过网络上传代码在服务器端检测,因而安全性较低;无法检测特化为面向对象的JavaScript脚本文件,例如无法检测继承深度(DIT)和子类个数(NOC);无法实现多个JavaScript脚本文件的批量指定和批量执行;以及无法扩展,性能不良。
发明内容
鉴于现有技术中存在的上述问题,本发明的目的在于提供一种JavaScript脚本文件的检测方法和检测系统。本发明的检测方法和检测系统能够实现多个JavaScript脚本文件的批量指定和批量执行,并且能够自由选择要检测的JavaScript脚本文件的度量项目。
根据本发明的第一方面,提供了一种JavaScript脚本文件的检测方法,该方法包含以下步骤:
获取步骤,用于获取用户输入的与要检测的至少一个JavaScript脚本文件有关的设置信息,所述设置信息包括所述至少一个JavaScript脚本文件的存储位置信息和要检测的至少一个度量项目;
导入步骤,用于根据所述至少一个JavaScript脚本文件的存储位置信息导入所述至少一个JavaScript脚本文件;
语法解析步骤,用于按照JavaScript脚本文件的语法规范将所述至少一个JavaScript脚本文件一一对应地转换成至少一个语法解析树,每个所述语法解析树包含一个文件节点、作为所述文件节点的下一级节点的N个类节点、以及作为所述文件节点和/或所述类节点的下一级节点的M个函数节点,N≥0,M≥1,其中,一个文件节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件的全部内容,一个类节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的一个A类函数语句段,作为所述文件节点的下一级节点的一个函数节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的除A类函数语句段之外的一个函数语句段,以及作为所述类节点的下一级节点的一个函数节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的一个A类函数语句段内的一个函数语句段;
计算步骤,用于计算所述要检测的至少一个度量项目中每个文件节点的每个度量项目的度量值,计算所述要检测的至少一个度量项目中每个类节点的每个度量项目的度量值,以及计算所述要检测的至少一个度量项目中每个函数节点的每个度量项目的度量值;以及
报告步骤,用于生成报告,所述报告列出所述至少一个JavaScript脚本文件的每个节点的每个度量项目的度量值。
其中,所述报告步骤进一步包含:阈值比较步骤,用于将每个节点的每个度量项目的度量值与其对应的阈值进行比较;以及报告生成步骤,用于当一个节点的一个度量项目的度量值超出其所对应的阈值时,以突出显示所述一个节点的所述一个度量项目的所述度量值的方式生成所述报告。
所述设置信息进一步包括指定阈值,以及指示所述指定阈值有效或者无效的使用阈值信息,其中所述指定阈值包含所述要检测的至少一个度量项目中文件节点的每个度量项目的指定阈值、所述要检测的至少一个度量项目中类节点的每个度量项目的指定阈值、以及所述要检测的至少一个度量项目中函数节点的每个度量项目的指定阈值;
当所述使用阈值信息指示所述指定阈值有效时,在所述阈值比较步骤中使用所述指定阈值来进行比较;以及
当所述使用阈值信息指示所述指定阈值无效时,在所述阈值比较步骤中使用默认阈值来进行比较,其中所述默认阈值包含所述要检测的至少一个度量项目中文件节点的每个度量项目的默认阈值、所述要检测的至少一个度量项目中类节点的每个度量项目的默认阈值、以及所述要检测的至少一个度量项目中函数节点的每个度量项目的默认阈值。
根据本发明的第二方面,提供了一种JavaScript脚本文件的检测系统,该检测系统包含:
获取模块,所述获取模块用于获取用户输入的与要检测的至少一个JavaScript脚本文件有关的设置信息,所述设置信息包括所述至少一个JavaScript脚本文件的存储位置信息和要检测的至少一个度量项目;
导入模块,所述导入模块用于根据所述至少一个JavaScript脚本文件的存储位置信息导入所述至少一个JavaScript脚本文件;
语法解析模块,所述语法解析模块用于按照JavaScript脚本文件的语法规范将所述至少一个JavaScript脚本文件一一对应地转换成至少一个语法解析树,每个所述语法解析树包含一个文件节点、作为所述文件节点的下一级节点的N个类节点、以及作为所述文件节点和/或所述类节点的下一级节点的M个函数节点,N≥0,M≥1,其中,一个文件节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件的全部内容,一个类节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的一个A类函数语句段,作为所述文件节点的下一级节点的一个函数节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的除A类函数语句段之外的一个函数语句段,以及作为所述类节点的下一级节点的一个函数节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的一个A类函数语句段内的一个函数语句段;
计算模块,所述计算模块用于计算所述要检测的至少一个度量项目中每个文件节点的每个度量项目的度量值,计算所述要检测的至少一个度量项目中每个类节点的每个度量项目的度量值,以及计算所述要检测的至少一个度量项目中每个函数节点的每个度量项目的度量值;以及
报告模块,所述报告模块用于生成报告,所述报告列出所述至少一个JavaScript脚本文件的每个节点的每个度量项目的度量值。
其中,所述报告模块进一步包含:阈值比较模块,所述阈值比较模块用于将每个节点的每个度量项目的度量值与其对应的阈值进行比较;以及报告生成模块,用于当一个节点的一个度量项目的度量值超出其所对应的阈值时,以突出显示所述一个节点的所述一个度量项目的所述度量值的方式生成所述报告。
所述设置信息进一步包括指定阈值,以及指示所述指定阈值有效或者无效的使用阈值信息,其中所述指定阈值包含所述要检测的至少一个度量项目中文件节点的每个度量项目的指定阈值、所述要检测的至少一个度量项目中类节点的每个度量项目的指定阈值、以及所述要检测的至少一个度量项目中函数节点的每个度量项目的指定阈值;
当所述使用阈值信息指示所述指定阈值有效时,所述阈值比较模块使用所述指定阈值来进行比较;以及
当所述使用阈值信息指示所述指定阈值无效时,所述阈值比较模块使用默认阈值来进行比较,其中所述默认阈值包含所述要检测的至少一个度量项目中文件节点的每个度量项目的默认阈值、所述要检测的至少一个度量项目中类节点的每个度量项目的默认阈值、以及所述要检测的至少一个度量项目中函数节点的每个度量项目的默认阈值。
根据本发明的第一和第二方面,所述度量项目包括代码行数(LOC)、圈复杂度(CYC)、静态路径数(PTH)、函数中最大嵌套数(NBD)、参数个数(PAR)、继承深度(DIT)和子类个数(NOC),其中所述代码行数是以文件节点、类节点和函数节点为单位进行检测的度量项目,所述静态路径数、所述函数中最大嵌套数和所述参数个数是以函数节点为单位进行检测的度量项目,以及所述继承深度和所述子类个数是以类节点为单位进行检测的度量项目。
所述报告以HTML格式输出。
所述A类函数语句段被定义为(function(){//内容})()类型的函数语句段。
通过采用本发明的检测方法和检测系统,能够对特化为面向对象的JavaScript脚本文件进行度量检测,能够实现多个JavaScript脚本文件的批量指定和批量执行,能够自由选择要检测的JavaScript脚本文件的度量项目,能够对要检测的JavaScript脚本文件的各个度量的阈值进行自由修改,并且能够以HTML格式输出报告。
附图说明
图1显示根据本发明的第一实施例的JavaScript脚本文件的检测系统的结构框图;
图2显示根据本发明的第一实施例的JavaScript脚本文件的检测方法的流程图;
图3显示根据本发明的第一实施例的语法解析树的实例的示意图;
图4显示在根据本发明的第一实施例的LOC计算器中使用的LOC算法实例的流程图;
图5显示在根据本发明的第一实施例的CYC计算器中使用的CYC算法实例的流程图;
图6显示在根据本发明的第一实施例的PTH计算器中使用的PTH算法实例的流程图;
图7显示在根据本发明的第一实施例的NBD计算器中使用的NBD算法实例的流程图;
图8显示在根据本发明的第一实施例的PAR计算器中使用的PAR算法实例的流程图;
图9显示在根据本发明的第一实施例的DIT计算器中使用的DIT算法实例的流程图;
图10显示在根据本发明的第一实施例的NOC计算器中使用的NOC算法实例的流程图;
图11显示根据本发明的第二实施例的JavaScript脚本文件的检测系统的结构框图;
图12显示根据本发明的第二实施例的JavaScript脚本文件的检测方法的流程图;以及
图13显示采用根据本发明的第二实施例的检测系统生成的报告的实例的示意图。
具体实施方式
下文将参考附图描述根据本发明的各种实施例。
第一实施例
下面将结合图1至图10详细描述本发明的第一实施例。
图1显示了根据本发明的第一实施例的JavaScript脚本文件的检测系统的结构框图。如图1所示,根据本发明的第一实施例的检测系统100包括获取模块110、导入模块120、语法解析模块130、计算模块140、报告模块150和存储模块160。计算模块140进一步包括LOC计算器141、CYC计算器142、PTH计算器143、NBD计算器144、PAR计算器145、DIT计算器146和NOC计算器147。
图2显示了根据本发明的第一实施例的JavaScript脚本文件的检测方法的流程图。如图1和图2所示,首先,检测系统100的获取模块110执行获取步骤S201。在获取步骤S201中,获取模块110获取用户输入的与要检测的至少一个JavaScript脚本文件有关的设置信息,该设置信息包括要检测的至少一个JavaScript脚本文件的存储位置信息和要检测的至少一个度量项目。一旦获取到户输入的与要检测的至少一个JavaScript脚本文件有关的设置信息后,获取模块110就将获取到的设置信息中的要检测的至少一个JavaScript脚本文件的存储位置信息传送给导入模块120,并且将获取到的设置信息中的要检测的至少一个度量项目存储到存储模块160中。
在本实施例中,用户可以指定要检测的至少一个JavaScript脚本文件中的每一个JavaScript脚本文件的具体的存储位置信息,例如E:\jsmetric\oojs\noc.js,或者用户也可以指定要检测的至少一个JavaScript脚本文件所共有的存储位置信息,例如E:\jsmetric。当用户指定要检测的至少一个JavaScript脚本文件所共有的存储位置信息时,例如当用户指定本地个人计算机上的某一文件夹时,检测系统100将检测该文件夹下所有的JavaScript脚本文件,包括该文件夹下的子文件夹中的所有的JavaScript脚本文件。根据用户输入的要检测的至少一个JavaScript脚本文件的存储位置信息,检测系统100可以在一次运行的过程中检测本地个人计算机以及局域网内的个人计算机上的所有的JavaScript脚本文件。
在本实施例中,用户可指定的度量项目包括代码行数(LOC)、圈复杂度(CYC)、静态路径数(PTH)、函数中最大嵌套数(NBD)、参数个数(PAR)、继承深度(DIT)和子类个数(NOC)。根据需要,用户可以从上述度量项目中指定全部的或者部分的度量项目。在本实施例中,虽然只列举了上述7个度量项目,但是可以指定的度量项目并不局限于上述列举的7个度量项目。根据需要,可以对要检测的度量项目进行扩展。
接着,检测系统100的导入模块120执行导入步骤S202。在导入步骤S202中,导入模块120根据至少一个JavaScript脚本文件的存储位置信息导入至少一个JavaScript脚本文件,并且将导入的至少一个JavaScript脚本文件传送给语法解析模块130。
接着,检测系统100的语法解析模块130执行语法解析步骤S203。在语法解析步骤S203中,语法解析模块130按照JavaScript脚本文件的语法规范将导入的至少一个JavaScript脚本文件一一对应地转换成至少一个语法解析树,每个语法解析树包含一个文件节点、作为文件节点的下一级节点的N个类节点、以及作为文件节点和/或类节点的下一级节点的M个函数节点,N≥0,M≥1。
在本实施例中,一个文件节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件的全部内容,一个类节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的一个A类函数语句段,作为文件节点的下一级节点的一个函数节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的除A类函数语句段之外的一个函数语句段,以及作为类节点的下一级节点的一个函数节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的一个A类函数语句段内的一个函数语句段。
在本实施例中,将JavaScript脚本文件中(function(){//内容})()类型的函数语句段定义为A类函数语句段。另外,根据需要,也可以将其他类型的函数语句段定义为A类函数语句段。
图3显示了根据本发明的第一实施例的一个语法解析树300的实例的示意图。如图3所示,一个JavaScript脚本文件通过语法解析模块130被对应地转换成一个语法解析树300,该语法解析树300包括一个文件节点311、两个类节点321-322、以及三个函数节点331-333,其中类节点321-322和函数节点331是文件节点311的下一级节点,函数节点332是类节点321的下一级节点,以及函数节点333是类节点322的下一级节点。图3中显示的类节点和函数节点的个数仅仅是示意性的,并非是将本发明的类节点和函数节点的个数局限于图3中显示的个数。而且,根据不同的JavaScript脚本文件,经语法解析模块130转换得到的语法解析树300中的类节点和函数节点的个数也是不同的。
另外,在本实施例中,每个文件节点、每个类节点和每个函数节点各自具有相应的名称。例如,文件节点311使用与该文件节点311相对应的JavaScript脚本文件的源文件名作为其名称,诸如“E:\jsmetric\oojs\noc.js”;类节点321-322分别使用其各自对应的A类函数语句段的名称作为其名称,以(function(){//内容})()类型的函数语句段作为A类函数语句段为例,类节点321-322分别使用其各自对应的(function(){//内容})()类型的函数语句段中置于最后执行的位置处的内容,即其各自对应的(function(){//内容})()类型的函数语句段中紧接在最后一个“}”之前的内容作为其名称;以及函数节点331-333分别使用其各自对应的函数语句段的函数名作为其名称。
在语法解析模块130按照JavaScript脚本文件的语法规范将至少一个JavaScript脚本文件一一对应地转换成至少一个语法解析树之后,语法解析模块130将转换得到的至少一个语法解析树存储到存储模块160中,或者可以同时将转换得到的至少一个语法解析树传送给计算模块140。
接着,检测系统100的计算模块140执行计算步骤S204。在计算步骤S204中,计算模块140取得存储在存储模块160中的所有的语法解析树或者由语法解析模块130传送的所有的语法解析树,根据存储在存储模块160中的要检测的至少一个度量项目,计算要检测的至少一个度量项目中每个文件节点的每个度量项目的度量值,计算要检测的至少一个度量项目中每个类节点的每个度量项目的度量值,以及计算要检测的至少一个度量项目中每个函数节点的每个度量项目的度量值。随后,计算模块140将计算结果传送给报告模块150。
如上所述,在本实施例中,可检测的度量项目包括代码行数(LOC)、圈复杂度(CYC)、静态路径数(PTH)、函数中最大嵌套数(NBD)、参数个数(PAR)、继承深度(DIT)和子类个数(NOC)。在上述7个度量项目中,度量项目LOC是以文件节点、类节点和函数节点为单位进行检测的度量项目,度量项目PTH、NBD和PAR是以函数节点为单位进行检测的度量项目,以及度量项目DIT和NOC是以类节点为单位进行检测的度量项目。由于本发明的检测系统100能够对继承深度(DIT)和子类个数(NOC)进行检测,因此能够检测特化为面向对象的JavaScript脚本文件。
随后将在下文中详细描述度量项目LOC、CYC、PTH、NBD、PAR、DIT和NOC分别在计算模块140中的LOC计算器141、CYC计算器142、PTH计算器143、NBD计算器144、PAR计算器145、DIT计算器146和NOC计算器147中的计算方法。
接着,检测系统100的报告模块150执行报告步骤S205。在报告步骤S204中,报告模块150根据计算模块140的计算结果生成报告,该报告列出检测的所有的JavaScript脚本文件的每个节点的每个度量项目的度量值。
下面将结合图4-10详细描述度量项目LOC、CYC、PTH、NBD、PAR、DIT和NOC各自在计算模块140中的LOC计算器141、CYC计算器142、PTH计算器143、NBD计算器144、PAR计算器145、DIT计算器146和NOC计算器147中的计算方法。
(1)LOC(Line of Code):代码行数
在本实施例中,代码行数(LOC)指的是从所提供的JavaScript代码段的开始到结束的可维护(有效)的代码行数,不包含注释行和空行。LOC的计算是通过计算模块140中的LOC计算器141来实现的。LOC的计算对象为文件节点、类节点和函数节点。
LOC计算器141使用相应的LOC算法来计算至少一个语法解析树中的每个文件节点、每个类节点和每个函数节点的LOC的度量值。换句话说,对于每个文件节点,LOC计算器141对从与该文件节点相对应的JavaScript代码段的开始到结束的可维护的代码行数进行计数,并将最终获得的计数值作为该文件节点的LOC的度量值;对于每个类节点,LOC计算器141对从与该类节点相对应的JavaScript代码段的开始到结束的可维护的代码行数进行计数,并将最终获得的计数值作为该类节点的LOC的度量值;对于每个函数节点,LOC计算器141对从与该函数节点相对应的JavaScript代码段的开始到结束的可维护的代码行数进行计数,并将最终获得的计数值作为该函数节点的LOC的度量值。
图4显示了在根据本发明的第一实施例的LOC计算器141中使用的LOC算法实例的流程图。如图4所示,本实施例的LOC算法400的流程为:取得经语法解析模块130转换得到至少一个语法解析树,遍历该至少一个语法解析树并取出所有的节点,根据每个节点所对应的JavaScript代码段的NodeToken位置的行号,对这些行号所占据的有效行数进行计数,从而获得每个节点的LOC的计数值(度量值)。
图4仅仅给出了LOC算法的一个实例,并且本发明并不局限于图4所给出的LOC算法400。除了图4给出的LOC算法400之外,还可以采用其他的LOC算法,只要能够得到从分别与每个文件节点、每个类节点和每个函数节点相对应的JavaScript代码段的开始到结束的可维护(有效)的代码行数的计数值即可。
(2)CYC(Cyclomatic Complexity):圈复杂度
在本实施例中,圈复杂度(CYC)指的是所提供的JavaScript代码段中的ControlFlow(控制流)节点的个数。CYC的计算是通过计算模块140中的CYC计算器142来实现的。CYC的计算对象仅为函数节点。
CYC计算器142使用相应的CYC算法来计算至少一个语法解析树中的每个函数节点的CYC的度量值。换句话说,对于每个函数节点,CYC计算器142对与该函数节点相对应的JavaScript代码段中的ControlFlow节点的个数进行计数,并将最终获得的计数值作为该函数节点的CYC的度量值。
在本实施例中,语法解析模块130分别将“If语句”、“Else语句”、“Catch”、“Case从句”、“默认Case”、“条件表达式”、“Iteration语句”、“逻辑AND表达式”、“逻辑OR表达式”识别为一个有效的ControlFlow节点。
图5显示了在根据本发明的第一实施例的CYC计算器中使用的CYC算法实例的流程图。如图5所示,本实施例的CYC算法500的流程为:取得经语法解析模块130转换得到至少一个语法解析树,遍历该至少一个语法解析树并取出所有的函数节点,对每个函数节点所对应的JavaScript代码段中的ControlFlow节点的个数进行计数,从而获得每个函数节点的CYC的计数值(度量值)。
图5仅仅给出了CYC算法的一个实例,并且本发明并不局限于图5所给出的CYC算法500。除了图5给出的CYC算法500之外,还可以采用其他的CYC算法,只要能够得到与每个函数节点相对应的JavaScript代码段中的ControlFlow节点的个数的计数值即可。
(3)PTH(Paths):静态路径数
在本实施例中,静态路径数(PTH)指的是所提供的JavaScript代码段中的ControlFlow节点中可能会执行到的路径数的上限。PTH的计算是通过计算模块140中的PTH计算器143来实现的。PTH的计算对象仅为函数节点。
PTH计算器143使用相应的PTH算法来计算至少一个语法解析树中的每个函数节点的PTH的度量值。换句话说,对于每个函数节点,PTH计算器143计算与该函数节点相对应的JavaScript代码段中的ControlFlow节点中可能会执行到的路径数的上限值,并将该上限值作为该函数节点的PTH的度量值。
图6显示了在根据本发明的第一实施例的PTH计算器中使用的PTH算法实例的流程图。如图6所示,本实施例的PTH算法600的流程为:取得经语法解析模块130转换得到至少一个语法解析树,遍历该至少一个语法解析树并取出所有的函数节点;对于每个函数节点,当在与该函数节点相应的JavaScript代码段中遇到ControlFlow节点时,首先,将pth变量+1;其次,重新返回并求出该ControlFlow节点的pth变量的值;最后,将外侧的pth变量相乘并+1,得到最后的pth变量值作为上限值,从而获得每个函数节点的PTH的度量值。
图6仅仅给出了PTH算法的一个实例,并且本发明并不局限于图6所给出的PTH算法600。除了图6给出的PTH算法600之外,还可以采用其他的PTH算法,只要能够得到与每个函数节点相对应的JavaScript代码段中的ControlFlow节点中可能会执行到的路径数的上限值即可。
(4)NBD(Nested Block Depth):函数中最大嵌套数
在本实施例中,函数中最大嵌套数(NBD)指的是所提供的JavaScript代码段中的函数中的最大嵌套数。NBD的计算是通过计算模块140中的NBD计算器144来实现的。NBD的计算对象仅为函数节点。
NBD计算器144使用相应的NBD算法来计算至少一个语法解析树中的每个函数节点的NBD的度量值。换句话说,对于每个函数节点,NBD计算器144计算与该函数节点相对应的JavaScript代码段中的函数中的最大嵌套数的数值,并将计算出的最大嵌套数的数值作为该函数节点的NBD的度量值。
图7显示了在根据本发明的第一实施例的NBD计算器中使用的NBD算法实例的流程图。如图7所示,本实施例的NBD算法700的流程为:取得经语法解析模块130转换得到至少一个语法解析树,遍历该至少一个语法解析树并取出所有的函数节点;对于每个函数节点,当在与该函数节点相应的JavaScript代码段中遇到ControlFlow节点时,首先,进行nbd变量+1;其次,重新返回并求出该ControlFlow节点的nbd变量的值;最后,得到外侧的nbd变量的最大值作为最大嵌套数的数值,从而获得每个函数节点的NBD的度量值。
图7仅仅给出了NBD算法的一个实例,并且本发明并不局限于图7所给出的NBD算法700。除了图7给出的NBD算法700之外,还可以采用其他的NBD算法,只要能够得到与每个函数节点相对应的JavaScript代码段中的函数中的最大嵌套数的数值即可。
(5)PAR(Number of Parameters):参数个数
在本实施例中,参数个数(PAR)指的是所提供的JavaScript代码中的函数的参数个数。PAR的计算是通过计算模块140中的PAR计算器145来实现的。PAR的计算对象仅为函数节点。
PAR计算器145使用相应的PAR算法来计算至少一个语法解析树中的每个函数节点的PAR的度量值。换句话说,对于每个函数节点,PAR计算器145对与该函数节点相对应的JavaScript代码段中的函数的参数个数进行计数,并将最终获得的计数值作为该函数节点的PAR的度量值。
图8显示了在根据本发明的第一实施例的PAR计算器中使用的PAR算法实例的流程图。如图8所示,本实施例的PAR算法800的流程为:取得经语法解析模块130转换得到至少一个语法解析树,遍历该至少一个语法解析树并取出所有的函数节点;对于每个函数节点,首先,取得与该函数节点相对应的JavaScript代码段中函数表达式节点或者函数说明节点;其次,取得其形式参数列表,对该形式参数列表中的参数的个数进行计数,从而获得每个函数节点的PAR的计数值(度量值)。
图8仅仅给出了PAR算法的一个实例,并且本发明并不局限于图8所给出的PAR算法800。除了图8给出的PAR算法800之外,还可以采用其他的PAR算法,只要能够得到与每个函数节点相对应的JavaScript代码段中的参数个数的计数值即可。
(6)DIT(Depth of inheritance tree):继承深度
在本实施例中,继承深度(DIT)指的是继承阶层的深度。DIT的计算是通过计算模块140中的DIT计算器146来实现的。DIT的计算对象仅为类节点。
DIT计算器146使用相应的DIT算法来计算至少一个语法解析树中的每个类节点的DIT的度量值。
类节点的DIT的度量值可以从作为继承层次数的最上面的根类来计算。因此,如果作为检测对象的类节点是从根类直接继承的话,则其DIT的度量值将被计数1。例如,JavaScript脚本文件中有15个内部类,其中顶层类是最上位的基础类,因此顶层类的DIT的度量值为0,直接继承Object类的类的DIT的度量值为1,并且直接继承顶层类的类的直系子类的DIT的度量值为2。在测定对象的类为继承JavaScript脚本文件的内部类的情况下,内部类的所有的继承层次将会被计算。
在本实施例中,DIT计算器146利用“A.inherit(B)”作为继承的关键词来计算类节点的DIT,其中A代表子类,B代表父类。
在本实施例中,当检测系统100检测一个JavaScript脚本文件时,DIT计算器146将通过确定与该一个JavaScript脚本文件对应的一个语法解析树中的所有类节点之间的继承关系来计算每个类节点的DIT的度量值。当检测系统100检测多个JavaScript脚本文件时,DIT计算器146将通过确定与该多个JavaScript脚本文件一一对应的多个语法解析树中的所有类节点之间的继承关系来计算每个类节点的DIT的度量值。
图9显示了在根据本发明的第一实施例的DIT计算器中使用的DIT算法实例的流程图。如图9所示,本实施例的DIT算法900的流程为:取得至少一个语法解析树上的一个类节点的当前类名并将其作为类名,如果类名==“顶层类”的话,则dit+0;反之,则dit+=1。
图9仅仅给出了DIT算法的一个实例,并且本发明并不局限于图9所给出的DIT算法900。除了图9给出的DIT算法900之外,还可以采用其他的DIT算法,只要能够得到每个类节点的DIT的度量值即可。
(7)NOC(Number of Children):子类个数
在本实施例中,子类个数(NOC)指的是将该类作为直接的父类进行继承的子类的个数。NOC的计算是通过计算模块140中的NOC计算器147来实现的。NOC的计算对象仅为类节点。
NOC计算器146使用相应的NOC算法来计算至少一个语法解析树中的每个类节点的NOC的度量值。
在本实施例中,NOC计算器147利用“A.inherit(B)”作为继承的关键词来计算类节点的NOC,其中A代表子类,B代表父类。
在本实施例中,当检测系统100检测一个JavaScript脚本文件时,NOC计算器147将通过确定与该一个JavaScript脚本文件对应的一个语法解析树中的所有类节点之间的继承关系来计算每个类节点的NOC的度量值。当检测系统100检测多个JavaScript脚本文件时,NOC计算器147将通过确定与该多个JavaScript脚本文件一一对应的多个语法解析树中的所有类节点之间的继承关系来计算每个类节点的NOC的度量值。
图10显示了在根据本发明的第一实施例的NOC计算器中使用的NOC算法实例的流程图。如图10所示,本实施例的NOC算法1000的流程为:识别一个类节点的类名后,遍历所有语法解析树中的所有的类节点,取得各个类节点的父类名,如果父类名与该类节点的类名相同的话,则noc+1。
图10仅仅给出了NOC算法的一个实例,并且本发明并不局限于图10所给出的NOC算法1000。除了图10给出的NOC算法1000之外,还可以采用其他的NOC算法,只要能够得到每个类节点的NOC的度量值即可。
在本实施例中,虽然只列举了上述7个度量项目,但是可以指定的度量项目并不局限于上述列举的7个度量项目。根据需要,可以对度量项目进行扩展。在本实施例中,因为语法解析模块130和计算模块140之间的耦合度低,因此当想要对度量项目进行扩展时,只需在计算模块140中增加具有相应度量算法的计算器即可。
第二实施例
下面将结合图11和图12详细描述本发明的第二实施例。
图11显示了根据本发明的第二实施例的JavaScript脚本文件的检测系统的结构框图。图12显示了根据本发明的第二实施例的JavaScript脚本文件的检测方法的流程图。
如图11所示,根据本发明的第二实施例的检测系统1100包括获取模块1110、导入模块1120、语法解析模块1130、计算模块1140、报告模块1150和存储模块1160。第二实施例中的导入模块1120、语法解析模块1130、计算模块1140、和存储模块1160与第一实施例中的导入模块120、语法解析模块130、计算模块140、和存储模块160相同。本发明的第二实施例的检测系统1100与第一实施例的检测系统100区别在于:获取模块1110获取到的设置信息还进一步包括指定阈值和指示该指定阈值有效或者无效的使用阈值信息;以及报告模块1150进一步包括阈值比较模块1151、平均值计算模块1152、总和计算模块1153和报告生成模块1154。
下面将结合图12中所示的根据本发明的第二实施例的JavaScript脚本文件的检测方法的流程图详细说明第二实施例与第一实施例的区别之处。由于第二实施例的检测方法中的步骤S1202至S1204与第一实施例的检测方法中的步骤S202至S204相同,因此在此省略了其相关的说明。
如图11和12所示,在获取步骤S1201中,检测系统1100的获取模块1110获取用户输入的与要检测的至少一个JavaScript脚本文件有关的设置信息,该设置信息除了包括要检测的至少一个JavaScript脚本文件的存储位置信息和要检测的至少一个度量项目以外,还包括指定阈值和指示指定阈值有效或者无效的使用阈值信息。一旦获取到户输入的与要检测的至少一个JavaScript脚本文件有关的设置信息后,获取模块1110就将获取到的设置信息中的要检测的至少一个JavaScript脚本文件的存储位置信息传送给导入模块120,并且将获取到的设置信息中的要检测的至少一个度量项目、指定阈值、以及指示指定阈值有效或者无效的使用阈值信息存储到存储模块1160中。
指定阈值包含要检测的至少一个度量项目中文件节点的每个度量项目的指定阈值、要检测的至少一个度量项目中类节点的每个度量项目的指定阈值、以及要检测的至少一个度量项目中函数节点的每个度量项目的指定阈值。
在阈值比较步骤S1205中,检测系统1100的报告模块1150中的阈值比较模块1151读取存储在存储模块1160中的指定阈值以及指示指定阈值有效或者无效的使用阈值信息。当使用阈值信息指示指定阈值有效时,阈值比较模块1151使用指定阈值来与计算模块1140计算出的结果进行比较。当使用阈值信息指示指定阈值无效时,阈值比较模块1151使用预先存储在存储模块1160中的默认阈值来与计算模块1140计算出的结果进行比较。然后,阈值比较模块1151将最终的比较结果传送给报告生成模块1154。
默认阈值包含要检测的至少一个度量项目中文件节点的每个度量项目的默认阈值、要检测的至少一个度量项目中类节点的每个度量项目的默认阈值、以及要检测的至少一个度量项目中函数节点的每个度量项目的默认阈值。
指定阈值和指示指定阈值有效或者无效的使用阈值信息不是用户必须设定的信息。用户可以根据需要设定相应的指定阈值和使用阈值信息。如果用户设定了相应的指定阈值并且将使用阈值信息设定为指示该指定阈值有效,则阈值比较模块1151将使用用户设定的指定阈值。如果用户没有设定相应的指定阈值,则阈值比较模块1151将默认地使用预先存储在存储模块1160中的默认阈值。
在平均值计算步骤S1206中,检测系统1100的报告模块1150中的平均值计算模块1152按照度量项目对计算模块1140输出的计算结果进行平均值计算,并且将计算出的平均值的结果传送给报告生成模块1154。
在总和计算步骤S1207中,检测系统1100的报告模块1150中的总和计算模块1153按照度量项目对计算模块1140输出的计算结果进行求和计算,并且将计算出的求和的结果传送给报告生成模块1154。
在报告生成步骤S1208中,检测系统1100的报告模块1150中的报告生成模块1154基于计算模块1140的计算结果、阈值比较模块1151的比较结果、平均值计算模块1152的平均值计算结果、总和计算模块1153的求和计算结果生成报告,在该报告中,列出检测的所有的JavaScript脚本文件的每个节点的每个度量项目的度量值并且突出显示超出其对应的指定阈值或者默认阈值的度量值,同时还列出各个度量项目的度量值的平均值和总和值。然后,报告生成模块1154以HTML格式输出生成的报告。
图13显示了采用根据本发明的第二实施例的检测系统生成的报告的实例的示意图。在图13所示的实例中,报告1300是基于以下假设所生成的:
(1)用户输入的要检测的两个JavaScript脚本文件的存储位置信息是:本地个人计算机上的E:\jsmetric\oojs\noc.js和E:\jsmetric\oojs\loc.js;
(2)用户输入的要检测度量项目是:LOC、CYC、PTH、NBD、PAR、DIT和NOC;
(3)用户输入的指定阈值如下表所示:
度量项目 | 检测单位 | 指定阈值 |
LOC | 函数节点 | 50以下 |
LOC | 类节点 | 600以下 |
LOC | 文件节点 | 2000以下 |
CYC | 函数节点 | 10以下 |
PTH | 函数节点 | 200以下 |
NBD | 函数节点 | 5以下 |
PAR | 函数节点 | 6以下 |
DIT | 类节点 | 3以下 |
NOC | 类节点 | 7以下 |
(4)用户输入的使用阈值信息指示指定阈值有效。
如图13所示,在报告1300中,JavaScript脚本文件(E:\jsmetric\oojs\noc.js)具有以源文件名“E:\jsmetric\oojs\noc.js”命名的一个文件节点,分别以“Cat”和“Dog”命名的两个类节点,分别以“Cat”和“Getname”命名的作为类节点“Cat”的下一级节点的两个函数节点,分别以“Dog”和“Getname”命名的作为类节点“Dog”的下一级节点的两个函数节点,以及以“Animal”命名的作为文件节点的下一级节点的一个函数节点。JavaScript脚本文件(E:\jsmetric\oojs\loc.js)具有以源文件名“E:\jsmetric\oojs\loc.js”命名的一个文件节点,以及分别以“Parent”、“Child”、“iswanted”和“isAdult”命名的作为文件节点的下一级节点的四个函数节点,没有类节点。
如图13所示,在报告1300中,突出显示了超出阈值的度量项目的度量值。另外,通过报告1300上的“显示超出阈值”按钮,可以使得报告1300只显示超出阈值的度量项目的度量值。
在报告1300中,还给出了每个函数节点的起始行的行号,以便于用户能够在相应的JavaScript脚本文件找出对应的函数节点。
另外,在报告1300的“概述”部分中,还显示了“LOC(总和)”、“类LOC(平均)”、“函数LOC(平均)”、“CYC(平均)”、“NBD(平均)”、“PTH(平均)”、“PAR(平均)”、“DIT(平均)”和“NOC(平均)”。其中,“LOC(总和)”指的是所有文件节点的LOC度量值的总和;“类LOC(平均)”指的是所有类节点的LOC度量值的平均值;“函数LOC(平均)”指的是所有函数节点的LOC度量值的平均值;“CYC(平均)”指的是所有函数节点的CYC度量值的平均值;“NBD(平均)”指的是所有函数节点的NBD度量值的平均值;“PTH(平均)”指的是所有函数节点的PTH度量值的平均值;“PAR(平均)”指的是所有函数节点的PAR度量值的平均值;“DIT(平均)”指的是所有类节点的DIT度量值的平均值;“NOC(平均)”指的是所有类节点的NOC度量值的平均值。
用户可以参照报告1300中显示的内容,来对相应的JavaScript脚本文件进行适当的修改,尤其是对JavaScript脚本文件中超出阈值的类节点和函数节点的内容进行适当的修改,以便进一步完善JavaScript脚本文件。
虽然经过对本发明结合具体实施例进行描述,对于本领域的技术技术人员而言,根据上文的叙述后作出的许多替代、修改与变化将是显而易见。因此,当这样的替代、修改和变化落入附后的权利要求的精神和范围之内时,应该被包括在本发明中。
Claims (12)
1.一种JavaScript脚本文件的检测方法,其特征在于,包含以下步骤:
获取步骤,用于获取用户输入的与要检测的至少一个JavaScript脚本文件有关的设置信息,所述设置信息包括所述至少一个JavaScript脚本文件的存储位置信息和要检测的至少一个度量项目;
导入步骤,用于根据所述至少一个JavaScript脚本文件的存储位置信息导入所述至少一个JavaScript脚本文件;
语法解析步骤,用于按照JavaScript脚本文件的语法规范将所述至少一个JavaScript脚本文件一一对应地转换成至少一个语法解析树,每个所述语法解析树包含一个文件节点、作为所述文件节点的下一级节点的N个类节点、以及作为所述文件节点和/或所述类节点的下一级节点的M个函数节点,N≥0,M≥1,其中,一个文件节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件的全部内容,一个类节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的一个A类函数语句段,作为所述文件节点的下一级节点的一个函数节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的除A类函数语句段之外的一个函数语句段,以及作为所述类节点的下一级节点的一个函数节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的一个A类函数语句段内的一个函数语句段;
计算步骤,用于计算所述要检测的至少一个度量项目中每个文件节点的每个度量项目的度量值,计算所述要检测的至少一个度量项目中每个类节点的每个度量项目的度量值,以及计算所述要检测的至少一个度量项目中每个函数节点的每个度量项目的度量值;以及
报告步骤,用于生成报告,所述报告列出所述至少一个JavaScript脚本文件的每个节点的每个度量项目的度量值。
2.如权利要求1所述的检测方法,其特征在于,所述报告步骤进一步包含:
阈值比较步骤,用于将每个节点的每个度量项目的度量值与其对应的阈值进行比较;以及
报告生成步骤,用于当一个节点的一个度量项目的度量值超出其所对应的阈值时,以突出显示所述一个节点的所述一个度量项目的所述度量值的方式生成所述报告。
3.如权利要求2所述的检测方法,其特征在于,所述设置信息进一步包括指定阈值,以及指示所述指定阈值有效或者无效的使用阈值信息,其中所述指定阈值包含所述要检测的至少一个度量项目中文件节点的每个度量项目的指定阈值、所述要检测的至少一个度量项目中类节点的每个度量项目的指定阈值、以及所述要检测的至少一个度量项目中函数节点的每个度量项目的指定阈值;
当所述使用阈值信息指示所述指定阈值有效时,在所述阈值比较步骤中使用所述指定阈值来进行比较;以及
当所述使用阈值信息指示所述指定阈值无效时,在所述阈值比较步骤中使用默认阈值来进行比较,其中所述默认阈值包含所述要检测的至少一个度量项目中文件节点的每个度量项目的默认阈值、所述要检测的至少一个度量项目中类节点的每个度量项目的默认阈值、以及所述要检测的至少一个度量项目中函数节点的每个度量项目的默认阈值。
4.如权利要求5所述的检测方法,其特征在于,所述度量项目包括代码行数、圈复杂度、静态路径数、函数中最大嵌套数、参数个数、继承深度和子类个数,其中所述代码行数是以文件节点、类节点和函数节点为单位进行检测的度量项目,所述静态路径数、所述函数中最大嵌套数和所述参数个数是以函数节点为单位进行检测的度量项目,以及所述继承深度和所述子类个数是以类节点为单位进行检测的度量项目。
5.如权利要求1-4任一项所述的检测方法,其特征在于,所述报告以HTML格式输出。
6.如权利要求1-4任一项所述的检测方法,其特征在于,所述A类函数语句段被定义为(function(){//内容})()类型的函数语句段。
7.一种JavaScript脚本文件的检测系统,其特征在于,包含:
获取模块,所述获取模块用于获取用户输入的与要检测的至少一个JavaScript脚本文件有关的设置信息,所述设置信息包括所述至少一个JavaScript脚本文件的存储位置信息和要检测的至少一个度量项目;
导入模块,所述导入模块用于根据所述至少一个JavaScript脚本文件的存储位置信息导入所述至少一个JavaScript脚本文件;
语法解析模块,所述语法解析模块用于按照JavaScript脚本文件的语法规范将所述至少一个JavaScript脚本文件一一对应地转换成至少一个语法解析树,每个所述语法解析树包含一个文件节点、作为所述文件节点的下一级节点的N个类节点、以及作为所述文件节点和/或所述类节点的下一级节点的M个函数节点,N≥0,M≥1,其中,一个文件节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件的全部内容,一个类节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的一个A类函数语句段,作为所述文件节点的下一级节点的一个函数节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的除A类函数语句段之外的一个函数语句段,以及作为所述类节点的下一级节点的一个函数节点被定义成与其所在的语法解析树相对应的一个JavaScript脚本文件中的一个A类函数语句段内的一个函数语句段;
计算模块,所述计算模块用于计算所述要检测的至少一个度量项目中每个文件节点的每个度量项目的度量值,计算所述要检测的至少一个度量项目中每个类节点的每个度量项目的度量值,以及计算所述要检测的至少一个度量项目中每个函数节点的每个度量项目的度量值;以及
报告模块,所述报告模块用于生成报告,所述报告列出所述至少一个JavaScript脚本文件的每个节点的每个度量项目的度量值。
8.如权利要求7所述的检测系统,其特征在于,所述报告模块进一步包含:
阈值比较模块,所述阈值比较模块用于将每个节点的每个度量项目的度量值与其对应的阈值进行比较;以及
报告生成模块,用于当一个节点的一个度量项目的度量值超出其所对应的阈值时,以突出显示所述一个节点的所述一个度量项目的所述度量值的方式生成所述报告。
9.如权利要求8所述的检测系统,其特征在于,所述设置信息进一步包括指定阈值,以及指示所述指定阈值有效或者无效的使用阈值信息,其中所述指定阈值包含所述要检测的至少一个度量项目中文件节点的每个度量项目的指定阈值、所述要检测的至少一个度量项目中类节点的每个度量项目的指定阈值、以及所述要检测的至少一个度量项目中函数节点的每个度量项目的指定阈值;
当所述使用阈值信息指示所述指定阈值有效时,所述阈值比较模块使用所述指定阈值来进行比较;以及
当所述使用阈值信息指示所述指定阈值无效时,所述阈值比较模块使用默认阈值来进行比较,其中所述默认阈值包含所述要检测的至少一个度量项目中文件节点的每个度量项目的默认阈值、所述要检测的至少一个度量项目中类节点的每个度量项目的默认阈值、以及所述要检测的至少一个度量项目中函数节点的每个度量项目的默认阈值。
10.如权利要求9所述的检测系统,其特征在于,所述度量项目包括代码行数、圈复杂度、静态路径数、函数中最大嵌套数、参数个数、继承深度和子类个数,其中所述代码行数是以文件节点、类节点和函数节点为单位进行检测的度量项目,所述静态路径数、所述函数中最大嵌套数和所述参数个数是以函数节点为单位进行检测的度量项目,以及所述继承深度和所述子类个数是以类节点为单位进行检测的度量项目。
11.如权利要求7-10任一项所述的检测系统,其特征在于,所述报告以HTML格式输出。
12.如权利要求7-10任一项所述的检测系统,其特征在于,所述A类函数语句段被定义为(function(){//内容})()类型的函数语句段。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410060049.6A CN104866412A (zh) | 2014-02-21 | 2014-02-21 | JavaScript脚本文件的检测方法和检测系统 |
JP2015030646A JP2015158909A (ja) | 2014-02-21 | 2015-02-19 | JavaScriptスクリプトファイルの測定方法及び測定システム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410060049.6A CN104866412A (zh) | 2014-02-21 | 2014-02-21 | JavaScript脚本文件的检测方法和检测系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104866412A true CN104866412A (zh) | 2015-08-26 |
Family
ID=53912258
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410060049.6A Pending CN104866412A (zh) | 2014-02-21 | 2014-02-21 | JavaScript脚本文件的检测方法和检测系统 |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP2015158909A (zh) |
CN (1) | CN104866412A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579203A (zh) * | 2022-03-07 | 2022-06-03 | 网易(杭州)网络有限公司 | 脚本文件检查方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101261604A (zh) * | 2008-04-09 | 2008-09-10 | 中兴通讯股份有限公司 | 一种软件质量评价装置及软件质量评价的定量分析方法 |
CN102129406A (zh) * | 2011-03-03 | 2011-07-20 | 南京航空航天大学 | 一种基于条件值的软件静态预测方法及工具 |
US8185619B1 (en) * | 2006-06-28 | 2012-05-22 | Compuware Corporation | Analytics system and method |
-
2014
- 2014-02-21 CN CN201410060049.6A patent/CN104866412A/zh active Pending
-
2015
- 2015-02-19 JP JP2015030646A patent/JP2015158909A/ja active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8185619B1 (en) * | 2006-06-28 | 2012-05-22 | Compuware Corporation | Analytics system and method |
CN101261604A (zh) * | 2008-04-09 | 2008-09-10 | 中兴通讯股份有限公司 | 一种软件质量评价装置及软件质量评价的定量分析方法 |
CN102129406A (zh) * | 2011-03-03 | 2011-07-20 | 南京航空航天大学 | 一种基于条件值的软件静态预测方法及工具 |
Non-Patent Citations (1)
Title |
---|
牛家浩等: ""基于抽象语法树的软件度量工具的设计与实现"", 《计算机应用》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579203A (zh) * | 2022-03-07 | 2022-06-03 | 网易(杭州)网络有限公司 | 脚本文件检查方法、装置、电子设备及存储介质 |
CN114579203B (zh) * | 2022-03-07 | 2024-03-15 | 网易(杭州)网络有限公司 | 脚本文件检查方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
JP2015158909A (ja) | 2015-09-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10095602B2 (en) | Automated code analyzer | |
US7926026B2 (en) | Graphical analysis to detect process object anomalies | |
JP4891817B2 (ja) | 設計ルール管理方法、設計ルール管理プログラム、ルール構築装置およびルールチェック装置 | |
Sicilia et al. | Empirical findings on ontology metrics | |
Baqa et al. | Quality of Information as an indicator of Trust in the Internet of Things | |
JP2010501096A (ja) | ラッパー生成およびテンプレート検出の協同最適化 | |
Model comparison with genericdiff | ||
CN107015839B (zh) | 一种实现前端事件代理的方法及装置 | |
US20140025700A1 (en) | Systems and/or methods for introducing semantic concepts into complex event processing environments | |
Hegedűs et al. | A drill-down approach for measuring maintainability at source code element level | |
Liu et al. | Afchecker: Effective model checking for context-aware adaptive applications | |
US20160162539A1 (en) | Computer executable method of generating analysis data and apparatus performing the same and storage medium for the same | |
Velioğlu et al. | An automated code smell and anti-pattern detection approach | |
KR101544253B1 (ko) | 어플리케이션 프로그래밍 인터페이스 호출 빈도 분석을 통한 소프트웨어 표절 탐지 방법 | |
US20190354991A1 (en) | System and method for managing service requests | |
Munnelly et al. | An aspect-oriented approach to the modularisation of context | |
CN103793220A (zh) | 使用元模型对软件许可进行建模的方法和装置 | |
Widhalm et al. | An open-source wireless sensor node platform with active node-level reliability for monitoring applications | |
CN110188432B (zh) | 系统架构的验证方法、电子设备及计算机可读存储介质 | |
Sassi et al. | Knowledge management process for air quality systems based on data warehouse specification | |
CN104866412A (zh) | JavaScript脚本文件的检测方法和检测系统 | |
Schreiber et al. | Towards autonomic pervasive systems: the PerLa context language | |
CN114201602B (zh) | 为可视化数据分析生成自然语言语句的方法及装置 | |
US10733081B2 (en) | Automatically establishing significance of static analysis results | |
Kritikos et al. | Towards semantic KPI measurement |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20150826 |