Empfohlenes Webinar: Vorstellung von Parasoft C/C++test CT für kontinuierliche Tests und Compliance-Exzellenz | Zum Video

Was ist Unit Testing?

Unit-Tests sind die Praxis, kleine, schnell ablaufende Tests für einzelne Softwarekomponenten zu erstellen, um die Codefunktionalität und die Einhaltung von Sicherheitsstandards zu überprüfen. Unit-Tests sollten kontinuierlich mit jedem Build ausgeführt werden, um schnelles Feedback zu Codeänderungen zu liefern.

Wie funktionieren Unit-Tests?

Umfassendes Unit-Testing-Dashboard

Umfassendes Unit-Testing-Dashboard

Komponententests funktionieren durch Isolieren von Codefunktionen und/oder Prozeduren in einer Quelldatei, um diese kleinen Codeeinheiten einzeln auf Sicherheit und Robustheit zu testen. Um Codefunktionen oder Codeeinheiten zu isolieren, führen Entwickler und Tester Stubbing durch. Ein Stub kann das Verhalten von vorhandenem Code simulieren oder ein vorübergehender Ersatz für noch zu entwickelnden Code sein. Benutzer können die Stub-Ausführung überwachen, um bestimmte Erwartungen zu erfüllen, wie z. B. die Anzahl der Aufrufe an einen bestimmten Stub oder die Reihenfolge der Stub-Aufrufe. Benutzer müssen Erwartungen innerhalb von Testfällen definieren und diese dann nach Abschluss der Testfallausführung überprüfen.

Die Funktionen oder Units umfassen im Allgemeinen Eingaben verschiedener Typen (char, integer, Zeiger) und die Werte können sich bei jedem Aufruf an die Unit unterscheiden. Um die Codeeinheit zu testen, manipulieren Benutzer ihre Eingabewerte, um zu helfen, ein korrektes funktionales Verhalten bei gültigen Eingabewerten sicherzustellen. Die Einheit muss jedoch Robustheit gewährleisten, daher sollte die Eingabe von Werten außerhalb der erwarteten Bereiche, einschließlich Nullwerten, verwendet werden. Dadurch werden Fehler wie Speicherzugriffsverletzungen, Division-durch-Null-Szenarien, Stapelüberlaufbedingungen und andere Sicherheits-, Sicherheits- und Zuverlässigkeitsfehler gelöscht.

Bei der Ausführung von Unit-Tests können Ausgabewerte gesammelt und auf Korrektheit überprüft und Berichte für Audit- und/oder Compliance-Zwecke gespeichert werden. Viele Entwicklungsteams integrieren auch strukturelle Codeabdeckung, um nicht getesteten Code offenzulegen. Zu wissen, dass jede einzelne Codeeinheit getestet wurde und einwandfrei ist, eliminiert Risiken und trägt dazu bei, die Bereitstellung einer qualitativ hochwertigen Anwendung sicherzustellen. Für sicherheitskritische Anwendungen wird üblicherweise eine 100-prozentige Codeabdeckung durchgeführt.

Arten von Unit-Tests

Es gibt drei Arten von Komponententests, die von Softwareteams durchgeführt werden.

1. Manueller Unit-Test

Der Entwickler oder Testingenieur schreibt Testcode, um eine Funktion oder Codeeinheit auf Korrektheit zu prüfen.

2. Automatisierte Unit-Tests

Entwickler können sich auf ein GUI- und Test-Framework verlassen, um die Erstellung von Unit-Tests zu vereinfachen, die Tests zu verwalten und Hunderte bis Tausende von Unit-Tests für Regressionstests wiederzuverwenden.

3. Unit-Tests mit künstlicher Intelligenz

Unit-Tests werden mit einem Klick erstellt, skaliert und verwaltet. KI-gestützte Unit-Tests reduzieren den Zeit- und Arbeitsaufwand für die Erstellung einer umfassenden und aussagekräftigen Suite von Unit-Testfällen erheblich.

Vorteile von Unit-Tests

  • Identifiziert Qualitätsprobleme: Sicherheits-, Sicherheits- und Zuverlässigkeitsmängel.
  • Stellt sicher, dass die funktionalen Anforderungen erfüllt werden.
  • Hilft, die strukturelle Codeabdeckung zu erfüllen.
  • Erfüllt Compliance-Anforderungen.
  • Komponententests werden wiederverwendet, um Code-Regressionen zu beseitigen.
  • Vereinfacht den Debugging-Prozess.
  • Bietet Anwendungsmetriken zu Integrität und Hotspots.

