Skip to main content

Command Palette

Search for a command to run...

AI Software Testing Lecture Notes: Black-box, White-box, and Simulation-based Testing

Updated
23 min read
AI Software Testing Lecture Notes: Black-box, White-box, and Simulation-based Testing
H
Hi there, I'm a full time software engineering student, and full time mum based in Brisbane, QLD, Australia. Korean is my native language and English is my second, but I love learning software in English. My posts are a mix of both Korean and English, so there's something for everyone! All my posts come straight from my lecture notes, so follow along my study journey with me <3

1️⃣ Overview of AI Software Testing
2️⃣ AI Software Testing Techniques
3️⃣ Virtual-based AI software testing environment


AI 소프트웨어 테스트 개요 (Overview of AI Software Testing)

이번 강의에서는 AI 소프트웨어 테스트(AI Software Testing)와 관련하여 세 가지 핵심 내용을 간단히 정리한다. 첫 번째는 AI 소프트웨어 테스트가 무엇인지, 그리고 왜 필요한지를 이해하는 것이다. AI 소프트웨어는 일반 소프트웨어와 달리 데이터(Data)와 모델(Model)을 기반으로 동작하는 경우가 많기 때문에, 입력 조건이나 학습 데이터에 따라 결과가 달라질 수 있다. 따라서 AI 소프트웨어가 기대한 대로 동작하는지 확인하고, 예측 결과의 정확성(Accuracy), 신뢰성(Reliability), 안정성(Safety)을 검증하는 테스트 과정이 필요하다.

두 번째는 AI 소프트웨어에도 적용할 수 있는 테스트 기법(Test Techniques)이 있다는 점이다. 일반 소프트웨어 테스트에서 사용하는 기능 테스트(Functional Testing), 성능 테스트(Performance Testing), 회귀 테스트(Regression Testing)와 같은 개념은 AI 소프트웨어에도 활용될 수 있다. 다만 AI 소프트웨어는 결과가 항상 고정적이지 않을 수 있기 때문에, 테스트할 때 데이터 품질(Data Quality), 모델의 예측 성능(Prediction Performance), 편향성(Bias), 예외 상황 처리(Exception Handling) 등을 함께 고려해야 한다.

세 번째는 테스트를 더 효율적으로 수행하기 위한 가상 기반 소프트웨어 테스트 환경(Virtual Software Testing Environment)에 대한 이해이다. 실제 환경에서 AI 소프트웨어를 테스트하기 어렵거나 비용이 많이 드는 경우, 시뮬레이션(Simulation)이나 가상 환경(Virtual Environment)을 활용할 수 있다. 이러한 환경은 다양한 조건을 반복적으로 실험할 수 있게 해주며, 특히 자율주행(Autonomous Driving), 로봇(Robotics), 스마트 시스템(Smart Systems)처럼 실제 테스트가 위험하거나 복잡한 분야에서 유용하다.

정리하면, 이번 강의의 목표는 AI 소프트웨어 테스트의 필요성, AI 소프트웨어에 적용 가능한 테스트 기법, 그리고 가상 기반 테스트 환경의 개념을 이해하는 것이다. AI 소프트웨어는 데이터와 모델에 크게 의존하므로, 단순히 프로그램이 실행되는지만 확인하는 것이 아니라 결과의 품질과 신뢰성을 함께 검증하는 것이 중요하다.


AI 소프트웨어 테스트의 정의 (Definition of AI Software Testing)

AI 소프트웨어 테스트(AI Software Testing)의 개념은 기존에 학습한 소프트웨어 테스트(Software Testing)의 기본 목적에서 출발할 수 있다. 일반적인 소프트웨어 테스트의 목적은 개발된 소프트웨어가 요구사항(Requirements), 아키텍처(Architecture), 설계(Design)를 만족하는지 확인하는 것이다. 만약 소프트웨어가 정해진 요구사항이나 설계를 만족하지 못한다면, 이를 결함(Defect)이라고 부른다. 따라서 테스트의 핵심 목적은 다양한 관점과 환경에서 소프트웨어를 실행하고 검증하여, 존재할 수 있는 결함을 최대한 많이 찾아내는 데 있다.

AI 소프트웨어 테스트도 이 기본 개념에서 크게 벗어나지 않는다. 기존의 소프트웨어 테스트 앞에 AI(Artificial Intelligence)라는 개념이 추가된 것으로 이해할 수 있다. 인공지능 기술(AI Technology)을 적용하여 학습이 완료된 모델(Trained Model)은 하나의 AI 소프트웨어(AI Software)로 볼 수 있다. 따라서 AI 소프트웨어 테스트란, 이 훈련 완료 모델이 요구사항을 충족하는지, 의도한 기능을 정상적으로 수행하는지, 그리고 실제 사용 환경에서 신뢰할 수 있는 결과를 내는지를 검증(Verification)하고 확인(Validation)하는 프로세스라고 할 수 있다.

즉, 기존 소프트웨어 테스트의 대상이 일반 프로그램에서 AI 모델(AI Model) 또는 AI 기반 소프트웨어(AI-based Software)로 바뀐 것이다. 이 테스트 프로세스를 통해 AI 모델의 정확도(Accuracy), 정밀성(Precision), 편향성(Bias) 등을 평가할 수 있다. AI 소프트웨어는 단순히 코드가 오류 없이 실행되는지만 보는 것이 아니라, 모델이 얼마나 올바른 판단을 내리는지, 특정 데이터나 사용자 집단에 대해 편향된 결과를 내지 않는지, 그리고 다양한 입력 상황에서도 안정적으로 동작하는지를 함께 확인해야 한다.

AI 소프트웨어 테스트 프로세스(AI Software Testing Process)는 기존 소프트웨어 개발에서 사용되는 V-Model의 흐름과도 연결된다. AI 소프트웨어 역시 요구사항 분석(Requirements Analysis), 설계(Design), 구현(Implementation), 테스트(Test)의 단계를 거치며, AI 특성상 훈련 데이터 준비(Training Data Preparation), 모델 학습(Model Training), 모델 평가(Model Evaluation)와 같은 과정이 중요하게 포함된다. V-Model의 왼쪽 단계에서 정의한 요구사항과 데이터 준비 과정이 적절했는지를, 오른쪽 테스트 단계에서 검증하는 구조로 이해할 수 있다.

