Quelle est la différence entre l'analyse de code statique et la révision de code?


9

Je voulais juste savoir quelle est la différence entre l'analyse de code statique et la révision de code. Comment se fait chacun de ces deux? Plus précisément, quels sont les outils disponibles aujourd'hui pour la révision de code / l'analyse statique de PHP? J'aimerais également connaître les bons outils de révision de code pour n'importe quelle langue.


Une révision de code est généralement un processus manuel par lequel un autre programmeur examine votre code. C'est un moyen de repérer les petites erreurs ou écarts par rapport aux conventions de codage, etc., et un bon moyen d'améliorer la qualité globale du code. L'analyse de code statique est quelque chose pour laquelle vous pouvez utiliser un outil, bien que je ne l'ai jamais fait moi-même. Intéressé de voir les réponses des autres

9
En deux mots? "Un cerveau".
MSalters

Réponses:


19

L'examen du code est quelque chose que les gens font, l'analyse statique est quelque chose que les machines font. Il existe (parfois de bons) outils d'analyse statique. La révision du code, c'est quand un collègue / mentor / professeur / ami passe en revue votre code et vous donne une critique constructive.

L'analyse statique est, d'autre part, un processus automatisé dans lequel une machine, informée par ce qu'elle sait du langage qu'elle analyse (généralement à partir du système de type), analyse un programme et essaie de détecter des choses qui pourraient être incorrectes, style inefficace, médiocre ou autrement sous-optimal.


2
J'ai toujours eu l'impression que la révision de code est une sorte d'analyse statique, car c'est un moyen de mesurer la santé du logiciel sans l'exécuter.
Buhb

4
@Buhb: cela ajoute une connaissance cruciale du contexte. Un réviseur de code doit comprendre si le code fait ce que l'on attend de lui. Un outil statique vérifiera (au mieux, si la langue le permet via une décoration / assertion / contrat) que tout va bien formellement ... Donc, vous pourriez le dire autrement: l'analyse statique est une sorte de révision de code, effectuée algorithmiquement.
Francesco

Juste pour ajouter, Lint (analyste statique): Mec qui n'est pas nécessaire !! Collègue (réviseur): Vous pouvez le faire de cette façon aussi !!
Kushal

11

L'analyse statique est le processus d'analyse d'un logiciel sans l'exécuter. Ceci est très bon et recommandé, mais vous devez garder à l'esprit que

  1. différents outils d'analyse statique ont une compréhension différente du code qu'ils étudient, ils peuvent donc signaler (ou ne pas signaler) différents problèmes. Un outil peut donner un rapport clair et l'autre peut se plaindre d'un million de choses.
  2. un outil dynamique (pour citer un exemple, pensez à valgrind) peut trouver bien d'autres problèmes, au prix d'une lourde charge sur la consommation des ressources (temps, utilisation de la mémoire). Il en est ainsi parce que vous utilisez généralement une version instrumentée du logiciel. Notez qu'en étant instrumenté d'une certaine façon (remplacez votre malloc par un malloc de débogage), il n'est pas exactement identique à votre logiciel (comme vous pouvez le voir sur les temps d'exécution)

Ces deux approches souffrent du manque de contexte: elles ne savent pas ce que le sw est censé accomplir.

La révision du code est effectuée par un autre codeur, qui le sait et peut vérifier

  1. si le code est correct
  2. si le logiciel est sémantiquement correct.

Il est beaucoup plus cher et a un degré de répétabilité variable, mais il est d'une grande aide.

Comme toujours, il n'y a pas une seule solution miracle qui corrigera tous les bugs et évitera tous les problèmes. L'application - autant que possible compte tenu de l'endroit, du code, de l'heure, des trois formes de contrôle (statique, dynamique, plus d'yeux (et de cerveaux) regardant réellement le code) est recommandée.

ps: je dois noter qu'il est généralement préférable d'appliquer les outils à partir de zéro. La conversion d'un système hérité est une expérience beaucoup moins agréable, en raison de faux positifs. Si vous partez de zéro et visez toujours à garder l'outil d'analyse propre, vous éviterez probablement beaucoup de problèmes.

pps: comme pour les outils, cela dépend de la langue. Dans le monde C et C ++, vous pouvez commencer par regarder Visual Studio lui-même, qui contient un outil d'analyse statique intégré. Une liste relativement complète se trouve sur Wikipédia.

ppps: l'analyse statique est plus adaptée aux langages statiques, comme C ou C ++. Pour Python, il peut être vraiment difficile de dire si un nom qui fait référence à une liste à un moment donné fera référence à une liste pour le reste du programme, en raison de ses propriétés dynamiques. Cela ne signifie pas que rien ne peut être fait, comme le montre un effort JIT comme PyPy .


2

La révision du code, c'est quand une personne âgée ou une autorité dédiée vérifie votre code, votre façon de coder, les normes suivies dans le code et en particulier le niveau logique du code

En ce qui concerne l'analyse statique, c'est l'analyse de logiciels informatiques qui est effectuée sans exécuter réellement des programmes construits à partir de ce logiciel (l'analyse effectuée sur l'exécution de programmes est connue sous le nom d'analyse dynamique)

La liste des outils selon la technologie est donnée dans le lien ci-dessous

Liste d'outils pour l'analyse statique

Par conséquent, la revue de code et l'analyse statique sont des termes complètement différents.


