Blog 3 min de lecture

Tirez le meilleur parti de Cppcheck

Share this article
Tirez le meilleur parti de Cppcheck

L'analyse statique de code est le processus de détection des défauts dans le code source d'un logiciel. Les outils d'analyse statique sont utiles pour détecter les erreurs de codage courantes ; voici quelques avantages de leur utilisation :

  • Rendre le code source plus lisible et plus maintenable.
  • Prévenir les comportements inattendus à l'exécution.
  • Optimiser l'exécution.
  • Rendre le code plus sûr.

Dans le monde du C++, Cppcheck est l'outil le plus populaire pour détecter les problèmes dans votre base de code C++. Il existe plusieurs façons d'explorer les résultats de Cppcheck.

  • Le format XML: des fichiers XML peuvent être générés par Cppcheck, et ils peuvent servir à créer un rapport HTML personnalisé ou être utilisés par un autre outil pour explorer les résultats de l'analyse.
  • Le format HTML: un rapport HTML est un moyen pratique de présenter les problèmes Cppcheck ; il peut être stocké sur un serveur et partagé avec l'équipe.
  • Les plugins d'IDE: de nombreux plugins Cppcheck sont disponibles pour explorer les problèmes directement depuis l'IDE.

Il y a quelques années, nous avons ajouté à CppDepend la fonctionnalité d'importer les résultats d'autres outils et de les interroger depuis CppDepend. Nous avons demandé à Daniel, le développeur principal de Cppcheck, si nous pouvions intégrer son outil dans CppDepend. Il a répondu : « une batterie d'outils vaut mieux qu'un seul outil » — il n'y avait donc aucun problème pour intégrer son outil.

Explorons les possibilités que CppDepend offre aux utilisateurs de Cppcheck :

1. Interroger les problèmes avec CQLinq

L'utilisation de CQLinq permet d'interroger les problèmes comme une base de données. Par exemple, vous pouvez obtenir tous les problèmes Cppcheck :

cppcheck2

Ou obtenir les problèmes les plus fréquents :

cppcheck3

Il est aussi utile d'identifier les classes ayant le plus de problèmes :

cppcheck4

La requête précédente est utile, mais elle ne nous dit pas exactement quelles classes ont la plus mauvaise qualité ; une autre métrique utile à considérer est NBLinesOfCode. Nous pouvons modifier la requête précédente pour calculer le ratio entre le nombre de problèmes et NBLinesOfCode.

cppcheck6

Nous pouvons aussi rechercher les méthodes les plus utilisées qui présentent des problèmes. Les bugs dans de telles méthodes devraient recevoir une priorité de résolution élevée.

cppcheck12

2. Générer les tendances des problèmes

Avoir des problèmes dans un projet n'a rien d'inhabituel ; tout projet peut avoir de nombreux problèmes à résoudre. Cependant, il faut surveiller la tendance qualité du projet. En effet, c'est mauvais signe si le nombre de problèmes augmente au fil des changements et de l'évolution du projet. CppDepend fournit la fonctionnalité de suivi des tendances pour créer des graphiques de tendances.

Les graphiques de tendances sont construits à partir de valeurs de métriques enregistrées au fil du temps pendant les analyses. Plus de 50 métriques de tendances sont disponibles par défaut, et il est facile de créer vos propres métriques de tendances.

Avec ce graphique de tendance, nous pouvons suivre l'évolution des problèmes Cppcheck :

cppcheck7

3. Générer un rapport HTML personnalisé

CppDepend permet d'ajouter au rapport HTML des sections supplémentaires listant certaines requêtes CQLinq. Dans le panneau CQLinq Query Explorer, un groupe de requêtes rapporté est entouré d'un rectangle orange.

cppcheck10

Et dans le rapport HTML, ces sections ajoutées sont accessibles depuis le menu :

cppcheck11

4. Intégrer cppcheck au processus de build

CppDepend introduit la notion de règle CQLinq critique. Les règles critiques représentent un moyen de définir des règles de haute priorité qui ne doivent jamais être violées. Avec les règles critiques, il est possible d'interrompre le processus de build lorsqu'une violation de règle critique se produit.

Une règle critique est simplement une règle CQLinq avec l'indicateur Critical Rule coché :

Pendant le processus de build, lorsqu'une règle critique est violée, le processus CppDepend.Console.exe retourne un code de sortie non nul. Ce comportement peut être utilisé pour interrompre le processus de build si une règle critique est violée.

Nous pouvons facilement définir une règle critique Cppcheck pour interrompre le build si certains types de problèmes Cppcheck sont trouvés.

Résumé

CppDepend est ouvert aux autres outils d'analyse statique, et vous pouvez aussi y brancher facilement votre outil personnalisé, comme décrit ici. De cette façon, vous pouvez utiliser toutes les fonctionnalités de CppDepend pour mieux explorer les résultats des outils d'analyse statique C/C++ bien connus.

Un merci spécial à Daniel pour nous avoir permis d'intégrer son excellent outil dans CppDepend.

Share this article