Wie macht man automatisierte Tests populär? [geschlossen]

13

Unsere Codebasis wächst seit 20 Jahren. Wir sind ungefähr 10 Entwickler und arbeiten mit 500kloc. Vor einiger Zeit begann ein kleines Team von uns (2 Entwickler, einer von sqa) an einem automatisierten Testprogramm zu arbeiten. Derzeit dauert ein Lauf 11 Stunden und ist irgendwie ein Integrationstest. Wir arbeiten daran, dieses Problem zu beheben, Fehlalarme zu reduzieren und dabei gute Fortschritte zu erzielen. Aber Details sollten keine Rolle spielen.

Es funktioniert gut und wir verbessern es weiter. Wir (das kleine Team) mögen es sehr. Wenn wir etwas zerbrechen, bemerken wir es einen Tag später und nicht zwei Monate später, wenn sqa einen Blick darauf wirft. Auch unseren Managern (dev + sqa) gefällt die Idee. Aber andere Leute im Team ignorieren einfach die Testergebnisse. Wenn die Tests nach dem Einchecken fehlschlagen, ist dies ein Problem des Tests und nicht der Codeänderung, und es ist nur unser Spielzeugprojekt. Wir haben mehrmals diskutiert, ob ein nicht bestandener Test ein echter Fehler ist. Meistens ist es so.

Wir können und wollen nichts erzwingen. Wie können wir zeigen, dass automatisiertes Testen eine Sache ist?

Peter Schneider
quelle
11
Dies ist kein Software-Engineering-Problem. Es ist ein Menschenproblem.
Robert Harvey
@RobertHarvey Ich habe Abstimmungen über SO erhalten, weil "meinungsbasiert" und ein Kommentar, dass diese Seite perfekt passen würde (und Abstimmungen über diesen Kommentar). Also: wo soll ich fragen? Erziehe mich.
Peter Schneider
2
Ich bin mit @RobertHarvey über dieses Problem. Aber laut Workplace wird Ihre Frage wahrscheinlich als Betrug gewertet. Sehen Sie sich zum Beispiel diese Frage an, die genau das ist, was Sie am Arbeitsplatz
Peter M
1
Lassen Sie sich nicht von diesen Downvotern (oder sogar von engen Abstimmungen) entmutigen! Einige Leute verstehen vielleicht, dass solche Fragen wichtig sind, und können vielleicht helfen. Übrigens sehen auch meine Kollegen den Nutzen automatisierter Tests nicht, obwohl die Vorgängerversion (ohne automatisierte Tests) eine Schachtel mit Fehlern ist. Ändern Sie einfach eine Sache und brechen Sie ein paar andere, scheinbar nicht miteinander verbundene Dinge. Manche Menschen wollen einfach nicht lernen (es gibt offenen Widerstand gegen das Lernen neuer Dinge).
Bernhard Hiller
1
Es ist eine Schande, dass diese Frage geschlossen wurde. Wenn Software-Engineering etwas bedeutet, bedeutet es die Probleme, mit tatsächlichen Menschen zu arbeiten, und die Antworten auf solche Probleme beinhalten Meinungen. Trotzdem ein paar schnelle Ideen: (1) Wenn Sie falsche Negative testen, wird dies definitiv den Pushback verstärken, da sich die Ergebnisse wie Zeitverschwendung anfühlen werden. (2) Verringern Sie die Laufzeit nach Möglichkeit. 11 Stunden fühlen sich nicht sofort an, auch wenn es weitaus besser als zwei Monate ist; (3) übernimmt sqa diese Tests als Metriken, die sie beobachten. Sie werden von Ihrer Organisation in diesem Bereich bereits erkannt.
Dale Hagglund

Antworten:

4

Haftungsausschluss

Obwohl ich wie ein Manager klinge, schrieb ich dies als Entwickler, der auch davon überzeugt werden musste, dass automatisierte Tests gut sind.


