Frage

Ich bin in einem Team, wo ich meine Teamkollegen zu überzeugen versuchen TDD zu übernehmen (wie ich es in meinem früheren Team gesehen habe funktioniert und das Setup ist ähnlich). Auch meine persönliche Überzeugung ist, dass, zumindest am Anfang, es hilft wirklich, wenn beide TDD und Pair Programming in Verbindung erfolgen. Auf diese Weise zwei unerfahrene (in TDD) Entwickler gegenseitig helfen können, diskutieren, welche Art von Tests gut voran zu schreiben und machen.

Mein Manager, auf der anderen Seite, fühlt sich, dass, wenn wir zwei neue Entwicklungspraktiken im Team sofort einführen, gibt es eine gute Chance, dass beide scheitern könnten. So will er ein wenig konservativer und stellen alle sein.

Wie kann ich ihn davon überzeugen, dass diese beiden einander ergänzen und nicht orthogonal. Oder bin ich falsch?

War es hilfreich?

Lösung

Ich bin nicht sicher, dass mit mehr Menschen, die nicht wissen, was sie in TDD tun helfen werden. Es wird schnell in beide dich, das Thema googeln, oder beide von Ihnen streiten über genau das, was TDD ist / nicht.

Ich glaube, Sie wäre besser, jemanden im Team des Erhaltens der Evangelist für eine bestimmte Technik zu werden (jemand geht und liest auf TDD auf, jemand geht und liest auf Paarprogrammierung nach oben) und haben die Leute dann fördern und Probe diese Sachen. Ja, beide können zur gleichen Zeit passieren, aber sie haben nicht die ganze Projektteam eingesetzt werden. Sie könnten eine kleine Gruppe von Ihrem Team verbinde Programmierung und dann über ihre Erfahrungen zu berichten.

Andere Tipps

Paar Programme ist wirksam, wenn eine neue Praxis Lernen besonders TDD

So können Sie beide haben mit einem Kompromiss. Tun Sie dies in einer agilen Art und Weise, inkrementell. Nehmen Sie auf Paarprogrammierung zuerst. Es ist die einfachere der beiden. Alle Praktiken nach Paarprogrammierung werden wesentlich einfacher zu erlernen und werden durch das Team schneller und mit größerer consistentcy angenommen werden. Pair Programming ist eine der ersten, wenn nicht der erste engineerring Praxis, die angenommen werden soll. Stellen Sie sicher, dass es effektiv durchgeführt wird. Im Folgenden finden Sie eine Beschreibung, wie Paar Programmierung zu tun.

Gekoppelte Programmierung ist eine der wirksamsten Methoden ein Entwicklungsteam nutzen kann, wenn die Entwicklung von Software. Pairing erfolgt mit zwei Entwicklern aktiv eine Geschichte Karte einen einzelnen Computer und Tastatur entwickeln werden. Manager befürchten, dass gepaart Programmierung mit ihren Programmierkosten verdoppeln. Auf den ersten Blick ist es verständlich, warum sie könnten das denken - nachdem alle --Zwei Entwickler auf der gleichen Aufgabe arbeiten zusammen gefragt werden. In der Praxis haben aber Agile-Teams diese Entwicklung Technik festgestellt, dass der leichte Anstieg der Kosten für die anfängliche Entwicklung (15% nach einer von der Universität Utah Studie) ist mehr als durch eine Verringerung der Defekte versetzt, ein kürzerer und weniger teuerer Test Zyklus und reduzierter Bedarf an Produktionsunterstützung.

