what is cyclomatic complexity learn with an example
Cyklomatyczna złożoność to bardzo popularne słowo w społeczności deweloperów. Technika ta jest używana głównie do określania złożoności fragmentu kodu lub funkcji.
Technika została opracowana przez MaCabe i pomaga zidentyfikować poniższe 3 pytania dotyczące programów / funkcji
- Czy funkcję / program można przetestować?
- Czy funkcja / program jest zrozumiała dla wszystkich?
- Czy funkcja / program jest wystarczająco wiarygodna?
W ramach kontroli jakości możemy użyć tej techniki do określenia „poziomu” naszych testów. Jest to praktyka, która polega na tym, że jeśli wynikiem cyklicznej złożoności jest większa lub większa liczba, uważamy, że ten element funkcjonalności ma złożony charakter i dlatego wnioskujemy jako tester; że fragment kodu / funkcjonalność wymaga dogłębnych testów.
Z drugiej strony, jeśli wynikiem złożoności cyklomatycznej jest mniejsza liczba, w ramach kontroli jakości wnioskujemy, że funkcjonalność jest mniej złożona i odpowiednio decydujemy o zakresie.
Przejdźmy krok po kroku: najpierw zrozum, jak jest obliczany, a następnie przejdziemy do zrozumienia, w jaki sposób określany jest poziom testowania.
Czego się nauczysz:
- Jak obliczyć złożoność cyklomatyczną?
- Wzór złożoności cyklomatycznej
- Przykład złożoności cyklomatycznej
- Jak testerzy mogą z tego korzystać?
- Teraz jest skrót-
- rekomendowane lektury
Jak obliczyć złożoność cyklomatyczną?
Obliczanie CC obraca się wokół 2 koncepcji
- Węzły
- Krawędzie
Instrukcje w programie są reprezentowane jako węzły, a ścieżki kontrolne od jednej instrukcji do drugiej są reprezentowane przez Edges.
Wzór złożoności cyklomatycznej
Wzór na obliczenie CC jest następujący:
CC = E ~ N + 2
Gdzie:
E = liczba krawędzi
N = liczba węzłów.
(Istnieje skrót do obliczenia tego, ale nie teraz …… później…)
Przykład złożoności cyklomatycznej
Spójrzmy na poniższy przykład, aby to zrozumieć.
Rozważ poniższy wykres przepływu sterowania:
Umieściłem NETTO kropki do identyfikacji węzłów i NIEBIESKI linie do identyfikacji krawędzi:
Więc w tym przykładzie:
Liczba węzłów (czerwone kropki) = 14
Liczba krawędzi (niebieskie linie) = 15
Więc złożoność cyklomatyczna = N ~ E + 2 = (14-15) +2 = 3
Jak testerzy mogą z tego korzystać?
W świecie rzeczywistym Testerzy mogą współpracować z programistami, aby uzyskać wykres przepływu sterowania dla danego fragmentu kodu. A kiedy już mamy wykres, możemy wyprowadzić złożoność za pomocą tego wzoru. Ale historia Testerów na tym się nie kończy: - tu chodzi przede wszystkim o - jaki jest pożytek z tego numeru dla zespołu testującego?
Cóż, testerzy mogą wykorzystać tę liczbę do określenia poziomu swoich testów.
W praktyce istnieją 2 poziomy testowania:
- Testowanie długości
- Testowanie szerokości
Rozważ poniższą macierz dla różnych funkcji dowolnego modułu: -
Testowanie długości to sposób, w jaki staramy się objąć cały zakres, wybierając ważne przypadki testowe dla każdej funkcji. Na przykład , w tym przypadku przypuśćmy, że zdecyduję się implikować testem długości, wtedy mogę wybrać -
- Funkcja podrzędna 1.1 i Funkcja podrzędna 1.3 dla cechy 1
- Funkcja podrzędna 2.2 z cechy 2
- Podfunkcja 3.3 z cechy 3
- Podfunkcja 4.2 i podfunkcja 4.3 z cechy 4
- Podfunkcja 5.3 z cechy 5
Więc tutaj dotykam całej funkcji bez wchodzenia w szczegółowe szczegóły pod-funkcji.
Teraz, jeśli wynik CC to większa liczba, wtedy zdecyduję się na test Breadth, będę faktycznie testować każdą funkcję wraz z każdą podfunkcją.
Zatem w oparciu o aktualne wymagania projektowe, niezawodność środowiska, testerzy mogą współpracować z zespołem programistycznym i tworzyć standard identyfikacji poziomu i zakresu testów. Na przykład -
- Jeśli CC<=15 – Basic sanity test
- Jeśli CC jest między 16 a 30 - badanie długości
- Jeśli CC wynosi od 31 do 50 - Badanie szerokości
- Jeśli CC> 50 - jest to funkcja chaotyczna i wymaga dalszej dekompozycji
Teraz jest skrót-
Po prostu policz liczbę zamkniętych regionów i dodaj do niej 1.
kiedy należy przeprowadzić testy regresji
W naszym przykładzie powyżej - numer obszaru zamkniętego = 2 (wypełniony na żółto), więc CC = 2 + 1 = 3
W prawdziwej pracy bardzo trudno jest podsumować wynik, składając stwierdzenia takie jak -
- „… .. ta funkcjonalność jest bardzo trudna do wdrożenia”
Co masz na myśli mówiąc trudne? Czy jest to złożone, skomplikowane czy chaotyczne?
Jak doszedłeś do wniosku, że jest to trudne?
- „… To powinno być dostępne do końca dnia”
Jaki jest koniec dnia? Twój koniec dnia jest o 19:00, a ja prawdopodobnie o 18:00?
- „… Musiałbym przeprowadzić szczegółowe testy”
Co to jest szczegółowe testowanie? Nie ma techniki testowania zwanej „Testowaniem szczegółowym”
- „… Kod powinien być dobrej jakości, zanim wdrożymy go do kontroli jakości”
Jak mierzysz dobrą jakość?
Zamiast tego, jeśli przeformułuję stwierdzenia, takie jak -
Złożoność cyklomatyczna fragmentu kodu jest obliczana jako 75 i zgodnie z naszymi standardami; ta funkcjonalność ma charakter Chaosu. Dlatego zalecamy dalszą dekompozycję.
Nad
- „… .. ta funkcjonalność jest bardzo trudna do wdrożenia”
Funkcjonalność zostanie wdrożona w środowisku QA do godziny 17:00 CST.
Nad
- „…. To powinno być dostępne do końca dnia”
Ponieważ złożoność cyklomatyczna jest obliczana jako 48, zgodnie z naszym standardem będziemy przeprowadzać testy systemów wraz z testami integracji i regresji dla tej funkcji.
Nad
- „… .Musiałbym przeprowadzić szczegółowe testy w tym celu”
Zgodnie z Sonarem, CC wynosi teraz 102. Ujednoliciliśmy liczbę CC na 10. Będziemy wdrażać kod, gdy poprawimy go tak, aby CC był mniejsze niż 10.
Nad
- „… .Kod powinien być dobrej jakości, zanim wdrożymy go do kontroli jakości”
Jaka jest różnica między tymi dwoma stwierdzeniami?
Cóż, różnica polega na pomiarze. Każde moje oświadczenie poparłem odpowiednimi pomiarami, które pomogłyby moim interesariuszom dokładnie wiedzieć, co chcę powiedzieć.
Podobnie, użyj złożoności cyklomatycznej w testowaniu oprogramowania, aby określić dokładną miarę swoich wysiłków testowych, a możesz jej użyć nie tylko do określenia zakresu testów, ale także do typów testów, które musisz wykonać.
rekomendowane lektury
- Co to jest testowanie komponentów lub testowanie modułów (poznaj przykłady)
- Co to jest testowanie porównawcze (zapoznaj się z przykładami)
- Pakiet karier testowania oprogramowania eBook
- Co to jest testowanie integracji systemu (SIT): ucz się na przykładach
- Najlepsze narzędzia do testowania oprogramowania 2021 (Narzędzia do automatyzacji testów QA)
- Testing Primer Pobierz eBook
- 5 ważnych diagramów, których testerzy muszą się nauczyć, jak ich używać
- Samouczek przeglądu TestRail: Naucz się kompleksowego zarządzania przypadkami testowymi