projekt średniej wielkości aplikacji podczas wykonywania TDD? [Zamknięte]

Mam dobre pojęcie o testowaniu jednostkowym, DI, próbach i całej dobroci projektowej, która musi być tak blisko pełnego pokrycia kodu, jak to tylko możliwe (ludzka odpowiedzialność, myśl „jak to przetestuję” jako kod I, itd. ..).

Moja najnowsza aplikacja nie kodowała prawdziwego TDD. Pamiętając o kodowaniu, miałem na uwadze testy jednostkowe i pisałem testy po napisaniu kodu, refaktoryzacji itd. Zrobiłem TDD, kiedy było to „łatwe” ... jednak nie miałem tak dobrego zrozumienia jak Robię to teraz ... To był pierwszy projekt, który w pełni wykorzystałem w DI, szyderczy framework itp., A pierwszy, który miał pełne pokrycie kodu - i nauczyłem się wiele z tego, jak to robiłem. Chętnie zostanę przydzielony do mojego następnego projektu, dzięki czemu będę mógł kodować go całkowicie od zera.

Wiem, że jest to szerokie pytanie i już zamówiłem TDD na przykład i XP Unleashed, ale mam nadzieję na krótki przegląd tego, jak wszyscy projektują / piszą dużą aplikację wykonującą TDD.

Czy piszesz całą aplikację, używając tylko zgniecionego kodu? (np. napisać wszystkie podpisy funkcji, interfejsy, struktury i napisać całą aplikację, ale bez pisania żadnej rzeczywistej implementacji)? Mogę sobie wyobrazić, że działa na małych i średnich rozmiarach, ale czy jest to możliwe w przypadku dużych aplikacji?

Jeśli nie, jak do diabła napisałbyś pierwszy test jednostkowy dla funkcji najwyższego poziomu w systemie? Powiedzmy na przykład - w serwisie internetowym, gdzie masz funkcję o nazwie DoSomethingComplicated (param1, ..., param6) wystawioną na świat. Oczywiście pisanie testu najpierw dla prostej funkcji, takiej jak AddNumbers (), jest trywialne - ale gdy funkcja znajduje się na szczycie stosu wywołań, takiego jak ten?

Czy nadal projektujesz z góry? Oczywiście nadal chcesz projektować „architekturę” - np. Schemat pokazujący komunikację IE z IIS, która rozmawia z usługą Windows za pośrednictwem WCF, która rozmawia z bazą danych SQL ... ERD, który pokazuje wszystkie tabele SQL i ich pola, itd ... ale co z projektem klasy? Interakcje między klasami itp.? Czy projektujesz to z góry, czy po prostu piszesz kod stub, refaktoryzując interakcje w miarę upływu czasu, aż cała rzecz się połączy i wygląda na to, że zadziała?

Wszelkie porady są mile widziane

questionAnswers(4)

yourAnswerToTheQuestion