Bei der statischen Analyse wird eine Software analysiert, ohne sie auszuführen. Dies ist sehr gut und wird empfohlen, aber Sie müssen dies berücksichtigen
- Verschiedene statische Analysewerkzeuge haben ein unterschiedliches Verständnis des Codes, den sie untersuchen, und können daher unterschiedliche Probleme signalisieren (oder nicht signalisieren). Ein Tool kann einen sauberen Bericht erstellen, das andere kann sich über eine Million Dinge beschweren.
- Ein dynamisches Tool (um ein Beispiel zu nennen, denken Sie an Valgrind) kann viele andere Probleme finden, und zwar zum Preis einer ernsthaften Belastung des Ressourcenverbrauchs (Zeit, Speichernutzung). Dies liegt daran, dass Sie normalerweise eine instrumentierte Version der Software ausführen. Beachten Sie, dass es durch eine Instrumentierung (ersetzen Sie Ihr Malloc durch ein Debugging-Malloc) nicht genau mit Ihrer Software identisch ist (wie Sie anhand der Ausführungszeiten sehen können).
Beide Ansätze leiden unter dem Mangel an Kontext: Sie wissen nicht, was der SW erreichen soll.
Die Codeüberprüfung wird von einem anderen Codierer durchgeführt, der sie angeblich kennt und überprüfen kann
- wenn der Code stimmt
- wenn die Software semantisch korrekt ist.
Es ist viel teurer und hat einen unterschiedlichen Grad an Wiederholbarkeit, ist aber eine große Hilfe.
Wie immer gibt es keine einzige Silberkugel, die alle Fehler behebt und alle Probleme vermeidet. Anwenden - so viel wie möglich in Anbetracht des Ortes, des Codes, der Zeit, der drei Arten der Überprüfung (statisch, dynamisch, mehr Augen (und Gehirne), die den Code tatsächlich betrachten) wird empfohlen.
ps: Ich muss beachten, dass es normalerweise viel besser ist, die Werkzeuge von Grund auf neu anzuwenden. Das Konvertieren eines Legacy-Systems ist aufgrund von Fehlalarmen weniger angenehm. Wenn Sie bei Null anfangen und immer darauf abzielen, das Analysetool sauber zu halten, werden Sie wahrscheinlich viele Probleme vermeiden.
pps: Bei Tools hängt es von der Sprache ab. In der C- und C ++ - Welt können Sie zunächst Visual Studio selbst betrachten, das ein integriertes statisches Analysetool enthält. Eine relativ vollständige Liste finden Sie auf Wikipedia.
ppps: Die statische Analyse eignet sich eher für statische Sprachen wie C oder C ++. Für Python kann es sehr schwierig sein zu sagen, ob ein Name, der zu einem bestimmten Zeitpunkt auf eine Liste verweist, aufgrund seiner dynamischen Eigenschaften auf eine Liste für den Rest des Programms verweist. Dies bedeutet nicht, dass nichts getan werden kann, wie eine JIT-Anstrengung wie PyPy zeigt.