소프트웨어의 품질을 보장하기 위해 다양한 방법과 절차를 통해 오류를 발견하고 수정하는 것을 목표
the process of executing program or system with intent of finding errors.
오류를 찾기 위해 프로그램이나 시스템을 실행하는 과정
the process of analyzing a software item to detect the differences between existing and required conditions (that is, bugs) and to evaluate the features of the software item.
소프트웨어 항목을 분석하여 기존 조건과 요구 조건 사이의 차이(즉, 버그)를 감지하고 소프트웨어 항목의 기능을 평가하는 과정
activity in which a system or component is executed under specified conditions, the results are observed and recorded, and an evaluation is made of some aspect of the system or component
시스템 또는 구성 요소를 특정 조건에서 실행하고, 결과를 관찰하고 기록하며, 시스템 또는 구성 요소의 일부 측면을 평가하는 활동


오류 (Error)
결함 (Fault)
장애 (Failure)

Static
소프트웨어 시스템 또는 구성 요소를 실행하지 않고 그 형식, 구조, 내용, 문서를 기반으로 평가하는 과정.
Dynamic
소프트웨어 시스템 또는 구성 요소의 실행 중에 그 동작을 기반으로 평가하는 과정
Dynamic Analysis: process of evaluating a system or component based on its behavior during execution
시스템이 실행되는 동안 동작을 모니터링하고 평가하는 활동
-- Call graph, Resource usage, Memory leak, performance tuning
Dynamic Testing : testing that requires the execution of the test item
테스트 항목의 실행을 필요로 하는 테스트로, 시스템이 예상대로 동작하는지 확인하기 위해 실제로 소프트웨어를 실행
동적 분석은 주로 성능 최적화와 리소스 사용량 분석에 중점을 두는 반면, 동적 테스트는 소프트웨어의 기능적 및 비기능적 요구사항을 검증하고 결함을 발견하는 데 중점을 둡니다.
완전한 테스팅은 불가능하다
모든 입력 조합과 실행 경로를 테스트하려면 무한히 많은 시간이 필요할 수 있습니다. 소프트웨어의 복잡성으로 인해 모든 가능한 시나리오를 테스트하는 것은 현실적으로 불가능합니다.
Bug가 존재함을 확인할 수는 있으나, Bug가 존재하지 않음을 확인할 수는 없다.
결함 집중 현상 (Defect Clustering)

모듈 A에서 더 많은 결함이 발견되었다면, 이는 결함 클러스터링 현상에 따라 모듈 A에 더 많은 결함이 숨어 있을 가능성이 높다는 것을 의미합니다. 따라서 모듈 B에 비해 모듈 A가 더 많은 결함을 포함할 가능성이 큽니다.
동일한 테스트 케이스를 반복해서 사용하면 더 이상 새로운 버그를 찾지 못하게 됩니다. 소프트웨어에 대한 새로운 결함을 발견하려면 테스트 케이스를 주기적으로 업데이트하고 다양화해야 합니다.
소프트웨어 개발 초기 단계부터 테스트를 시작하는 것이 중요합니다. 초기 단계에서 결함을 발견하고 수정하면 비용과 시간을 절약할 수 있습니다.
결함이 없다는 것이 소프트웨어가 사용자의 요구사항을 충족하는지를 의미하지는 않습니다. 소프트웨어가 정확히 요구사항을 반영하고 있는지 확인하는 것이 중요합니다.
품질의 정의
테스트는 상황에 따라 다르다
Test Level
테스트 레벨은 테스트가 수행되는 범위와 관련이 있습니다
• Unit testing, integration testing, system testing, acceptance testing
Test Type
테스트 타입은 테스트가 수행하는 목표나 방법에 따라 분류됩니다.
• Performance testing, security testing, usability testing etc.
Test design approach
테스트 케이스를 작성하거나 테스트를 계획하는 방법에 대한 구분입니다.
• black box testing vs. white box testing
• Experience-based testing
Others
• Risk-based testing
• Scripted testing vs. exploratory testing

