Jak zmierzyć oprogramowanie ?

W pewnym momencie naszej kariery, gdy popełnimy już troszkę kodu i zaczniemy tworzyć oprogramowanie w skali większej od stronek-wizytówek często zaczynają się pojawiać problemy z utrzymaniem właściwej jakości oprogramowania. Serwisy jakie tworzymy zaczynają mieć coraz bardziej skomplikowane reguły biznesowe.

Zaczynamy stosować więc wzorce projektowe i… i czasami nam to wychodzi a czasami nie. Po pewnym czasie gdy nabierze się doświadczenia, można zapytać się samego siebie, czy tak naprawdę poprawiliśmy jakość swojego kodu. Patrząc na stary i nowy kod, większość z nas pewnie odpowie, że jakość się znacznie polepszyła, kod jest ładnie sformatowany, nauczyliśmy się pisać klasy, wprowadziliśmy wzorce, w zasadzie wszystko ok. Natomiast wielokrotnie może być to złudne wrażenie. Ciężko jakość kodu ocenić “na oko”. Dlatego też mądrzy ludzie gdzieś w Ameryce (nie łudźmy się, w Polsce by się nie przebili ;P) wymyślili coś takiego jak metryki kodu.

Czym są metryki kodu ?

Metryka jest miarą, dzięki której możemy coś zmierzyć. W tym przypadku metryka kodu będzie pewną miarą kodu, wikipedia podaje kilkanaście rodzajów metryk, jednak w tym artykule chciałbym przedstawić tylko pokrótce te, które można wygenerować za pomocą narzędzia Php Depend. Php Depend jest skryptem php działającym z linii komend, który umożliwia wyliczenie metryk kodu dla plików php.

Jak używać Php Depend?

Po pierwsze, należy go ściągnąć z repozytorium git-a. Na szczęście nie trzeba klonować repozytorium albowiem na git-hub’ie można ściągnąć od razu spakowane paczki. Gdy już rozpakujemy naszego zip’a należy przejść w command line’ie do katalogu z php dependem oraz wydać komendę

php pdepend.php --jdepend-chart=ścieżka/chart.svg --summary-xml=ścieżka/metrics.log --overview-pyramid=ścieżka/pyramid.svg ŚĆIEŻKA_DO_ANALIZOWANEGO_KATALOGU.

Ta komenda po analizie kodu obecnego w danym katalogu wygeneruje nam trzy pliki:

  • chart.svg – wykres niestabilności do abstrakcji
  • metrics.log – xml z metrykami każdego pliku
  • pyramid.svg – wykres słupkowy z metrykami całego katalogu(paczki)

Pliki można obejrzeć pod firefox’em. Natomiast ważniejsze jest to co przedstawiają. Zobaczymy w nich następujące metryki:

  • Instability – miara tego jak bardzo paczka (zbiór klas) jest odporna na zmiany w innych paczkach tj. jak bardzo zależy od innych paczek. Czym większa niestabilność paczki tym więcej trzeba będzie zmieniać w jej klasach gdy klasy z innych paczek zostaną zmodyfikowane.
  • Abstraction – abstrakcja – ilość klas abstrakcyjnych / interfejsów do sumarycznej ilości klas w paczce
  • LOC – lines of code – ilość lini kodu jakie zawiera paczka
  • CYCLO – cyclomatic complexity – miara skomplikowania kodu, jest proporcjonalna do ilości struktur kontrolnych (if, switch, goto, pętle)
  • NOC – number of children – polega na zliczaniu liczby klas potomnych danej klasy
  • NOP – number of packages – liczba paczek, za paczkę liczy się katalog w tym przypadku
  • NOM- number of methods – liczba metod
  • ANDC – Average Number of Derived Classes: Średnia liczba klas, które bezpośrednio dziedziczą z danej klasy, nie uwzględnia klas zewnętrznych
  • AHH – Average Hierarchy Height: wyliczona średnia drzewa dziedziczenia, nie uwzględnia klas zewnętrznych.

Wymienione powyżej metryki kodu są metrykami, które można odczytać z obu wykresów i w głównej mierze mają charakter statystyczny / ilościowy, głównie zliczają ilość klas, linii kodu etc. Natomiast najważniejszą rzeczą w mierzeniu oprogramowania jest aspekt jakościowy, postaram się go bardziej zagospodarować w kolejnym artykule 😉

  1. Zyx says:

    W przypadku oprogramowania open-source warto skorzystać z serwisu Ohloh, który potrafi podać kilka metryk dot. kodu źródłowego na podstawie zrzutu repozytorium. Nie są może aż tak dokładne, jeśli chodzi o samą strukturę kodu (mierzona jest tylko ilość linii, ilość komentarzy i procentowy udział języków programowania), ale część dot. samego repozytorium i poszczególnych użytkowników jest niezwykle rozbudowana. Ich oprogramowanie liczące jest dostępne na zasadach open-source, zatem można je wykorzystać na własne potrzeby.

  2. Wojciech Soczyński says:

    Good point 😉 jednak powiedzmy sobie szczerze, że akurat te metryki są mało interesujące. Ciekawsze rzeczy będą w kolejnej części serii 😉

  3. Vokiel says:

    Ciekawa rzecz, co prawda bardziej jako ciekawostka, jednak daje jakiś pogląd na projekt.

    Oczywiście, nie jest to miara jakości, ale o tym to ponoć w następnym artykule 😉

  4. Mnie także zaciekawił ten wpis, czekam na więcej. ;] O metrykach kodu miałem kilka wykładów na uczelni, jednak w sposób typowo “oj, jacy to z nas biznesmeni”, co raczej odrzuca mnie od tematu, bo jest totalnie nieprzydatne w prawdziwym zarządzaniu. Mam nadzieję, że te informacje zmienią mój pogląd na sprawę. ;]

  5. RobertG says:

    Metryki to zwodniczy temat gdy są stosowane przez kierownictwo by monitorować, co dzieje się projekcie. Podam na zmyślonym przykładzie:
    * kierownictwo skupia się na tym, co przedstawia metryka, na liczbach, wykresach, by te były jak najlepsze, by spełniały założenia,
    * na drugi plan ucieka to, co metryka obrazuje, to jakie są przyczyny tego że akurat wskazuje nieprawidłowości
    * presja na ludzi technicznych by metryka “była ładna” prowadzi do tego, ze skupiają się na tym, by “była ładna”, nie zaś na tym, byt usunąć problemy które pokazuje, to już moment, gdy wskazania metryki są IMHO bezużyteczne
    * gdy presja jest za duża metryka jest naginana by spełnić oczekiwania “góry”, BTW to nie jest trudne, np. jeśli metrykę mówiąca o tym, ile kodu jest pokryte dokumentacja/testami można łatwo oszukać pisząc to zupełnie na od…l

  6. Wojciech Soczyński says:

    Nie da się ukryć, że masz racje w tej kwestii. Jednak metryki są tylko narzędziem. Dostarczają wielu przydatnych informacji dzięki którym można w miarodajny sposób badać kod. To jak zostaną wykorzystane zależy tylko od ludzi którzy ich używają. Niestety wypaczenia wielu szlachetnych idei widzimy na co dzień, nie powinno nas to jednak powstrzymywać od ich stosowania. Dlatego też podjąłem się próby zbadania tego ciekawego zagadnienia i przedstawiania wszystkim zainteresowanym co można za pomocą metryk się dowiedzieć, z nadzieją, że nabyta wiedzę wykorzystają mądrze i roztropnie AMEN. ;P

  1. There are no trackbacks for this post yet.

Leave a Reply

Notify me of followup comments via e-mail. You can also subscribe without commenting.