SONAR - 使用 Cobertura 测量代码覆盖率

2024-10-30 08:36:00
admin
原创
42
摘要:问题描述:我正在使用 sonar 来测量代码质量。有一件事我不知道,那就是使用 Cobertura 测量代码覆盖率的步骤。我按照http://cobertura.sourceforge.net/anttaskreference.html中的步骤操作,并能够生成 xml 文件。如何将这些 xml 文件导入 SO...

问题描述:

我正在使用 sonar 来测量代码质量。有一件事我不知道,那就是使用 Cobertura 测量代码覆盖率的步骤。

我按照http://cobertura.sourceforge.net/anttaskreference.html中的步骤操作,并能够生成 xml 文件。如何将这些 xml 文件导入 SONAR?

在 SONAR 中有没有更简单的方法使用 Cobertura?

我在与 SONAR 服务器不同的服务器上运行代码覆盖率 (Cobertura)。两个服务器都在 LINUX 下运行。

谢谢您的帮助!


解决方案 1:

您可以配置 Sonar 任务来上传由构建逻辑的其他部分生成的单元测试和 cobertura 报告。

这与 Maven 形成对比,Maven 具有 Sonar 能够利用的标准构建生命周期。

单元测试和代码覆盖率

以下逻辑使用 cobertura 检测类运行单元测试。最后 cobertura 会生成 XML 覆盖率报告:

<target name="instrument-classes" depends="compile-tests">
    <taskdef resource="tasks.properties" classpathref="test.path"/>
    <cobertura-instrument todir="${instrumented.classes.dir}" datafile="${build.dir}/cobertura.ser">
        <fileset dir="${classes.dir}"/>
    </cobertura-instrument>
</target>

<target name="junit" depends="instrument-classes">
    <junit printsummary="yes" haltonfailure="yes">
        <classpath>
            <path refid="test.path"/>
            <pathelement path="${instrumented.classes.dir}"/>
            <pathelement path="${test.classes.dir}"/>
        </classpath>

        <formatter type="xml"/>

        <batchtest fork="yes" todir="${test.reports.dir}">
            <fileset dir="${test.src.dir}">
                <include name="**/*Test*.java"/>
                <exclude name="**/AllTests.java"/>
            </fileset>
        </batchtest>
    </junit>
</target>

<target name="test" depends="junit">
    <cobertura-report format="xml" datafile="${build.dir}/cobertura.ser" destdir="${cobertura.reports.dir}"/> 
</target>

调用 Sonar

我通常使用一个非常简单的 Sonar 目标:

<target name="sonar" depends="test">
    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml" classpathref="sonar.path"/>

    <sonar:sonar key="${sonar.project.key}" version="${sonar.project.version}" xmlns:sonar="antlib:org.sonar.ant"/>
</target>

并使用属性文件来控制 Sonar 行为的各个方面:

sonar.project.key=org.demo:demo
sonar.project.version=1.0-SNAPSHOT
sonar.projectName=Demo project

sonar.host.url=http://myserver:9000
sonar.jdbc.url=jdbc:mysql://myserver:3306/sonar?useUnicode=true&characterEncoding=utf8
sonar.jdbc.driverClassName=com.mysql.jdbc.Driver
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

sonar.sources=${src.dir}
sonar.tests=${test.src.dir}
sonar.binaries=${classes.dir}

sonar.dynamicAnalysis=reuseReports
sonar.surefire.reportsPath=${test.reports.dir}
sonar.java.coveragePlugin=cobertura
sonar.cobertura.reportsPath=${cobertura.reports.dir}/coverage.xml

演示如何配置 Sonar 以获取 junit 创建的单元测试报告和 cobertura 生成的代码覆盖率报告。

构建不必与 Sonar 在同一台服务器上运行。如果是那样的话,必须提供远程 Sonar URL 和 JDBC 凭据。

解决方案 2:

您必须将这些属性添加到 Sonar 中pom.xml

<properties>
    <sonar.dynamicAnalysis>false</sonar.dynamicAnalysis>
    <sonar.phase>generate-sources</sonar.phase>
    <sonar.surefire.reportsPath>target/reports/test/</sonar.surefire.reportsPath>
    <sonar.cobertura.reportPath>../project/target/reports/coverage/coverage.xml</sonar.cobertura.reportPath>
</properties>

(路径适合您的环境)

然后运行:

mvn sonar:sonar

查看用户列表以了解更多详细信息。

解决方案 3:

如果您使用的是 Maven,则无需在 POM 文件中指定任何特殊内容。只需运行“mvn clean sonar:sonar”,Sonar 就会自动编译您的代码,使用 Cobertura(Sonar 中的默认覆盖率引擎)运行您的测试,并将所有结果推送到数据库中。

如果你使用 Ant [1] 或简单的 java runner [2] 而不是 Maven,情况也是一样。

我确实坚持认为您不必在运行 Sonar 之前手动运行 Cobertura(例如使用 Ant 任务)。

[1] http://docs.codehaus.org/display/SONAR/Analyzing+with+Sonar+Ant+Task

[2] http://docs.codehaus.org/display/SONAR/Analyse+with+a+simple+Java+Runner

Fabrice,SonarSource

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用