Nachteile von Unit-Tests

  • Unit-Tests erfassen nicht alle Anwendungsfehler.
  • Manuelle Unit-Tests sind zeitaufwändig und arbeitsintensiv.
  • Unit-Tests sind für GUI-Tests nicht sehr geeignet.
  • Ohne Automatisierung ist die Verwaltung von Hunderten von Unit-Tests schwierig.

Warum ist Unit Testing wichtig beim Softwaretesten?

Erledigen Sie Unit-Tests richtig. Whitepaper-Cover

Machen Sie Unit-Tests richtig: Top-Tipps für Java-Entwickler

Whitepaper lesen »

Ist es eine Testmethode oder Testtechnik?

Unit Testing ist mehr als nur eine Testtechnik. Es ist eine Testmethode zum Üben einzelner Einheiten des Quellcodes, die eine hervorragende Möglichkeit bietet, das korrekte Softwareverhalten zu demonstrieren.

Komponententests sind wichtig, weil sie Regressionen in der frühesten Phase der Softwareentwicklung identifizieren, wo sie am billigsten und am wenigsten belastend zu beheben sind. Unit-Tests sind klein und jeder Testfall testet einen kleinen Codebereich, wodurch das Problem einfach und schnell identifiziert werden kann, wenn der Test fehlschlägt.

Komponententests verwenden Mocking und Stubbing, um sich von externen Abhängigkeiten zu isolieren, was bedeutet, dass sie einfach und schnell auszuführen sind und dem Team schnell Feedback liefern. Darüber hinaus lässt sich die Ausführung von Einheitentests in einem CI-Build leicht vollständig automatisieren.

Es gibt auch weniger offensichtliche Vorteile einer Unit-Testing-Praxis. Entwickler, die während des Schreibens von Code proaktiv Unit-Tests durchführen, geben sich selbst die Perspektive, den von ihnen geschriebenen Code durch eine andere Linse zu betrachten. Im Wesentlichen kann der Akt des Komponententests wie eine zusätzliche Codeüberprüfung sein, um sicherzustellen, dass der Code beim ersten Mal korrekt und robust geschrieben wurde.

Entwickler, die darüber nachdenken, wie die Schnittstelle zu ihrem Code von anderen Komponenten verwendet wird, und dann Unit-Tests für diese Szenarien schreiben, übersehen mit geringerer Wahrscheinlichkeit unglückliche Pfade, die in späteren Phasen des Softwaretestens oder schlimmer noch in der Produktion aufgedeckt werden könnten.

Eine bekannte Studie von Capers Jones über die Ökonomie der Softwarequalität zeigt, dass die Behebung eines Fehlers umso kostengünstiger ist, je früher er im Entwicklungszyklus gefunden wird, was im krassen Gegensatz zu den exponentiell steigenden Kosten für die Entdeckung von Fehlern später im Zyklus steht. Infolgedessen ergibt sich ein ROI für die Investition in eine robuste Regressionssuite von Unit-Tests.

Der ROI von Unit-Tests macht sich auch an der geringeren Nacharbeit bemerkbar, die durch die korrekte Implementierung von Anforderungen beim ersten Mal entsteht.

 

Unit-Test-Automatisierung

Automatisierte Unit-Test-Lösungen werden in der Softwareentwicklung eingesetzt, um die Sicherheit und Zuverlässigkeit von Code effizient zu gewährleisten. Durch die schnelle Erstellung und automatische Generierung robuster Unit-Testfälle können Sie die Codequalität durch die Ausführung von Testfällen in jeder plattformübergreifenden, Host-, virtuellen oder Hardware-Zielumgebung sicherstellen. Zu den Unit-Testfunktionen gehören:

  • KI-infundierte Unit-Test-Generierung
  • Multimetrische Codeabdeckungsanalyse (Anweisung, Linie, Verzweigung, Block, Aufruf, Entscheidung, einzelne Bedingung und MC/DC)
  • Ein leistungsstarkes Stub- und Mock-Framework
  • Automatisierte plattformübergreifende Ausführung

Unit Testing ist ein integraler Bestandteil der Softwareentwicklung. Automatisierte Testwerkzeuge, wie sie beim Systemtest verwendet werden, sind sehr nützlich für Entwickler und alle, die Code ausführen.

In Embedded-Entwicklungsumgebungen, in denen Hardware- und Softwaresysteme synchron arbeiten und strenge funktionale Sicherheitsstandards erfüllen müssen, ist Unit-Testing äußerst nützlich.

