테스트 유형(Test Type): The targets of testing

- 테스팅 하는 목적 및 품질 특성을 염두에 두고 소프트웨어 시스템(또는 시스템 일부분)을 검증하는 일련의 테스트 활동


1. 테스트 유형별 테스트 목적

1) 기능 테스팅

- 소프트웨어가 수행하는 기능에 대한 (품질 특성) 테스팅


2) 비기능 테스팅

- 호환성, 신뢰성, 사용성과 같은 비기능적인 품질 특성을 테스팅


3) 구조적 테스팅

- 소프트웨어나 시스템의 구조나 아키텍처에 대한 테스팅


4) 확인/회귀 테스팅(Testing related to changes)

- 유지 보수 테스팅에 많이 사용

- 변경 내용에 관련된 테스팅

(확인 테스팅: 결함에 대한 수정이 이루어 졌는지에 대한 확인, 회귀테스팅: 의도하지 않은 변경을 찾음)


2. 기능적 테스팅(Functional Testing)

- 기능 테스팅은 문서화 되어 있거나 테스터가 알고 있는 기능과 특징, 그리고 그것들과 특별한 시스템과의 상호 운용성을 고려하여 수행

- 시스템이 수행하는 "그 무엇"을 테스팅

- 기능성이라는 품질 특성에 적합성, 정확성, 준수성, 상호운용성, 보안성 등의 부특성을 포함 (ISO/IEC 9126)


1) 활용 가능한 소프트웨어 모델(요구사항 명세, 기능 명세 등에 포함)

- 프로세스 흐름 모델

- 상태 전이 모델

- 유즈케이스 모델

- 평문 언어 명세


2) 모든 테스트 레벨에서 수행 가능

- 예: 컴포넌트를 위한 테스트는 컴포넌트 스펙 명세를 기반으로 테스트


3) 기능 테스팅은 명세 기반 기법(Specification-based technique)을 이용해 테스팅: 블랙박스 테스팅

- 소프트웨어나 시스템 기능에서 테스트 조건과 테스트 케이스를 도출, 소프트웨어의 외부적인 행동을 고려


3. 비기능 테스팅(Non-functional Testing)

- 성능 테스팅, 부하 테스팅, 스트레스 테스팅, 사용성 테스팅, 유지보수성 테스팅, 신뢰성 테스팅, 이동성 테스팅을 포함하는 개념

- 시스템이 "어떻게"동작하는가를 테스팅


1) 활용 가능한 소프트웨어 모델

- 제어 흐름 모델

- 메뉴 구조 모델


2) 소프트웨어 제품 특성 테스팅

- 비기능 테스팅을 소프트웨어 제품 특성 테스팅이라고도 함


3) 모든 테스트 레벨에서 수행

4) 다양한 척도 또는 비율(Scale) 정량화 가능한 소프트웨어 시스템의 품질 특성을 측정

- 예: 성능 테스팅에서 응답시간

5) 소프트웨어 공학 - 소프트웨어 제품 품질(ISO/IEC 9126)에서 정의된 품질 모델 참고 가능

- 비기능성을 신뢰성, 사용성, 효율성, 유지보수성, 이식성이라는 품질 특성으로 분류

- 각각의 품질 특성을 3~5가지의 품질 부특성으로 분류


4. 구조적 테스팅(Structural Testing)

1) 특정 유형의 구조에 대한 커버리지를 평가하여 테스팅의 보장성 또는 충분함(Thoroughness)을 측정하는 것이 목적

- 명세 기반 기법을 적용한 다음에 사용


2) 커버리지: 시스템 또는 소프트웨어의 구조가 테스트 수트에 의해 커버된 정도

- 구조 종류에 대해 커버된 퍼센트로 표시

- 커버리지가 100%가 아니라면, 누락된 아이템을 테스트 하기 위해 추가 테스트 설계하여 커버리지를 높임


3) 모든 테스트 레벨에서 수행

