이 정리는 자바와 JUnit을 활용한 실용주의 단위 테스트를 보고 개인적으로 정리한 글 입니다
[Right]-BICEP : 결과가 올바른가?
나는 코드가 정상적으로 동작한다면, 그것을 알 수 있을까?
어떤 작은 부분의 코드에 대해 행복 경로 테스트(간단한 테스트)를 할 수 없다면 그 내용을 완전히 이해하지 못한 것이다 위의 질문에 대한 답변을 할 수 있을 때까지 추가 개발은 보류하자
Right-[B]ICEP : 경계 조건은 맞는가?
생각해야 하는 경계 조건
- 모호하고 일관성 없는 입력 값. ex) 특수문자가 포함된 파일 이름
- 잘못된 양식의 데이터. ex) favian@google 처럼 최상위 도메인이 빠진 이메일 주소
- 수치적 오버플로를 일으키는 계산
- 비거나 빠진 값. ex) 0, 0.0, “”, null
- 이성적인 기대값을 훨씬 벗어나는 값. ex) 199살의 나이를 가진 인간
- 중복을 허용해서는 안 되는 목록에 중복 값이 있는 경우
- 정렬 알고리즘에 이미 정렬된 입력 값을 넣는 경우나 정렬 알고리즘에 역순 데이터를 넣는 경우 (최악의 경우)
- 시간 순이 맞지 않는 경우 ex) HTTP Response 가 OPTIONS 메서드보다 POST 메서드가 먼저 되는 경우
경계 조건에서는 CORRECT를 기억하자
- [C]onformance(준수) : 값이 기대한 양식을 준수하고 있는가?
- [O]rdering(순서) : 값의 집합이 적절하게 정렬되거나 정렬되지 않았나?
- [R]ange(범위) : 이성적인 최솟값과 최댓값 안에 있는가?
- [R]eference(참조) : 코드 자체에서 통제할 수 없는 어떤 외부 참조를 포함하고 있는가?
- [E]xistence(존재) : 값이 존재하는가?
- [C]ardinality(기수) : 정확히 충분한 값들이 있는가?
- [T]ime(절대적 혹은 상대적 시간) : 모든 것이 순서대로 일어나는가? 정확한 시간에? 정시에?
Right-B[I]CEP : 역 관계를 검사할 수 있는가?
종종 수학 계산에서 사용되곤 한다 어떤 숫자의 제곱근을 유도하고 그 결과를 제곱하면 우리가 시작했던 것과 같은 숫자를 얻어야 한다
Right-BI[C]EP : 다른 수단을 활용하여 교차 검사할 수 있는가?
문제에는 여러가지 해답이 존재할 수 있다 그 중 선택받지 못한 해답이 옳지만 느리다면 어쨌던 간에 선택한 해답의 교차 검사할 때 활용할 수 있다
ex) 10개의 사과 중 3개의 사과를 먹었을 때 남은 사과의 개수를 구해보자
- 10개 중 3개를 먹었기에 10 - 3 = 7 로 쉽게 구할 수 있다
- 남아 있는 사과를 1개씩 수를 세서 7개가 남아 있는 것을 확인한다
1번을 선택할 수 있지만, 2번이 다른 수단이 될 수 있다
Right-BIC[E]P : 오류 조건을 강제로 일어나게 할 수 있는가?
오류의 경우
- 메모리가 가득 찰 때
- 디스크 공간이 가득 찰 때
- 벽시계 시간에 관한 문제들
- 네트워크 가용성 및 오류들
- 시스템 로드
- 제한된 색상 팔레트
- 매우 높거나 낮은 비디오 해상도
Right-BICE[P] : 성능 조건은 기준에 부합하는가?
많은 프로그래머가 성능 문제가 어디에 있으며 최적의 해법이 무엇인지 추측을 한다 문제점은 이러한 추측이 종종 잘못되었다는 것에 있다
추측만으로 성능 문제에 바로 대응하기보다는 단위 테스트를 설계하여 진짜 문제가 어디에 있으며 예상한 변경 사항으로 어떤 차이가 생겼는지 파악을 해야 한다