합성 데이터 생성을 위한 프롬프트 엔지니어링
LLM을 사용하여 합성 데이터를 생성하는 것은 QA 팀에게 인기 있는 전략입니다. 단 몇 초 만에 수백 개의 복잡한 레코드를 생성할 수 있습니다.
하지만 일반적인 프롬프트는 함정에 빠지기 쉽습니다. LLM에게 "테스트 사용자 50명을 생성해줘"라고 요청하면, 예측 가능하고 반복적인 데이터가 나옵니다. 이는 테스트 커버리지가 충분하다는 착각을 불러일으킵니다. 중요한 에지 케이스(edge cases)와 비즈니스 로직을 놓친 채, "정상적인 경로(happy path)"만 테스트하는 수많은 레코드를 얻게 될 뿐입니다.
이를 해결하려면 요청자(requester)에서 오케스트레이터(orchestrator)로 거듭나야 합니다. 프롬프트 엔지니어링에 테스트 원칙을 직접 적용해야 합니다.
데이터 품질을 높이기 위해 다음 세 가지 패턴을 사용하세요.
1. 동등 분할 및 경계값 분석 데이터를 단순히 요청하는 대신, LLM이 먼저 테스트 클래스를 매핑하도록 강제하세요. Chain-of-Thought(사고의 사슬) 프롬프팅을 사용합니다.
- 역할을 시니어 QA 엔지니어로 정의합니다.
- 구체적인 비즈니스 규칙(예: 쿠폰 한도 또는 최소 결제 금액)을 제공합니다.
- LLM에게 모든 유효 및 유효하지 않은 동등 클래스를 표로 나열하도록 지시합니다.
- 식별된 각 시나리오당 정확히 하나의 JSON 페이로드를 요구합니다.
이 방식은 중복된 레코드로 공간을 낭비하지 않으면서, $99.99 대 $100.00와 같은 정확한 전환 지점을 테스트할 수 있게 해줍니다.
2. 상태 전이 테스트 결제 흐름이나 주문 관리와 같은 시스템의 경우, 데이터는 라이프사이클의 다양한 단계를 반영해야 합니다.
- 가능한 모든 상태 목록을 제공합니다(예: Created, Paid, Shipped, Delivered).
- LLM에게 상태 전이 행렬(State Transition Matrix)을 포함하는 CSV를 생성하도록 요청합니다.
- 세 가지 유형의 흐름을 요구합니다: 선형(유효), 예외(편차), 위반(유효하지 않은 전이).
- 고유한 상태 조합당 하나의 행만 생성하도록 규칙을 설정합니다.
이를 통해 중복 레코드를 방지하고 네거티브 테스트 케이스(negative test cases) 생성을 유도할 수 있습니다.
3. 분산 제어 및 네거티브 프롬프팅 LLM은 종종 동일한 지역이나 연령대를 사용하는 등 균일한 데이터를 생성합니다. 이를 방지하기 위해 네거티브 프롬프팅(Negative Prompting)을 사용하세요.
- 분포에 대한 명시적인 요구 사항을 설정합니다(예: 특정 연령대 또는 지리적 영역).
- "PROHIBITIONS(금지 사항)" 섹션을 추가합니다.
- "John Doe"와 같은 일반적인 이름을 명시적으로 금지합니다.
- 변수의 동일한 조합이 반복되는 것을 금지합니다.
- 순차적이거나 동일한 ID 번호를 금지합니다.
이를 통해 편향을 제거하고 백엔드가 다양하고 현실적인 데이터를 처리할 수 있도록 보장합니다.
AI의 속도는 데이터에 의도가 담겨 있을 때에만 가치를 제공합니다. QA 전문가로서 여러분의 역할은 이러한 생성형 모델을 제어하는 제약 조건을 코드로 구현하는 것입니다.
선택 사항 학습 커뮤니티: https://t.me/GyaanSetuAi