Studiuję złożoność cykliczności w moim kursie Software Assurance jakości na Uniwersytecie i ciężko jest mi zrozumieć, jak to działa, gdy masz złożone warunki w oświadczeniu lub węźle predykatu. Widziałem wiele definicji Złożoność cykliczna, którego podstawowym Wykorzystałem w mojej klasie jestZłożoność cykliczna z warunkami złożonymi i zwarciem
V(G) = # of predicate nodes (with outdegree = 2) + 1
Tak na wykresie programu takiego jak ten mielibyśmy cyclomatic złożoność dwa:
V(G) = 2
widziałem też definicje złożoności danej cyclomatic jak
V(G) = # edges - # nodes + 2
Który działa również dla powyższego wykresu. Jednakże mamy warunki złożone dla węzłów predykatów. Rozważamy język i system skonfigurowany do automatycznego zwarcia, wydaje mi się, że wykres na dole po lewej stronie musiałby zostać rozszerzony do wykresu. W takim przypadku, jak poniżej, złożoność cykliczna staje się 3, nawet jeśli w prawdziwym kodzie źródłowym, możemy mieć tylko jedno wyrażenie if lub czy nadal jest V (G) = 2?.
Jest to mylące, ponieważ większość definicji złożoności cyklicznej mówi o węzłach predykatów, a ponieważ rozumiem predykaty, mogą one zawierać wiele warunków zwarciowych. Jeśli tak nie jest, wydaje się, że zachowanie zwarciowe, przy jednoczesnym zwiększeniu wydajności, w rzeczywistości bierze pod uwagę złożoność cykliczną. Jeśli podano kod źródłowy, czy wszystkie warunki muszą zostać podzielone na własne węzły, takie jak wykres po lewej, zanim będziemy mogli obliczyć złożoność cykliczności?