Ich werde bald ein 10min Grok-Referat über Unit Testing in meiner Firma machen. Ich habe es selbst versucht und fühle, dass es dem Unternehmen sicherlich Vorteile bringt. Wir führen bereits WebInject-Tests in unserem dedizierten QA-Team durch, aber ich möchte versuchen, Einheitentests an die Entwickler zu verkaufen.
Also mit nur 10 Minuten, was würden Sie abdecken und warum?
Unit Testing dreht sich alles um Vertrauen .
Damit können Sie sicher sein, dass Ihr Code solide ist und dass sich andere darauf verlassen können, wenn sie ihre eigenen Teile eines Systems schreiben. Wenn Sie über diese Einheit hinwegkommen, werden Tests dazu beitragen, die Beklemmung zu beseitigen, die mit der ersten Veröffentlichung eines neuen Systems einhergeht. Ich hoffe, dass Ihr Publikum bald sehr interessiert wird.
Ich würde mit einem Problem beginnen, mit dem viele Programmierer vielleicht vertraut sind: Das ist die Angst davor, den bestehenden Code zu ändern, weil sie befürchten, dass sie etwas kaputt machen könnten. Wie das verhindert, dass Arbeit passiert, oder verhindert, dass es richtig gemacht wird (weil sie Angst haben, umzuformen) und so dazu führt, dass alles alle x Jahre neu geschrieben werden muss.
Unit Testing - & gt; Refactoring - & gt; Lebender Code.
Bearbeiten: BTW, ich würde nicht mit dem 'alles Code ohne Unit Tests ist Legacy-Code' Zitat von Michael Feathers führen. Ich fühlte mich beim ersten Mal sicher in der Defensive. Wenn die Leute aufhören, sich beleidigt zu fühlen, sind die 10 Minuten vorbei :-) (persönlich denke ich, dass das Zitat wahrer ist als es hilfreich ist).
Hier ist ein gutes Format für ein kurzes Gespräch über eine Technik X:
Nicht "verkaufen" oder viel Zeit mit der Theorie verbringen. Bereiten Sie vor und weisen Sie auf Bücher, URLs von Artikeln oder Tutorials hin, die Sie für am hilfreichsten halten. Diejenigen, die nach Ihrem Gespräch interessiert sind, können die Details im Web nachlesen.
Versuchen Sie, kurz über den Aspekt der Test Driven Development zu sprechen: Schreiben Sie zuerst Tests und die Schnittstellen, wie Sie gehen, dann implementieren Sie alles.
Vielleicht auch im Hinblick auf die kontinuierliche Integration bedeutet dies, dass, sobald Sie etwas in Ihr Quellcodeverwaltungssystem einchecken, das Projekt kompiliert wird und alle Tests ausgeführt werden, sodass der Entwickler sofort weiß, ob er etwas falsch gemacht hat.
Wenn es Projektmanager in der Zielgruppe gibt, sollten Sie auch fair sein, ihnen zu sagen, dass Unit-Tests Ihr Projekt um 15-30% mehr Zeit in Anspruch nehmen, aber auf lange Sicht wird es sich lohnen.
Sie könnten erwähnen, dass es eine schwierige Lernkurve sein wird, und es wird sich anfühlen, als ob die Produktivität beeinflusst wird, aber die Vorteile sind es wert:
z.B. Effektiv die Erstellung einer automatisierten Regressionstestsuite, die es Ihnen wiederum ermöglicht, größere Erweiterungen oder Modifikationen an bestehenden zu machen, ohne dass Sie befürchten müssen, dass Sie bestehende Funktionen zerstören.
Die Erstellung von Produktionscode wird langsamer sein, aber dies sollte durch die höhere Qualität des Codes ausgeglichen werden, d. h. weniger Fehler, was auf lange Sicht insgesamt eine höhere Produktivität bedeutet.
Ich denke, 10 Minuten reichen aus, um ein einfaches Beispiel dafür zu geben, wie Sie mit Unit-Tests Zeit sparen können.
Implementieren Sie eine Klasse (Sie können TDD, wenn Ihnen danach ist) und zeigen Sie, wie ein Komponententest eine Änderung abfangen kann, die die Klasse durchbricht.
Sie können auch hervorheben, wie Sie Komponenten schneller entwickeln können, wenn Sie das isolierte Testen durchführen (d. h. Sie müssen Ihre Webanwendung nicht aufrufen, sich anmelden, zu Ihren Funktionen wechseln, testen); Sie können nur Ihre Tests ausführen.
Sie können dies möglicherweise an einem Stück Code aus Ihrer Firma durchführen - und vielleicht zeigen, wie ein Unit-Test einen Fehler, den Sie in letzter Zeit hatten, erfasst hat.
Wenn Sie eine Demonstration geben, tun Sie es auf einem funktionierenden Code aus einem Projekt, mit dem jeder vertraut ist. Vermeiden Sie erfundene Beispiele. Bücher über TDD sind bereits voll von ihnen, und sie verkaufen nicht wirklich, wie TDD für ein echtes Projekt arbeiten kann.
Für die Liebe Gottes, betonen Sie, dass Unit-Tests sind zum Testen "Einheiten" der Logik. Ich hasse es, eine QA-Suite von NUnit-Tests zu betrachten, die niemand zu warten erwarten würde, wo jeder "Komponententest" gültige Ausgaben für 150 (binäre) Eingabedateien testet und sich dann selbst scheitert, wenn einer fehlschlägt, ohne Ihnen zu sagen, welcher. p>
Ich würde demonstrieren:
FWIW Wir führen das schlechte visuelle Studiotest über MSTEST in unserer Hudson-Box durch und ich habe ein xslt, mit dem Hudson die Ergebnisse in das Nunit-Format konvertiert, damit Hudson sie entziffern kann. Wenn Sie möchten, dass Sie bei einer Microsoft-Testplattform bleiben, legen Sie das einfach hin.
Verantwortlichkeit , wie von Kent Beck hervorgehoben, ist eine weitere Eigenschaft, die Unit-Tests erleichtert. Hören Sie seinen Podcast bei IT-Gesprächen . (Sein Punkt zur Verantwortlichkeit beginnt um 30:34.)
Aus geschäftlicher Sicht möchten Sie vielleicht die Tatsache hervorheben, dass Komponententests die Änderungen, die Sie an Ihrem Code vornehmen, "risikoärmer machen" können. Sobald Sie eine Suite von Komponententests haben, können Sie Änderungen an der Codebasis vornehmen und wissen, was bricht und was nicht.
Ich bin vielleicht keine schlechte Idee, um die Benutzertests zu überprüfen. Wenn Sie über eine Reihe von Tests verfügen, können Sie nach der Durchführung von Änderungen fehlerhafte Tests an die Benutzer senden, damit sie bestätigen, dass die neuen Ergebnisse korrekt sind. Darüber hinaus können Sie die Erfassung von Anforderungen rationalisieren, wenn die Benutzer neue Komponententestdefinitionen für Sie schreiben. Sie müssen nicht in der Lage sein zu programmieren, aber sie müssen in der Lage sein, Ihnen die richtigen Eingaben und erwarteten Ergebnisse zu geben (sonst wie würden sie wissen, ob die gewünschten Änderungen funktionieren würden?).
Visual Studio bietet eine Reihe nützlicher Tools für das Komponententesten. Ein oder zwei Beispiele können also Ihrer Gruppe eine Vorstellung davon geben, wie Unit-Tests in der Praxis aussehen.
Eine andere Möglichkeit dies zu tun:
Schlagen Sie ein Problem vor, das durch Erstellen eines Algorithmus gelöst werden kann. Etwas relativ Einfaches natürlich. Codieren Sie als nächstes diesen Algorithmus in einem DLL-Projekt. Versuchen Sie, einige Schwächen zu schleichen (i & lt; = array.Length ist immer eine gute). Als nächstes fragen Sie sie, wie sie diese DLL testen würden.
Die meisten Entwickler führen ihre Apps aus, um sie zu testen. Aber Sie können keine DLL ausführen. Möglicherweise erhalten Sie Vorschläge, dass Sie eine Konsolenanwendung erstellen, um Methoden zur Ausführung des Algorithmus zu erstellen. Zeigen Sie ihnen, wie Sie Komponententests erstellen können, um dies zu tun.
Tags und Links unit-testing theory