Blog 4 min de lecture

Découvrez un plugin SonarQube flexible pour C/C++, basé sur CppDepend

Share this article
Découvrez un plugin SonarQube flexible pour C/C++, basé sur CppDepend

CppDepend et SonarQube sont tous deux des analyseurs statiques qui offrent un système de règles pour détecter les problèmes dans le code C/C++. Cependant, l'ensemble de règles par défaut de CppDepend n'a que très peu de recoupements avec les règles de SonarQube.

Fondamentalement, les règles SonarQube sont douées pour analyser ce qui se passe à l'intérieur d'une méthode — le flux du code — tandis que le modèle de code CppDepend, sur lequel reposent les règles CppDepend, est optimisé pour une vue à 360° des aspects de plus haut niveau : POO, dépendances, métriques, changements cassants, mutabilité, nommage…

Concrètement, les règles SonarQube peuvent signaler des problèmes comme une référence potentiellement nulle, tandis que CppDepend peut vous avertir de classes ou de composants trop complexes et vous conseiller sur la manière de refactoriser pour rendre le code plus propre et plus maintenable. Un autre point qui rend le système de règles de CppDepend unique, c'est la facilité d'écriture des règles personnalisées. Avec CppDepend, une règle est une requête LINQ qui interroge un modèle de code dédié à la qualité du code, éditée en direct dans Visual Studio, et compilée et exécutée en direct au fil de vos modifications. Concrètement, le morceau de code ci-dessous est une règle pleinement fonctionnelle — pourrait-on faire plus simple ?

// <Name>Les classes doivent commencer par un I</Name>
warnif count > 0 
Application.Types.Where(t => t.IsClass && !t.SimpleName.StartsWith("C"))

Lorsqu'on définit une règle personnalisée avec CppDepend, l'utilisateur n'a pas besoin de créer un projet, de créer un fichier source, d'entrer dans le cycle édition/compilation/débogage, ni de maintenir une DLL binaire qui demande des efforts pour être partagée, versionnée et intégrée. Avec CppDepend, les règles personnalisées sont du texte brut, intégré en XML CDATA dans le projet CppDepend ou dans les fichiers de règles. De plus, la documentation et les conseils de correction peuvent être intégrés au code source de la règle sous forme de commentaires.

En outre, chaque règle CppDepend peut présenter ses problèmes avec des données supplémentaires qui vous aident à comprendre le problème et à le corriger. Qui plus est, chaque règle peut embarquer deux formules qui tentent d'estimer à la fois le coût de correction du problème et coût annuel de non-correction du problème, également appelés dette technique et intérêt annuel du problème. Comme ces formules s'appuient sur ce qui compte vraiment lors de la correction d'un problème, elles rendent les estimations de dette plus significatives.

Enfin, avec CppDepend, chaque règle s'exécute en quelques millisecondes, même sur une grande base de code. Par conséquent, toutes les règles peuvent s'exécuter en quelques secondes (typiquement 2 ou 3 secondes sur une base de code réelle), aussi bien dans Visual Studio que dans le système d'intégration continue. Ainsi, après chaque compilation et au moment du commit, le développeur connaît instantanément les problèmes nouveaux et corrigés depuis la ligne de base, ainsi que leur impact en termes de dette technique résolue ou introduite. Voyons maintenant comment intégrer les résultats des règles CppDepend dans le système SonarQube pour combiner les forces des deux produits.

I - Prérequis du plugin C/C++

II - Installation et configuration du plugin

    • Copiez sonar-cxx-plugin-cppdepend-1.0 depuis $CppDependInstallDir$/SonarPlugin vers le répertoire $SonarQubeInstallDir$\extensions\plugins et redémarrez SonarQube.
  • Les règles CppDepend par défaut sont chargées dans le référentiel de règles de SonarQube. Cependant, si vous avez besoin de personnaliser ces règles, vous pouvez définir vos propres règles personnalisées en utilisant le chemin du fichier .cdproj situé sous l'onglet Administration de SonarQube.
  • Vous devez vous connecter en tant qu'administrateur et activer les règles CppDepend dans le profil de votre choix.
  • Exécutez $CppDependInstallDir$/SonarRunnerForCppDepend.exe "le fichier .cdproj à analyser". Par exemple : SonarRunnerForCppDepend.exe C:\MyWorkspace\test.cdproj. SonarRunnerForCppDepend analysera le fichier cdproj avec CppDepend et lancera l'exécutable SonarQube Scanner pour charger les résultats dans SonarQube. Tout autre argument passé à SonarRunnerForCppDepend après l'argument du fichier cdproj sera transmis à la commande SonarScanner. Par exemple, vous pouvez passer la version avec cette commande : SonarRunnerForCppDepend.exe C:\MyWorkspace\test.cdproj -Dsonar.projectVersion=3.0

III - Fonctionnalités du plugin

    • Analyse multi-modules : un projet CppDepend peut contenir de nombreux projets C/C++. Après l'analyse, CppDepend ne place pas tout le code dans le même module SonarQube ; il crée à la place un projet SonarQube multi-modules pour isoler chaque projet dans un module distinct, ce qui facilite grandement la navigation dans le code.
    • Problèmes : CppDepend fournit plus de 250 règles par défaut, que vous pouvez facilement personnaliser entièrement. CppDepend offre un moyen puissant de calculer la dette technique des problèmes. La dette technique et la sévérité des problèmes de CppDepend sont transmises à SonarQube.
    • Métriques standard : le plugin calcule toutes les métriques standard de SonarQube.
    • Duplication de code : les duplications sont détectées par l'outil CPD intégré à SonarQube.
  • Couverture : le plugin charge les résultats de couverture depuis les fichiers de résultats XML de Cobertura et de Microsoft Visual Studio. Cependant, vous devez définir le chemin où se trouvent les fichiers XML de couverture.

Conclusion

Le plugin SonarQube C/C++ est facile à installer et à utiliser, et la personnalisation des règles est très simple. Vous pouvez l'essayer et nous faire part de vos retours.

Share this article