Das automatisierte Unit-Testing-Framework liefert schnell robuste Regressionstest-Suites. Dies ist später im Lebenszyklus entscheidend, wenn Software-Updates, Patches oder neue Anforderungen implementiert werden.

Durch die Optimierung von Einheiten- und Regressionstests mit Automatisierung sparen Teams Zeit und erreichen eine bessere Abdeckung.

Die Vorteile von Unit-Tests

Isolieren Sie den zu testenden Code

Isolieren Sie die zu testende Einheit mit einem automatisierten Stubbing- oder Mocking-Framework, um den Testumfang klein und auf die zu testende Einheit ausgerichtet zu halten. Zu den Vorteilen gehören 1) Einfacherer Testcode, der einfacher zu erstellen, zu warten, zu verstehen und zu debuggen ist. 2) Führen Sie Testfälle einfacher und schneller aus. 3) Ermutigt Entwickler, über logische Pfade durch den Code und das erwartete Verhalten nachzudenken.

Schnelles Feedback durch kontinuierliche Integration

Die automatisierte Ausführung von Unit-Tests in CI-Builds stellt sicher, dass Entwickler schnelles Feedback zu Codeänderungen erhalten, die sich möglicherweise auf die Zuverlässigkeit und Funktionalität der Anwendung auswirken. Die Testauswirkungsanalyse ist ein Beschleuniger, der die Codeabdeckung nutzt, um die optimale Suite von Testfällen effizient auszuführen, die Codeänderungen vor dem Festschreiben oder Zusammenführen verifizieren.

Automatisieren Sie die Einhaltung sicherheitskritischer Anwendungen

Verbringen Sie weniger Zeit mit der Erfüllung von Branchenanforderungen mit der Automatisierung von Komponententests für sicheren, sicheren und zuverlässigen Code. Suchen Sie nach TÜV SÜD-zertifizierten Lösungen für die Automobilnormen ISO 26262, Bahnnormen EN 50128 und funktionale Sicherheit IEC 61508 für alle ASIL- und SIL-Stufen. Auch Tool Qualification Kits für DO-178B/C sind gut zu finden.

Erzielen Sie eine 100 %ige Abdeckung des Strukturcodes

Unit-Test-Tools helfen Teams, die Unternehmens- und eingebettete Anwendungen entwickeln, indem sie Code gründlich testen und Testdurchläufe und Codeabdeckungsziele erreichen. Für sicherheitskritische Entwicklungen berücksichtigen Unit-Test-Tools alle Coverage-Typen von Anweisung und Verzweigung bis hin zu MC/DC und Objektcode.

Automatisierte Generierung von Unit-Testfällen

Das Erreichen eines robusten Sicherheitsnetzes mit hoher Codeabdeckung durch manuelles Erstellen von Unit-Tests ist ein langer, langwieriger Prozess. Die Testautomatisierung hilft dabei, den Stachel aus der Erstellung so vieler Komponententests zu nehmen, bei denen Entwickler ihre Aufmerksamkeit auf das Testen von komplexem Code und das Auffüllen von Lücken in der Codeabdeckung richten können.

KI-infundierte Unit-Tests helfen dem gesamten Team

Mit automatisierter KI-Unterstützung sind Best Practices für Unit-Tests für das gesamte Team besser zugänglich. Es gibt unerfahrenen Unit-Testern ein besseres Verständnis dafür, wie man gute Unit-Tests schreibt. Es hilft erfahrenen Unit-Testern, Zeit und Mühe zu sparen, indem es aussagekräftige Tests erstellt und gültige Assertionen bereitstellt, die die wahre Funktionalität des Codes testen.

Parasoft Unit Testing Tools für Entwicklungsumgebungen

Geben Sie Ihren Softwareentwicklern die richtigen Testtools an die Hand, um die Produktivität und die Markteinführungsgeschwindigkeit zu steigern.
Die Produktsuite von Parasoft für Unit-Tests ist für die Programmiersprachen Java und C/C++ verfügbar.
Wenn Sie ein Parasoft-Tool implementieren, können Sie sicher sein, dass Ihr neuer Code auch ohne wie erwartet funktioniert
sich negativ auf die bestehende Funktionalität auswirken.

Parasoft C/C++-Testsymbol

C / C ++ - Test

Sammeln Sie die Abdeckung von Unit-Tests, Systemtests, manuellen Tests sowie allen anderen verwendeten Testausführungsmethoden. Parasoft C/C++test unterstützt eine Reihe von Abdeckungsmetriken (Branch, Statement, MC/DC usw.), die Teams in der nativen und anwendungsübergreifenden Entwicklung verwenden können.