AI 소프트웨어는 일반 소프트웨어의 품질 특성(Quality Characteristics)도 가지고 있다. 예를 들어 기능 적합성(Functional Suitability), 성능 효율성(Performance Efficiency), 호환성(Compatibility), 사용성(Usability) 등이 이에 해당한다. AI 소프트웨어도 결국 사용자가 요구한 기능을 제공해야 하며, 효율적으로 동작하고, 다른 시스템과 잘 연동되며, 사용하기 쉬워야 한다.

하지만 AI 소프트웨어에는 일반 소프트웨어와 구분되는 고유한 품질 특성도 존재한다. 대표적으로 적응성(Adaptability), 자율성(Autonomy), 진화(Evolution), 유연성(Flexibility), 편향성(Bias) 등이 있다. AI 모델은 데이터와 환경에 따라 결과가 달라질 수 있고, 일부 시스템은 스스로 판단하거나 변화하는 상황에 적응해야 한다. 따라서 AI 소프트웨어 테스트는 이러한 고유한 특성이 실제로 적절하게 구현되어 있는지, 그리고 그 과정에서 위험하거나 부정확한 결과가 발생하지 않는지를 확인하는 것을 목표로 한다.

정리하면, AI 소프트웨어 테스트는 인공지능 기술이 적용된 모델이나 시스템이 요구사항을 만족하고 정상적으로 동작하는지 확인하는 테스트 프로세스이다. 기존 소프트웨어 테스트가 결함을 찾아내는 활동이었다면, AI 소프트웨어 테스트는 여기에 더해 모델의 정확도, 정밀성, 편향성, 적응성, 자율성 등 AI 고유의 품질 특성까지 함께 평가한다는 점에서 차이가 있다.


AI 소프트웨어 특성을 반영한 테스트 기법의 필요성

(Need for Test Techniques Reflecting AI Software Characteristics)

AI 소프트웨어(AI Software)는 일반 소프트웨어와 달리 모델(Model)이 훈련 데이터(Training Data)를 기반으로 학습하고, 새로운 입력에 대해 예측(Prediction)이나 판단(Decision)을 수행한다. 따라서 AI 소프트웨어를 테스트할 때는 단순히 프로그램이 실행되는지, 기능이 동작하는지만 확인하는 것으로는 충분하지 않다. 모델이 얼마나 정확하게 예측하는지, 결과가 얼마나 정밀한지, 특정 데이터나 사용자 집단에 대해 편향된 결과를 내지 않는지도 함께 확인해야 한다.

AI 모델의 성능은 훈련 데이터에 크게 의존한다. 훈련 데이터의 양이 부족하거나, 데이터가 편향되어 있거나, 실제 사용 환경을 충분히 반영하지 못하면 모델의 예측 결과도 부정확해질 수 있다. 이 때문에 AI 소프트웨어 테스트에서는 코드의 결함뿐만 아니라 데이터 품질(Data Quality), 데이터 편향(Data Bias), 모델 성능(Model Performance)도 중요한 평가 대상이 된다.

또한 AI 소프트웨어는 추론 과정(Inference Process)이 복잡하고, 경우에 따라 비결정적 동작(Non-deterministic Behavior)을 보일 수 있다. 비결정적 동작이란 같은 입력을 넣었을 때 항상 완전히 같은 결과가 나오지 않을 수 있다는 뜻이다. AI 모델은 학습 데이터, 학습 방식, 확률적 처리 방식, 실행 환경 등에 따라 결과가 달라질 수 있기 때문이다. 따라서 AI 소프트웨어 테스트에서는 하나의 입력에 대해 하나의 정답만 확인하는 방식보다, 허용 가능한 결과 범위(Acceptable Range)나 성능 기준(Performance Criteria)을 정해 평가하는 방식이 필요하다.

결국 AI 소프트웨어에는 기존 소프트웨어 테스트 기법만으로는 충분히 검증하기 어려운 부분이 있다. 기능 테스트(Functional Testing), 성능 테스트(Performance Testing), 회귀 테스트(Regression Testing)와 같은 기존 기법도 여전히 필요하지만, 여기에 더해 정확도 평가(Accuracy Evaluation), 정밀성 평가(Precision Evaluation), 편향성 테스트(Bias Testing), 데이터 품질 테스트(Data Quality Testing), 강건성 테스트(Robustness Testing)처럼 AI의 특성을 반영한 테스트 기법이 함께 사용되어야 한다.

정리하면, AI 소프트웨어 테스트는 일반 소프트웨어 테스트의 개념을 바탕으로 하지만, AI 모델의 데이터 의존성(Data Dependency), 예측 성능(Prediction Performance), 복잡한 추론 과정, 비결정적 동작 가능성 등을 추가로 고려해야 한다. 이러한 이유로 AI 소프트웨어의 특징을 반영한 별도의 테스트 기법이 필요하다.


성적관리 AI 소프트웨어에서 기존 테스트 기법 적용의 한계

(Limitations of Traditional Test Techniques in AI Grade Management Software)

기존의 성적관리 소프트웨어(Grade Management Software)는 요구사항(Requirements)이 비교적 명확하게 정해져 있다. 예를 들어 “0점 이상 70점 미만은 F”, “70점 이상 80점 미만은 C”, “80점 이상 90점 미만은 B”, “90점 이상 100점 이하는 A”와 같이 점수 구간과 등급 기준을 명확하게 정의할 수 있다. 이런 경우에는 요구사항을 기준으로 설계하고 구현한 뒤, 동등 분할 테스트(Equivalence Partitioning)나 경계값 분석(Boundary Value Analysis)을 적용하여 테스트 케이스(Test Case)를 만들 수 있다.

예를 들어 70점 이상 80점 미만 구간이 하나의 동등 분할 영역이라면, 이 구간 안의 대표값을 선택하여 테스트할 수 있다. 또한 69점, 70점, 79점, 80점처럼 등급이 바뀌는 경계값을 중심으로 테스트하면 요구사항이 제대로 구현되었는지 확인할 수 있다. 즉, 일반 소프트웨어에서는 요구사항이 명확하기 때문에 이를 기준으로 입력값을 나누고, 각 구간을 대표하는 테스트 데이터를 선정하는 방식이 효과적으로 사용될 수 있다.

