실용주의 프로그래머를 위한 단위 테스트 with JUnit (데이비드 토머스, 앤드류 헌트, 2004) 독후감
처음 읽어보는 The Pragmatic Programmers 시리즈. 두께도 얇고 관심이 있는 유닛 테스트에 관련된 책이라 읽었는데, 만족스럽다. 달리 실용주의 프로그래머를 들먹이는 게 아니구나. 딱 필요한 내용으로 바로 유닛 테스트를 해보면서 어떤 건지 경험하게 해준다. C++을 주로 사용하는데, 쉽게 쓰였고 문법이 비슷해서인지 예제 코드를 읽는데 어려움은 없었다.
유닛 테스트를 시작하는 단계인지라 어떻게 테스트하면 될지. 어떤 것을 테스트하면 될지. 막막하게 느껴지는데, 가이드 라인은 제공해줘서 많은 도움이 됐다. 딱~ 기억하기 좋은 줄임말을 사용했다.
테스트 영역 : Right-BICEP (이두근을 생각하면 된다.)
- Right – 결과가 옳은가? : 이 코드가 올바르게 동작한다면, 어떻게 그것을 알 수 있는가?
- B - 모든 경계(boundary) 조건이 옳은가?
- I – 역(inverse) 관계를 확인할 수 있는가?
- C – 다른 수단을 써서 결과를 교차 확인(cross-check)할 수 있는가?
- E – 에러 조건(error condition)을 강제로 만들어 낼 수 있는가?
- P – 성능(performance) 특성이 한도 내에 있는가?
경계 영역 : CORRECT
- 형식 일치(Conformance) – 값의 형식이 예상한 형식과 일치하는가? : 이메일, 전화번호 등
- 순서(Ordering) – 순서대로 되어 있는가? : 레스토랑 주문은 애피타이저, 샐러드 순이다.
- 범위(Range) – 최솟값과 최댓값 사이인가? : 사람 나이가 200,000살?
- 참조(Reference) – 자기 영역을 벗어난 참조하는가? : 스택의 pop()은 스택이 비어 있지 않아야 한다.
- 존재성(Existence) – 값이 존재하는가? : null이 아님. 0이 아님 등
- 개체 수(Cardinality) – 확실히 충분한 값이 존재하는가? : ’0-1-n 규칙’, off-by-one
- 시간(Time) – 순서대로 일어나는가? 제시간에?