소프트웨어 테스팅의 기본 원칙 - 검증과 확인, 테스팅 원리, 테스팅 용이성

CODEDRAGON Development/Software Engineering

반응형

 

 

소프트웨어 테스팅의 기본 원칙

·       검증과 확인

·       테스팅 원리

·       테스팅 용이성

 

 

 

검증과 확인

·       소프트웨어 테스팅은 흔히 검증(Verification)과 확인(Validation)이라고 하는 광범위한 주제의 한 요소입니다.

·       검증(Verification)은 소프트웨어가 특정 기능을 올바르게 구현하였는지를 보장하는 일련의 작업을 의미합니다.

·       확인(Validation)은 개발된 소프트웨어가 고객의 요구사항에 맞는지를 보장하는 또 다른 일련의 작업을 의미합니다.

·       검증과 확인은 다양한 SQA(Software Quality Assurance, 소프트웨어 품질보증) 활동을 포함합니다.

·       기술적 검토, 품질과 형상 감사, 성능 모니터링, 시뮬레이션, 타당성 조사, 문서 검토, 데이터베이스 검토, 알고리즘 분석, 개발 테스팅, 사용성 테스팅, 적격성 테스팅, 인수 테스팅, 그리고 설치 테스팅 등 테스팅이 V&V에서 매우 중요한 역할을 하고 있지만, 다양한 다른 활동들 역시 필요합니다.

 

 

테스팅 원리

원리

설명

테스팅은 결함이 존재함을 밝히는 활동입니다.

결함이 없다는 것은 증명할 수 없습니다.

완벽한 테스팅은 불가능합니다.

리스크 분석과 결정된 우선순위에 테스팅을 집중해야 합니다.

테스팅은 개발 초기에 시작합니다.

개발 시작과 동시에 테스트를 계획, 전략적으로 접근해야 합니다.

결함 집중(Defect Clustering)

적은 수의 모듈에서 대다수의 결함이 발견됩니다.

살충제 패러독스(Pesticide Paradox)

동일한 테스트를 반복적으로 수행하면 버그를 찾기 힘듭니다.

테스팅은 정황(Context)에 의존적입니다.

효율적, 효과적 테스트 팀 조직과 독립적 테스트 환경이 필요합니다.

오류-부재의 궤변(Absence of Errors Fallacy)

사용자 요구사항에 맞지 않는다면 결함을 찾고 수정하는 것은 무의미합니다. , 결함을 모두 발견했다고 해도 품질이 높다고 할 수 없습니다.

 

 

 

테스팅 용이성

테스팅의 목표는 오류를 발견하는 것이며, 훌륭한 테스트는 오류를 발견할 확률이 높은 것입니다. 따라서 개발자는 "테스트 용이성"을 염두에 두고 컴퓨터 기반 시스템이나 제품을 설계하고 개발하여야 합니다. 동시에 테스트 자체도 최소한의 노력으로 최대의 오류를 찾는 목표를 달성하는 일련의 특성을 보여야 합니다.

 

테스트 가능한 소프트웨어의 특징은 다음과 같습니다.

특징

설명

운용성(Operability)

시스템이 품질을 염두에 두고 설계되고 구현된다면, 상대적으로 버그가 적어 테스트 실행은 방해받지 않으며, 따라서 테스트는 계속해서 진행될 수 있습니다.

관찰가능성(Observability)

테스팅의 일부분으로 제공된 입력은 뚜렷하게 구별되는 출력을 생산합니다. 시스템상태와 변수들은 실행 중에 보거나 질의할 수 있습니다. 부정확한 출력은 쉽게 알 수 있습니다. 내부 오류는 자동으로 발견되고 보고됩니다. 소스 코드는 접근 가능합니다.

제어가능성(Controlability)

모든 가능한 출력은 입력의 조합에 따라 만들어질 수 있고, 입출력 형식은 일관적이고 잘 구성되어 있습니다. 모든 코드는 입력의 조합에 따라 실행 가능합니다. 소프트웨어와 하드웨어의 상태 및 변수는 테스트 공학자에 의해 직접 제어될 수 있습니다. 테스트는 쉽게 명세화되고 자동화되며 재생산이 가능해집니다.

분해가능성(Decomposability)

소프트웨어 시스템은 독립적으로 테스트 가능한 독립된 모듈로 구성되어 있습니다.

단순성(Simplicity)

프로그램은 기능성 단순성, 구조적 단순성, 코드 단순성을 보여야 합니다.

 

기능적 단순성

(Functional Simplicity)

요구사항을 만족시키기 위한 특성들의 집합을 최소한으로 합니다.

구조적 단순성

(Structural Simplicity)

결함이 전파되지 않도록 아키텍처를 모듈화합니다.

코드 단순성

(Code Simplicity)

코딩표준이 채택되어 조사와 유지보수를 쉽게 할 수 있습니다.

 

안정성(Stability)

소프트웨어에 대한 변경은 자주 일어나지 않으며, 변경이 일어나더라도 관리가 잘 되어서 기존의 테스트를 무효로 만들지 않습니다. 소프트웨어는 장애로부터 쉽게 복구됩니다.

이해가능성(Understandability)

내부, 외부 및 공유 컴포넌트들의 구조적 설계와 의존 관계가 잘 파악되어 있습니다.

기술적 문서는 계속 접근 가능하고, 잘 구성되어 있으며, 상세하고 정확합니다. 설계에 대한 변경은 테스터에게 알려집니다.

 

반응형