paint-brush
Techniques efficaces d'analyse de code statique pour améliorer la qualité du codepar@launchable
27,163 lectures
27,163 lectures

Techniques efficaces d'analyse de code statique pour améliorer la qualité du code

par Launchable7m2023/03/09
Read on Terminal Reader

Trop long; Pour lire

L'analyse de code statique signifie analyser le code source pour les problèmes sans l'exécuter. Cela contraste avec les tests de code dynamiques, qui lancent l'exécutable et vérifient le comportement correct. Trois techniques comprennent l'analyse de la syntaxe, l'analyse des flux de données et de contrôle et l'analyse de la sécurité. Poursuivez votre lecture pour en savoir plus sur les différents types d'analyse statique et sur la manière d'augmenter son efficacité.
featured image - Techniques efficaces d'analyse de code statique pour améliorer la qualité du code
Launchable HackerNoon profile picture

Comment amplifier l'efficacité de l'analyse de code statique en superposant la sélection de tests prédictifs

La programmation informatique a parcouru un long chemin depuis l'apogée des cartes perforées . Fini le temps où les programmeurs programmaient manuellement une tâche en perçant des trous dans une carte papier, en vérifiant trois fois son exactitude et en espérant que cela fonctionnera lorsqu'ils exécuteront enfin le programme.


ordinateur


Aujourd'hui, les développeurs peuvent obtenir des commentaires sur l'exactitude d'une ligne de code dès qu'ils la saisissent dans leur éditeur de code - bien loin du processus de développement de cartes perforées grâce aux innovations dans le domaine de l'analyse de code statique.


L'analyse de code statique peut identifier et prévenir les problèmes dès le début du processus de développement logiciel, mais non sans risquer de consommer des ressources. Alors que l'analyse de code statique peut être un outil précieux pour améliorer la qualité et la fiabilité des logiciels, vous pouvez augmenter la valeur en effectuant une analyse d'impact des tests et en ajoutant la sélection prédictive des tests.


L'analyse de code statique consiste à analyser le code source pour détecter les problèmes sans l'exécuter. Cela contraste avec les tests de code dynamiques, qui lancent l'exécutable et vérifient le comportement correct.


Les analyseurs statiques utilisent des algorithmes et des ensembles de règles pour identifier les problèmes potentiels, les classer en fonction de leur gravité et de leur impact, et transmettre les problèmes aux développeurs pour les trier et les résoudre.

Poursuivez votre lecture pour en savoir plus sur les différents types d'analyse statique et sur la façon dont vous pouvez augmenter son efficacité en superposant la sélection de tests prédictifs .

Présentation des techniques d'analyse de code statique

Les techniques d'analyse de code statique sont utilisées pour identifier les problèmes potentiels dans le code avant son déploiement, permettant aux développeurs d'apporter des modifications et d'améliorer la qualité du logiciel. Trois techniques comprennent l'analyse de la syntaxe, l'analyse des flux de données et de contrôle et l'analyse de la sécurité.

Analyse syntaxique

L'analyse de la syntaxe consiste à vérifier le code pour les erreurs de syntaxe et les violations des normes de codage, telles que les parenthèses manquantes, les noms de variables non valides et l'indentation incorrecte. La plupart des IDE modernes ont une analyse de syntaxe intégrée. Par exemple, Visual Studio et Visual Studio Code ont une analyse de code intégrée à la fonctionnalité Intellisense. Dans la capture d'écran ci-dessous, Visual Studio 2022 fait apparaître une erreur de syntaxe C # pour un point-virgule manquant avant même que le code ne soit compilé.

erreur de syntaxe

L'analyse de la syntaxe aide les développeurs à détecter les bogues avant même qu'ils n'appuient sur le bouton "Exécuter".

Analyse des flux de données et de contrôle

Cette technique implique le suivi du flux de données à travers le code, afin d'identifier les problèmes potentiels tels que les variables non initialisées, les pointeurs nuls et les conditions de concurrence des données. L'analyse du flux de contrôle est similaire et aide à identifier les bogues comme les boucles infinies et le code inaccessible. De nombreux compilateurs modernes intègrent une analyse de flux de données et une analyse de flux de contrôle. Ils présentent toutes les conclusions sous forme d'avertissements ou d'erreurs au moment de la compilation.