• Unit Testing
• Integration Testing
• System Testing
• Acceptance Testing
• Maintenance Testing
가장 작고 독립적으로 테스트할 수 있는 단위인 함수, 클래스 또는 개별 컴포넌트를 테스트하는 과정
• (1) testing of individual routines and modules by the developer or an independent tester (ISO/IEC/IEEE 24765)
개발자나 독립된 테스터에 의해 수행되는 개별 루틴 및 모듈의 테스트를 의미
• (2) test of individual programs or modules in order to ensure that there are no analysis or programming errors (ISO/IEC 2382)
개별 프로그램이나 모듈을 테스트하여 분석이나 프로그래밍 오류가 없는지 확인하는 과정
• Unit : 소프트웨어의 가장 작은 독립적으로 테스트 가능한 단위(function, class) 또는 개별 컴포넌트
• 소프트웨어의 각 단위(component, module, function, class)가 개별적으로 테스트 됨
• 테스트 수행을 위해서는 주로 stub, driver가 필요함
• 주로 개발 당사자에 의해 수행됨
• 발견된 결함이 공식적으로 관리되지 않는 경우가 많음
• 각 단위에 대한 정의와 테스트 방법, 관리 수준은
아키텍쳐 설계 단계에서 계획 수립함
testing in which software components, hardware components, or both are combined and tested to evaluate the interaction among them
여러 개별 소프트웨어 구성 요소나 하드웨어 구성 요소를 결합하여 상호 작용을 평가하는 테스트 과정
Big Bang : 테스트된 각 Unit을 한꺼번에 통합하고 테스트 수행
Top-down or Bottom-up : 위 또는 아래에서부터 통합을 진행함.
Stub(Top-down) 및 Driver (Bottom-up) 활용
상위 모듈을 테스트할 때, 하위 모듈을 대체하는 스텁(Stub)을 사용
하위 모듈을 테스트할 때, 상위 모듈을 대체하는 드라이버(Driver)를 사용
Bug Isolation이 용이함. But, critical한 이슈가 top이나 bottom에 있다면?
Sandwich : Top-down과 bottom-up testing의 조합
Backbone : 중요 모듈부터 시작, backbone을 구성하고 리스크 순으로 통합을 하며 테스트
testing conducted on a complete, integrated system to evaluate the system's
compliance with its specified requirements
완전히 통합된 시스템을 평가하여 지정된 요구 사항을 충족시키는지 확인하는 과정
(1) testing conducted to determine whether a system satisfies its acceptance criteria and to enable the customer to determine whether to accept the system (ISO/IEC/IEEE 24765:2017)
시스템이 수용 기준을 충족하는지를 평가하고, 고객이 시스템을 수용할 수 있도록 하는 테스트 과정
(2) formal testing conducted to enable a user, customer, or other authorized entity to determine whether to accept a system or component (IEEE 1012-2017)
시스템이 사용자 요구 사항을 충족하며, 실제 운영 환경 또는 그와 유사한 환경에서 예상대로 작동하는지를 확인
시스템이 이미 출시된 후에 발생하는 변경 사항에 대응하여 시스템의 정상적인 작동을 보장하기 위해 수행되는 테스팅

• Specification-based testing (Black-box testing)
• Structure-based testing (White-box testing)
• Experience-based testing


Error Guessing
• Test Analyst uses his/her experience to guess the problematic areas of the application
테스트 분석가가 자신의 경험과 직관을 활용하여 응용 프로그램의 문제가 발생할 가능성이 높은 영역을 예측
Exploratory testing
• the tester simultaneously learning about the test object and its defects, planning the testing work to be done, designing and executing the tests, and reporting the results.
소프트웨어를 동시에 학습하고, 테스트 계획을 수립하며, 테스트를 설계하고 실행하며, 결과를 보고하는 방식의 테스트 접근법
Checklist-based testing
• Test Analyst uses a high-level, generalized list of items to be noted, checked, or remembered. E.g., user interface standard checklist
테스트 분석가가 사전에 작성된 체크리스트를 사용하여 중요한 사항이나 검토해야 할 항목을 체크하는 방법
Defect-Based Test Techniques
테스트 분석가가 이미 알려진 결함이나 문제점을 중심으로 테스트 케이스를 설계하고 수행하는 방법을 의미

Scripted Testing : 스크립트 테스팅은 사전에 정의된 테스트 케이스에 기반한 체계적인 테스트를 제공
Exploratory Testing: 스크립트 테스팅은 사전에 정의된 테스트 케이스에 기반한 체계적인 테스트를 제공
• Risk Assessment
• Test planning
• Test monitoring and control
• Test analysis
• Test design
• Test implementation
• Test execution
• Test completion