기타/정처기

정보처리기사 실기 시나공 7장 애플리케이션 테스트관리

TheWing 2020. 12. 31. 17:40

애플리케이션 테스트

애플리케이션 테스트의 개념

  • 애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차이다.
    • 개발된 소프트웨어가 고객의 요구사항을 만족시키는지 확인하고 소프트웨어가 기능을 정확히 수행하는지 검증한다

애플리케이션 테스트의 필요성

  • 애플리케이션 테스트를 통해 프로그램 실행 전에 오류를 발견하여 예방할 수 있다.
    • 애플리케이션 테스트는 프로그램이 사용자의 요구사항이나 기대 수준등을 만족시키는지 반복적으로 테스트하므로 제품의 신뢰도를 향상시킨다.

애플리케이션 테스트의 기본 원리

  • 완벽한 테스트 불가능
    • 애플리케이션 테스트는 소프트웨어의 잠재적인 결함을 줄일 수 있지만 소프트웨어에 결함이 없다고 증명할 수는 없다. 즉 완벽한 소프트웨어 테스트는 불가능하다
  • 결함 집중(Defect Clustering)
    • 애플리케이션의 결함은 대부분 개발자의 특성이나 애플리케이션의 기능적 특징 때문에 특정 모듈에 집중 되어 있다. 애플리케이션의 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다고 하여 파레토 법칙을 적용하기도 한다
  • 살충제 패러독스(Pesticide Paradox) !기출
    • 애플리케이션 테스트에서는 동일한 테스트 케이스로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 '살충제 패러독스(pesticide Paradox)'현상이 발생한다. 살충제 패러독스를 방지하기 위해서 테스트 케이스를 지속적으로 보완 및 개선해야한다.
  • 테스팅은 정황(Context) 의존
    • 애플리케이션 테스트는 소프트웨어 특징, 테스트환경, 테스터 역량 등 정황(Context)에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 테스트를 다르게 수행해야 한다.
  • 오류-부재의 궤변(Absence of Errors Fallacy)
    • 소프트웨어의 결함을 모두 제거해도 사용자의 요구사항을 만족시키지 못하면 해당 소프트웨어는 품질이 높다고 말할 수 없다. 이것을 오류-부재의 궤변이라고 한다.
  • 테스트와 위험은 반비례
    • 테스트를 많이 하면 할수록 미래에 발생할 위험을 줄일 수 있다.
  • 테스트의 점진적 확대
    • 테스트는 작은 부분에서 시작하여 점점 확대하며 진행해야한다.
  • 테스트의 별도 팀 수행
    • 테스트는 개발자와 관계없는 별도의 팀에서 수행해야한다.

프로그램 실행 여부에 따른 테스트

  • 애플리케이션을 테스트 할 때 프로그램의 실행 여부에 따라 정적 테스트와 동적 테스트로 나뉜다.
    • 정적 테스트
      • 프로그램을 실행하지 않고 명세서나 소스코드를 대상으로 분석하는 테스트
      • 소프트웨어 개발 초기에 결함을 발견할 수 있어 소프트웨어의 개발 비용을 낮추는데 도움이 된다.
      • 종류 : 워크스루, 인스펙션, 코드 검사 등
    • 동적 테스트
      • 프로그램을 실행하여 오류를 찾는 테스트로, 소프트웨어 개발의 모든 단계에서 테스트를 수행할 수 있다.
      • 종류 : 블랙박스 테스트, 화이트박스 테스트

테스트 기반(Test Bases)에 따른 테스트

  • 애플리케이션을 테스트 할 때 무엇을 기반으로 수행하느냐에 따라 명세 기반, 구조 기반, 경험 기반 테스트로 나뉜다.
    • 명세 기반 테스트
      • 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트이다
      • 종류 : 동등 분할, 경계 값 분석 등
    • 구조 기반 테스트
      • 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인하는 테스트이다.
      • 종류 : 구문 기반, 결정 기반, 조건 기반 등
    • 경험 기반 테스트
      • 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행하는 테스트이다.
      • 경험 기반 테스트는 사용자의 요구 사항에 대한 명세가 불충분하거나 테스트 시간에 제약이 있는 경우 수행하면 효과적이다.
      • 종류 : 에러 추정, 체크 리스트, 탐색적 테스팅

시각에 따른 테스트

  • 검증(Verification) 테스트
    • 개발자의 시각에서 제품의 생산 과정을 테스트하는 것으로, 제품이 명세서대로 완성됐는지를 테스트한다
  • 확인(Validation) 테스트
    • 사용자의 시각에서 생산된 제품의 결과를 테스트하는 것으로, 사용자가 요구한대로 제품이 완성됐는지, 제품이 정상적으로 동작하는지를 테스트한다.

목적에 따른 테스트

  • 회복(Recovery) , 안전(Security) ,강도(Stress), 성능(Performance) , 구조(Structure), 회귀(Regression), 병행(Parallel)

