Post

[소프트웨어 공학] 테스팅

테스팅

소프트웨어 재앙

  • 어떻게 해야하는가
    • 소프트웨어의 오작동 발생 Risk를 줄인다
    • 위험 : (발생확률) x (발생 시 끼치는 손실)
    • 소프트웨어 테스팅은 위험에서 발생 확률을 줄이는 작업
  • 테스팅의 목표

    • 결함 발견

    • 품질과 잔존 위험(residual risk)에 대한 정보 제공

소프트웨어 테스팅

  • 정적 테스팅

    • 프로그램 실행 X (프로그램 코드나 산출물 결함을 찾는 활동)
  • 동적 테스팅

    • 컴퓨터 결함을 발견 할 의도로 프로그램 직접 실행

    image

Test Item : 테스트의 대상 (프로그램)

Test Oracle (= 부분)

  • 생성 기능 : 테스트에 대해 예상 결과 생성
  • 평가 기능 : 생성한 결과와 비교하여 테스트 통과 여부 판단

테스트 케이스(ISO/IEC/IEEE 29119 기반

image

소프트웨어 용어

Error

  • 부정확한 결과를 야기하는 개발자의 행위
  • 사용자의 요구사항 잘못 파악, 언어 문법 잘못 이해하여 코딩하는 경우

Fault

프로그램 기능을 제대로 수행하지 못하게 하는 흠

  • Commission : 잘못된 정보를 반영하는 경우

    ​ 요구 명세와 관련되지 않은 기능이 추가

  • Omission : 올바른 정보를 빠뜨리는 경우

    ​ 명세에는 있지만 구현되지 않음

  • 알고리즘 결함

  • 프로그램 코드에서 문제를 일으키는 정적인 부분

Failure

  • 실행결과와 기대 결과의 차이
  • 명세와 다르게 동작하는 것이 외부에

※ Fault -> Error 발생은 아님

완전한 테스팅

  • 모든 입력 조건 조합에 대한 테스트 (Brute Force)

테스트 한계

  • 테스트는 오류가 없음을 보여주지 않는다
  • 언제 테스트 종료할 것인가 -> 테스트 완료 기준 (다음 단계로)

동적 테스트 방법 분류

  • 명세 기반 : 명세 정보 기반
  • 구조 기반 : 코드 기반으로 테스트 케이스 만들어냄
  • 경험 기반 : 테스터의 경험에 의함

명세기반 테스트 (의도한 대로 동작하는 지)

  • 출력 인터페이스나 정보, 명세 정보를 이용한 테스트 케이스 설계
  • 블랙박스 테스팅
  • 요구사항 명세서, 상태 전이도, 유스케이스 다이어그램, 액티비티 다이어그램

Test basis : 테스트 케이스 만드는 데 사용하는 정보

구조기반 테스트 (의도한 기능 올바른 지)

  • 프로그램 코드 로직 정보 이용하여 테스트 케이스 설계
  • 화이트박스 테스팅
  • 기대출력은 명세 기반으로 만들 수 밖에 없음

커버리지 분석

  • 테스팅이 얼마나 충분하게 이루어졌는지를 분석
  • 테스트 커버리지 아이템은 테스트 케이스에 의해 포함되거나 실행될 필요가 있는 명세나 프로그램에 있는 항복

커버리지 = 테스트 커버리지 아이템 수 / 전체 테스트 커버리지 아이템

→ 테스트 완료 기준으로 사용

누락된 요구사항 검출(missing requirements): 요구사항 명세서에 요구사항을 추가한 후에 실행이 되지 않은 부분을 실행할 수 있는 테스트 케이스를 추가

누락된 테스트 검출(missing tests): 실행되지 않은 부분을 실행할 수 있는 테스트 케이스 추가

의도되지 않은 기능 검출: 프로그램에서 제거

Dead code 검출: 프로그램에서 제거

활성화 되지 않은 코드 검출(Deactivated code): 현 시스템에서는 사용하지 않으나 특정 상황에서는 필요한 코드임을 보인다.

경험 기반 테스팅

  • 테스터의 경험이나 지식 및 직관을 기반으로 테스트 케이스를 설계하는 방법

  • 오류 추정(error guessing)은 대표적인 경험 기반 테스트 설계 기술이다. 오류 추정은 과거의 유사한 프로그램을 테스트 했던 경험이나 테스터의 직관을 바탕으로 일반적으로 발생할 수 있는 오작동의 원인이나 문제가 될 만한 영역 등을 추정하여 테스트 케이스를 설계하는 방법

  • 오류 추정은 테스트 케이스를 설계하는 특별한 규칙이나 가이드라인이 없으며 독단적으로 사용되기 보다는 명세 기반 테스트 테스팅 등에 의해 검출되는 오류 유형들을 보완하기 위해s 사용

This post is licensed under CC BY 4.0 by the author.