So starte ich glaube nicht , das ist eine Wiederholung von Fragen auf Unit - Tests . Was ich brauche, ist Hilfe, um seinen Wert einem Team von Programmierern, Analysten, Managern und Testern zu vermitteln. Bei automatisierten Tests muss ich meines Erachtens nicht zwischen Komponententests (z. B. JUnit), BDD (z. B. JBehave, Fitness) und UI (Selen, Watir) unterscheiden, da ich denke, dass sie alle einen ähnlichen Wert haben (aber es steht mir frei, dies zu tun) schreibe eine Antwort, die nicht einverstanden ist :))
Das Folgende ist eine Liste, die ich identifiziert habe. Ich suche nach Antworten, die helfen, sie zu erweitern oder zu verfeinern:
- Zeit- / Kostenersparnis : Das Schreiben von automatisierten Tests kann mehr Zeit in Anspruch nehmen als das Schreiben von Testfällen. Angesichts der Tatsache, dass Tests mehrmals ausgeführt werden, ist der Grenzaufwand (dh Kosten / Zeit) für die Ausführung automatisierter Tests jedoch um mehrere Größenordnungen geringer. Die Tatsache, dass die automatisierten Tests kostengünstig sind, erleichtert das Ändern des Systems im Laufe der Zeit.
- Dokumentation : Es gibt keinen besseren Weg zu wissen, wie ein System funktioniert als seine Tests. Jede andere Dokumentation ist normalerweise nicht mehr aktuell, aber Tests (zumindest die, die bestanden wurden) zeigen, wie die Dinge tatsächlich funktionieren. Dies gilt sowohl für die Endbenutzer- als auch für die API-Dokumentation.
- Code-Qualität : Testschreiben zwingt Sie zu:
- Betrachten Sie Kunden, weil Tests ein Kunde sind
- Bricht Abhängigkeiten auf, bei denen das Testen von Code oft bedeutet, herauszufinden, wie dieser Code erstellt werden kann, ohne dass ein anderes großes System verfügbar sein muss
unit-testing
selenium
tdd
bdd
Orangepips
quelle
quelle
Eine Sache von definitivem Wert ist, dass automatisierte Tests kontinuierlich ausgeführt werden können; wie jede stunde auf einen umbau oder ähnliches. Dadurch werden Bugs oder Regressionen innerhalb von Stunden oder Tagen, nachdem ein Programmierer an dem fehlerhaften Code gearbeitet hat, schnell ans Tageslicht gebracht. Dies erleichtert das Wechseln des Kontexts erheblich. Der zweite Vorteil kontinuierlicher Tests besteht darin, dass Sie gezwungen sind, Ihre Tests in einem funktionierenden Zustand zu halten. Nichts ist langweiliger, als die erste Woche eines Testzyklus damit zu verbringen, alle veralteten Tests zu reparieren. Wenn Sie sie automatisieren können, können Sie sie jederzeit ausführen. Wenn Sie sie regelmäßig ausführen, können Sie Fehler in Ihren Tests oder im Code schnell erkennen.
quelle
Testaufwand
Sobald ein automatischer Test geschrieben wurde, kann er auf Kosten einiger Joule von einem Computer ausgeführt werden. Für den entsprechenden manuellen Test muss eine Person auf der Gehaltsliste eine Liste mit Anweisungen erstellen.
Zuverlässigkeit testen
Dem Computer kann vertraut werden, dass er jedes Mal den gleichen Testvorgang ausführt. Der Mensch neigt dazu, Fehler zu machen und faul zu werden.
Die Testfehler-Modi des Computers sind auch viel leichter zu erkennen - er ist abgestürzt (Testberichte werden nicht mehr angezeigt), es ist ein Fehler aufgetreten, der zu einem falschen Testergebnis geführt hat (führen Sie einen deterministischen Test erneut durch, und das Ergebnis ist unterschiedlich). Wenn ein Mensch einen Schritt verfehlt und das "OK" abhakt, wie können wir das erkennen?
Haltbarkeit testen
Ein automatisierter Test muss ein konkretes Artefakt (z. B. ein Stück Code) sein, um ausgeführt werden zu können, und ist natürlich in den anderen Softwareentwicklungsartefakten enthalten - dem Quellrepository. Ein manueller Test kann von einem Tester auf einem Blatt Notizpapier entwickelt und niemals formalisiert werden. Es ist wahrscheinlicher, dass das Unternehmen Prozesse benötigt, um sicherzustellen, dass dies nicht geschieht.
Testwert
Der Computer kann so programmiert werden, dass Testergebnisse in einer konsistenten, einfach zu analysierenden Form ausgegeben werden. Die Person führt entweder eine Dateneingabe durch, um dasselbe zu generieren, oder sie zeichnet Freiformnotizen auf, für deren Verdauung ein Analyst, Entwickler oder Manager erforderlich ist.
quelle
Meistens (abhängig von Ihrer Testabdeckung) fehlerfreier Code, und ich würde sagen, eines der größten Argumente ist, wenn Sie Ihrem Manager sagen, dass Sie einen Test für einen entdeckten Fehler schreiben können, um sicherzustellen, dass Sie in Zukunft immer wissen, ob dieser Fehler kommt zurück :)
Meiner Meinung nach sind Unit- / Integrationstests am wichtigsten, wenn Sie jedoch ein UI-Muster wie MVC anwenden, ist dies für die meisten Projekte ausreichend. Normalerweise teste ich alle Aktionen auf meinen Controllern / Präsentatoren und überlasse die Datenbindung den Ansichten.
Natürlich ersetzen automatisierte Tests nicht das gute alte "Point-and-Click" -Abenteuer in Ihrer Anwendung, bei dem Versuch, die wildesten Dinge herauszufinden, die Ihr Benutzer tun könnte.
Es gibt auch einen Punkt der kontinuierlichen Integration .
Eine weitere Sache - man muss sich bemühen, dass Codequalität zu Produktqualität, Geschäftswert und Wartbarkeit führt - sonst macht es keinen Sinn, dies zu tun.
quelle
Ich denke, Sie sollten mit den magischen Punkten "niedrigere Kosten" und "mehr Funktionen / Zeiteinheit" / kürzere Zykluszeit führen.
Bevor ich jedoch eine Sache vorbringe, rate ich Ihnen, über Ihre Situation nachzudenken. Ihre Frage hat mich dazu veranlasst, einen Blog-Beitrag über die möglichen Nachteile des automatisierten Testens zu schreiben .
quelle
Einfaches Refactoring spielt hier eine große Rolle. Wenn Sie eine gute Abdeckung durch einen schönen und LESBAREN (!!!) Komponententest haben, können Sie Ihr System umgestalten, ohne die bestehende Funktionalität zu gefährden.
quelle
Sie müssen das Konzept verkaufen - Sie müssen vermeiden, ihnen mitzuteilen, dass es den Code verbessert. Wenn sie eine Investition in den Code haben, werden sie sofort gegen Sie / Auto-Tests gestellt. Wenn sie gut sind, verstehen sie auch GIGO und verstehen nicht, warum Sie denken, dass es nicht zutrifft.
Ich würde es auch als Dokumentationsaspekt auslassen, Dinge wie Fitnesse können es gut machen, aber bis sie erfahren haben, könnte es schwierig sein, es zu visualisieren.
Bereiche, von denen ich denke, dass sie Glück haben könnten, wenn man sie weiterverkauft
Komponententests können den Platz vieler Entwicklertests einnehmen - hier erstellen Sie Anwendungen, um in den Bereich zum Debuggen / Testen zu gelangen, ohne alle Anmeldungen / Menüs durchlaufen zu müssen.
Mit Tests können Sie problemlos Problemsituationen einrichten und wiederholen - ohne viel Zeit mit dem Einrichten von Testdaten zu verbringen (insbesondere mit einem anständigen Verspottungssystem).
Wenn Sie eine Reihe von BDD- und UI-Tests aufbauen, erhalten Sie eine viel schnellere Antwort, wenn es einfache Pausen gibt, als auf das nächste Mal zu warten, wenn der Tester es sich ansieht
Durch BDD- und UI-Tests können Sie vermeiden, dass Sie wiederholt auf Schaltflächen drücken, um alle Aspekte zu überprüfen, die möglicherweise von Ihrer Änderung betroffen sind, und sich nicht alle Bereiche merken müssen.
Automatische Builds werden oft hervorgehoben, wenn jemand vergessen hat, Code einzuchecken
Tests helfen Ihnen dabei, das Wiederauftreten von Fehlern zu vermeiden.
Unit Tests und anständige Verspottungen bedeuten weniger miteinander verknüpften Code und sind einfacher zu lösen
Denken Sie daran, dass Sie versuchen, es zu verkaufen, und sie nicht in eine Religion umzuwandeln. Akzeptieren Sie also kleine Schritte und versuchen Sie, sie nicht gegen Sie aufzubringen. Es wird auch einige Zeit dauern, bis sie sich anpassen und lernen, gute Tests zu schreiben.
quelle
Jemand muss glauben, dass es ein Problem gibt, bevor er eine vorgeschlagene Lösung für dieses Problem akzeptiert.
Durch automatisierte Tests können Fehlerbehebungskosten gespart werden. Wenn Ihre Kollegen nicht glauben, dass die Kosten für die Fehlerbehebung beträchtlich oder übermäßig sind, sind sie schwer zu überzeugen. Wenn diese Kosten hoch oder überhöht sind, die Leute dies jedoch nicht glauben, müssen Sie möglicherweise zuerst überzeugende Daten zu diesen Kosten abrufen.
quelle
Was Unternehmen lieben, ist Wertsteigerung und Kostensenkung. Sie müssen erklären, wie automatisiertes Testen den Wert erhöht, da es zusätzliche Kosten verursacht.
Wenn Ihr Code modular aufgebaut ist, können Sie ihn wiederverwenden. Das bedeutet, dass die Tests nicht erneut geschrieben werden müssen und Sie einfach auf dem vorhandenen Code arbeiten können.
Bei älteren Projekten erleichtert das automatisierte Testen die Umgestaltung erheblich. Die technischen Schulden müssen irgendwann getilgt werden.
Das von Ihnen angegebene Dokumentationsargument ist nicht sehr gut. Der Unterschied zwischen der Aktualisierung der Tests und der Aktualisierung der Dokumentation ist nur Gewohnheit.
quelle
"Was ich brauche, ist Hilfe, um seinen Wert einem Team von Programmierern, Analysten, Managern und Testern zu vermitteln. Bei automatisierten Tests muss ich meines Erachtens nicht zwischen Komponententests (z. B. JUnit), BDD ( zB JBehave, Fitness) und UI (Selenium, Watir), weil ich denke, dass sie alle einen ähnlichen Wert bieten (aber Sie können gerne eine Antwort schreiben, die nicht übereinstimmt :)) "
OK, ich werde diese Herausforderung annehmen;)
Ich arbeite hauptsächlich mit Programmierern und der Qualitätssicherung. Meine Werkzeuge sind Ruby, Rails, Testunit, Rspec, Jasmin und Selen.
Die BDD / TDD-Tools von rspec und testunit sind Bestandteil der Programmierung. Sie brechen sie nicht aus und besprechen sie separat mit dem Management, Sie schieben sie nicht aus Zeitmangel auf, Sie beziehen sie in all Ihre Zeitschätzungen ein. Wenn Sie wirklich gefragt werden, wie viel Zeit die Leute haben, um Ihnen Informatik und Programmierung zu erklären. Ich benutze diese Tests nicht für das Frontend
GUI / UI / Jasmin / Selen. Diese sind unterschiedlich. Ich habe diese von QA-Leuten gemacht, die Programmierer-Hintergründe haben. Wir stellen sicher, dass die Tests so robust wie möglich sind und nicht auf dem Layout des Inhalts basieren. Die (möglicherweise neuen) Kosten hierfür sind als verschobene Kosten zu erklären . Anstatt später mit defekter Software, verlorenen Kunden und teuren Reparaturen zu zahlen, zahlen Sie jetzt mit ein paar einfachen Methoden viel weniger (relativ).
quelle
Ich denke, der Schlüssel liegt darin, über bestimmte Kategorien von Tests zu sprechen, die Sie erstellen, und nicht über "automatisierte Tests" insgesamt. Letzteres kann ein bisschen nebulös und beunruhigend sein, und es ist zu einfach, Beispiele dafür zu finden, wo Zeitverschwendung wäre.
Ich empfehle immer, Ihre Tests in 4 Gruppen aufzuteilen (mehr Details hier ). Bleiben Sie bei mir, ich werde gleich erfahren, wie Sie Tests an andere verkaufen können.
Durch Aufteilen Ihrer Tests in diese Kategorien können Sie jetzt eine andere Diskussion führen. Nehmen Sie die ersten drei Gruppen (die vierte Gruppe liegt ohnehin im Ermessen des Einzelnen) und fragen Sie die Leute, ob sich Tests für diese Codeteile lohnen würden. Wenn Sie keine Einigung erzielen können, schließen Sie diese Tests möglicherweise vorerst nicht ein. Wenn Sie können, dh wenn Sie der Meinung sind, dass Tests rund um die Kernfunktionalität, die bei jedem Commit ausgeführt werden, nützlich sind, fügen Sie diese hinzu.
Die andere Gruppe, die nützlich sein kann, sind Tests, deren manuelle Durchführung schwierig oder zeitaufwändig ist . Es sollte einen ziemlich einfachen Vorteil geben, der darin besteht, manuelle Testzeiten zu sparen oder Dinge testen zu lassen, die aus Zeitgründen übersprungen werden.
quelle