맨위로가기

화이트박스 검사

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

화이트박스 검사는 소프트웨어의 내부 구조, 설계 및 소스 코드를 검토하여 테스트하는 방법이다. 이 검사 기법은 제어 흐름, 데이터 흐름, 분기, 경로 등을 테스트하며, 단위, 통합, 회귀 테스트 단계에서 수행된다. 화이트박스 검사는 입력 준비, 테스트 케이스 생성 및 실행, 결과 보고의 세 단계를 거치며, 소스 코드에 대한 지식을 바탕으로 철저한 테스트가 가능하다는 장점이 있다. 그러나 구현 변경 시 테스트 수정이 필요하고, 테스터의 높은 프로그래밍 지식이 요구된다는 단점도 존재한다. 현대에는 화이트박스 검사와 블랙박스 검사의 구분이 모호해지고 있으며, 침투 테스트에서 화이트 해커가 시스템 정보를 가지고 공격하는 방식을 의미하기도 한다.

더 읽어볼만한 페이지

  • 하드웨어 테스트 - JTAG
    JTAG는 집적 회로의 테스트와 디버깅을 위해 개발된 IEEE 1149.1 표준 인터페이스로, 칩 내부 조사, 제어, 임베디드 시스템 디버깅, 펌웨어 프로그래밍 등에 활용된다.
  • 하드웨어 테스트 - 환경 스트레스 스크리닝
    환경 스트레스 스크리닝(ESS)은 제품의 작동 수명 동안 겪을 물리적 환경 조건을 인위적으로 조성하여 제품 신뢰성을 사전에 검증하고 초기 불량률을 감소시켜 품질을 향상시키는 시험 과정이다.
  • 소프트웨어 테스트 - 보안 취약점
    보안 취약점은 시스템의 설계, 구현, 운영, 관리상 결함이나 약점으로, 위협에 의해 악용되어 시스템 보안 정책을 위반할 수 있는 요소이며, ISO 27005, IETF RFC 4949, NIST SP 800-30, ENISA 등 다양한 기관에서 정의하고 있다.
  • 소프트웨어 테스트 - A/B 테스트
    A/B 테스트는 두 가지 이상의 대안을 비교하여 더 나은 성과를 판단하는 방법으로, 웹사이트, 애플리케이션 등 다양한 분야에서 사용자 인터페이스 등을 테스트하며 통계적 가설 검정을 기반으로 한다.
화이트박스 검사
개요
종류소프트웨어 테스트 방법
특징소프트웨어의 내부 구조 및 동작을 검증하는 테스트
화이트 박스 접근 방식 사용
상세 정보
접근 방식소스 코드, 설계 문서, 내부 데이터 구조 등 내부 정보 활용
개발자 관점에서 테스트 수행
목표코드의 모든 경로를 테스트하여 결함 발견
소프트웨어의 내부 로직 및 구조의 정확성 검증
장점코드의 숨겨진 결함 발견 가능
소프트웨어의 효율성 및 최적화 개선
개발 초기 단계에서 문제 발견 및 해결 가능
단점높은 기술적 전문성 요구
복잡한 시스템에 적용하기 어려움
테스트 케이스 설계에 많은 시간과 노력 필요
테스트 기법
종류구문 커버리지
결정 커버리지
조건 커버리지
경로 커버리지
데이터 흐름 테스트
분기 커버리지
수정된 조건/결정 커버리지 (MC/DC)
설명각 기법은 코드 커버리지를 측정하여 테스트의 완전성을 평가
높은 커버리지 달성이 중요
관련 용어
관련 용어블랙 박스 테스트
회색 박스 테스트
소프트웨어 테스트 자동화
테스트 주도 개발 (TDD)
기타
참고 자료NASA 보고서

2. 검사 기법

2. 1. 제어 흐름 테스트

2. 2. 데이터 흐름 테스트

2. 3. 분기 테스트

2. 4. 경로 테스트

2. 5. 구문 커버리지

2. 6. 의사 결정 커버리지

2. 7. 수정된 조건/결정 커버리지 (MC/DC)

3. 검사 단계

