没有合适的资源?快使用搜索试试~ 我知道了~
软件X 12(2020)100635原始软件出版物rust-code-analysis:一个Rust库,用于从源代码中分析和提取可维护性信息Luca Arditoa, Luca Barbatob,Marco Castelluccioc,Riccardo Coppolaa,Calixte Denizetc,Sylvestre Ledruc,Michele Valsesiaaa控制与计算机工程系, 意大利都灵理工大学bLuminem,意大利c美利坚合众国Mozilla公司ar t i cl e i nf o文章历史记录:接收18九月2020收到修订版2020年11月19日接受2020年11月19日关键词:算法软件度量软件质量代码元数据a b st ra ct文献提出了许多软件度量来评估源代码的非功能特性,如其复杂性和可维护性。文献还提出了几种工具来计算这些属性的源代码开发与许多不同的软件语言。然而,Rust语言的出现并没有与社区在开发能够为Rust源代码计算度量的解析器和工具方面的努力相匹配此外,度量工具往往不能提供比较不同算法或编码语言之间的可维护性度量的直接方法。因此,我们引入了rust-code-analysis,这是一个Rust库,允许为包括Rust在内的10种不同语言提取11个可维护性度量。rust-code-analysis通过源文件的抽象树(AST),允许检查代码结构,分析不同粒度级别的源代码度量,并在编译时间之前找到代码语法错误。该工具还提供了一个命令行界面,允许以不同的格式导出结果。 分析用不同编程语言编写的源代码的可能性使不同经验和大规模分析源产生的指标之间的简单和系统的比较成为可能。©2020作者由爱思唯尔公司出版这是CC BY-NC-ND下的开放获取文章许可证(http://creativecommons.org/licenses/by-nc-nd/4.0/)。当前代码版本v01用于此代码版本的代码/存储库的永久链接https://github.com/ElsevierSoftwareX/SOFTX-D-20-00050Code Ocean compute capsule法律代码许可证Mozilla Public License v2.0使用git的代码版本控制系统使用Rust的软件代码语言、工具和服务编译要求,操作环境依赖Cargo(Rust包管理器)如果可用,链接到开发人员文档/手册https://mozilla.github.io/rust-code-analysis/index.htmlhttps://docs.rs/rust-code-analysis/0.0.17/rust_code_analysis问题支持电子邮件1. 动机和意义软件可维护性被定义为软件组件或系统可被修改和改进、纠正错误以及适应不断变化的环境或环境的容易程度。*通讯作者。电子邮件地址:luca. polito.it(L. Ardito),luca.barbato@ luminem.it(L。Barbato),mcastelluccio@mozilla.com(M.Castelluccio),riccardo.polito.it(R.Coppola),cdenizet@mozilla.com(C.Denizet),sledru@mozilla.com(S.Ledru),michele. polito.it(M. Valsesia)。https://doi.org/10.1016/j.softx.2020.100635要求[1]。可维护性是软件产品经济成功的一个重要因素软件可维护性是对软件特性的度量,这些度量是可量化的或可计数的,并且可以作为评估软件可维护性的重要辅助手段。可维护性预测模型的构建可以允许识别软件的重构或修改部分。源代码测试是软件测试的一个子集,它专注于测量2352-7110/©2020作者。由爱思唯尔公司出版。这是一篇开放获取的文章,使用CC BY-NC-ND许可证(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softxL. 阿迪托湖Barbato,M.Castelluccio等人软件X 12(2020)1006352系统的源代码并将其映射为数值[3]。40多年来,研究人员一直致力于软件可持续性的研究,提出、开发和验证了许多不同的指标、套件和模型,以及计算它们的工具。Nuñez-Varela等人[4]在他们最近的系统映射研究中,列出了300个源代码指标,并将这些指标与可以使用它们的工具联系起来,只需分析2010年至2015年发表的论文。在我们以前的工作中,我们确定了174个软件度量-其中我们确定了15个最常提到的度量-和19个度量计算工具。这些工具都不能与Rust编程语言一起工作然而,业界和学术界仍然没有一致的最佳选择的度量和工具,采用评估软件的可维护性。在行业中,整合的最佳实践通常包括持续集成、使用代码覆盖测量和语言清理(如静态分析)进行测试,有时还包括编码风格强制。然而,缺乏足够的和统一的工具使得对代码可维护性进行自动化评估变得具有挑战性[6]。结果的可靠性是影响这类软件的另一个问题Lincke等人[7]表明,不同的软件度量工具提供了不一致的结果。此外,新的编程语言的出现需要新的软件来计算和评估软件度量。每种语言都需要一个专用的解析器和度量提取器。Rust是一种新的编程语言,其重点是开发利用并行和并发的可靠和高效的系统。简洁性、表达性和安全性是指导Rust开发的主要属性[8]。本文介绍了Rust库rust-code-analysis(RCA),它可以从许多不同编程语言编写的源代码中分析和提取可维护性信息。该库基于一个解析器生成器工具和一个增量解析库Tree Sitter。1据我们所知,该库是第一次尝试使用Rust编程语言开发软件数据库提取器。Rust的使用可以保证库的开发和使用的几个优点,例如:(i)保证内存安全和线程安全,有可能在编译时消除许多类型的错误[9];(ii)快速和内存有效的解析和度量计算[10];(iii)易于与其他编程语言集成。同时,RCA是第一个能够计算Rust语言可维护性软件指标的开源工具。因此,它可以作为评估用Rust编写的软件和编程语言本身的有价值的帮助。2. 软件描述rust-code-analysis是一个Rust库,用于分析和提取以下编程语言编写的源代码中的信息:C++,C#,CSS,Go,HTML,Java,JavaScript,Python,Rust,Typescript。Mozilla开发了这个库的初始版本,以支持Firefox开发过程。每个月,来自500多名开发人员的多达6000个更改2可以登陆其代码库。此库是开发的元素之一,用于帮助评估变更的固有风险并防止引入新缺陷[11],特别是在提升阶段[12,13]。该库可在GitHub上获得,3发布在Crates.io4上,并在Mozilla公共许可证v2.0下发布。它可以在最常见的平台上运行(即,Linux、macOS和Win-10)。库Cargo消除了手动管理大型依赖图的需要,并简化了软件的构建,这与用C/C++编写的工具不同。rust-code-analysis通过运行执行具有公知特性的代码的单元测试来保证度量的正确性。为了进行比较,我们创建了考虑两个主要目标的单元测试:在典型用例中验证rust-code-analysis的正确性,即,使用代表真实案例的源代码,并且通常可以在代码库中找到在极端情况下使用异常参数检查rust代码分析的正确性(极端情况)。用于生成rust-code-analysis输出的值是通过手动计算用作测试输入的已知源代码片段的度量来获得的。上面描述的单元测试可以在存储库中找到。该库附带了一个名为rust-code-analysis-tool的命令行工具,该工具允许与库公开的API进行有效交互。命令行工具也可以用于打印和导出不同格式的指标,它也可以通过Cargo安装Rust代码分析的代码库可以被认为是两个松散耦合组件的组合:• 语言分析器;• 计算模块。理想情况下,有兴趣向代码库添加新语言或度量的贡献者可以向相应的模块添加新的度量或语言,而其余的代码则保持不变。此 外 , 任 何 开 发 人 员 都 可 以 通 过 pull request 为 rust-code-analysis的开发做出贡献2.1. 特征rust代码分析库主要是为开发人员设计实际上,通过其API,可以执行与软件代码度量计算和维护分析相关的各种任务:打印作为输入传递的源代码的抽象树(AST);使用从AST节点提取的信息来检测提前分析代码中可能存在的解析错误。例如,可以在程序编译之前捕获语法错误;打印一系列源代码测试报告,以评估源代码的质量;• 以不同的输出格式导出指标。利用Rust的强大功能,一些API以多线程方式实现,大大加快了整个计算。此外,为了帮助用户以简单的方式与API进行交互,我们还开发了一个名为rust-code-analysis-software的实际上,通过CLI的命令,用户可以在1 https://github.com/tree-sitter/tree-sitterLast visited 10/06/2020.2 https://www.openhub.net/p/firefox网站。3 https://mozilla.github.io/rust-code-analysis/index.html网站。4 https://crates.io/crates/rust-code-analysis网站。·····L. 阿迪托湖Barbato,M.Castelluccio等人软件X 12(2020)1006353表1通过rust-code-analysis计算的时间。指标描述CC McCabe的圈复杂度:它通过检查程序的控制流来计算代码复杂度。它被测量为通过一段代码的线性独立路径的数量[14]。Source lines of code:返回源文件中的总行数。PLOC物理代码行:它返回源文件中指令和注释行逻辑代码行:返回源文件中逻辑行(语句)的 总 数 。CLOC注释行代码:它返回一个文件中注释行的总数。它计算源 文 件 中 的空白行的 数 量 。表2rust-code-analysis命令行界面的参数。参数描述-metrics计算和打印指标。-p定义文件或目录的路径-O选择用于导出以下值之间的指标的输出格式:cbor、json、toml、yaml。-o指定要保存的输出文件的路径–pr印刷精美- 我只考虑具有指定扩展名的文件–f–count-d在shell上打印整个AST–ls,哈尔-斯特德Halstead套件,一组七个静态计算的指标,所有指标都基于不同运算符(n1)和操作数(n2)的数量以及运算符(N1)和操作数(N2)的总数[15]。该套件提供了一系列的信息,如维护所分析的代码所需的工作量,存储程序的位数大小,理解的难度代码、代码库中存在的错误数量的估计以及实现软件所需的时间的估计。–serve–port来表示源文件的语法结构AST与具体的树不同,因为它不包括有关源代码的信息(不太重要的细节,如标点符号MI可维护性指数:一套衡量软件可维护性的指标和括号。AST定义了一系列的数据库节点作为基本数据NOM[16 ]第10段。方法数:它返回源文件。检查树的结构它们通常用于:NARGS参数数量:它计算参数的数量,• 列出代码库中存在的每个构造;NEXITS度量每个方法都在一个源文件中。出口数量:它计算可能的出口点的数量在源文件中的每个方法• 计算某种构造的数量;• 检测程序中解析错误的数量除了在源代码中的行/列坐标位置之外,每个XML节点还包含一个类型信息(节点表示的被检查代码的语法规则)。树保姆支持混凝土之间的区别所有的rust代码分析指标都是从程序的源代码开始计算的,而库仅计算静态度量。静态度量允许评估软件质量,发现可能更难维护的源代码部分,并比较编程语言之间的差异。实施的指标分为三大类:行度量检测某种类型的行数,例如代码中的指令、注释和状态的数量。函数度量统计代码中函数和闭包的数量。它们还可以提取进一步的数据,例如函数的参数数量和退出点全局度量提供了一系列关于维护和理解代码库所需工作的信息,包括对bug数量或实现软件所需时间的估计。此外,他们可以通过检查程序的控制流来评估代码库的对每个函数独立计算,然后合并以确定程序的总体质量在当前的实现状态下,该工具实现了表1中报告的指标列表。所实现的度量包括文献中可用的已建立的套件(例如,Hal- stead套件[15]),但也包括在rust代码分析工具中首次专门定义的度量,如NARGS和NEXITS。2.2. 代码表示rust-code-analysis通过使用一个名为tree-sitter的开源库,构建了一个抽象树(AST),5 https://tree-sitter.github.io/网站。和抽象树,通过分离命名和匿名节点,前者是唯一一个并发的生成AST。在生成的AST之上,rust-code-analysis对源代码进行空格划分。空间是包含功能的任何结构。它包含一系列字段,例如作为结构的名称、相对行开始、行结束、种类和度量对象,该度量对象由在该空间中包含的函数上通过rust-code-analysis计算的可用度量的值组成。在函数级计算的所有度量然后在父空间级合并,并且该过程继续,直到到达表示整个源文件的空间。这里列出了可以在源文件中找到的空间类型不同的编程语言:函 数 , 类 ( Java , C++ ) , 结 构 ( Rust , C , C++ ) , 特 征(Rust),impl(Rust),单元(所有语言),命名空间(C++)。2.3. 命令行界面rust-code-analysis提供了一个命令行界面,用于计算指标并从源代码中提取信息。命令行界面可以通过启动命令rust-code-analysis-tool并输入适当的参数来使用。参数的顺序与程序的正常运行无关命令行界面支持的参数列表如表2所示。rust-code-analysis利用了一个名为Serde的Rust库6,支持应用程序之间的数据交换,并以机器可解析和人类可读的格式导出度量。当然,rust-code-analysis-tool支持三种文本格式:JSON,6 https://crates.io/crates/serdeLast visited 24/06/2020.···L. 阿迪托湖Barbato,M.Castelluccio等人软件X 12(2020)1006354−- −−- − −- − −- −- -- -- −TOML和YAML。此外,为了加快处理和传输速度,还添加了一种基于JSON的二进制数据序列化格式:CBOR。3. 说明性实例本节报告了可以通过使用rust-code-analysis命令行界面执行的一些主要用例的说明性示例,以及在简单代码示例上获得的输出要在单个函数上执行命令,可以利用ls和le参数。例如,对一个从第5行开始到第10行结束的函数执行rust-code-analysis锈代码 分析c l i命令l s 5 le 10 p path / to / f i l e / or /directory / containing / the /code要在屏幕上打印所有计算的指标,命令如下:锈代码分析中利度量 p/ path / to / f i l e /或/ directory / containing / the /code要以特定的输出格式导出指标,可以使用以下命令:锈代码分析c l i metrics O format o / output /path p /path / to / f i l e / or / directory / containing/the/codeJSON和Toml格式可以导出为精美的打印。为此,需要设置pr参数。下面是一个例子:锈代码分析中利度量O 格式PRO/ output/path p / path / to / f i l e /或/ directory /containing/the/codehttp:/ / 127 . 0的情况。0的情况。1:9090 / metrics?文件名={文件名}单位={ unit}作为一个例子,我们报告了JSON输出,可以通过在一个简单的代码示例上运行rust-code-analysis-software程序来代码示例(一个简单的Rust函数)如清单2所示。JSON输出如清单2所示。以下命令将所有计算的指标写入名为foo.rs.json的文件中,并将其输出到tmp目录中rust− code− analysis− c l i−pFoo . Rs −−公制cs −O json−o /tmpJSON输出包含源代码在不同空间中的细分。查看下面的代码示例,为整个单元、implFoo、bar函数和bar内的闭包生成了一个空间。对于每个空间,指标根据其结构分组在不同的JSON项中。例如,计算源文件中存在的代码行(Sort、PLOC、Lort、CLOC)所获得的度量已被分组到名为JSON的数组中。清单1:一个简单的Rust代码示例structFoo{buf:Vecu8>,}执行Foo {int n=& 0,intn=0;对于0中的i..10{s += self.buf.iter()文件格式.fold(s,|acc,x| acc+x * i);要知道代码中是否存在语法错误,可以使用--f参数,通过搜索错误类型的节点的出现情况:}锈代码分析c l i I“ . ext“f错误p/path / to / f i l e / or /directory / containing / the /code此外,还可以计算节点的数量。使用count选项的特定类型:{清单2:foo.rs.json锈 代码 分析中利我“.分机号“计数错误p /path / to / f i l e / or / directory / containing / the / code以下命令允许使用-d参数打印给定源文件的AST:锈代码分析cl idp/ path / to / f i l e /或/directory / containing / the /code要使用rust-code-analysis-tool作为在端口9090上运行的服务器,可以使用以下命令:rust− code− analysis− c l i −−服务器− −端口9090服务器启动后,可以通过以下URL的GET命令ping它:http://127.0的情况。0的情况。1:9090/ping最后,要从rust-code-analysis-PHP的服务器实例中获取指标,可以使用以下POST请求在POST请求中,filename标识源文件的路径,而unit是一个布尔值,指示工具在输出中仅包括顶级指标(1)或所有详细指标(0)。“name“:“/tmp/foo 。 rs“ ,“start_line“:1,“end_line“ :16,“kind“:“unit“,“spaces“:[{“name“:“Foo“,“start_line“:5,“end_line“ :16,“kind“:“impl“,“spaces“:[{“name“:“bar“,“start_line“:6,“end_line“:15,“kind“:“function“,“spaces“:[L. 阿迪托湖Barbato,M.Castelluccio等人软件X 12(2020)1006355{“name“:“anonymouus>“,“start_line“:12,“end_line“:12,“kind“:“function“,“spaces“:[],“metrics“:{“nargs“:4. 0、“nexits“:0. 0、“cyclomatic“:1. 0,“halstead“:{.. . }的情况下,L. 阿迪托湖Barbato,M.Castelluccio等人软件X 12(2020)1006356CKJM格律电码笛鲷QuamocoCBR InsightHalstead工具SonarQubeJSInspectEscomplexEslintCCFinderX参考文献R-C-A“loc“:{.. . }的情况下,“nom“:{.. . }的情况下,“mi“:{.. . }的情况下,}}]、表3根据文献,与最流行的开源工具相比,rust-code-analysis支持的语言。“metrics“:{“nargs“:1. 0、“nexits“:1. 0、“cyclomatic“:1. 五,“halstead“:{.. . }的情况下,“loc“:{.. . }的情况下,“nom“:{.. . }的情况下,“mi“:{.. . }的情况下,}}]、“metrics“:{“nargs“:0. 0、“nexits“:1. 0、“cyclomatic“:1.333333333333333,“halstead“:{.. . }的情况下,“loc“:{.. . }的情况下,“nom“:{.. . }的情况下,“mi“:{.. . }的情况下,C++ vv vv vvC#v v vCSS v vGO v vHTML v vJava v v v vvJavaScript v vvPython v v vRust vTypeScript v v表4根据文献,与大多数流行的开源工具相比,通过rust-code-analysis计算出的最小值。}}]、“metrics“:{“nargs“:0. 0、“nexits“:1. 0、“cyclomatic“:1.25,“halstead“:{.. . }的情况下,“loc“:{.. . }的情况下,“nom“:{.. . }的情况下,“mi“:{.. . }的情况下,}}4. 相关工作在我们之前的工作中,我们进行了系统性综述,以找到在有关软件度量的相关文献中引用的所有开源工具。我们提出了一组由软件维护社区提出和/或用于执行源代码的经验测量的十三个开源工具:CKJM [17],Metricslogaded [18],Codebooks [19],[20]第21话:我的世界,我的世界,我的世界[23]第二十三话:我的世界,我的世界[27]第二十七话,我的朋友。在表3中,我们报告了rust-code-analysis提供的语言支持以及文 献 中 可 用 的 开 源 工 具 支 持 的 语 言 。 可 以 看 出 , 尽 管 像SonarQube和CBR Insight这样的工具涵盖了许多rust代码分析工作的语言,但没有工具与Rust语言兼容。在表4中,我们报告了通过rust-code- analysis计算的度量和通过文献中可用的开源工具计算的度量。为了可读性,我们将与源文件中代码行数相关的所有指标压缩到了一个名称中,即Sort、PLOC、Lort、CLOC和BLANK。如表中所示,没有工具可以提供由rust-code-analysis计算的相同度量组合。特别是,其中两个不涵盖任何考虑的指标。考虑到最复杂的度量套件(即,Halstead套件和可维护性指数),它们都只被两个开源工具考虑(并且只有Escomplex可以计算两者)。正如预期的那样,没有开源工具允许计算NARGS和NEXITS指标,因为它们已经在rust代码分析工具的范围内定义在下文中,我们强调了与表4中描述的其他工具相比,rust代码分析的一些优势。特别是,rust-code-analysis:CKJM格律电码笛鲷QuamocoCBR InsightHalstead工具SonarQubeJSInspectEscomplexEslintCCFinderX参考文献R-C-ACCLOCv v vV Vvvvvvvvvvvvv霍斯特德vvvMIvvvNOMvvvNARGSvNEXITSvL. 阿迪托湖Barbato,M.Castelluccio等人软件X 12(2020)1006357是模块化的,因此很容易创建新的模块,实现新的指标或添加对更多编程语言的支持;是用Rust编写的,所以它利用了第1节中描述的这种编程语言由Mozilla积极维护。外部贡献者可以实现新功能,修复bug,然后提交pull request以将他们的更改包含在项目中目前用于分析mozilla-central(Firefox源代码),因此它可以利用一个大的测试床;支持多种编程语言。为用不同编程语言编写的项目实现度量是有问题的,因为开发人员需要学习每种语言的结构,浪费了大量的时间;通过使用持续集成和部署服务,以便利的方式为Windows和Linux提供二进制文件。没有必要从头开始构建代码,使最终用户更简单。事实上,构建一个项目有时需要处理复杂的配置,这取决于所使用的操作系统(及其版本)以及系统中安装的库提供了一个CLI和一个库,这使得它可以轻松集成到第三方软件中。5. 影响和结论在本文中,我们提出了Rust-code-analysis,一个Rust库分析和提取可维护性信息的源代码。·······L. 阿迪托湖Barbato,M.Castelluccio等人软件X 12(2020)1006358rust-code-analysis是一种新的软件包,它具有两个新定义的软件可维护性度量(NARGS和NEXITS)。它提供了一个命令行界面,可以很容易地被其他软件项目调用,以监视和检查其代码的质量该工具已经用于Firefox Nightly,以评估代码库更改的风险。7我们还预计对rust-code- analysis库有以下影响:对于软件工程师和程序员,该工具可以评估运行项目的代码可维护性,量化其复杂性,并通过AST分析在编译时间之前检查可能的解析错误。对于开发人员工作流中的集成,可以集成该工具以识别有风险的更改并显示更多测试或重构的需求。对于软件工程的研究人员来说,该工具可以用于进行实证研究,并比较不同语言中相同算法的实现之间的可维护性属性,或者在同一语言中实现不同的算法。这两个用例都可以很容易地执行,利用该工具的命令行接口。作为使用该工具进行实证实验的一个例子,我们已经在Python中开发了一个工具,该工具利用rust-code-analysis来比较用不同语言编写的各种算法实现。8作为近期的工作,我们计划添加CHANGE和认知复杂性度量,并为C#和Java语言实现所有度量。竞合利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作致谢美国Mozilla Research通过2018 H2研究资助资助了该该项目的标题是:“Algo- rithms clarity in Rust:advanced rate controland multi-thread support in rav 1 e”。该项目旨在了解Rust编程语言如何在实现复杂算法的同时提高代码可维护性引用[1] 美国电气与电子工程师协会。软件工程术语标准词汇表。IEEE标准610.12-1990 1990;1-84. http://dx.doi.org/10.1109/IEEESTD.1990.101064网站。[2] Kaur A,Kaur K,Pathak K.基于软件代码度量数据挖掘的软件可维护性预测。2014年数据挖掘与智能计算国际会议(ICDMIC)2014年,第1比6http://dx.doi.org/10.1109/ICDMIC.2014.6954262。[3] Lanza M,Marinescu R.面向对象度量的实践:使用软件度量来描述、评估和改进面向对象系统的设计。Springer Science Business Media; 2007.[4] Nuñez-Varela AS,Pérez-Gonzalez HG,Martínez-Perez FE,Soubervielle-Montalvo C.源代码度量:系统映射研究。J Syst Softw 2017;128:164-97.http://dx.doi.org/10.1016/j.jss.2017.03.044,http://www.sciencedirect.com/science/article/pii/S0164121217300663网站。[5]张文辉,张文辉,张文辉.软件代码可维护性度量的工具视角:系统文献综述。科学计划2020;2020:5284645。http://dx.doi.org/10.1155/2020/8840389网站。[6] [10] Sarwar M,Tanveer W,Sarwar I,Mahmood W.MI工具的比较研究2008年IEEE国际多主题会议。2008,第379-85页。http://dx.doi.org/10的网站。1109/INMIC.2008.4777767。[7]杨伟杰,李伟杰.比较软件度量工具。2008年软件测试与分析国际研讨会论文集。ACM; 2008,p. 131比42[8]Matsakis ND,Klock FS. Rust语言ACM SIGAda Ada Lett2014;34(3):103-4.[9]Balasubramanian A, Baranowski MS ,Burtsev A, Panda A ,RakamarićZ,Ryzhyk L. Rust中的系统编程:超越安全在:第16届研讨会的会议记录在操作系统的热门话题。2017年,p. 156比61[10]徐华,陈志,孙明,周勇.是否认为记忆安全性挑战已解决?对所有铁锈CVES的实证研究。2003年,ArXiv预印本。03296[11]Nayrolles M,Hamou-Lhadj A. CLEVER:将代码度量与克隆检测相结合,用于大型工业项目中的及时故障预防和解决。在:第15届国际采矿软件库会议论文 集 。 New York , NY , USA : Association for Computing Machinery;2018,p. 153-64. http://dx.doi.org/10.1145/3196398.3196438网站。[12]放大图片Castelluccio M,An L,Khomh F.使用此补丁安全吗?: 对MozillaFirefox的2017 IEEE International Conference on Software Maintenance andEvolution(ICSME)p. 411-21[13]放大图片Castelluccio M,An L,Khomh F.快速释放开发管道中局部隆起的实验研究。Empir Softw Eng 2018;1[14]Ebert C,Cain J,Antoniac G,Counsell S,Laplante P. Cyclomatic Complexity.IEEE Softw2016;33(6):27-9.[15]Halstead MH.软件科学的基础。操作和程序设计系统系列,纽约,美国:爱思唯尔科学公司; 一九七七年[16]Welker KD.软件可维护性指标再探。相声2001;14:18-21.[17]Kaur A,Kaur K,Pathak K.一种新的开放源码软件可维护性指标模型。第三届可靠性、信息通信技术和优化国际会议论文集。IEEE; 2014,p.1比6[18]作者:J.J. H,J.J.评估android应用程序的可理解性。Int J Soft Innov(IJSI)2018;6(1):44[19]Kaur A,Kaur K,Pathak K.基于软件代码度量数据挖掘的软件可维护性预测。2014年数据挖掘与智能计算国 际 会 议 (ICDMIC)IEEE; 2014,p.1比6[20]刘伟,徐伟,王伟.从github存储库编译静态软件度量的可靠性和可维护性。2017 IEEE InternationalConferenceon Systems , Man , and Cybernetics(SMC)IEEE; 2017,p.五比九[21]Wagner S,Lochmann K,Heinemann L,Kläs M,Trendowicz A,PlöschR,etal. The quamoco product quality modeling and assessment approach.2012年第34届国际软件工程会议(ICSE)IEEE;2012,p. 1133-42.[22]Ludwig J,Cline D. CBR洞察:测量和可视化源代码质量。2019 IEEE/ACM技术债务国际会议(TechDebt)。IEEE; 2019,p. 57比8[23]吴伟杰,王晓刚,王晓刚.软件复杂性分析的霍尔斯特德度量方法。 2017年电子与信息学趋 势 国 际 会 议 (ICEI)。IEEE; 2017,p.1109-13[24]Sarwar MI,Tanveer W,Sarwar I,Mahmood W.的比较研究M I 工具:定义MI工具标准化的路线图。2008年IEEE国际多主题会议。IEEE; 2008,p.379比85[25]Chatzidimitriou K , Papamichail M , Diamantopoulos T , Tsapanos M ,Syme-oncoga A. Npm-miner:用于衡量npm注册表质量的基础设施。2018年IEEE/ACM第15届国际采矿软件库会 议 (MSR)。IEEE; 2018,p.42比5[26]GitHub I. escomplex。 2017年,https://github.com/escomplex/escomplex,[27]放大图片创作者:Tómasdóttir K,Aniche M,Van Deursen A. JavaScriptLinters 在 实 践 中 的 应 用 : eslint 案 例 研 究 。 IEEE Trans Softw Eng 2020;46(8):863-91. http://dx.doi.org/10.1109/TSE.2018.2871058网站。[28]松下T,佐野I。通过函数应用程序检测有间隙的代码克隆。In:Proceedingsof the 2017 ACM SIGPLAN workshop on partial evaluation and programmanipulation; 2017.p. 12比22[29]Kádár I,Hegedus P,Ferenc R,Gyimóthy T. 代码重构数据集及其对软件可维 护 性 的 评 估 。 2016 年 IEEE 第 23 届 软 件 分 析 、 演 化 与 再 工 程 国 际 会 议(SANER)1.一、IEEE; 2016,p.599-6037 https://github.com/mozilla/gecko-dev网站。8 https://github.com/SoftengPoliTo/SoftwareMetrics网站。···
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功