체크리스트 기반 테스팅 (Checklist-based Testing)

Checklist-based Testing은 테스트 대상의 중요한 항목들을 체크리스트로 만들어 이를 기반으로 테스트를 수행하는 경험 기반 테스트 기법이다.
숙련된 테스터가 제품 검증을 위한 일련의 규칙이나 기준, 또는 참고/확인/기억해야 하는 상위수준 아이템 목록을 사용한다.

주요 특징

  1. 구조화된 접근 방식: 테스트 과정에 체계적인 구조를 제공한다.
  2. 일관성과 반복성: 모든 테스터가 동일한 단계를 따르고 동일한 항목을 확인하도록 보장한다.
  3. 중요 항목 누락 방지: 체크리스트를 통해 중요한 테스트 항목을 놓치지 않도록 한다.
  4. 경험 활용: 테스터의 경험과 지식을 체크리스트에 반영하여 활용한다.

적용 분야

Checklist-based Testing은 다양한 테스트 유형에 적용될 수 있다:

  • 기능 테스팅
  • 비기능 테스팅
  • 사용자 인터페이스 테스팅
  • 보안 테스팅 (PCI, HIPAA 등)
  • 모바일 테스팅
  • 접근성 테스팅 등

장점

  1. 테스트 프로세스의 표준화
  2. 일관성 있는 테스트 수행 가능
  3. 테스트 팀 간 커뮤니케이션 개선
  4. 테스트 문서 작성 및 유지보수 시간 단축

한계점

  1. 체크리스트 작성과 유지보수에 시간 소요
  2. 예상치 못한 오류 발견에 제한적일 수 있음
  3. 테스터의 창의성을 제한할 수 있음

수행 방법

  1. 체크리스트 작성: 테스트 범위 식별, 테스트 케이스 개요 작성, 전제 조건 및 예상 결과 정의
  2. 체크리스트 할당: 적절한 테스터 선택 및 요구사항 이해 확인
  3. 테스트 실행: 체크리스트에 따라 체계적으로 테스트 수행 및 결과 기록
  4. 결과 검토 및 분석: 반복적인 문제 식별 및 체크리스트 효과성 분석
  5. 체크리스트 업데이트 및 유지보수: 소프트웨어 변경에 따른 지속적인 업데이트

예시

로그인 기능에 대한 체크리스트는 다음과 같이 구성될 수 있다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
로그인 기능 테스트 체크리스트

1. 입력 필드 검증
   - [ ] 이메일 형식이 올바른지 확인
   - [ ] 비밀번호 최소/최대 길이 제한 확인
   - [ ] 특수문자 처리가 올바른지 확인

2. 인증 프로세스
   - [ ] 올바른 계정으로 로그인 성공
   - [ ] 잘못된 비밀번호로 로그인 실패
   - [ ] 존재하지 않는 계정으로 로그인 실패
   - [ ] 비밀번호 5회 오류 시 계정 잠금

3. 보안 요구사항
   - [ ] 비밀번호가 암호화되어 전송
   - [ ] HTTPS 프로토콜 사용
   - [ ] SQL 인젝션 방지 처리

4. 사용자 경험
   - [ ] 오류 메시지가 명확하게 표시
   - [ ] 로그인 상태 유지 기능 동작
   - [ ] 비밀번호 재설정 링크 제공

테스트 케이스 설계의 예시:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
def test_login_functionality():
    """로그인 기능 테스트 케이스"""
    
    # 1. 입력 필드 검증
    def test_email_validation():
        assert validate_email("user@example.com") == True
        assert validate_email("invalid-email") == False
    
    # 2. 인증 프로세스
    def test_authentication():
        assert login("valid@user.com", "correct_password") == True
        assert login("valid@user.com", "wrong_password") == False
    
    # 3. 보안 검증
    def test_security():
        assert is_password_encrypted("mypassword") == True
        assert is_using_https() == True
    
    # 4. 사용자 경험
    def test_user_experience():
        assert error_message_is_clear() == True
        assert remember_me_works() == True

체크리스트 기반 테스팅을 효과적으로 수행하기 위한 추천사항:

  1. 프로젝트의 특성에 맞는 맞춤형 체크리스트를 작성하라.
    일반적인 템플릿을 시작점으로 사용할 수 있지만, 프로젝트의 고유한 요구사항을 반영해야 한다.
  2. 체크리스트를 계층적으로 구성하라.
    상위 수준의 일반적인 항목에서 시작하여 세부적인 검증 항목으로 구체화하면 테스트의 구조화가 용이하다.
  3. 자동화 가능한 항목은 자동화 테스트로 구현하라.
    반복적인 검증 항목들은 자동화하여 테스트 효율성을 높일 수 있다.
  4. 정기적인 리뷰와 업데이트를 수행하라.
    새로운 기능이 추가되거나 기존 기능이 변경될 때마다 체크리스트를 검토하고 필요한 항목을 추가/수정한다.

참고 및 출처