Während es widersprüchlich anhört, dass mit Programmierer paaren und zusammen Produktivität verbessert arbeiten, gibt es eine Reihe von Gründen, warum diese Technik wirklich funktioniert hier, warum (Denken Sie an das alte Sprichwort: „Zwei Köpfe sind besser als einer.“):

  • Verbesserte Qualität - Pairing unterstützt Code-Review. Viele Fehler hängen bleiben, wie sie eingegeben werden. Gepaart Programmierung bedeutet Überprüfung kontinuierliche Code von zwei Personen durchgeführt, die auf die Qualität des Codes verpflichtet und arbeiten zusammen, zu identifizieren und zu beheben Fehler zu allen Zeiten. Eine Studie der University of Utah erfolgt war, fand, dass die Endnummer der im Code festgestellten Mängel von durchschnittlich 15% für den Code geschrieben von Paaren reduziert wurde.
  • Weniger Zeit "Stuck" Spent - Programmierung ist hart. Oft kämpfen Entwickler eine Lösung zu finden und mehr Zeit damit verbringen, als sie sollten „stecken“. Mit Partnern Ideen zu sammeln mit und zu vereinbaren, um Hilfe zu suchen, wenn nötig versuchen, die Menge unproduktiver Zeit verbrachte stecken reduziert, eine Lösung zu finden.
  • Weniger Zeitaufwand für Ablenkungen -. Ein Entwickler ist es weniger wahrscheinlich verbringen Zeit auf persönliche Anrufe oder das Surfen im Internet, E-Mail oder Urlaub, wenn er oder sie mit einem Partner arbeitet
  • Zwei Perspektiven sind mit dem Problem angewandt - Unterschiedliche Ebenen der Erfahrung, verschiedene Problemlösungs Stile, verschiedene Hilfs Fähigkeiten zu erhöhen, alle Chancen auf ein Problem schneller lösen. Die Studie von der University of Utah gemacht auch eine besseres Gesamtdesign und kürzere Codelänge für die Software, die von Paaren geschrieben identifiziert.
  • Weniger Angst vor dem Unbekannten - Wenn Sie mit einem anderen Entwickler Paarung ist es einfacher, ein Problem zu lösen oder versuchen, einen Griff auf einer neuen Technologie zu bekommen, als es ist, wenn sie allein arbeiten. Darüber hinaus erhalten sie im Laufe der Zeit ein viel besseres Verständnis der gesamten Anwendung. Am Ende endet das Projekt mit mehreren Personen zu verstehen, jedes Stück des Systems als Folge der Paarung.
  • Weniger wahrscheinlich in Scope zu bauen - Oft fügen Entwickler bereitwillig Funktionalität nicht in den Anforderungen adressiert. Wenn es mit einem Paar arbeiten, der zweite Entwickler ist wahrscheinlicher, sein / ihr Partner auf Aufgabe zu halten.
  • Verbessertes Team Dynamics - Aufgrund des Ansatzes gepaart, Menschen zusammen zu arbeiten, zu lernen. Sie reden öfter und erleben Sie einen besseren Informationsfluss. Teamdynamik verbessern als Ergebnis. In der Tat haben wir, dass die beste Team-Building-Erfahrung gefunden um gemeinsam arbeiten zu produzieren Software, um Ihre Kunden über angeregt werden. Jeder liebt ein Teil eines erfolgreichen Teams zu sein.
  • Beseitigung von Silos von KnoWISSEN UND -. Domain Wissen, Kenntnis des Codes oder Praktiken sind miteinander auf Rotationsbasis des Teams und Entwickler Paar schnell vermehrt durch

Nachdem das Team mit Paarung komfortabel ist, dann auf TDD nehmen. Ein Destription folgt:

Test-Driven Development (TDD) ist ein Software-Entwicklungs-Engineering Praxis der kurzen Entwicklungsschub aus, wo ein neuer Testfall die gewünschte Verbesserung oder neue Funktionalität abdeckt ersten geschrieben, dann notwendig, den Produktionscode der Test ausgeführt, um zu übergeben, und schließlich wird die Software zur Aufnahme Änderungen Refactoring. Die Verfügbarkeit von Tests vor dem eigentlichen Entwicklung sorgt für eine schnelle Rückmeldung nach jeder Änderung. Praktiker betonen, dass die testgetriebene Entwicklung ist eine Methode, Software zu entwerfen, nicht nur ein Verfahren zum Testen. Testgetriebene Entwicklung ist eine leistungsfähige Praxis und ein wichtiger Beitrag zur Reduzierung der Defekte später im Lebenszyklus gefunden. Ein neues Team ist stark mit einer Erfahrung TDD Praktiker zu paaren gefördert oder anderweitig TDD coaching.e erhalten

