본문 바로가기
학교 CS/소프트웨어공학 (3-1학기)

CH 10. 소프트웨어 테스팅 (1)

by 우중충 2025. 6. 17.
반응형

 CH 10. 소프트웨어 테스팅 (1) 


🔷 10.1 테스팅 개요 및 원칙

▪ 테스팅의 필요성과 어려움

  • SW 오류 사례: 패트리어트 미사일 사고, Therac-25 방사선 사고
  • 오류 요인: 다양한 플랫폼, 개발자 간 스킬 차이, Legacy 코드, QA에 대한 오해 등

▪ 소프트웨어 테스트 정의

  • 결함이나 오류를 발견하기 위한 활동
  • 오류가 없음을 보장하진 않음 → 예방이 핵심

▪ 테스트 목적

  • 결함 발견, 요구사항 준수 여부 확인, 품질 및 신뢰성 확보, 고객 만족도 향상

▪ 테스팅의 7가지 원칙(교수님 설명 버전)

  1. 개발자가 자신의 프로그램을 테스트하지 않음
  2. 테스팅은 오류의 존재를 입증하는 것
  3. 완벽한 테스팅은 불가능
  4. 초기부터 테스팅 시작
  5. 결함 집중 (결함은 특정 모듈에 몰려 있음)
  6. 살충제 패러독스 (동일 테스트 반복 시 새로운 버그 발견 어려움)
  7. 테스팅은 환경에 따라 다름

https://istqbfoundation.blogspot.com/p/13-testing-principles-k2.html

 

[ISTQB] 1.3 Testing principles (K2)

LO-1.3.1 - Explain the seven principles of testing (K2) 1. Testing shows presence of defects Testing contributes to find and fix defects ...

istqbfoundation.blogspot.com

보통 테스팅 7원칙은 여기서 나오는 것 같다.

  • Testing shows the presence of defects(테스팅은 결함이 존재함을 밝히는 행동이다)
  • Exhaustive testing is impossible(완벽한 테스팅은 불가능하다)
  • Early testing(조기 테스팅)
  • Defect clustering(결함은 집중된다)
  • Pesticide parado(살충제 패러독스)
  • Testing is context dependent(테스팅은 문맥에 의존한다)
  • Absence-of-errors fallacy(부재 오류의 오류) - "오류가 없다는 착각"

🔷 10.2 테스팅 유형 및 정적 테스트

▪ 정적 테스트

  • 프로그램 실행 없이 구조 분석
  • 인스펙션: 공식적 오류 확인 (체크리스트, 회의 기록)
  • 워크스루: 비공식적 리뷰
  • 동료 검토: 비정규 검토 활동 (페어프로그래밍, 버그 헌팅 등)

▪ 동료 검토 예시

  • 동료의 코드를 함께 점검하며 작은 실수를 발견

▪ 인스펙션

  • 개발 초기 오류를 줄이고 비용 절감
  • 사람 중심, 공식 회의 포함

▪ 동적 테스트

  • 실제 프로그램 실행
  • 대표적 기법: 화이트박스, 블랙박스 테스트

▪ 테스트와 품질관리

  • 결함 예방: 정적 기법
  • 결함 탐지: 동적 기법

▪ 검증(Verification) vs. 확인(Validation)

  • 검증: 개발 산출물이 올바르게 만들어졌는가? ("Right product?")
  • 확인: 최종 결과물이 고객 요구를 만족하는가? ("Right way?")

▪ 주요 테스트 유형

테스트 유형 목적 및 특징

회복 테스트 장애 유발 후 정상 복구 여부 확인
보안 테스트 보안 침해, 불법 접근 여부 확인
스트레스 테스트 과부하 상태에서 안정성 테스트
성능 테스트 응답 시간, 처리량 등 평가
회귀 테스트 수정 후 새로운 오류 발생 여부 확인

🔷 10.3 테스팅 단계

▪ V-Model 개요

V-Model

  • 테스트를 개발 생명주기와 연계한 모델
  • 각 단계의 결과물을 기반으로 해당 테스트 수행
  • 오류 발생 시 이전 단계로 회귀 가능 (추적성 보장)

▪ 단위 테스트 (Unit Testing)

  • 모듈 단위, 개발자가 직접 수행
  • 화이트박스/블랙박스 가능
  • 스텁(Stub), 드라이버(Driver) 활용

▪ 통합 테스트 (Integration Testing)

  • 모듈 간 인터페이스 및 연동 검사
  • 기법:
    • 빅뱅: 모든 모듈 한꺼번에 통합 (오류 원인 추적 어려움)
    • 하향식: 상위 → 하위로 통합 (스텁 필요)
    • 상향식: 하위 → 상위로 통합 (드라이버 필요)

▪ 시스템 테스트 (System Testing)

  • 전체 시스템이 사용자의 요구사항을 만족하는지 확인
  • 기능 + 비기능 요구사항 평가

▪ 인수 테스트 (Acceptance Testing)

  • 사용자 수행
    • 알파: 개발 환경에서 사용자 테스트
    • 베타: 실제 환경에서 제한된 사용자 테스트

▪ 테스트 관리 문서

  1. 테스트 계획서: 범위, 일정, 자원 등 정의
  2. 테스트 케이스: 입력, 예상 출력, 조건 등 포함
  3. 테스트 스크립트: 절차화된 실행 내용
  4. 실행 보고서: 실제 vs. 예상 결과 비교
  5. 요약 보고서: 오류 및 통계 요약
  6. 요구사항 추적 매트릭스: 테스트와 요구사항 연결

테스트 자동화 및 도구

▪ 단위 테스트 도구

  • JUnit, NUnit, csUnit, MSTest, CppUnit 등
  • Selenium: 웹 테스트
  • HttpUnit: HTTP 기반 테스트

▪ 통합 테스트 및 분석 도구

  • Hudson, CruiseControl, AnthillPro
  • ChangeMiner: 함수 의존성 분석
  • 제니퍼: 모니터링
  • UML 역공학 도구 등

▪ 품질관리 도구

  • Glean: 품질 관리 전반
  • Cobertura: 커버리지 측정
  • Checkstyle/PMD: 코드 스타일, 복붙 오류 확인
  • JavaNCSS: 코드 복잡도 측정
  • JDepend: Java 패키지 설계 검토