반응형

제목: 단위 테스팅 중단 기준으로서의 코드 커버리지에 대한 조사(A Survey on Code Coverage as a Stopping Criterion for Unit Testing)

저자: Ben Smith 1, 미국

문서유형: 학계 페이퍼( 6페이지)

 

코드 커버리지가 단위 테스팅 중단 기준으로 사용되는 정도를 추정하기 위해 온라인 설문 조사를 수행한 결과를 기술한 자료



코드 커버리지(Code coverage)

  • 1963MillerMaloney가 코드 커버리지를 설명(“프로그램의 한 부분이 적어도 하나의 테스트에 의해 실행되지 않으면 이 부분이 정확하게 실행되는지 아닌지 개발 팀이 알 방법이 없다”)
  • 어떤 특정한 코드 구조에서 적어도 하나의 테스트에 의해 커버되는(실행되는) 부분을 나타낸 백분율로 느슨하게 정의됨(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


반응형

+ Recent posts