소프트웨어공학

테스트 설계기법_정적분석_복잡도 분석_순환복잡도(Cyclomatic Complexity), 의사코드(psuedo code), 제어 흐름 그래프(control flow graph), McCabe

스윙스윙 2021. 9. 21. 20:57

▣ 테스트 설계기법_정적분석_복잡도 분석_순환복잡도(Cyclomatic Complexity)

- McCabe는 프로그램의 이해 난이도는 주로 그 프로그램에 대한 제어 흐름 그래프의 

복잡도에 의해서 결정 된다는 사실을 관찰


- 순환복잡도 계산 방식

CC = R의 수

CC = E - N + 2

CC = P + 1

* 참고

R(Region) : 노드와 가장자리 노드를 둘러싸인 영역과 그래프 밖 영역의 수

E(Edge) : 화살표의 수

N(Node) : 노드의 수

P(Predicate) : 분기 노드의 수(if, for, while, try 문)

 

* 분기로 계산되는 프로그램 코드 키워드

if / else if / for / while / do while / try catch : 1개로 카운트

switch문 안의 case 하나당 : 1개로 카운트

else / swithch default / try finally : 0 카운트 하지 않음

 

- 복잡도 척도
5 이하 매우 간단한 프로그램, 5~10 매우 구조적이고 안정적
20 이상 문제 자체가 복잡 or 구조가 필요 이상으로 복잡한 프로그램
50 이상 매우 비구조적이고 불안정한 프로그램


2018년 28번

정답 : 3번

(가)의 분기 노드수(IF 3 개)+1 = 4, (나) 영역의 개수 3+ 그래프밖 영역 1 = 4

CC = R의 수

CC = E - N + 2

CC = P + 1

R(Region) : 노드와 가장자리 노드를 둘러싸인 영역과 그래프 밖 영역의 수


2011년 30번

정답 : 2번

제어흐름그래프를 주고 순환복잡도(Cyclomatic Complexity)를 구하는 공식

CC = E -N + 2

E(Edge) 화살표수 = 6개

N(Node) 노드수 = 5개

CC = 6 - 5 + 2 = 3

 


2011년 48번

정답 : 3번

정적분석 : 소스 코드를 실행하지 않고 코드를 분석/시험하는 것

제어흐름, 데이터사용, 경로

코드리뷰, 인스펙션, 워크스루 등이 있음

 

기능점수는 트랜잭션과 데이터와 관련이 있고 코드와는 큰 관련이 없음

 


2012년 42번

정답 : 2번

보기 소스 중 분기노드는 3개

if(y<0)

while(pow !=0)

if(y<0)

 

CC = P + 1 = 3+1 = 4

P(Predicate) : 분기 노드의 수(if, for, while, try 문)

 

* 분기로 계산되는 프로그램 코드 키워드

if / else if / for / while / do while / try catch : 1개로 카운트

switch문 안의 case 하나당 : 1개로 카운트

else / swithch default / try finally : 0 카운트 하지 않음

 


2013년 38번

정답 : 1번

분기노드는 2개이므로 순환복잡도는 3임

while(count<3), if(avPoint >=70)

 

CC = R의 수

CC = E - N + 2

CC = P + 1

 

* 분기로 계산되는 프로그램 코드 키워드

if / else if / for / while / do while / try catch : 1개로 카운트

switch문 안의 case 하나당 : 1개로 카운트

else / swithch default / try finally : 0 카운트 하지 않음

 


2020년 32번

정답 : 3번

분기문이 3개(if문 2개, while문 1개) -> 순환복잡도는 P+1 = 3+1 = 4

 

CC = R의 수

CC = E - N + 2

CC = P + 1

R(Region) : 노드와 가장자리 노드를 둘러싸인 영역과 그래프 밖 영역의 수

E(Edge) : 화살표의 수

N(Node) : 노드의 수

P(Predicate) : 분기 노드의 수(if, for, while, try 문)

 

* 분기로 계산되는 프로그램 코드 키워드

if / else if / for / while / do while / try catch : 1개로 카운트

switch문 안의 case 하나당 : 1개로 카운트

else / swithch default / try finally : 0 카운트 하지 않음