Erfahren Sie, wie die Continuous Quality Platform von Parasoft dabei hilft, Testumgebungen zu steuern und zu verwalten, um zuverlässig hochwertige Software zu liefern. Für Demo registrieren >>

BLOG

Verwenden von Stubs beim Testen auf Integrationsebene

Verwenden von Stubs beim Testen auf Integrationsebene Lesezeit: 5 Minuten
Vor einigen Monaten hat sich einer unserer großen Kunden, der an einem sicherheitskritischen Projekt gemäß IEC 61508 arbeitet, an uns gewandt, um Hilfe bei der Optimierung der Produktivität der Entwickler zu erhalten. Das Problem, mit dem der Kunde konfrontiert war, war auf das Rauschen in den Testergebnissen zurückzuführen, die von Entwicklern generiert wurden, die gleichzeitig an Unit-Testfällen arbeiteten und Stubs für die Anforderungen ihrer spezifischen Testszenarien konfigurierten.

Wir haben erfahren, dass die Art und Weise, wie unser Kunde seine Unit-Tests durchführte, eher den Integrationstests entspricht. Dabei werden die getesteten Einheiten nicht von abhängigen Komponenten (anderen Dateien im Projekt) isoliert, und Unit-Testfälle werden für die fast vollständige Anwendung ausgeführt, sodass alle Aufrufe zwischen Funktionen in den Projekten beim Unit-Test genauso verdrahtet werden wie in der Produktion baut.

Dieser Ansatz ist kein „klassischer“ Unit-Test, da er sich stark vom Testen auf Integrationsebene leiht. Dennoch ist es sehr effizient, um eine gute Testabdeckung für Anforderungen und Quellcode zu demonstrieren.

Weitere Einzelheiten zu Unit-Tests finden Sie unter parasoft.com/solutions/unit-testing

In diesem Prozess werden Stubs nur hinzugefügt, wenn ein bestimmtes Testszenario simuliert werden muss, normalerweise eine Fehlerinjektion. Nehmen Sie zum Beispiel den folgenden Code:

Zu Beginn der Funktion gibt es eine if-Anweisung, die testet, ob der Puffer für Samples erfolgreich zugewiesen wurde. Die meisten Testfälle für diese Funktion wurden ohne Stubs implementiert, da sie sich auf den „regulären“ Kontrollfluss konzentrieren, mit Ausnahme des Testfalls, der das Verhalten der Funktion überprüft, wenn die Pufferzuordnung fehlschlägt. Dieser Testfall erfordert einen Stub für die Funktion allocateSampleBuffer, um den Fehler zu simulieren.

Sobald der Stub hinzugefügt wurde, wird er konsistent für den getesteten Code angewendet. Ein Benutzer, der am Testfall "Zuordnungsfehler" arbeitet, hat jetzt eine einfache Möglichkeit, eine spezielle Rückruffunktion in den Stub zu installieren, die den gewünschten Effekt simuliert (Zuordnungsfehler oder nichts tun, da der Stub standardmäßig einen Nullzeiger zurückgibt, der wird für den Testfall erwartet). Alle anderen Testfälle erfordern jedoch derzeit Aufmerksamkeit, da eine Stub-Konfiguration hinzugefügt werden muss, um unerwünschte Änderungen im Kontrollfluss zu vermeiden.

Natürlich können Entwickler zurückgehen und ihren Testfall neu konfigurieren, um den Stub zu berücksichtigen. Dies bedeutet jedoch zusätzlichen Zeitaufwand für die Analyse der Fehlerursache, die Vorbereitung einer dedizierten Rückruffunktion für den Stub und die Beseitigung des Rauschens im Testprozess das Hauptanliegen des Kunden, als er uns kontaktierte.

Deshalb haben wir eine spezielle Option für Stubs in hinzugefügt Parasoft C / C ++ testDie Version 10.4.3 erleichtert das Generieren von automatischen oder Benutzer-Stubs erheblich. Die neue Option ist an zwei Stellen verfügbar:

  • Für automatisch generierte Stubs: Testkonfiguration -> Ausführung -> Symbole (Registerkarte)

  • Für User-Stubs (und auch Auto-Stubs): Bedienfeld „Stubs-Einstellungen“ in der Stubs-Ansicht

