Welche Rolle spielt ein Softwarearchitekt im testgetriebenen Entwicklungsprozess?

10

So wie ich es verstehe, geht es bei Test-Driven Development darum, Tests zu schreiben, um die Programmspezifikationen zu definieren (Sie können mich korrigieren, wenn ich falsch liege).

Wenn jemand für das Schreiben der Spezifikationen (einschließlich einer öffentlichen API) für die Software verantwortlich ist (nennen wir ihn den Software-Architekten), bedeutet dies, dass der Software-Architekt alle Tests schreiben muss?

Oder schreibt der Software-Architekt die Spezifikationen und übergibt sie dann den Entwicklern, um Tests zu schreiben?

Oder lassen Sie die Spezifikationen organisch wachsen, indem Sie allen Entwicklern erlauben, ihre eigenen Tests zu schreiben, und vergessen, einen Software-Architekten zu haben?

Robert Harvey
quelle
Es gibt einige Debatten über english.se darüber, was Sie unter "organisch wachsen" verstehen - english.stackexchange.com/questions/17853/… - möchten Sie bestätigen :)
JoseK
@Jose: Der letzte Satz in meinem OP soll ein wenig ironisch sein, da mir klar ist, dass ein Programm immer detaillierte Spezifikationen eines Kunden haben muss. Kunden wissen jedoch nicht immer genau, was sie wollen, weshalb iterative Softwareentwicklungsprozesse existieren. Sehen Sie hier für weitere Informationen über die „wachsende Software“ Metapher.
Robert Harvey

Antworten:

5
Bei der testgetriebenen Entwicklung geht es darum, Tests zu schreiben, um die Programmspezifikationen zu definieren

Sie schreiben keine Tests, um die Spezifikation zu definieren. Die Testbeschreibungen, User Stories und Funktionsbeschreibungen sind die Spezifikation im Sinne von "toten Bäumen".

Zur Überprüfung ist der TDD-Prozess auf den Punkt gebracht:

  • Definieren Sie ein Projekt in Bezug auf Funktionen
  • Beschreiben Sie die Stakeholder, das Verhalten und das Ziel der einzelnen Funktionen mithilfe von User Stories
  • Geben Sie die erwarteten Vorgaben an, die Ereignisse / Bedingungen und Verhaltensweisen / Ergebnisse auslösen, die mit einer User Story verbunden sind, indem Sie Testbeschreibungen verwenden [und dies vervollständigt die 'Spezifikation'].
  • Wählen Sie für jede Iteration eine Reihe von Funktionen aus. Iterationen sollten kurz sein [ich lasse die Planungs- und Schätzungsschritte der Kürze halber weg]
    • Codieren Sie einen Test für eine Funktion (er schlägt fehl, aber Sie mussten API-Entscheidungen treffen, um den Test zu codieren.)
    • Implementieren Sie genug von der Funktion, damit der Test erfolgreich ist
    • Refactor den Code, falls erforderlich
    • Wiederholen Sie diesen Vorgang mit dem nächsten Test, bis die Funktion abgeschlossen ist
    • Wiederholen Sie diesen Vorgang mit der nächsten Funktion, bis die Iteration abgeschlossen ist
  • Wiederholen Sie diesen Vorgang mit der nächsten Iteration, bis das Projekt abgeschlossen ist

Wie viel Design, Architektur, unterstützende Dokumentation usw. Sie auswählen, ist nicht Teil von TDD. Es gibt einige praktische „Best Practices“, über die Sie lesen können. Beachten Sie jedoch, dass dies die „Best Practices“ in der Werkstatt eines anderen sind , nicht in Ihrer.

Beachten Sie, dass es für den Kunden und den Entwickler wichtig ist, die Funktionen zu entwickeln und die Geschichten und Testbeschreibungen zum gegenseitigen Verständnis zusammen zu schreiben

Nachdem dies aus dem Weg war, lautete die ursprüngliche Frage:

Welche Rolle spielt ein Softwarearchitekt bei TDD?

Und die kurze Antwort lautet:

So wie es immer war, so wie es immer war. - David Byrne


EDIT: Die lange Antwort lautet: Der Architekt spielt bei Bedarf während des gesamten Prozesses die üblichen Rollen des Visionärs / Ermittlers / Irritanten / Unterstützers / Rückstopps.

EDIT 2: Entschuldigung, ich habe den Punkt der Unterfragen verpasst! Jeder ist dafür verantwortlich, die Spezifikationen zu schreiben. Alle Entwickler, gegebenenfalls einschließlich des Architekten, sowie des Kunden . Die Entwickler auch codieren die Tests.

Steven A. Lowe
quelle
1
Das macht Sinn, aber die einzigen Schritte, über die ich jemals im Zusammenhang mit TDD gesprochen habe, sind die fünf Schritte in Ihren fünf Insider-Aufzählungszeichen (die den Rot-Grün-Refaktor-Prozess beschreiben). Sind die verbleibenden Aufzählungszeichen wirklich Teil von TDD oder Teil einer umfassenderen Methodik wie Agile oder DDD?
Robert Harvey
@ Robert hmmm ... gute Frage! technisch wären die anderen Kugeln XP; Ich habe gleichzeitig XP und TDD gelernt und nie daran gedacht, sie zu trennen. Bis jetzt ;-)
Steven A. Lowe
@ Robert hat eine Auffrischungslesung gemacht; siehe Änderungen (FYI mit XP ref extremeprogramming.org und TDD ref agiledata.org/essays/tdd.html#WhatIsTDD )
Steven A. Lowe
Hmm, der Link, den Sie für TDD bereitgestellt haben, besagt, dass TDD wirklich testgetriebenes Design ist. Jetzt bin ich wieder da, wo ich angefangen habe. "Sie entwerfen organisch, wobei der laufende Code Feedback zwischen Entscheidungen liefert."
Robert Harvey
1
@ Robert Die Änderungen haben mir sicherlich geholfen, die Frage besser zu verstehen. Ich nehme das D als Entwicklung und interpretiere es als den gesamten Lebenszyklus, nicht nur als Codierungsteil. TDDev ist ein guter Weg, um architektonische Fähigkeiten zu erlernen - das Refactoring hat die Tendenz, eine in diese Richtung zu drängen
Steven A. Lowe
1

Der Software-Architekt schreibt nicht alle Tests. Das würde mir zu viel auf die Schultern einer Person legen.

Der Software-Architekt sollte in der Lage sein, ein erstes Formular für die API zu skizzieren, das Entwickler dann testen und dann die API erstellen. Der Software-Architekt kann jedoch verschiedene Codestandards haben, die nicht unbedingt testbar sind, z. B. Dokumentations- oder Namenskonventionen. Es besteht auch die Möglichkeit, dass der anfänglichen API einige Aufrufe fehlen, die nach Abschluss der Implementierung der API neue Aufrufe hinzufügen. Daher wird die API mit zunehmender Codebasis organisch wachsen, aber die Rolle des Architekten besteht darin, Richtlinien auf hoher Ebene bereitzustellen und sicherzustellen, dass diese eingehalten werden.

Es kann sicherlich Fälle geben, in denen sich ein Team möglicherweise dafür entscheidet, keinen Software-Architekten zu haben. Abhängig von der Größe der API und des beteiligten Unternehmens kann dies jedoch eine gute Idee sein oder auch nicht.

JB King
quelle