Dbanie o jakość kodu

W jednym z wcześniejszych artykułów pisałem o tym że programowanie jest usługą. Zgodnie z tą zasadą usługę można realizować zarówno dobrze jak i źle. W przypadku tworzenia oprogramowania jakość usługi przenosi się bezpośrednio na jakość kodu, jego strukturę, łatwość rozszerzania oraz wdrażania na środowisko produkcyjne.

A zatem, jak dbamy o jakość kodu w projekcie apki.org?

Aktualizacje zależności

Środowisko rails a także nasza aplikacja opiera się na bardzo dużej ilości zależności (która ciągle dynamicznie się rozszerza wraz z rozrastaniem się systemu). Jest to zgodne z zasadą niewyważania otwartych drzwi i używania raz juz napisanego kodu.

Jednym z największych problemów podczas korzystania z dużej ilości pluginów jest ich aktualność. Krytycznym jest aby każda część systemu była maksymalnie aktualna, dzięki czemu jesteśmy w stanie gwarantować najnowsze łatki dla znajdowanych luk w bezpieczeństwie czy poprawki szybkości działania.

W ruby zależnościami zarządza bundler. Plik Gemfile przechowuje wszystkie informacje o bibliotekach które potrzebujemy jak i o ich wersjach. Aktualizacja wszystkich zależności sprowadza się tutaj do prostego polecenia bundle update. Co jednak gdy programista zapomni o aktualizacjach lub wdrożony już system działa na coraz mocniej przestarzałych bibliotekach?

Z pomocą przychodzi nam usługa Gemnasium. Monitoruje ona commity na naszym repozytorium i dla każdego z osobna sprawdza plik Gemfile.lock na przestarzałe zależności. Po takiej operacji generuje dokładny raport wszystkich bibliotek.

Na naszym repozytorium znajduje się badge Gemnasium. Jeżeli Gemnasium znajdzie przestarzałe zależności status up-to-date zamieni się na out-of-date. Wtedy każda osoba wchodząca na nasze repozytorium zostanie poinformowana że nasz projekt używa przestarzałych biblotek.

Nasz profil Gemnasium: Dependency Status

Jakość kodu CodeClimate

CodeClimate jest to usługa pilnująca każdego kodu. Działa na podobnej zasadzie jak Gemnasium. Monitoruje commity i dla każdego przeprowadza skan jakości kodu źródłowego. Szuka on takich problemów jak zduplikowany kod, zbyt złożone metody itp. Na podstawie ogólnej jakości kodu CodeClimate wystawia ocenę, która zmienia się potem wraz z dodawaniem, usuwaniem i poprawianiem fragmentów kodu.

Nasz profil CodeClimate: Code Climate

Pokrycie testami

Jednym z istotnych wyznaczników jakości jest pokrycie kodu testami. Testowanie takiego pokrycia działa w bardzo prosty sposób, monitoruje wykonywanie wszystkich linii w danym pliku podczas działania testów. Następnie generuje procentowy wynik wszystkich linii które zostały wykonane. Wynik ten nazywany jest właśnie procentowym pokryciem testowym (z ang. Test Coverage).

Bardzo ważną uwagą jest tutaj fakt że nawet 100% pokrycie kodu nie oznacza że nasz kod jest w pełni przetestowany! Oznacza to tylko i wyłącznie że każda linijka została wykonana, ale w żaden sposób nie świadczy to o jakości testów, sprawdzenia wszystkich scenariuszy testowych czy wykorzystania wszystkich kombinacji danych testowych.

Zatem pokrycie jest istotnym, aczkolwiek tylko częściowym wyznacznikiem jakości testów i samego kodu końcowego.

Za pokrycie testowe odpowiada u nas znów usługa CodeClimate.

Nasz profil Test Coverage na CodeClimate: Test Coverage

Nekromancer

Programista z zawodu i zamiłowania. W fundacji zajmuje się głównie rozwiązaniami backendowymi oraz aplikacjami mobilnymi. Współtwórca portalu apki.org oraz mentor na forum

Jastrzębie-Zdrój http://ownvision.pl/