Testy jednostkowe
Pamiętam jak Anka Okrasko robiła odbitki litograficzne z wizerunkiem matki boskiej. Rysunek na kamieniu litograficznym zrobiła w oparciu o skserowane z pewnej książki zdjęcie przedstawiające rzeźbę matki boskiej. Mamy więc litografię rysunku kserokopii zdjęcia rzeźby.
Ta długa transformacja przypomniała mi się przy pierwszym kontakcie z Coldfusion - technologią Macromedii w założeniu umożliwiającą nie-programistom tworzenie stron z dynamiczną treścią. Rzecz w tym, że kod Coldfusion jest tłumaczony do JSP, który jest przecież tłumaczony do Servletu, który jest kompilowany do kodu przejściowego który to dopiero jest wykonywany przez środowisko wykonawcze Javy. Cóż za gigantyczne tłumaczenie kodu !
Proponuję spojrzeć na to w ten sposób, że tłumaczenie kodu to pewien specyficzny rodzaj generowania kodu. Mamy więc tutaj wszystkie jego wady, a w szczególności tą najważniejszą: wydłużenie czasu między modyfikacją w kodzie a jego uruchomieniem. W międzyczasie trzeba przecież wygenerować kod.
Zbliża to nas do czasów gdy programy pisało się praktycznie bez testowania. Dziurkowało się je na kartach perforowanych i kilkakrotnie sprawdzano ich poprawność ... w głowie. Pierwsze uruchomienie było jednocześnie pierwszym prawdziwym testem. Zauważcie, że od tamtego czasu testujemy coraz więcej. Dziś testy jednostkowe stają się powszechną praktyką programowania a jednym z nowoczesnych pomysłów na programowanie jest aby testy były w centrum procesu programowania.
Jest to możliwe pod warunkiem, że zaraz po modyfikacji kodu, możemy szybko uruchomić automatyczny test. Zaletą tego podejścia nie jest to, że oprogramowanie będzie bezbłędne - testy jednostkowe tego nie gwarantują - ale zaletą jest to, że podczas programowania możecie się skupić na zasadniczym problemie a drobne błędy pokażą się przy pierwszym teście.
Ciekawe, przeciwne stanowisko w kwestii generowania kodu objął mój idol, Martin Fowler, w artykule: Reflection vs Code generation. Smutek.
Następnym razem będzie mała zagadka z refactoringu i wzorców projektowych, zapraszam.