Robustness vs Correctness Competition [geschlossen]

17

Das Lesen von "Code Complete 2" in einem Absatz über die Qualität der Anforderungen ergab Folgendes:

Sind akzeptable Kompromisse zwischen konkurrierenden Attributen festgelegt - zum Beispiel zwischen Robustheit und Korrektheit?

(Dies ist ein Punkt einer großen Checkbox-Liste, um die Qualität der Anforderungen zu überprüfen.)

So fand ich viele Definitionen von Robustheit und Korrektheit im Internet, in wissenschaftlichen Büchern usw.

z.B :

Im Buch "Objektorientierte Softwarekonstruktion, 2. Auflage, Bertrand Meyer, Prentice-Hall, 1997":

  • Korrektheit: Der Grad, in dem ein System in Spezifikation, Design und Implementierung frei von [Fehlern] ist.
  • Robustheit: Der Grad, in dem ein System bei ungültigen Eingaben oder stressigen Umgebungsbedingungen weiter funktioniert.

Trotzdem ist nicht klar, warum und in welchen Situationen diese beiden in Konflikt geraten könnten.

Meine Frage ist: Warum stehen diese beiden Attribute im Wettbewerb ?

Überwinder
quelle
11
Verschiedene Bücher definieren diese Begriffe unterschiedlich. (Normalerweise verwenden Bücher, die für normale Programmierer geschrieben wurden, nicht dieselben Definitionen wie wissenschaftliche Veröffentlichungen.) Vielleicht können Sie sich einmal ansehen, wie dieses Buch sie definiert. (Manchmal werden diese Begriffe von Büchern ohne Definition verwendet.)
rwong
Mir ist keine Definition von "robust" bekannt, außer "behandelt alle Arten unerwarteter Eingaben ordnungsgemäß" (zusätzlich zu den funktional erforderlichen Eingaben).
Kaz
Ich habe meine Frage so klar wie möglich bearbeitet, damit sie wieder geöffnet werden kann.
Überwinder

Antworten:

36

Es gibt viele Situationen, in denen diese beiden in Konflikt geraten könnten. Zum Beispiel kann Robustheit Belastbarkeit unter schwerer Last beinhalten. Wenn eine ungefähre (dh falsche) Antwort auf eine Anforderung viel schneller berechnet werden kann als eine genaue (richtige) Antwort, ist es wichtig zu wissen, ob das System ein ungefähres Ergebnis liefern sollte oder die Zustellung insgesamt fehlschlägt.

Kilian Foth
quelle
17

Diese beiden sind nur Beispiele, wie Sie sagten. Tatsächlich können alle nicht funktionalen Anforderungen dieser Art möglicherweise miteinander in Konflikt stehen. In dem Buch "Building Evolutionary Architectures" gibt es eine Tabelle von ungefähr hundert dieser "Fähigkeiten" (wie sie auch oft genannt werden).

Für Softwarearchitekten ist es eine Art Übung, den möglichen Konflikt zwischen diesen beiden zu betrachten. Sie können im Grunde entscheiden, welche davon für Ihre Projekte wichtig sind, und dann diese Konflikte verfolgen.

Um zu Ihrem genauen Beispiel zurückzukehren und einen Blick auf die Definition des Begriffs robustnessin Wikipedia zu werfen :

In der Informatik ist Robustheit die Fähigkeit eines Computersystems, Fehler während der Ausführung [1] [2] und fehlerhafte Eingaben zu verarbeiten.

Wie Sie der Definition entnehmen können, beinhaltet Robustheit Fehler . Andererseits möchten Sie Korrektheit haben, was im Grunde bedeutet, dass keine Fehler vorliegen.

Betrachten wir zur Verdeutlichung des Konflikts ein einfaches Eingabefeld. Aus Gründen der Korrektheit ist es am einfachsten, fehlerhafte Eingaben des Benutzers zurückzuweisen. Robustheit setzt jedoch voraus, dass Sie in der Lage sind, mit dieser Eingabe zu arbeiten, was möglicherweise nicht ganz korrekt ist.

Um es auf Ihr Buch zu übertragen: Was ist der akzeptable Kompromiss jetzt? Angenommen, Sie schreiben eine wissenschaftliche Anwendung, in der der Benutzer einen Spannungswert einschließlich der Größe eingeben kann. Richtige Eingaben wären also etwa "10 kV" oder "200 mV". Akzeptable Kompromisse können das Zulassen von Eingaben wie "10 kV", "10 kVolt" oder sogar nur "10" umfassen und diese der Richtigkeit halber auf einen gültigen Spannungswert abbilden. Beachten Sie, dass dies immer noch ein Kompromiss ist und nicht das "Beste aus beiden Welten". Betrachten Sie Groß- und Kleinbuchstaben: "10 kV" und "10 KV" sind möglicherweise in Ordnung, "10 mV" und "10 MV" jedoch möglicherweise nicht. Richtigkeit wird fraglich, da Sie nicht sicher sind, ob es jetzt Milli oder Mega ist,

Frank
quelle
5

Ein praktisches Beispiel ist XHTML vs. HTML .

  • Browser (im strengen Modus) lehnen XHTML mit Syntaxfehlern ab. Dies stellt sicher, dass dem Benutzer keine falschen Ergebnisse angezeigt werden, und hilft beim Auffinden der Fehler.
  • Browser versuchen, weiterhin HTML-Code zu analysieren, auch wenn es sehr offensichtliche Probleme gibt. Dadurch kann der Benutzer die Seite häufig anzeigen, auch wenn der Inhalt ein wenig unordentlich ist.

Daher strebt XHTML nach Korrektheit, während HTML nach Robustheit strebt. Derzeit scheint HTML populärer zu sein, aber beide Seiten haben gute Argumente.

jpa
quelle