정보처리기사/소프트웨어 개발
애플리케이션 테스트 관리
jhwannabe
2023. 7. 12. 10:06
테스트 케이스
소프트웨어 테스트
- 소프트웨어 개발 단계에서 사용자 요구사항에 서술된 동작과 성능, 사용성, 안정성 등을 만족하는지 확인하기 위하여 소프트웨어의 결함을 찾아내는 활동으로 품질 향상, 오류 발견, 오류 예방 관점에서 수행하는 행동
- 품질 향상 관점 : 반복적인 테스트를 거쳐 제품의 신뢰도를 향상하는 품질 보증 활동
- 오류 발견 관점 : 잠재된 오류를 발견하고 이름 수정하여 올바른 프로그램을 개발하는 활동
- 오류 예방 관점 : 코드 리뷰, 동료 검토, 인스펙션 등을 통해 오류를 사전에 발견하는 활동
소프트웨어 테스트의 원리
테스팅은 결함이 존재함을 밝히는 활동이다 | 소프트웨어의 잠재적인 결함을 줄일 수 있지만, 결함이 발견되지 않아도 결함이 없다고 증명할 수 없음을 나타냄 |
완벽한 테스팅은 불가능하다 | 무한 경로, 무한 입력값, 무한 시간이 소요되어 완벽하게 테스트할 수 없으므로 리스크 분석과 우선순위를 토대로 테스트에 집중하는 것을 의미 |
테스팅은 개발 초기에 시작해야 한다 | 애플리케이션의 개발 단계에 테스트를 계획하고 SDLC(Software Development Life Cycle)의 각 단계에 맞춰 전략적으로 접근하는 것을 고려하라는 뜻 |
결함 집중 (Defect Clustering) |
애플리케이션 결함의 대부분은 소수의 특정한 모듈에 집중되어 존재함. 파레토 법칙이 좌우함 |
살충제 패러독스 (Pesticide Paradox) |
동일한 테스트 케이스로 반복 테스트 시 결함을 발견할 수 없으므로 주기적으로 테스트 케이스를 리뷰하고 개선해야 함 |
테스팅은 정황(Context)에 의존한다 | 정황과 비즈니스 도메인에 따라 테스트를 다르게 수행하여야 함 |
오류-부재의 궤변 (Absence of Errors Fallacy) |
사용자의 요구사항을 만족하지 못하는 오류를 발견하고 그 오류를 제거하였다 해도, 해당 애플리케이션의 품ㅁ질이 높다고 말할 수 없음 |
파레토의 법칙(Law of Pareto)
- '80 대 20 법칙' 또는 2 대 8 법칙'이라고도 함
- 전체 결과의 80%가 전체 원인의 20%에서 일어나는 현상
- 예를 들어, 20%의 VIP 고객이 백화점 전체 매출의 80%에 해당하는 만큼 쇼핑하는 현상을 의미
테스트 케이스(Test Case)
- 구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서를 의미
- 명세 기반 테스트의 설계 산출물임
- 명세 기반 테스트 : 테스트 수행의 증거로도 활용되며, 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 구현하고 있는지 확인
- 테스트 케이스를 설계 단계에 작성하면 테스트 시 오류를 방지하고, 테스트 수행에 있어 낭비를 줄일 수 있음
- 표준 테스트 케이스 형식
ID | 시나리오 | 테스트 단계 | 테스트 데이터 | 예상 결과 | 실제 결과 | 통과 실패 |
테스트 케이스 작성 절차
- 테스트 게획 검토 및 자료 확보 → 위험 평가 및 우선 순위 결정 → 테스트 요구사항 정의 → 테스트 구조 설계 및 테스트 방법 결정 → 테스트 케이스 정의 → 테스트 케이스 타당성 확인 및 유지보수
테스트 케이스의 구성 요소(ISO/IEC/IEEE 29119-3)
- 식별자(Identifier), 테스트 항목(Test Item), 입력 명세(Input Specification), 출력 명세(Output Specification), 환경 설정(Environmental Needs), 특수 절차 요구(Special Procedure Requirement), 의존성 기술(Inter-case Dependencies)
테스트 프로세스(Test Process)
- 계획 및 제어 → 분석 및 설계 → 구현 및 실현 → 평가 → 완료
테스트 커버리지(Test Coverage)
- 테스트 수행 정도로서 구문 커버리지, 결정 커버리지, 조건 커버리지, 조건/결정 커버리지, 변경 조건/결정 커버리지, 다중 조건 커버리지로 구분
테스트 오라클(Test Oracle)
- 테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참(True)값을 입력하여 비교하는 기법 및 활동
참(True) 오라클 | 모든 입력값에 대하여 적합한 결과를 생성하여, 발생한 오류를 모두 검출할 수 있는 오라클 |
일관성 검사(Consistent) 오라클 | 애플리케이션 변경이 있을 때, 수행 전과 후의 결과값이 동일한지 확인하는 오라클 |
샘플링(Sampling) 오라클 | 임의로 선정한 몇 개의 입력값에 대해서만 기대하는 결과를 제공 |
휴리스틱(Heuristic) 오라클 | 샘플링 오라클을 개선한 오라클로, 임의 입력값에 대해 올바른 결과를 제공하고, 나머지 값들에 대해서는 휴리스틱(추정)으로 처리 |
V-모델과 테스트
테스트 레벨
- 애플리케이션 개발 단계에 따라 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트, 설치 테스트로 분류함
- 애플리케이션을 총체적으로 관리하기 위한 테스트 활동의 묶음
- 각각의 테스트 레벨은 서로 독립적, 각각 다른 테스트 계획과 전략이 필요함
시각에 따른 테스트
- 검증(Verification) 테스트 : 제품이 명세서대로 완성되었는지 검증하는 단계. 개발자의 시각에서 제품의 생산 과정을 테스트하는 것을 의미
- 확인(Validation) 테스트 : 사용자의 요구사항을 잘 수행하고 있는지 사용자의 시각에서 생산된 제품의 결과를 테스트하는 것을 의미
테스크 케이스 자동 생성
- 자료 흐름도 → 테스트 경로 관리, 입력 도메인 분석 → 테스트 데이터 산출, 랜덤 테스트 → 무작위 값 입력, 신뢰성 검사
테스트 레벨의 종류
단위(Unit) 테스트 | - 개발자가 원시 코드를 대상으로 각각의 단위를 다른 부분과 연계되는 부분은 고려하지 않고 단위 자체에만 집중하여 테스트함 - 객체지향에서 클래스 테스팅이 여기에 해당함 |
통합 테스트 | 단위 테스트를 통과한 개발 소프트웨어/하드웨어 컴포넌트 간 인터페이스 및 연동 기능 등을 구조적으로 접근하여 테스트함 |
시스템 테스트 | - 단위/통합 테스트가 가능한 완벽히 완료되어 기능상에 문제가 없는 상태에서 실제 환경과 가능한 유사한 환경에서 진행됨 - 시스템 성능과 관련된 요구사항이 완벽하게 수행되는지를 테스트하기 때문에 사전 요구사항이 명확해야 함 - 개발 조직과는 독립된 테스트 조직에서 수행함 |
인수 테스트 | - 일반적인 테스트 레벨의 가장 마지막 상위 레벨로, SW 제품에 대한 요구사항이 제대로 이행되었는지 확인하는 단계 - 테스팅 환경을 실 사용자 환경에서 진행하며 수행하는 주체가 사용자임 - 알파, 베타 테스트와 가장 밀접한 연관이 있음 |
알파 테스트(Alpha Test)와 베타 테스트(Beta Test)
알파 테스트 | - 개발자 관점에서 수행되며, 사용상의 문제를 반영되도록 하는 테스트 - 개발자의 장소에서 사용자가 개발자 앞에서 행해지며, 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 검사하는 기법 - 개발자는 사용상의 문제를 기록하여 반영되도록하는 테스트 |
베타 테스트 | - 선정된 다수의 사용자가 자신들의 사용 환경에서 일정 기간 사용하면서 테스트 함 - 문제점이나 개선 사항 등을 기록하고 개발 조직에 통보하여 반영되도록 하는 테스트 |
애플리케이션 테스트
정적 테스트
- 애플리케이션을 직접 실행하지 않고 명세서나 소스코드를 대상으로 분석하는 테스트 방식
- 소프트웨어 개발 초기에 결함 발견이 가능하여, 개발 비용을 낮출 수 있음
- 종류 : Inspection, walk-through, Code Test, Orthogonal Array Testing, Prior Defect History Testing, Risk-Based Testing, Run Chart, Statistical Profile Testing
동적 테스트
- 애플리케이션을 직접 실행하여 오류를 찾는 테스트 방식
- 소프트웨어 개발의 모든 단계에서 테스트를 수행함
- 종류 : 블랙박스 테스트, 화이트박스 테스트
테스트 기반(Test Bases)에 따른 테스트
구분 | 설명 |
구조 기반 테스트 | - 소프트웨어 내부의 구조(논리 흐름)에 따라 테스트 케이스를 작성하고 확인하는 테스트 방식 - 종류 : 구문 기반, 결정 기반, 조건 기반, 데이터 흐름 |
명세 기반 테스트 | - 사용자의 요구사항에 대한 명세를 기반으로 테스트 케이스를 작성하고 확인하는 테스트 방식 - 종류 : 동등분할, 경계값 분석, 분류 트리, 상태 전이, 결정 테이블, 원인-결과 조합 테스트, 시나리오, 오류 추정 |
경험 기반 테스트 | - 테스터의 경험을 기반으로 수행하는 테스트 방식 - 요구사항에 대한 명세가 미흡하거나 테스트 시간에 제약이 있는 경우 수행하면 효과적 - 종류 : 에러 추정, 체크 리스트, 탐색적 테스팅 |
목적에 따른 테스트
구분 | 설명 |
성능 (Performance) |
소프트웨어의 응답 시간, 처리량 등을 테스트함 |
회복 (Recovery) |
소프트웨어에 고의로 부하를 가하여 실패하도록 유도하고 올바르게 복구되는지 테스트함 |
구조 (Structured) |
소프트웨어 내부의 논리적인 경로, 소스 코드의 복잡도 등을 평가 |
회귀 (Regression) |
소프트웨어의 변경 또는 수정된 코드에 새로운 결함이 없음을 확인 |
안전 (Security) |
소프트웨어가 불법적인 침입으로부터 시스템을 보호할 수 있는지 확인 |
강도 (Stress) |
소프트웨어에 과도하게 부하를 가하여도 소프트웨어가 정상적으로 실행되는지 확인 |
병행 (Parallel) |
변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 두 결과를 비교 확인 |
728x90