소프트웨어 테스팅이란?
소프트웨어가 요구사항에 맞게 작동하는지를 확인하며 소프트웨어 품질에 대한 다양한 지표를 제공하는 활동이다.
수동이나 자동으로 시스템을 시험 작동시키고 평가하는 작업으로 소프트웨어가 명시된 요구를 잘 만족하는지, 즉 예상한 결과와 실제 결과와의 차이를 식별하기 위하여 수동 또는 자동으로 검사하고 평가하는 일련의 과정
--- IEEE Standard Glossary ---
소프트웨어 품질 특성 (ISO/IEC 9126 -> 25010)
- 기능성 (Functionality)
- 적합성(Suitability), 정확성(Accuracy), 상호운용성(Interoperability), 보안성(Security), 기능 준수성(Functionality Compliance)
- 신뢰성 (Reliability)
- 성숙(Maturity), 결함 허용성(Fault Tolerance), 복구성(Recoverability), 신뢰 준수성(Reliability Compliance)
- 사용성 (Usability)
- 이해성(Understandability), 학습성(Learnability), 운용성(Operability), 호감성(Attractiveness), 사용 준수성(Usability Compliance)
- 효율성 (Efficiency)
- 시간 반응성(Time Behavior), 자원 효율성(Resource Efficiency Utilization), 효율 준수성(Efficiency Compliance)
- 유지보수성 (Maintainability)
- 분석성(Analysability), 변경성(Changeability), 안전성(Stability), 시험성(Testability), 유지보수 준수성(Maintainability Compliance)
- 이식성 (Portability)
- 적응성(Adaptability), 설치성(Installability), 상호공존성(Co-Existence), 대체성(Replaceability), 이식 준수성(Portability Compliance)
소프트웨어 개발 프로세스 (또는 생명주기) : V-모델
- TBD
소프트웨어 테스팅의 일반적인 절차 (프로세스)
- 요구사항 분석
- 테스트 계획 수립
- 테스트 케이스 작성
- 테스트 수행
- 결과 보고
테스트 목적에 따른 테스트의 종류
- 기능 테스트 (Functional Test)
- 비기능 테스트 (Non-Functional Test)
- 구조 기반 테스트 (Structure-based Test)
- 애드혹 테스트 (Ad-Hoc Test)
- 확인 테스트 (Confirmation Test)
- 회귀 테스트 (Regression Test)
코드 내부를 확인하는지에 따른 테스트의 종류
- 블랙박스 테스트
- 화이트박스 테스트
- 그레이박스 테스트
코드 실행 여부에 따른 테스트의 종류
- 정적 테스트
- 워크스루, 인스펙션, 코드리뷰, 동료검토
- 정적 분석
- 동적 테스트
테스트 단계에 따른 테스트의 종류
- 단위/모듈 테스트 (Unit/Module Test)
- 코드리뷰 또는 정적분석 (코딩 규칙 준수, 코드 커버리지) 등
- 통합 테스트 (Integration Test)
- 통합 방법 : 일괄 통합 (Big Bang Integration) 또는 점진적 통합 (Incremental Integration) 등
- 시스템 테스트 (System Test)
- 비기능 테스트로 확인하는 항목으로 신뢰성(안정성), 사용성, 호환성, 성능, 보안, 장애 등이 있다.
- 인수 테스트 (Acceptance Test)
- 시나리오 테스트로 유스 케이스 또는 상태 전이도 기법을 활용해 테스트 케이스를 작성하여 진행하는 테스트가 적용될 수 있다.
테스트 케이스 설계 기법
- 명세 기반 (Specification-based)
- 동등 분할 (Equivalence Partitioning)
- 경계값 분석 (Boundary Value Analysis)
- 상태 전이도 (State Transition Diagram)
- 결정 테이블 (Decision Table)
- 유스 케이스 (Use Case)
- 조합 (Pairwise)
- 구조 기반 (Structure-based) : 정적 테스트와 동적 테스트로 나뉘며 주로 설계 및 코딩, 단위 테스트 단계에서 진행
- 워크스루 (Walk Through)
- 코드 인스펙션 (Code Inspection)
- 복잡도 (Complexity)
- 커버리지 (Coverage)
- 경험 기반 (Experience-based)
- 탐색적(탐험적) 테스트
- 체크리스트 기반 테스트
- 에러 추정
- 리스크 기반 (Risk-based) : 사용빈도 * 결함가능성 * 손실(시간 & 비용)
- 블라인드
Verification vs. Validation
- Verification (검증) : 소프트웨어가 요구사항 명세서 대로 개발되었는지를 확인
- Validation (확인) : 소프트웨어가 고객이 원하거나 기대하는 대로 개발되었는지를 확인
테스팅의 7가지 원리
ISTQB CTFL Syllabus1에 기술되어 있는 내용
- 테스팅은 결함이 존재함을 밝히는 활동이지 결함이 없음을 밝히는 활동이 아니다.
- 완벽한 테스팅은 불가능하다.
- 조기 테스팅으로 시간과 비용을 절약할 수 있다.
- 결함은 집중된다.
- 살충제 패러독스에 유의하라.
- 테스팅은 정황에 의존적이다.
- 오류 부재는 궤변이다.
테스트 전략 및 계획
테스트 전략은 테스트를 성공적으로 진행, 완수하기 위한 방법과 방식, 기준을 정하는 것으로 5가지 소프트웨어 테스팅 절차 중 첫번째 단계인 요구사항 분석이 완료된 후에 진행하는 것이 적절하다. 테스트 전략을 수립한 이후 테스트 계획을 세우게 되는데, 수립한 전략은 테스트 계획에 반영된다.
테스트 전략을 통해 테스트 커버리지는 어느 정도 확보되고, 보장할 수 있는 품질의 범위는 무엇인지 명확히 제시할 수 있어야 한다.
테스트 전략 수립 절차의 예는 아래와 같다.
- 테스트 요구사항 분석
- 위험성 평가 (영향도 및 발생가능성)
- 테스트 목표 설정
- 테스트 유형 및 방법, 기법 선택
- 테스트 인력 및 필요 역량 설정
- 테스트 환경 및 툴 선정
- 테스트 시작 및 완료 조건 설정
- 이슈사항 및 대응방안 수립
테스트 전략을 수립할 때 고려해야 하는 사항의 예는 다음과 같다.
- 어떤 테스트 기법을 사용해야 하는가?
- 얼마나 많은 시간 동안 테스트를 진행해야 하는가?
- 활용 가능한 자원은 얼마나 되는가?
- 프로젝트의 위험요소나 중요도는 어느 정도인가?
- 자동화 테스트가 필요한가?
- 어떤 툴을 사용해야 하는가?
- 아웃소싱이 필요하며, 어떤 업체가 요구되는가?
테스트 사이클의 예
- Pre Test (Smoke Test)
- 메인 테스트
- 애드혹 테스트
- 확인 테스트 -> 2)
- 회귀 테스트 -> 2)
역할에 따른 테스터의 구분
소프트웨어 테스터 (Software Tester)
일반적으로 테스트를 수행하고 결함 리포트를 작성하는 업무를 수행한다.
소프트웨어 테스트 엔지니어 (Software Test Engineer)
테스트를 수행하는 업무뿐만 아니라 요구사항을 분석하여 테스트 케이스나 테스트 스위트를 작성하고 테스트 환경을 구축하는 업무를 수행한다.
테스트 리더 (Test Leader)
테스터와 테스트 매니저의 중간 위치에서 테스트 매니저와 함께 테스트 운영 상태를 파악하고 업무 지원 및 백업을 수행한다.
테스트 매니저 (Test Manager)
테스트 계획을 수립하고 테스트 운영 상태를 관리하며, 리스크 및 이슈를 관리하는 업무를 수행한다. 테스트 매니저로서 프로젝트 관리 능력 및 테스트 기술, 커뮤니케이션 능력 또는 테스트 분석가의 역할 등 다양한 기술이 복합적으로 요구된다.
소프트웨어 테스트 관련 자격증
ISTQB CTFL (Certified Tester Foundation Level) 등
CSTS (Certified Software Test Specialist ) 등
참고
ISO/IEC/IEEE 29119-1 : 2013 - 소프트웨어와 시스템 공학 - 소프트웨어 테스팅 - 제1부 : 개념과 정의
'작업중' 카테고리의 다른 글
파이썬 3.12 튜토리얼 요약 (_작업중_) (1) | 2023.12.23 |
---|