Android SonarQube Project

by Romell Domínguez

Comenzemos primero configurando nuestro entorno de pruebas.

Las pruebas unitarias fueron trabajadas con SONARQUBE

center

Install SonarQube

Agregar el repositorio maven en el projecto con el classpath del sonarqube:

maven {
        url "https://plugins.gradle.org/m2/"
}
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.3"

En nuestro módulo de la app, debemos usar el de jacoco para el reporte de pruebas como el del sonar para el envio repectivo de los resultados:

apply plugin: "org.sonarqube"

apply plugin: 'jacoco'
jacoco {
    toolVersion = "0.7.5.201505241946"
}

Configure Android Project

Creamos un task para la creación del reporte del cóidgo. Puede ser complicado la configuración si usan flavors pero si es soportado por Gradle:

task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport'])

También creamos un task para la conexión con el sonar, mencionando algunas propiedades:

sonarqube {
    properties {
        ...
        property "sonar.projectKey", "sonar_qube_sample"
        property "sonar.projectName", "SonarQube Sample Ver. 1"
        property "sonar.projectVersion", "1.0.f"
        property "sonar.host.url", "http://localhost:9000"
        ...
    }
}

Ahora configuramos las pruebas: habilitamos las pruebas de coverturas, evitamos que se detenga por verificación de código (problemas críticos) ya que estos lo analizaremos desde el SonarQube, y finalmente indicamos que los reportes tengan el formato jacoco.

android {
    buildTypes {
        debug {
            testCoverageEnabled = true
        }
    }
    lintOptions {
        abortOnError false
    }
    testOptions {
        unitTests.all {
            jacoco {
                includeNoLocationClasses = true
            }
        }
    }
}

Por último creamos un task para realizar el envio más eficiente:

task exportTestRultToSonarqube(dependsOn: ['jacocoTestReport','sonarqube']){
}

SonarQube Server Instance

Para esta demostración se usará la versión 7.2, al inizializarlo mediante:

sh sonar.sh start

En nuestro navegador vemos:

center

center

Nos presentará un dashboard, que puede ser administrado para tener protegido las revisiones, pero por defecto esta permitido publicar resultados

Teniendo todos los componentes funcionando, procederemos a la ejecución de las pruebas, creación y envio del reporte mediante el task exportTestResultToSonarqube:

./gradlew exportTestResultToSonarqube

Cuando el task acabe tendremos la confirmación:

center

En nuestro dashboard, vemos que ya se encuentra los resultados de nuestra pruebas

center

Vemos las primeras métricas: cantidad de bugs, vulneraciones de seguridad, porcentaje de pruebas de covertura, y porcentaje de duplicado

center

Podemos percatarnos el nombre del proyecto y el nombre clave que se encuentra en la url:

center

Sonar, es una herramienta que proporciona una gran variedad de métricas

center

Por último detenemos el sonar en caso se requiera:

sh sonar.sh stop

License

Copyright 2018 Romell D.Z.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

2018, July