하지만 성적관리 AI 소프트웨어(AI Grade Management Software)의 경우에는 상황이 달라질 수 있다. AI 소프트웨어는 사람이 직접 모든 규칙을 코드로 작성하는 것이 아니라, 주어진 훈련 데이터(Training Data)를 바탕으로 모델(Model)이 학습한다. 예를 들어 모델이 70점 이상 80점 미만, 80점 이상 90점 미만의 데이터만 학습한 상태라면, 모델은 이 두 점수 구간에 대해서는 비교적 잘 예측할 수 있을 수 있다. 그러나 50점대 점수나 90점 이상 100점 이하의 점수처럼 훈련 데이터에 충분히 포함되지 않은 입력이 들어오면, 모델이 정확한 결과를 예측하지 못할 가능성이 있다.

이것은 AI 모델이 훈련 데이터에 크게 의존하기 때문이다. 모델이 다양한 학생 그룹(Student Group), 다양한 점수 구간, 다양한 성적 패턴을 학습하지 못했다면, 새로운 학생 그룹이나 학습하지 않은 점수 범위에 대해서는 신뢰하기 어려운 결과를 낼 수 있다. 따라서 AI 소프트웨어 테스트에서는 단순히 입력값을 몇 개의 구간으로 나누어 테스트하는 것만으로는 충분하지 않을 수 있다. 훈련 데이터가 전체 상황을 충분히 대표하고 있는지, 특정 구간이나 집단에 치우쳐 있지 않은지, 새로운 입력에 대해서도 안정적인 예측을 할 수 있는지를 함께 확인해야 한다.

또한 AI 소프트웨어는 요구사항이 훈련 데이터에 따라 변하거나 불명확해질 수 있다는 특징이 있다. 일반 소프트웨어에서는 요구사항이 명확히 정의되어 있어야 동등 분할이나 경계값 분석을 적용하기 쉽다. 하지만 AI 소프트웨어는 모델이 데이터로부터 규칙을 학습하기 때문에, 사람이 사전에 모든 판단 기준을 명확하게 정의하기 어려운 경우가 많다. 이처럼 요구사항 자체가 데이터와 학습 결과에 따라 달라질 수 있다면, 기존의 동등 분할 테스트나 경계값 분석만으로는 충분한 테스트가 어렵다.

정리하면, 동등 분할 테스트(Equivalence Partitioning)와 경계값 분석(Boundary Value Analysis)은 요구사항이 명확한 일반 소프트웨어에서는 효과적인 테스트 기법이다. 그러나 AI 소프트웨어는 훈련 데이터에 따라 모델의 판단 기준이 형성되고, 학습하지 않은 데이터에 대해서는 예측 성능이 떨어질 수 있다. 따라서 AI 소프트웨어를 테스트할 때는 기존 테스트 기법뿐만 아니라 데이터 품질(Data Quality), 데이터 분포(Data Distribution), 편향성(Bias), 일반화 성능(Generalization Performance)을 함께 검증해야 한다.


비결정적 동작을 고려한 AI 소프트웨어 테스트 기법의 필요성

(Need for AI Testing Techniques Considering Non-deterministic Behavior)

AI 소프트웨어(AI Software)는 입력에 따라 결과가 달라질 수 있는 비결정적 동작(Non-deterministic Behavior)을 보일 수 있다. 일반 소프트웨어는 요구사항이 명확하게 정의되어 있으면, 같은 입력에 대해 항상 같은 결과가 나오는 것을 기대할 수 있다. 예를 들어 성적관리 소프트웨어에서 90점 이상 100점 이하의 점수를 입력하면 A가 나와야 한다는 요구사항이 있다면, 동등 분할 테스트(Equivalence Partitioning)를 통해 해당 구간의 대표값을 넣고 결과가 요구사항과 일치하는지 확인할 수 있다.

하지만 AI 소프트웨어는 같은 입력이나 비슷한 입력에 대해 항상 완전히 일관된 결과를 보장하기 어려울 수 있다. 모델(Model)이 훈련 데이터(Training Data)를 기반으로 확률적 예측(Probabilistic Prediction)을 수행하거나, 실행 환경과 학습 방식에 따라 결과가 달라질 수 있기 때문이다. 따라서 동등 클래스(Equivalence Class)의 대표값을 넣었을 때 항상 예상한 결과가 나오는지만 확인하는 기존 방식에는 한계가 있다. AI 소프트웨어에서는 결과가 요구사항에 맞는지만 보는 것이 아니라, 다양한 입력 상황에서도 모델이 안정적이고 신뢰할 수 있는 예측을 하는지 확인해야 한다.

예를 들어 이미지 분류 모델(Image Classification Model)을 테스트한다고 가정할 수 있다. 이 모델이 특정 이미지에만 의존하지 않고 다양한 이미지에 대해 골고루 예측할 수 있는지 확인하기 위해, 무작위로 생성된 이미지(Randomly Generated Images)를 입력하여 분류 정확도(Classification Accuracy)를 테스트할 수 있다. 이를 통해 모델이 훈련 데이터와 비슷한 이미지에만 잘 반응하는 것이 아니라, 새로운 입력 데이터에 대해서도 어느 정도 일반화(Generalization)할 수 있는지 확인할 수 있다.

또 다른 방법은 이미지에 노이즈(Noise)를 추가하여 테스트하는 것이다. 예를 들어 이미지의 픽셀값(Pixel Value)을 의도적으로 변경하거나, 이미지의 좌우 위치를 바꾸거나, 밝기와 대비를 조정할 수 있다. 이렇게 변형된 이미지를 입력했을 때 모델이 잘못된 분류를 하는지 확인하면, 모델의 강건성(Robustness)을 평가할 수 있다. 즉, 약간의 변화나 방해 요소가 있어도 모델이 안정적으로 올바른 결과를 내는지 확인하는 것이다.

자율주행 자동차 시스템(Autonomous Driving System)에서도 AI 특성을 반영한 테스트가 필요하다. 실제 도로에서는 매우 다양한 상황이 발생할 수 있기 때문에, 단순한 정상 주행 상황만 테스트하는 것으로는 충분하지 않다. 예를 들어 터널을 빠져나오자마자 앞에 고장 난 차량이 있고, 반대편 차선에서는 차량이 다가오는 상황처럼 위험도가 높은 최악의 상황(Worst-case Scenario)을 설정할 수 있다. 이러한 시나리오 기반 테스트(Scenario-based Testing)를 통해 다양한 교통 상황을 시뮬레이션(Simulation)하고, AI 시스템이 안전하게 판단하고 주행할 수 있는지 검증해야 한다.

