Was ist Schleifentest? Methodik, Beispiel
⚡ Intelligente Zusammenfassung
Bei Schleifentests werden die Schleifenkonstrukte innerhalb eines Programms validiert. Dabei wird geprüft, was passiert, wenn eine Schleife übersprungen, einmal betreten, an ihrer Grenze ausgeführt oder einen Durchlauf über die maximal zulässige Anzahl hinaus fortgesetzt wird.
Was ist Schleifentest?
Schleifentest ist eine Art von Softwaretest, der sich ausschließlich auf die Gültigkeit der Schleifenkonstrukte in einem Programm konzentriert. Er ist ein Teilbereich des Kontrollstrukturtests, neben Pfadprüfung, Datenvalidierungstests und Zustandstests.
Schleifentests sind ein White-Box-Tests Diese Technik wird von jemandem angewendet, der den Quellcode lesen und die Schleifenbedingung, den Zähler und den Abbruchpfad erkennen kann. Der Tester spekuliert nicht über das Verhalten anhand der Benutzeroberfläche; die Schleife selbst ist das zu testende Objekt.
Das folgende Diagramm zeigt, wo die Schleifenprüfung innerhalb der Kontrollstrukturprüfung angesiedelt ist.
Getestete Schleifentypen
Bevor Sie eine Strategie auswählen, identifizieren Sie die zu untersuchende Schleifenklasse. Beispiele für getestete Schleifentypen sind:
- Einfache Schleife — eine einzelne Schleife mit einem Eingang und einem Ausgang, wie zum Beispiel eine einfache für , und gleichzeitig die or tun-während konstruieren.
- Verschachtelte Schleife — eine Schleife innerhalb einer anderen, sodass die innere Schleife bei jedem Durchlauf der äußeren Schleife vollständig durchlaufen wird.
- Verkettete Schleife — zwei oder mehr Schleifen, die nacheinander ablaufen.
- Unstrukturierte Schleife — eine ungeplante Kombination aus verschachtelten und verketteten Schleifen, die in der Regel das Ergebnis von Sprüngen in oder aus einem Schleifenkörper ist.
Die Klasse bestimmt den Aufwand. Eine einfache Schleife benötigt nur wenige Iterationsanzahlen; eine unstrukturierte Schleife erfordert in der Regel eine Überarbeitung des Codes, bevor sie überhaupt getestet werden kann.
Warum Schleifentests durchführen?
Schleifentests werden aus folgenden Gründen durchgeführt
- Durch Tests können die Probleme mit der Schleifenwiederholung behoben werden
- Durch Schleifentests lassen sich Leistungs- und Kapazitätsengpässe aufdecken.
- Durch das Testen von Schleifen können die nicht initialisierten Variablen in der Schleife ermittelt werden.
- Es hilft dabei, Probleme bei der Schleifeninitialisierung zu identifizieren.
Es gibt auch einen wirtschaftlichen Grund. Eine Schleife, die eine Iteration zu viel durchläuft, verfälscht das Ergebnis; eine Schleife, die nie terminiert, führt zum Absturz des Prozesses. Beide Fehler lassen sich auf dem Entwicklerrechner kostengünstig finden, im Produktivbetrieb hingegen teuer.
So führen Sie Schleifentests durch: Vollständige Methodik
Beim Testen einer Schleife muss diese auf drei verschiedenen Ebenen überprüft werden:
- Wenn die Schleife betreten wird
- Während der Ausführung und
- Wenn die Schleife verlassen wird
Die Teststrategie für alle diese Schleifen ist wie folgt.
Einfache Schleife
Eine einfache Schleife hat einen einzigen Eingang und einen einzigen Ausgang, wie unten dargestellt.
Eine einfache Schleife wird folgendermaßen getestet:
- Überspringen Sie die gesamte Schleife
- Führe einen Durchlauf der Schleife durch.
- Machen Sie 2 Durchlauf durch die Schleife
- Marke a durchläuft die Schleife, wo a < bDas ist eine typische Iterationsanzahl im mittleren Bereich.
- Marke b, b-1 und b+1 durchläuft die Schleife, wo b ist die maximale Anzahl zulässiger Durchläufe der Schleife.
Die letzten beiden Fälle enthalten den größten Wert. Überspringenping Die Schleife beweist, dass die Abbruchbedingung ausgewertet wird, bevor der Funktionskörper ausgeführt wird, und die bDer Fall +1 beweist, dass die Schleife die Ausführung über ihr deklariertes Limit hinaus verweigert, anstatt ein Array zu überlaufen.
Verschachtelte Schleife
Eine verschachtelte Schleife vervielfacht die Anzahl der möglichen Iterationskombinationen, daher wird sie von innen nach außen getestet, anstatt alle auf einmal.
Für eine verschachtelte Schleife müssen Sie die folgenden Schritte befolgen.
- Setze alle anderen Schleifen auf ihren Minimalwert und beginne mit der innersten Schleife.
- Führen Sie für die innerste Schleife einen einfachen Schleifentest durch und halten Sie die äußeren Schleifen auf ihrem minimalen Iterationsparameterwert
- Führe den Test für die nächste Schleife durch und arbeite dich nach außen vor.
- Fahren Sie fort, bis die äußerste Schleife getestet wurde.
Verkettete Schleifen
Wie das Diagramm zeigt, befinden sich die verketteten Schleifen nacheinander im selben Ausführungspfad.
Bei verketteten Schleifen werden zwei Schleifen, sofern sie voneinander unabhängig sind, mit dem einfachen Schleifenverfahren geprüft; andernfalls werden sie wie verschachtelte Schleifen geprüft.
Wird jedoch der Schleifenzähler der einen Schleife als Anfangswert für die andere verwendet, gelten die beiden Schleifen nicht als unabhängig.
Unstrukturierte Schleifen
Unstrukturierte Schleifen stellen den schwierigsten Fall dar, da die Steuerung an beliebigen Stellen in den Schleifenkörper hinein- und wieder herausspringt.
Bei unstrukturierten Schleifen muss das Design so umstrukturiert werden, dass es die Verwendung strukturierter Programmierkonstrukte widerspiegelt. Sobald der Code auf einfache, verschachtelte oder verkettete Formen reduziert wurde, kommt die oben beschriebene Matching-Strategie zum Einsatz.
Beispiel für Schleifentests mit Testfällen
Ein durchgerechnetes Beispiel verdeutlicht die Anzahl der Iterationen. Betrachten wir eine Routine, die ein laufendes Ergebnis mit jeder ganzen Zahl von 1 bis n multipliziert. n, eine Fakultätsberechnung. Der Schleifenzähler beginnt bei 1, die Abbruchbedingung ist Zähler > nDie Schleife ist so deklariert, dass sie maximal 12 Durchläufe akzeptiert, bevor das Ergebnis den deklarierten Integer-Typ überschreitet.
Wenn man dies als einfache Schleife betrachtet, ergeben sich die oben empfohlenen Iterationszahlen wie folgt: Testfälle.
| Testfall | Wert von n | Pässe ausgeführt | Was es beweist |
| TC01 | 0 | 0 (Schleife übersprungen) | Die Abbruchbedingung wird vor der Ausführung des Algorithmus ausgewertet, und das Ergebnis behält seinen initialisierten Wert von 1 bei. |
| TC02 | 1 | 1 | Ein einziger Durchlauf liefert das korrekte Ergebnis und der Zähler wird einmal erhöht. |
| TC03 | 2 | 2 | Der Akkumulator überträgt einen Wert zwischen zwei aufeinanderfolgenden Durchläufen. |
| TC04 | 5 | 5 | Eine typische Zählung im mittleren Bereich liefert den erwarteten Wert von 120 und bestätigt damit das normale Verhalten. |
| TC05 | 11 | 11 | Ein Durchlauf unterhalb des Maximums wird dennoch normal abgeschlossen (b-1). |
| TC06 | 12 | 12 | Der angegebene Maximalwert wird akzeptiert und die Schleife wird beendet (b). |
| TC07 | 13 | abgelehnt | Ein Durchgang über das Maximum hinaus wird verweigert, anstatt stillschweigend überlaufen zu lassen (b+ 1). |
Beachten Sie, dass TC01 und TC07 die beiden Fälle sind, die Entwickler am häufigsten auslassen, und dass genau diese beiden Fehler wie übersprungene Initialisierung und Überlauf aufdecken. Ein negativer Wert von n gehört in dieselbe Menge, wenn die Spezifikation dies zulässt, was Schleifentests mit negative Prüfung.
Häufige Fehler, die durch Schleifentests gefunden wurden
Bei Schleifentests wird immer wieder dieselbe kleine Fehlergruppe gefunden, weshalb es sich lohnt, die festgelegten Iterationszahlen jedes Mal auszuführen.
- Off-by-one-Grenzen — ein Zustand, der geschrieben wird als < woher <= war beabsichtigt, daher durchläuft die Schleife entweder einen Durchlauf zu wenig oder einen zu viel.
- Nicht initialisierte Zähler oder Akkumulatoren — ein Gesamtbetrag, der einen Restwert aus einem vorherigen Anruf enthält.
- Endlosschleifen — eine Abbruchbedingung, die der Schleifenkörper niemals erfüllen kann, da der Zähler nur in einigen Zweigen aktualisiert wird.
- Annahmen übersprungene Schleifen — Code nach der Schleife, der eine Variable liest, die der Schleifenkörper setzen sollte, was fehlschlägt, wenn die Schleife null Mal durchlaufen wird.
- Kapazitäts- und Leistungsmängel — eine Schleife, die zwar korrekt ist, aber bei jedem Durchlauf die Datenbank erneut einliest, sodass die Kosten mit der Anzahl der Iterationen steigen.
- Verschachtelte Schleifeninterferenzen — eine innere Schleife, die den Zähler der äußeren Schleife wiederverwendet und die Anzahl der Iterationen in der äußeren Schleife stillschweigend ändert.
Da jeder Fehler einer bestimmten Iterationsanzahl zugeordnet ist, lassen sich die hier aufgedeckten Defekte im Vergleich zu Defekten, die bei höheren Iterationszahlen gefunden werden, leicht reproduzieren und schnell beheben. Testniveaus.
Schleifenprüfung im Vergleich zu anderen Prüfverfahren für Kontrollstrukturen
Schleifentests gehören zur Familie der Regelungstechnik und können leicht mit benachbarten Verfahren verwechselt werden. Die folgende Tabelle verdeutlicht die Unterschiede.
| Technik | Was es anvisiert | Typisches Deckungsziel |
| Schleifentest | Schleifenkonstrukte: Eintritt, Iterationszähler und Austritt | Null-, Eins-, typische und Randiterationsanzahlen für jede Schleife |
| Zustandsprüfung | Boolesche Ausdrücke innerhalb von Entscheidungen | Jede Bedingung wurde sowohl auf Wahrheit als auch auf Falschheit geprüft. |
| Datenflusstests | Definition und Verwendung der einzelnen Variablen | Jedes Definition-Anwendungs-Paar wurde mindestens einmal ausgeführt. |
| Basispfadprüfung | Unabhängige Pfade durch den Kontrollflussgraphen | Eine Anzahl von Pfaden, die der zyklomatischen Komplexität entspricht |
In der Praxis ergänzen sich diese Techniken eher, als dass sie miteinander konkurrieren. Zyklomatische Komplexität Es zeigt Ihnen, wie viele unabhängige Pfade existieren, die Basispfadprüfung deckt diese ab, und die Schleifenprüfung fügt dann die Iterationsanzahlen hinzu, die durch die Pfadabdeckung allein nicht erzwungen würden. Alle diese Tests sind dynamisches Testen Aktivitäten, da der Code ausgeführt werden muss, damit Ergebnisse sichtbar werden.
Einschränkung beim Schleifentest
Die Technik hat klare Grenzen, und deren Kenntnis verhindert Überinvestitionen.
- Schleifenfehler treten meist in Low-Level-Software auf
- Die beim Schleifentest identifizierten Fehler sind nicht sehr subtil
- Viele der Fehler könnten vom Betriebssystem erkannt werden, da sie Speichergrenzenverletzungen, erkennbare Zeigerfehler und ähnliche Störungen verursachen.
- Die Identifizierung der Klasse jeder Schleife und das entsprechende Testen kosten Zeit, was bei Codepfaden mit geringem Risiko schwer zu rechtfertigen ist.