화이트박스 검사는 일반적으로 단위 테스트, 통합 테스트, 회귀 테스트 단계에서 수행된다.[2]


  • 단위 테스트: 화이트박스 테스트는 이전에 테스트된 코드와의 통합이 일어나기 전에 코드가 의도한 대로 작동하는지 확인하기 위해 단위 테스트 중에 수행된다.[2] 단위 테스트 중의 화이트박스 테스트는 잠재적으로 많은 결함을 초기에 발견하고, 코드가 애플리케이션의 나머지 부분과 통합된 후에 발생하는 결함을 해결하는 데 도움을 주므로 개발 후반의 오류 영향을 줄인다.[2]
  • 통합 테스트: 이 단계에서의 화이트박스 테스트는 서로의 인터페이스의 상호 작용을 테스트하기 위해 작성된다.[2] 단위 레벨 테스트는 각 코드가 격리된 환경에서 테스트되고 적절하게 작동하는지 확인하며, 통합은 프로그래머에게 알려진 인터페이스의 모든 상호 작용에 대한 화이트박스 테스트를 사용하여 개방된 환경에서 동작의 정확성을 검사한다.[2]
  • 회귀 테스트: 회귀 테스트 중의 화이트박스 테스트는 단위 및 통합 테스트 레벨에서 재사용된 화이트박스 테스트 케이스를 사용하는 것이다.[2]

3. 1. 단위 테스트

3. 2. 통합 테스트

3. 3. 회귀 테스트

4. 검사 절차

화이트박스 검사는 일반적으로 다음 세 단계를 거친다.
입력 (준비)화이트박스 검사를 위한 입력에는 다양한 유형의 요구 사항, 기능 사양, 문서의 상세 설계, 적절한 소스 코드 및 보안 사양 등이 포함된다. 이는 모든 기본 정보를 제시하기 위한 화이트박스 검사의 준비 단계이다.
처리 (테스트 케이스 생성 및 실행)화이트 박스 검사의 처리 단계에서는 위험 분석을 수행하여 전체 테스트 프로세스를 이끌고, 적절한 테스트 계획을 수립한다. 테스트 케이스를 만들어 애플리케이션을 철저하게 테스트하고 그 결과를 기록한다.
출력 (결과 보고)화이트 박스 검사의 출력에는 테스트 결과와 발견된 결함에 대한 최종 보고서 작성이 포함된다. 이 보고서에는 화이트 박스 테스트의 준비 및 결과가 모두 포함된다.

4. 1. 입력 (준비)

화이트박스 검사를 위한 입력에는 다양한 유형의 요구 사항, 기능 사양, 문서의 상세 설계, 적절한 소스 코드 및 보안 사양 등이 포함된다. 이는 모든 기본 정보를 제시하기 위한 화이트박스 검사의 준비 단계이다.

4. 2. 처리 (테스트 케이스 생성 및 실행)

화이트 박스 검사의 처리 단계에서는 위험 분석을 수행하여 전체 테스트 프로세스를 이끌고, 적절한 테스트 계획을 수립한다. 테스트 케이스를 만들어 애플리케이션을 철저하게 테스트하고 그 결과를 기록한다.

4. 3. 출력 (결과 보고)

화이트 박스 검사의 출력에는 테스트 결과와 발견된 결함에 대한 최종 보고서 작성이 포함된다. 이 보고서에는 화이트 박스 테스트의 준비 및 결과가 모두 포함된다.

5. 장점 및 단점

소스 코드에 대한 지식을 바탕으로 철저한 테스트를 할 수 있다. 눈에 띄지 않는 병목 현상이 노출되므로 코드 최적화가 용이하다. 개발자가 새로운 구현을 신중하게 설명하므로 자기 성찰을 유도한다. 소스에서 테스트의 추적성을 제공하여 향후 소스 변경 사항을 새로 추가되거나 수정된 테스트에서 쉽게 포착할 수 있다. 자동화가 용이하며, 테스트 중단 시점에 대한 명확한 규칙을 제공한다.

