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
- 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.
- 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
- si le code est correct
- 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 .