Mam zamiar ponownie zaimplementować już zdefiniowany interfejs (zestaw plików nagłówkowych C ++) w stosunkowo dużej i starej bazie kodu. Zanim to zrobię, chciałbym mieć możliwie pełny zakres testów, aby móc wykryć błędy ponownej implementacji tak wcześnie i łatwo, jak to możliwe. Problem polega na tym, że już istniejąca baza kodu nie została zaprojektowana w taki sposób, aby można ją było łatwo przetestować, z (bardzo) dużymi klasami i funkcjami, wysokim stopniem sprzężenia, funkcjami z (wieloma) skutkami ubocznymi itp.
Byłoby miło usłyszeć o wszelkich wcześniejszych doświadczeniach z podobnymi zadaniami oraz kilka dobrych i konkretnych wskazówek na temat tego, jak poszedłeś na temat modernizacji automatycznych testów (jednostki, integracji, regresji itp.) W swoim starszym kodzie.
Odpowiedzi:
Przede wszystkim przeczytaj i przeczytaj Efektywna praca ze starszym kodem autorstwa Michaela Feathersa - jest to niezbędna pomoc przy takich zadaniach.
Następnie kilka notatek:
źródło
Najlepszą znaną metodą jest metoda Mikado. http://mikadomethod.wordpress.com/2010/08/04/the-mikado-method-book/ To tylko uogólnienie prostej techniki, ale to jedyny sposób, w jaki wiem, jak zacząć poprawiać jakość kodu w dużej bazie kodu bez niepotrzebnego ryzyka.
WEWLC jest również bardzo dobrą książką na ten temat, ale pisanie w C ++ nie zawsze jest przydatne w kodzie Java lub Ruby.
źródło
Testy dopasowania retro na starej podstawie kodu mogą być dość trudne, jeśli mają monolityczny wygląd.
Jeśli to możliwe (czy masz czas / pieniądze), jednym ze sposobów na przejście do przodu byłoby przefakturowanie kodu na bardziej testowalne jednostki.
źródło
Chciałbym dodać jeden link . Istnieje kilka przykładów niezbyt łatwych do przetestowania implementacji, które zostały ponownie uwzględnione w kodzie bardziej przyjaznym dla xUnit. Jeśli chodzi o ogólne podejście, spróbuj wypróbować wspomniane już linki (post Joela, Praca ze starszym kodem
źródło