- 콜트리: 통합 테스팅 레벨

- 호출체계(구조, Hierarchy)와 같은 시스템의 아키텍쳐에 기반을 두고 테스팅: 시스템 테스팅 레벨

- 비지니스 모델이나 메뉴 구조를 활용하여 테스팅: 인수 또는 시스템, 시스템 통합 테스팅 레벨


5. 확인(재)/리그레션 테스팅(Confirmation(re-testing) and regression Testing)

1) 확인 테스팅(Confirmation Testing, Re-Testing)

- 결함이 발견되고 수정된 후에 원래의 결함이 성공적으로 제거되었는지 확인하기 위해 다시 테스트 하는 것

- 디버깅(Debugging): 결함의 원인을 찾거나 결험을 수정하기 위한 개발 활동, 테스트 활동 아님


2) 리그레션 테스팅(Regression Testing)

- 결함 수정 이후 변경의 결과로 도입되었거나 발견되지 않았던 또다른 결함을 발견

- 이미 테스트된 프로그램의 테스팅을 반복하는 것, 퇴행(Regression) 여부를 확인하는 테스팅

- 결함은 테스트 중인 소프트웨어에 존재하거나 다른 관련이 있는 또는 전혀 관련이 없는 소프트웨어 컴포넌트에 존재 가능

- 소프트웨어 또는 환경이 변경되면 리그레션 테스팅을 수행해야 함(예 - OS 패치)

- 수행 범위와 정도:  이전에 정상 동작했던 소프트웨어에서 결함을 발견하지 못해 야기될 수 있는 리스크에 바탕을 둠

(위험성이 높으면 리그레션 테스팅을 보다 넓은 범위로 보다 상세하고 철저하게 수행)

- 모든 테스트 레벨에서 수행 가능

- 기능, 비기능, 구조적 테스팅에 적용 가능

- 리그레션 테스팅 → 반복적 성향 → 자동화 대상


유지보수 테스팅(Maintenance Testing)

- 이미 운영되고 있는 시스템에서 수행

- 소프트웨어나 시스템이 변경, 단종되었거나 마이그레이션될 때 발생

- 변경된 부분에 대한 테스팅 이외에도 변경하지 않은 시스템 요소에 대한 리그레션 테스팅도 고려해야 함

- 명세가 매우 오래되었거나 없다면 명세서를 근간으로 수행하기 어려울 수 있음


1. 유지보수 테스팅 종류

1) 변경에 의한 유지보수 테스팅

- 릴리즈 기반의 계획된 개선을 위한 변경, 요구사항 변경에 의한 수정, 긴급 변경, 환경의 변경등이 존재

(예: 계획된 OS 또는 DB 업그레이드, OS의 새로 드러난 취약점 패치)


2) 마이그레이션을 위한 유지보수 테스팅

- 마이그레이션: 한 플랫폼에서 다른 플랫폼으로 옮겨가는 것

- 변경된 소프트웨어에 대한 운영 테스트뿐만 아니라, 새로운 환경에서의 운영 테스트도 포함


3) 단종에 의한 유지보수 테스팅

- 데이터를 마이그레이션 하는 테스팅을 포함

- 데이터의 보유기간이 필요하다면 데이터 저장관련 사항을 테스팅 해야 함


2. 유지보수 테스팅의 범위

- 변경 사항의 리스크 및 크기, 기존 시스템의 크기와 관련됨


1) 변경 내용에 따라, 모든 테스트 유형에 대해 모든 테스트 레벨에서 수행 가능

- 예: 변경된 내용이 메모리 누출을 막기 위한 컴포넌트 수정(비기능 테스팅 유형을 컴포넌트 레벨에서 유지 보수 테스팅 하고 필요 시 회귀 테스팅)


2) 영향도 분석(Impact analysis): 변경으로 인해 기존 시스템이 어떻게 영향을 받는지 결정하는 것

- 리그레션 테스팅 수행 정도를 결정하는데 이용