Parasoft Jtest-Symbol

Test

Erfassen und überwachen Sie die Codeabdeckung während manueller oder automatisierter Funktionstests, die in Ihrer Java-Anwendung durchgeführt werden. Benutzer können Abdeckungsdaten und Testergebnisse senden, um sie zur Analyse zusammenzuführen und zu korrelieren, was Einblicke in die Testqualität der Anwendung und Ihre Testqualität bietet.

Best Practices für Unit-Tests

Erzielen Sie den besten ROI aus Ihren Unit-Tests mit bewährten Methoden zum Testen von Code. Programmierer, egal ob Anfänger
oder erfahrene Entwickler können diese Best Practices problemlos in datengesteuerte Systeme integrieren
Tests zur Verbesserung der Fähigkeiten für testbaren Produktionscode.

Unternehmensführung

Implementieren Sie proaktive Unit-Tests, um den Erfolg Ihrer Projekte voranzutreiben. Stellen Sie Ihrem Team konkrete Richtlinien zur Verfügung, um den Prozess skalierbar und nachhaltig zu gestalten. Einige vernünftige Richtlinien:

  • Alle Unit-Test-Fehler müssen zeitnah überprüft werden.
  • Alle Komponententests müssen Behauptungen enthalten.
  • Der gesamte neu geschriebene Code muss mit hoher Codeabdeckung gut getestet werden, zum Beispiel beträgt die interne Richtlinie von Parasoft >80 %.
  • Unzuverlässige Unit-Tests müssen entweder stabilisiert oder zeitnah beschnitten werden.

Ausführen

Führen Sie einen täglichen, stündlichen oder kontinuierlichen Integrationsbereitstellungsprozess mit Automatisierung für Unit- und Regressionstests durch. Bieten Sie jedem Teammitglied Überprüfungszugriff auf Testfehlschläge, Testdurchläufe und Codeabdeckungsberichte. Stellen Sie Teams Analysen zur Verfügung, die messen, wie viel Sprint-/Release-modifizierter Code in der Codebasis abgedeckt wurde, damit sie iterativ erreichbare Meilensteine ​​haben.

Schreiben

Beim Schreiben von Komponententests ist es wichtig, Anwendungscode gleichzeitig zu entwickeln, da beides Hand in Hand geht. Während die strikte Einhaltung der testgetriebenen Entwicklung (TDD) aufgrund der Rigidität des Schreibens von Tests vor dem Code ungewöhnlich ist, sollten Entwickler sich bemühen, Testcode zu erstellen, während sie an Funktionen und Fehlerbehebungen arbeiten. Dies stellt sicher, dass Logik und Grenzfälle im Moment sorgfältig berücksichtigt werden und nicht erst im Nachhinein.

Null-Toleranz-Politik

Richten Sie eine Null-Toleranz-Richtlinie für nicht überprüfte Testfehler ein. Testfehler können auf Probleme mit dem Test oder echte Regressionen in der Anwendung hinweisen. In jedem Fall sollten sie sofort angegangen werden. Das Verweilen fehlgeschlagener Tests verwässert den Wert von Komponententests und kann dazu führen, dass echte Probleme im Rauschen untergehen.

Refactoring

Refaktorieren Sie die Tests nach Bedarf, wenn sich der Code ändert. Es ist wichtig, Tests aufrechtzuerhalten, insbesondere wenn sie fehlschlagen. Tests verlieren an Wert, wenn sie nicht aktualisiert werden, wenn sich die Anwendung ändert. Jeder Testfehler kostet Zeit und Geld, um ihn zu untersuchen.

Wie starte ich mit Unit-Tests?

Das Schreiben aussagekräftiger Unit-Tests ist eine Fähigkeit. Für Teams, die neu im Unit-Testing sind, und für erfahrene Teams, die mit den Kosten für die Aufrechterhaltung einer hohen Codeabdeckung zu kämpfen haben, besteht der beste Einstieg darin, automatisierte Unit-Tests in Ihr Unternehmen zu integrieren. Automatisierte Einheiten- und Regressionstests reduzieren den Aufwand für die Testerstellung, -wartung und -ausführung erheblich.

Die Beobachtung, wie die KI Stubs und Mocks konfiguriert, um die zu testende Einheit zu isolieren oder sicherzustellen, dass Behauptungen für das erwartete Verhalten vorhanden sind, hilft Teams dabei, aussagekräftige Einheitentests zu erstellen, die schnell ausgeführt werden, und das Sicherheitsnetz für Codeänderungen bereitzustellen, nach dem sie suchen.