정리하면, AI 소프트웨어는 비결정적 동작 가능성과 데이터 의존성을 가지고 있기 때문에 기존의 동등 분할 테스트만으로는 충분하지 않을 수 있다고 할 수 있겠다.


데이터 품질과 양을 고려한 AI 소프트웨어 테스트 기법의 필요성

(Need for AI Testing Techniques Considering Data Quality and Quantity)

AI 소프트웨어(AI Software)의 성능은 훈련에 사용된 데이터(Training Data)의 품질(Quality)과 양(Quantity)에 크게 의존한다. 일반 소프트웨어는 개발자가 작성한 명확한 규칙과 요구사항에 따라 동작하지만, AI 소프트웨어는 데이터를 기반으로 패턴(Pattern)을 학습하고 그 결과를 바탕으로 예측(Prediction)이나 분류(Classification)를 수행한다. 따라서 데이터가 다양하고 품질이 좋을수록 AI 모델(Model)의 성능도 향상될 가능성이 높다.

하지만 훈련 데이터에 특정 패턴이나 편향(Bias)이 존재하면, AI 모델 역시 그 편향을 학습할 수 있다. 예를 들어 동양인 얼굴 데이터를 중심으로 학습한 얼굴 인식 AI 모델(Face Recognition AI Model)에 서양인 얼굴 데이터가 입력된다면, 모델이 충분히 학습하지 못한 데이터이기 때문에 정확도가 낮아질 수 있다. 이는 모델이 다양한 집단의 데이터를 균형 있게 학습하지 못했을 때 발생할 수 있는 데이터 편향(Data Bias)의 예시이다.

이러한 특성 때문에 AI 소프트웨어에는 기존의 동등 분할 테스트(Equivalence Partitioning)를 그대로 적용하는 데 한계가 있다. 동등 분할은 입력값을 일정한 구간이나 그룹으로 나누고, 각 구간의 대표값을 테스트하는 방식이다. 그러나 AI 모델은 단순히 입력 구간만으로 결과가 결정되는 것이 아니라, 훈련 데이터의 분포(Data Distribution), 데이터의 다양성(Data Diversity), 품질, 편향 여부에 따라 결과가 달라질 수 있다. 따라서 구간을 나누어 대표값만 테스트하는 방식으로는 AI 모델의 실제 성능을 충분히 확인하기 어렵다.

예를 들어 이미지 분류 모델(Image Classification Model)을 테스트할 때, 훈련 데이터의 양이 증가함에 따라 모델의 성능이 실제로 향상되는지 확인할 수 있다. 데이터 양을 단계적으로 늘려가며 정확도(Accuracy), 정밀도(Precision), 재현율(Recall) 등의 성능 지표가 어떻게 변화하는지 평가하는 것이다. 이를 통해 모델이 더 많은 데이터를 학습했을 때 일반화 성능(Generalization Performance)이 좋아지는지 확인할 수 있다.

또한 특정 클래스(Class)가 훈련 데이터에 과대표적으로 포함되어 있는지 확인하는 방식으로 데이터 편향성을 테스트할 수 있다. 예를 들어 이미지 분류 모델에서 특정 동물, 특정 인종, 특정 사물 이미지가 지나치게 많이 포함되어 있다면, 모델은 그 클래스에 유리한 방향으로 학습될 수 있다. 따라서 다양한 클래스가 균형 있게 포함된 데이터셋(Dataset)을 준비하고, 모델이 특정 클래스에 치우친 예측을 하지 않는지 검증해야 한다.

마지막으로 데이터 품질의 다양성도 테스트해야 한다. 이미지 분류 모델에 고품질 이미지(High-quality Image)뿐만 아니라 저품질 이미지(Low-quality Image), 흐릿한 이미지(Blurred Image), 어두운 이미지(Dark Image), 노이즈가 있는 이미지(Noisy Image) 등을 입력하여 모델의 정확도를 평가할 수 있다. 이를 통해 실제 환경에서 데이터 품질이 일정하지 않더라도 모델이 안정적으로 동작하는지 확인할 수 있다.

정리하면, AI 소프트웨어의 성능은 훈련 데이터의 품질과 양에 크게 영향을 받는다. 따라서 AI 소프트웨어 테스트에서는 단순한 입력값 구간 테스트뿐만 아니라 데이터 양에 따른 성능 변화, 데이터 편향성, 클래스 불균형(Class Imbalance), 데이터 품질 다양성까지 함께 검증해야 한다.


2️⃣ AI Software Testing Techniques

ISO/IEC/IEEE 29119의 AI 소프트웨어 테스트 기법 분류

(Classification of AI Software Test Techniques in ISO/IEC/IEEE 29119)

ISO/IEC/IEEE 29119에서는 AI 소프트웨어 테스트 기법을 크게 블랙박스 테스트(Black-box Testing)화이트박스 테스트(White-box Testing)로 구분해서 이해할 수 있다. 이는 기존 일반 소프트웨어 테스트에서도 사용했던 분류 방식과 유사하다.

먼저 블랙박스 테스트(Black-box Testing)는 소프트웨어의 내부 구조나 구현 방식을 직접 보지 않고, 요구사항(Requirements)이나 명세(Specification)를 기반으로 테스트 케이스(Test Case)를 설계하는 방법이다. 그래서 명세 기반 테스트(Specification-based Testing)라고도 한다. 일반 소프트웨어에서는 입력값을 넣었을 때 요구사항에 맞는 출력값이 나오는지를 확인했다면, AI 소프트웨어에서도 같은 개념이 적용된다.

AI 소프트웨어의 블랙박스 테스트에서는 AI 모델(AI Model)의 내부 구조는 직접 분석하지 않고, 입력 데이터(Input Data)에 대해 출력값(Output)이 적절하게 나오는지를 확인한다. 예를 들어 이미지 분류 모델(Image Classification Model)에 이미지를 입력했을 때, 그 이미지가 사람인지, 동물인지, 또는 동물이라면 개인지 고양이인지를 올바르게 분류하는지 확인하는 방식이다. 즉, 모델 내부에서 어떤 계산이 이루어졌는지보다는 입력에 따른 결과가 요구사항에 맞는지를 중심으로 테스트한다.

