정처기

애플리케이션 테스트 케이스 설계

효ㄷi 2025. 2. 19. 16:35

 

✅ 소프트웨어 테스트란?

  • 사용자가 원하는 기능, 성능, 안정성 등을 만족하는지 확인하는 과정
  • 애플리케이션이나 시스템의 결함을 찾아내어 문제 해결이 목표

 

✅ 소프트웨어 테스트의 필요성

✔ 프로그램에 숨겨진 오류를 발견하고 수정하여 올바른 소프트웨어 개발 ✨

✔ 실행 전에 코드 리뷰, 인스펙션 등으로 오류 예방 가능 🛠

✔ 반복적인 테스트로 제품 신뢰도 상승 & 사용자의 기대 충족 🚀


🎯 소프트웨어 테스트 기본 원칙

완벽한 테스트는 불가능 ❌ 모든 결함을 없애는 것은 어렵다

개발 초기부터 모든 단계에서 적절한 테스트 기법을 활용해야 함

 

📌 효율적인 테스트 원칙

  • 결함 집중 (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을 이용한 논리적 분리 환경 구축

✅ 테스트 데이터란?

✔ 시스템이 정상 작동하는지 검증하기 위한 테스트용 데이터

 

📌 테스트 데이터 유형

실제 데이터 → 운영 데이터 활용

가상 데이터 → 스크립트를 이용해 생성


🎯 테스트 시작 & 종료 기준

시작 조건: 계획 수립, 환경 구축, 역할 설정 완료 후 시작

 

종료 조건

  • 모든 테스트 수행 완료
  • 일정 종료
  • 비용 소진

✅ 테스트 성공 & 실패 기준

✔ 기대 결과와 실제 결과가 일치하면 성공

✔ 동일한 입력을 여러 번 테스트했을 때, 결과가 일관되게 나오면 성공

✔ 경우에 따라 다양한 성공 기준 적용 가능