Welche Art von Fehlern kann statische Analyse (z. B. Compiler) erkennen und symbolische Ausführung nicht erkennen? und welche Art von Fehlern, die symbolische Ausführung erkennen kann und statische Analyse nicht erkennen kann? Kann die symbolische Ausführung beispielsweise Syntaxfehler erkennen?Fehlererkennung in der statischen Analyse und symbolische Ausführung
Antwort
Kurz gesagt, die statische Analyse ist in der Lage, Codierungsfehler wie schlechte Praktiken zu erkennen. Wenn Sie beispielsweise (unnötig) ein Klassenfeld als public deklarieren, kann ein statisches Analyse-Tool Sie warnen, dass dieses Feld als privat deklariert werden sollte. Der "sauberste" Code ist jedoch nicht unbedingt fehlerfrei. Obwohl in einigen Codes keine Fehler gefunden werden können, kann ein falsches Schließen im Namen des Codierers (später) zu einem Absturz in der Laufzeit führen. Wenn wir beispielsweise sauberen Code entwickeln, um einen Taschenrechner zu implementieren, gibt ein statisches Analysewerkzeug keine Warnung aus. Wenn wir jedoch vergessen, die Eingabe zu verifizieren, um zu verhindern, dass der Benutzer eine Division durch Null versucht, dann ist unser Rechner würde schließlich in der Laufzeit abstürzen.
Auf der anderen Seite führt die symbolische Ausführung (oder Concolic) das Zielprogramm aus, daher haben sie das Potenzial, einen möglichen Laufzeitausführungszustand des Programms zu erreichen, wie zum Beispiel einen durch einen Fehler verursachten Laufzeitfehler. In dem oben beschriebenen Taschenrechnerbeispiel würde die symbolische Ausführung den Laufzeitfehler finden und würde uns auch mitteilen, welche Eingaben einen solchen Fehler induzieren. Um Ihre letzte Frage zu beantworten, ist die symbolische Ausführung nicht dazu gedacht, die Qualität des Codes zu überprüfen.
Idealerweise sollten wir beide vor der Freigabe der Software verwenden.
Vielen Dank für Ihre Antwort. Was passiert, wenn ich das Programm mit Syntaxfehler symbolisch ausführe? – any
Wenn das Programm einen Syntaxfehler hat, kompiliert es nicht, also wie führst du es aus (symbolisch oder nicht)? –
Das ist richtig. Was ist mit der interpretierten Sprache? – any