7
La réponse de l'OM est essentiellement correcte, sauf que je chipote avec 'Une personne âgée ou une autorité dédiée vérifie votre code ...'. Il est vrai que certains magasins dysfonctionnels effectuent des révisions de code de cette manière parent / enfant, de nombreux (et meilleurs) magasins ont un système de révision de code peer-to-peer qui ne ressemble pas à un enseignant évaluant un problème de devoirs. Là où je travaille, il est tout aussi courant pour un junior de revoir le travail d'un senior. L'objectif est d'avoir une deuxième paire d'yeux qui regarde tout le code avant qu'il ne soit enregistré.
Jim In Texas

2
@JimInTexas, même dans notre boutique. Je dirais que le résultat le plus important (à long terme) des revues de code est la diffusion des connaissances, l'unification des pratiques et la vision architecturale / de conception au sein de l'équipe. À cet égard, un junior examinant le code d'un senior est au pire un excellent moyen d'apprendre les meilleures pratiques locales - mais qui dit qu'un senior ne fait jamais d'erreurs et qu'un junior ne peut jamais les repérer?
Péter Török

1

L'examen du code est une évaluation plus qualitative, l'analyse statique du code est une évaluation plus quantitative.

Hé, mon garçon, cette méthode peut être mieux écrite

vs, fe

Diminution des performances. Il est inefficace d'identifier une chaîne vide en utilisant la construction 'wcslen (str)> 0'. Un moyen plus efficace consiste à vérifier: str [0]! = '\ 0'.

Diminution des performances. L'expression du type strlen (MyStr.c_str ()) peut être réécrite en MyStr.length ()

Diminution des performances. Dans le cas où 'Order' est un itérateur, il est plus efficace d'utiliser une forme d'incrémentation de préfixe. Remplacez iterator ++ par ++ iterator.

Alors que de vraies erreurs peuvent (évidemment) exister et être détectées par SCA

Format incorrect. Pensez à vérifier l'argument N réel de la fonction 'Foo'

L'expression a été mise entre parenthèses deux fois: ((expression)). Une paire de parenthèses n'est pas nécessaire ou une faute d'impression est présente

Un appel de la fonction 'memset' entraînera un dépassement de capacité du tampon 'dest.lfFaceName'


désolé de vous insulter. En ce qui concerne ce que mon commentaire (disparu?) Était destiné à dire - savez-vous pourquoi un être humain ne peut pas offrir les mêmes commentaires que vous fournissez comme exemples de sortie de l'analyse de code statique?
sq33G

@ sq33G: Non. Toute personne disposant de fournitures de bureau (quantité pratiquement infinie de papier) peut simuler une machine de Turing arbitraire. Cependant, c'est ennuyeux et long. (Peut-être pas celui donné mais dites des comportements indéfinis en C).
Maciej Piechotka

Ah. La vraie réponse à la question du PO est donc que les machines Turing ne sont pas complètes.
sq33G

0

L'analyse statique est lorsqu'un artefact est analysé sans être exécuté. Bien qu'il puisse être appliqué à n'importe quel artefact, il est souvent appliqué au code source ou au code objet et fait référence à l'utilisation d'outils spécifiques pour analyser et obtenir des informations sur ces produits de travail. Ces outils produisent des rapports qui sont interprétés par un ingénieur pour être utilisés dans la détermination de la qualité du système en construction et comme guide pour planifier le développement et la maintenance. Wikipedia a une liste d'outils d'analyse statique , organisés par langue et avec une brève description de leurs capacités.

Les avis sont une évaluation humaine d'un produit de travail, qui pourrait être du code. Des examens peuvent également être menés sur les dessins ou autres documents. L'idée est que des personnes familières avec le produit de travail autres que le développeur le regardent afin de trouver des erreurs, allant des problèmes de sécurité aux violations de la norme de codage.

Techniquement, une révision de code peut être considérée comme une forme d'analyse statique, car le code n'est pas réellement exécuté pendant la révision. Cependant, dans la terminologie courante, l '"analyse statique" se réfère généralement à l'analyse par ordinateur des fichiers source ou objet tandis que la "revue" indique que ce sont les humains qui font l'analyse.


-2

La révision du code est une technique utile pour détecter très tôt les problèmes de code source. Dans le cadre de cet exercice, de nombreux problèmes tels que les performances, l'évolutivité et les normes de codage ont été identifiés et corrigés. Cela améliorera la qualité du code.

L'analyse statique est utilisée pour analyser des métriques de qualité de code telles que la complexité cyclométrique, l'indice de maintenabilité, la profondeur d'héritage et les couplages de classes. Divers outils disponibles sur le marché pour analyser les qualités du code. Le développeur C # utilise Microsoft Visual Studio pour générer des rapports métriques.


-3

l'analyse de code statique est effectuée par un outil automatisé, la révision du code est effectuée avec des personnes avant la validation du code.

Outils de révision de code:

1. au-delà de comparer

2.le diff du logiciel de contrôle de version

Ces outils sont toujours utilisés pour générer la différence entre l'ancienne version et la nouvelle version.


2
1) Il n'est pas nécessaire que le code soit validé - la révision du code est effectuée par des personnes et 2) Je trouve la description des outils de diff comme outils de révision du code "intéressante", ce sont certainement des outils utilisés pour identifier le code à réviser, mais si On m'a posé des questions sur les outils de révision de code que je signalerais probablement à ceux qui aident à gérer le processus (j'ai utilisé Kiln et Crucible par exemple).
Murph
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.