Developer.

정보처리기사 실기 어플리케이션 테스트 정리

📂 목차

📚 본문

테스트 레벨

  1. 단위 테스트: 인터페이스, 자료 구조, 실행 경로, 오류 처리 테스트
    • 블랙박스 테스트
    • 화이트박스 테스트
  2. 통합 테스트: 빅뱅, 상향식/하향식 테스트
  3. 시스템 테스트: 기능/비기능 요구사항 테스트
    • 기능적 요구사항 테스트: 요구사항 명세서, 비즈니스 절차, 유스케이스 등 명세서 기반의 블랙박스 테스트
    • 비기능적 요구사항 테스트: 성능 테스트, 회복 테스트, 내부 시스템의 메뉴 구조, 웹 페이지의 내비게이션 등 구조적 요소에 대한 화이트 박스 테스트
  4. 인수 테스트: 알파/베타 테스트
    • 알파테스트: 사용자가 개발자 환경에서 수행하는 인수 테스트
    • 베타테스트: 실제 환경에서 소프트웨어를 사용하게 하고 피드백 받는 인수테스트

테스트 종류

  • 정적 테스트: 동료 검토, 정적 분석, 워크스루, 인스펙션
  • 동적 테스트: 블랙박스 테스트(명세 기반 테스트), 화이트박스 테스트(구조 기반 테스트)

블랙박스 테스트

사용자의 요구사항 명세를 보면서 수행

  • 동등 분할 테스트(Equivalence Partitioning Testing): 유사한 도메인 별로 유효값/무효값으로 그룹핑 후 대푯값으로 테스트
  • 경곗값 분석 테스트(Boundary Value Analysis Testing): 경계값 부근의 값을 테스트 케이스로 설계, 입력값의 극한 한계를 테스트
  • 결정 테이블 테스트(Decision Table Testing): 요구사항의 논리와 발생조건을 테이블 형태로 나열하여, 조건과 행위를 모두 조합하여 테스트
  • 상태전이 테스트(State Transition Testing): 테스트 대상 상태를 구분하고, 이벤트에 의해 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 테스트
  • 유스케이스 테스트(Use Case Testing): 유스케이스 다이어그램을 기반으로 테스트 케이스를 명세화하여 수행하는 테스트
  • 분류 트리 테스트(Classification Tree Method Testing): SW의 일부 또는 전체를 트리 구조로 분석하여 테스트
  • 페어와이즈 테스트(Pairwise Testing): 모든 조합에 비해 상대적으로 적은 양의 테스트 세트를 구성하기 위한 테스트
  • 원인-결과 테스트(Cause-Effect Graph Testing): 그래프를 활용해 효용성이 높은 테스트 케이스를 선정하여 테스트
  • 비교 테스트(Comparison Testing): 같은 입력 값을 넣어서 동일한 결과가 나오는지 비교하는 테스트
  • 오류 추정 테스트(Error Guessing Testing): 개발자가 범할 수 있는 실수를 추정 후 그에 따른 케이스를 테스트

화이트박스 테스트

  • 구문 커버리지(Statement Coverage): 모든 명령문을 적어도 한 번 수행하는 테스트
  • 결정 커버리지(Decision Coverage): 각 분기의 결정 포인트 내의 ‘전체 조건식’이 적어도 한 번은 참, 거짓이 되도록
  • 조건 커버리지(Condition Coverage): 각 분기의 결정 포인트 내의 ‘개별 조건식’이 적어도 한 번은 참, 거짓이 되도록
  • 조건-결정 커버리지(Condition/Decision Coverage): 결정 + 조건
  • 변경 조건-결정 커버리지(Modified Condition/Decision Coverage): 각 개별 조건식들이 독립적으로 전체 조건식에 영향을 주도록 해서 보완

  • 다중 조건 커버리지(Multiple Condition Coverage): 모든 개별 조건식의 모든 가능한 조합을 100% 보장하는 커버리지
  • 기본 경로 커버리지(Base Path Coverage): 수행 가능한 모든 경로를 테스트
  • 제어 흐름 테스트(Control Flow Testing): 그래프 형태로 나타내어 내부 로직을 테스트
  • 데이터 흐름 테스트(Data Flow Testing): 제어 흐름 그래프에서 데이터 사용현황을 추가한 그래프를 통해 테스트
  • 루프 테스트(Loop Testing): 반복 구조에 초점을 맞춰 실시하는 테스트 기법

테스트 목적에 따른 분류

  • 회복 테스트: 고의로 실패를 유도 후 정상 복귀 여부를 테스트
  • 안전 테스트: 불법 소프트웨어가 시스템을 파괴하지 못하도록 소스코드 내의 보안적인 결함을 미리 점검
  • 성능 테스트: 사용자 이벤트에 시스템이 응답하는 시간, 특정 시간 내에 처리하는 업무량, 반응 속도 등을 측정
  • 강도 테스트: 부하 임계점 이상의 부하를 가하여 비정상적인 상황에서의 처리 테스트
  • 구조 테스트: 시스템의 내부 논리 경로, 소스 코드의 복잡도를 평가하는 테스트
  • 회귀 테스트: 오류를 제거하거나 수정한 시스템에서 오류 제거와 수정에 의해 새로 유입된 오류가 없는지 확인
  • 병행 테스트: 변경된 시스템과 기존 시스템에 동일한 데이터를 입력 후 결과를 비교

소프트웨어 테스트 원리

  • 결함 존재 증명: 결함이 없다는 것을 증명할 수 없다
  • 완벽 테스팅은 불가능: 무한 경로, 무한 입력으로 인한 완벽한 테스트 어려움
  • 초기 집중: SW 개발 초기에 체계적인 분석과 설계가 수행되지 않으면 프로젝트 후반에 영향을 미치게 되어 비용이 커지는 요르돈 법칙
  • 결함 집중: 파레토의 법칙 적용
  • 살충제 패러독스: 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾지 못함
  • 정황 의존성: 소프트웨어의 성격에 맞게 테스트 수행
  • 오류-부재의 궤변: 요구사항을 충족시키지 못하면 결함이 없다고 해도 품질이 높다고 볼 수 없음

테스트 장치 구성요소

  • 테스트 드라이버: 하위 모듈을 호출하는 상위 모듈의 역할(임시적 상위 모듈)
  • 테스트 스텁: 상위 모듈에 의해 호출되는 하위 모듈의 역할(임시적 하위 모듈)
  • 테스트 슈트: 시나리오가 포함되지 않은 단순한 테스트 케이스의 모임
  • 테스트 케이스: 입력, 실행 조건, 기대 결과 등의 집합
  • 테스트 시나리오: 시나리오 : 케이스 = 1 : n
  • 테스트 스크립트: 테스트 케이스의 실행 순서를 작성한 문서
  • Mock Object: 사용자의 행위를 조건부로 사전에 입력하여 그 상호아에 예정된 행위를 수행하는 객체