반면 화이트박스 테스트(White-box Testing)는 내부 구조를 고려하여 테스트 케이스를 설계하는 방법이다. 기존 일반 소프트웨어에서는 소스 코드(Source Code)의 내부 로직(Internal Logic), 조건문, 반복문, 분기 구조 등을 기준으로 테스트를 수행했다. 그래서 구조 기반 테스트(Structure-based Testing)라고도 한다.

AI 소프트웨어의 경우, 이 내부 구조는 단순한 소스 코드 로직만이 아니라 훈련 데이터(Training Data)를 통해 만들어진 AI 모델의 구조로 확장해서 이해할 수 있다. 특히 딥러닝 모델(Deep Learning Model)에서는 신경망(Neural Network)의 내부 구조와 동작을 고려하여 테스트를 수행할 수 있다. 예를 들어 특정 입력을 넣었을 때 신경망의 어떤 뉴런(Neuron)이나 계층(Layer)이 활성화되는지 확인하고, 모델 내부가 얼마나 다양한 방식으로 테스트되었는지를 평가할 수 있다.

일반 소프트웨어의 화이트박스 테스트에서는 문장 커버리지(Statement Coverage), 분기 커버리지(Branch Coverage)처럼 코드가 얼마나 테스트되었는지를 측정했다. AI 소프트웨어에서는 이와 유사하게 신경망 커버리지(Neural Network Coverage)나 뉴런 커버리지(Neuron Coverage)와 같은 개념이 중요하게 다루어진다. 이는 테스트 데이터가 모델 내부의 다양한 뉴런이나 경로를 얼마나 활성화했는지를 확인하려는 시도이다.

정리하면, AI 소프트웨어 테스트도 기존 소프트웨어 테스트처럼 블랙박스 테스트화이트박스 테스트로 구분할 수 있다. 블랙박스 테스트는 AI 모델의 내부 구조를 보지 않고 입력과 출력의 관계를 중심으로 검증하는 방식이고, 화이트박스 테스트는 AI 모델의 내부 구조, 특히 신경망의 동작과 활성화 정도를 고려하여 테스트하는 방식이다. 차이점은 기존 소프트웨어에서는 테스트 대상의 내부 구조가 주로 소스 코드였다면, AI 소프트웨어에서는 그 대상이 AI 모델과 신경망 구조로 확장된다는 점이다.


AI 소프트웨어의 블랙박스 테스트 설계 기법

(Black-box Test Design Techniques for AI Software)

AI 소프트웨어(AI Software)에 적용할 수 있는 블랙박스 테스트 설계 기법(Black-box Test Design Techniques)에는 조합 테스트(Combinatorial Testing), 백투백 테스트(Back-to-back Testing), 변성 테스트(Metamorphic Testing), 탐색적 테스트(Exploratory Testing) 등이 있다. 블랙박스 테스트는 AI 모델(AI Model)의 내부 구조를 직접 분석하지 않고, 입력 데이터(Input Data)에 대해 어떤 출력(Output)이 나오는지를 중심으로 테스트하는 방식이다.

조합 테스트(Combinatorial Testing)는 여러 입력값이나 조건을 조합하여 테스트 케이스(Test Case)를 만드는 기법이다. 이는 AI 소프트웨어뿐만 아니라 일반 소프트웨어에서도 충분히 사용할 수 있는 테스트 방법이다.

하지만 AI 소프트웨어에서는 조합 테스트를 적용하는 데 한계가 있을 수 있다. AI 모델은 입력 특성(Feature), 파라미터(Parameter), 데이터 조건이 매우 많을 수 있기 때문이다. 특히 대규모 AI 모델의 경우 수많은 매개변수와 입력 조건을 모두 조합하여 테스트하는 것은 현실적으로 어렵다. 따라서 모든 조합을 테스트하기보다는 중요한 조합을 선별하거나, 위험도가 높은 입력 조건을 중심으로 테스트하는 방식이 필요하다.

백투백 테스트(Back-to-back Testing)는 동일한 입력을 여러 개의 서로 다른 AI 모델에 넣고, 그 결과를 비교하는 테스트 기법이다. AI 소프트웨어에서는 모델이 얼마나 정확하게 예측(Prediction)하는지가 중요하기 때문에, 하나의 모델 결과만 보는 것이 아니라 다른 방식으로 개발된 모델들과 비교하여 신뢰성을 확인할 수 있다.

예를 들어 같은 문제를 해결하기 위해 A 모델, B 모델, C 모델을 각각 다른 알고리즘(Algorithm), 다른 개발자, 또는 다른 학습 방식으로 만든다고 가정할 수 있다. 이후 동일한 입력 데이터를 세 모델에 넣었을 때 결과가 서로 유사하거나 일관되게 나온다면, 해당 예측 결과에 대한 신뢰도를 높일 수 있다. 반대로 모델마다 결과가 크게 다르다면, 어떤 모델이 왜 다른 판단을 했는지 추가 분석이 필요하다.

변성 테스트(Metamorphic Testing)탐색적 테스트(Exploratory Testing)도 AI 소프트웨어의 블랙박스 테스트 기법에 포함될 수 있다. 변성 테스트는 정답을 명확히 알기 어려운 상황에서 입력을 변형하고, 그에 따른 출력 관계가 예상한 특성을 유지하는지 확인하는 방식이다. 탐색적 테스트는 사전에 모든 테스트 케이스를 정해두기보다, 테스터가 시스템을 사용하고 관찰하면서 새로운 결함이나 이상 동작을 찾아내는 방식이다. 이 두 기법은 다음 내용에서 더 자세히 다룰 수 있다.

정리하면, AI 소프트웨어의 블랙박스 테스트는 모델 내부 구조보다는 입력과 출력의 관계를 중심으로 수행된다. 조합 테스트는 다양한 입력 조건의 조합을 확인하는 데 사용되고, 백투백 테스트는 여러 AI 모델의 결과를 비교하여 예측의 일관성과 신뢰성을 확인하는 데 활용된다. 다만 AI 소프트웨어는 입력 조건과 파라미터가 매우 많기 때문에, 모든 조합을 테스트하기보다는 효율적인 테스트 설계가 중요하다.


변성 테스트 (Metamorphic Testing)

