생성형 AI 테스팅
테스트에서 AI활용 분야에는 테스트 분석, 설계와 구현, 리그레션 테스트, 모니터링과 제어 등이 있다.
프롬프트는 테스트 활용에 구조화하고 여러 기법과 출력 평가가 필요하다.
이후 프롬프트를 천천히 개선해나간다.
업무 순환에 발생하는 것들은 시간 / 리소스 부족, 제약적인 테스팅과 챌린지와 최소한의 투자가 있다.
기준 챌린지 도전에 제약적인 테스팅로 인해 챌린지 해결에 어려움이 있다. 제약적인 테스팅이 발생한 이유는 시간과 리소스가 부족하였다. 생성형 AI 사용해 시간과 리소스를 확보하고 제약적인 테스팅을 없애거나 줄여야 다른 챌린지를 도전할 수 있다.
생성형 AI 기술적인 구성 요소
토크나이제이션, 맥락창, 비결정 동작, 임베딩, 트랜스포머 구성으로 나누어져 있다.
LLM의 종류
파운데이션 모델, 명령어 튜닝, 추론 종류가 있다.
- 파운데이션은 훈련된 데이터셋으로 이루어진 인공지능이다.
- 사람의 지시에 반응하여 최적화된 모델
- 추론 모델은 모방하는 능력을 향상 시켰다.
튜닝 모델 활용 예로 딥리서치나 웹검색 기준으로 검색한 사람을 모방하여 학습한 내용을 보여준다.
멀티모달 LLM의 특징
- 멀티 데이터 처리. 데이터를 소리나 비디오 텍스트를 다양하게 처리한다.
- 데이터 관계 학습. 다양한 데이터셋 훈련하여 데이터 간 관계를 학습한다.
- 토크나이제이션 맞춤 조정. 각 데이터 유형에 맞는 토크나이제이션을 각각 조정하여 처리하여 최적화한다.
공개된 LLM 웹 서비스의 특징은 아래와 같이 제공하고 있다.
- 퍼플렉시티: 출처 확인
- 제미나이: 이미지 검색, 코드 분석
- 클로드: 구조 도식화에 특화
- ChatGPT: 다용도.
프롬프트 구조
- 구조화된 프롬프트: 역할, 맥락, 지침, 입력 데이터, 제약 사항, 출력 형식 이 있다.
- 프롬프트 엔지니어링
- 프롬프트 체이닝: 세션 기준으로 대화를 작업 단위로 나누고 이어서 나가는 것이다. 논리적으로 풀어나간다.
- 퓨샷 프롬프팅: 형식에 맞춰 규격에 맞춰서 출력하도록 하는 것이다. 패턴으로 이어나간다.
- 메타 프롬프팅: AI가 구주화된 프롬프트를 어떻게 해야하는 것을 알려준다.
프롬프트 종류
- 시스템 프롬프트: 가드레일, 특정 분야의 정보만 담는 것(검열, 의료 분야)
- 사용자 프롬프트: 사용자가 실제 입력 및 질문하는 것
실습
제미니에게 사전 설명과 함께 맥락 지침 등 제공하여 보고서를 만들어보자
맥락과 지침을 미리 제공하였고, QA 테스트 케이스 결과와 함께 HTML 보고서를 만들어봤다.
...
수행한 테스트의 전체 결과 요약입니다. HTML 보고서로 만들어줘
[테스트 결과 요약]
총 테스트 케이스: 250건
성공: 220건
실패: 30건
주요 버그 영역:
(위의 동일한 결과를 참고)
테스트 기간: 2주<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>리그레션 테스트 보고서 - 20251221</title>
<style>
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: #333; margin: 0; padding: 20px; background-color: #f4f7f9; }
.container { max-width: 1000px; margin: auto; background: white; padding: 40px; border-radius: 8px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); }
header { border-bottom: 2px solid #2c3e50; padding-bottom: 20px; margin-bottom: 30px; }
h1 { color: #2c3e50; margin: 0; font-size: 24px; }
.meta-info { display: flex; justify-content: space-between; font-size: 0.9em; color: #666; margin-top: 10px; }
.summary-cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; margin-bottom: 30px; }
.card { padding: 20px; border-radius: 8px; text-align: center; color: white; }
.card.total { background-color: #34495e; }
.card.pass { background-color: #27ae60; }
.card.fail { background-color: #e74c3c; }
.card.rate { background-color: #f39c12; }
.card-value { font-size: 28px; font-weight: bold; display: block; }
.card-label { font-size: 14px; opacity: 0.9; }
h2 { border-left: 5px solid #2c3e50; padding-left: 10px; font-size: 18px; margin-top: 40px; color: #2c3e50; }
table { width: 100%; border-collapse: collapse; margin-top: 15px; background: white; }
th, td { border: 1px solid #ddd; padding: 12px; text-align: left; }
th { background-color: #f8f9fa; color: #333; }
.status-badge { padding: 4px 8px; border-radius: 4px; font-size: 12px; font-weight: bold; text-transform: uppercase; }
.status-fail { background-color: #ffdce0; color: #af1921; }
.priority-1 { color: #e74c3c; font-weight: bold; }
.analysis-box { background-color: #fff3cd; border: 1px solid #ffeeba; padding: 20px; border-radius: 8px; margin-top: 15px; }
.conclusion { background-color: #d4edda; border: 1px solid #c3e6cb; padding: 20px; border-radius: 8px; margin-top: 30px; font-weight: bold; }
.recommendation { list-style-type: none; padding-left: 0; }
.recommendation li::before { content: "✔️"; margin-right: 10px; }
</style>
</head>
<body>
<div class="container">
<header>
<h1>리그레션 테스트 보고서 (Regression Test Report)</h1>
<div class="meta-info">
<span><strong>작성일:</strong> 2025-12-21</span>
<span><strong>작성자:</strong> QA팀</span>
<span><strong>빌드 버전:</strong> release_2025.12.15</span>
</div>
</header>
<div class="summary-cards">
<div class="card total">
<span class="card-value">15</span>
<span class="card-label">총 테스트 케이스</span>
</div>
<div class="card pass">
<span class="card-value">10</span>
<span class="card-label">성공 (Pass)</span>
</div>
<div class="card fail">
<span class="card-value">5</span>
<span class="card-label">실패 (Fail)</span>
</div>
<div class="card rate">
<span class="card-value">66.7%</span>
<span class="card-label">성공률</span>
</div>
</div>
<h2>1. 테스트 환경</h2>
<table>
<tr>
<th>브라우저 / OS</th>
<td>Chrome 141.0 / Windows 11</td>
<th>데이터베이스</th>
<td>Stage DB (v1.3.5)</td>
</tr>
</table>
<h2>2. 결함 및 이슈 분석 (우선순위순)</h2>
<table>
<thead>
<tr>
<th>ID</th>
<th>관련 기능</th>
<th>결함 내용</th>
<th>심각도</th>
<th>우선순위</th>
</tr>
</thead>
<tbody>
<tr>
<td>ISSUE-03</td>
<td>결제 시스템</td>
<td>카드 잔액 부족임에도 결제 완료됨</td>
<td><span class="priority-1">치명적</span></td>
<td class="priority-1">1</td>
</tr>
<tr>
<td>ISSUE-04</td>
<td>계정 관리</td>
<td>비활성 계정 로그인 허용 (신규)</td>
<td>높음</td>
<td>2</td>
</tr>
<tr>
<td>ISSUE-02</td>
<td>장바구니</td>
<td>간헐적으로 상품 추가 실패</td>
<td>높음</td>
<td>3</td>
</tr>
<tr>
<td>ISSUE-05</td>
<td>주문 관리</td>
<td>취소된 주문의 중복 재취소 허용 (신규)</td>
<td>높음</td>
<td>4</td>
</tr>
<tr>
<td>ISSUE-01</td>
<td>회원가입</td>
<td>이메일 형식 유효성 검증 누락</td>
<td>중간</td>
<td>5</td>
</tr>
</tbody>
</table>
<h2>3. 주요 이슈 상세 분석</h2>
<div class="analysis-box">
<strong>주요 실패 원인:</strong> 비즈니스 로직 검증 체계 부족 및 상태 전이(State Machine) 관리 미흡<br><br>
<strong>ISSUE-03 (결제):</strong> 승인/거절 코드 재검토 및 트랜잭션 롤백 보장 필수. 멱등키 적용 권장.<br>
<strong>ISSUE-05 (주문):</strong> 중복 요청 시 HTTP 409 반환 및 DB Optimistic Lock 적용 필요.
</div>
<h2>4. 개선 제안 및 향후 전략</h2>
<ul class="recommendation">
<li><strong>결제 모듈 강화:</strong> 승인/거절 코드 처리 재점검 및 트랜잭션 무결성 확보</li>
<li><strong>계정 검증 강화:</strong> 세션 발급 전 계정 상태(활성/비활성) 확인 프로세스 추가</li>
<li><strong>상태 관리 체계화:</strong> 주문 상태 머신 도입을 통한 불법적인 상태 전이 차단</li>
<li><strong>검증 일관화:</strong> 프론트엔드와 백엔드 공통 Validation Schema 적용</li>
</ul>
<div class="conclusion">
📢 최종 결론: 결제 및 인증 영역의 리스크가 매우 높으므로 배포를 보류합니다.<br>
2025.12.25 예정된 Hotfix 스프린트에서 우선순위 1, 2번 이슈 수정을 강력히 권장합니다.
</div>
</div>
</body>
</html>실제 보고서는 다음과 같이 생겼다.
제미니 특징으로 정교하게 다듬어진 UI / UX 형식의 보고서를 쉽게 내려받을 수 있었다.