애플리케이션 통합 테스트

 

✅ 1. 통합 테스트란?

  • 소프트웨어의 각 모듈 간 연결이 잘 되는지 확인하는 과정!
  • 개별 단위 테스트 후, 모듈들을 조합하여 수행하는 테스트임.

🏗 2. 통합 테스트 수행 방법

📌 1) V-모델

🔹 개발 단계를 검증하고 수행해야 테스트를 시각화한 모델

🔹 단계별로 검증하면서 개발 결과를 확인하는 방식


📌 2) 단위 테스트

🔹 소프트웨어의 최소 단위(모듈/컴포넌트)를 개별적으로 테스트하는 과정

🔹 기능 수행 여부 및 논리적 오류 발견

🔹 화이트박스 테스트(코드를 직접 분석하며 테스트) 진행


📌 3) 통합 테스트

🔹 단위 테스트가 끝난 모듈을 연결하여 오류를 찾는 과정

🔹 소프트웨어의 전체적인 동작을 검증

 

📌 진행 방식

비점증적(빅뱅) 방식: 한 번에 모든 모듈을 통합해 테스트

점증적 방식: 단계별로 모듈을 추가하면서 테스트

 

📌 점증적 방식 종류

1️⃣ 상향식(상승식) 통합: 최하위 모듈부터 상위 모듈로 단계별 테스트

2️⃣ 하향식(하향식) 통합: 최상위 모듈부터 하위 모듈로 단계별 테스트


📉 3. 하향식(Top Down) 통합

🔹 최상위 모듈부터 하위 모듈로 이동하면서 테스트

🔹 메인 제어 모듈이 먼저 동작해야 하므로, 하위 모듈은 stub을 사용하여 테스트

stub: 상위 모듈 테스트를 위해 최소한의 기능만 가진 가짜 모듈

 

📌 하위 모듈 통합 방식

✔️ 깊이 우선 방식: 하위 모듈이 촘촘히 있는 부분을 우선 탐색

✔️ 너비 우선 방식: 같은 레벨의 모듈을 우선적으로 통합

 

✔️ stub을 실제 모듈로 교체하며 점진적으로 테스트

✔️ 전체 통합 후 회귀 테스트(기존 기능이 잘 동작하는지 확인) 진행


🏗 4. 상향식(Bottom Up) 통합 테스트

🔹 하위 모듈부터 상위 모듈로 하나씩 연결하면서 테스트를 수행하는 방식

🔹 하위 모듈을 묶어(클러스터화) 테스트 진행

🔹 상위 모듈이 아직 없을 경우, Driver(더미 모듈) 을 사용

 

✅ Driver 역할

  • 테스트 시 아직 없는 상위 모듈의 역할을 대신하는 가짜 모듈
  • 상위 모듈과 연결되었을 때 데이터를 주고받을 수 있도록 함

 

📌 진행 방식

1️⃣ 하위 모듈을 우선적으로 테스트

2️⃣ 테스트가 끝난 모듈부터 차례로 상위 모듈과 연결

3️⃣ Driver를 하나씩 실제 모듈로 교체

4️⃣ 최종적으로 모든 모듈이 연결된 상태에서 전체적인 테스트 진행

 

✔️ Driver와 Stub 차이

  • Stub: 상위 모듈이 테스트할 때 하위 모듈을 대신함
  • Driver: 하위 모듈이 테스트할 때 상위 모듈을 대신함

🔁 5. 회귀 테스트 (Regression Test)

🔹 소프트웨어 수정 후 기존 기능이 정상 동작하는지 확인하는 테스트

🔹 기존 코드 변경으로 인해 발생할 수 있는 의도치 않은 오류를 방지

 

📌 회귀 테스트 선정 기준

✔️ 애플리케이션의 주요 기능을 수행하는 대표적인 테스트 케이스

✔️ 변경된 기능이 다른 부분에 미치는 영향을 고려하여 테스트 추가

✔️ 실제 수정된 모듈 또는 컴포넌트부터 테스트 수행


