Today I Learned/정보처리기사

애플리케이션 테스트

Malachai Lee 2022. 4. 16. 17:16

애플리케이션 테스트는 애플리케이션에 잠재되어있는 결함을 찾아내는 일련의 행의 또는 절차이다.

애플리케이션 테스트에선 개발된 소프트웨어가 고객의 요구사항을 만족시키는지 확인하고, 소프트웨어가 기능을 정확히 수행하는지 검증한다.


 

애플리케이션 테스트의 기본은 다음과 같이 정리할 수 있다.

 

테스팅은 결함이 존재함을 밝히는 것이다. 결함을 줄일 순 있지만, 결함이 없다고는 증명할 수 없다.

 

완벽한 테스팅은 불가능하다. 무한경로, 무한 입력값으로 인한 어려움이 존재한다.

 

개발 초기에 테스팅을 시작한다. 테스팅 기간 단축, 재작업 감소로 개발기간 단축 및 결함을 예방한다.

 

결함 집중의 법칙(파레토 법칙)을 유념한다. 20%의 모듈에서 80%의 결함이 발견된다.

 

살충제 패러독스를 유념한다. 동일한 테스트케이스에 의한 반복적인 테스트는 새로운 버그를 찾지 못한다.

 

테스팅은 정황에 의존적이다. 소프트웨어의 성격에 맞게 테스트를 실시해야한다.

 

오류, 부재의 궤변을 유념한다. 요구사항을 충족시켜주지 못한다면, 결함이 없다고 해도 품질이 좋다고 볼 순 없다.

 

 

테스트 산출물로는 테스트 계획서, 테스트 케이스, 테스트 시나리오, 테스트 결과서 등이 있다.

 

 


테스트는 매우 광범위한 개념을 가지고 있으며, 그에 따라 매우 다양한 방법으로 분류된다.

 


프로그램 실행 여부에 따른 분류

정적 테스트 - 프로그램을 실행하지 않고 명세서나 소스코드를 대상으로 분석하는 테스트이다.

 

동적 테스트 - 프로그램을 실행하여 오류를 찾는 테스트이다.

 


테스트의 기반에 따른 분류

명세 기반 테스트 - 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트이다. 동등분할, 경계값 분석(블랙박스 테스트) 등이 포함된다.

 

구조 기반 테스트 - 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인하는 테스트이다. 구문기반, 결정기반, 조건기반(화이트박스 테스트) 등이 포함된다.

 

경험 기반 테스트 - 테스터의 경험을 기반으로 수행하는 테스트이다. 에러 추정, 테크 리스트, 탐색적 테스팅 등이 포함된다.


관점과 시각에 따른 분류

검증(Verification) 테스트

개발자의 시각에서 제품의 생산과정을 테스트한다. 단위 테스트, 통합 테스트, 시스템 테스트 등이 포함된다.


단위 테스트(Unit Test)

코딩 직후 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트 하는 기법이다.

사용자의 요구사항을 기반으로 한 기능성 테스트를 최우선으로 수행한다.

단위 테스트로는 주로 구조 기반 테스트를 수행한다.


통합 테스트(Integration Test)

단위테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미한다.

모듈 간 또는 통합된 컴포넌트 간의 상호작용 오류를 검사한다.

빅뱅 테스트, 상향식 테스트(cluster, driver), 하향식 테스트(stub)가 포함된다.

 

빅뱅 테스트

시스템을 구성하는 모듈을 따로 구현하고 전체시스템을 묶어 테스트하는 기법이다. 쇼규모 프로그램이나 프로그램의 일부를 대상으로 수행하는 간단하고 효과적인 기법이다.

 

상향식 테스트

시스템을 구성하는 모듈의 계층 구조에서 맨 하위의 모듈부터 시작하여 점차 상의 모듈 방향으로 통합하는 기법이다.

