Holen Sie sich die neuesten wichtigen Update-Informationen für die Log4j-Sicherheitslücke. Sehen Sie sich an, wie Sie das Problem mithilfe der Parasoft-Anleitung beheben können. Erfahren Sie mehr >>

X
BLOG

Warum Menschen Unit Testing hassen und wie man die Liebe zurückbringt

Warum Menschen Unit Testing hassen und wie man die Liebe zurückbringt Lesezeit: 4 Minuten
Wir haben den Parasoft Jtest erstellt Unit-Test-Assistent um den Schmerz von Unit-Tests zu lindern, weil wir gehört haben, wie sehr Sie Unit-Tests hassen, aber wir wissen, dass Sie sie brauchen, um erfolgreich zu sein.

Seien wir ehrlich. Niemand macht wirklich gerne Unit-Tests. Ich hatte Leute, die auf Konferenzen mit Geschichten und Geschichten darüber, wie sehr sie es hassen, auf mich zukamen. Und während es einige Leute gibt, die gut darin sind, ist es für die Mehrheit von uns nur ein notwendiges Übel, das trotz der besten und klügsten Beschwerden getan werden muss. Heute werde ich mir einige Gründe ansehen, warum es uns nicht gefällt und wie wir diese Hindernisse mit Software-Automatisierung überwinden können.

Warum also überhaupt Unit-Tests durchführen?

Die meisten Entwicklungsteams sind sich einig, dass Unit-Tests in der Tat wertvoll sind, obwohl sie es nicht mögen. Es hilft Entwicklern dabei, den Code, den sie entwickeln, wirklich zu verstehen, und bietet eine solide Grundlage für die rechts gezeigte kontinuierliche Testpyramide, die es den Teams wiederum ermöglicht, die agile Entwicklung zu beschleunigen und gleichzeitig das Risiko zu verringern, dass Fehler in spätere Phasen des Pipeline.

Ich würde noch weiter gehen und sagen, dass der Prozess der Erstellung von a Software-Einheitentest ist an und für sich eine nützliche Aktivität, die dem Entwickler hilft, seinen Code durch eine andere Linse zu betrachten, im Wesentlichen eine zusätzliche Codeüberprüfung durchzuführen.

Wenn Sie Unit-Tests durchführen, überprüfen Sie die Schnittstelle zur Funktionalität von einem externen Standpunkt aus und profitieren von Fragen wie: Wie wird mein Code verwendet? (was zu einer vereinfachten Schnittstelle und geringeren Kosten für die Codewartung führt) oder Was passiert, wenn ich ungültige Daten erhalte? (was zu robusterem und wiederverwendbarem Code führt).

Wo die Absichten großer Unit-Tests zusammenbrechen

In der Regel führen Entwicklungsteams nur eine minimale Menge an Komponententests durch oder überspringen diese ganz, häufig aufgrund einer Kombination aus (1) dem Druck (und der Zeit, die erforderlich ist), um immer mehr Funktionen bereitzustellen, und (2) der Komplexität und Zeit. Konsumieren wertvoller Unit-Tests.

Dies gliedert sich in einige häufige Gründe, die Entwickler anführen und die die Einführung von Unit-Tests als Kernentwicklungspraxis einschränken:

  • Es ist schwierig, die Abhängigkeiten der zu testenden Einheit zu verstehen, zu initialisieren und / oder zu isolieren.
  • Das Festlegen der zu validierenden Elemente und das Definieren geeigneter Aussagen ist zeitaufwändig und erfordert häufig intelligente „Vermutungsarbeiten“.
  • Es ist viel manuelle Codierung erforderlich, oft sogar mehr als für die Implementierung einer bestimmten Funktion oder Verbesserung erforderlich war.
  • Es ist einfach nicht so interessant ... Entwickler möchten sich nicht als Tester fühlen, sondern Zeit damit verbringen, mehr Funktionen bereitzustellen.

Um diese Einschränkungen zu beseitigen, sind derzeit mehrere Tools verfügbar, die beim Testen von Einheiten helfen können. Unit-Testing- und Assertion-Frameworks bieten standardisierte Ausführungsformate (z. B. Junit) für die nahtlose Integration in die CI-Infrastruktur (z. B. Jenkins, Bamboo, TeamCity). IDEs helfen bei der Erstellung von Testcode (z. B. Eclipse, IntelliJ). Verspottende Frameworks isolieren den Code von seinen Abhängigkeiten (z. B. Mockito, PowerMock). Tools zur Codeabdeckung bieten einen Einblick in den ausgeführten Code (z. B. Emma, ​​Cobertura, Clover). Mit Debuggern können Entwickler die schrittweise Ausführung eines einzelnen Tests überwachen und überprüfen.