화이트박스 검사는 구현에 밀접하게 결합되어 구현 변경 시 테스트를 수정해야 한다. 테스트가 특정 구현에 초점을 맞춰 누락된 기능을 발견하지 못할 수 있다. 테스터는 높은 수준의 프로그래밍 지식이 필요하며, 모든 조건을 테스트하는 것이 현실적으로 어려울 수 있다.

화이트박스 검사는 특정 구현의 세부 사항을 테스트하기 위해 작성되므로, 구현이 변경되면 테스트가 실패하고, 테스트를 다시 구현과 일치하도록 업데이트해야 한다. 반면 블랙박스 검사는 구현과 독립적이므로, 구현이 변경되더라도 출력 또는 부작용이 변경되지 않으면 성공적으로 실행된다.

테스트 중인 코드는 테스트에 포함된 가정을 무효화하는 다른 방식으로 동일한 기능을 구현하도록 다시 작성될 수 있다. 이는 불필요하게 실패하는 테스트를 초래하거나, 최악의 경우 거짓 양성을 제공하고 코드의 오류를 가리는 테스트를 초래할 수 있다. 화이트박스 검사는 테스트 중인 코드의 의도된 동작이 아닌, 특정 구현이 수행하는 작업을 테스트하도록 작성되기 때문이다.

화이트박스 검사는 테스터가 프로그램에 대한 지식을 갖추거나, 테스트 팀에 코드 수준에서 프로그램을 이해할 수 있는 매우 유능한 프로그래머가 최소한 한 명 있어야 한다. 수행해야 하는 테스트 수준의 복잡성으로 인해 높은 수준의 지식을 갖춘 프로그래머가 필요하다.

응용 프로그램의 모든 기존 조건을 테스트하는 것이 현실적이지 않아 일부 조건은 테스트되지 않을 수 있다. 또한, 테스트는 기존 소프트웨어에 중점을 두기 때문에 누락된 기능은 발견되지 않을 수 있다.

5. 1. 장점

소스 코드에 대한 지식을 바탕으로 철저한 테스트를 할 수 있다. 눈에 띄지 않는 병목 현상이 노출되므로 코드 최적화가 용이하다. 개발자가 새로운 구현을 신중하게 설명하므로 자기 성찰을 유도한다. 소스에서 테스트의 추적성을 제공하여 향후 소스 변경 사항을 새로 추가되거나 수정된 테스트에서 쉽게 포착할 수 있다. 자동화가 용이하며, 테스트 중단 시점에 대한 명확한 규칙을 제공한다.

5. 2. 단점

화이트박스 검사는 구현에 밀접하게 결합되어 구현 변경 시 테스트를 수정해야 한다. 테스트가 특정 구현에 초점을 맞춰 누락된 기능을 발견하지 못할 수 있다. 테스터는 높은 수준의 프로그래밍 지식이 필요하며, 모든 조건을 테스트하는 것이 현실적으로 어려울 수 있다.

화이트박스 검사는 특정 구현의 세부 사항을 테스트하기 위해 작성되므로, 구현이 변경되면 테스트가 실패하고, 테스트를 다시 구현과 일치하도록 업데이트해야 한다. 반면 블랙박스 검사는 구현과 독립적이므로, 구현이 변경되더라도 출력 또는 부작용이 변경되지 않으면 성공적으로 실행된다.

테스트 중인 코드는 테스트에 포함된 가정을 무효화하는 다른 방식으로 동일한 기능을 구현하도록 다시 작성될 수 있다. 이는 불필요하게 실패하는 테스트를 초래하거나, 최악의 경우 거짓 양성을 제공하고 코드의 오류를 가리는 테스트를 초래할 수 있다. 화이트박스 검사는 테스트 중인 코드의 의도된 동작이 아닌, 특정 구현이 수행하는 작업을 테스트하도록 작성되기 때문이다.

화이트박스 검사는 테스터가 프로그램에 대한 지식을 갖추거나, 테스트 팀에 코드 수준에서 프로그램을 이해할 수 있는 매우 유능한 프로그래머가 최소한 한 명 있어야 한다. 수행해야 하는 테스트 수준의 복잡성으로 인해 높은 수준의 지식을 갖춘 프로그래머가 필요하다.

