Czy jakość kodu ma znaczenie?

1

Kategoria : Jakość kodu

Ten artykuł jest 1 z 2 części w serii Jak pisać kod dobrej jakości?

Jakość koduJaka jest różnica między czystym kodem (ang. clean code) a brudnym (ang. dirty code)? Dlaczego piszemy brudny kod? Czy czysty kod ma w ogóle jakiekolwiek znaczenie?

Niektórzy twierdzą, że jakość kodu nie ma znaczenia, ważne by działał. Nieopatrzenie rozumiejąc metodyki Agile – w pogoni za zwinnością i szybkością – zapominają o dobrych praktykach i standardach. Jest jednak wiele przykładów na to, że budowanie kolosów na glinianych nogach bardzo źle się kończy. Wiele dobrze zapowiadających się firm wypadło z rynku, ponieważ nagle zaczęły mieć kłopoty z jakością. Jak się później okazywało, problemy spowodowane brudnym kodem.

Schemat w każdym przypadku był bardzo podobny. Firma wchodziła na rynek i rozwijała się w piorunującym tempie. Zdobywała klientów, wyprzedzała konkurencję. Jednak po kilku, kilkunastu miesiącach nie była już w stanie z taką dynamiką dokładać kolejnych funkcjonalności. Po następnych kilku miesiącach, wydajność zespołów pracujących w projekcie malała już w zastraszjącym tempie a firma traciła swoich kluczowych klientów, ze względu na pogarszającą się jakość. Kiedy orientowano się w czym rzecz, system trzeba było napisać praktycznie od nowa – kolos stał na glinianych nogach. W tym czasie konkurencja, która dobrze rozłożyła siły w tym biegu z łatwością wygrywała cały wyścig. Okazywało się, że biznes to nie sprint ale bieg długodystansowy.

Każdy z nas zapewne spotkał się z problemem kodu złej jakości. Kiedy trzeba zmodyfikować nieznany nam brudny kod, nasza praca zmienia się w koszmar. Zanim uda nam się ustalić znaczenie zmiennych z1, z2 czy Ol (duże „O” oraz małe „el”) oraz przejrzeć deklaracje i definicje metod o dezinformujących nazwach, to nie mamy już siły na przebrnięcie przez wielokrotnie zagnieżdżone instrukcje if, for a to wszystko jeszcze w pętli while o niespotykanej liczbie warunków. Wypijamy wtedy morze kawy, siedzimy po godzinach i w końcu dajemy radę… Ale jakim kosztem?

Dlaczego tak się dzieje, dlaczego piszemy kod złej jakości?

Moim zdaniem, powody są co najmniej trzy :

  • brak świadomości, że może być inaczej,
  • brak czasu lub doświadczenia potrzebnego na stworzenie czystego kodu,
  • brak wiedzy potrzebnej do tworzenia kodu dobrej jakości .

Fakt, że znalazłeś się na tej stronie drogi Czytelniku, świadczy o tym, że problem pierwszy, czyli brak świadomości, że może być inaczej, już Cię nie dotyczy ;).

Zajmijmy się więc problemem drugim, czyli brakiem czasu lub doświadczenia potrzebnego na stworzenie czystego kodu. Programista, który zna dobre praktyki oraz standardy dot. tworzenia kodu dobrej jakości ale nie ma doświadczenia w ich stosowaniu, potrzebuje więcej czasu, na stworzenie czystego kodu niż na stworzenie kodu działającego, ale niekoniecznie dobrej jakości. Podczas estymacji czasu potrzebnego na wykonanie danego zadania nie odważy się dołożyć 30% tylko po to, aby napisać kod dobrej jakości. Nie zrobi tego z obawy przed niezrozumieniem ze strony innych programistów nie wspominając o przełożonym. Jeśli jednak nie zacznie programować zgodnie ze standardami, nigdy nie nabierze doświadczenia, które pozwoli mu to robić w krótszym czasie. Koło się zamyka. Jedynym rozwiązaniem w takiej sytuacji jest rozmowa z zespołem oraz przełożonym, w której należy uświadomić wszystkich o tym, że problem istnieje i do czego może doprowadzić.

Problem trzeci, czyli brak wiedzy potrzebnej do tworzenia kodu dobrej jakości. Jak wygląda ten czysty kod i czym się charakteryzuje? Jakich technik należy używać, na co zwracać szczególną uwagę aby tworzyć kod dobrej jakości?. Nie uczą tego w szkołach a podręczniki programisty ograniczają się zazwyczaj do podania semantyki i syntaktyki danego języka, spychając zagadnienia związane z jakością kodu na odległy plan.

Każdy kod w zależności od swojego przeznaczenia, będzie optymalizowany pod różnym kątem. Trochę inaczej będzie wyglądał dobrej jakości kod firmware’u do kontrolera RAID a inaczej kod testów jednostkowych. Instnieje jednak zbiór cech, charakterystycznych dla czystego kodu, niezależnie od jego przeznaczenia :

  • Czysty kod powinien zachowywać się przewidywalnie. Kiedy prześledzimy oczami fragment kodu, nie powiniśmy mieć żadnych wątpliwości do czego służy a po jego uruchomieniu powinien zrobić dokładnie to, czego się spodziewaliśmy.
  • Czysty kod powinien być prosty i przyjemny w czytaniu. Jego analiza nie powinna być skomplikowana. Czytając go, powinieneś mieć wrażenie, że opowiada zaimplamantowaną historię.
  • Czysty kod powinien mieć objętość oraz wydajność zbliżoną do optymalnej. Zamniejszamy objętość oraz poprawiamy wydajnośc do momentu, kiedy nie robimy tego kosztem czytelności.
  • Czysty kod powinien być pokryty testami jednostkowymi i akceptacyjnymi, które przechodzą z wynikiem pozytywnym. Praca z kodem pokrytym testami jest o wiele bardziej komfortowa. Każdą zmianę w kodzie możemy od razu przetestować na okoliczność złego oddziaływania na resztę kodu i to zarówno na poziomie jednostkowym jak i akceptacyjnym.

Aby sprostać powyższym założeniom, musimy zwrócić uwagę na każdy element składowy kodu, czyli zadbać o :

Każde z tych zagadnień postaram się opisać w osobnym artykule.

Nie będzie w tym żadnej przesady, jeśli na pytanie zawarte we wstępie, „jaka jest różnica między czystym kodem a brudnym?” odpowiemy, że dokładnie taka sama jak między „być albo nie być”. Firmy, które poważnie traktują swoją przyszłość – dbają o jakość kodu. Robią to poprzez wprowadzanie odpowiednich standardów kodowania, programy szkoleniowe oraz stosowanie metryk jakościowych kodu. Jeśli w Twojej firmie z jakiegoś powodu o tym wszystkim zapomniano, to może jest to ostatni moment, na wprowadzenie zmian.

Nawigacja seriiJak tworzyć dobre nazwy klas, funkcji i zmiennych?»

Comments (1)

[...] This post was mentioned on Twitter by Marek Dikta. Marek Dikta said: Agile-Development.pl: Czy jakość kodu ma znaczenie? http://www.agile-development.pl/czy-jakosc-kodu-ma-znaczenie/ [...]

Post a comment

*