2009-06-26 9 views
4

Gibt es eine Obergrenze für die Anzahl der Fehler in einem bestimmten Programm? Wenn die Anzahl der Anweisungen bekannt ist, könnte man sagen, dass das Programm nicht mehr als 'n' Fehler enthalten kann? Zum Beispiel, wie viele Fehler könnte die folgende Funktion enthalten?Obergrenze der Fehler in einem bestimmten Programm

double calcInterest(double amount) { 
    return -O.07/amount; 
} 

Ein Parser vier Begriffe in der Funktion zählen würde, und ich diese Fehler zählen kann:

  • falsche Nummer Syntax
  • falschen Zinssatz (Geschäftsanforderungen Fehler)
  • falsche Berechnung (sollte multiplizieren)
  • Potential durch Null teilen

Offensichtlich ist die Anzahl der Fehler bei einer endlichen Anzahl von Anweisungen nicht unendlich. Alternativ könnte man sagen, dass die Funktion 2^64 Eingänge akzeptiert, und von denen, wie viele die korrekte Ausgabe erzeugen. Gibt es jedoch eine Möglichkeit, eine Obergrenze formal nachzuweisen?

+0

Was definieren Sie als eine Anweisung? –

+0

Uhh, es gibt viel mehr als 2^8 = 256 Doppelgänger !? –

+1

Sie verwenden die Wörter "Bug" und "Error" als gleichwertig. Der Parser enthält Syntaxfehler, Laufzeitfehler (Bugs), Logikfehler (Bugs) und Designfehler (Defects). Meine Definitionen stimmen möglicherweise nicht mit Ihren überein, aber die Probleme und ihre Erkennung unterscheiden sich. Wann und was Sie als Fehler zählen, wird die ultimative Antwort auf Ihre Frage ändern. Es gibt mindestens zwei separate "Bug" -Zahlen für Ihre Frage, Fehler im Quellcode, die die Ausführung des Programms stoppen und solche, die zur Laufzeit auftreten. – Paxic

Antwort

4

Wenn der Fehler ist "eine Anforderung, die das Programm nicht erfüllt", dann gibt es keine Begrenzung für die Anzahl der Fehler (pro Zeile oder sonst), da die Anzahl der Anforderungen nicht begrenzt ist.

print "hello world" 

Könnte eine Million Bugs enthalten. Es schafft keinen rosa Elefanten.Ich überlasse es dem Leser, 999999 andere Anforderungen zu stellen, die von diesem Programm nicht erfüllt werden.

+3

"Es schafft keinen rosa Elefanten". Wenn am Ende der Datei kein Zeilenumbruch vorhanden ist, kann * ein * rosafarbener Elefant (undefiniertes Verhalten) erstellt werden. –

0

Es gibt eine theoretische Obergrenze für Bugs, aber für alle außer den trivialsten Programmen ist es fast unmöglich zu berechnen, obwohl engines such as Pex es die alte College-Versuch geben.

+0

Was wäre diese theoretische Grenze? – bdonlan

+1

Sie meinen für Ihre triviale Anwendung? Mal sehen ... wie viele Wege können Sie einen Syntaxfehler haben? –

2

Anzahl der Befehle hat nichts damit zu tun, ob das Programm das tut, was der Benutzer möchte. Ich meine, schau, wie schlecht GCC mein Scheckbuch ausgleicht. Buggy wie alle raus, unten rechts nutzlos!

1

Das hängt alles davon ab, wie Sie einen 'Fehler' definieren.

Wenn Sie ein Programm als eine Funktion von einer Eingabe zu einer Ausgabe definieren, und eine Spezifikation als Definition dieser Funktion und einen Fehler als Unterschied in der Ausgabe von der Spezifikation für eine gegebene Eingabe, dann ja möglicherweise abzählbar unendliche Bugs - aber das ist eine etwas nutzlose Definition eines Bugs.

0

Gesetz der Programmierung:

"If You will find all compile-time bugs, then n logical ones are still hidden, waiting to surprise You at run-time." 
1

Die obere Grenze ist die Anzahl der Zustände Ihr Programm in sein kann, da diese Zahl endlich an realen Maschinen ist, dass Sie die Zustände von 1 bis n zählen könnte.. Für jeden Status, den Sie kennzeichnen können, wenn dieser Status ein Fehler ist oder nicht. Also ja, aber selbst ein kleines Programm mit 16 Bytes Speicher hat 2^128 Zustände und das Problem der Analyse aller verschiedenen Zustände ist unlösbar.

0

Hängt davon ab, wie Sie Fehler zählen, was mich dazu bringt, "nein, keine Begrenzung" zu sagen. Ich weiß nicht über dich, aber ich kann leicht schreiben mehrere Bugs in der gleichen Zeile Code. Zum Beispiel, wie viele Bugs sind in diesem Java-Code? :-P

public int addTwoNumbers(int x, String y) 
{{ 
    z == x + y; 
    return y; 
} 
0

So wenig wie eins, wenn der Bug signifikant genug ist.

Verwandte Themen