Par exemple, l'ensemble d'outils Clang pour la famille des langages C effectue automatiquement une analyse de flux lors de la compilation. Pour les langages non compilés, tels que Python, vous pouvez utiliser manuellement un outil d'analyse de flux de données et de contrôle tel que CodeQL .

Analyse de sécurité

L'analyse statique de la sécurité implique la vérification du code pour les vulnérabilités de sécurité potentielles, telles que les dépassements de mémoire tampon, les scripts intersites et les attaques par injection. Ils peuvent également analyser vos dépendances tierces à la recherche de packages présentant des vulnérabilités connues et détecter les informations d'identification vérifiées dans votre code source.


Les outils de test de sécurité des applications statiques (SAST) incluent :

Exemple : test de sécurité d'application statique avec SemGrep

SemGrep est un outil d'analyse statique de sécurité des applications gratuit et populaire. L'exécution de l'analyseur de sécurité de SemGrep sur un projet avec un code non sécurisé, comme OWASP Juice Shop , révèle des dizaines de vulnérabilités de sécurité dans le code.


injection séquentielle express

Avantages de l'analyse de code statique : qualité, prévention, coût

  1. Amélioration de la qualité et de la fiabilité du code. L'analyse statique aide les développeurs en aidant à détecter les problèmes plus tôt. Le résultat est un code meilleur et plus fiable.
  2. Identification précoce et prévention des problèmes. Plutôt que de trouver un bogue alors qu'il cause déjà des problèmes aux clients, l'analyse statique peut aider à les trouver avant même d'exécuter le code la première fois.
  3. Efficacité accrue et économies de coûts. Inutile de continuer à réexécuter des tests dans votre suite CI/CD si les développeurs peuvent détecter rapidement les problèmes grâce à l'analyse statique. Cela permet d'économiser sur les coûts de cloud computing et d'accélérer la cadence de développement.

Défis et considérations liés à l'utilisation de l'analyse de code statique

Bien que l'analyse de code statique aide les équipes à détecter les problèmes plus tôt, ce n'est pas une approche parfaite et peut rencontrer des faux positifs, des faux négatifs et est limitée par les outils.

Faux positifs

Si vous demandez à un développeur ce qu'il n'aime pas dans les outils d'analyse statique, vous entendrez sans cesse une réponse : les faux positifs.


Les analyseurs statiques utilisent des heuristiques et des ensembles de règles pour déterminer les résultats dans une ligne de code. Cependant, ils ne sont pas parfaits et produisent fréquemment des résultats qui ne sont pas réellement émis dans le contexte.


Pour la ligne d'exemple de code suivante :

 // Set the password policy so that user passwords expire after 365 days. passwordExpiry = 365;


Un analyseur statique de sécurité peu sophistiqué voit la chaîne « mot de passe » et la signale comme un identifiant dans le code source. Après examen, ce n'est clairement pas un secret et ne nécessite aucun changement de code. Il faut du temps de développement supplémentaire pour enquêter sur ce problème et le signaler comme un faux positif, ce qui peut être frustrant.

Faux négatifs

Le code logiciel peut être complexe et les analyseurs statiques peuvent passer à côté des nuances d'une situation. Par conséquent, vous ne pouvez pas compter sur des analyseurs statiques pour trouver 100 % des bogues que vous écrivez.

Votre environnement cloud possède deux fichiers de configuration de serveur presque identiques : serverprod.config (production) et servertest.config.dev (environnement de test).


Un analyseur statique est configuré pour analyser les fichiers avec l'extension de fichier .config et trouve correctement les problèmes dans serverprod.config , mais il manque les mêmes problèmes dans le fichier servertest.config.dev car cela ne correspond pas à son modèle de nom de fichier.

Utilisation de plusieurs outils et approches

Il n'y a pas un seul outil d'analyse statique qui fait tout. Beaucoup sont spécialisés pour différents environnements, types de fichiers et types d'analyse. Une organisation peut avoir besoin d'un outil pour l'analyse de sécurité, d'un outil différent pour son frontend Typescript, d'un troisième outil pour analyser le backend Golang et d'un autre analyseur statique pour ses fichiers Terraform de configuration de serveur. Chaque outil apporte de la valeur, mais il peut être fastidieux de les configurer et de les entretenir tous.

Outils d'analyse de code statique