변성 테스트(Metamorphic Testing)는 AI 모델(AI Model)의 복잡성(Complexity)과 비결정성(Non-determinism) 때문에 예상 결과(Expected Result)를 명확하게 정하기 어려운 경우에 사용할 수 있는 테스트 기법이다. 일반적인 소프트웨어 테스트에서는 입력값(Input)에 대해 예상 결과를 미리 정하고, 실제 결과(Actual Result)와 비교하여 테스트 통과 여부를 판단한다. 하지만 AI 소프트웨어(AI Software)는 모델의 구조가 복잡하고, 경우에 따라 같은 입력이나 비슷한 입력에 대해서도 결과가 달라질 수 있어 예상 결과를 단정하기 어려운 경우가 있다.

이때 변성 테스트는 특정 입력에 대한 정확한 출력값 하나를 확인하기보다, 입력이 변화했을 때 출력이 어떤 관계(Relation)를 가져야 하는지를 기준으로 테스트한다. 즉, “입력이 이렇게 바뀌면 출력도 이런 방식으로 유지되거나 변화해야 한다”는 관계를 설정하고, AI 모델이 그 관계를 만족하는지 확인하는 방식이다.

예를 들어 이미지 분류 모델(Image Classification Model)을 생각해볼 수 있다. 원본 이미지가 고양이(Cat)라면, 이 이미지의 밝기(Brightness)를 조금 바꾸어도 본질적으로는 여전히 고양이 이미지이다. 따라서 AI 모델이 잘 만들어졌다면 밝기가 바뀐 이미지도 고양이로 분류해야 한다. 마찬가지로 고양이 이미지를 좌우 반전(Horizontal Flip)하더라도 이미지의 방향만 바뀐 것이므로, 모델은 여전히 고양이로 판단할 수 있어야 한다.

이처럼 변성 테스트에서는 원본 입력(Source Input)을 변형하여 새로운 입력(Follow-up Input)을 만들고, 두 입력에 대한 출력 사이의 관계가 적절한지 확인한다. 원본 고양이 이미지를 고양이로 분류했다면, 밝기만 바꾼 이미지나 좌우 반전한 이미지도 고양이로 분류해야 한다는 식이다. 여기서 중요한 것은 정확한 출력값 하나보다, 입력 변화에 따른 출력의 일관성(Consistency)과 관계성(Relation)을 검증하는 것이다.

자율주행 자동차(Autonomous Vehicle)에서도 변성 테스트를 적용할 수 있다. 예를 들어 자율주행차가 특정 도로를 정방향으로 안전하게 주행했다면, 같은 도로를 반대 방향으로 주행할 때도 주변 환경(Environment)을 인식하고 안전하게 주행할 수 있어야 한다. 물론 주행 방향이 바뀌면 도로 표지판, 차선, 차량 흐름 등 조건도 달라질 수 있지만, 기본적으로 AI 모델은 변화된 입력 상황에서도 적절한 주행 판단을 내려야 한다.

정리하면, 변성 테스트는 AI 소프트웨어에서 예상 결과를 정확히 정하기 어려울 때 유용한 테스트 기법이다. 입력값을 조금씩 변형하고, 그에 따른 출력값이 논리적으로 타당한 관계를 유지하는지 확인한다. 이미지 분류에서는 밝기 변경이나 좌우 반전 후에도 같은 객체로 분류되는지 확인할 수 있고, 자율주행에서는 주행 방향이나 환경 조건이 달라져도 안전한 판단을 하는지 검증할 수 있다.


탐색적 테스트 (Exploratory Testing)

탐색적 테스트(Exploratory Testing)는 AI 소프트웨어(AI Software)가 학습하지 못한 알려지지 않은 케이스(Unknown Case)를 찾아내기 위해 반복적으로 테스트를 수행하는 기법이다. AI 모델(AI Model)은 훈련 데이터(Training Data)를 기반으로 학습하지만, 현실의 모든 데이터를 전부 학습할 수는 없다. 따라서 실제 사용 환경에서는 훈련 데이터에 포함되지 않았던 새로운 상황이 나타날 수 있고, 이 경우 모델이 예측하지 못한 동작을 하거나 전혀 엉뚱한 결과를 낼 가능성이 있다.

탐색적 테스트는 이러한 알려지지 않은 케이스를 계속 찾아가는 것을 목표로 한다. 기존 테스트 결과를 활용하고, 입력 데이터(Input Data)에 대해 다양한 추출(Sampling)과 조합(Combination) 기법을 적용하면서 반복적으로 테스트를 수행한다. 즉, 미리 정해진 테스트 케이스만 실행하는 것이 아니라, 테스트 과정에서 발견된 결과를 바탕으로 새로운 테스트 케이스(Test Case)를 계속 만들어 나가는 방식이다.

예를 들어 자율주행 자동차(Autonomous Vehicle)를 테스트한다고 하면, 먼저 입력 영역(Input Domain)을 정의해야 한다. 시골길인지 도심 도로인지, 날씨가 맑은지 비가 오는지, 터널이 있는지, 앞에 고장 난 차량이 있는지, 반대편에서 차량이 오는지와 같은 조건을 정리한다. 이후 이러한 조건을 조합하여 테스트 케이스를 생성하고, 시뮬레이션(Simulation)을 통해 테스트를 수행한다.

AI 소프트웨어의 탐색적 테스트에서는 실제 환경보다 시뮬레이션 기반 테스트(Simulation-based Testing)가 중요하다. 특히 자율주행처럼 안전과 관련된 시스템에서는 알려지지 않은 케이스가 실제 사고로 이어질 수 있기 때문이다. 따라서 위험한 상황이나 예측하기 어려운 상황은 먼저 가상 환경(Virtual Environment)에서 반복적으로 실험하는 것이 안전하다.

테스트를 수행한 뒤에는 결과를 확인하고, 문제가 발견되면 수정 후 재테스트(Retest)를 진행한다. 만약 테스트 과정에서 기존에 알려지지 않았던 새로운 케이스가 발견되면, 이를 신규 테스트 케이스(New Test Case)로 추가하여 다시 테스트한다. 또한 테스트 결과의 위험도(Risk Level)를 분석하여, 위험도가 높은 상황이라면 우선적으로 추가 테스트 케이스를 만들고 검증해야 한다.

정리하면, 탐색적 테스트는 이미 알려진 케이스(Known Case)만 확인하는 것이 아니라, 알려지지 않은 케이스를 하나씩 찾아가며 테스트 범위와 커버리지(Coverage)를 넓히는 방식이다. AI 소프트웨어는 모든 상황을 미리 학습하기 어렵기 때문에, 탐색적 테스트를 통해 새로운 입력 상황과 위험한 사례를 계속 발견하고 보완하는 과정이 필요하다.


