애플리케이션 테스트 케이스 설계
✅ 소프트웨어 테스트란?
- 사용자가 원하는 기능, 성능, 안정성 등을 만족하는지 확인하는 과정
- 애플리케이션이나 시스템의 결함을 찾아내어 문제 해결이 목표
✅ 소프트웨어 테스트의 필요성
✔ 프로그램에 숨겨진 오류를 발견하고 수정하여 올바른 소프트웨어 개발 ✨
✔ 실행 전에 코드 리뷰, 인스펙션 등으로 오류 예방 가능 🛠
✔ 반복적인 테스트로 제품 신뢰도 상승 & 사용자의 기대 충족 🚀
🎯 소프트웨어 테스트 기본 원칙
✔ 완벽한 테스트는 불가능 ❌ 모든 결함을 없애는 것은 어렵다
✔ 개발 초기부터 모든 단계에서 적절한 테스트 기법을 활용해야 함
📌 효율적인 테스트 원칙
- 결함 집중 (Defect Clustering) 🔍 → 결함 대부분이 특정 모듈에 집중됨 (📌 낚시 법칙, 파레토 법칙 적용)
- 낚시의 법칙→ 특정 위치에서 반복적으로 결함 발생
- 파레토 법칙 (Pareto Law) → 결함 80%가 20%의 코드에서 집중적으로 발생
- 살충제 패러독스(Pesticide Paradox) → 동일한 테스트 케이스 반복하면 새로운 결함 발견 불가
- 오류 부재의 궤변(Absence of Errors Fallacy) → 결함이 없어도 요구사항을 충족하지 못하면 품질 보장 불가
🎯 소프트웨어 테스트 절차
📌 일반적인 테스트 프로세스 🛠
1️⃣ 테스트 계획 📄 → 목표 설정, 전략 수립
2️⃣ 테스트 분석 및 설계 🔍 → 요구사항 검토, 설계
3️⃣ 테스트 케이스 및 시나리오 작성 ✍️ → 케이스 정의
4️⃣ 테스트 수행 🚀 → 테스트 실행 및 결함 리포팅
5️⃣ 테스트 결과 평가 및 리포팅 📊 → 결과 분석, 개선
✅ 소프트웨어 테스트 산출물
✔ 테스트 계획서 → 목표, 범위, 일정, 역할 포함
✔ 테스트 케이스 → 입력값, 실행 조건, 기대 결과 등
✔ 테스트 시나리오 → 여러 테스트 케이스의 동작 순서
✔ 테스트 결과 → 절차 및 결과 분석 📑
🎯 소프트웨어 테스트 유형
📌 프로그램 실행 여부에 따른 분류
✔ 정적 테스트 🛑 (실행 없이 코드 분석)
→ 코드 리뷰, 워크스루, 인스펙션 등
✔ 동적 테스트 ▶ (프로그램 실행하며 테스트)
→ 화이트박스 테스트 (경로 구조 분석)
→ 블랙박스 테스트 (기능 검증)
📌 화이트박스 & 블랙박스 차이점
✅ 화이트박스 → 프로그램 내부 로직(경로, 루프 등) 분석
✅ 블랙박스 → 요구사항 충족 여부, 출력 결과 중심 테스트
📌 소프트웨어 테스트 추가 정리
✅ 테스트와 디버깅의 차이
✔ 테스트(Test) → 제품이 제대로 동작하는지 검증하는 과정
- ✅ 검증(Verification): 개발 과정에서 테스트 (개발자 입장)
- ✅ 확인(Validation): 제품 완성 후 결과를 테스트 (사용자 입장)
✔ 디버깅(Debugging) → 발견된 오류를 수정하는 과정
🎯 목적 기반 테스트
소프트웨어의 특정 성능을 검증하기 위한 테스트! 🛠
✔ 회복 테스트 (Recovery) 🔄 → 오류 발생 후 정상 복구 여부 확인
✔ 안전 테스트 (Security) 🔐 → 보안 취약점 검사
✔ 강도 테스트 (Stress) 💪 → 시스템이 극한 상황에서도 작동하는지 확인
✔ 성능 테스트 (Performance) ⚡ → 응답 시간, 처리량, 반응 속도 테스트
✔ 구조 테스트 (Structure) 🏗 → 내부 로직의 복잡도 평가
✔ 회귀 테스트 (Regression) 🔁 → 코드 변경 후 기존 기능이 정상 동작하는지 확인
✔ 병행 테스트 (Parallel) 🎭 → 변경된 코드와 기존 코드의 실행 결과 비교
✅ 설계 기반 테스트
테스트 설계를 위한 자료에 따라 분류됨!
✔ 명세 기반 테스트 📜 → 요구 사항을 기반으로 테스트 진행
✔ 구조 기반 테스트 🏗 → 코드 내부 로직을 기반으로 테스트
✔ 경험 기반 테스트 🎓 → 기존 테스트 경험을 활용하여 테스트 설계
🎯 화이트박스 테스트 기법
✔ 기초 경로 테스트 (Basic Path Testing)
- McCabe의 복잡도 측정법을 이용하여 코드의 흐름을 분석
- 복잡도 = 간선 수 - 노드 수 + 2 로 계산
복잡도 수준 해석:
- 5 이하 → 단순한 코드
- 6~10 → 안정적인 구조
- 11~19 → 일반적 복잡도
- 20~49 → 매우 복잡
- 50 이상 → 불안정 (구조 변경 필요)
✔ 제어 구조 검사 (Control Structure Testing)
- 조건 검사: 논리 조건 중심으로 테스트
- 루프 검사: 반복 구조(Loop) 중심 테스트
- 데이터 흐름 검사: 변수의 정의 및 사용 흐름을 검증
✅ 블랙박스 테스트 기법
✔ 동등 분할 (Equivalence Partitioning) 테스트
- 유효한 값과 무효한 값을 균등하게 나누어 테스트 진행
✔ 경계값 분석 (Boundary Value Analysis) 테스트
- 오류 발생 확률이 높은 경계값을 중심으로 테스트 설계
✔ 원인-효과 그래프 (Cause-Effect Graphing) 테스트
- 입력값과 출력값의 관계 분석하여 테스트 설계
✔ 오류 예측 (Error Guessing) 테스트
- 경험과 직관을 이용해 발생 가능성이 높은 오류 예측
✔ 비교 (Comparison) 테스트
- 여러 버전의 소프트웨어를 비교하여 테스트 진행
✅ 테스트 케이스란?
✔ 설계 기반 테스트의 산출물로, 입력값, 실행 조건, 기대 결과가 포함된 문서 📄
🎯 테스트 케이스 작성 절차
1️⃣ 테스트 계획 검토 & 자료 확보 🔍 → 테스트 대상, 요구사항 검토
2️⃣ 위험 평가 & 우선순위 결정 ⚠️ → 중요한 기능에 우선 집중
3️⃣ 테스트 요구사항 정의 📝 → 대상, 특성, 조건, 기능 분류
4️⃣ 테스트 구조 & 방법 결정 🏗 → 형식, 절차, 도구 선택
5️⃣ 테스트 케이스 정의 📌 → 입력값, 실행 조건, 기대 결과 문서화
6️⃣ 테스트 케이스 검증 & 유지보수 🔄 → 환경 변화에 따른 개선
✅ 테스트 오라클 (Oracle)
✔ 테스트 결과가 정확한지 판단하기 위해 비교하는 기준
📌 테스트 오라클 유형
✔ 참(True) 오라클) ✅ → 모든 입력값에 대해 기대 결과 제공
✔ 샘플링(Sampling) 오라클 🎯 → 특정 입력값에 대해서만 기대 결과 제공
✔ 휴리스틱(Heuristic) 오라클 🧠 → 일부 기대 결과 제공, 나머지는 추정
✔ 일관성 검사(Consistent) 오라클 🔄 → 기존 결과와 새로운 결과 비교
🎯 테스트 환경 구축
테스트가 실행될 환경을 설정하는 과정
✔ 테스트 환경 구축 방법
- 실제 소프트웨어 운영 환경과 유사한 환경 구성
- 가상 머신(VM) & 클라우드 활용
- VLAN을 이용한 논리적 분리 환경 구축
✅ 테스트 데이터란?
✔ 시스템이 정상 작동하는지 검증하기 위한 테스트용 데이터
📌 테스트 데이터 유형
✔ 실제 데이터 → 운영 데이터 활용
✔ 가상 데이터 → 스크립트를 이용해 생성
🎯 테스트 시작 & 종료 기준
✔ 시작 조건: 계획 수립, 환경 구축, 역할 설정 완료 후 시작
✔ 종료 조건
- 모든 테스트 수행 완료
- 일정 종료
- 비용 소진
✅ 테스트 성공 & 실패 기준
✔ 기대 결과와 실제 결과가 일치하면 성공
✔ 동일한 입력을 여러 번 테스트했을 때, 결과가 일관되게 나오면 성공
✔ 경우에 따라 다양한 성공 기준 적용 가능