Testgetriebene Entwicklung erfordert, dass ein automatisierter Unit-Test, Anforderungen des Codes definieren, vor jedem Aspekte des Codes selbst geschrieben. Diese Tests enthalten Aussagen, die entweder wahr oder falsch sind. die Durchführung der Tests gibt eine schnelle Bestätigung des richtigen Verhaltens, wie der Code entwickelt und Refactoring wird. Test-Frameworks basiert auf dem xUnit Konzept bietet einen Mechanismus für das Erstellen und Ausführen Sätze von automatisierten Testfällen. Testgetriebene Entwicklung Zyklus:. Die folgende Sequenz wird auf dem Buch Testgetriebene Entwicklung auf Basis von Beispiel, die viele als in ihrer modernen Form der kanonische Quelltext auf das Konzept sein

  1. einen Test schreiben. In testgetriebene Entwicklung, jede neue Geschichte Karte beginnt mit einem Test zu schreiben. Dieser Test wird fehlschlagen, da es geschrieben wird, bevor das Feature implementiert wurde. Um einen Test zu schreiben, muss der Entwickler die Spezifikation verstehen und die Anforderungen des Merkmals deutlich. Dies kann durch Geschichten-Karten mit Akzeptanzkriterien erreicht werden, um anzugeben, wenn die Anforderungen zu erfüllen sind. Dies könnte auch eine unveränderliche oder Änderung eines bestehenden Test impliziert. Dies ist ein Unterscheidungsmerkmal von Testgetriebene Entwicklung im Vergleich zu schreiben Unit-Tests nach dem Code geschrieben ist. Es die Entwickler konzentrieren sich auf den Anforderungen macht, bevor Sie den Code zu schreiben, einen subtilen, aber wichtigen Unterschied
  2. Führen Sie alle Tests und sehen, ob die neue ausfällt. Dies bestätigt, dass der Test-Harnisch richtig funktioniert und dass der neue Test nicht bestehen fälschlicherweise ohne irgendeinen neuen Code zu erfordern. Der neue Test sollte auch für den erwarteten Grund fehlschlagen. Dieser Schritt prüft die Prüfung selbst, im negativen. Es die Möglichkeit ausschließt, dass der neue Test wird immer passieren, und deshalb wertlos
  3. einige Code schreiben. Der nächste Schritt ist es, einige Code zu schreiben, der die Prüfung verursachen. Der neue Code zu diesem Zeitpunkt geschrieben wird nicht perfekt sein und kann zum Beispiel den Test in einem unelegant Weg passieren. Das ist akzeptabel, weil spätere Schritte zu verbessern und schärfen es. Es ist wichtig, dass der Code nur entworfen, geschrieben, um den Test zu bestehen; nicht weiter (und daher nicht getestet) Funktionalität sollte in jedem Stadium vorhergesagt und ‚für zulässig‘ werden.
  4. Führen Sie die automatisierten Tests und sehen, wie sie Erfolg haben. Wenn alle Testfälle jetzt passieren, kann der Programmierer sicher sein, dass der Code alle getesteten Anforderungen erfüllt. Dies ist ein guter Punkt, von dem den letzten Schritt des Zyklus zu beginnen.
  5. Umgestalten Code. Nun kann der Code bei Bedarf gereinigt werden. Durch die Testfälle erneut ausgeführt wird, kann der Entwickler sicher sein, dass Refactoring keine bestehende Funktionalität zu beschädigen. Das Konzept Vervielfältigung zu entfernen, ist ein wichtiger Aspekt jeden Software-Designs. In diesem Fall gilt es aber auch Überschneidungen zwischen dem Testcode und dem Produktionscode zu entfernen-. Zum Beispiel magische Zahlen oder Strings, die in beide wurden wiederholt, um 3 den Testdurchlauf in Schritt zu machen

Wiederholen

mit einem anderen neuen Test startet, wird der Zyklus dann wiederholt, um die Funktionalität voranzutreiben. Die Größe der Schritte kann so klein sein wie der Entwickler mag, oder größer werden, wenn er / sie fühlt sich sicherer. Wenn der Code einen Test zu erfüllen, geschrieben nicht ziemlich schnell so tun, dann ist die Schrittgröße hat möglicherweise zu groß gewesen, und vielleicht die kleineren prüfbar Schritte sollten stattdessen verwendet werden. Wenn externe Bibliotheken ist es wichtig, nicht-Schritten zu machen, die so klein sind, als nur effektiv die Bibliothek selbst testen werden, es sei denn, es aus irgendeinem Grund zu der Annahme besteht, dass die Bibliothek ist fehlerhaft oder nicht ausreichend ist, verfügen über komplett alle Bedürfnisse der dienen Hauptprogramm geschrieben werden.

Entwicklungs-Stil Es gibt verschiedene Aspekte, unter Verwendung von Testgetriebene Entwicklung, zum Beispiel die Grundsätze der „Keep It Simple, Stupid“ (KISS) und „Yagni“ (YAGNI). Durch die Fokussierung nur den Code auf das Schreiben notwendig, um Tests zu bestehen, können Entwürfe sauberer und klarer sein als oft durch andere Verfahren erreicht wird. Testgetriebene Entwicklung erfordert den Programmierer zuerst die Testfälle scheitern. Die Idee ist, um sicherzustellen, dass der Test wirklich funktioniert und einen Fehler fangen. Sobald dies gezeigt ist, wird der normale Zyklus beginnen. Dies wurde mit dem „Testgetriebene Entwicklung Mantra“ geprägt, bekannt als rot / grün / refactor wo rote Mittel versagen und grün weiter. Testgetriebene Entwicklung wiederholt ständig die Schritte der Testfälle hinzufügen, die scheitern, vorbei an ihnen, und Refactoring. Empfangen der erwarteten Testergebnisse in jeder Phase des mentale Modell des Programmierers des Codes verstärkt, fördert das Vertrauen und steigert die Produktivität

