2021 국가직7급 소프트웨어공학 17번 해설 — 테스트 커버리지
문제
다음 소스 코드와 테스트 입력을 사용한 테스트 커버리지 설명으로 옳지 않은 것은? (단, 단축연산(short-circuit evaluation)은 수행하지 않는다) 문장 번호 소스 코드 테스트 입력 1 2 3 4 void temp(int x, int y) { if(x < 0 && y >= 0) printf("%d",y); if(x >= 0) printf("%d",x); } T = {t1:(x=-2, y=3), t2:(x=2, y=0)}
- ① t2만 사용하면 문장(statement) 커버리지가 75 %이다
- ② T를 사용하면 문장 커버리지가 100 %이다
- ③ T를 사용하면 분기(branch) 커버리지가 100 %이다
- ④ T를 사용하면 조건(condition) 커버리지가 100 %이다 ← 정답
선지별 해설
① t2만 사용하면 문장(statement) 커버리지가 75 %이다
이 선지 진술은 옳음(O)
t2(x=2, y=0)는 첫 if 조건(x<0 && y>=0)이 거짓이라 문장2는 실행되지 않고, 둘째 if(x>=0)는 참이라 문장3이 실행된다. 실행 가능한 4개 문장 중 3개가 실행되어 75 %로 옳다.
② T를 사용하면 문장 커버리지가 100 %이다
이 선지 진술은 옳음(O)
t1(x=-2, y=3)은 첫 if가 참이라 문장2를, t2는 둘째 if가 참이라 문장3을 실행한다. 두 입력으로 모든 문장이 실행되어 문장 커버리지 100 %로 옳다.
③ T를 사용하면 분기(branch) 커버리지가 100 %이다
이 선지 진술은 옳음(O)
첫 if는 t1에서 참·t2에서 거짓, 둘째 if는 t1에서 거짓·t2에서 참으로 모든 분기의 참/거짓 결과가 한 번 이상 실행되어 분기 커버리지 100 %로 옳다.
④ T를 사용하면 조건(condition) 커버리지가 100 %이다
이 선지 진술은 틀림(X)
조건 커버리지는 각 개별 조건이 참·거짓을 모두 가져야 한다. 첫 if의 두 조건에서 t1은 (x<0:참, y>=0:참), t2는 (x<0:거짓, y>=0:참)이라 y>=0이 거짓이 되는 경우가 없어 100 %가 아니다. 옳지 않다.
핵심 요약 (Q&A)
- Q. 2021 국가직7급 소프트웨어공학 17번의 핵심 쟁점은 무엇인가?
- A. 2021 국가직7급 소프트웨어공학 17번은 테스트 커버리지에 관한 문항으로, "옳지 않은 것"을 고르는 문제입니다.
- Q. 2021 국가직7급 소프트웨어공학 17번의 정답은?
- A. 정답은 ④번입니다. 조건 커버리지는 각 개별 조건이 참·거짓을 모두 가져야 한다. 첫 if의 두 조건에서 t1은 (x<0:참, y>=0:참), t2는 (x<0:거짓, y>=0:참)이라 y>=0이 거짓이 되는 경우가 없어 100 %가 아니다. 옳지 않다.