Sie müssen die grundlegende Psychologie der Entwickler verstehen. Es ist ein tief verwurzeltes Bedürfnis der Entwickler, Code zu schreiben. Alles, was sie daran hindert, ist eine sehr, sehr schlechte Sache. Ein fehlgeschlagener Test ist definitiv etwas, das sie daran hindert, ergo ist es eine schlechte Sache. Daher der Widerstand.

Was Sie beachten müssen, ist, dass die automatisierten Tests sie zwar kurzfristig verlangsamen, auf lange Sicht jedoch viel Kummer ersparen und sie tatsächlich beschleunigen, da sie sich mehr auf die Entwicklung von konzentrieren können neue Dinge und verlieren weniger Zeit damit, die andere Sache zu tun, die Entwickler hassen: Fehler zu beheben.

Und ja, du musst es durchsetzen. Sie müssen die bedingungslose Unterstützung des Managements erhalten und das Schreiben automatisierter Tests als obligatorisch und nicht verhandelbar festlegen. Mit der Zeit werden sich die Entwickler an sie gewöhnen. Was hilft, ist, wenn Sie einige Kennzahlen erstellen können, die zeigen, wie viel mehr neue Entwicklungen durchgeführt wurden und um wie viel weniger Fehler seit Einführung der automatischen Tests aufgetreten sind. Wörter sind flüchtig. Zahlen sind solide. Und Zahlen sind etwas, das ein durchschnittlicher Entwickler besser versteht als Worte. Wenn Sie mit soliden Zahlen nachweisen können, dass automatisierte Tests gut sind, werden Sie wenig bis gar keinen Widerstand dagegen erhalten.

Vladimir Stokic
quelle
11

Wenn die Tests nach dem Einchecken fehlschlagen, ist dies ein Problem des Tests und nicht der Codeänderung, und es ist nur unser Spielzeugprojekt. Wir haben mehrmals diskutiert, ob ein nicht bestandener Test ein echter Fehler ist. Meistens ist es so.

Da ist dein Problem. Wenn Ihre Tests unzuverlässig sind (auch wenn sie "die meiste Zeit" zuverlässig sind), werden die Ergebnisse von den Leuten ignoriert. Ihr Automatisierungsteam sollte sich darauf konzentrieren, diese falschen Negative zu beseitigen. Nur dann wird der Rest des Teams genug Vertrauen in die Ergebnisse gewinnen, um ihnen tatsächlich zu vertrauen.

Eternal21
quelle
5
Andererseits könnte es etwas anderes sein. Wie Widerstand gegen Veränderung. Wenn ein Test fehlschlägt, muss immer etwas behoben werden, entweder der Code oder der Test. Daher ist die Einstellung, dass Benutzer Tests ignorieren, weil die Tests fehlerhaft sind, falsch.
Robert Harvey
Wir haben mit ihnen gesprochen, als wir sicher waren, dass etwas kaputt gegangen ist (z. B. der Test ist nach dem Einchecken dreimal hintereinander fehlgeschlagen und hat die fragliche Funktionalität beeinträchtigt). Aber ja, die Erhöhung der Zuverlässigkeit hat derzeit Priorität.
Peter Schneider
1
@PeterSchneider ein Test kann 100-mal hintereinander fehlschlagen, das wird es vor allem tun, wenn der Test falsch ist.
Pieter B
Andererseits ist ein Test, der niemals fehlschlägt, höchstwahrscheinlich völlig nutzlos
Vladimir Stokic,
1
+1 Sprödigkeitstests sind definitiv ein Problem. Entwickler müssen davon überzeugt sein, dass die Tests, die sie schreiben, nützlich sind, keine unnötigen Komplikationen verursachen und nicht viel zu tun haben .
Andres F.
6

Wir können und wollen nichts erzwingen.

Sie sollten es auf jeden Fall durchsetzen! Wenn jemand neuen Code drückt und die Tests fehlschlagen, sollte der Code abgelehnt werden! Nur so kann ein größeres Softwareprojekt zuverlässig gepflegt werden.

Banan
quelle
Ich denke, das hängt vom System, den Tests, dem Maßstab und dem Entwicklungsprozess ab. Nicht alle Fehler können sofort behoben werden, und es müssen auch nicht alle Probleme sofort behoben werden.
NickL