Ich hatte eine Diskussion mit einem Testmanager über die Rolle von Unit- und Integrationstests. Sie forderte die Entwickler auf, zu melden, welche Einheiten und Integrationen wie getestet wurden. Aus meiner Sicht sind Unit- und Integrationstests Teil des Entwicklungsprozesses und nicht des Testprozesses. Über die Semantik hinaus meine ich, dass Unit- und Integrationstests nicht in die Testberichte aufgenommen werden sollten und Systemtester sich nicht darum kümmern sollten. Meine Argumentation basiert auf zwei Dingen.
Unit- und Integrationstests werden immer anhand einer Schnittstelle und eines Vertrags geplant und durchgeführt. Unabhängig davon, ob Sie formalisierte Verträge verwenden, testen Sie immer noch, was z. B. eine Methode tun soll, dh einen Vertrag.
Beim Integrationstest testen Sie die Schnittstelle zwischen zwei verschiedenen Modulen. Die Schnittstelle und der Vertrag bestimmen, wann der Test bestanden wird. Sie testen jedoch immer einen begrenzten Teil des gesamten Systems. Systemtests werden dagegen anhand der Systemspezifikationen geplant und durchgeführt. Die Spezifikation bestimmt, wann der Test bestanden wird.
Ich sehe keinen Wert darin, dem (System-) Tester die Breite und Tiefe von Unit- und Integrationstests mitzuteilen. Angenommen, ich schreibe einen Bericht, in dem aufgeführt ist, welche Art von Komponententests für eine bestimmte Business-Layer-Klasse durchgeführt werden. Was soll er / sie davon nehmen?
Daraus zu schließen, was getestet werden sollte und was nicht, ist eine falsche Schlussfolgerung, da das System möglicherweise immer noch nicht so funktioniert, wie es die Spezifikationen erfordern, obwohl alle Einheiten- und Integrationstests bestanden wurden.
Dies mag wie eine nutzlose akademische Diskussion erscheinen, aber wenn Sie wie ich in einem streng formalen Umfeld arbeiten, ist es tatsächlich wichtig zu bestimmen, wie wir Dinge tun. Wie auch immer, irre ich mich total?
quelle
Antworten:
Das Schreiben automatisierter Tests ist Aufgabe des Entwicklers. Die Tests sind Teil der Codebasis und sollten als solche behandelt werden. Sie sollten denselben Codeüberprüfungen, Codierungsstandards, Versionskontrolldisziplinen usw. wie der Rest des Projekts unterliegen.
Das Ausführen dieser Tests erfolgt aus zwei Gründen: Erstens als Leitfaden für die Entwickler. Sie führen Tests durch, um sicherzustellen, dass der soeben geschriebene Code den Anforderungen entspricht, Sie verwenden ihn als zusätzliche Dokumentation und stellen sicher, dass durch Änderungen keine vorhandene Funktionalität beeinträchtigt wird. Wenn Sie eine echte TDD durchführen, sind die Tests auch eine maßgebliche Quelle für technische Spezifikationen. Der zweite Grund für die Verwendung der Tests liegt in der Qualitätssicherung und Bereitstellung. Das Ausführen aller automatisierten Tests sollte einer der ersten Schritte in jeder Testrunde sein. Das Ausführen automatisierter Tests ist kostengünstig (praktisch überhaupt kein Personal erforderlich), und es macht wenig Sinn, manuelle Tests durchzuführen, wenn die automatisierten Tests fehlschlagen.
Dies bedeutet, dass die Verantwortlichkeiten folgendermaßen aussehen sollten:
Wenn Sie einen Build-Server haben, läuft die Aufgabe von QA (in Bezug auf automatisierte Tests) darauf hinaus, "den Bericht des Build-Servers zu öffnen und sicherzustellen, dass alles grün ist".
quelle
an authoritative source of technical specifications
. Tests sollten eine Bestätigung der Spezifikationen sein, aber sicherlich kein Ersatz. Das soll nicht heißen, dass ich mich auch für eine große Vorab-Spezifikation aussetze, sondern dass ich die Unterscheidung mache, dass wir Tests anwenden, um die Dinge zu validieren, die wir über die Art und Weise wissen, wie sich ein System verhalten soll, anstatt die zu haben Tests definieren das Verhalten. Eine pedantische Unterscheidung, aber dennoch wichtig.Ich denke, das Wichtigste für Sie wäre zu klären, warum sie diesen Bericht benötigt.
Es kann verschiedene Erklärungen geben (wie aus mehreren Antworten hervorgeht), die sehr unterschiedliche Strategien erfordern.
quelle
Ich denke, die Rolle von Qualitätssicherung und Entwicklung sowie das Zusammenspiel können zwischen Organisationen sehr unterschiedlich sein. Aber im Allgemeinen sage ich in meinem Team den Mitgliedern, dass sie so tun sollen, als gäbe es kein QA-Team, in dem Sinne, dass sie für die Änderungen verantwortlich sind, die sie in die Produktion bringen. Im Gegenzug nimmt unser QA-Team nicht viel von Entwicklertests an und testet das System in ausreichendem Maße als funktionierendes Ganzes.
Aus diesem Grund kümmert sich unser QA-Team nicht so sehr darum, was Unit-Tests sind oder nicht, bevor sie mit den Tests beginnen.
Ich denke, es ist hilfreich für das QA-Team, zu verstehen, was die Unit-Tests auf hoher Ebene tun und was nicht, damit wir gemeinsam daran arbeiten können, Lücken und Bereiche zu identifizieren, die strenger sein könnten. Vielleicht ist Ihr Kollege hinter einer Zusammenfassung auf hohem Niveau her, im Gegensatz zu den blutigen Details.
quelle
Versucht sie wirklich darüber zu streiten, ob diese Art des Testens tatsächlich im Bereich der "Entwicklung" liegt, oder versucht sie nur herauszufinden, wie gut Ihr Code durch Unit-Tests abgedeckt ist? Wenn Sie sich nur die von Ihnen gegebenen Informationen ansehen, scheint es, als ob sie nur wissen möchte, welche Teile des Codes abgedeckt sind und wo sie die Anstrengungen ihres Teams konzentrieren sollte.
Ich habe gleich nach der Schule in einem Testteam gearbeitet, bevor ich in eine Entwicklungsrolle gewechselt bin, und ich kann sehen, wie wertvoll dies für sie und ihr Team sein kann.
quelle
Ich sehe nicht, dass es zu wichtig ist.
Wenn Sie sie nicht für QA / Testing bereitstellen und sie keine ordnungsgemäßen Tests durchführen und die Produktion fehlschlägt, liegt es an ihnen, dass sie sie durch die QA in die Produktion lassen, ohne zu überprüfen, ob sie wie angegeben funktioniert.
Wenn Sie sie der Qualitätssicherung / Prüfung zur Verfügung stellen und sie keine ordnungsgemäßen Prüfungen durchführen ... dasselbe Ergebnis, als hätten Sie sie nicht zur Verfügung gestellt.
Wenn Sie sie jedoch bereitstellen, können sie sie auch mit der Spezifikation vergleichen und / oder vorschlagen, welche Tests möglicherweise fehlerhaft sind oder geändert werden müssen, weil sie einen Fehler gefunden haben.
Wirklich, ich sehe keinen großen Nachteil darin, sie bereitzustellen. Es ist immer noch auf QA / Testen gegen die Spezifikation zu validieren. Wenn sie faulenzen und einfach darauf vertrauen, dass Ihre Tests gut genug sind, weil sie alle bestanden haben, sind sie es, die bei ihrer Arbeit gescheitert sind. Solange sie auch noch die Spezifikation haben, sind die Ergebnisse der Einheiten- / Integrationstests nur flusend und sollten nicht in der Lage sein, Sie auf die eine oder andere Weise zu verletzen. Dies ist der Grund, warum wir Entwickler und QA haben. Mehrere Überprüfungen, die die App wie angegeben ausführt.
Entwickler machen Fehler, Qualitätssicherung macht Fehler, im Idealfall machen sie nicht beide Fehler in einem Artikel ... und wenn doch, ist es möglicherweise ein Analyst, der den Ball fallen ließ und eine unklare Spezifikation schrieb.
quelle
Unit-Tests liegen in der Verantwortung der Entwickler, dass die Tests hilfreich sein können, um zu verstehen, wie die Codeteile von selbst funktionieren. Einige sehen dies möglicherweise als eine Form der Dokumentation und haben daher einen gewissen Wert, obwohl es zu einem Mehraufwand kommen kann, wenn die Komponententests regelmäßig geändert werden.
Der andere Wert bei der Weitergabe der Tests besteht darin, dass dadurch vermieden werden kann, dass sich Tests verdoppeln, die im Hinblick auf die Gewährleistung der Grundfunktionalität redundant sind.
Es gibt auch Benutzerakzeptanztests, die von alledem getrennt sind, da der Endbenutzer möglicherweise sein eigenes Verständnis der Funktionsweise eines Systems hat.
quelle
Wenn Ihr Unternehmen über eine definierte Methode verfügt, mit der die Qualität seiner Produkte sichergestellt werden kann (wenn diese SOX-konform sind oder versuchen, ihre CMMI-Werte zu verbessern, ist dies wahrscheinlich der Fall), müssen die Produkte dem Audit standhalten können, um den Prozess zu belegen wurde verfolgt.
Oft beinhaltet der definierte Prozess Unit-Tests (was eine gute Sache ist). Leider bedeutet dies auch, dass Sie Ihre Unit-Tests dokumentieren und nachweisen müssen, dass sie ausgeführt wurden, um dem Audit standzuhalten. Das bedeutet, dass Sie eine Möglichkeit benötigen, über Ihre Komponententests Bericht zu erstatten.
Schauen Sie sich ein Tool wie Sonar an, das Ihnen dabei hilft - es zeigt den Grad der Codeabdeckung und die Ergebnisse Ihrer Testläufe an.
quelle
Dies hängt wirklich vom Unternehmen ab, aber aus meiner Erfahrung als Systemtester in einem traditionellen Ansatz, aber auch als Tester in einem agilen Team in einem CD-Modell, ist es äußerst nützlich zu wissen, welche Einheiten und Integrationen getestet wurden.
Qualität liegt in der Verantwortung des Teams - sowohl Entwickler als auch Tester und das Produktmanagement - und die Zusammenarbeit ist der beste Weg, dies sicherzustellen.
Der Testmanager möchte also wissen, was Unit und Integration getestet wurden, und es ist ein bisschen mehr Arbeit für die Entwickler, aber es spart die Gesamtarbeit für das Projekt! Indem sie die Informationen an den Testmanager weitergeben, können sie ihre Bemühungen im Testteam auf das Wesentliche und Wichtige konzentrieren. Wie bereits erwähnt, kann das Team, wenn ein Codebereich nicht einheitlich getestet wurde, seine Anstrengungen auf diesen Bereich konzentrieren, im Vergleich zu einem Bereich, der umfangreich getestet wurde. Sie arbeiten alle an dem gleichen Endziel einer pünktlich veröffentlichten Software höherer Qualität.
quelle
Ich würde denken, dass es vorteilhaft wäre, diese Art der Sache zur Verfügung zu stellen. Unit Test Coverage sollte etwas sein, das durch Entwicklung und Test bekannt ist, damit sie das erklären können.
Natürlich müssen Sie die geschäftskritischen Dinge testen, egal was passiert. Sie müssen die häufig verwendeten Funktionen gründlich testen, unabhängig davon, ob sie eine gute Einheitentestabdeckung aufweisen. Es kann nicht schaden, sie wissen zu lassen, welche anderen Orte von Unit-Tests abgedeckt werden. Prüft der Code in diesem kleinen Steuerelement bereits, ob Randfälle vorliegen? Diese Art von Zeug ist hilfreich, um auf allen Seiten des Geschäfts Bescheid zu wissen.
quelle
Erwähnenswert ist der Ansatz, der in dem Buch "Wie Google Software testet" behandelt wird: Testen und Qualitätskontrolle liegt in der Verantwortung aller und die Standards sind streng.
Die eigentliche Rolle der "Testing" -Abteilung besteht in der Produktivität der Entwickler. dh Automatisierung, damit die Organisation das erforderliche Maß an Genauigkeit wirtschaftlich erreichen kann.
quelle