安卓原⽣态系统刷机包_代码覆盖⽣态系统的库和软件包
安卓原⽣态系统刷机包
如果您已经编写测试驱动的代码已有⼀段时间了,那么您将了解代码覆盖率(也称为测试覆盖率)。如果您不熟悉该术语,这⾥有两个简
短的定义。:
⼀种度量,⽤于描述特定测试套件运⾏时程序源代码的执⾏程度。
,代码覆盖范围…
…帮助您找到未测试代码的哪些位。经常运⾏覆盖⼯具并查看这些未经测试的代码是值得的。
如果您还不熟悉代码覆盖率并将其⽤作测试过程或,强烈建议您学习⼀下。话虽如此,今天我将开始⼀个分为两部分的系列⽂章,介绍代
码覆盖率⼯具。
在第⼀部分中,我将逐步介绍针对当今可⽤的五种最受欢迎的软件开发语⾔的⼯具。这些是PHP,Python,Go,Java和Ruby。
在第⼆部分中,我将逐步介绍四个在线服务,涵盖它们提供的功能,其⼯作⽅式的概述以及各⾃⽅法的⼀些差异。
为了使⼯具的涵盖范围变得有意义,我为每种语⾔创建了⼀个⼩型存储库,其中包含⼀个适度的⽤户实体以及相应的五种语⾔的测试套件。
这样,您将看到的测试输出应该更有意义。我要强调的是,代码不会改变世界,但是⾜以让每个⼯具都有基本的感觉。
这是到五个存储库的快速链接:
PHP
我将从PHP开始,因为这是我⽬前花费最多时间开发的语⾔。如果您花了很多时间在PHP上,那么您将知道提供代码覆盖率的候选⼈是。
PHP的资深测试框架已经存在了很长时间。PHPUnit通过其组件提供了代码覆盖⽀持,并利⽤了。代码覆盖率报告可以⽣成为HTML和
XML⽂件,并且⽀持的报告格式为,和PHPUnit。
报告本⾝⽀持以下指标:
线,函数和⽅法,类和特性,操作码,分⽀和路径覆盖
变更风险反模式(CRAP)指数
:
根据圈复杂度和⼀个代码单元的代码覆盖率来计算。不太复杂并且具有⾜够测试覆盖率的代码将具有较低的CRAP索引。通过编写测
试和重构代码以降低其复杂性,可以降低CRAP索引。
另外,借助docblock批注,PHPUnit⽀持忽略特定代码块的功能,例如⽆法测试的代码块或要从代码覆盖率分析中忽略的代码块。
例如,您可以使⽤@codeCoverageIgnore批注指⽰应忽略类,函数或⾏。另外,您可以使
⽤@codeCoverageIgnoreStart和@codeCoverageIgnoreEnd忽略⼀段代码。
您也可以使⽤批注指⽰功能与⼀种或多种⽅法有关。
例如,假设我们在PHPUr实体中有另⼀个名为getUrDetails,该⽅法返回所有Ur的详细信息。当然,它们的名称将成为其详细信
息的⼀部分。鉴于此,getName与该⽅法有关。因此,我们可以添加注释@coversUr::getUrDetails以显⽰测试getName与测
试getUrDetails。
因此,您可以看到PHP的代码覆盖⾯⾮常⼴泛,可以准确指⽰测试中包含哪些内容。
运⾏报告
假设可以将PHPUnit作为项⽬依赖项并安装了XDebug扩展,则可以通过以下两种⽅式之⼀⽣成代码覆盖率报告。
可以在命令⾏中将选项传递给PHPUnit的调⽤,例如通过运⾏:
phpunit--coverage-htmltests/coverage
可以在“⽇志记录”部分中配置PHPUnit的配置⽂件,以指定必要的选项,如以下⽰例所⽰:
highLowerBound="70"/>
报告范例
在下图中,您可以看到HTML报告的⽰例。在顶部,您可以看到表格报告,其中显⽰了有关⽂件(或⽂件夹)的可⽤覆盖范围指标;在这
种情况下,为SimpleEntities/src/。
类级别PHPUnit代码覆盖率
您会看到它涵盖了类,特征,函数,⽅法和⾏。您可以看到类构造函数和两个⽅法tName和getName具有100%的覆盖率。
作为进⼀步的验证,在表格报告下⽅,您可以看到突出显⽰的代码。除⼀⾏外,其余所有⾏均为绿⾊,这表⽰该⾏代码的执⾏已通过测
试。黄⾊表⽰最后的代码⾏。另外,还有红⾊,表⽰该⾏尚未测试。
Python
为了在Python中⽣成代码覆盖率报告,您可以将多个Python测试库与结合使⽤。
,⾸先运⾏⼀个或多个代码⽂件来了解代码中执⾏了哪些⾏。在此阶段,它运⾏⼀个跟踪函数,该函数在执⾏时记录每个⽂
件和⾏号。
执⾏完成后,它将检查执⾏的代码以确定可以运⾏哪些⾏。完成这两个步骤后,根据检索到的信息,它会⽣成⼀个报告,以可视化⽅式显
⽰运⾏的内容和未运⾏的内容。
与许多Python库⼀样,如果您使⽤的是Linux发⾏版,则可以使⽤包管理器进⾏安装,也可以通过pip进⾏安装。与⼤多数其他库相似,C
可以⽣成HTML和XML⽂件格式的报告。
由于它使⽤跟踪功能提取信息以⽣成报告,因此将其与任何其他测试库⼀起使⽤⾮常简单。
安装和运⾏报告
在,我使⽤了来创建⼀组简单的单元测试。要运⾏测试套件,我将使⽤命令。
要⽣成代码覆盖率报告,⾸先必须调⽤coveragerun并将您要分析的python代码传递给它。为此,我将运⾏,
它将使执⾏并分析我的测试套件。之后,覆盖率信息将可⽤,因此我现在可以运⾏coveragereport,该报告将覆盖率报告打
印到STDOUT中。
这是⼀个看起来像的例⼦:
[simple-entity]coveragereport
NameStmtsMissCover
-------------------------------------------------
entities/__init__.py00100%
entities/tests/__init__.py00100%
entities/tests/test_12192%
entities/90100%
-------------------------------------------------
TOTAL21195%
您可以看到报告中包含四个⽂件。总共有95%的代码覆盖率,因为entities/tests/test_仅具有92%的代码覆盖率。该测试适合与⽂
本扫描⼯具⼀起使⽤,但不如HTML报告灵活。这是HTML报告的⽰例:
如您所见,类似于PHPUnit报告,它显⽰了类中的语句数量,测试运⾏了多少,未运⾏了多少以及排除了多少。
Java
使⽤Java开发代码时,可以使⽤和。
该项⽬的⽂档指出JaCoCo是Java的免费代码覆盖库,由EclEmma团队创建。JaCoCo应该为基于JavaVM的环境中的代码覆盖率分析提
供标准技术。重点是提供⼀个轻量级,灵活且⽂档齐全的库,以与各种构建和开发⼯具集成。
JaCoCo⽀持以下⽅⾯的报告:
指令范围
分⾏覆盖
圈复杂度
单独的⾏(对于已使⽤调试信息编译的类⽂件)
包含⾄少⼀条指令的⾮抽象⽅法
课堂报道
⽽且,它可以与各种构建和开发⼯具集成在⼀起,包括Ant,Maven,,和。
JaCoCo⽀持以XML,HTML和CSV格式创建报告。由于Java⽐⼤多数语⾔要复杂得多,并且⽐动态语⾔要复杂得多,因此有很多⽅法
可以将JaCoCo与所选的应⽤程序结合使⽤。
相反,我将介绍如何使⽤运⾏测试套件。
安装Maven并在中创建新项⽬后,如果添加以下插件配置,则在从命令⾏调⽤mantest时可以⽣成报告。
此配置将JoCoCo4.12作为项⽬插件加载,并将target/jacoco-ut为⽣成报告的⽬录。
如果打开target/jacoco-ut/,那么您将看到⼀个顶级报告,如下图所⽰,这与其他语⾔HTML报告⾮常相似。
JavaJoCoCo–顶层视图
这显⽰了顶级实体和⽂件夹的覆盖范围,报告了覆盖范围百分⽐,⾏,⽅法和类。如果深⼊研究类,则可以在该类中看到与该⽅法相同的
信息,如下⾯的屏幕截图所⽰。
JavaJoCoCo–功能级视图
⽽且,如果您深⼊研究⼀种⽅法,则可以看到其中涵盖的内容和未涵盖的内容,如下⾯的屏幕截图所⽰。
JavaJoCoCo–⽂件可视化
就个⼈⽽⾔,我发现报告的结构没有像为其他许多软件包⽣成的报告那样经过深思熟虑。但是,您会得到相同的信息。
Ruby
接下来,让我们看⼀下Ruby。对于Ruby,有。要引⽤软件包的存储库,它是…
…Ruby的代码覆盖率分析⼯具。它使⽤来收集代码覆盖率数据,但是通过提供⼲净的API来过滤,分组,合并,格式化和显⽰这些结
果,使处理结果更加容易,从⽽为您提供了⼀个完整的代码覆盖率套件只需设置⼏⾏代码即可。
考虑到它使⽤Ruby的内置Coverage库,该库可与许多Ruby测试包⼀起使⽤,包括,,和。
但是,据我所知,与其他所覆盖语⾔的代码覆盖率不同,Ruby的内置覆盖率库功能并不丰富。但是,它仍然提供Line,Function,
Method,Class,Branch和Path覆盖范围的分析。
其次,它不会像其他格式那样以XML格式输出报告。但是,它同时⽀持HTML和JSON。但是,您很快就会看到,HTML报告的功能⼏乎
与其他报告⼀样丰富,并且JSON格式既轻巧⼜可扫描。
安装及使⽤
与Ruby中的⼤多数库和软件包⼀样,SimpleCov易于安装。为此,您只需将gem'simplecov',:require=>fal,:group=>:test到您的
Gemfile中,然后运⾏bundleinstall。要使⽤它,只需将以下两⾏添加到⾸选测试框架的配置⽂件中:
require'simplecov'
在开发本⽂的过程中,我将其与RSpec结合使⽤。因此,我将其包含在RSpec⽣成的spec/spec_⽂件的顶部。
报告范例
在运⾏bundleexecrspec或bin/rspec—init,SimpleCov会⽣成⼀组报告(与其他coverage库⾮常相似),并将它们存储在项⽬
的coverage⽬录中。
SimpleCovHTML顶级覆盖率报告
您可以在上⾯的屏幕截图中看到,基于HTML的报告的输出与其他报告⾮常相似。它列出了总体覆盖率⽔平,并显⽰了如何⽣成覆盖率百
分⽐的细分。对于报告中的每个⽂件,它都会列出其覆盖率,测试覆盖的⾏,未覆盖的⾏,等等。
SimpleCovHTML⽂件级覆盖率报告
同样,与其他HTML报表⼀样,您可以单击报表中的任何⽂件,以直观的⽅式查看哪些⾏被测试覆盖,哪些⾏没有漏掉,或者⽤SimpleCov
的术语来说,漏掉了⾏。
⾛
让我们看⼀下Go中的代码覆盖范围。像Go中的许多内容⼀样,代码覆盖⽀持由其内置⼯具之⼀GoCover本地提供。作为Go1.2的⼀部
分发布,Cover⼯作于……
…在编译之前重写软件包的源代码以添加检测,编译和运⾏修改后的源以及转储统计信息。
RobPike在解释说,这与许多报道⼯具所采⽤的⽅法不同,原因是…
…(标准⽅法)难以实施,因为对⼆进制执⾏的分析具有挑战性。它还需要可靠的⽅式来将执⾏跟踪绑定回源代码,这也可能很困
难。问题包括调试信息不正确以及内联函数等使分析复杂化的问题。最重要的是,这种⽅法是⾮常不可移植的。由于调试⽀持在系
统之间存在很⼤差异,因此需要针对每种体系结构以及在某种程度上针对每种操作系统重新进⾏此操作。
Cover以您期望的⽅式分析⽂件,并按Line,Function,Method,Class,Branch和Path覆盖范围进⾏分析。
安装及使⽤
由于GoCover随Go1.2⼀起提供,因此如果您安装了最新版本,它就已经可⽤。要运⾏最基本的覆盖率分析,请在您开发的软件包中运⾏
以下内容:
gotest-cover
对于为本⽂开发,它将以下输出呈现给STDOUT:
PASS
coverage:100.0%ofstatements
/ttermjd/simple-entity0.010s
您可以看到它具有100%的覆盖率。增加复杂性,我们可以通过运⾏以下命令⽣成覆盖率配置⽂件:
gotest-coverprofile=
此命令⽣成收集的统计信息并将其存储在。然后我们可以通过运⾏以下命令分析输出:
gotoolcover-func=
对于存储库中的代码,这将⽣成以下输出:
/ttermjd/simple-entity/:7:tName100.0%
/ttermjd/simple-entity/:11:getName100.0%
total:(statements)100.0%
在这⾥,您可以看到构成代码覆盖率的⾏和⽅法以及归因于它们的覆盖率的百分⽐。最初打印到STDOUT时,该报告还可以通过运⾏以下
命令以HTML格式获得:
gotoolcover-html=
您可以在下图中看到⽣成的报告。与其他图书馆HTML报告⼀样,它显⽰的内容⽤绿⾊覆盖,⽽没有⽤红⾊覆盖。布局略有不同,但最终
结果是相同的。
转到CoverHTML⽂件级别覆盖率报告
结论
因此,这是对当今可⽤的五种最受欢迎的软件开发语⾔的代码覆盖范围的⾼级概述:Go,Python,Ruby,PHP和Java。⽆论是在
分析的深度还是在报告功能上,某些库都具有⽐其他库更多的功能。⽽且,有些⽐其他更容易⼊⼿。
但是,⽆论您使⽤哪种语⾔开发,都拥有⾜够多的代码覆盖⽀持来帮助您评估和提⾼测试质量。
我强烈建议您开始使⽤代码覆盖率分析(如果尚未开始的话),并将其集成到您的持续集成和开发管道中。
您是否使⽤其他库?是否有我未涵盖的功能?在评论中分享您的反馈。
安卓原⽣态系统刷机包
本文发布于:2023-03-05 22:11:13,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678025474150301.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:刷机多少钱.doc
本文 PDF 下载地址:刷机多少钱.pdf
留言与评论(共有 0 条评论) |