it-swarm.dev

Wie identifizieren Sie "Edge" -Fälle auf Algorithmen?

Wie finden Sie im Grunde heraus, welcher Fall Ihr schlechtester oder bester Fall sein könnte und welche anderen "Edge" -Fälle Sie möglicherweise haben, bevor Sie sie haben, und wie bereiten Sie Ihren Code für sie vor?

27
Luis Armando

Anhand des Inhalts des Algorithmus können Sie ermitteln, welche Datenstrukturen/-typen/-konstrukte verwendet werden. Dann versuchen Sie, die (möglichen) Schwachstellen dieser zu verstehen und einen Ausführungsplan zu erstellen, der ihn in diesen Fällen zum Laufen bringt.

Beispielsweise verwendet der Algorithmus eine Zeichenfolge und eine Ganzzahl als Eingabe und sortiert die Zeichen der Zeichenfolge.

Hier haben wir:

String mit einigen bekannten Sonderfällen:

  • Leerer String
  • Lange Schnur
  • Unicode-Zeichenfolge (Sonderzeichen)
  • Wenn dies auf einen bestimmten Zeichensatz beschränkt ist, was passiert, wenn einige nicht im Bereich liegen?
  • Zeichenfolge mit ungerader/gerader Länge
  • Null (als Argument)
  • Nicht null beendet

Integer mit bekannten Sonderfällen:

  • Min/MaxInt
  • Negativ positiv

Sortieralgorithmus, der in den folgenden Grenzfällen fehlschlagen könnte:

  • Eingabe leeren
  • 1 Elementeingabe
  • Sehr lange Eingabe (möglicherweise mit maximaler Länge (Datentyp für Index))
  • Müll in der Sammlung, der sortiert wird
  • Null-Eingabe
  • Doppelte Elemente
  • Sammlung mit allen Elementen gleich
  • Eingabe mit ungerader/gerader Länge

Nehmen Sie dann alle diese Fälle und erstellen Sie eine lange Liste, um zu verstehen, wie sie sich überschneiden. Ex:

  • Der leere String-Fall deckt den leeren Sammelfall ab
  • Null string == null Sammlung
  • usw.

Erstellen Sie jetzt Testfälle für sie :)

Kurze Zusammenfassung: Brechen Sie den Algorithmus in Basisblöcke, für die Sie die Grenzfälle kennen, und setzen Sie sie dann wieder zusammen, um globale Grenzfälle zu erstellen

30

Ein "Edge" hat zwei Bedeutungen und beide sind relevant, wenn es um Edge-Fälle geht. Eine Kante ist entweder ein Bereich, in dem eine kleine Änderung der Eingabe zu einer großen Änderung der Ausgabe führt, oder das Ende eines Bereichs.

Um die Edge-Fälle eines Algorithmus zu identifizieren, betrachte ich zunächst die Eingabedomäne. Seine Edge-Werte können zu Edge-Fällen des Algorithmus führen.

Zweitens schaue ich auf die Ausgabedomäne und auf die Eingabewerte, die sie möglicherweise erstellen. Dies ist weniger häufig ein Problem bei Algorithmen, hilft jedoch dabei, Probleme bei Algorithmen zu finden, die eine Ausgabe generieren sollen, die sich über eine bestimmte Ausgabedomäne erstreckt. Z.B. Ein Zufallszahlengenerator sollte in der Lage sein, alle beabsichtigten Ausgabewerte zu generieren.

Schließlich überprüfe ich den Algorithmus, um festzustellen, ob es ähnliche Eingabefälle gibt, die jedoch zu unterschiedlichen Ausgaben führen. Das Auffinden dieser Edge-Fälle ist am schwierigsten, da sowohl Domänen als auch zwei Eingaben erforderlich sind.

2
MSalters

Ich glaube nicht, dass es einen Algorithmus gibt, um Randbedingungen zu bestimmen ... nur Erfahrung.

Beispiel: Für einen Byte-Parameter möchten Sie Zahlen wie 0, 127, 128, 255, 256, -1 testen, alles, was Probleme verursachen kann.

2
Steve Wellens

Dies ist eine sehr allgemeine Frage, also kann ich nur einige allgemeine, vage Ideen wegwerfen :)

-Überprüfen Sie Grenzfälle. Ex. Wenn Sie eine Zeichenfolge analysieren, was passiert, wenn die Zeichenfolge leer oder null ist? Wenn Sie von x nach y zählen, was passiert bei x und y?
- Code, der vereinfacht oder herausgegeben werden könnte. Jede nicht benötigte Komplexität kann zu Problemen führen.

0
seand

Ein Teil der Fähigkeit, Algorithmen zu verwenden, besteht darin, ihre Schwächen und pathologischen Fälle zu kennen. Victors Antwort gibt einige gute Tipps, aber im Allgemeinen würde ich empfehlen, dass Sie sich eingehender mit dem Thema befassen müssen, um ein Gefühl dafür zu bekommen. Ich glaube nicht, dass Sie Faustregeln befolgen können, um diese Frage vollständig zu beantworten. Z.B. siehe Cormen oder Skiena (Skiena hat insbesondere einen sehr guten Abschnitt darüber, wo Algorithmen verwendet werden sollen und was in bestimmten Fällen gut funktioniert. Cormen geht auf mehr Theorie ein, denke ich.) .

0
Steve