安卓原⽣态系统刷机包_代码覆盖⽣态系统的库和软件包
安卓原⽣态系统刷机包
如果您已经编写测试驱动的代码已有⼀段时间了,那么您将了解代码覆盖率(也称为测试覆盖率)。 如果您不熟悉该术语,这⾥有两个简短的定义。 :
⼀种度量,⽤于描述特定测试套件运⾏时程序源代码的执⾏程度。
,代码覆盖范围…
…帮助您到未测试代码的哪些位。 经常运⾏覆盖⼯具并查看这些未经测试的代码是值得的。
如果您还不熟悉代码覆盖率并将其⽤作测试过程或 ,强烈建议您学习⼀下。 话虽如此,今天我将开始⼀个分为两部分的系列⽂章,介绍代码覆盖率⼯具。
在第⼀部分中,我将逐步介绍针对当今可⽤的五种最受欢迎的软件开发语⾔的⼯具。 这些是PHP , Python , Go , Java和Ruby 。
在第⼆部分中,我将逐步介绍四个在线服务,涵盖它们提供的功能,其⼯作⽅式的概述以及各⾃⽅法的⼀些差异。
为了使⼯具的涵盖范围变得有意义,我为每种语⾔创建了⼀个⼩型存储库,其中包含⼀个适度的⽤户实体以及相应的五种语⾔的测试套件。这样,您将看到的测试输出应该更有意义。 我要强调的是,代码不会改变世界,但是⾜以让每个⼯具都有基本的感觉。
这是到五个存储库的快速链接:
PHP
我将从PHP开始,因为这是我⽬前花费最多时间开发的语⾔。 如果您花了很多时间在PHP上,那么您将知道提供代码覆盖率的候选⼈是 。
PHP的资深测试框架已经存在了很长时间。 PHPUnit通过其组件提供了代码覆盖⽀持,并利⽤了 。 代码覆盖率报告可以⽣成为HTML和XML⽂件,并且⽀持的报告格式为 , 和PHPUnit。
报告本⾝⽀持以下指标:
线,函数和⽅法,类和特性,操作码,分⽀和路径覆盖
变更风险反模式(CRAP)指数
根据圈复杂度和⼀个代码单元的代码覆盖率来计算。 不太复杂并且具有⾜够测试覆盖率的代码将具有较低的CRAP索引。 通过编写测试和重构代码以降低其复杂性,可以降低CRAP索引。
ant安装包
另外,借助docblock批注,PHPUnit⽀持忽略特定代码块的功能,例如⽆法测试的代码块或要从代码覆盖率分析中忽略的代码块。
例如,您可以使⽤@codeCoverageIgnore批注指⽰应忽略类,函数或⾏。 另外,您可以使
⽤@codeCoverageIgnoreStart和@codeCoverageIgnoreEnd忽略⼀段代码。
您也可以使⽤批注指⽰功能与⼀种或多种⽅法有关。
例如,假设我们在PHP User实体中有另⼀个名为getUserDetails ,该⽅法返回所有User的详细信息。 当然,它们的名称将成为其详细信息的⼀部分。 鉴于此, getName与该⽅法有关。 因此,我们可以添加注释@covers User::getUserDetails以显⽰测试getName与测
试getUserDetails 。
因此,您可以看到PHP的代码覆盖⾯⾮常⼴泛,可以准确指⽰测试中包含哪些内容。
运⾏报告
假设可以将PHPUnit作为项⽬依赖项并安装了XDebug扩展,则可以通过以下两种⽅式之⼀⽣成代码覆盖率报告。
可以在命令⾏中将选项传递给PHPUnit的调⽤,例如通过运⾏:
phpunit --coverage-html tests/coverage
可以在“⽇志记录”部分中配置PHPUnit的配置⽂件l.dist,以指定必要的选项,如以下⽰例所⽰:
<logging>
<log type="coverage-html" target="test/coverage/report" lowUpperBound="35"
highLowerBound="70"/>
<log type="coverage-clover" target="/l"/>
<log type="coverage-php" target="test/coverage/coverage.serialized"/>
<log type="coverage-text" target="php://stdout" showUncoveredFiles="false"/>
<log type="junit" target="test/l" logIncompleteSkipped="false"/>
<log type="testdox-html" target="test/coverage/testdox.html"/>
<log type="testdox-text" target="test/"/>
</logging>
报告范例
在下图中,您可以看到HTML报告的⽰例。 在顶部,您可以看到表格报告,其中显⽰了有关⽂件(或⽂件夹)的可⽤覆盖范围指标; 在这种情况下,为SimpleEntities/src/User.php 。
类级别PHPUnit代码覆盖率
您会看到它涵盖了类 , 特征 , 函数 , ⽅法和⾏ 。 您可以看到类构造函数和两个⽅法setName和getName具有100%的覆盖率。
作为进⼀步的验证,在表格报告下⽅,您可以看到突出显⽰的代码。 除⼀⾏外,其余所有⾏均为绿⾊,这表⽰该⾏代码的执⾏已通过测试。 黄⾊表⽰最后的代码⾏。 另外,还有红⾊,表⽰该⾏尚未测试。
Python
为了在Python中⽣成代码覆盖率报告,您可以将多个Python测试库与结合使⽤。
,Coverage.py⾸先运⾏⼀个或多个代码⽂件来了解代码中执⾏了哪些⾏。 在此阶段,它运⾏⼀个跟踪函数,该函数在执⾏时记录每个⽂件和⾏号。
执⾏完成后,它将检查执⾏的代码以确定可以运⾏哪些⾏。 完成这两个步骤后,根据检索到的信息,它会⽣成⼀个报告,以可视化⽅式显⽰运⾏的内容和未运⾏的内容。
与许多Python库⼀样,如果您使⽤的是Linux发⾏版,则可以使⽤包管理器进⾏安装,也可以通过pip进⾏安装。 与⼤多数其他库相似,C overage.py可以⽣成HTML和XML⽂件格式的报告。
由于它使⽤跟踪功能提取信息以⽣成报告,因此将其与任何其他测试库⼀起使⽤⾮常简单。
安装和运⾏报告
在 ,我使⽤了来创建⼀组简单的单元测试。 要运⾏测试套件,我将使⽤命令python setup.py test 。
要⽣成代码覆盖率报告,⾸先必须调⽤coverage run并将您要分析的python代码传递给它。 为此,我
将运⾏coverage run setup.py test ,它将使Coverage.py执⾏并分析我的测试套件。 之后,覆盖率信息将可⽤,因此我现在可以运⾏coverage report ,该报告将覆盖率报告打印到STDOUT中。
这是⼀个看起来像的例⼦:
[simple-entity] coverage report
Name                          Stmts  Miss  Cover
-------------------------------------------------
entities/__init__.py              0      0  100%
entities/tests/__init__.py        0      0  100%
entities/tests/test_user.py      12      1    92%
entities/user.py                  9      0  100%
-------------------------------------------------
TOTAL                            21      1    95%
您可以看到报告中包含四个⽂件。 总共有95%的代码覆盖率,因为entities/tests/test_user.py仅具有92%的代码覆盖率。 该测试适合与⽂本扫描⼯具⼀起使⽤,但不如HTML报告灵活。 这是HTML报告的⽰例:
如您所见,类似于PHPUnit报告,它显⽰了类中的语句数量,测试运⾏了多少,未运⾏了多少以及排除了多少。
Java
使⽤Java开发代码时,可以使⽤和 。
该项⽬的⽂档指出JaCoCo是Java的免费代码覆盖库,由EclEmma团队创建。 JaCoCo应该为基于Java VM的环境中的代码覆盖率分析提供标准技术。 重点是提供⼀个轻量级,灵活且⽂档齐全的库,以与各种构建和开发⼯具集成。
JaCoCo⽀持以下⽅⾯的报告:
指令范围
分⾏覆盖
圈复杂度
单独的⾏(对于已使⽤调试信息编译的类⽂件)
包含⾄少⼀条指令的⾮抽象⽅法
课堂报道
⽽且,它可以与各种构建和开发⼯具集成在⼀起,包括Ant,Maven, , 和 。
JaCoCo⽀持以XML , HTML和CSV格式创建报告。 由于Java⽐⼤多数语⾔要复杂得多,并且⽐动态语⾔要复杂得多,因此有很多⽅法可以将JaCoCo与所选的应⽤程序结合使⽤。
相反,我将介绍如何使⽤运⾏测试套件。
安装Maven并在l中创建新项⽬后,如果添加以下插件配置,则在从命令⾏调⽤man test时可以⽣成报告。
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>4.12</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>post-unit-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<!-- Sets the path to the file which contains the execution data. -->
<dataFile></dataFile>
<!-- Sets the output directory for the code coverage report. -->
<outputDirectory>target/jacoco-ut</outputDirectory>
</configuration>
</execution>
</executions>
<configuration>
<systemPropertyVariables>
<jacoco-agent.destfile></jacoco-agent.destfile>
</systemPropertyVariables>
</configuration>
</plugin>
此配置将JoCoCo 4.12作为项⽬插件加载,并将target/jacoco-ut为⽣成报告的⽬录。
如果打开target/jacoco-ut/index.html ,那么您将看到⼀个顶级报告,如下图所⽰,这与其他语⾔HTML报告⾮常相似。
Java JoCoCo –顶层视图
这显⽰了顶级实体和⽂件夹的覆盖范围,报告了覆盖范围百分⽐,⾏,⽅法和类。 如果深⼊研究类,则可以在该类中看到与该⽅法相同的信息,如下⾯的屏幕截图所⽰。
Java JoCoCo –功能级视图
⽽且,如果您深⼊研究⼀种⽅法,则可以看到其中涵盖的内容和未涵盖的内容,如下⾯的屏幕截图所⽰。
Java JoCoCo –⽂件可视化
就个⼈⽽⾔,我发现报告的结构没有像为其他许多软件包⽣成的报告那样经过深思熟虑。 但是,您会得到相同的信息。
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 => false, :group => :test到您的Gemfile中,然后运⾏bundle install 。 要使⽤它,只需将以下两⾏添加到⾸选测试框架的配置⽂件中:
require 'simplecov'
SimpleCov.start
在开发本⽂的过程中,我将其与RSpec结合使⽤。 因此,我将其包含在RSpec⽣成的spec/spec_helper.rb⽂件的顶部。
报告范例
在运⾏bundle exec rspec或bin/rspec —init ,SimpleCov会⽣成⼀组报告(与其他coverage库⾮常相似),并将它们存储在项⽬
的coverage⽬录中。
SimpleCov HTML顶级覆盖率报告
您可以在上⾯的屏幕截图中看到,基于HTML的报告的输出与其他报告⾮常相似。 它列出了总体覆盖率⽔平,并显⽰了如何⽣成覆盖率百分⽐的细分。 对于报告中的每个⽂件,它都会列出其覆盖率,测试覆盖的⾏,未覆盖的⾏,等等。
SimpleCov HTML⽂件级覆盖率报告
同样,与其他HTML报表⼀样,您可以单击报表中的任何⽂件,以直观的⽅式查看哪些⾏被测试覆盖,哪些⾏没有漏掉,或者⽤SimpleCov 的术语来说,漏掉了⾏。
让我们看⼀下Go中的代码覆盖范围。 像Go中的许多内容⼀样,代码覆盖⽀持由其内置⼯具之⼀Go Cover本地提供。 作为Go 1.2的⼀部分发布,Cover⼯作于……
…在编译之前重写软件包的源代码以添加检测,编译和运⾏修改后的源以及转储统计信息。
Rob Pike在解释说,这与许多报道⼯具所采⽤的⽅法不同,原因是…
…(标准⽅法)难以实施,因为对⼆进制执⾏的分析具有挑战性。 它还需要可靠的⽅式来将执⾏跟踪绑定回源代码,这也可能很困难。 问题包括调试信息不正确以及内联函数等使分析复杂化的问题。 最
重要的是,这种⽅法是⾮常不可移植的。 由于调试⽀持在系统之间存在很⼤差异,因此需要针对每种体系结构以及在某种程度上针对每种操作系统重新进⾏此操作。
Cover以您期望的⽅式分析⽂件,并按Line , Function , Method , Class , Branch和Path覆盖范围进⾏分析。
安装及使⽤
由于Go Cover随Go 1.2⼀起提供,因此如果您安装了最新版本,它就已经可⽤。 要运⾏最基本的覆盖率分析,请在您开发的软件包中运⾏以下内容:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。