sobota, 12 grudnia 2009

Liczenie SLOC w linii komend Windows

Liczba linii plików źródłowych (Source Lines of Code, SLOC) to najprostsza miara wielkości projektu informatycznego. Ma ona wiele wad (zwłaszcza, że nie oddaje złożoności projektu), ale jest chyba najczęściej stosowana.

Niestety chyba żadne IDE nie ma wbudowanego narzędzia do policzenia linii kodu w projekcie. Oczywiście można pobrać odpowiednie wtyczki do metryk - np. Metrics dla Eclipse, która to potrafi o wiele więcej niż policzenie SLOC.

Ale nas interesuje proste rozwiązanie ;)

Można więc policzyć liczbę linii kodu w projekcie z użyciem standardowych poleceń z linii komend w Windows ;)

Np. jeżeli chcemy zbadać rozmiar projektu w C++ to uruchamiamy w głównym katalogu z plikami źródłowymi następującą komendę:

@(for /r %%i in (*.cpp, *.h) do @type "%%i") | find /c /v ""

To polecenie wlicza także puste linie znajdujące się w kodzie źródłowym do swojego wyniku.

Jej ciekawym elementem jest find /c /v "" - dosłownie "policz ile linii nie zawiera nic (czyli coś zawiera)". Linia z samym enterem także zawiera coś (znaki CR+LF), więc zostanie policzona ;)
Drugi haczyk to małpa przed type - bez tego policzone zostałyby dodatkowe linie zawierające wywołanie tej komendy.

Prawdą jest, że SLOC nie jest miarą idealną, nawet porównując projekty w tym samym języku programowania. Np. Teleradiologia (16700 linii) nie jest dwa razy większa od projektu na Network Management (7700 linii) - kosztowała o wiele więcej niż dwa razy tyle pracy. Ale cóż, dokumentacji SLOC nie liczy :P

Więcej o SLOC i związanych z tą miarą kontrowersji: http://en.wikipedia.org/wiki/Source_lines_of_code

2 komentarze:

  1. Jakoś nie zauważyłem wyrażenia "w linii komend" w tytule i spodziewałem się, że będzie o statystykach ile Winda ma SLOC :D

    Co do teleradiologii, to jeśli dodasz do plików źródłowych dokumentacje, to pewnie wyjdzie wiecej niż Network Management (lub jeśli przeniesiesz dokumentacje NM do worda :P)

    OdpowiedzUsuń
  2. NM ma 28 stron sprawozdania i to tyle :P

    OdpowiedzUsuń