Ein Kollege ist nicht gewillt, Komponententests zu verwenden, sondern entscheidet sich für einen Schnelltest. Geben Sie ihn an die Benutzer weiter, und wenn alles in Ordnung ist, wird er live veröffentlicht. Unnötig zu erwähnen, dass einige Bugs durchkommen.
Ich erwähnte, wir sollten über Unit-Tests nachdenken - aber sie war alles dagegen, sobald klar wurde, dass mehr Code geschrieben werden müsste. Das versetzt mich in die Lage, etwas zu verändern und nicht sicher zu sein, ob die Ausgabe dieselbe ist, besonders da ihr Code Spaghetti ist und ich versuche, sie zu überarbeiten, wenn ich die Gelegenheit dazu bekomme.
Was ist der beste Weg für mich?
refactoring
unit-testing
Billy Bob
quelle
quelle
Antworten:
Sie ist sich der Vorteile von Unit-Tests nicht bewusst und das müssen Sie ändern:
Du musst ihr beweisen, dass es ihre Arbeit verbessern wird, nicht nur deine. Das wird schwierig, sie wird wahrscheinlich versuchen, sich auf jeden negativen Aspekt zu konzentrieren, den sie finden könnte, wenn sie Angst vor Veränderungen hat.
Sie können versuchen, mit ihr über alle Vorteile zu diskutieren und auf alle ihre Gegenargumente zu hören. Warten Sie, bis sie fertig ist, bevor Sie anfangen, sich selbst zu unterhalten.
Um sich vorzubereiten, sollten Sie in P.SE oder Google nach allen Dingen suchen, die das Management oder die Entwickler mit Unit-Tests zu tun haben, und die Antworten zusammenstellen, die Sie in Ihren Gesprächen mit Ihrem Kollegen verwenden werden.
Nur ihr zuzuhören und zu beweisen, dass es ihre Arbeit verbessern wird, wird dir sehr helfen. Sie beweisen, dass Sie von ihrer Meinung betroffen sind, und Sie stellen ihr alle Daten zur Verfügung, die sie benötigt, um die Situation zu analysieren und schließlich ihre Meinung zu ändern.
quelle
Schreibe einen Unit Test (sag es ihr nicht)
Warten Sie, bis die Sache kaputt geht. Lassen Sie sie zwei Tage lang manuelle Tests durchführen. Ziehen Sie dann Ihre Komponententests heraus und finden Sie den Fehler in drei Sekunden.
In Deckung gehen...
quelle
rm -rf
den Quell- und Unit - Test - Verzeichnisse, nur die Funktionstests zu halten und einfach erhalten vorbei , sie wieder eins nach dem anderen.Die Automatisierung sonstiger manueller Aufgaben sollte jeden Programmierer ansprechen.
Sie schreibt also nicht mehr Code, sondern macht weniger manuell.
quelle
(Einer der) Punkte bei automatisierten Tests ist die Wiederholbarkeit . Wenn Sie einen Schnelltest von Hand durchführen, können Sie diesen schneller durchführen als beim Schreiben eines Komponententests (zumindest für Anfänger mit Komponententests - jeder, der Erfahrung mit Komponententests hat, kann Tests ziemlich schnell durchführen).
Aber was ist, wenn morgen oder nächste Woche eine kleine (oder große ...) Änderung am Code vorgenommen wird? Würde Ihr Kollege gerne nach jeder Änderung dieselben manuellen Tests wiederholen, um sicherzustellen, dass nichts kaputt geht? Oder würde sie lieber "codieren und beten"?
Je mehr der Code geändert wird, desto mehr zahlen sich die Unit-Tests für Ihre ursprüngliche Investition aus . Es dauert nicht lange, um auf die positive Seite zu kommen, auch wenn die Tests tatsächlich Fehler aufdecken. Aber sie tun das auch regelmäßig - an diesem Punkt werden sie von unschätzbarem Wert. Und sobald jemand das Gefühl der Sicherheit und das Vertrauen in den eigenen Code verspürt, das ein erfolgreicher Unit-Testlauf vermittelt, gibt es normalerweise kein Zurück mehr.
Wenn sie überzeugt ist, aber Angst hat, sich in das neue Gebiet zu wagen, bieten Sie ihr eine Programmiersitzung an, um gemeinsam ihre ersten Unit-Tests zu schreiben . Wählen Sie eine Klasse aus, die nicht zu schwierig zu testen ist, aber so komplex, dass es sich lohnt, sie zu testen.
Wenn sie jedoch nicht überzeugt ist, müssen Sie möglicherweise weitere Fakten sammeln . Solche Tatsachen können sein
Sammle solche Daten und zeige ihr dann höflich die Ergebnisse. Wenn dies immer noch nicht ausreicht, um sie zu überzeugen, müssen Sie möglicherweise das Problem diskutieren und Ihre gesammelten Beweise an die Geschäftsleitung weitergeben. Das sollte nur Ihr letzter Ausweg sein, aber manchmal gibt es keinen anderen Weg.
quelle
Schreiben Sie eine grundlegende Testabdeckung für die schlechtesten Teile ihres Codes, faktorisieren Sie sie anhand dieser Tests, und sprechen Sie dann mit dem Management darüber, dass Unit-Tests in fortlaufenden Builds die Produktivität verbessern. Änderungen werden einfacher, wenn sie von einem Arbeitgeber angeordnet werden, als wenn sie von einem einzelnen Entwickler durchgeführt werden.
Ich weiß nicht, wie ich das richtig ausdrücken soll, aber: Wenn du ihren Code überarbeitest, "wenn du eine Chance hast" ... nun, sie denkt wahrscheinlich, du bist ein bisschen douche, weil du dich in "ihr Geschäft" verwickelt hast. , so ist es weniger wahrscheinlich, dass Sie offen zuhören. Nach meiner Erfahrung bleiben die Menschen an dem hängen, was sie getan haben - auch wenn es nicht besonders gut ist.
quelle
Devils Advocate spielen: Sie hat einen Punkt. Ich sage es normalerweise so:
Automatische Tests lösen die Probleme von zu viel Code mit noch mehr Code.
Begründung:
Nun gibt es ein paar Argumente, die sich dagegen aussprechen lassen. Lassen Sie mich die ansprechen, die mir einfallen:
Größe vs. Einfachheit: Natürlich ist es möglich, Code kürzer und schlechter zu machen. Dies ist jedoch nur ein Problem, wenn Codebasen mit unterschiedlichen Verhältnissen von Kürze zu Einfachheit verglichen werden. In der Diskussion kann davon ausgegangen werden, dass wir diesen Faktor irgendwie steuern können.
Unit-Tests setzen Sie unter Druck, Abhängigkeiten zu reduzieren, und ich stimme empirisch zu, dass das Reduzieren von Abhängigkeiten Probleme mit der Codegröße mindern kann (in dem Sinne, dass bei zwei Codebasen ähnlicher Größe die mit mehr Interdependenzen schlechter ist). Jedoch , während Abhängigkeiten betwwen Produktionscodeeinheiten zu reduzieren, stellt es Kopplung zwischen der Test- und der Einheit selbst.
TL; DR: Ich behaupte nicht, dass Unit-Tests schlecht sind. Ich frage: Gibt es einen Break-Even-Punkt, an dem Tests schaden, der mit der Menge an Code korreliert?
quelle
Ich denke, Sie sind in einer schwierigen Position. Ich war in einem Team, in dem Leute keine Komponententests oder, schlimmer noch, schreckliche, nicht wartbare Komponententests geschrieben haben. Aber jeder wusste, dass Unit-Tests gut sind.
Die Einheitentestsuite des Teams auf eine gute Qualität zu bringen, war daher ein langer und schwieriger Weg. Immer auf der Suche nach Verbesserungsmöglichkeiten, nach Ideen, nach Erfahrungsaustausch.
Sie haben andererseits einen Entwickler, der den Nutzen nicht einmal erkannt hat. Und dann auch noch Spaghetti Code. Ich denke, einer der wichtigsten Gründe in diesem speziellen Fall ist die Tatsache, dass das Schreiben guter Komponententests ein locker gekoppeltes Design erzwingt. Sie dazu zu bringen, den Test zu schreiben, könnte hoffentlich auf lange Sicht auch den "echten" Code verbessern.
Aber ich denke, dass es am Ende eine Teamentscheidung ist (ich weiß nicht, wie viele Sie im Team sind?). Wenn das Team einen Konsens darüber erzielen kann, dass es eine gut abdeckende Einheitentestsuite geben sollte, muss sich jeder anpassen, Erfahrungen austauschen und Ihr Team zusammenwachsen lassen.
Wenn das Team jedoch keinen Konsens darüber erzielen kann, dass Sie Komponententests schreiben sollten, empfehle ich Ihnen, ein anderes Entwicklerteam zu finden, mit dem Sie zusammenarbeiten können.
quelle
Ist sie die Chefin?
Wenn ja ... stecken Sie irgendwie fest, es sei denn, Sie können sie von den Vorteilen überzeugen, die im Grunde genommen im Sinne von "eine Unze Vorbeugung ist ein Pfund Heilung wert" sind. Bugs dringen durch. TDD hilft dabei, dies zu mildern, indem eine konsistente Ausgabe erstellt wird.
Ist sie nicht die Chefin?
Was sind die Kodierungsstandards, in denen Sie arbeiten? Warum darf sie Spaghetti-Code ausspucken? Präsentieren Sie dem Chef einen Business Case mit den Worten "Wir werden viel weniger Zeit für Bugs aufwenden, wenn wir etwas mehr Zeit für TDD aufwenden". Überzeugen Sie jemanden, der Veränderungen mit einem Business Case erzwingen kann.
Dokumentieren Sie Fälle, in denen TDD Zeit und Geld hätte sparen können.
Dieser Bug stellte sich vor. Es wäre gefangen worden, bevor es live ging. 2 Stunden Vorbeugung hätten uns 10 Stunden Heilung erspart. Es ist hier und hier und hier passiert. Diese 10 Arbeitsstunden, die dem Unternehmen 30 Mannstunden erspart hätten. Das ist so viel Geld.
quelle
Warum?
Sie haben das Problem geschaffen. Sie sollten es lösen.
Welcher Manager lässt dies zu? Warum ist der Buggy-Code einer anderen Person jetzt Ihr Problem?
Sie haben einen Kollegen und einen Manager, die beide dafür sorgen, dass dies geschieht. Und indem Sie das Chaos beseitigen, sind Sie ein williger und aktiver Teilnehmer.
Nichts wird sich ändern, wenn sie den Schmerz schlechter Qualität nicht spüren.
quelle
Sie ist ganz richtig, Unit-Tests sind "mehr Code".
Es muss jedoch einfach mehr Code geschrieben werden, um sicherzustellen, dass das Programm so funktioniert, wie es sollte (immer und immer wieder). Es ist keine Zeitverschwendung. Es ist ebenso Teil des Systems wie seine Kernkomponenten.
Fordere sie heraus auf:
quelle
Ich spreche als einer, der derzeit Produktionscode ausführt, gefolgt von Komponententests anstelle von TDD, was an meinem derzeitigen Standort nicht gut zu sein scheint die alte Tasche, keine Silberkugel) ...
Es kann schwer zu verkaufen sein. Ich war immer noch nicht in der Lage, meine Mitarbeiter für Unit-Tests zu verkaufen. Ich weiß, dass ich in meinem Unit-Test-Code viel mehr Fehler mache als in meinem Produktionscode. Es ist also ein bisschen frustrierend, so viel Zeit damit verbringen zu müssen, Unit-Test-Codes zu reparieren ... Es ist jedoch eine gute Versicherung, wenn Code geändert wird. Gute Möglichkeit, Randbedingungen automatisch zu testen.
quelle
Zeigen Sie ihr, wie viel Unit-Tests helfen, indem Sie Unit-Tests selbst erstellen.
Wie der heilige Franziskus einmal sagte: "Predige immer. Wenn nötig, benutze Worte."
Wenn sie feststellt, dass in Ihrem Code Komponententests verwendet werden und Sie in der Lage sind, Fehler mit Komponententests schneller zu beheben, ändert dies möglicherweise ihre Meinung. Möglicherweise aber nicht.
Egal wie das Ergebnis ausfällt, sie sieht dich nicht als Druckmittel gegen sie, zu dem du nicht bereit bist. Das musst du ändern, die Wahrnehmung, dass du nicht mit gutem Beispiel vorangehst.
quelle