상향식 기법은 최하위 모듈들을 개별적으로 병행하여 테스트할 수 있기 때문에, 하위에 있는 모듈들을 충분히 테스트할 수 있다. 정밀한 계산이나 데이터 처리가 요구되는 시스템 같은 경우에 사용하면 좋다.

구현되지 않은 상위 개별 모듈들은 Driver모듈(하위 모듈을 순서에 맞게 호출하고, 호출할 때 필요한 매개 변수를 제공하며, 반환 값을 전달하는 모듈)로 대체하여 테스트를 진행한다.

 

하향식 테스트

시스템을 구성하는 모듈의 계층 구조에서 맨 상위의 모듈부터 시작하여 점차 하위 모듈 방향으로 통합하는 기법이다.

하향식 기법은 각 기능을 구현하는 하위 모듈에 끼칠 수 있는 전체적인 구조결함을 찾기 쉽다.

구현되지 않은 하위 개별 모듈들은 Stub모듈(모든 기능 대신 테스트하고자 하는 일부 기능에 집중해 임의로 구현한 모듈)로 대체하여 테스트를 진행한다.

 

샌드위치 테스트

하위수준에서는 상향식 통합, 상위수준에서는 하향식 통합을 사용해 최적의 테스트를 지원하는 기법이다. 하위 프로젝트가 있는 대규모 프로젝트에 사용하는 방식이다.

병렬 테스트가 가능하고 시간 절약이 가능하지만, Stub과 Driver의 필요성이 매우 높으며 비용이 많이 들어간다.


시스템 테스트(System Test)

개발된 소프트웨어가 컴퓨터 시스템에서 완벽하게 수행되는가를 점검하는 테스트이다.

실제 사용환경과 유사하게 만든 테스트 환경에서 수행하여야 한다.

주로 사용자의 입장에서 검증하는 블랙박스 테스트로 수행된다.


확인(Validation) 테스트

사용자의 시각에서 생산된 제품의 결과를 테스트한다. 인수테스트(알파, 베타 테스트) 등이 포함된다.

 

인수 테스트(Acceptance Test)

개발된 소프트웨어가 사용자의 요구사항을 충족하는지에 중점을 주는 테스트이다.

통재된 환경에서 사용자가 개발자와 함께 확인하면서 행하는 알파 테스트, 통제되지 않은 환경에서 여러명의 사용자가 행하는 베타 테스트로 구분된다.

 


목적에 따른 분류

회복(Recovery) 테스트 - 시스템에 여러가지 결함을 주어 실패하도록 한 후, 올바르게 복구되는지를 확인하는 테스트이다.

 

보안(Secutrity) 테스트 - 시스템 보호도구가 불법적인 침입으로부터 시스템을 보호할 수 있는지를 확인하는 테스트이다.

 

강도(Stress) 테스트 - 과부하 시에도 소프트웨어가 정상적으로 실행되는지 확인하는 테스트이다.

 

성능(Performance) 테스트 - 실시간 성능이나 전체적인 효율성을 진단하는 테스트이다.

 

구조(Structure) 테스트 - 소프트웨어 내부의 논리적인 경로, 소스코드의 복잡도 등을 평가하는 테스트이다.

 

회귀(Regression) 테스트 - 소프트웨어의 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트이다.

 

병행(Parallel) 테스트 - 변경된 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트이다.


커버리지의 분류

구문 커버리지 - 프로그램 내 모든 문장을 적어도 한번 이상 실행하는것을 기준으로 수행하는 테스트 커버리지

 

결정 커버리지 - 결정조건 내 전체 조건식이 최소한 참/거짓 한번의 값을 가지도록 측정하는 테스트 커버리지

 

조건 커버리지 - 전체 조건식 결과와 관계없이 각 개별 조건식이 참/거짓을 모두 한번씩 갖도록 개별 조건식을 조합하는 테스트 커버리지

 

조건/결정 커버리지 - 전체 조건식이 참/거짓을 한번씩 가지면서, 개별 조건식이 참/거짓을 모두 한번씩 갖도록 조합하는 테스트 커버리지

 