Voici quelques-uns des meilleurs outils d'analyse de code statique :

  1. SonarQube : un outil d'analyse de code statique open-source populaire qui prend en charge un large éventail de langages de programmation et s'intègre à divers outils de construction et de déploiement.


  2. Checkstyle : un outil d'analyse de code statique open source qui vérifie les violations de style et de conventions de codage dans le code Java.


  3. FindBugs : un outil d'analyse de code statique open source qui identifie les problèmes potentiels dans le code Java, y compris les problèmes de performances, les vulnérabilités de sécurité et les violations des normes de codage.


  4. PMD : un outil d'analyse de code statique open source qui vérifie les problèmes dans une variété de langages de programmation, y compris Java, C++ et Python.


  5. Veracode : un outil commercial d'analyse de code statique qui offre une gamme de fonctionnalités pour identifier et traiter les vulnérabilités de sécurité dans les logiciels.


  6. Coverity : un outil commercial d'analyse de code statique qui se concentre sur l'identification et la prévention des défauts de sécurité dans le code.


  7. ESLint : Un projet open-source pour aider à trouver et résoudre les problèmes dans le code JavaScript. Si vous utilisez TypeScript, consultez la variante typescript-eslint.


Ces outils offrent une gamme de fonctionnalités, prennent en charge différents langages de programmation et disposent de différents types de licences logicielles. Il est important de tenir compte des licences et des besoins et exigences spécifiques d'une organisation lors du choix d'un outil d'analyse de code statique.

Exemple : analyse de code statique JavaScript avec ESLint

Voici un exemple simple d'analyse de code statique JavaScript à l'aide d'ESLint :


code statique javascript


Cette seule ligne de code présente deux problèmes qu'ESLint détecte rapidement :


  1. Les chaînes doivent utiliser des guillemets doubles
  2. Une variable reçoit une valeur mais n'est jamais utilisée.


En identifiant et en résolvant ces problèmes grâce à l'analyse statique du code, les entreprises peuvent améliorer la qualité et la fiabilité de leurs logiciels. Vous voulez essayer ESLint vous-même ? Vous pouvez utiliser le terrain de jeu ESLint en ligne.

Analyse de code statique et sélection de tests prédictifs

La sélection prédictive des tests est une technique qui utilise l'apprentissage automatique pour analyser les résultats des tests passés et prédire quels tests sont susceptibles d'échouer à l'avenir. Cela peut être utilisé en conjonction avec l'analyse de code statique pour améliorer l'efficience et l'efficacité du processus de test.

L'analyse statique n'est qu'une facette d'une stratégie de qualité logicielle.


La plupart des organisations utilisent l'analyse statique pour augmenter leurs tests logiciels fonctionnels de bout en bout. Les tests d'analyse statique ne sont qu'un des types de tests qui peuvent s'exécuter dans un pipeline CI/CD.


L'une des manières dont Predictive Test Selection peut aider l'analyse de code statique consiste à donner la priorité aux tests de code les plus susceptibles de contenir des problèmes. En analysant les résultats des tests antérieurs et en identifiant les modèles qui sont corrélés à l'échec, Predictive Test Selection peut aider à concentrer l'effort de test sur les zones les plus importantes ou les plus problématiques du code. Cela peut aider à garantir que les problèmes les plus critiques sont identifiés et traités dès que possible, tout en réduisant le temps et les ressources consacrés aux tests inutiles.


Dans l'ensemble, en combinant la sélection prédictive des tests avec l'analyse statique du code, les organisations peuvent améliorer l'efficience et l'efficacité de leur processus de test et garantir la qualité et la fiabilité de leurs logiciels.

Dernières pensées

L'analyse statique est un outil important dans l'arsenal d'une organisation pour maintenir la qualité du code. Il peut réduire les défauts de code et améliorer la maintenabilité, mais peut également être truffé de faux positifs et nécessiter plusieurs outils pour obtenir la couverture dont votre organisation a besoin.


Même avec ces problèmes, l'analyse statique est un aspect important pour toute organisation afin de fournir un code de qualité.


Exécutez une analyse de code statique plus rapide et plus intelligente avec Predictive Test Selection**.** Elle s'intègre parfaitement à votre CI, quel que soit le type de test, la fréquence de validation ou le nombre de branches.


La sélection de test prédictive peut réduire le temps d'inactivité de 70 %. Offrez à vos développeurs une excellente expérience d'analyse statique avec des tests intelligents qui évoluent.