화이트박스 테스트

  • 화이트박스 테스트는 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법
    • 모듈 안의 작동을 직접 관찰한다
    • 원시 코드(모듈)의 모든 문장을 한 번 이상 실행함으로써 수행

화이트박스 테스트의 종류

  • 기초 경로 검사
    • 대표적인 화이트박스 테스트 기법
    • 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법으로, 테스트 측정 결과는 실행 경로의 기초를 정의하는 데 지침으로 사용된다.
  • 제어 구조 검사
    • 조건 검사(Condition Testing)
      • 프로그램 모듈 내에 있는 논리적 조건을 테스트하는 테스트 케이스 설계 기법
    • 루프 검사(Loop Testing)
      • 프로그램의 반복(Loop) 구조에 초점을 맞춰 실시하는 테스트 케이스 설계 기법
    • 데이터 흐름 검사(Data Flow Testing)
      • 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시하는 테스트 케이스 설계 기법

화이트박스 테스트의 검증 기준

  • 문장 검증 기준, 분기 검증 기준, 조건 검증 기준, 분기/조건 기준

블랙박스 테스트(Black Box Test)

  • 블랙박스 테스트는 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 테스트로, 기능 테스트라고도 한다.
    • 사용자의 요구사항 명세를 보면서 테스트하는 것으로, 주로 구현된 기능을 테스트한다
    • 소프트웨어 인터페이스에서 실시되는 테스트이다

블랙박스 테스트 종류

  • 동치 분할 검사
    • 입력 자료에 초점을 맞춰 테스트 케이스를 만들고 검사하는 방법으로 동등 분할 기법이라고도한다.
  • 경계값 분석
    • 입력 자료에만 치중한 동치 분할 기법을 보완하기 위한 기법이다.
  • 원인-효과 그래프 검사
    • 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법
  • 오류 예측 검사
    • 과거의 경험이나 확인자의 감각으로 테스트하는 기법
  • 비교 검사
    • 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법

단위테스트(Unit Test)

  • 코딩 직후 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 테스트하는 것이다
    • 구조 기반 테스트
      • 프로그램 내부 구조 및 복잡도를 검증하는 화이트박스 테스트 시행
        • 테스트 목적 : 제어 흐름, 조건 결정
    • 명세 기반 테스트
      • 목적 및 실행 코드 기반의 블랙박스 테스트 시행
        • 테스트 목적 : 동등 분할, 경계 값 분석

통합테스트(Integration Test)

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

시스템 테스트(System Test)

  • 시스템 테스트는 개발된 소프트웨어가 해당 컴퓨터에서 완벽하게 수행되는가를 점검하는 테스트이다.
    • 기능적 요구사항
      • 요구사항 명세서, 비즈니스 절차, 유스케이스 등 명세서 기반의 블랙박스 테스트 시행
    • 비기능적 요구사항
      • 성능 테스트, 회복 테스트, 보안 테스트, 내부 시스템의 메뉴 구조, 웹 페이지의 네비게이션 등 구조적 요소에 대한 화이트박스테스트 시행

인수 테스트(Acceptanc Test)

  • 인수 테스트는 개발한 소프트웨어가 사용자의 요구사항을 충족하는지에 중점을 두고 테스트하는 방법
    • 사용자 인수 테스트
      • 사용자가 시스템 사용의 적절성 여부를 확인한다
    • 운영상 인수 테스트
      • 시스템 관리자가 시스템 인수 시 수행하는 테스트 기법으로, 백업/복원시스템, 재난 복구, 사용자 관리, 정기 점검 등을 확인한다.
    • 알파 테스트
      • 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트기법
    • 베타 테스트
      • 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법

통합 테스트(Integration Test)

  • 통합 테스트는 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법이다.

하향식 통합 테스트(Top Down Integration Test)

  • 프로그램의 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트하는 기법
    • 깊이 우선 통합법이나 넓이 우선 통합법을 사용한다
    • 테스트 초기부터 사용자에게 시스템 구조를 보여줄 수 있다.
    • 상위 모듈에서는 테스트 케이스를 사용하기 어렵다
    • 하향식 통합 방법의 절차
      • 주요 제어 모듈은 작성된 프로그램으로 사용하고, 주요 제어 모듈의 종속 모듈들은 스텁(Stub)으로 대체한다
      • 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체된다.

상향식 통합 테스트(Bottom Up Integration Test)

  • 상향식 통합 테스트는 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 기법
    • 가장 하위 단계의 모듈부터 통합 및 테스트가 수행되므로 스텁(Stub)은 필요하지 않지만, 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터(Cluster)가 필요하다
  • 상향식 통합 방법은 다음과 같은 절차로 수행된다
    • 하위 모듈들을 클러스터로 결합한다
    • 상위 모듈에서 데이터의 입출력을 확인하기 위해 더미 모듈인 드라이버를 작성한다

애플리케이션 테스트 프로세스

  • 테스트 계획 → 테스트 분석 및 디자인 → 테스트 케이스 및 시나리오 작성 → 테스트 수행 → 테스트 결과 평가 및 리포팅 → 결함 추적 및 관리

