Ich arbeite derzeit an einem ziemlich großen Projekt und habe JUnit und EasyMock verwendet, um die Funktionalität von Komponententests ziemlich ausführlich zu testen. Ich bin jetzt daran interessiert, um welche anderen Arten von Tests ich mich kümmern sollte. Ist es meine Verantwortung als Entwickler, sich um Dinge wie Funktions- oder Regressionstests zu kümmern? Gibt es eine gute Möglichkeit, diese benutzerfreundlich in Tools wie Maven / Ant / Gradle zu integrieren? Sind diese besser für einen Tester oder BA geeignet? Gibt es andere nützliche Testarten, die mir fehlen?
35
Antworten:
Es liegt in Ihrer Verantwortung, fehlerfreien Code zu liefern. Sie sollten schreiben, mitschreiben oder sicherstellen, dass Tests geschrieben oder durchgeführt werden, um Vertrauen in den von Ihnen gelieferten Code zu gewinnen.
Hinweis: Ich sage nicht, dass Sie einen fehlerfreien Code liefern müssen. Vielmehr sollten Sie versuchen, den bestmöglichen Code für die gestellten Anforderungen zu schreiben. Dazu gehört auch, dass der Code getestet werden muss.
Ob Sie persönlich für Funktions- und Regressionstests verantwortlich sind, hängt hauptsächlich von der Organisation Ihres Unternehmens ab. Alle bestens ausgebildeten Programmierer, die ich kenne, fragen sich nicht "ob es in meiner Verantwortung liegt, Tests vom Typ X zu schreiben?". Stattdessen fragen sie sich: "Was muss ich tun, um sicherzustellen, dass mein Code ordnungsgemäß getestet wird?". Die Antwort könnte darin bestehen, Komponententests zu schreiben oder der Regression Tests hinzuzufügen, oder es könnte bedeuten, mit einem QS-Experten zu sprechen und ihm zu helfen, zu verstehen, welche Tests geschrieben werden müssen. In allen Fällen bedeutet dies jedoch, dass sie sich ausreichend um den Code kümmern, den sie schreiben, um sicherzustellen, dass er ordnungsgemäß getestet wurde.
Fazit: Sie sollten für die Bereitstellung von qualitativ hochwertigem Code verantwortlich sein. Wenn dies bedeutet, dass Sie einige Funktions- oder Regressionstests schreiben müssen, führen Sie diese durch.
quelle
Dies könnte Ihnen helfen:
Q1 werden von den Entwicklern geschrieben.
Q2 werden von den Entwicklern automatisiert und in Zusammenarbeit mit dem Unternehmen und / oder den Testern geschrieben.
quelle
Es gibt Akzeptanztests, für die ich BDD- ähnliche Frameworks empfehlen würde, die die Gherkin-Sprache verwenden : JBehave (Java), Cucumber (Ruby), Behat (PHP) usw. Diese Art von Tests hat einige Vorteile gegenüber Komponententests:
quelle
Funktionstests können wie Komponententests automatisiert werden und sind sehr nützlich, um zu testen, wie die verschiedenen Komponenten Ihres Projekts zusammenarbeiten und wie gut Ihr System die Geschäftsregeln widerspiegelt.
Dieser automatisierte Test dient auch als Regressions- und Akzeptanztest für wichtige (oder geringfügige) Änderungen an der Software (Fehlerbehebung, Umgestaltung, Geschäftsänderung, neue Funktionalität usw.). Dies gibt den Entwicklern viel mehr Selbstvertrauen.
Es gibt verschiedene Rahmenbedingungen für diese Art von Tests, wir verwenden Fitnesse mit sehr guten Ergebnissen. Hat eine sehr gute Bibliothek zum Testen von Webseiten (wir verwenden sie zum Testen unserer Web-App und unserer Web-Services) und integriert sich sehr gut in Maven und Jenkins .
Früher haben wir auch "funktionsübergreifende Tests" zwischen Entwicklern durchgeführt, aber diese Art von Tests ist nicht "wiederholbar", sodass ihre Nützlichkeit eingeschränkt ist ...
quelle
Als Entwickler betrachte ich mich als verantwortlich für das Testen aller meiner Codes und garantiere nach besten Kräften, dass es keine Fehler gibt. Deshalb haben wir so viele Werkzeuge zur Verfügung, wie zum Beispiel das Verspotten. Das Ziel beim Erstellen von spöttischen Objekten in Ihren Tests besteht darin, Ihren Code von der "Außenwelt" zu isolieren und sicherzustellen, dass er einwandfrei funktioniert. Wenn etwas fehlschlägt, ist es "nicht Ihre Schuld".
Trotz der Tatsache, dass es nicht Ihre Schuld ist und Ihr Code so funktioniert, wie er sollte, heißt das nicht, dass Sie bei den restlichen Tests nicht helfen können. Ich glaube, es liegt auch in Ihrer Verantwortung, Ihre Arbeit zu unterstützen und in die Arbeit anderer zu integrieren. IT-Entwicklungsteams sollten jedes Mal als gut geölte Maschine arbeiten und mit anderen Abteilungen (wie der Qualitätssicherung) als größeres Team zusammenarbeiten, um zuverlässige Software bereitzustellen.
Aber das ist die Arbeit eines Teams, nicht nur Ihrer.
quelle
Offensichtlich Integrationstests ; Sie sind wichtiger und schwieriger zu schreiben als Unit-Tests. Es ist wie ein Haus zu bauen; Mit Unit-Tests können Sie nur sicherstellen, dass die Steine fest sind und Druck, Temperatur, Luftfeuchtigkeit und anderen Bedingungen standhalten. Aber Sie haben keine Ahnung, wie das Haus mit den zusammengesetzten Ziegeln aussieht und sich verhält.
Das Problem bei großen Projekten, insbesondere bei Java-Projekten, die sich in einem Container befinden, besteht darin, dass Integrationstests schwierig sind. Um Systemintegrationstests in großen Projekten zu vereinfachen, ist ein speziell für das Projekt erstelltes Testframework erforderlich, für dessen Codierung der Entwickler verantwortlich ist. In letzter Zeit wurden in diesem Bereich große Verbesserungen vorgenommen, und Plattformen wie Arquillian vereinfachen das Schreiben eines Testframeworks erheblich (oder ersetzen es sogar).
quelle
In der realen Welt sind Sie nur so verantwortlich, wie Ihr Team / Chef Sie zur Rechenschaft zieht. Wenn Sie dafür bezahlt werden oder gezwungen sind, sich endlos anzustrengen, um alle Ecken und Kanten zu finden und nach Lust und Laune die Interpretation von Business-Logik-Fehlern durch Ihren Chef (oder schlimmer noch durch Marketing) zu analysieren, sind Sie auf jeden Fall für alle verantwortlich.
Mit anderen Worten, tun Sie, was für den Umfang, den Sie erhalten, erforderlich ist. Es ist ein nettes Extra, in gewissem Sinne zu werfen oder zu sehen, wie andere das Produkt verwenden, das Sie erstellen, um einen Überblick über Anwendungsfälle und mögliche Probleme zu erhalten, die behoben werden müssen. Bringen Sie dies jedoch vor dem "Reparieren" zu Ihrem Team oder Chef. Dies schließt die Werkzeuge Ihrer Wahl ein. Alle Ihre Bemühungen sollten etwas sein, mit dem jeder an Bord ist.
Wenn Ihre Frage von Nutzen ist, mag ich Bugzilla, Google Docs, Zendesk oder Basecamp in Bezug auf Kommunikationssysteme.
quelle
Ich glaube nicht, dass dies bereits behandelt wurde - tut mir leid, wenn ich es verpasst habe.
Ein Problem ist die effiziente Nutzung der Zeit eines Entwicklers.
Entwicklern mangelt es oft an den Fähigkeiten, um bei bestimmten Testarten gut zu sein. Zum Teil ist dies nur natürlich. Es ist der gleiche Grund, warum Autoren Redakteure haben. Es ist sehr schwierig, die Mängel an etwas zu erkennen, wenn Sie zu nahe dran sind. Es geht aber auch um unterschiedliche Fähigkeiten und Spezialitäten.
In diesem Fall ist ein Entwickler, der Zeit mit Testen verbringt, in Bezug auf Kosten und Nutzen schlecht. Dieser Entwickler würde produktiver sein, wenn er andere Dinge tut, und ein spezialisierter Tester würde produktiver sein, wenn er die Tests durchführt.
Dabei werden natürlich verschiedene Annahmen getroffen, die nicht unbedingt gültig sind. In einem kleinen Unternehmen ist es zum Beispiel möglicherweise nicht sinnvoll, Mitarbeiter zu beschäftigen, die sich auf Tests spezialisiert haben. Es kann jedoch sinnvoller sein, zusätzliches Support-Personal einzustellen und es testen zu lassen, oder zumindest Leute dazu zu bringen, Code zu testen, den sie nicht selbst geschrieben haben.
quelle
Ich glaube, wir (auch ein Entwickler) sind dafür verantwortlich, alle möglichen Testszenarien zu erfassen, bevor sie für die Qualitätssicherung freigegeben werden. Der Zweck der Qualitätssicherung ist die Validierung der Software. Wenn Sie Ihren eigenen Code auf Fehler hämmern, werden Sie auch bei der Qualitätssicherung immer gut aussehen.
quelle
Wer kann besser als ein Entwickler wissen, welche Testfälle am relevantesten sind. Der Entwickler sollte für die Durchführung aller Komponententests verantwortlich sein. Wenn möglich, sollte der Entwickler beim Schreiben und Ausführen der Testskripte behilflich sein. Da dies in großen Projekten selten möglich ist, sollte dem Entwickler Zeit eingeräumt werden, alle Testfälle zu überprüfen. Darüber hinaus sollte der Entwickler über Kenntnisse verfügen und die Vielzahl der verfügbaren automatisierten Testwerkzeuge nutzen.
In meiner Entwicklungskarriere stelle ich fest, dass Projekte zu besseren Ergebnissen führen, wenn eine enge Integration zwischen den Entwicklungsteams und den Testteams besteht.
Mindestens ein Mitglied aus jedem Team sollte an den anderen Planungs- und Implementierungstreffen teilnehmen.
quelle