Chciałem zapytać was ludzi, w których przypadkach sensowne jest testowanie jednostkowe statycznie wpisanego kodu funkcjonalnego, napisanego w haskell, scala, ocaml, nemerle, f # lub haXe (ostatnie jest tym, czym naprawdę jestem zainteresowany, ale chciałem skorzystać z wiedzy większych społeczności).
Proszę o to, ponieważ z mojego zrozumienia:
Jednym z aspektów testów jednostkowych jest posiadanie specyfikacji w formie wykonalnej. Jednak jeśli zastosujesz styl deklaratywny, który bezpośrednio odwzorowuje sformalizowane specyfikacje na semantykę języka, czy faktycznie jest nawet możliwe wyrażenie specyfikacji w postaci wykonalnej w oddzielny sposób, co dodaje wartości?
Bardziej oczywistym aspektem testów jednostkowych jest wyśledzenie błędów, których nie można wykryć za pomocą analizy statycznej. Biorąc pod uwagę, że bezpieczny kod funkcjonalny typu jest dobrym narzędziem do kodowania bardzo zbliżonego do tego, co rozumie twój analizator statyczny, wydaje się, że możesz znacznie zwiększyć bezpieczeństwo w kierunku analizy statycznej. Jednak prosty błąd, taki jak użycie
x
zamiasty
(oba są współrzędnymi) w kodzie, nie może zostać objęty. OTOH taki błąd może również wystąpić podczas pisania kodu testowego, więc nie jestem pewien, czy warto.Testy jednostkowe wprowadzają redundancję, co oznacza, że gdy wymagania się zmieniają, kod je wdrażający i testy obejmujące ten kod muszą zostać zmienione. To narzut jest oczywiście stały, więc można argumentować, że tak naprawdę to nie ma znaczenia. W rzeczywistości, w językach takich jak Ruby, tak naprawdę nie porównuje się z korzyściami, ale biorąc pod uwagę, jak statyczne programowanie funkcjonalne obejmuje wiele testów jednostek naziemnych, wydaje się, że jest to stały narzut, który można po prostu zmniejszyć bez kary.
Z tego wywnioskuję, że testy jednostkowe są nieco przestarzałe w tym stylu programowania. Oczywiście takie twierdzenie może prowadzić tylko do wojen religijnych, więc sprowadzę to do prostego pytania:
Kiedy używasz takiego stylu programowania, do jakiego stopnia korzystasz z testów jednostkowych i dlaczego (jaką jakość zamierzasz uzyskać dla swojego kodu)? Lub na odwrót: czy masz kryteria, według których możesz zakwalifikować jednostkę statycznie wpisanego kodu funkcjonalnego jako objętą analizatorem statycznym, a zatem bez potrzeby pokrycia testu jednostkowego?