테스트 케이스(Test Case)

  • 테스트 케이스는 구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서로, 명세 기반 테스트의 설계 산출물에 해당된다.
    • 테스트 케이스를 미리 설계하면 테스트 오류를 방지할 수 있고 테스트 수행에 필요한 인력, 시간 등의 낭비를 줄일 수 있다.

테스트 시나리오(Test Senario)

  • 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스들을 묶은 집합으로, 테스트 케이스들을 적용하는 구체적인 절차를 명세한 문서이다

테스트 오라클(Test Oracle)

  • 테스트 오라클은 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 참 값을 대입하여 비교하는 기법 및 활동을 말한다
    • 테스트 오라클은 결과를 판단하기 위해 테스트 케이스에 대한 예상 결과를 계산하거나 확인한다.
    • 테스트 오라클의 특징
      • 제한된 검증
        • 테스트 오라클을 모든 테스트 케이스에 적용할 수 없다.
      • 수학적 기법
        • 테스트 오라클의 값을 수학적 기법을 이용하여 구할 수 있다.
      • 자동화 가능
        • 테스트 대상 프로그램의 실행, 결과 비교, 커버리지 측정등을 자동화 할 수 있다
    • 오라클의 종류
      • 참(True) 오라클, 샘플링(Sampling)오라클, 추정(Heuristic)오라클, 이로간성 검사(Consistent) 오라클 등이 있다.

테스트 자동화의 개념

  • 테스트 자동화는 사람이 반복적으로 수행하던 테스트 절차를 스크립트 형태로 구현하는 자동화 도구를 적용함으로써 쉽고 효율적으로 테스트 수행할 수 있도록 한 것이다.
    • 테스트 자동화 도구를 사용함으로써 휴먼 에러를 줄이고 테스트의 정확성을 유지하면서 테스트의 품질을 향상시킬 수 있다.

테스트 자동화 도구의 장점 / 단점

  • 장점
    • 테스트 데이터의 재입력, 재구성 같은 반복적인 작업을 자동화함으로써 인력 및 시간을 줄일 수 있다.
    • 테스트 결과에 대한 객관적인 평가 기준을 제공한다
  • 단점
    • 테스트 자동화 도구의 사용 방법에 대한 교육 및 학습이 필요하다.

테스트 자동화 수행 시 고려사항

  • 테스트 절차를 고려하여 재사용 및 측정이 불가능한 테스트 프로그램은 제외한다.
  • 모든 테스트 과정을 자동화 할 수 있는 도구는 없으므로 용도에 맞는 적절한 도구를 선택해서 사용한다.

테스트 자동화 도구의 유형

  • 정적 분석 도구 (Static Analysis Tools)
    • 프로그램을 실행하지 않고 분석하는 도구로, 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도 및 남은 결함 등을 발견하기 위해 사용된다
    • 테스트를 수행하는 사람이 작성된 소스 코드를 이해하고 있어야만 분석이 가능하다
  • 테스트 실행 도구(Test Execution Tools)
    • 스크립트 언어를 사용하여 테스트를 실행하는 방법으로, 테스트 데이터와 테스트 수행 방법 등이 포함된 스크립트를 작성한 후 실행한다
  • 성능 테스트 도구(Performance Test Tools)
    • 애플리케이션의 처리량, 응답 시간, 경과 시간, 자원 사용률 등을 인위적으로 적용한 가상의 사용자를 만들어 테스트를 수행함으로써 성능의 목표 달성 여부를 확인한다.
    • 처리량, 응답 시간, 경과 시간, 자원 사용률 !기출
  • 테스트 통제 도구(Test Control Tools)
    • 테스트 계획 및 관리, 테스트 수행, 결함 관리 등을 수행하는 도구로, 종류에는 형상 관리 도구, 결함 추적/관리 도구 등이 있다.
  • 테스트 하네스 도구(Test Harness Tools)
    • 테스트 하네스는 애플리케이션의 컴포넌트 및 모듈을 테스트하는 환경의 일부분으로 테스트를 지원하기 위해 생성된 코드와 데이터를 의미한다
    • 테스트 하네스 도구는 테스트가 실행될 환경을 시뮬레이션 하여 컴포넌트 및 모듈이 정상적으로 테스트되도록 한다.

결함(Fault)의 정의

  • 결함은 오류 발생, 작동 실패 등과 같이 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것을 의미한다.

결함 관리 프로세스

  • 결함 관리 계획
  • 결함 기록
  • 결함 검토
  • 결함 수정
  • 결함 재확인
  • 결함 상태 추적 및 모니터링 활동
  • 최종 결함 분석 및 보고서 작성

결함 상태 추적

  • 테스트에서 발견된 결함은 지속적으로 상태 변화를 추적하고 관리해야한다.

결함 추적 순서

  • 결함 등록(Open)
  • 결함 검토(Reviewed)
  • 결함 할당(Assigned)
  • 결함 수정(Resolved)
  • 결함 조치 보류(Deferred)
  • 결함 종류(Closed)
  • 결함 해제(Clarified)