Biorąc pod uwagę, jak rozwija się oprogramowanie podczas cyklu wydawniczego (implementacja, testowanie, naprawa błędów, wydanie), pomyślałem, że w liniach kodu, które są zmieniane w bazie kodu, powinien być widoczny pewien wzorzec; np. pod koniec projektu, jeśli kod staje się bardziej stabilny, należy zauważyć, że mniej wierszy kodu jest modyfikowanych w jednostce czasu.
Na przykład można zauważyć, że w ciągu pierwszych sześciu miesięcy projektu średnia wynosiła 200 linii kodu dziennie, podczas gdy w ostatnim miesiącu było to 50 linii kodu dziennie, aw ostatnim tygodniu (tuż przed DVD z produktem zostały wysłane), żadne wiersze kodu nie zostały w ogóle zmienione (zamrożenie kodu). To tylko przykład i mogą pojawić się różne wzorce zgodnie z procesem rozwoju przyjętym przez konkretny zespół.
W każdym razie, czy są jakieś wskaźniki kodu (jakaś literatura na ich temat?), Które wykorzystują liczbę zmodyfikowanych wierszy kodu na jednostkę czasu do pomiaru stabilności podstawy kodu? Czy są przydatne, aby poczuć, że gdzieś się pojawia projekt lub czy wciąż jest daleki od gotowości do wydania? Czy są jakieś narzędzia, które mogą wyodrębnić te informacje z systemu kontroli wersji i generować statystyki?
źródło
Odpowiedzi:
Jednym ze środków, które opisał Michael Feather, jest „ Aktywny zestaw klas ”.
Mierzy liczbę klas dodanych do tych „zamkniętych”. Opisuje zamknięcie klasy jako:
Używa tych miar do tworzenia takich wykresów:
Im mniejsza liczba odstępów między dwiema liniami, tym lepiej.
Możesz być w stanie zastosować podobną miarę do swojej bazy kodu. Jest prawdopodobne, że liczba klas jest skorelowana z liczbą wierszy kodu. Może być nawet możliwe rozszerzenie tego zakresu o linijkę kodu dla miary klasy, co może zmienić kształt wykresu, jeśli masz jakieś duże klasy monolityczne.
źródło
Tak długo, jak istnieje względnie spójne odwzorowanie funkcji na klasy lub, w tym przypadku, system plików, możesz podłączyć coś takiego źródło do systemu kontroli wersji i bardzo szybko dowiedzieć się, na czym skupia się większość rozwoju (a tym samym które części kodu są najbardziej niestabilne).
Zakłada się, że masz stosunkowo uporządkowaną bazę kodu. Jeśli bazą kodu jest kula błota, w zasadzie zobaczysz każdą małą część, nad którą pracujesz z powodu wzajemnych zależności. To powiedziawszy, może samo w sobie (grupowanie podczas pracy nad funkcją) jest dobrym wskaźnikiem jakości bazy kodu.
Zakłada również, że Twój zespół biznesowy i zespół programistów jako całość mają jakiś sposób na rozdzielenie funkcji w fazie rozwoju (czy to gałęzie kontroli wersji, jedna funkcja na raz, cokolwiek). Jeśli na przykład pracujesz nad 3 głównymi funkcjami w tej samej gałęzi, metoda ta daje bezsensowne wyniki, ponieważ masz większy problem niż stabilność kodu na rękach.
Niestety nie mam literatury, aby udowodnić swój punkt widzenia. Opiera się wyłącznie na moim doświadczeniu w korzystaniu z zasobów na dobrych (i nie tak dobrych) kodach.
Jeśli używasz git lub svn, a twoja wersja źródła to> = 0,39, jest tak prosta, jak uruchomienie źródła w folderze projektu.
źródło
Wykorzystanie częstotliwości zmodyfikowanych linii jako wskaźnika stabilności kodu jest co najmniej wątpliwe.
Po pierwsze, rozkład zmodyfikowanych linii w czasie zależy w dużym stopniu od modelu zarządzania oprogramowaniem w projekcie. Istnieją duże różnice w różnych modelach zarządzania.
Po drugie, ofiara w tym założeniu nie jest jasna - jest to mniejsza liczba zmodyfikowanych linii spowodowana stabilnością oprogramowania, lub po prostu dlatego, że upłynął termin, a programiści postanowili nie wprowadzać żadnych zmian teraz, ale wprowadzić je po wydanie?
Po trzecie, większość linii jest modyfikowana po wprowadzeniu nowych funkcji. Ale nowa funkcja nie powoduje, że kod nie jest stabilny. To zależy od umiejętności programisty i jakości projektu. Z drugiej strony nawet poważne błędy mogą zostać naprawione przy bardzo niewielu zmianach linii - w tym przypadku stabilność oprogramowania znacznie wzrasta, ale zmieniona liczba linii nie jest zbyt duża.
źródło
Wytrzymałość to termin odnoszący się do prawidłowego działania zestawu instrukcji, a nie ilości, szczegółowości, zwięzłości, poprawności gramatycznej tekstu użytego do wyrażenia tych instrukcji.
Rzeczywiście składnia jest ważna i musi być poprawna, ale wszystko poza tym, ponieważ odnosi się do pożądanej funkcji instrukcji, patrząc na „metryki” instrukcji jest podobne do kreślenia swojej przyszłości poprzez czytanie wzoru liści herbaty na dole ty filiżanka herbaty.
Wytrzymałość jest mierzona za pomocą testów. Testy jednostkowe, testy dymu, automatyczne testy regresji; testy, testy, testy!
Moja odpowiedź na twoje pytanie brzmi: używasz niewłaściwego podejścia, szukając odpowiedzi na solidność. To czerwony śledź, który oznacza, że linie kodu oznaczają coś więcej niż linie zajmujące kod. Możesz wiedzieć tylko, czy kod robi to, co chcesz, jeśli przetestujesz, czy robi to, czego od niego oczekujesz.
Zapoznaj się ponownie z odpowiednimi wiązkami testowymi i unikaj mistyfikacji metrycznych.
Wszystkiego najlepszego.
źródło