Jaka jest rola architekta oprogramowania w procesie rozwoju opartego na testach?

10

Jak rozumiem, programowanie oparte na testach polega na pisaniu testów w celu zdefiniowania specyfikacji programu (możesz mnie poprawić, jeśli się mylę).

Jeśli jest ktoś odpowiedzialny za napisanie specyfikacji (w tym publicznego API) oprogramowania (nazwijmy go Architektem Oprogramowania), czy to oznacza, że ​​Architekt Oprogramowania musi napisać wszystkie testy?

Czy też architekt oprogramowania pisze specyfikacje, a następnie przekazuje je programistom, aby napisali testy?

A może pozwalasz, by specyfikacje rosły organicznie, pozwalając wszystkim programistom pisać własne testy i zapomnieć o posiadaniu Architekta oprogramowania?

Robert Harvey
źródło
Trwa debata na english.se na temat tego, co rozumiesz przez „wzrost organiczny” - english.stackexchange.com/questions/17853/… - czy chciałbyś potwierdzić :)
JoseK
@Jose: Ostatnie zdanie w moim OP powinno być nieco wulgarne, ponieważ wydaje mi się oczywiste, że program musi zawsze mieć szczegółową specyfikację od klienta. Ale klienci nie zawsze wiedzą dokładnie, czego chcą, dlatego istnieją iteracyjne procesy tworzenia oprogramowania . Zobacz tutaj, aby uzyskać więcej informacji na temat metafory „rozwijającego się oprogramowania”.
Robert Harvey

Odpowiedzi:

5
Programowanie oparte na testach polega na pisaniu testów w celu zdefiniowania specyfikacji programu

Nie piszesz testów w celu zdefiniowania specyfikacji, opisy testów, historie użytkowników i opisy funkcji specyfikacjami w sensie „martwych drzew”.

Podsumowując, proces TDD w skrócie to:

  • zdefiniuj projekt pod względem funkcji
  • opisz interesariusza, zachowanie i cel każdej funkcji za pomocą historii użytkowników
  • określić oczekiwane dane, wyzwalanie zdarzeń / warunków oraz zachowania / wyniki związane z historią użytkownika za pomocą opisów testów [i to uzupełnia „specyfikację”]
  • wybierz zestaw funkcji dla każdej iteracji; iteracje powinny być krótkie [pomijam etapy planowania i szacowania dla zwięzłości]
    • kod testu dla funkcji (zakończy się niepowodzeniem, ale musisz podjąć decyzję API, aby zakodować test)
    • zaimplementuj wystarczającą ilość funkcji, aby test przeszedł pomyślnie
    • w razie potrzeby prześlij kod ponownie
    • powtarzaj z następnym testem, aż funkcja zostanie zakończona
    • powtarzaj z następną funkcją, aż do zakończenia iteracji
  • powtarzaj z następną iteracją, aż projekt zostanie zakończony

ile projektu, architektury, dokumentacji pomocniczej i innych, które wybierzesz, nie jest częścią TDD. Istnieje kilka praktycznych „najlepszych praktyk”, o których możesz przeczytać, ale pamiętaj, że są to „najlepsze” praktyki w warsztatach innych osób , a nie twoje.

pamiętać, że punkt jest dla klienta i dewelopera, aby wymyślić i napisać funkcji historie i opisy badań razem , wzajemnego zrozumienia

dlatego przy pierwszym pytaniu było:

jaka jest rola architekta oprogramowania w TDD?

Krótka odpowiedź brzmi:

Tak jak zawsze było, tak jak zawsze było. - David Byrne


EDYCJA: Długa odpowiedź brzmi: architekt odgrywa zwykle role wizjonera / badacza / drażniącego / wsparcia / zabezpieczenia podczas całego procesu, w razie potrzeby.

EDYCJA 2: Przepraszam, że nie trafiłem w sedno pytań cząstkowych! Każdy jest odpowiedzialny za napisanie specyfikacji; wszystkich programistów, w tym architekta, jeśli jest to właściwe, oraz klienta . Programiści kodują również testy.

Steven A. Lowe
źródło
1
To ma sens, ale jedyne kroki, o których słyszałem, jak ludzie mówią w kontekście TDD, to pięć kroków w twoich pięciu pociskach wewnętrznych (opisujących proces refaktora czerwono-zielonego). Czy pozostałe pociski są rzeczywiście częścią TDD, czy też są częścią jakiejś większej metodologii obejmującej Agile lub DDD?
Robert Harvey,
@Robert hmmm ... dobre pytanie! technicznie pozostałe kule to XP; Nauczyłem się XP i TDD w tym samym czasie i nigdy nie myślałem o ich rozdzieleniu. Do tej pory ;-)
Steven A. Lowe
@Robert zrobił trochę odświeżającego czytania; zobacz zmiany (FYI przy użyciu XP ref extremeprogramming.org i TDD ref agiledata.org/essays/tdd.html#WhatIsTDD )
Steven A. Lowe
Hmm, link, który podałeś dla TDD, mówi, że TDD jest naprawdę projektem testowym . Teraz jestem z powrotem tam, gdzie zacząłem. „Projektujesz organicznie, a działający kod zapewnia informacje zwrotne między decyzjami”.
Robert Harvey,
1
@Robert zmiany z pewnością pomogły mi lepiej zrozumieć pytanie. Traktuję D jako Rozwój i interpretuję go jako cały cykl życia, a nie tylko część kodującą. TDDev to dobry sposób na naukę umiejętności architektonicznych - refaktoryzacja ma tendencję do popychania w tym kierunku
Steven A. Lowe
1

Architekt oprogramowania nie pisze wszystkich testów. To byłoby dla mnie zbyt duże obciążenie ramion.

Architekt oprogramowania powinien być w stanie naszkicować wstępną formę interfejsu API, którą programiści piszą w tym celu testy, a następnie budują interfejs API. Architekt oprogramowania może jednak mieć różne standardy kodu, które niekoniecznie są testowalne, np. Dokumentację lub konwencje nazewnictwa. Istnieje również możliwość, że w początkowym interfejsie API brakuje niektórych wywołań, które po zakończeniu implementacji dodają nowe wywołania do interfejsu API. W związku z tym nastąpi wzrost organiczny interfejsu API wraz ze wzrostem bazy kodu, ale rolą architekta jest zapewnienie wytycznych na wysokim poziomie i próba upewnienia się, że są one przestrzegane.

Z pewnością mogą zdarzyć się przypadki, w których zespół może nie chcieć mieć architekta oprogramowania, ale w zależności od skali interfejsu API i zaangażowanej firmy może to być dobry pomysł lub nie.

JB King
źródło