Mit den "Aufruf zur ursprünglichen Funktion einfügen" Option aktiviert, Parasoft C / C ++ test Ändert die Standardmethode, mit der die Stubs generiert werden. Die Änderung erfolgt in einem Stub-Verhalten, wenn kein Rückruf installiert ist. Der mit der neuen Option generierte Stub fungiert als Proxy und ruft die ursprüngliche Funktionsdefinition auf, es sei denn, der Benutzer stellt eine testfallspezifische Rückruffunktion bereit, mit der alternative Aktivitäten ausgeführt werden sollen. Stubs, die ohne die neue Option generiert wurden (einschließlich älterer Stubs), versuchen in der Standardsituation nicht, das ursprüngliche Symbol aufzurufen. Wenn keine testfallspezifische Rückruffunktion installiert ist, führt der Stub nichts aus und gibt lediglich einen Standard zurück ”Wert, z. B. ein Nullzeiger oder ein numerischer Nullwert.

Um sicherzustellen, dass der Unterschied klar ist, möchte ich die Situation schnell mit der vergleichen "Aufruf zur ursprünglichen Funktion einfügen" Option sowohl aktiviert als auch ohne, für den Fall, dass der Benutzer keinen dedizierten Rückruf bereitgestellt hat:

  • Hier ist ein Stub, der für generiert wurde Schmiere Funktion, ohne die "Aufruf zur ursprünglichen Funktion einfügen" Möglichkeit. Es funktioniert folgendermaßen:

  • So sieht es für denselben Stub aus, für den generiert wurde Schmiere Funktion, aber diesmal mit   "Aufruf zur ursprünglichen Funktion einfügen" Option aktiviert:

Wie Sie sehen können, sind mit der neuen Option hinzugefügte Stubs für den getesteten Code transparent und führen einfach den Proxy-Aufruf zur ursprünglichen Definition aus, es sei denn, jemand stellt einen Rückruf bereit, der die gewünschte alternative Aktion implementiert.

Ein erfahrener Ingenieur wird hier wahrscheinlich eine Frage stellen wie: „Ok, aber was passiert, wenn keine ursprüngliche Definition für die Stubbed-Funktion verfügbar ist? Wie verhält sich der Stub in diesem Szenario, wenn ich keinen Rückruf bereitstelle, der das alternative Verhalten definiert, und keine ursprüngliche Definition verfügbar ist? “

Das Schöne an dieser neuen Funktionalität ist, dass diese Art von Situation automatisch erkannt wird und der Stub sich zum Zeitpunkt der Erstellung des Testkabels neu konfiguriert, um nicht die ursprüngliche Definition aufzurufen, wenn kein Rückruf installiert ist, sondern einen sicheren Standardwert zurückzugeben Wert.

Diese neue Funktionalität reduziert die Interferenz zwischen verschiedenen Teammitgliedern bei gleichzeitiger Bearbeitung der Testfälle bei dieser Art von „Semi-Integration“ -Tests erheblich. Ein von Entwickler A hinzugefügter Stub ändert das Verhalten des getesteten Codes für die von Entwickler B hinzugefügten Testfälle nicht. Wenn Entwickler B entscheidet, dass er für einen der Testfälle eine alternative Aktion für die Stubbed-Funktion konfigurieren muss, kann er diese einfach erstellen Eine testfallspezifische Rückruffunktion, die die gewünschte alternative Logik für die Stubbed-Funktion implementiert und diesen Rückruf als Teil der Testfallkonfiguration im vorhandenen Stub installiert.

Einheitliche Entwicklungstests für C- und C ++ - Anwendungen

Geschrieben von

Miroslaw Zielinski

Zu den Spezialitäten von Miroslaw, dem Produktmanager für die eingebetteten Testlösungen von Parasoft, gehören C / C ++, RTOS, statische Code-Analyse, Komponententests, Verwaltung der Softwarequalität für sicherheitskritische Anwendungen und Einhaltung der Sicherheitsstandards durch die Software.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.