블랙 박스 테스팅 & 화이트 박스 테스팅의 정의
소프트웨어 테스트에서 "화이트 박스 테스팅(White Box Testing)"과 "블랙 박스 테스팅 (Black Box Testing)"은 두 가지 주요 전략입니다.
화이트 박스 테스팅(White Box Testing)은 소프트웨어 코드의 내부 작동 및 구조를 이해하고 분석하여 테스트 케이스를 설계하고 수행하는 것입니다. 즉, 이 방법은 코드의 내부를 살펴보고, 코드에 대한 전문적인 지식과 프로그래밍 경험이 필요합니다. 화이트 박스 테스팅은 구현 방식에 따라 "구조적 테스팅(Structural Testing)" 또는 "코드 기반 테스팅(Code-based Testing)"으로도 알려져 있습니다.
블랙 박스 테스팅(Black Box Testing)은 소프트웨어의 동작을 검사하기 위해 사용자 인터페이스, 입력 및 출력 등 외부의 동작만을 살펴보는 것입니다. 이 방법은 소프트웨어의 동작을 이해하는 것과 관련된 특수한 지식이 필요하지 않습니다. 블랙 박스 테스팅은 사용자의 요구 사항을 충족시키는지 여부를 확인하기 위해 사용됩니다.
*이러한 두 방법은 서로 보완적인 특징을 가지고 있습니다*.
화이트 박스 테스팅은 코드의 내부 구조를 이해하여 보다 정확한 결과를 도출할 수 있지만, 테스트 케이스를 설계하고 실행하는 데 더 많은 시간과 노력이 필요합니다.
반면에 블랙 박스 테스팅은 빠르게 실행되며, 사용자 요구 사항을 충족하는지 여부를 확인하는 데 유용하지만, 코드의 내부적인 결함을 확인할 수는 없습니다.
테스트의 목적과 상황에 따라 적절한 방법을 선택하여 사용해야 합니다. 일반적으로는 블랙 박스 테스팅을 먼저 수행하여 사용자 요구 사항을 충족시키는지 확인한 다음, 화이트 박스 테스팅을 통해 코드의 내부적인 결함을 확인하고 수정할 수 있습니다. 이를 통해 소프트웨어의 품질을 개선하고 사용자 요구 사항을 충족시킬 수 있습니다.
예시
예를 들어, 웹 사이트의 로그인 기능을 테스트한다고 가정해 봅시다.
블랙 박스 테스팅을 사용하면, 로그인 페이지에 대한 입력 필드(아이디, 비밀번호)를 입력하여 로그인 버튼을 클릭하는 것입니다. 이를 통해 로그인이 제대로 작동하는지 여부를 확인할 수 있습니다. 이 방법은 사용자가 실제로 수행할 작업을 시뮬레이션하며, 웹 사이트의 동작을 검사할 수 있습니다.
화이트 박스 테스팅을 사용하면, 웹 사이트의 로그인 코드를 살펴보고, 로그인 함수 내부에서 코드 블록, 루프, 결정 포인트 등을 검사하여 결함을 발견할 수 있습니다. 이 방법은 코드의 내부적인 결함을 확인하고 수정하는 데 사용됩니다.
두 방법을 혼합하여 사용할 수도 있습니다. 예를 들어, 블랙 박스 테스팅을 먼저 수행하여 사용자 인터페이스와 기능이 제대로 작동하는지 확인한 다음, 화이트 박스 테스팅을 수행하여 코드의 내부 구조를 검사할 수 있습니다. 이를 통해 웹 사이트의 로그인 기능을 완전히 검사하고 결함을 최소화할 수 있습니다.
지금 예시에서는 로그인 버튼의 대한 기능이 이미 개발 되어 있다고 가정합니다.
하지만 실제로 소프트웨어를 개발할때는 당연히 화이트박스 테스팅이 먼저 진행되고, 다음으로 블랙 박스 테스팅이 진행됩니다.
커버리지(Coverage)란
커버리지(Coverage)는 소프트웨어 테스트에서 사용되는 지표 중 하나로, 소프트웨어 테스트에서 실행된 코드의 양을 측정하는 데 사용됩니다. 즉, 테스트를 실행할 때 얼마나 많은 코드가 실행되었는지, 혹은 얼마나 많은 부분이 테스트 대상인지를 나타내는 지표입니다.
커버리지 측정은 소프트웨어의 품질을 평가하는 데 중요한 역할을 합니다.
높은 커버리지를 가진 소프트웨어는 대부분 결함이 적고 안정적입니다. 또한 커버리지 측정은 테스트의 효율성을 평가하는 데도 사용됩니다. 커버리지가 낮은 부분을 찾아서 추가적인 테스트를 수행하면, 결함을 더욱 빠르게 발견하고 수정할 수 있습니다.
예시
자 다음과 같은 이클립스 코드를 예시를 들자면,
이클립스에서 커버리지 결과는 일반적으로 소스 코드의 행별로 나타납니다.
각 행은 테스트 실행 중 실행되었는지 여부에 따라 색상으로 표시됩니다.
초록색: 해당 행이 실행되어 커버리지에 포함된 경우
노란색: 해당 행이 실행되지 않았지만, 실행 가능한 코드인 경우 (예: if문의 조건문이 false인 경우)
빨간색: 해당 행이 실행되지 않았고, 실행 불가능한 코드인 경우 (예: if문의 조건문이 항상 true인 경우)
따라서, 초록색 행은 실행된 코드를 나타내며, 노란색과 빨간색 행은 실행되지 않은 코드를 나타냅니다. 이를 통해, 커버리지 결과에서 실행되지 않은 코드를 찾아 추가적인 테스트 케이스를 설계할 수 있습니다.