애플리케이션 테스트 개념
- 애플리케이션에 내재된 결함 발견하는 일련의 과정
- 고객 요구사항 확인 (Validation)하고 기능 정상 수행하는지 검증 (Verification) 하는 것
애플리케이션 테스트 기본 원리
원리 | 설명 |
완벽한 테스팅 불가능 | 결함 줄일 수 있으나 결함 없다고 증명할 수 없음 |
파레토 법칙 | 20%% 모듈에서 80% 결함 발견 |
살충제 패러독스 | - 동일한 테스트 케이스에 의한 반복적 테스트로는 더 이상 결함 발견하지 못함 - 동일한 테스트 케이스로 동일한 테스트 반복하면 더 이상 결함 발견되지 않는 현상 |
테스팅은 정황에 의존적 | 소프트웨어 정황 (환경, 성격)에 맞게 테스트 실시 |
오류 - 부재의 궤변 | 결함 없다해도 요구사항 충족하지 못하면 품질 높다고 할 수 없음 |
테스트와 위험 반비례 | 테스트 많이 할수록 위험 감소 |
테스트팀 운영 | 테스트는 개발자와 관계없는 별도 팀에서 수행 |
애플리케이션 테스트 분류
프로그램 실행 여부, 테스트 기반, 테스트 관점, 테스트 목적에 따라 분류 가능
프로그램 실행 여부에 따른 분류
1) 정적 테스트
- 프로그램을 실행하지 않고 명세서나 소스코드 분석하는 테스트
- 테스트 방법 : 리뷰, 정적 분석
리뷰 (review)
동료 검토 | 요구사항 명세서 작성자가 내용 직접 설명, 동료들이 이를 들으면서 결함 발견 |
워크 스루 | 검토 회의 전 요구사항 명세서를 미리 배포해 사전 검토 회의 통해 결함 발견 |
인스펙션 | 요구사항 명세서 작성자를 제외한 다른 검토 전문가들이 결함 발견 |
정적 분석
자동화된 도구 이용해 산풀물 결함 검출하거나 복잡도 측정
코딩 표준 | - 코딩 표준 및 코딩 지침에 대한 준수 여부 검사 - 대표적 도구 : LDRA, PRQA, Parasoft |
복잡도 측정 | - 프로그램 복잡성 측정 및 분석 검사 - MaCabe 순환 복잡도 |
자료흐름 분석 | 프로그램 자료 흐름에 이상 존재하는지 분석 검토 |
2) 동적 테스트
- 프로그램 코드 실행하여 오류 찾는 테스트
- 테스트 방법 : 화이트박스 테스트, 블랙박스 테스트
구분 | 화이트박스 테스트 | 블랙박스 테스트 |
정의 | - 제품 내부 논리구조 검사 - 원시코드 (소스 코드) 필요 |
- 제품 외부 기능, 오류 검사 - 원시 코드 (소스 코드) 불필요 |
특징 | 제어 흐름에 초점 둔 구조 검사 | 정보 영역에 초점 둔 기능 검사 |
시험 방법 | - 원시 코드 모든 문장을 한번 이상 수행 - 모듈 안 작동 직접 관찰 |
- 기능별 입력에 대한 출력 정확성 검사 - 부정확하거나 잘못된 기능, 누락된 기능 검사 |
시점 | 검사단계 전반부 | 검사단계 후반부 |
종류 | - 기초경로 검사 - 조건 검사 - 루프 검사 - 데이터 흐름 검사 |
[ 동, 경, 원, 오, 비] - 동치 분할 검사 - 경계값 검사 - 원인 - 효과 그래프 - 오류 예측 검사 - 비교 검사 |
테스트 프로세스
개발된 소프트웨어 사용자 요구 사항 반영 여부, 결함 여부 등 테스트하는 절차
진행순서
테스트 계획 | 프로젝트 계획서, 요구 명세서 등 기반으로 테스트 목표 정의하고 테스트 대상 및 범위 결정 |
테스트 분석 및 디자인 | 테스트 목적과 원칙 검토하고 사용자 요구 사항 분석 |
테스트 케이스 및 시나리오 작성 | 테스트 케이스 설계기번에 따라 테스트 케이스 작성, 검토 및 확인 후 테스트 시나리오 작성 |
테스트 수행 | - 테스트 환경 구축 후 테스트 수행 - 테스트 실행 결과 측정, 기록 |
테스트 결과 평가 및 리포팅 | 테스트 결과 비교, 분석하여 테스트 결과서 작성 |
결함 추적 및 관리 | 테스트 수행 후 결함 발생 부분과 종류 추적, 관리 |
테스트 수행 요소
1) 테스트 케이스
- 구현된 소프트웨어가 사용자 요구사항을 정확하게 준수했는지 확인하기 위해 설계된 입력값, 실행 조건, 기대 결과
등으로 구성된 테스트 항목에 대한 명세서
- 명세 기반 테스트 설계 산출물에 해당
- 테스트 케이스 미리 설계 시 오류 방지와 인력, 시간 낭비 감소 효과
테스트 케이스 구성 항목
테스트 ID 작성 | 테스트 케이스를 고유하게 식별하기 위한 ID 작성 |
테스트 목적 작성 | 테스트 시 고려해야 할 중점 사항이나 테스트 케이스 목적 작성 |
테스트 기능 요약 | 애플리케이션 테스트할 기능 간략하게 작성 |
입력 데이터 작성 | 테스트 실행 시 입력할 데이터 (입력 값, 선택 버튼, 체크리스트 값 등) 작성 |
기대 결과 작성 | 테스트 실행 후 기대되는 결과 데이터 (출력 데이터, 결과 화면, 기대 동작 등) 작성 |
테스트 환경 설정 | 테스트 시 사용할 물리적, 논리적 테스트 환경, 사용할 데이터, 결과 기록 서버 등 내용 작성 |
전제 조건 설정 | 테스트 간 종속성, 테스트 수행 전 실행되어야 할 고려 사항 등 작성 |
성공 / 실패 기준 설정 | 테스트 거친 애플리케이션 기능의 성공 / 실패 판단 조건 명확히 작성 |
기타 요소 식별, 설정 | 사용자의 테스트 요구사항 중 특별히 고려해야 할 내용 간략히 기술 |
2) 테스트 시나리오
- 테스트 케이스 적용 순서 따라 여러 테스트 케이스를 묶은 집합
- 테스트 케이스들 적용하는 구체적 절차 명세한 문서
- 테스트 순서에 대한 구체적 절차, 사전 조건, 입력 데이터 등 설정됨
3) 테스트 오라클
- 테스트 결과의 올바른 판단 위해 사전에 정의된 참 값 대입해 비교하는 기법 및 활동
- 결과 판단 위해 테스트 케이스에 대한 예상 결과를 계산하거나 확인
테스트 오라클 특징
- 제한된 검증 : 테스트 오라클을 모든 테스트 케이스에 적용할 수 없음
- 수학적 기법 : 테스트 오라클 값을 수학적 기법 이용해 산출
- 자동화 가능 : 테스트 대상 프로그램 실행, 결과 비교, 커버리지 측정 등을 자동화할 수 있음
테스트 오라클 종류
참 (True) 오라클 | - 모든 테스트 케이스 입력값에 대해 기대하는 결과 제공하는 오라클 - 발생된 모든 오류 검출 가능 - 치명적 업무 (Mission Critical)에 주로 사용 |
샘플링 (Sampling) 오라클 | 특정 몇몇 테스트 케이스 입력값에 대해서만 기대하는 결과 제공하는 오라클 |
추정 (Heuristic) 오라클 | - 샘플링 오라클 개선한 오라클 - 특정 테스트 케이스 입력값에 대해 기대하는 결과 제공하고 나머지 입력 값들에 대해 추정으로 처리하는 오라클 |
일관성 검사 (Consistent) 오라클 | 애플리케이션 변경 발생 시, 테스트 케이스 수행 전후 결과 값 동일한지 확인하는 오라클 |
테스트 검증 기준 (Coverage)
- 소프트웨어 테스트 수행 정도 나타내는 값
- 주어진 테스트 케이스에 의해 수행되는 소프트웨어 테스트범위 측정하는 테스트 품질 측정 기준
- 테스트 정확성과 신뢰성 향상 시키는 역할 수행
- 모든 경로 테스트는 불가능하기 때문에 100% 커버 불가능
1) 화이트박스 테스트 커버리지 (Coverage)
문장 커버리지 (Statement Coverage) |
- 소스 코드 모든 구문이 한 번 이상 수행되도록 테스트 케이스 설계 - 최소 한번은 수행 |
분기 커버리지 (Branch Coverage) |
- 소스 코드 모든 조건식이 한 번 이상 수행되도록 테스트 케이스 설계 (= 결정 커버리지) - 결정 검증 기준이라고도 함 - 조건이 True / False일 때 수행 |
조건 커버리지 (Condition Coverage) |
- 소스 코드 개별 조건식이 적어도 한번은 참 (T)과 거짓 (F)의 결과 나오도록 테스트 케이스 설계 - 전체 조건식에 상관없이 개별 조건식의 True / False에 대해 수행 |
분기 / 조건 커버리지 (Branch / Condition Coverage) |
소스 코드 모든 조건문과 각 조건문에 포함된 개별 조건식 결과가 참 (T)과 거짓 (F)인 경우가 한 번 이상 수행되도록 테스트 케이스 설계 |
논리 흐름도
문장 커버리지
- 각 라인이 적어도 한 번 실행되는지 검증
- Test Case1 : A = 2, B = 0, X = 4
분기 커버리지
- IF 문에는 True 와 False 두 가지 검증
- Test Case1 : A = 1.5, B = 0, X = 3
- Test Case2 : A = 1, B = 1, X = -4
2) 순환 복잡도 (Cyclomatic Complexity)
- 소프트웨어 논리적인 복잡도 측정하기 위한 척도
- 제어 흐름도 G에서 순한 복잡도 V(G)는 다음 방법으로 계산 가능
- 방법 1) 순환 복잡도는 제어 흐름도의 영역 수와 일치하므로 영역 수 계산
- 방법 2) V(G) = E - N + 2 : E는 화살표 수, N은 노드 수
복잡도 V(G) = 내부영역 + 외부영역 = 2 + 1 = 3
복잡도 V(G) = 화살표 (E) - 노드 수 (N) + 2 = 8 - 7 + 2 = 3
3) 블랙 박스 테스트 케이스
블랙박스 테이스 종류
[ 동, 경, 원, 오, 비]
동치분할검사 (Equivalence Partitioning Testing) |
- 입력 데이터 영역 유사한 도메인별로 유효 / 무효값 그룹핑해 대표값 테스트 케이스 만들어 검사 하는 방법, 동등분할 기법이라고도 함 - <평가 점수표> 미리 정해 놓은 후 각 영역에 해당하는 입력값 넣고, 예상되는 출력값 나오는지 실제 값과 비교하는 명세 기반 테스트 기법 |
경계값 분석 | 입력 조건 경계값 테스트 케이스로 선정해 검사하는 기법 m - 1 < m < m + 1 |
원인 - 효과 그래프 검사 | 입력 데이터 간 관계와 출력에 영향 미치는 상황을 체계적으로 분석한 후 효용성 높은 테스트 케이스 선정해 검사하는 기법 |
오류 예측 검사 | 과거 경험이나 확인자 감각으로 테스트하는 기법 |
비교 검사 | 여러 버전 프로그램에 동일한 테스트 자료 제공해 동일한 결과 출력되는지 점검하는 테스트 기법 |
'Study > 정보처리기사 실기' 카테고리의 다른 글
[정보처리기사 실기] 애플리케이션 테스트 관리 _ 애플리케이션 성능 개선 (0) | 2025.03.08 |
---|---|
[정보처리기사 실기] 애플리케이션 테스트 관리, 애플리케이션 통합 테스트 (0) | 2025.03.06 |
[정보처리기사 실기] 인터페이스 구현 _ 인터페이스 구현 검증 (1) | 2025.03.05 |
[정보처리기사 실기] 인터페이스 구현 _ 인터페이스 기능 구현 (1) | 2025.03.04 |
[정보처리기사 실기] 인터페이스 구현 _ 인터페이스 설계 확인 (0) | 2025.03.03 |