AI 소프트웨어의 화이트박스 테스트 설계 기법

(White-box Test Design Techniques for AI Software)

AI 소프트웨어(AI Software)에 대한 화이트박스 테스트(White-box Testing)는 AI 모델(AI Model)의 내부 구조를 고려하여 테스트하는 방법이다. 일반 소프트웨어의 화이트박스 테스트가 소스 코드(Source Code)의 내부 로직과 구조를 기반으로 테스트 케이스(Test Case)를 설계하는 것처럼, AI 소프트웨어에서는 모델 내부의 신경망(Neural Network) 구조와 뉴런(Neuron)의 동작을 중심으로 테스트를 수행한다.

AI 모델에서 각각의 뉴런은 일반 소프트웨어의 코드 구성 요소와 유사하게 볼 수 있다. 따라서 화이트박스 테스트에서는 테스트 데이터를 입력했을 때 모델 내부의 뉴런들이 얼마나 많이 활성화(Activation)되는지, 즉 얼마나 넓은 범위의 내부 구조가 테스트되었는지를 확인하는 것이 중요하다. 이는 일반 소프트웨어 테스트에서 문장 커버리지(Statement Coverage)나 분기 커버리지(Branch Coverage)를 높이려는 것과 비슷한 개념이다.

AI 소프트웨어의 화이트박스 테스트 설계 기법은 크게 뉴런 커버리지(Neuron Coverage), 임계점 커버리지(Threshold Coverage), 부호 변경 커버리지(Sign Change Coverage), 값 변경 커버리지(Value Change Coverage) 등으로 나눌 수 있다. 이들은 모두 AI 모델 내부의 뉴런이 어떻게 반응하고 변화하는지를 기준으로 테스트 범위를 넓히기 위한 방법이다.

가장 기본이 되는 개념은 뉴런 커버리지(Neuron Coverage)이다. 뉴런 커버리지는 테스트 입력을 통해 AI 모델 내부의 뉴런들이 얼마나 많이 활성화되었는지를 측정하는 방식이다. 이후 임계점 커버리지, 부호 변경 커버리지, 값 변경 커버리지와 같은 기법들은 뉴런 커버리지 개념을 바탕으로 조금 더 세부적인 변화나 조건을 고려하는 방식으로 확장된다.

정리하면, AI 소프트웨어의 화이트박스 테스트는 AI 모델의 내부 구조를 분석하고, 신경망 안의 뉴런들이 충분히 테스트되었는지를 확인하는 방식이다. 일반 소프트웨어에서 코드 커버리지(Code Coverage)를 높이는 것이 중요하듯이, AI 소프트웨어에서는 뉴런 커버리지와 같은 모델 내부 커버리지(Model Coverage)를 높이는 것이 중요한 테스트 목표가 된다.


신경망 구조 참고 (Neural Network Structure)

신경망(Neural Network)은 사람의 두뇌에서 뉴런(Neuron)들이 서로 연결되어 정보를 처리하는 방식에서 영감을 받아 만들어진 계산 모델(Computational Model)이다. AI 모델(AI Model)은 여러 개의 노드(Node) 또는 뉴런으로 구성되며, 이러한 뉴런들이 여러 층(Layer)으로 연결되어 입력 데이터를 처리하고 결과를 출력한다.

예를 들어 벚꽃과 배꽃을 구분한다고 생각해볼 수 있다. 사람은 과거의 경험을 바탕으로 꽃의 색, 모양, 크기, 잎의 형태 등을 보고 판단한다. 이와 비슷하게 AI 모델도 입력된 데이터를 바탕으로 특징(Feature)을 학습하고, 이를 이용해 새로운 데이터가 어떤 대상에 해당하는지 예측(Prediction)하거나 분류(Classification)한다.

신경망은 일반적으로 입력 레이어(Input Layer), 은닉 레이어(Hidden Layer), 출력 레이어(Output Layer)로 구성된다. 입력 레이어는 외부에서 데이터를 입력받는 부분이다. 이미지 분류 모델(Image Classification Model)의 경우, 이미지의 픽셀값(Pixel Value)이 입력 데이터가 될 수 있다.

은닉 레이어는 입력 레이어에서 받은 정보를 처리하고 계산하는 부분이다. 이 단계에서 AI 모델은 입력 데이터의 특징을 추출하고, 여러 계산 과정을 거쳐 출력 결과를 만들기 위한 정보를 정리한다. 은닉 레이어가 여러 개로 깊게 구성된 모델을 딥러닝 모델(Deep Learning Model)이라고 볼 수 있다.

출력 레이어는 최종 결과를 외부에 제공하는 역할을 한다. 예를 들어 꽃 이미지를 입력했을 때, 출력 레이어는 해당 이미지가 벚꽃인지, 배꽃인지와 같은 분류 결과를 제공한다. 즉, 신경망은 입력 데이터를 받아 은닉 레이어에서 계산을 수행하고, 출력 레이어를 통해 최종 판단 결과를 내는 구조로 동작한다.

정리하면, 신경망은 사람의 두뇌 구조에서 영감을 받은 AI 모델의 기본 구조이며, 입력 레이어, 은닉 레이어, 출력 레이어로 구성된다. 입력 레이어는 데이터를 받고, 은닉 레이어는 계산과 특징 추출을 수행하며, 출력 레이어는 최종 예측 결과를 제공한다.


뉴런 커버리 (Neuron Coverage)

뉴런 커버리지(Neuron Coverage)는 신경망(Neural Network) 내부의 뉴런(Neuron)이 테스트 데이터셋(Test Dataset)에 의해 얼마나 활성화되었는지를 측정하는 화이트박스 테스트(White-box Testing) 개념이다. 일반 소프트웨어에서 코드의 문장이나 분기가 얼마나 실행되었는지를 커버리지(Coverage)로 확인하듯이, AI 소프트웨어에서는 모델 내부의 뉴런이 얼마나 많이 활성화되었는지를 기준으로 테스트 범위를 확인할 수 있다.

뉴런은 입력값(Input Value)을 계산하여 활성값(Activation Value)이라는 출력값을 생성한다. 특정 입력 데이터가 들어왔을 때 어떤 뉴런은 활성화(Activation)되고, 어떤 뉴런은 거의 반응하지 않거나 비활성화(Deactivation)될 수 있다. 테스트 데이터셋을 넣었을 때 활성화되는 뉴런이 많을수록 신경망 내부의 다양한 부분이 테스트되었다고 볼 수 있다.

