Frage

Ein Freund von mir wurde erklärt, wie sie es tun Ping-Pong-Paarung mit TDD an seinem Arbeitsplatz und er sagte, dass sie einen „kontradiktorischen“ Ansatz. Das heißt, wenn die Testschreib Person die Tastatur um auf die Implementierer gibt, den Implementierer versucht, den nackten einfachste (und manchmal falsche Sache) zu tun, um den Test zu bestehen zu machen.

Zum Beispiel, wenn sie Testen eine Methode getName () und die Testprüfungen für „Sally“, die Umsetzung der GetName-Methode würde einfach sein:

public string GetName(){
    return "Sally";
}

Was wäre natürlich, den Test (naiv).

Er erklärt, dass diese naiven Tests hilft zu beseitigen, die eher für bestimmte Dosen-Werte überprüfen als das tatsächliche Verhalten zu testen oder erwarteten Zustand von Komponenten. Es hilft auch, die Schaffung von mehr Tests fahren und letztlich besseren Design und weniger Fehlern.

Es klang gut, aber in einer kurzen Sitzung mit ihm, es schien, als ob es viel länger dauerte über eine einzige Runde der Tests zu bekommen, als sonst, und ich habe nicht das Gefühl, dass viele zusätzlichen Wert gewonnen wurde.

Haben Sie diesen Ansatz verwenden, und wenn ja, haben Sie es aus gesehen bezahlen?

War es hilfreich?

Lösung

Es basiert auf der Mannschaft Persönlichkeit. Jedes Team hat eine Persönlichkeit, die die Summe seiner Mitglieder. Sie müssen vorsichtig sein, nicht passiv-aggressive Implementierungen mit einem Hauch von Überlegenheit getan zu üben. Einige Entwickler sind frustriert von Implementierungen wie

  

return "Sally";

Diese Frustration zu einem erfolglosen Team führen wird. Ich war unter der frustriert und sah es nicht auszahlt. Ich denke, ein besserer Ansatz mehr mündliche Kommunikation machen Vorschläge darüber, wie ein Test besser umgesetzt werden könnte.

Andere Tipps

Es kann sehr effektiv sein.

Es zwingt Dich mehr darüber nachzudenken, was testen Sie die anderen Programmierer zu schreiben haben, um die korrekte Funktion zu schreiben, die Sie benötigen.

Sie bauen für Stück den Code Stück häufig die Tastatur vorbei

Es kann ziemlich anstrengend und zeitaufwändig sein, aber ich habe festgestellt, dass sein selten habe ich wieder zu kommen hatte und einen Fehler in jedem Code zu beheben, die so geschrieben wurde,

Ich habe diesen Ansatz verwendet. Es funktioniert nicht mit allen Paaren arbeiten; Manche Menschen sind einfach von Natur aus resistent und wird es nicht eine ehrliche Chance geben. Aber es hilft Sie tun TDD und XP richtig. Sie wollen versuchen, und langsam Funktionen Ihren Code-Basis hinzufügen. Sie wollen nicht einen großen monolithischen Test schreiben, die eine Menge Code nehmen zu befriedigen. Sie wollen ein paar einfache Tests. Sie wollen auch sicherstellen, dass Sie die Tastatur hin und her zwischen den Paaren regelmäßig vorbei sind, so dass beiden Paare im Eingriff sind. Mit kontradiktorischer Paarung, tun Sie beide. Einfache Tests führen zu einfachen Implementierungen wird der Code gebaut langsam, und beiden Menschen sind während des gesamten Prozesses beteiligt.

Ich mag es, einen Teil der Zeit - aber nicht verwenden, dass Stil die ganze Zeit. Wirkt als nette Abwechslung zu Zeiten. Ich glaube nicht, ich mag den Stil der ganze Zeit nutzen.

habe ich es ein nützliches Werkzeug bei Anfängern gefunden vorstellen, wie die Tests obwohl die Umsetzung fahren können.

(Zuerst einmal sollte Adversarial TDD Spaß machen. Es sollte eine Gelegenheit für den Unterricht sein. Es sollte nicht eine Gelegenheit für die menschliche Dominanz Rituale sein. Wenn es nicht der Raum für ein wenig Humor ist dann das Team verlassen Es tut uns Leid.. Das Leben ist zu kurz, in einem negativen Umfeld zu verschwenden.)

Das Problem hier ist schlecht genannt Tests. Wenn der Test sah wie folgt aus:

foo = new Thing("Sally")
assertEquals("Sally", foo.getName())

Dann wette, dass ich es genannt wurde „testGetNameReturnsNameField“. Das ist ein schlechter Name, aber nicht sofort offensichtlich so. Der korrekte Name für diesen Test ist „testGetNameReturnsSally“. Das ist, was es tut. Jeder andere Name wird lullt Sie in ein falsches Gefühl der Sicherheit. So wird der Test schlecht benannt. Das Problem ist nicht der Code. Das Problem ist nicht einmal der Test. Das Problem ist der Name des Tests.

Wenn stattdessen die Tester den Test „testGetNameReturnsSally“ genannt hatten, dann wäre es sofort klar gewesen, dass dies wahrscheinlich nicht testen, was wir wollen.

Es ist daher die Pflicht der Implementierer die schlechte Wahl des Prüfers zu demonstrieren. Es ist auch die Pflicht der Implementierer nur das, was die Tests Nachfrage von ihnen zu schreiben.

So viele Fehler in der Produktion auftreten, nicht, weil der Code nicht weniger als erwartet, aber weil es tat mehr. Ja, es Einheit waren Tests für alle Fälle zu erwarten, aber es gab keine Tests für alle besonderen Grenzfälle, dass der Code tat, weil der Programmierer gedacht, „ich besser, nur das tun, werden wir wahrscheinlich brauchen, dass“ und dann über vergessen es. Deshalb TDD funktioniert besser als Test nach. Deshalb haben wir Code weg nach einem Spike werfen. Der Code könnte all die Dinge tun, die Sie wollen, aber es wahrscheinlich nicht irgendwas Sie dachten, Sie benötigt, und dann vergessen.

Zwingen Sie den Test Schriftsteller zu testen, was sie wirklich wollen. Nur Code schreiben, um Tests übergehen zu lassen und nicht mehr.

RandomStringUtils ist dein Freund.

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