반응형
✅ CH 10. 소프트웨어 테스팅 (1)
🔷 10.1 테스팅 개요 및 원칙
▪ 테스팅의 필요성과 어려움
- SW 오류 사례: 패트리어트 미사일 사고, Therac-25 방사선 사고
- 오류 요인: 다양한 플랫폼, 개발자 간 스킬 차이, Legacy 코드, QA에 대한 오해 등
▪ 소프트웨어 테스트 정의
- 결함이나 오류를 발견하기 위한 활동
- 오류가 없음을 보장하진 않음 → 예방이 핵심
▪ 테스트 목적
- 결함 발견, 요구사항 준수 여부 확인, 품질 및 신뢰성 확보, 고객 만족도 향상
▪ 테스팅의 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 개요
- 테스트를 개발 생명주기와 연계한 모델
- 각 단계의 결과물을 기반으로 해당 테스트 수행
- 오류 발생 시 이전 단계로 회귀 가능 (추적성 보장)
▪ 단위 테스트 (Unit Testing)
- 모듈 단위, 개발자가 직접 수행
- 화이트박스/블랙박스 가능
- 스텁(Stub), 드라이버(Driver) 활용
▪ 통합 테스트 (Integration Testing)
- 모듈 간 인터페이스 및 연동 검사
- 기법:
- 빅뱅: 모든 모듈 한꺼번에 통합 (오류 원인 추적 어려움)
- 하향식: 상위 → 하위로 통합 (스텁 필요)
- 상향식: 하위 → 상위로 통합 (드라이버 필요)
▪ 시스템 테스트 (System Testing)
- 전체 시스템이 사용자의 요구사항을 만족하는지 확인
- 기능 + 비기능 요구사항 평가
▪ 인수 테스트 (Acceptance Testing)
- 사용자 수행
- 알파: 개발 환경에서 사용자 테스트
- 베타: 실제 환경에서 제한된 사용자 테스트
▪ 테스트 관리 문서
- 테스트 계획서: 범위, 일정, 자원 등 정의
- 테스트 케이스: 입력, 예상 출력, 조건 등 포함
- 테스트 스크립트: 절차화된 실행 내용
- 실행 보고서: 실제 vs. 예상 결과 비교
- 요약 보고서: 오류 및 통계 요약
- 요구사항 추적 매트릭스: 테스트와 요구사항 연결
테스트 자동화 및 도구
▪ 단위 테스트 도구
- JUnit, NUnit, csUnit, MSTest, CppUnit 등
- Selenium: 웹 테스트
- HttpUnit: HTTP 기반 테스트
▪ 통합 테스트 및 분석 도구
- Hudson, CruiseControl, AnthillPro
- ChangeMiner: 함수 의존성 분석
- 제니퍼: 모니터링
- UML 역공학 도구 등
▪ 품질관리 도구
- Glean: 품질 관리 전반
- Cobertura: 커버리지 측정
- Checkstyle/PMD: 코드 스타일, 복붙 오류 확인
- JavaNCSS: 코드 복잡도 측정
- JDepend: Java 패키지 설계 검토
'학교 CS > 소프트웨어공학 (3-1학기)' 카테고리의 다른 글
CH 12. 소프트웨어 관리, 종강~ (0) | 2025.06.17 |
---|---|
CH 11 소프트웨어 테스팅 (2) (2) | 2025.06.17 |
CH 9 소프트웨어 구조 설계 (2) | 2025.06.17 |
CH 8 소프트웨어 요구사항 분석 (2) (1) | 2025.06.15 |
CH 7 소프트웨어 요구사항 분석 (1) (5) | 2025.06.15 |