Erhöhen Sie den ROI für Komponententests durch die automatische Erstellung von Komponententests
Von Kapil Bhandari
22. März 2018
6 min lesen
Die automatische Unit-Test-Erstellungstechnologie von Parasoft Jtest beseitigt Hindernisse für Unit-Tests und automatisiert die alltäglichen Aspekte von Unit-Tests, einschließlich Erstellung, Isolierung, Verspottung und Wartung.
Die meisten Entwicklungsteams sind sich einig, dass Unit-Tests, obwohl sie es nicht mögen, in der Tat äußerst wertvoll sind. Trotz der vielen Tools, die bei der manuellen Testerstellung helfen, erfordert das Erstellen und Verwalten von Komponententests immer noch viel manuellen, zeitaufwändigen und oft nervenaufreibenden Aufwand, bevor einem Test Geschäftslogik hinzugefügt wird. Daher führen Entwicklungsteams trotz der Absicht, großartige Unit-Tests durchzuführen, in der Regel die erforderliche Mindestmenge an Unit-Tests durch oder überspringen sie insgesamt.
Entwickler haben gesprochen
Eine kürzlich durchgeführte Kundenumfrage ergab, etwas erwartet, dass Testerstellung, Mocking/Isolierung und Wartung Schlüsselprobleme sind, die dem Erfolg von Unit-Tests im Wege stehen. Abbildung 1 zeigt die Ergebnisse dieser Umfrage und zeigt die wichtigsten Bedenken, mit denen sich Entwickler identifizieren Unit-Tests in Java.
Abbildung 1: Die Umfrageergebnisse zeigen wichtige Problembereiche (Prozent), die sich aus Unit-Tests ergeben.
Um diese Hauptprobleme anzugehen, können wir uns automatisierten Softwaretests zuwenden. In diesem Blog zeige ich Ihnen, wie man es benutzt Parasoft Jtest Automatisierung der Testausführung und Datenerfassung sowie automatische Erstellung von Komponententests, um Zeit und Energie bei der Testerstellung zu sparen. Parasoft Jtest's Technologie zur automatischen Erstellung von Komponententests Richtet das Testframework ein, instanziiert Objekte und konfiguriert Mocks für geeignete Objekte und Methodenaufrufe, die von der zu testenden Methode verwendet werden. Es werden regelmäßige JUnits erstellt, mit denen die alltägliche Arbeit erledigt wird, sodass sich Entwickler darauf konzentrieren können, menschliche Intelligenz und Logik auf ihre Tests anzuwenden.
Vorteile von Unit-Tests und warum Entwickler sie immer noch vermeiden
Unit-Tests sind iterativ und in agilen Prozessen haben Unit-Tests eine gute Erfolgsbilanz bei der Verbesserung der Projektergebnisse. Und natürlich ist es erwiesen, dass Tests zu einem früheren Zeitpunkt im Lebenszyklus der beste Weg sind, um teure und zeitaufwändige Fehler auf Systemebene später zu erkennen und zu beseitigen. Im Folgenden sind einige der wichtigsten Vorteile von Unit-Tests aufgeführt:
- Agilität für agile Prozesse: Agile Prozesse hängen von effizienten, wiederholbaren und automatisierten Testsuiten ab, um sicherzustellen, dass nicht jede Iteration in einem „Big Bang“ -Testzyklus festsitzt. Der Erfolg von Agile und DevOps hängt in hohem Maße davon ab, dass Entwicklungsteams Testsuiten erstellen, die effizient ausgeführt werden können, und so viele Funktionen wie möglich testen.
- Verbesserte Qualität und Sicherheit: Softwareteams wissen, dass das Testen der einzige Weg ist, um sicherzustellen, dass Software das tut, was erforderlich ist. Teams führen jedoch häufig nicht genügend Tests durch oder führen dies zu spät im Entwicklungslebenszyklus durch. Insbesondere die Sicherheit muss frühestens in eine Anwendung integriert werden, sodass die Sicherheitstests so früh wie möglich durchgeführt werden müssen.
- Kosten langfristig senken: In der veröffentlichten Software gefundene Softwarefehler können 1000-mal teurer sein als während der Entwicklung. Fehler, die in frühen Codierungsphasen bei Unit-Tests gefunden wurden, sind viel billiger als die später gefundenen. Kurzfristige Investitionen in die Testautomatisierung und die Unit-Test-Infrastruktur zahlen sich in besserer Produktqualität, Sicherheit und pünktlicher Lieferung aus.
Ungeachtet dieser Vorteile haben Entwickler trotz des Wunsches nach besseren Ergebnissen immer noch Probleme mit Unit-Tests. Diese Kämpfe, die auch durch die obigen Umfrageergebnisse veranschaulicht werden, umfassen Folgendes:
- Das Erstellen von Tests ist zusätzliche Arbeit und oft mühsam: Verständlicherweise ist das Testen von Einheiten zusätzliche Arbeit und wird oft als der am wenigsten wünschenswerte Aspekt der Programmierung angesehen. Die Erstellung einer umfassenden Testsuite bei gleichzeitiger Einhaltung der Projektziele und -fristen ist ein konkurrierender Druck für Entwicklungsteams.
- Testwartung ist teuer: Unit-Tests müssen wie Code gewartet werden. Jede Codeänderung kann zu Änderungen in den zugehörigen Tests führen. Darüber hinaus können Tests, die aufgrund von Änderungen an der Codebasis fehlschlagen, scheinbar nicht miteinander zusammenhängen, was zu einer Instabilität der Testsuite führt. Zusätzliche Wartung führt in den Köpfen vieler Entwickler zu „doppelter Arbeit“.
- Zu testende Verspottungs- und Isolationseinheiten sind schwierig und zeitaufwändig: Es ist wichtig, zu testende Einheiten zu isolieren, dies erfordert jedoch das Verspotten von Abhängigkeiten, was ein zeitaufwändiger Prozess sein kann.
Softwareentwicklungsteams müssen diese Probleme mit der Erstellung, Isolierung und Wartung von Tests angehen, wenn sie die Vorteile gründlicher Komponententests nutzen möchten. Die Lösung ist die Automatisierung. Parasoft Jtest's Tool zur automatischen Erstellung von Komponententests Bietet die Unterstützung, die für die Erstellung und Wartung von Tests erforderlich ist, während Sie in der IDE des Entwicklers arbeiten und vorhandene Test- und Verspottungs-Frameworks nutzen.
Reduzieren Sie die Belastung durch automatische Testerstellung
Das Erstellen von Komponententests ist mühsam und lenkt die Aufmerksamkeit von den interessanteren Teilen eines Projekts ab. Der Code selbst wiederholt sich und erfordert häufig genauso viel Aufwand wie der zu testende Code. Darüber hinaus muss der Unit-Test-Code selbst wie jeder Code repariert und debuggt werden. Glücklicherweise eignen sich Unit-Tests gut für die Automatisierung, und die automatische Anleitung durch ein Unit-Test-Tool kann die Testerstellung erheblich vereinfachen, das Debuggen und Korrigieren reduzieren und Ergebnisse und Metriken sammeln, um Projektanalysen zu unterstützen.
Über die IDE hinausgehen
Viele IDEs bieten beispielsweise Assistenten zum Erstellen von Komponententests für JUnit an, bieten jedoch keinen „Inhalt“, um den Vorgang abzuschließen. Zusicherungen müssen manuell definiert werden, und wenn Spott-Frameworks verwendet werden, ist ein erheblicher Teil der manuellen Codierung erforderlich. Stattdessen bietet Parasoft Jtest kontextsensitive Echtzeitunterstützung in der IDE des Entwicklers. Mit der automatischen Erstellung von Komponententests wird der „Inhalt“, der in einfachen Skelett-Komponententests fehlt, wie Sie schnell und effizient abgeschlossen Nutzen Sie Ihr Unit-Test-Tool um Folgendes durchzuführen:
- Erstellt ein Testframework, instanziiert Objekte und konfiguriert geeignete Scheinobjekte und -methoden
- Führt eine Laufzeitanalyse der Testautomatisierungsausführung durch, um Objektwerte hervorzuheben, die sich während des Tests geändert haben, und empfiehlt Zusicherungen für die Überprüfung dieser Werte.
- Identifiziert Methodenaufrufe, die verspottet werden sollten, um den zu testenden Code besser zu isolieren
- Erkennt Systemressourcen, die nach Abschluss des Tests erstellt, aber nicht freigegeben wurden, und erstellt möglicherweise eine instabile Testumgebung
- Sammelt Codeabdeckung und andere Metriken
Schauen wir uns ein Beispiel an, um dies zu beheben. Hier, Parasoft JtestDer Unit Test Assistant wird mit einer IDE aufgerufen, um parametrisierte Tests zu erstellen:
Das Tool erstellt den folgenden Unit-Test-Code. Zu diesem Zeitpunkt vervollständigt der Entwickler die Parameter nach Bedarf:
Um Testfälle für verschiedene Parameterwerte zu erstellen, bietet der Unit Test Assistant von Parasoft Jtest einen Testfall-Assistenten:
Und du bist weg.
Reduzieren Sie die Verspottungskomplexität
Unit-Tests implizieren die Isolierung des zu testenden Objekts, was bei vielen Abhängigkeiten einen angemessenen Arbeitsaufwand erfordert. Auch bei spöttischen Frameworks wie Mockito or PowerMockEs ist immer noch eine erhebliche manuelle Codierung erforderlich. Mit einem automatisierten Testassistenten-Tool können Sie Abhängigkeiten erkennen und die für das Framework erforderlichen Details automatisch eingeben.
Das Tool selbst analysiert den zu testenden Code, erkennt automatisch Abhängigkeiten und gibt Empfehlungen an den Entwickler.
Hier führen wir beispielsweise den folgenden Komponententest der Klasse IWorkspaceClass aus:
Abhängigkeiten werden zur Laufzeit erkannt, und das Tool empfiehlt, die gefundenen Abhängigkeiten zu verspotten:
Wenn Sie mit dem Tool „Mock It“ auswählen, wird beim Unit-Test der erforderliche Verspottungscode generiert. Sobald dieser Code generiert wurde, kann er angepasst werden, um bei Bedarf die richtige Logik darzustellen. Durch die automatische Erkennung von Abhängigkeiten und die anschließende Erstellung von Verspottungscode wird der manuelle und möglicherweise fehleranfällige Codierungsaufwand für das Verspotten von Objekten erheblich reduziert.
Durch Automatisierung reduzierte Wartung der Testsuite
Die Wartung von Testsuiten überlappt einen Großteil der für die Testerstellung erforderlichen Arbeit, z. B. das Erstellen neuer Tests, das Ändern von Tests an die zugrunde liegende Logik, das Verspotten von Abhängigkeiten, das Ausführen von Tests und das Überprüfen. Die Unterstützung durch den Unit Test Assistant von Parasoft Jtest während der Testwartung ist ebenso wertvoll wie während der Erstellung, da er ein aktualisiertes Feedback zu den Ergebnissen der Laufzeitanalyse liefert, die während der Testausführung erfasst wurden. Beispielsweise wird zur Laufzeit eine neue Abhängigkeit in einem zu testenden Objekt erkannt, und das Tool fordert den Entwickler auf, damit umzugehen.
Ebenso wichtig ist in dieser Phase die Sicherstellung, dass die Aussagen weiterhin gültig sind. Der Parasoft Jtest Unit Test Assistant bietet Empfehlungen, mit denen Änderungen im Code erkannt und Zusicherungen aktualisiert werden können, um die neue Geschäftslogik widerzuspiegeln.
Maximierung des Nutzens vorhandener Tools
Java-Entwickler, die bereits Unit-Tests durchführen, verwenden wahrscheinlich JUnit und möglicherweise ein Assertion-Framework für ihr Projekt, z. B. Mockito oder PowerMock. Testautomatisierungstools müssen diese vorhandenen Tools nutzen, da durch das Ersetzen einer vorhandenen Investition in Unit-Tests Kosten- und Zeitvorteile vermieden würden. Der Unit Test Assistant von Parasoft Jtest lässt sich nahtlos in diese vorhandenen Tools integrieren, was von entscheidender Bedeutung ist.
Fazit
Unit-Tests haben klare Vorteile, und obwohl die meisten Entwicklungsteams dies erkennen, werden viele durch die Bemühungen, Tests zu erstellen und zu warten, behindert. Die Verwendung automatisierter Unit-Testing-Technologien von Parasoft Jtest hilft Benutzern dabei, diese Hindernisse zu beseitigen und die alltäglichen Aspekte des Unit-Tests zu automatisieren, einschließlich Erstellung, Isolierung, Verspottung und Wartung. Um die Adoption zu beschleunigen, Parasoft Jtest nutzt die vorhandenen Investitionen des Entwicklungsteams in Test- und Verspottungs-Frameworks und gibt dem Entwickler Zeit zurück, während die Qualität des Produkts wiederhergestellt wird.