💻 6. 시스템 테스트

🔹 전체 시스템이 실제 환경에서 제대로 동작하는지 확인하는 테스트

🔹 환경적 장애를 최소화하기 위해 실제 운영 환경과 유사한 환경에서 진행

🔹 기능적 요구사항, 비기능적 요구사항으로 구분


🏆 7. 인수 테스트 (Acceptance Test)

🔹 사용자가 직접 테스트하여 요구사항이 충족되었는지 확인하는 과정

🔹 인수 테스트 통과 시 소프트웨어를 공식적으로 받아들이고 프로젝트 종료

 

📌 종류

✅ 알파(Alpha) 테스트: 개발자가 있는 환경에서 사용자가 직접 테스트

✅ 베타(Beta) 테스트: 실제 운영 환경과 유사한 환경에서 테스트


⚙ 8. 테스트 자동화 도구

🔹 반복적인 테스트를 자동화하여 비용 절감 및 효율성 향상

🔹 수동 테스트보다 빠르고 정확한 결과 제공

 

📌 자동화 도구의 기능

✔️ 테스트 계획: 요구사항 관리

✔️ 테스트 분석: 테스트 케이스 생성

✔️ 테스트 수행: 자동화, 정적 분석, 동적 분석, 성능 테스트, 모니터링

✔️ 테스트 관리: 커버리지 측정, 결함 관리

 

📌 장점

✅ 반복적인 테스트 자동화 가능

✅ 사용자 요구 기능의 일관성 유지

✅ 테스트 결과의 객관적인 평가 가능

✅ UI 없는 서비스도 정밀한 테스트 가능

 

📌 단점

❌ 도구 사용법에 대한 학습 필요

❌ 유지보수 비용이 추가적으로 발생할 수 있음


⚙ 9. 테스트 자동화 도구 유형

🔍 ① 정적 분석 도구 (Static Analysis Tools)

🔹 애플리케이션을 실행하지 않고 코드를 분석하는 도구

🔹 코드 표준, 스타일, 중복된 코드, 결함 등을 찾는 데 사용

 

🚀 ② 테스트 실행 도구 (Test Execution Tools)

🔹 테스트를 자동 실행하는 도구 (스크립트 기반)

🔹 데이터 접근 방식에 따라 두 가지 유형이 있음

 

📌 데이터 접근 방식

✔️ 데이터 주도 접근: 데이터 파일(시트)을 읽어와 테스트 실행

✔️ 키워드 주도 접근: 키워드(수행 동작)와 데이터 파일을 조합하여 실행

 

⚡ ③ 성능 테스트 도구

🔹 애플리케이션이 목표 성능을 달성했는지 확인

🔹 테스트 대상: 처리량, 응답 속도, 경과 시간, 자원 사용률

✅ 보통 시스템 테스트 단계에서 수행

 

📊 ④ 테스트 통제 도구

🔹 테스트 계획 및 결함 추적을 위한 도구

🔹 다른 테스트 도구와 연계하여 요구사항 & 품질 관리 가능

 

🏗 ⑤ 테스트 하네스 (Test Harness)

🔹 테스트를 수행하기 위한 코드 및 데이터의 총칭

🔹 단위 또는 모듈 테스트를 위해 개발자가 작성하는 코드

 

📌 구성 요소

✔️ Test Suites: 테스트 케이스의 모음

✔️ Test Case: 입력값, 실행 조건, 기대 결과

✔️ Test Script: 자동화된 테스트 실행 절차

✔️ Mock Object: 예상된 사용자 행동을 미리 입력한 객체


 

🔍 10. 소프트웨어 결함 정의

📌 소프트웨어에서 발생할 수 있는 문제 유형

용어
정의
오류 (Error)
결함의 원인 (주로 휴먼 에러)
결함 (Defect) / 결점 (Fault) / 버그 (Bug)
오류가 원인이 되어 제품에 포함되는 완전하지 못한 부분
실패 (Failure) / 문제 (Problem)
결함으로 인해 예상치 못한 결과 발생

 