Sie sind absolut richtig, dass Paar-Programmierung immens helfen, wenn etwas Neues zu lernen. Ich stimme Ihnen zu, dass Sie beide zu tun hart pushen sollte.

Vielleicht der beste Weg, es zu legen für Ihre Manager nicht zu empfehlen, dass Sie diese beiden neuen Dinge zur gleichen Zeit einzuführen, sind gefragt. Stattdessen schlagen vor, dass Sie die effizienteste Art und Weise zu fühlen, ist die Umsetzung TDD zu starten, während noch Arbeit bekommen, ist nur zwei Entwickler als „TDD Untersuchungsteam“ zu nehmen und sie zusammen die entsprechenden Werkzeuge einrichten bekommen arbeiten, lernen die Techniken, testen und herauszufinden, was Sie sie in Ihrer Umgebung anwenden müssen tun. Sobald Sie diese Arbeits haben, und haben zwei Menschen, die ein wenig Erfahrung damit haben, dann haben sie aufgeteilt und jeder sitzt mit einem anderen Entwickler für ein paar Tage, dass andere Entwickler bringen auf die neuen Techniken zu beschleunigen. Wiederholen, bis alle Entwickler TDD gelernt haben.

Sie überzeugen nicht. Sagen Sie ihm die Gründe, die Sie beide arbeiten zusammen denken, vielleicht einige Daten präsentieren, die dies bestätigt, und lassen Sie ihn entscheiden. Wenn Sie jeden davon zu überzeugen müssen, dass es eine gute Idee ist, ich wette, dass niemand es zu gut, dauern wird. Natual Opposition.

Persönlich habe ich gefunden Paar Programmierung funktioniert am besten mit einem erfahrenen und einem unerfahren.

Dh würde ich für einen Unterschied in der Fähigkeit / exp Programmierer will anstatt zu versuchen, gleichmäßig Mann entsprechen.

die erfahreneren bekommen mehr davon aus Erklärung und gezwungen, Gedanken zu strukturieren, während die unerfahrenen Chance bekommt Ideen abprallen und holt ‚best practices‘.

als für TDD, ich bin ein großer Fan. Auch hier hilft exp den unerfahrenen, weil es wirklich den Punkt des Tests bringen hilft. Dh Sie wollen nicht unbedingt alles testen ... es fügt konzentrieren. Oft finde ich Menschen auf Tests ohne Fokus schreiben, was sie erreichen wollen.

Unit-Tests sind wichtig imo ... afterall, einige Mitarbeiter werden nicht da sein in 2 Jahren. Wie können Sie den vorhandenen Code ändern, wenn es nichts gibt, seine Funktion gegenüber überprüfen?

Nun, auf dem Manager abhängig, Sie einige Argumente in der XP-Literatur zeigen können, dass diese Praktiken voneinander abhängig sind. Zum Beispiel, wenn Sie keine festen Komponententests haben, dann Refactoring nicht gnadenlos.

Ich würde vorschlagen, dass Sie es schrittweise nähern, dass die Paarung nur für den Zweck TDD herauszufinden, auf ein neues schwieriges Problem wie jede gemeinsame Anstrengung wäre, nicht, dass „alle Produktionsentwicklung wird paarweise durchgeführt werden.“

Während der eine Praxis das andere nicht benötigen, gibt es eine ‚hinterhältig‘ Art und Weise sowohl ein wenig in einer Zeit einzuführen.

Starten Sie mit dem Ziel der TDD-Implementierung eines der verfügbaren xUnit Frameworks. Finden Sie einen kompatiblen Mitarbeiter und fragen, ob etwa eine Stunde pro Tag, sie wären bereit, mit Ihnen zu arbeiten. „Shawn, ich versuche, dieses neue Instrument, würden Sie mir helfen, um sicherzustellen, dass ich es richtig mache?“ funktioniert wirklich gut.

Nach ein paar Tagen mit Shawn, wiederholen Sie mit Susan ...

Machen Sie es trotzdem. Wenn der Manager Sie Paarung fängt, sagen die magischen Worte „Code Review“
Annahme: Offensichtlich sollte das Paar diszipliniert / fokussiert genug sein und produzieren am Ende der Arbeitssitzung Code

einige Tests schreiben, die Aufmerksamkeit auf vorhandene Fehler in der Code-Basis zu bringen - sie dann zu Ihrem Chef zeigen, denke ich, dass er plötzlich TDD könnte zustimmen eine gute Idee ist,

!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top