Leider haben alle diese Tools Einschränkungen, und Entwickler finden immer noch viele Schwachstellen, wie zum Beispiel die folgenden:

  • Die IDE hilft beim Erstellen eines Skeletts für den Komponententest, jedoch ohne "Inhalt". Der Entwickler muss noch viel Code hinzufügen, um einen ausführenden Test zu erstellen:

  • Zusicherungen müssen manuell definiert und Tests ausgeführt werden, um festzustellen, ob die richtigen Werte bestätigt wurden.
  • Das Verspotten von Frameworks erfordert eine erhebliche Menge an manueller Codierung, um sie zu instanziieren und zu konfigurieren, sowie das Wissen, wie man sie richtig verwendet.
  • Coverage-Tools bieten einen Einblick in den Code, den ein ausgeführter Test abgedeckt hat, aber keinen Einblick in das Laufzeitverhalten des Tests.
  • Debugger können für einen einzelnen Test verwendet werden, skalieren jedoch nicht, um einen gesamten Testlauf zu überwachen.

Zusammenfassend lässt sich sagen, dass die Erstellung des Komponententests noch viel manuellen, zeitaufwändigen und oft nervenaufreibenden Aufwand erfordert, bevor Sie überhaupt damit beginnen, einem Test Geschäftslogik hinzuzufügen.

Die Lösung? Wir haben einen Assistenten erstellt!

Um ein Tool zu entwickeln, mit dem Sie diese Schwachstellen umgehen können, haben wir uns (natürlich) der Automatisierung von Softwaretests zugewandt. Der Unit Test Assistant von Parasoft Jtest ist jetzt verfügbar, damit Sie auf Knopfdruck einen voll funktionsfähigen Unit Test erstellen können.

Mit UTA erstellte Tests sind nur „normale“ JUnits, aber mit all der alltäglichen Arbeit, die für Sie erledigt wird. UTA richtet das Testframework ein, instanziiert Objekte und konfiguriert Mocks für geeignete Objekte und Methodenaufrufe, die von der zu testenden Methode verwendet werden.

Diese JUnits können als Teil Ihres Standard-CI-Workflows genauso ausgeführt werden wie Ihre vorhandenen Tests. Wenn jedoch eine JUnit von UTA ausgeführt wird, einschließlich Ihrer vorhandenen Tests, wird der Test auf eine Weise überwacht, die eine Analyse bietet, die über die bloße Bereitstellung von Code-Coverage-Nummern hinausgeht.

Durch die Analyse des Tests zur Laufzeit kann UTA eine Reihe von Empfehlungen geben, von denen viele enthalten sind schnelle Korrekturen das hilft Ihnen, mit einem Klick Maßnahmen zu ergreifen, wie zum Beispiel:

  • Hervorheben von Objektwerten, die sich geändert haben und bestätigt werden sollten,
  • Identifizieren von Methodenaufrufen, die verspottet werden sollten, um den zu testenden Code besser zu isolieren, und
  • Suchen von Tests, die nicht nach sich selbst bereinigen, und Erstellen einer möglicherweise instabilen Testumgebung (z. B. aufgrund der Verwendung von Threads, externen Dateien, statischen Feldern oder Systemeigenschaften).

Wir haben UTA entwickelt, um die Schmerzen beim Testen von Einheiten zu lindern, da wir als auf die Perfektionierung von Software spezialisiertes Unternehmen wissen, dass das Testen von Einheiten ein wesentlicher Schritt bei der Erstellung von Software ist, die sicher, zuverlässig und von hoher Qualität ist. Ich hoffe, dass ich bei zukünftigen Konferenzen und Veranstaltungen Gespräche mit Ihnen führen kann, bei denen Sie mir nicht erzählen können, wie sehr Sie Unit-Tests hassen, sondern mir von Ihren Erfahrungen mit UTA erzählen können, um die Liebe zurückzubringen.

Um eine kostenlose Demo von Jtest UTA zu erhalten, klicken Sie hier.

TL, DR?

Sehen Sie sich das folgende Video an, um den Unit Test Assistant in Aktion zu sehen:

 

Automatisieren Sie die Erstellung von JUnit-Tests und lieben Sie Unit-Tests

Geschrieben von

Mark Lambert

Mark, Vice President of Products bei Parasoft, ist dafür verantwortlich, dass Parasoft-Lösungen den Unternehmen, die sie einsetzen, einen echten Mehrwert bieten. Mark ist seit 2004 bei Parasoft und arbeitet mit einem breiten Querschnitt von Global 2000-Kunden zusammen, von spezifischen Technologieimplementierungen bis hin zu umfassenderen Initiativen zur Verbesserung von SDLC-Prozessen.

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