📝 2. 테스트 보고서 작성

테스트 완료 후 결과 문서화 필수

 

📌 보고서에 포함해야 할 내용

  • 📈 테스트 성공률
  • 📊 테스트 커버리지
  • ❗ 결함 수량 및 심각도
  • 🔎 테스트 결과 분석 및 개선 방향

🛠 3. 결함 관리 (Defect Management)

🔹 테스트 중 발견된 결함을 체계적으로 관리하는 활동

🔹 결함 추적 시스템을 활용하여 해결

 

📌 결함 발생 주요 원인

✔️ 개발 기획 오류

✔️ 설계 문제

✔️ 코드 결함

✔️ 테스트 부족

 

🏷️ 결함 심각도(Severity) 기준

등급
🔥 치명적(Critical)
⚠️ 주요(Major)
🔹 보통(Normal)
✏️ 경미(Minor)
💡 단순(Simple)

 

🔥 결함 우선순위(Priority) 기준

등급
🚨 결정적(Critical)
⚡ 높음(High)
⏳ 보통(Medium)
📝 낮음(Low)

 


🔄 4. 결함 관리 프로세스

📌 결함 처리 흐름

1️⃣ 계획(Plan)

2️⃣ 기록(Record)

3️⃣ 검토(Review)

4️⃣ 수정(Fix)

5️⃣ 재확인(Retest)

6️⃣ 보고(Report)

 

📊 결함 관리 지표

✔️ 결함 분포 - 특정 모듈 또는 컴포넌트에 집중된 결함 수

✔️ 결함 추세 - 테스트 진행 기간 동안 발생한 결함 수 변화

✔️ 결함 에이징(Aging) - 해결되지 않고 남아 있는 결함 지속 시간

 

📌 결함 처리 상태

상태
설명
🟢 등록 (Open)
발견된 결함이 DB에 기록됨
🔍 검토 (Reviewed)
적절한 조치(할당, 보류, 해결) 선택
📌 할당 (Assigned)
결함을 담당 개발자에게 배정
🛠 수정 (Resolved)
개발자가 결함을 수정 완료
⏳ 보류 (Deferred)
일정상 우선순위가 낮아 수정이 연기됨
✅ 종료 (Closed)
수정이 완료되어 최종 승인됨
❌ 해제 (Clarified)
결함이 아니라고 판단되어 취소됨

 


🎯 5. 테스트 커버리지 (Coverage)

🔍 테스트 커버리지 정의

  • 테스트 케이스가 소프트웨어의 어느 범위까지 검증했는지를 측정하는 기준
  • 정확성과 신뢰성을 향상시키는 역할

 

📌 기능 기반 커버리지

  • 애플리케이션의 모든 기능을 설정하고 실제 테스트된 기능 수를 측정
  • 100% 커버리지를 목표
  • UI가 많은 시스템의 경우 화면 단위로 측정

 

📄 라인(Line) 커버리지

  • 소스 코드의 총 라인 수 대비 테스트된 라인 수를 측정
  • 단위 테스트에서 특히 중요한 기준

🛠 6. 코드(Code) 커버리지 유형

🔹 코드 테스트의 철저한 수행 여부를 평가하는 기준

유형
📝 구문(Statement) 커버리지
🔀 결정(Decision) 커버리지
⚖️ 조건(Condition) 커버리지
🔄 조건/결정 커버리지
🎯 변형 조건/결정 커버리지 (MC/DC)
🧩 다중 조건 커버리지

 

 

 

'정처기' 카테고리의 다른 글

애플리케이션 테스트 케이스 설계  (0) 2025.02.19
제품 소프트웨어 버전 관리  (0) 2025.02.18
제품 소프트웨어 매뉴얼 작성  (0) 2025.02.18
제품 소프트웨어 패키징  (0) 2025.02.18
연계 모듈 구현  (1) 2025.02.18