예를 들어 이미지 분류 모델(Image Classification Model)을 테스트할 때, 기존 데이터셋으로는 전체 23개의 뉴런 중 20개만 활성화되었다고 가정할 수 있다. 이 경우 3개의 뉴런은 아직 테스트 데이터에 의해 충분히 사용되지 않은 상태이다. 더 다양한 이미지를 추가하면 기존에 비활성화되었던 뉴런이 활성화될 수 있고, 그 결과 모델 내부의 더 넓은 부분을 테스트할 수 있다.

뉴런 커버리지는 다음과 같이 계산할 수 있다.

뉴런 커버리지(Neuron Coverage) = 활성화된 뉴런 수 / 전체 뉴런 수 × 100%

예를 들어 전체 뉴런이 23개이고, 그중 20개가 활성화되었다면 뉴런 커버리지는 20 / 23 × 100 = 86.96%가 된다. 이후 새로운 이미지를 추가하여 23개의 뉴런이 모두 활성화되었다면 뉴런 커버리지는 23 / 23 × 100 = 100%가 된다.

즉, 뉴런 커버리지는 테스트 데이터가 AI 모델 내부의 뉴런을 얼마나 폭넓게 자극했는지 확인하는 지표이다. 이를 통해 기존 테스트 데이터로는 확인하지 못했던 모델 내부 동작을 더 많이 살펴볼 수 있으며, 비활성화된 뉴런을 활성화할 수 있는 새로운 테스트 데이터를 추가하는 방식으로 테스트 범위를 넓힐 수 있다.

정리하면, AI 소프트웨어 테스트에서는 블랙박스 테스트(Black-box Testing) 관점에서 변성 테스트(Metamorphic Testing), 탐색적 테스트(Exploratory Testing) 등을 사용할 수 있고, 화이트박스 테스트 관점에서는 뉴런 커버리지(Neuron Coverage)와 같은 기법을 사용할 수 있다. 뉴런 커버리지는 AI 모델 내부 구조를 기준으로 테스트 범위를 확인하는 대표적인 방법이며, 이후 임계점 커버리지(Threshold Coverage), 부호 변경 커버리지(Sign Change Coverage), 값 변경 커버리지(Value Change Coverage)와 같은 기법으로 확장될 수 있다.


3️⃣ Virtual-based AI software testing environment

가상 기반 AI 소프트웨어 테스트 환경(Virtual-based AI Software Testing Environment)은 실제 하드웨어(Hardware)나 실제 소프트웨어 환경을 직접 사용하지 않고, 디지털 트윈(Digital Twin)이나 시뮬레이션(Simulation)을 활용하여 AI 소프트웨어(AI Software)를 테스트하는 환경을 말한다. 꼭 AI 소프트웨어에만 적용되는 개념은 아니지만, AI 소프트웨어는 현실 세계의 다양한 상황을 학습하고 판단해야 하는 경우가 많기 때문에 가상 기반 테스트 환경의 필요성이 특히 크다.

디지털 트윈(Digital Twin)은 현실 세계의 물리적 환경을 가상 공간에 동일하거나 유사하게 구현한 것을 의미한다. 예를 들어 실제 도로에 센서(Sensor), 카메라(Camera), 건물, 차량, 보행자 등이 있다면, 이러한 요소들을 가상 환경 안에 재현할 수 있다. 또한 현실에서 교통 상황이나 주변 환경이 변하면, 가상 환경에서도 그 변화를 반영하여 실제와 비슷한 조건을 만들 수 있다. 현실 세계와 가상 세계를 서로 대응시키는 개념이기 때문에 ‘트윈(Twin)’이라는 표현이 사용된다.

이러한 가상 환경에서는 자율주행 자동차(Autonomous Vehicle), 드론(Drone), 물류 시스템(Logistics System), 항만 시스템(Port System), 군사 훈련 시스템(Military Training System) 등 다양한 AI 소프트웨어를 테스트할 수 있다. 실제 도로, 공중, 항만, 물류 창고, 훈련장을 그대로 사용하지 않고도 가상으로 환경을 구성한 뒤, 그 안에서 AI 모델이 어떻게 판단하고 동작하는지 확인할 수 있다.

가상 기반 테스트 환경이 필요한 가장 큰 이유는 현실 세계에서 테스트하기 어려운 제약이 많기 때문이다. 예를 들어 자율주행 자동차의 사고 상황이나 위험한 도로 상황을 실제로 일부러 재현하는 것은 매우 위험하다. 또한 현실에서는 비가 오는 날, 안개가 낀 날, 터널을 빠져나오자마자 장애물이 있는 상황, 갑자기 보행자가 뛰어나오는 상황처럼 다양한 엣지 케이스(Edge Case)를 모두 직접 테스트하기 어렵다.

가상 환경에서는 이러한 위험한 시나리오(Scenario)나 예외적인 상황을 비교적 안전하게 재현할 수 있다. 사고 위험이 큰 상황도 실제 사람이나 장비를 위험에 빠뜨리지 않고 테스트할 수 있으며, 같은 조건을 여러 번 반복해서 실행할 수도 있다. 이를 통해 AI 소프트웨어가 다양한 환경에서도 안정적으로 판단하는지, 위험 상황에서 적절하게 반응하는지 확인할 수 있다.

또한 가상 테스트 환경은 시간과 비용을 줄이는 데도 도움이 된다. 현실에서 여러 환경을 직접 구성하려면 많은 비용과 시간이 필요하지만, 가상 환경을 한 번 구축해두면 다양한 조건을 바꾸어가며 반복적으로 테스트할 수 있다. 여러 테스트를 병렬적으로 동시에 수행할 수도 있기 때문에 전체 테스트 일정과 비용을 줄이는 효과가 있다.

정리하면, 가상 기반 AI 소프트웨어 테스트 환경은 현실 세계를 디지털 트윈이나 시뮬레이션으로 구현하고, 그 안에서 AI 소프트웨어를 안전하고 반복적으로 테스트하는 환경이다. 특히 AI 소프트웨어는 예측하기 어려운 상황, 위험한 시나리오, 다양한 엣지 케이스에 대응해야 하므로, 가상 환경을 활용한 테스트가 매우 중요하다.

More from this blog

My dev journey

144 posts