변경/조건 커버리지 - 각 개별 조건식이 다른 개별 조건식의 영향을 받지 않고, 전체 조건식의 결과에 독립적으로 영향을 주도록 함으로써 조건/결정 커버리지를 향상시킨 테스트 커버리지

 

다중 조건 커버리지 - 결정 조건 내 모든 조건식의 모든 가능한 조합을 100% 보장하는 테스트 커버리지


모듈 내 작동의 식별에 따른 분류

화이트박스 테스트

모듈 안의 내용(작동)을 직접 볼 수 있는 테스트이다.

선택, 반복 등의 부분들을 수행함으로써 논리적 경로를 점검하고, 내부의 논리적인 모든 경로에 대해 테스트 케이스를 설계하여 소스코드의 모든 문장을 적어도 한번 이상 수행함으로써 진행한다.

개발자가 소프트웨어 또는 컴포넌트의 로직에 대한 테스트를 수행하기 위해 설계단계에서 요구된 사항을 확인하는 개발자 관점의 단위테스팅 기법이다.

 

화이트박스 테스트의 종류엔 기초경로검사, 제어구조검사가 있다.

 

기초경로검사(Base Path Testing)

대표적인 화이트박스 테스트 기법으로, 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법이다. 테스트 측정결과는 실행 경로의 기초를 정의하는 지점으로 사용된다.

 

제어구조검사(Control Structure Testing)

프로그램 내 구현되어있는 다양한 조건적 구조에 대해 커버리지 범위를 증가시킬 수 있게 해주는 테스트 기법이다. 조건검사, 루프검사, 데이터 흐름 검사가 포함된다.

조건검사 - 논리적 조건을 테스트한다.

루프검사 - 반복구조에 맞취 테스트 한다.

데이터 흐름 검사 - 프로그램에서 변수의 정의와 사용 위치에 초점을 맞춰 테스트한다.


블랙박스 테스트

모듈 안에서 어떤 일(작동)이 일어나는지 알 수 없다.

소프트웨어가 수행할 특정 기능을 알기 위해 각 기능이 완전히 작동되는것을 입증하는 테스트로, 개발자 입장이 아닌 사용자 입장에서 소프트웨어에 대한 요구사항과 결과물이 일치하는지 확인하기 위한 테스트 기법이다.

검사 진행에 있어 해당 소프트웨어의 코드나 내부 구조에 대한 정보는 필요하지 않다.

 

블랙박스 테스트의 종류엔 동치 분할 검사, 경계값 분석, 원인-효과 그래프 검사, 비교검사, 오류 예측 검사가 있다.

 

동치 분할 검사(Equivalence Partitioning Testing) - 프로그램의 입력 조건에 타당한 입력 자료와 타당하지 않은 입력 자료의 개수를 균등하게 해, 테스트 케이스를 정하고, 해당 입력자료에 맞는 결과가 출력되는지 확인하는 기법이다.

 

경계값 분석(Boundary Value Analysis) - 입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용해 입력 조건의 경계값을 테스트 케이스로 선정해 검사하는 기법이다.

 

원인-효과 그래프 검사(Cause-Effect Graphing Testing) - 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정해 검사하는 기법이다.

 

비교검사(Comparison Testing) - 여러 버전의 프로그램에 동일한 테스트 자료를 제공해 동일한 결과가 출력되는지 테스트 하는 기법이다.

 

오류 예측 검사(Error Guessing) - 다른 블랙박스 테스트 기법으로 찾아낼 수 없는 오류를 찾아내는 일련의 보충적 검사 기법이다.


 

'Today I Learned > 정보처리기사' 카테고리의 다른 글

비용산정  (0) 2022.04.28
개발 방법론  (0) 2022.04.28
버전 관리 도구  (0) 2022.04.16
형상관리  (0) 2022.04.16
릴리즈 노트  (0) 2022.04.16