Legen Sie als Nächstes eine Baseline für die Codeabdeckung für Ihre Codebasis fest. Die Codeabdeckung misst, wie viel des Codes von Ihren Komponententests ausgeführt wird.

Screenshot aus dem C/C++test-Testübersichtsvideo. Grafiken, die die verschiedenen Branchen repräsentieren, darunter Luft- und Raumfahrt/Verteidigung, industrielle Automatisierung und Halbleiter.

So funktioniert's

Screenshot eines Parasoft C/C++-Testtestfalls, der die Linienabdeckung zeigt.

Parasoft-Codeabdeckung innerhalb der IDE- und DTP-Dashboard-Berichts- und Analyselösungen.

Zufriedenstellende Codeabdeckung durch Unit-Tests

Das Sammeln und Analysieren von Metriken zur Codeabdeckung ist ein wichtiger Aspekt bei der Bereitstellung von Softwarequalität. Sobald Ihre grundlegende Codeabdeckung bekannt ist, können Geschäftsrisiken durch ungetestete Funktionen bewertet werden, damit Sie sie durch zusätzliche Tests mindern können.

Bei Legacy-Code-Projekten mit unzureichender Codeabdeckung ist es wichtig, die Entwicklungsgeschwindigkeit mit der Risikominderung in Einklang zu bringen. Immerhin handelt es sich um aktive Projekte, die derzeit in Produktion sind.

Hier ist es wichtig, die gesamte Codeabdeckung und die Analyse der modifizierten Codeabdeckung zu messen. Die geänderte Abdeckung gibt an, wie viel Code von Ihren Komponententests zwischen einem Basis-Build und einem Ziel-Build abgedeckt wurde. Dadurch können Sie sich darauf konzentrieren, sicherzustellen, dass neu geschriebener oder geänderter Code eine hohe Codeabdeckung aufweist, sodass Sie in jedem Sprint einen erreichbaren Meilenstein erreichen. Modifizierte Abdeckungsanalysen ermöglichen es agilen Testteams, die Codeabdeckung im Prozess effektiv zu nutzen.

Warum Parasoft?

Parasoft Unit-Testing-Lösungen für Javac und C / C ++ Programmiersprachen automatisieren die Testausführung und Datenerfassung. Unsere Lösungen erstellen automatisch Komponententests, um bei der Testerstellung Zeit und Energie zu sparen. Die Technologie richtet das Unit-Test-Framework ein. Es instanziiert Objekte und konfiguriert Mocks für geeignete Objekte und Methodenaufrufe, die von der zu testenden Methode verwendet werden.

Mit Parasoft ist die alltägliche Arbeit für Entwickler bereits erledigt. Wir bieten nicht nur Assistenten zum Erstellen von Komponententests, sondern auch Inhalte, um den Prozess abzuschließen. Das unterscheidet unsere Lösungen von anderen.

Zusicherungen werden typischerweise manuell implementiert. Wenn Mocking Frameworks verwendet werden, ist eine erhebliche Menge an manueller Codierung erforderlich. Mit Parasoft wird eine kontextbezogene Hilfe in Echtzeit in der IDE des Entwicklers bereitgestellt. Die automatische Unit-Test-Erstellung vervollständigt schnell und effizient den fehlenden Inhalt von Skelett-Unit-Tests, um Mocks, Stubs und Assertions einzuschließen.

Holen Sie das Beste aus Ihrem Unit-Test-Tool heraus.

  • Erstellen Sie Test-Frameworks, instanziieren Sie Objekte und konfigurieren Sie geeignete Mock-Objekte und -Methoden.
  • Führen Sie eine Laufzeitanalyse der Testausführung durch, um Objektwerte hervorzuheben, die sich während des Tests geändert haben, und empfehlen Sie Zusicherungen zur Überprüfung dieser Werte.
  • Identifizieren Sie Methodenaufrufe, die verspottet werden sollten, um den Testcode besser zu isolieren.
  • Erkennen von Systemressourcen, die nach Abschluss des Tests erstellt, aber nicht freigegeben wurden, wodurch möglicherweise eine instabile Testumgebung entsteht.
  • Erfassen Sie die Codeabdeckung und andere Metriken.

Häufig gestellte Fragen

Relevante Unterlagen

Möchten Sie mehr über Testgrundlagen und Testtechniken erfahren? In diesen Ressourcen finden Sie ein ausführliches Tutorial zum Testen von Komponenten.