Métriques et Sonar Philippe Collet Licence 3 Informatique – S6 2016-2017 Sonar r Outil open-source n Géré par la société sonar-source depuis 2008 (SonarQube) r Objectifs : n Fournir une analyse complète de la qualité d'un projet de développement à partir de métriques n Evaluer la qualité du code n En connaître l'évolution au cours du développement Ph. Collet 2 Sonar: fonctionnalités principales r Tableau de bord des projets analysés r Détection rapide du code « à risque », des points faibles d’un projet r Mesures quantitatives : nombre de classes, duplication de code, etc. r Mesures qualitatives : couverture et taux de réussite des tests, complexité du code, respect des règles de codage, etc. r Historiques des métriques, fonction « time machine » sur plusieurs versions r Support de plus de 600 règles de qualité, de profils pour les règles de codage, r Visualisation du code source avec les violations détectées Ph. Collet 3 Structure de Sonar r un runner, qui lance des analyse et compile les résultats n Plugin maven, plugin gradle, etc. n Runner stand-alone en Java n Attention, tant que le runner n’est pas de nouveau exécuté, la BD n’est pas mise à jour r une base de données, qui stocke les analyses des projets étudiés r un serveur web pour consulter les données n Par défaut : http://localhost:9000 r des plugins pour intégrer dans les IDE Ph. Collet 4 Installation proposée r Une installation stand-alone de SonarQube n Au moment de ce cours : LATEST = 6.2 r http://docs.sonarqube.org/display/SONAR/Get+Started+in+Two+Minutes Ph. Collet 5 Commande jacoco maven r mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install n (ou « clean package » à la place de install) r mvn sonar:sonar r Références n http://docs.sonarqube.org/display/PLUG/Usage+of+JaCoCo+with+Java+Plugin n http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+ Maven Ph. Collet 6 Plugin softvis3d r http://softvis3d.com/#/download n Copier le plugin téléchargé dans le répertoire Sonar sous « extensions/downloads » n Relancer le serveur n Activer dans « More » sur un projet en particulier Ph. Collet 7 Intégration AndroidStudio / Gradle / Sonar r Gradle (plugin) : https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Gradle r Configuration du scanner dans gradle.properties (optionnel) systemProp.sonar.host.url=http://localhost:9000 systemProp.sonar.login=token r Activation du plugin sonar dans le build.gradle général : buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "org.sonarsource.scanner.gradle:sonarqube-gradleplugin:2.2.1" } } apply plugin: "org.sonarqube" Ph. Collet 8 Intégration AndroidStudio / Gradle / Sonar r Configuration jacoco dans le build.gradle de l’application apply plugin: 'jacoco' r Dans la partie android { … debug { testCoverageEnabled true } } testOptions { unitTests.all { jacoco { includeNoLocationClasses = true } } } Ph. Collet 9 Intégration AndroidStudio / Gradle / Sonar r Toujours dans le build.gradle de l’application sonarqube { properties { property "sonar.sources", "src/main/java,src/main/res" property "sonar.tests", "src/test/java,src/androidTest/java" property "sonar.java.coveragePlugin", "jacoco" property "sonar.jacoco.reportPath", "${project.buildDir}/jacoco/testDebugUnitTest.exec" property 'sonar.jacoco.itReportPath', "${project.buildDir}/outputs/code-coverage/connected/coverage.ec" property "sonar.junit.reportsPath", "${project.buildDir}/testresults/debug" // path to junit reports } } Ph. Collet 10 Intégration AndroidStudio / Gradle / Sonar r Exécution de : r gradle sonarqube r Par exemple après un appel à gradle connectedAndroidTest ou une commande interactive similaire dans AndroidStudio Ph. Collet 11