[소프트웨어공학] 블랙 박스 테스트, 화이트 박스 테스트

[소프트웨어공학] 블랙 박스 테스트, 화이트 박스 테스트


블랙 박스 테스트(Back box test)

소프트웨어 검사 방법 중 하나로 어떤 소프트웨어를 내부 구조나 작동 원리를 모르는 상태에서 소프트웨어의 동작을 검사하는 방법
주로 올바른 입력과 올바르지 않은 입력을 일일이 다 동원하여 올바른 출력을 판별하는 방식으로 검사가 이루어지기 때문에 검사의 진행에 있어 대상이 되는 소프트웨어의 코드나 내부 구조 및 개발 노하우에 대한 정보는 기본적으로 필요로 하지 않습니다.
필요한 것은 특징, 요구 사항, 검사를 위해 공개된 설계도 등 대외적으로 공개된 사항들이며 '이 소프트웨어는 무슨 역할을 수행해야 되는가'와 같이 대상이 되는 소프트웨어의 특징이나 요구 사항 등에 초점을 맞춰 검사가 이루어진다.
검사 자체는 기능에 관한 것일 수 도 있고 기능외의 것에 관한 것 일수도있다.
  • 블랙 박스 테스트는 유닛 검사, 인테그레이션 검사, 기능 검사, 시스템 검사, 적합성 검사 이렇게 소프트웨어 검사의 모든 레벨에 적용 가능합니다.


블랙박스 테스트의 기법

동등분할 기법
  • 프로그램의 입력 도메인을 테스트 케이스가 산출 될 수 있는 데이터의 클래스로 분류하는 방법, 다양한 입력조건들을 갖춘 시험사례 유형들을 분할 : 상식적 경험에 의존(heuristic)
  • 각 시험사례 유형마다 최소의 시험사례 작성
    • ex) 입력데이터가 값의 범위를 나타낼 때 : X값이 0~100사이여야 한다면 시험 사례를 (X<0, (x=0), X(x>50))으로 분할하여 유형을 적용
경계값분석기법
  • 입력조건의 중간값에서 보다 경계값에서 에러가 발생될 확률이 높다는 점을 이용하여 이를 실행하는 테스트 케이스를 만드는 방법
    • ex) x값이 0~50사이여야 한다면 시험사례를 (x=0),(x=50),(x=-0.01),(x=50.1)로 정의
오류예측기법
  • 각 시험기법들이 놓치기 쉬운 오류들을 감각 및 경험으로 찾아보는 것
    • ex) 입력값 없이 Return을 친다. 문법에 어긋난 명령어나 규칙을 정의
원인-결과 그래프 기법
  • 입력 데이터간의 관계가 출력에 미치는 영향을 그래프로 표현하여 오류 등을 발견하는 방법
페어 와이즈 조합 테스트
  • 모든 가능한 입력 값들의 조합들을 테스트하는 대신에 모든 쌍(Pair)의 조합을 테스트하는 방법

화이트박스 테스트(White-box-test)

소프트웨어 내부 소스 코드를 테스트 하는 기법
소프트웨어를 테스트 하는 방법은 크게 블랙박스 검사와 화이트박스 검사가 있다.
블랙박스 검사 기법은 소프트웨어의 내부를 보지 않고, 입력과 출력값을 확인하여 기능의 유효성을 판단하는 테스트 기법이며, 화이트 박스 검사 기법은 소프트웨어 내부 소스코드를 확인하는 기법이다.
화이트 박스 테스트를 하는 이유는 내부 소스코드의 동작을 개발자가 추적 할 수 있기 때문에, 동작의 유효성 뿐만아니라 실행 되는 과정을 살펴봄으로써, 코드가 어떤경로로 실행되며, 불필요한 코드 혹은 테스트 되지 못한 부분을 살펴 볼 수 있다.
화이트박스 테스트를 하는 부분은 대게 코드의 실행 경로를 확인해야 하기 때문에 시중에 나와 있는 커버리지 분석도구를 많이 활용한다.
화이트박스 검사 기법은 블랙박스 검사 기법에 비해 많은 시간과 분석을 필요로 하지만 오류가 발생되는 결함의 위치 등을 파악하는데 매우 유용하게 사용 할 수 있다.
일반적으로 화이트박스 테스트를 수행하는 도구는 커버리지 분석 도구와 많이 연관된다.


화이트박스 테스트의 기법

제어흐름 그래프 테스트
  • 프로그램의 제어구조를 그래프 형태로 나타내고 그래프 구성요소는 블록과 분기로 나타낼 수 있다.

데이터(자료) 흐름 테스트
  • 제어흐름 그래프에 데이터 사용현황을 추가한 그래프

경로 테스트
  • 테스트 커버리지를 달성하기 위한 entry/exit path를 선택하는 것


요약하면,,,,, 블랙박스 테스트의 경우 보이는 부분만 보고 문제점을 찾는 방법
화이트박스 테스트는 보이지 않는 소스의 내부적인 로직구조의 문제점까지 찾아내는 방법


댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?