Ich weiß, das hört sich sehr nach anderen Fragen an, die bereits gestellt wurden, aber es ist tatsächlich etwas anders. Es wird allgemein angenommen, dass Programmierer nicht gut darin sind, eine Anwendung zu testen. Beispielsweise:
Joel über Software - Die fünf wichtigsten (falschen) Gründe, warum Sie keine Tester haben (Schwerpunkt meiner)
Denken Sie nicht einmal daran, Hochschulabsolventen zu sagen, dass sie für Sie arbeiten können, aber "jeder muss eine Weile in der Qualitätssicherung bleiben, bevor er zum Code übergeht". Ich habe viel davon gesehen. Programmierer sind keine guten Tester , und Sie verlieren einen guten Programmierer, der viel schwerer zu ersetzen ist.
Und in dieser Frage sagt eine der beliebtesten Antworten (wieder meine Betonung):
Entwickler können Tester sein, aber sie sollten keine Tester sein. Entwickler neigen dazu, unbeabsichtigt / unbewusst zu vermeiden, die Anwendung auf eine Weise zu verwenden, die sie beschädigen könnte. Das liegt daran, dass sie es geschrieben und größtenteils so getestet haben, wie es verwendet werden sollte.
Die Frage ist also, ob Programmierer schlecht testen können. Welche Beweise oder Argumente stützen diese Schlussfolgerung? Sind Programmierer nur schlecht darin, ihren eigenen Code zu testen? Gibt es Hinweise darauf, dass Programmierer wirklich gut testen können?
Was meine ich mit "testen"? Ich meine nicht Unit-Tests oder irgendetwas, das als Teil der vom Software-Team zum Schreiben von Software verwendeten Methodik betrachtet wird. Ich meine eine Art Qualitätssicherungsmethode, die verwendet wird, nachdem der Code erstellt und in der von diesem Softwareteam als "Testumgebung" bezeichneten Umgebung bereitgestellt wurde.
Antworten:
Die Frage scheint sich speziell um Systemtests zu drehen , also beziehe ich mich in dieser Antwort darauf.
Ich denke, es gibt einen wichtigen Unterschied zwischen schlechten Testpersonen und schlechten Testpersonen.
Warum Programmierer schlecht testen:
Warum Programmierer gut testen können:
Warum Programmierer schlechte Tester sind:
quelle
Ich denke, Programmierer sind schlecht darin , ihren eigenen Code zu testen .
Wir glauben gerne, dass unser Code perfekt gemäß den Anforderungen funktioniert, und testen ihn als solchen. An meiner Stelle testen wir unseren eigenen Code, dann testen wir uns gegenseitig, bevor wir in den eigentlichen Testzyklus eintreten, und auf diese Weise wurden weit mehr Fehler aufgefangen, als nur durch das Testen unseres eigenen Codes
quelle
Programmierer sind definitiv die richtigen Leute, um einige Teile des Systems zu testen - an Orten sind sie die einzigen, die dies möglicherweise effektiv können.
Ein Punkt, den Programmierer beim Testen sehr schlecht finden, ist die Tatsache, dass sie "die Benutzeroberfläche wie ein normaler Benutzer verwenden" - sie sind keine normalen Benutzer und verhalten sich nicht so. Beispielsweise:
Normale Benutzer tun also vieles, was Programmierer nicht tun. Sie können sich bei UAT nicht vollständig auf das Entwicklerteam verlassen.
quelle
Auf technischer Ebene (Komponententests, Integrationstests, Regressionstests) sind Programmierer wahrscheinlich die einzigen qualifizierten Personen, die Tester sind, da diese Art von Tests automatisierbar sind und daher automatisiert werden sollten, was eine Programmierung erfordert.
Aber ich glaube nicht, dass Sie darüber sprechen, und ich bin mir ziemlich sicher, dass Joel Spolsky das auch nicht meint - es ist der verbleibende Teil, der eigentliche manuelle Test: das Umwandeln eines Anforderungsdokuments und einer Funktionsspezifikation in ein Testskript und dann akribische Ausführung dieses Skripts gegen das fertige Produkt.
Ein guter Tester zu sein, erfordert Qualitäten, die meist rechtwinklig zu denen sind, die einen guten Programmierer ausmachen. Es gibt ein wenig Überschneidungen - man muss analytisch denken können, man braucht eine gewisse Affinität zu Computern im Allgemeinen - aber ansonsten sind die Fähigkeiten eines Testers sehr unterschiedlich. Das an sich bedeutet nicht, dass Sie beide Fähigkeiten haben können, und in der Tat tun dies wahrscheinlich einige Leute. Um ein wirklich guter Programmierer zu sein, ist jedoch eine gewisse Faulheit erforderlich (der Wunsch, Ihre Aufgaben zu automatisieren), während ein wirklich guter Tester Ausdauer benötigt (überprüfen Sie alle dreitausend Formularfelder auf Inkonsistenzen), und folglich auch diejenigen Programmierer, die dies tun Ich habe das Zeug, ein Tester zu sein, und verabscheue normalerweise die Idee.
Und dann gibt es da noch die selektive Tendenz: Ein Programmierer, der bereits, wenn auch nur am Rande, an einem Projekt beteiligt ist, hat bereits einige Insider-Kenntnisse über die Codebasis und wird es aus Sicht des Endbenutzers schwer haben, sich dieser mit einem leeren Kopf zu nähern . Es muss nicht einmal explizit sein, wie in "Ich weiß, dass diese Schaltfläche funktioniert, also notiere ich nur 'pass'"; es kann viel subtiler sein und diese subtilen Effekte können dazu führen, dass kritische Randfälle beim Testen übersehen werden.
quelle
Nach meiner Erfahrung sind Programmierer schlechte Tester. Zu oft habe ich gesehen, wie andere und ich "Huh, aber ich habe das getestet, bevor ich eingecheckt habe!" wenn Sie von einem Tester konfrontiert werden, der den Bug vor Ihnen reproduziert.
Warum? Nun, ich bin mir nicht sicher, warum das so ist, aber vielleicht wollen wir, dass das Zeug funktioniert. Oder wir wollen einfach damit fertig werden, dieses oder jenes Feature bereits zu testen.
Testen ist sowieso keine Fertigkeit, die wir gelernt haben, und wir arbeiten nicht als Programmierer, weil wir gut darin sind, Features zu brechen. Außerdem haben wir möglicherweise keine Ahnung, wie eine ordnungsgemäße Testplanung oder all die anderen Aufgaben der Qualitätssicherung durchzuführen sind. Wir sind nicht mehr qualifiziert, die Arbeit eines Testers zu erledigen als ein Tester, der für die Implementierung Ihrer neuen 3D-Rendering-Pipeline qualifiziert ist.
Wie in der Frage steht Testen für nichts Automatisiertes, sondern für das Testen mithilfe des Programms.
quelle
Es gibt verschiedene Teststufen. Die "Low Level" -Tests können und müssen von Entwicklern durchgeführt werden. Ich denke bei Unit Testig.
Auf der anderen Seite sind "High-Level" -Tests eine völlig andere Sache. Im Allgemeinen denke ich, dass Entwickler schlechte Tester sind, nicht weil sie Fähigkeiten vermissen, sondern weil es sehr schwierig ist, in ein paar Minuten zu denken und zu arbeiten.
Ich versuche, meine Codes so gut wie möglich zu testen, aber nach mindestens 10 Minuten, die von einem Tester durchgeführt wurden, tritt etwas auf, das als Fehler oder Verbesserung zu betrachten ist. Dies bedeutet, dass das Testen von etwas, das Sie erstellen, eine schwere Aufgabe ist. Sie wissen, wohin Sie klicken müssen, wann Sie klicken müssen, Sie kennen die Geschäftslogik und wissen wahrscheinlich, wie Daten persistent sind. Du bist ein Gott, den du niemals fallen wirst.
quelle
Welche Art von Tests meinst du? Wenn Sie umfassende ausführliche Tests meinen, könnte ich einige Gründe dafür finden, ja zu sagen, obwohl ich vermute, dass die meisten Menschen in dieser Kategorie arm wären, wenn man alle möglichen Kombinationen von Eingaben als Voraussetzung für solche Tests betrachtet.
Ich kann anerkennen, dass der Entwickler, der die Software entwickelt, möglicherweise Tunnelblick hat, wenn es darum geht, wie der Code behandelt werden soll, und einige mögliche Grenzfälle ignorieren, die möglicherweise nicht berücksichtigt wurden. Wenn ich beispielsweise ein Webformular erstelle, das eine Zahl n annimmt und dann von 1 bis n auf dem Bildschirm druckt, kann es vorkommen, dass einige Sonderfälle fehlen, z. B. wenn nichts eingegeben wird oder etwas, das keine natürliche Zahl wie e oder pi ist . Was das Programm in diesen Fällen tun soll, kann fraglich sein.
Test Driven Development wäre ein Beispiel für eine Entwicklungsmethode, die das Testen in ein anderes Licht rückt, was hier eine andere Sichtweise geben könnte.
quelle
Programmierer definieren Tests genau, wenn sie diese vor dem Schreiben des Codes definieren. Mit der Praxis werden sie noch besser.
Wenn sie Tests für Code definieren, den sie geschrieben haben, sind sie jedoch nicht sehr gut. Sie werden die gleichen blinden Flecken beim Testen haben, die sie beim Schreiben des Codes hatten.
Manuelle Tests mit Programmierern durchzuführen ist einfach albern. Manuelles Testen allein ist albern genug. Programmierer dazu zu bringen ist extrem dumm. Es ist teuer und vertreibt die kompetenten Programmierer.
quelle
Eine Art von Tests, bei denen ich besonders gesehen habe, wie Entwickler versagten, ist das Testen, ob die Anforderung erfüllt wurde. Was Entwickler in einer Anforderung für etwas halten und was Tester für etwas halten, sind oft zwei völlig verschiedene Dinge.
Ich kann mir eines vorstellen, bei dem der Entwickler vor kurzem gebeten wurde, einen Delta-Export durchzuführen, und der Entwickler dachte, es sollten alle Datensätze abgerufen werden, die nicht einmal gesendet wurden, und die Tester meinten, es gäbe neue Aufzeichnungen und Änderungen. Sie mussten zum Klienten zurückkehren, um herauszufinden, wer Recht hatte. Ich habe den Code überprüft und die gleiche Annahme gemacht, dass der Entwickler die Anforderungen erfüllt hat. Denn logischerweise hätten Sie Updates erwähnt, wenn Sie sie einschließen wollten. Und ich bin normalerweise gut darin, diese zweideutigen Dinge zu erkennen, weil ich früher am Ende der Dinge war.
Andere Entwickler, die die Tests durchführen, neigen dazu, viele der gleichen Annahmen zu treffen, weil auch sie bestimmte Annahmen treffen, wie "Nun, sie hätten mehr Details gehabt, wenn sie X Vize Y bedeuten, weil so viele Details zu beantworten sind, bevor ich dies tun könnte Aber Anforderungsschreiber denken nicht so. Also muss jemand, der eher wie Anforderungsschreiber denkt, die Annahmen der Entwickler testen, und jemand, der kein Entwickler ist, ist der bessere Mensch, um überhaupt zu erkennen, dass es ein Problem gibt.
quelle