没有合适的资源?快使用搜索试试~ 我知道了~
=-软件X 12(2020)100633原始软件出版物AnsibleData:一个Python库,用于在Ansible放大图片作者:Stefano Dalla Palmaa,Dario Di Nuccia,Damian A.坦布里湾a蒂尔堡大学-Jheronimus数据科学学院b埃因霍温理工大学-Jheronimus数据科学学院art i cl ei nfo文章历史记录:接收29可以2020收到修订版2020年9月16日接受2020年关键词:基础设施即代码软件度量软件质量a b st r a ct结构即代码(IaC)最近在研究界受到越来越多的关注,主要是由于它在软件设计,开发和操作人员中带来的范式转变。然而,尽管IaC代表了一种不断增长和广泛采用的实践,但人们对帮助DevOps工程师有效维护、快速发展和持续改进“结构即代码”的工具的需求感到担忧。在本文中,我们提出了一个基于Python的静态源代码度量工具AnsibleCode,虽然我们专注于Ansible,IaC最常用的语言,我们的工具可以很容易地扩展到支持其他格式。AnsibleData代表了向开发和维护基础设施代码的DevOps工程师提供软件质量支持的一步。©2020作者(S)。由爱思唯尔公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)中找到。代码元数据当前代码版本0.3.8用于此代码版本的代码/存储库的永久链接https://github.com/ElsevierSoftwareX/SOFTX_2020_231法律代码许可证Apache许可证,2. 0(Apache-2.0)使用Git的代码版本控制系统Python使用的软件代码语言、工具和服务>3 .第三章。6; Visual Studio Code>1. 48编译要求、操作环境Linux、Windows开发人员文档/手册https://radon-h2020.github.io/radon-ansible-metrics1. 动机和意义DevOps是一系列缩短软件生命周期并将软件开发活动与IT运营混合的工具和技术[1,2]。作为DevOps的一部分,架构即代码(IaC)[3]是一种策略,近年来,基于软件开发实践(如版本控制和自动化测试),IaC的采用率迅速提高,以加快使用自动化提供和配置基础设施资源的速度[3]。一方面*通讯作者。电子邮件地址:uvt.nl(S. Dalla Palma)。https://doi.org/10.1016/j.softx.2020.100633另一方面,这些实践允许更有效和可重复的基础架构代码开发。另一方面,这些实践所允许的对基础设施的频繁更改可能会引入缺陷[4],或者如果没有得到适当的支持,则可能会威胁其质量,从而引起对IaC质量的担忧,以及需要工具来帮助开发人员快速发展和持续改进基础设施代码,正如Guerriero等人[5]与行业从业者进行的最近调查所观察到的那样。然而,尽管它的兴趣越来越大,只有少数作品和工具处理的质量IaC。Bent等人[6]开发了一个度量模型和工具来分析Puppet代码他们表明,测量模型提供了Puppet代码的质量判断,这些代码通过与专家的结构化访谈与专家其他工作集中在分析源代码属性,以构建机器学习模型,评估2352-7110/©2020作者。 由Elsevier B.V.出版。这是一篇开放获取的文章,使用CC BY许可证(http://creativecommons.org/licenses/by/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softxS. Dalla Palma,D. 迪努奇和检察官坦布里软件X 12(2020)1006332IaC脚本[4]或基础架构代码中出现的安全气味,例如最初为Puppet开发的用于结构即代码脚本的Security Linter [7]。最后,Ansible Lint1帮助开发人员通过检查剧本来处理基础设施代码,这些问题包括格式和习惯用法问题,例如尾随空格和与空字符串的比较;任务问题,例如未命名的任务等等。为了在这条研究线上构建一个更健壮和多样化的套件,本文介绍了AnsibleObserver ,一个用于Ansible 的静态源代码分析器,Ansible是工业中采用的事实上的标准配置管理技术[5]。促进其采用,该工具作为开源项目2公开提供以及文档。3虽然AnsibleData中实现的一些指标可能与AnsibleLint中定义的检查重叠,但这些工具有不同的目标。后者侧重于最佳实践,而前者最初旨在确定源代码属性和统计数据,这些属性和统计数据可用作错误基础架构脚本的早期指标,可能导致代价高昂的基础架构故障。4我们认为这两种工具可以结合使用事实上,Ansible Lint可以识别违反规则定义的最佳实践的行为,而Ansible Lint中提取的指标可以结合起来,在软件缺陷预测[8]的范围内描述容易失败的IaC脚本,或者识别指示错误风格使用或糟糕设计的症状,也就是。代码有异味[9]。本文件其余部分的结构如下。第2节介绍Ansible技术。第3节描述了该工具第4节提供了说明性示例,以了解拟议工具的特性和使用最后,第5节总结了本文,并概述了未来的工作。2. Ansible:概述Ansible是基于YAML语言的软件操作自动化引擎。其目的是自动化云基础架构供应、配置管理、应用程序部署等。Ansible连接节点作为蓝图的一部分,并推出称为Ansible模块的脚本,其中大部分描述系统的状态。Ansible执行这些模块,这些模块在不需要时被删除除了模块之外,Ansible剧本还通过提供精确控制架构可扩展性的方法来协调基础设施拓扑的多个切片。行动手册对于配置管理和多机部署至关重要。他们可以在一个或多个剧本中声明配置和启动任务,以协调任何手动排序流程的步骤。Play的目标是将一组主机映射到一些定义良好的角色,由Ansible任务表示,这些任务是对Ansible模块的图 1显示了一个Ansible代码片段,代表了一个提供和部署网站的剧本。5Ansible发动机图中显示了各个方面,例如要在主机容器上打开的端口、用户帐户名以及要部署的所引擎检查Apache服务器和PostgreSQL数据库是否处于最新版本并已启动。这个目标是通过将主机(第2行和第13行)映射到它们各自的任务(第8-11行、第17-20行、第22-25行)来实现的。 模块1 https://github.com/ansible/ansible-lint(2020年9月访问)。2 https://github.com/radon-h2020/radon-ansible-metrics网站。3 https://radon-h2020.github.io/radon-ansible-metrics/网站。4 https://cloudcomputing-news.net/news/2017/oct/30/glitch-economy-counting-cost-software-failures/(2020年9月访问)。5 适配从Ansible文档:https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html(2020年9月访问)。Fig. 1. Ansible Playbook。yum和service分别管理已安装的包和控制名称(即,包和数据库的名称)和状态(即,是否存在、不存在或其它)是这些模块的参数。通过编写多个剧本,可以协调多机器部署,并在Web服务器组和数据库组中的机器上运行特定命令。3. Ansiblektop:特点和概述AnsibleData是一个基于Python的静态源代码分析器,用于Ansible蓝图,帮助量化Ansible结构即代码的特征,以支持DevOps工程师在维护和发展它时。它目前支持Dalla Palma等人提出的46个[10]包括剧本和任务的数量和大小、命令的数量、最佳和不良实践,尽管其他可以通过组合已实现的实践来得出这些指标是从Ansible文档和Puppet的面向对象指标和IaC指标的现有科学文献中提取的。有关每个指标的详细信息,请参阅文档6该工具是开源的,可在Github和Python包索引(PyPI)上使用。7本节描述AnsibleCloud的设计及其主要API。3.1. 域对象AnsibleMetric依赖于AnsibleMetric和LinesMetric,两者都提供了一个方法count()来计算给定IaC指标的特别是AnsibleMetric是一个抽象类,由负责计算给定Ansible构造的度量的所有类扩展(例如,计算播放、任务、模块等的数量)。它接受一个普通的YAML文件作为输入,6 https://radon-h2020.github.io/radon-ansible-metrics/网站。7 https://pypi.org/project/ansiblemetrics/网站。·S. Dalla Palma,D. 迪努奇和检察官坦布里软件X 12(2020)1006333图二、A n s i b l e O b j e c t 的两个 基类的图。它是一个字典列表(注意字典是PyYAML库提供的用于解析它的数据类型)。此外,它从输入脚本中提取播放和任务,并将它们分别存储为类属性plays和tasks这一步骤有助于实现指标:不需要进一步检查有关的结构和任务的LinesMetric是一个抽象类,负责计算与代码行显式相关的与语言无关的度量(例如,可执行、注释和空白行的数量)。类似于AnsibleThread,它接受一个普通的YAML文件作为输 入。这样的 文件存储为字符串 ,以允许 解析PyYAML忽略的注释和空白行。这两个类都在它们的init()方法中验证YAML文件,并在文件为空或格式不正确时引发ValueError因此,扩展类(图中的具体度量) 2)在解析文件并实现方法count()的逻辑时,可以安全地假设文件是有效的YAML。3.2. 软件构架AnsibleData提出了一个两级的软件体系结构,如图1所示。第3(a)段。更高级别由用户界面(GUI和命令行)和代码API组成它们为第三方应用程序提供了主要的入口点,这些应用程序需要量化其“结构即代码”特性。GUI8 包含Visual Studio Code(VSC)扩展可在VSC Marketplace购买。9CLI采用Ansible蓝图的路径或蓝图的目录;可选地,它将报告以json格式保存到用户指定的路径json报告由一个包含(key,value)对的对象组成,其中key是度量名称,value是计算值,类似于以下内容:{“avg_task_size”:integer>,“num_tasks“:,“num_plays“:,“text_entropy”:float>}API允许两种主要的使用场景:8 源代码可在Github上获取,网址为https://github.com/radon-h2020/radon-ansible-metrics-plugin。9 https://marketplace.visualstudio.com/items? itemName=radon-h2020。测量学1. MetricExtractor(图3(b))以编程方式运行所有实现的度量。它返回一个开发者可以解析的json对象,就像命令行界面一样。CL依赖于MetricExtractor。2. 反 过 来 , MetricExtractor 依 赖 于 指 定AnsibleMetric 和LinesMetric的类。DevOps工程师可以根据手头的问题以编程方式单独运行给定的指标,而不必一次提取所有指标在这种情况下,度量返回的值是其方法count()返回的值,即整数或浮点数。4. Ansible:用法示例为了说明的目的,让我们考虑图1中的示例。 要分析这个蓝图,用户必须使用以下命令从PyPI安装ansiblemetrics库pip install ansiblemetrics或者,从源代码根文件夹:pipinstall.用户可以在终端中运行该命令,也可以将ansiblemetrics模块中的一个代码片段。4.1. 命令行用法假设图中的例子。 1名为playbook1.yml位于playbooks文件夹中,如下所示:剧本/|-playbook1.yml|-playbook3.yml|-playbook3.yml假设用户ansible-metrics playbook1.yml--dest report.json对于本例,report.json将导致{“filepath”:“playbook1.yml”,“avg_play_size”:10,“avg_task_size”:4,“lines_blank”:4,“lines_code”:20,“num_keys“:20,“num_parameters“:6,“num_plays“:2,“num_tasks“:3,“num_tokens“:50,“num_unique_names“:3,“num_vars“:1,“text_entropy”:4.37}请注意,为了节省空间,我们在本例中只报告了非零指标,而报告默认包含所有指标。要在报告中省略零指标,用户必须传递参数--omit-zero-metrics。用户可以将包含它们的文件夹的路径作为输入传递,以避免对多个蓝图多次运行该命令。举例来说ansible-metrics.--dest report.json·S. Dalla Palma,D. 迪努奇和检察官坦布里软件X 12(2020)1006334图三. 体系结构概述。图四、 Python中 使用Ansible的例子。在本例中,report.json将由一个json数组组成,类型的对象[图五、 如何运行plugin{“filepath”:“playbook1.yml”,“metric1”:value>,...“metricN“:},见图6。 报告的例子。...{“filepath”:“playbook3.yml”,“metric1”:value>,...“metricN“:}]一组程序化的 在这个场景中,用户可以通过在她的代码片段中导入ansiblemetrics模块来有效地解决这个任务。更具体地说,可以导入ansiblemetrics.metrics_extractor模块,以一 次 性 提 取 所 有 指 标 和 ansiblemetrics 。 战 术 手 册m e t r i c <>或ansiblemetrics.general。在前面的示例中,report.json文件保存在用户的工作目录中剧本/|-playbook1.yml|-playbook3.yml|-playbook3.yml|-report.json但是,用户可以指定保存报告的不同路径以供以后使用。请注意,如果存在多个具有不同扩展名的文件,则在整个文件夹上运行命令将仅分析Ansible蓝图。4.2. Python模块使用上一节展示了用户如何利用命令行界面从Ansible蓝图中提取指标。然而,可能需要获得一个度量或(其中必须替换为所需度量的名称)模块来计算特定度量。后两个模块之间的区别在于剧本模块包含剧本专用的度量(例如,游戏和任务的数量)。相比之下,通用模块提供可以被推广到其他语言的度量(例如,代码行图第四章描述了这些场景。在该代码片段中,all_metrics将存储一个json对象,如第4.1节中的示例,而loc_count和plays_count将分别包含值20和24.3. GUI使用图图5和图6描绘了图形用户界面的两个部分。前者展示了如何运行插件,而第二个报告的例子。当通过支持VisualStudio Code(VS Code)扩展的编辑器使用该工具时,GUI可以简化使用。首先,用户必须安装ansiblemetrics依赖项,如前一节所述。然后可以通过直接在VSS. Dalla Palma,D. 迪努奇和检察官坦布里软件X 12(2020)1006335图7.第一次会议。 Ansible tasks(左)和Puppet resources(右)用于从PyPIP安 装 并运行An s i b l e T h r e a d 。Marketplace10或启动VS Code Quick Open(Ctrl+P),粘贴以下命令,然后按回车键:ext install radon-h2020.ansiblemetrics最后,可以通过两种方式运行扩展:(1)通过启动VS Code命令面板(Ctrl+Shift+p)并输入AnsibleThread或(2)单击编辑器右上角的AnsibleThread按钮。请注意,后者仅对基于YAML的Ansible文件可见。5. 结论在本文中,我们提出了Ansible 蓝图,一种新的工具来衡量Ansible蓝图的软件质量。AnsibleMet- rics旨在向前迈出一步,以支持DevOps工程师在开发和维护基础设施代码时。我们通过命令行和图形用户界面说明了它的体系结构和使用示例。虽然GUI目前仅作为VS Code扩展提供,但它可以轻松集成到其他环境中。更具体地说,为Eclipse Che设计的11事实上,从Eclipse Che开始,7.15,VS Code扩展可以轻松安装以扩展Che工作区的功能。12虽然我们为用户提供了与工具交互的不同模式,但其他模式(例如,导出为HTML报告或Web应用程序),并计划在今后开展工作。我们还将通过突出显示违反特定选择指标的代码片段,向程序员提供可操作的建议来改进该工具最终目标是突出需要更多审计的代码部分,使用提取的度量来捕获可充当缺陷预测代理的结构即代码方面。我们相信,所提出的工具将有助于开发Ansible蓝图质量的测量模型,特别是IaC。我们还认为该工具在实践中是适当和可用的,尽管与专家的验证是我们近期研究议程的一部分。虽然我们专注于Ansible,IaC最常用的语言,但大多数指标都很容易扩展到其他语言,如Puppet。图13中 列 出了一个例子。7 .第一次会议。两个码片段是类似的:它们确保安装了最新版本的ansiblemetrics,并通过命令行在playbooks文件夹中名为foo.yaml的文件上运行该工具。在这个例子中,基于文本的指标,如代码行和注释,文本熵和令牌数,可以很容易地从10 可从以下网址获得:https://marketplace.visualstudio.com/items?itemName=radon-h2020. ansiblemetrics.11 https://www.eclipse.org/che/网站。12 https://www.eclipse.org/che/docs/che-7/using-a-visual-studio-code-extension-in-che/(2020年9月访问)。13 https://puppet.com/网站。这两个脚本;类似地,可以容易地调整其他度量。图中的Ansible代码。7(左)有三个任务(第1、7和12行),它们中的每一个调用模块14(分别为PIP、STAT和Shell这里,模块的度量数量= 3。模块是基础在Ansible中,因为它们提供了可在远程主机上直接执行或通过playbook执行的代码单元。 类似地,图中的Puppet代码。7(右)由三个资源15(第2、8和13行)组成。PuppetPuppet资源可以被认为类似于Ansible模块。例如,模块的度量数量= 3可以被转换为资源的数量= 3。更具体地说,它可以用类似于基本单位东西推广到其他语言。其他指标也适用。图中的两个脚本。7具有文件存在数= 1和命令数= 1。前一个度量统计模块或资源检查文件、目录或符号链接是否存在的次数。在Ansible中,这可以通过模块stat实现,而在Puppet中,可以通过确保属性实现。后一个指标计算外部命令的数量。不同的模块允许在Ansible中执行这些命令。其中,外壳模块。相反,Puppet允许通过资源类型exec执行外部命令。此外图 7(左)的参数数= 5(第3、4、9、14和15行),而图7(左)的参数数= 5(第3、4、9、14和15行)。 7(右)参数数量= 6(第3、4、9、10、14和15行)。Ansible中模块的参数(或自变量)描述了系统的期望状态。类似地,Puppet的属性描述资源的期望状态;每个属性处理资源的某些方面。总而言之,AnsibleThread可以计算几种可以推广到其他语言的代码度量。 然而,在目前阶段,它没有提供任何进一步的分析。作为未来的工作,我们正在实现一个新的可视化来帮助开发人员识别有问题的指标,这些指标可以被视为潜在的代理,以识别指示错误样式使用或糟糕设计的症状。竞合利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作确认这项工作得到了欧盟委员会的支持。825040(H2020氡)。14 https://docs.ansible.com/ansible/latest/user_guide/modules_intro.html(于二零二零年九月生效)。15 https://puppet.com/docs/puppet/6.18/lang_resources.html(访问二零二零年九月S. Dalla Palma,D. 迪努奇和检察官坦布里软件X 12(2020)1006336引用[1] Bass L , Weber I , Zhu L. DevOps : 软 件 架 构 师 的 视 角 。 Addison-WesleyProfessional;2015.[2] Artac M , Borovssak T , Di Nitto E , Guerriero M , Tamburri DA.DevOps:引入基础设施即代码。2017年IEEE/ACM第39届软件工程国际会议(ICSE-C)。IEEE; 2017,p. 497 -8[3] 莫里斯·K基础架构即代码:管理云中的服务器。“奥莱利媒体公司2016年。[4] Rahman A,Williams L.描述用于连续部署的有缺陷的配置脚本。2018年IEEE第11届软件测试、验证和确认国 际 会 议 (ICST)。IEEE; 2018,p.34比45[5] Guerriero M,Garriga M,Tamburri DA,Palomba F.基础架构即代码的采用、支持和挑战:来自行业的见解。2019 IEEEInternational Conference onSoftware Maintenance and Evolution(ICSME)IEEE; 2019,p. 580-9[6]范德本特E,Hage J,Visser J,Gousios G.你的木偶有多好?一 个经验定义和验证的木偶质量模型。2018年 IEEE第25届软件分析、演化与再工程国际会议(SANER)IEEE; 2018,p.164比74[7]放大图片Rahman A,Parnin C,Williams L七宗罪:基础设施中的安全气味就像代码脚本一样。In:Proceedings of the 41st International Conference onSoftware Engineering; 2019.p. 164比75[8]Hall T,Beecham S,Bowes D,Gray D,Counsell S.对软件工程中的故障预测性能进行了系统的文献综述。IEEE TransSoftw Eng2011;38(6):1276-304.[9]福勒M重构:改进现有代码的设计。Addison-WesleyProfessional;2018.[10]Dalla Palma S,Di Nucci D,Palomba F,Tamburri DA. Toward acatalog ofsoftware metrics for infrastructure code. J Syst Softw2020;170 ( 0164-1212)。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- 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
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功