No i jedną z tych myśli była klasyfikacja kodu wg złożoności i liczby zależności. Zaprezentował ją Khorikov w książce Unit Testing (dostępna tez po Polsku, Helion).
Idea polega na tym, że kod można ocenić pod względem:
**złożoności lub wagi domenowej** - czyli jak istotny jest kod dla podstawowego celu aplikacji (np algorytm wyznaczania ścieżki do celu w nawigacji) bądź jak bardzo jest on skomplikowany, czyli ile ma rozgałęzień, przypadków skrajnych i tak dalej;
liczby współzależności - czyli ile zawiera odniesień do zależności spoza kontroli bieżącego procesu, które mogą być modyfikowane również przez inne procesy, np połączenie z bazą danych, redisem, jakimś innym serwisem. Khorikov stawia tutaj wyjątek, że jeżeli serwis jest read only to nie traktuje się go jako współzależność ale ja lubię nie stosować się do tego wyjątku.
Jeżeli dwie powyższe miary zaprezentujemy na układzie współrzędnych (rozpatrując dodatnie połowy obu osi, ofc) to możemy podzielić go na cztery ćwiartki, pic rel. Jedna z nich to algorytmy, czyli kod o niskiej czy lepiej zerowej liczbie współzależności, które należy otestować jednostkowo. Idealnie jeśli ich rola sprowadza się do przyjęcia danych i zwrócenia wyniku, bez "efektów ubocznych". Druga to kontrolery, które testuje się integracyjnie. Niska złożoność ale dużo współzależności. Idealnie nie ma tam żadnych ifów, obliczeń, nic. Jedynie koordynacja komunikacji pomiędzy współzależnościami. Kod trywialny to kod o niskiej złożoności i liczbie współzależności (np gettery, settery etc). Nie testuje się go w ogóle bo nie opłaca się. I wreszcie **kod przekomplikowany **(jest takie słowo w języku niepotocznym? xD) to kod który jest i złożony i ma dużo zależności i jest to ten który widzicie w Waszych spagetti w Wordpressie. Ten ostatni typ to kod, który należy zrefaktorować, podzielić na algorytmy i kontrolery i otestować je indywidualnie.
Po lekturze tej książki natychmiast zastosowałem się do tych wskazówek w projektach w pracy i to był game changer. Od tamtej pory kod który piszę jest otestowany, przemyślany i poukładany. W każdym języku w którym miałem okazję napisać coś więcej ta porada znalazła zastosowanie. Jak ktoś dopiero zaczyna karierę albo dalej ma problem z pisaniem testowalnego kodu to polecam całym sercem.
PS to nie reklama, po prostu jakbym miał zaczynać jeszcze raz to sam bym chciał żeby ktoś mi polecił takie inspirujące rzeczy wcześniej niż odkryłem je sam.
![2428e4ee-a8a5-4a2e-990c-f2ecac28b4b2](https://cdn.hejto.pl/uploads/posts/images/1200x900/26d2d9259de4dbbebf4426469f6041df.jpg)