상세 컨텐츠

본문 제목

실용주의 단위 테스트. 6장. Right-BICEP: 무엇을 테스트할 것인가?

TIL/실용주의 단위 테스트

by box-jeon 2019. 11. 17. 02:46

본문

Right: 결과가 올바른가?

테스트 코드는 무엇보다도 먼저 기대한 결과를 산출하는지 검증할 수 있어야 합니다. 코드에 대해 행복 경로 테스트를 할 수 없다면 그 내용을 완전히 이해하지 못한 것입니다. 

 

Boundary Conditions: 경계 조건은 맞는가?

입력 값의 양 극단을 다루는 테스트를 작성할 필요가 있습니다.

- 모호하고 일관성 없는 값.

- 잘못된 양식의 데이터.

- 수치적 오버플로를 일으키는 계산.

- 비거나 빠진 값.

- 이성적인 기댓값을 훨씬 벗어나는 값.

- 교실의 당번표처럼 중복을 허용해서는 안 되는 목록에 중복 값이 있는 경우.

- 정렬이 안 된 리스트 혹은 그 반대.

- 시간 순이 맞지 않는 경우.

 

Inverse Relationship: 역 관계를 검사할 수 있는가?

논리적인 역 관계를 적용하여 행동을 검사합니다. 항상 역 관계가 성립하는 것은 아니지만, 수학 계산 같은 경우에 사용할 수 있습니다. 곱셈을 나눗셈으로 검증하고 뺄셈을 덧셈으로 검증하는 식입니다.

 

Cross-Check: 다른 수단을 활용하여 교차 검사할 수 있는가?

어떤 문제를 해결하기 위해서는 여러 가지 방법이 있을 수 있습니다. 우리는 그 중에 가장 좋은 해법이라고 생각하는 것을 선택합니다. 하지만 여전히 선택되지 못한 해법들도 유효한 해법들입니다. 조금 비효율적이지만 쉽고 안정적인 해법일 가능성도 있습니다. 이러한 경우, 프로덕션 코드의 결과를 차선의 해법으로 얻어낸 결과와 비교하는 테스트를 작성할 수 있습니다.

 

Error Conditions: 오류 조건을 강제로 일어나게 할 수 있는가?

행복 경로의 반대편 역시 테스트할 필요가 있습니다. 다음의 시나리오들을 테스트할 수 있는 방법들에 대해 고려해볼 필요가 있습니다.

- 메모리가 가득찰 때.

- 디스크 공간이 가득 찰 때.

- 벽시계 시간에 관한 문제들.(ex. 서버와 클라이언트 간 시간이 달라서 발생하는 문제들)

- 네트워크 가용성 및 오류들.

- 시스템 로드.

- 제한된 색상 팔레트.

- 매우 높거나 낮은 비디오 해상도.

 

Performance Characteristics: 성능 조건은 기준에 부합하는가?

JUnit은 어떤 코드가 특정 시간 안에 실행되는지를 단언하는 인터페이스를 제공하고 있습니다. 다만 이 때 주의할 점은 다음과 같습니다.

- 코드 덩어리를 충분한 횟수만큼 실행합니다. 몇 번만 하면 할 때마다 결과가 들쭉날쭉할 수 있습니다.

- 반복하는 코드 부분을 JVM이 최적화하지 못하는지 확인해야 합니다.

- 최적화되지 않은 테스트들을 빠른 테스트들과 분리해야합니다. 성능 테스트는 야밤에 한 번이면 충분합니다.

관련글 더보기

댓글 영역