Narzędzie do pomiaru złożoności dla C i C++
CMT++ Complexity Measures Tool jest narzędziem do analizy statycznej złożoności programów napisanych w C lub C++. Jest znanym faktem, że złożonośc kodu jest ściśle związana z ilością błędów w programie i stabilnościa programu. Skomplikowany kod jest trudny do przetestowania: prawdopodobnie więcej błędów posostaje nieujawnionych w ostatecznym programie. Skomplikowany kod będzie sam w sobie bardziej podatny na błędy i będzie wpływał negatywnie na ilość defektow ostatecznej aplikacji. Skomplikowany kod jest również trudny do pielęgnacji.
Ponieważ testowanie i pielęgnacja są źródłem większości kosztów projektów programowych, wchodzą tu również w gre aspekty finansowe. Koszty ponoszone za złą jakość błędnych programów mogą okazać się bardzo wysokie a czasem nawet decydujące dla przedsiębiorstwa. Niepotrzebnie skomplikowany kod może być powodem niektórych z tych kosztów.
CMT++ może być używany do pomiaru złożoności i do otrzymania lepszej jakości kodu C i C++. Oparty na statycznych własćiwościach kodu programu, CMT++ podaje oszacowanie, jak bardzo kod źródłowy programu jest podatny na błędy z powodu jego złożoności, jak długo zajmie zrozumienie kodu, jaka jest logiczna objętość kodu,itd. ... Ponieważ zespół projektowania zazwyczaj nie ma czasu na inspekcje całego kodu stworzonego przez projekt, CMT++ może być pomocnym w lokalizacji modułów, które najprawdopodobniej będą stwarzały problemy w przyszłości.
CMT++ oblicza następujące miary oprogramowania :
- McCabe's cyclomatic number
- Lines-of-code metrics
- Number of semicolons
- Halstead's metrics
- Maintainability Index dalsze informacje
McCabe cyclomatic number v(G)
szacuje złożoność przepływu sterowania(control flow complexity) kodu.Cyclomatic number v(G) opisuje złożoność przepływu sterowania programu. W wypadku pojedyńczej funkcji, v(G) jest o jeden mniej niż ilość warunkowych punktów rozgałęzień funkcji. Im wyższy jest cyclomatic number tym trudniejsze staje się zrozumienie kodu. Cyclomatic number funkcji powinien być mniejszy niż 15. Więcej niż 15 rozgałęzień staje się trudna do identyfikacji i przetestowania.Funkcje zawierające jedną instrukcje wyboru (switch-case) z wieloma rozgałęzieniami stanowią wyjątek. Rozsądną górną granicą v(G) dla pliku jest 100.
dalsze informacje o McCabe Cyclomatic number
dalsze informacje o McCabe-Metrics from Software Engineering Institute of Carnegie Mellon University
Lines-of-code metrics
Metryki wierszy kodu są najbardziej tradycyjnymi miarami dla ustalenia stopnia złożoności programu. CMT++ oblicza nastepujace line-of-code metrics| LOCbl | ilość pustych wierszy |
| LOCcom | ilość wierszy z komentarzem |
| LOCphy | ilość fizycznych wierszy |
| LOCpro | ilość wierszy z kodem programu (te wiersze mogą również zawierać komentarz) |
Długość funkcji powinna być od 4 do 4O wierszy programu. Funkcja dłuższa niż 40 wierszy programu prawdopodobnie implementuje wiele funkcji. Długość pliku powinna być od 4 do 400 wierszy programu. Pliki dłuższe niż 400 wierszy programu są zazwyczaj zbyt długie aby być zrozumiane jako całość. Co najmniej 30 % i co najwyżej 75 % pliku powinne być komentarzami.
dalsze informacje o Lines of code metrics
Halstead's metrics
| B | B jest oszacowaniem ilości błędów w programie; Liczba uzyskanych błędów w pliku powinna być niższa niż 2. Doświadczenia pokazały, że w programowaniu C lub C++ plik źrodłowy prawie zawsze zawiera więcej błędów niż sugeruje to B. |
| D | poziom trudności, podatność na błędy |
| E | wysiłek konieczny do implementacji |
| L | poziom programu (przedstawia poziom abstrakcji programu) |
| N | długość programu; |
| Ń | ilość operatorów |
| N2 | ilość operandów |
| n | rozmiar słownictwa lub ilość różnych operatorów i różnych operandów |
| ń | ilość różnych operatorów |
| n2 | ilość różnych operandów |
| T | czas implementacji (czas zrozumienia) |
| V | objętosc programu lub zawartość informacji
programu Halstead's volume V opisuje rozmiar implementacji algorytmu. Obliczanie V jest oparte na ilości wykonanych operacji i operandów przetwarzanych w algorytmie. V funkcji powinna być zawarta pomiędzy 20 a 1000. Objętości wyższe niż 1000 dają do zrozumienia że funkcja prawdopodobnie robi zbyt dużo rzeczy. V pliku powinna być zawarta między 100 i 8000. Te granice są oparte na V mierzonych dla plików dla których LOCpro i v(G) są blisko ich zalecanych granic. |
więcej informacji o Halsteadīs Metrics from Software Engineering Institute of Carnegie Mellon University
Nadanie absolutnych granic vartościom dopuszczalnym nie jest możliwe. Granice podane i uzasadnione są ogólnymi sugestjami opartymi na pomiarach kodu pielęgnowanego z sukcesem.Możliwa jest konfiguracje CMT++ dla specyficznych wymagań projekto2w zmieniąjac definicje ograniczeń w pliku konfiguracji.
Oczywiście, moduły bardziej skomplikowane muszą być przejrzane uważniej. Jak wysoki jest "high" zależy od własnego procesu programowania i kryteriów jakościowych. Domyślne ograniczenia alarmowe CMT++ są dobrą podstawą do rozpoczęcia.
Jeżeli chodzi o testowanie dynamiczne, najważniejszymi pomiarami tego w jakim stopniu kod jest skomplikowany są cyclomatic number v(G) i ilość ukazanych błędów (B). Poniewaź cyclomatic number opisuje złożoność przepływu sterowania, rzeczą ewidetną jest że moduły i funkcje o wysokim cyclomatic number potrzebują więcej przypadków testowych niż moduły o niższym cyclomatic number. Każda funkcja powinna zawierać co najmniej tyle przypadków testowych ile wskazuje cyclomatic number. Ilość dostarczonych błędów jest szacowaniem ilości błędów w module. Celem powinno być że co najmniej tyle błędów powinno być znalezione w module podczas jego testownia.
dalsze informacje o Halstead metrics
CMT++, narzędzie do pomiaru złożoności na najnowszym stanie techniki
CMT++ jest znane ze zdumiewająco szybkiego przetwarzania, łatwości w użyciu i stabilnego zachowania nawet przy nie preprocesowanym kodzie. Wymagania CMT++ co do installacji i użycia są raczej skromne. Zależnie od platformy, 1-2 MB wolnego miejsca na dysku wystarczają.
dalsze informacje o CMT++
Narzędzie pomiaru metryk podobne do CMT jest również dostępne w języku Java: CMTJava
uzyskaj własną darmową wersję próbną CMT++
Product Presentation (17 slides)
last updated: 02.09.2005
© 2003-2005 Verifysoft Technology GmbH
nbsp; polish translation: Nicolas Kustra
CTA++, CTC++, CMT++ and CMTJava are products of Testwell Oy, Tampere (Finland)
all other trademarks of this site are the property of their respective owners.