응용 프로그램의 모든 기존 조건을 테스트하는 것이 현실적이지 않아 일부 조건은 테스트되지 않을 수 있다. 또한, 테스트는 기존 소프트웨어에 중점을 두기 때문에 누락된 기능은 발견되지 않을 수 있다.

6. 현대적 관점

현대에는 화이트박스 검사블랙박스 검사 사이의 구분이 모호해지고 덜 중요해지고 있다.[5][15] "화이트박스"는 원래 소스 코드를 사용한다는 의미였고, 블랙박스 검사는 요구 사항을 사용한다는 의미였지만, 이제 테스트는 다양한 추상화 수준의 여러 문서에서 파생된다.[5][15] 테스트는 일반적으로 입력 공간, 그래프 또는 논리적 술어와 같은 추상 구조에서 설계되며, 문제는 해당 추상 구조를 어떤 추상화 수준에서 파생하느냐는 것이다.[5][15] 이는 소스 코드, 요구 사항, 입력 공간 설명 또는 수십 가지 유형의 설계 모델 중 하나가 될 수 있다.[5][15] 따라서 "화이트박스 / 블랙박스" 구분은 덜 중요하며 해당 용어는 덜 관련성이 있다.

7. 해킹과의 연관성

침투 테스트에서 화이트박스 테스트는 화이트 해커가 공격받는 시스템에 대한 모든 정보를 가지고 있는 방법을 말한다.[6] 화이트박스 침투 테스트의 목표는 대상 시스템에 대한 지식과 기본적인 자격 증명을 가지고 있을 수 있는 악의적인 내부자를 시뮬레이션하는 것이다. 이러한 침투 테스트를 위해, 공격이 어떻게 또는 어떤 식으로 높은 권한의 계정에 영향을 미칠 수 있는지 분석하기 위해 일반적으로 관리자 권한이 제공된다.[7] 테스터는 참조용으로 소스 코드를 사용할 수 있다. 코드가 자체적으로 목표가 될 때는 이는 (단지) 침투 테스트가 아니라 소스 코드 보안 감사(또는 보안 검토)이다.[8]

참조

[1] 간행물 NASA/CR–2003-212806 Certification Processes for Safety-Critical and Mission-Critical Aerospace Software https://ntrs.nasa.go[...] Ames Research Center 2003-06
[2] 웹사이트 White-Box Testing http://www.chaudhary[...] 2013-02-13
[3] 서적 Testing Object-oriented Systems https://archive.org/[...] Addison-Wesley Publishing Company Inc. 2000
[4] 서적 The Art of Software Testing https://archive.org/[...] John Wiley and Sons 1979
[5] 서적 Introduction to Software Testing http://cs.gmu.edu/~o[...] Cambridge University Press 2008
[6] 웹사이트 A Penetration Testing Model https://www.bsi.bund[...] Federal Office for Information Security (BSI)
[7] 웹사이트 Types of penetration testing https://www.blazeinf[...] Blaze Information Security GmbH 2024-09-12
[8] 웹사이트 What is Code Audit: Understanding its Purpose and Process https://www.oneseven[...] "17 Web Dev, LLC" 2024-09-12
[9] 간행물 NASA/CR–2003-212806 Certification Processes for Safety-Critical and Mission-Critical Aerospace Software https://ntrs.nasa.go[...] Ames Research Center 2003-06
[10] 학술지 White-Box Testing http://www.chaudhary[...] 2013-02-13
[11] 학술지 White-Box Testing http://www.chaudhary[...] 2013-02-13
[12] 서적 Testing Object-oriented Systems https://archive.org/[...] Addison-Wesley Publishing Company Inc. 2000
[13] 서적 Introduction to Software Testing http://cs.gmu.edu/~o[...] Cambridge University Press 2008
[14] 서적 The Art of Software Testing https://archive.org/[...] John Wiley and Sons 1979
[15] 서적 Introduction to Software Testing http://cs.gmu.edu/~o[...] Cambridge University Press 2008



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com