Blick auf Abschnitt 3.1 (OOM):
OOM Prüfung durch Simulation OOM Fehler erreicht wird. SQLite ermöglicht eine Anwendung anstelle einer Alternative malloc() Implementierung mit der sqlite3_config (SQLITE_CONFIG_MALLOC, ...) Schnittstelle. Die TCL und TH3 Test Kabelbäume sind beide in der Lage Einfügen einer modifizierten Version von malloc(), die nach einer bestimmten Anzahl von Zuweisungen manipuliert werden kann manipuliert werden. Diese instrumentierten mallocs können so eingestellt werden , nur einmal zu scheitern und dann wieder zu arbeiten, oder nach dem ersten Fehler weiterhin fehlgeschlagen. OOM-Tests werden in einer Schleife durchgeführt. Bei der ersten Iteration der Schleife ist das instrumentierte malloc auf der ersten -Zuordnung fehlgeschlagen.Dann wird eine SQLite-Operation durchgeführt und die Überprüfung erfolgt unter . Stellen Sie sicher, dass SQLite den OOM-Fehler korrekt verarbeitet hat. Dann wird der Zähler auf dem instrumentierten malloc um eins erhöht und der Test wird wiederholt. Die Schleife wird fortgesetzt, bis der gesamte Vorgang vollständig ausgeführt wird, ohne jemals auf einen simulierten OOM-Fehler zu stoßen. Tests wie dieser werden zweimal ausgeführt, einmal mit dem instrumentierten malloc, das nur einmal fehlschlägt, und erneut mit dem instrumentierten malloc-Set , um kontinuierlich nach dem ersten Fehler fehlzuschlagen.
Beachten Sie, dass Abschnitt 7 ausdrücklich 100% Kernabdeckung angibt, wie von GCOV bestimmt. Ich stimme mit Donal Fellows überein, dass das Testframework größtenteils für die Testabdeckung verantwortlich ist, die über das hinausgeht, was ein Anrufdiagramm vorschlagen würde. Es ist eine viel andere Sache zu sehen malloc() eingegeben nn mal und schreiben Sie einen Test dafür, als es ist Dutzende von Tests zu schreiben simuliert, um Umgebungen zu simulieren, wo malloc() wahrscheinlich fehlschlagen wird.
Ja, die resultierende Abdeckung ist ein Artefakt der Sorgfalt, jedoch ist auch die Auswahl eines Test-Frameworks, das diese Art von Sorgfalt ermöglicht.
Schließlich, wiederholen Sie die offensichtliche, nimmt malloc()
nur einen einzigen void Zeiger. Dies legt nahe, dass die Tests, die um sie herum geschrieben wurden, durch bewusstes Design erstellt wurden und nicht automatisch generiert wurden.
Zum Vergleich: 45 MLOC ist ungefähr so groß wie Windows XP. Natürlich, wie ich unten argumentiere, ist es einfacher, eine Zeile mit Testcode zu schreiben (und sie überlebt bis zum heutigen Tag), als eine Produktionscodezeile zu schreiben, und sie überlebt bis zum heutigen Tag. Wahrscheinlich enthält der "Testcode" für XP alle Codezeilen in Office 95, 98 und 2000 :-) –