Moja działka to aplikacje desktopowe w C#. Opiszę jak podchodzę do procesu zgodnie z TDD.
Generalnie, jeżeli robimy coś bardziej skomplikowanego niż tygodniowy projekcik to najpierw trzeba stworzyć jakieś założenia. W przypadku pisania aplikacji dla klienta należy uzgodnić z nim wymagania stawiane oprogramowaniu. Przed pisaniem jakiegokolwiek kodu należy mieć jasno sprecyzowaną koncepcję co oprogramowanie ma robić i w jaki sposób. Bez tego można poprawiać kod w nieskończoność.
Jak już wiadomo co będzie tworzone, przechodzę do pisania architektury modelu. Tworzę tylko publiczne klasy i ich publiczne metody. Metody nic nie robią poza wyrzucaniem NotImplementedException. W tym etapie zastanawiam się jak później obiekty będą używane / czego dokładnie od nich oczekuję. Wiem dzięki temu jakie powinny mieć properties, jakie metody o jakich sygnaturach.
Jak już mam gotową architekturę, opisuję ją komentarzami. Dzięki temu mam dokumentację, podczas wykorzystywania obiektów będą się wyświetlały pomocne opisy oraz jest to dobra podstawa do testowania obiektów w testach jednostkowych (wiesz co robi obiekt, jakie wyrzuca wyjątki, to wiesz co trzeba przetestować).
Jak mam architekturę i jej dokumentację, to piszę testy.
Jak pokryłem już cały kod testami, wtedy dopiero zabieram się za pisanie implementacji.