📌소프트웨어 개발(Test) 정리
1️⃣ 소프트웨어 테스트 개요
✅ 소프트웨어 테스트란?
- 개발된 프로그램이 기능을 정상적으로 수행하는지 검증하는 과정
- 오류를 찾고, 품질을 보장하기 위한 필수 과정
✅ 테스트의 목적
✔ 결함(버그) 발견
✔ 소프트웨어 품질 보장
✔ 요구사항 충족 여부 확인
✔ 성능 및 안정성 검증
✅ 테스트 원칙 (시험 단골 문제!)
원칙 | 설명 |
---|---|
결함 발견이 목적 | 테스트는 오류를 찾기 위한 과정 |
완벽한 테스트는 불가능 | 모든 경우를 테스트할 수 없음 |
초기 테스트 필요 | 개발 초기에 테스트할수록 비용 절감 |
결함 집중 | 대부분의 결함은 소수의 모듈에서 발견됨 (80/20 법칙) |
살충제 패러독스 | 동일한 테스트를 반복하면 새로운 결함 발견 어려움 |
테스트는 정황 의존적 | 소프트웨어의 특성과 환경에 따라 테스트 방식이 다름 |
2️⃣ 테스트 레벨(단계별 테스트)
✅ 암기법: 단통시인 → 단위 테스트 → 통합 테스트 → 시스템 테스트 → 인수 테스트
테스트 레벨 | 설명 |
---|---|
단위 테스트 (Unit Test) | - 모듈, 함수, 클래스 단위의 개별 기능 검증- 개발자가 직접 수행 |
통합 테스트 (Integration Test) | - 단위 테스트가 끝난 후, 모듈 간 연결 테스트- 하향식, 상향식, 빅뱅 방식 사용 |
시스템 테스트 (System Test) | - 전체 소프트웨어가 시스템 환경에서 정상 동작하는지 테스트- 성능, 보안, 오류 검증 |
인수 테스트 (Acceptance Test) | - 사용자가 직접 테스트하여 요구사항 충족 여부 확인- 알파 테스트, 베타 테스트 포함 |
3️⃣ 테스트 종류
✅ 기능 테스트 vs 비기능 테스트
구분 | 설명 |
---|---|
기능 테스트 | 소프트웨어가 요구된 기능을 수행하는지 확인 (예: 로그인, 결제) |
비기능 테스트 | 성능, 보안, 사용성 등 기능 외적인 요소 검증 |
✅ 주요 테스트 유형
테스트 유형 | 설명 |
---|---|
화이트박스 테스트 | 내부 코드 구조를 분석하여 테스트 |
블랙박스 테스트 | 내부 구조를 모르고 입력-출력만 검증 |
회귀 테스트 | 기존 기능이 신규 코드 변경 후에도 정상 동작하는지 검증 |
부하 테스트 | 일정 수준 이상의 트래픽에서 정상 작동하는지 확인 |
스트레스 테스트 | 한계를 초과하는 조건에서 시스템 안정성 테스트 |
유효성 테스트 | 프로그램이 요구사항을 충족하는지 검증 |
보안 테스트 | 해킹, 취약점 점검 등 보안 취약성 테스트 |
4️⃣ 테스트 오라클 (Test Oracle)
✅ 오라클이란?
- 테스트 수행 후 예상 결과와 실제 결과를 비교하는 기준
✅ 테스트 오라클 4가지 유형 (참샘휴일)
오라클 종류 | 설명 |
---|---|
참 오라클 (Complete Oracle) | 모든 입력 값에 대해 정확한 예상 결과 제공 |
샘플링 오라클 (Sampling Oracle) | 일부 입력 값에 대해서만 예상 결과 제공 |
휴리스틱 오라클 (Heuristic Oracle) | 예상 결과를 제공하지만, 일부 오류가 있을 수 있음 |
일관성 검사 오라클 (Consistency Checking Oracle) | 실행 전후 상태가 변하지 않음을 확인 |
5️⃣ 테스트 자동화 도구
✅ 테스트 자동화란?
- 반복적인 테스트를 자동으로 수행하는 도구 활용
✅ 주요 테스트 도구
테스트 도구 | 설명 |
---|---|
xUnit | Java, C++, .NET 등 다양한 언어 지원하는 단위 테스트 도구 |
STAF | 서비스 호출, 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 자동화 프레임워크 |
Fitness | 웹 기반 테스트 프레임워크, 테스트 문서화 가능 |
NTAF | 노키아에서 개발한 모바일 애플리케이션 테스트 자동화 도구 |
Selenium | 웹 UI 자동화 테스트 도구 (크로스 브라우징 지원) |
Watir | Ruby 기반 웹 애플리케이션 테스트 도구 |
6️⃣ 결함 관리 (버그 추적)
✅ 결함 추적 과정 (암기: 발등 분확 조할)
단계 | 설명 |
---|---|
발견 (Detection) | 테스트 중 결함 발견 |
등록 (Logging) | 결함을 기록하고 보고서 작성 |
분류 (Classification) | 심각도 및 우선순위 지정 |
확인 (Confirmation) | 개발자가 결함을 확인 |
조치 (Action) | 결함 수정 및 재테스트 |
해결 (Closure) | 결함 해결 후 최종 확인 |
✅ 결함 우선순위 (Priority) & 심각도 (Severity)
항목 | 설명 |
---|---|
우선순위(Priority) | 얼마나 빨리 수정해야 하는지 (긴급, 보통, 낮음) |
심각도(Severity) | 소프트웨어에 미치는 영향 (치명적, 주요, 경미) |
7️⃣ 애플리케이션 테스트 기본 원리
테스트란 기본적으로 결함이 존재함을 밝히는 것 (무결함을 증명할 수는 없음)
→ 완벽한 테스트는 근원적으로 불가능 (무한 경로, 무한 입력 불가)
- 결함 집중 : 파레토 법칙 - 20% 모듈에서 전체 결함 80% 발생
- 살충제 패러독스 : 동일한 테스트 케이스에 의한 반복 테스트는 새로운 버그 발견 X
- 오류-부재의 궤변 : 결함이 없다 해도 요구사항 미충족 시 품질 저하
- Brooks의 법칙 : 지연되는 프로젝트에 인력 추가 투입 시 더 지연
- Boehm의 법칙 : 소프트웨어 프로젝트 중에 버그를 찾아 수정하는 비용은 시간이 지날수록 높아짐
📌 테스트 드라이버와 테스트 스텁
✅ 상향식 하향식 통합테스트 정리
구분 | 하향식 통합 테스트 (Top-Down) | 상향식 통합 테스트 (Bottom-Up) |
---|---|---|
진행 방향 | 상위 모듈 → 하위 모듈 | 하위 모듈 → 상위 모듈 |
장점 | 핵심 기능을 먼저 테스트 가능 | 개별 모듈을 병렬로 개발·테스트 가능 |
단점 | 하위 모듈이 미완성일 경우 테스트 어려움 | 상위 모듈이 없으면 전체 흐름 검증 어려움 |
필요한 테스트 도구 | 테스트 스텁 (Stub) 필요 | 테스트 드라이버 (Driver) 필요 |
✅ 테스트 드라이버와 테스트 스텁의 차이점 정리
드라이버는 하위 모듈 테스트, 스텁은 상위 모듈 테스트"로 기억하기
구분 | 드라이버(Driver) | 스텁(Stub) |
---|---|---|
개념 | 테스트 대상의 하위 모듈을 호출하는 도구로, 매개변수(Parameter)를 전달하고 테스트 수행 후 결과를 도출함 | 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구. 일부 제한된 조건만 가지고 있음 |
필요 시기 | 상위 모듈이 없고 하위 모듈이 있는 경우, 하위 모듈을 테스트하기 위해 사용 | 상위 모듈이 존재하지만 하위 모듈이 아직 개발되지 않은 경우, 하위 모듈을 대체 |
테스트 방식 | 상향식(Bottom-Up) 테스트 | 하향식(Top-Down) 테스트 |
공통점 | 소프트웨어 개발과 테스트를 병행할 경우 활용됨 | |
차이점 | 하위 모듈이 존재하는데 상위 모듈이 없을 경우 상위 모듈을 대신함 | 하위 모듈이 아직 개발되지 않았을 때 임시로 하위 모듈을 대신 제공 |
개발 완료 후 | 실제 상위 모듈이 개발되면 드라이버는 본래 모듈로 교체됨 | 하위 모듈이 개발되면 스텁은 본래 하위 모듈로 교체됨 |
작성 난이도 | 일반적으로 작성이 어렵고 개발 시간이 많이 소요됨 | 단순한 테스트 코드로 작성하기 쉬움 |
📌 테스트 기법 정리 - 블랙박스 & 화이트박스 테스트
1️⃣ 테스트 기법 개요
✅ 테스트란?
✔ 소프트웨어가 정상적으로 동작하는지 검증하는 과정
✔ 버그를 발견하고 품질을 향상시키는 목적
✅ 테스트 기법의 종류
✔ 블랙박스 테스트(기능 기반 테스트) → 요구사항 및 명세서를 기반으로 테스트
✔ 화이트박스 테스트(구조 기반 테스트) → 내부 코드 및 논리를 기반으로 테스트
2️⃣ 블랙박스 테스트 (Black Box Testing)
✅ 블랙박스 테스트란?
✔ 프로그램 내부 구조를 고려하지 않고 요구사항 명세서를 기준으로 테스트 수행
✔ 입력값과 출력값의 관계를 검증하여 기능을 확인
✅ 블랙박스 테스트의 특징
✔ 소프트웨어의 특징, 요구사항, 설계 명세서에 집중
✔ 내부 동작 원리를 알 필요 없음
✅ 블랙박스 테스트의 주요 유형
테스트 유형 | 설명 |
---|---|
동등 분할 테스트 (Equivalence Partitioning Testing) | 입력값을 그룹(동치 클래스)으로 나누고, 각 그룹에서 대표값을 선정하여 테스트 |
경계값 분석 테스트 (Boundary Value Analysis Testing) | 오류 발생 확률이 높은 경계 값(최대값, 최소값, 중간값)을 테스트 |
원인-효과 그래프 검사 (Cause-Effect Graph Testing) | 입력과 출력의 관계를 분석하여 효율적인 테스트 케이스를 선정 |
비교 검사 (Comparison Testing) | 여러 버전의 소프트웨어를 비교하여 동일한 결과가 나오는지 확인 |
오류 예측 검사 (Error Guessing Testing) | 경험을 기반으로 예상되는 오류를 찾아내는 기법 |
3️⃣ 화이트박스 테스트 (White Box Testing)
✅ 화이트박스 테스트란?
✔ 소프트웨어의 내부 코드 및 구조를 분석하여 논리적인 결함을 찾는 테스트
✔ 소스 코드, 알고리즘, 제어 흐름 등을 검사하여 테스트 수행
✅ 화이트박스 테스트의 특징
✔ 내부 코드 구조를 확인하여 결함 발생 가능성을 예측
✔ 제어 흐름을 따라가며 논리적 결함을 검증
✅ 화이트박스 테스트의 주요 유형
테스트 유형 | 설명 |
---|---|
기본 경로 검사 (Base Path Coverage Testing) | 소프트웨어의 모든 실행 경로를 테스트하는 기법 |
구문(문장) 커버리지 검사 (Statement Coverage Testing) | 프로그램 내 모든 명령문이 최소 1회 이상 실행되었는지 검증 |
결정 커버리지 검사 (Decision Coverage Testing) | 분기문의 참(T)/거짓(F) 결과를 각각 최소 한 번씩 수행 |
조건 커버리지 검사 (Condition Coverage Testing) | 개별 조건의 참/거짓이 최소 한 번 실행되도록 검증 |
조건-결정 커버리지 검사 (Condition/Decision Coverage Testing) | 조건뿐만 아니라 분기 결정까지 모두 수행 |
데이터 흐름 검사 (Data Flow Testing) | 프로그램 내에서 변수의 정의와 사용을 검증 |
루프 검사 (Loop Testing) | 반복문(Loop)의 동작을 집중적으로 테스트 |
4️⃣ 블랙박스 vs 화이트박스 테스트 비교
비교 항목 | 블랙박스 테스트 | 화이트박스 테스트 |
---|---|---|
기반 요소 | 기능 및 요구사항 | 소스 코드 및 내부 구조 |
테스트 수행자 | QA 엔지니어, 테스터 | 개발자 |
테스트 대상 | 입력값과 출력값 | 내부 코드 및 논리 흐름 |
주요 기법 | 동등 분할, 경계값 분석, 원인-효과 그래프 | 제어 흐름 분석, 구문 및 결정 커버리지 |
테스트 목적 | 기능이 정상적으로 동작하는지 확인 | 코드의 논리적 오류 탐색 |
적용 범위 | 사용자 요구사항 기반 | 내부 로직 검증 |
'자격증 > 정보처리기사' 카테고리의 다른 글
[정보처리기사] 화면설계 (0) | 2025.03.07 |
---|---|
[정보처리기사] 디자인 패턴 (Design Patterns) (0) | 2025.02.27 |
[정보처리기사] 소프트웨어 개발 생명 주기 관련 개념 (SCRUM,XP,CASE) (1) | 2025.02.25 |
[정보처리기사] 럼바우 분석 방법론 정리 (0) | 2025.02.24 |