제목: 단위 테스팅 중단 기준으로서의 코드 커버리지에 대한 조사(A Survey on Code Coverage as a Stopping Criterion for Unit Testing)
저자: Ben Smith 외 1인, 미국
문서유형: 학계 페이퍼(총 6페이지)
코드 커버리지가 단위 테스팅 중단 기준으로 사용되는 정도를 추정하기 위해 온라인 설문 조사를 수행한 결과를 기술한 자료
코드 커버리지(Code coverage)
- 1963년 Miller와 Maloney가 코드 커버리지를 설명(“프로그램의 한 부분이 적어도 하나의 테스트에 의해 실행되지 않으면 이 부분이 정확하게 실행되는지 아닌지 개발 팀이 알 방법이 없다”)
- 어떤 특정한 코드 구조에서 적어도 하나의 테스트에 의해 커버되는(실행되는) 부분을 나타낸 백분율로 느슨하게 정의됨(loosely defined)
- 코드 커버리지를 결함 제거, 테스트 케이스 설계, 신뢰성 추정 모델, 소프트웨어 품질 예측 지표 등에 활용하는 다양한 연구가 이루어짐
조사 방법(Survey Method)
- SurveyMonkey.com 사이트에 설문을 생성하고 이 링크를 잠재적인 참여자에게 이메일로 전송(이들이 다시 동료에게 메일을 포워딩 하거나 게시판에 설문 조사 초대 글을 올림)
- 605명의 참여자가 코드 커버리지 및 소프트웨어 테스팅 관행에 대한 질문에 응답함
- 조사는 아래와 같은 로직을 가진 7개의 질문으로 구성됨(별표 문항은 응답 시 다수 선택이 가능)
조사 결과(Results)
- 설문 응답을 크게 두 그룹으로 분류함: 학계/연구직 그룹과 산업계 종사자 그룹
- 많은 응답자가 자동화된 단위 테스팅을 수행하고 코드 커버리지도 사용하는 것으로 나타났지만, 모두가 테스트를 작성하는데 있어서 중단 기준으로 사용하는 것은 아님
- 코드 커버리지 대신에 자주 사용되는 중단 기준으로 “코드의 가장 중요한 부분을 테스트 했을 때”라고 응답한 사람이 많았음
각 질문 별 자세한 응답 결과는 아래와 같다.
Q1. (개인적으로) 자동화된 단위 테스팅을 수행하는가?
|
학계/연구직 |
개발자/테스터/관리직 |
||
응답 |
백분율 |
응답 건수 |
백분율 |
응답 건수 |
Yes |
44.4% |
82 |
59.2% |
248 |
No |
55.9% |
104 |
40.8% |
171 |
응답한 건수 |
|
186 |
|
419 |
응답 생략 건수 |
|
0 |
|
0 |
Q2. (개인적으로) 자동화된 단위 테스팅에서 코드 커버리지를 중단 기준으로 사용하는가?
|
학계/연구직 |
개발자/테스터/관리직 |
||
응답 |
백분율 |
응답 건수 |
백분율 |
응답 건수 |
Yes |
35.2% |
25 |
29.5% |
66 |
No |
52.1% |
37 |
37.6% |
84 |
코드 커버리지를 사용하지만 중단 기준으로 사용하지는 않음 |
11.2% |
8 |
25.5% |
57 |
기타(아래 참고) |
1.4% |
1 |
7.1% |
16 |
응답한 건수 |
|
71 |
|
223 |
응답 생략 건수 |
|
115 |
|
110 |
기타 응답: 때때로 상황에 따라 사용; 누락된 테스트를 식별하기 위해 사용; 사용하려 노력 중
Q3. 자동화된 단위 테스트를 작성하는 것을 언제 중단하는가?*
|
학계/연구직 |
개발자/테스터/관리직 |
||
응답 |
백분율 |
응답 건수 |
백분율 |
응답 건수 |
코드의 가장 중요한 부분을 테스트 했을 때 |
53.8% |
21 |
48.1% |
90 |
개발과 테스트를 동시에 하므로 코딩 완료 시 테스팅도 중단 |
43.6% |
17 |
48.1% |
90 |
동료나 관리자가 내 테스트 집합을 용인했을 때 |
12.8% |
5 |
10.2% |
19 |
각 메쏘드를 한번씩 테스트 했을 때 |
7.7% |
3 |
6.4% |
12 |
코드의 복잡한 부분을 테스트 했을 때 |
33.3% |
13 |
36.4% |
68 |
주어진 시간을 다 썼을 때 |
20.5% |
8 |
23.5% |
44 |
기타(아래 참고) |
20.5% |
8 |
18.7% |
35 |
응답한 건수 |
|
39 |
|
187 |
응답 생략 건수 |
|
147 |
|
232 |
기타 응답: 테스트에 확신이 있을 때; 테스트 주도 개발(TDD)에 따라; 경계(boundaries), 경로(paths), 유스케이스 같은 다른 구조를 고려하여
Q4. 왜 코드 커버리지를 사용하는가?*
|
학계/연구직 |
개발자/테스터/관리직 |
||
응답 |
백분율 |
응답 건수 |
백분율 |
응답 건수 |
테스트 케이스에 어떤 라인/경로가 연관되는지 알 수 있게 해주므로 |
61.9% |
13 |
77.3% |
51 |
관리자가 또는 조직에서 요구해서 |
19.0% |
4 |
25.8% |
17 |
문헌/서적에서 중요하다고 해서 |
0.0% |
0 |
1.5% |
1 |
내 테스트의 품질에 자신감을 주므로 |
61.9% |
13 |
69.7% |
46 |
기타(아래 참고) |
19.0% |
4 |
15.2% |
10 |
응답한 건수 |
|
21 |
|
66 |
응답 생략 건수 |
|
165 |
|
353 |
기타 응답: 데드 코드, 누락 코드, 테스트가 안된 코드를 찾기 위해; TDD의 자연스런 결과물; 기존 코드의 어떤 부분을 손댈 수 있는지(refactor) 알려주므로; 견고한 엔니지어링 관행의 반복성
Q5. 왜 코드 커버리지를 사용하지 않는가?*
|
학계/연구직 |
개발자/테스터/관리직 |
||
응답 |
백분율 |
응답 건수 |
백분율 |
응답 건수 |
내 언어에 맞는 좋은 도구를 찾을 수 없어서 |
5.9% |
2 |
10.4% |
19 |
커버리지 도구가 너무 비싸서 |
11.8% |
4 |
3.3% |
6 |
내가 원하지 않아서 |
17.6% |
6 |
6.0% |
11 |
커버리지 정보가 유용하다는 생각이 안 들어서 |
20.6% |
7 |
25.1% |
46 |
사용한다, 단지 중단 기준으로 사용하지는 않는다 |
23.5% |
8 |
26.2% |
48 |
기타(아래 참고) |
29.4% |
10 |
39.3% |
72 |
응답한 건수 |
|
34 |
|
183 |
응답 생략 건수 |
|
152 |
|
236 |
기타 응답: 프로세스의 일부분이 아니므로; 도구의 품질이 낮아서; 제한된 리소스; 도구가 비효율적임; 내 일은 성능 테스팅이므로; 사용하려고 계획 중이다; 도구가 있는지 몰랐다
Q6. 조직에서 당신의 역할(직군)은 무엇인가?*
|
학계/연구직 |
개발자/테스터/관리직 |
||
응답 |
백분율 |
응답 건수 |
백분율 |
응답 건수 |
학계 종사자(Academic) |
57.2% |
83 |
6.4% |
27 |
개발자(Developer) |
0.0% |
0 |
42.5% |
178 |
관리직(Management) |
0.0% |
0 |
20.8% |
87 |
연구자(Researcher) |
38.6% |
56 |
9.8% |
41 |
아키텍트(Architect) |
0.0% |
0 |
17.7% |
74 |
테스트 리더(Test Lead) |
0.0% |
0 |
12.6% |
53 |
개발 리더(Developer Lead) |
0.0% |
0 |
26.5% |
111 |
테스터(Tester) |
0.0% |
0 |
8.8% |
37 |
기타(아래 참조) |
20.0% |
29 |
4.2% |
18 |
응답 건수 |
|
145 |
|
419 |
응답 생략 건수 |
|
41 |
|
0 |
기타 응답: 코치; 컨설턴트; 경영자; 설립자; 분석가
(설문 참여자의 역할이 테스터, 테스트 리더, 개발자, 개발 리더, 아키텍트 중 어디에도 해당되지 않는 경우 이들의 응답은 결과 집계에서 제외함)
Q7. 어떤 프로그래밍 언어를 사용하는가?*
|
학계/연구직 |
개발자/테스터/관리직 |
||
응답 |
백분율 |
응답 건수 |
백분율 |
응답 건수 |
Java |
66.9% |
97 |
57.7% |
236 |
PHP |
9.0% |
13 |
6.9% |
35 |
Perl |
9.7% |
14 |
11.7% |
55 |
ActionScript(Flash) |
1.4% |
2 |
1.2% |
7 |
C |
28.3% |
41 |
16.2% |
74 |
C++ |
33.8% |
49 |
18.3% |
79 |
C# |
6.2% |
9 |
22.6% |
95 |
VisualBasic |
2.1% |
3 |
3.6% |
19 |
Python |
9.0% |
13 |
9.6% |
336 |
기타(아래 참조) |
25.5% |
37 |
24.5% |
103 |
응답 건수 |
|
145 |
|
419 |
응답 생략 건수 |
|
41 |
|
0 |
기타 응답: Ruby; bash; ColdFusion; Smalltalk; Groovy; Assembler; Matlab; JavaScript; JSP; HTML; CSS; SQL; ASP.NET; VB.NET
'개발생명주기단계별 > 구현_단위 테스팅' 카테고리의 다른 글
책 요약 - 테스트 코드의 품질 이슈 (0) | 2021.11.22 |
---|---|
영상자료 – 초보자를 위한 JUnit과 Mockito 튜토리얼 by Thippireddy (0) | 2019.07.24 |
배치 시스템 테스팅 기본 정리 (0) | 2019.07.15 |
문서요약 - JUnit과 CPPUnit에 의한 단위 테스팅 by Pietroszek (0) | 2019.07.08 |
문서요약 - 자동화된 단위 테스팅 프레임워크 by Simonsen (0) | 2019.07.01 |