▣ 테스트 설계기법_정적분석_복잡도 분석_순환복잡도(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 카운트 하지 않음