---
name: app-comprehensive-test-generator
description: 사용자 흐름 및 엣지 케이스 테스트 시나리오를 생성하고 실행하여 QA 리포트를 작성합니다. 테스트 생성, QA, 테스트 케이스 작성 요청 시 활성화됩니다.
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
---

# App Comprehensive Test Generator

애플리케이션의 종합적인 테스트 시나리오를 생성하고 QA 리포트를 작성하는 스킬입니다.

## 기능

### 테스트 유형
- **유닛 테스트**: 개별 함수/메서드 테스트
- **통합 테스트**: 모듈 간 상호작용 테스트
- **E2E 테스트**: 사용자 시나리오 기반 전체 흐름 테스트
- **엣지 케이스 테스트**: 경계값, 예외 상황 테스트

### 분석 항목
- 코드 구조 분석
- 함수 시그니처 추출
- 의존성 파악
- 비즈니스 로직 이해

### 생성 테스트 케이스
- Happy Path (정상 흐름)
- Error Cases (오류 상황)
- Boundary Values (경계값)
- Null/Empty Inputs (빈 입력)
- Concurrent Operations (동시성)
- Performance Scenarios (성능)

## 워크플로우

1. 코드베이스 스캔 및 분석
2. 테스트 대상 식별
3. 테스트 시나리오 설계
4. 테스트 코드 생성
5. 테스트 실행
6. QA 리포트 작성

## 테스트 템플릿

### Jest (JavaScript/TypeScript)
```javascript
describe('ModuleName', () => {
  describe('functionName', () => {
    // Happy Path
    test('should return expected result with valid input', () => {
      const result = functionName(validInput);
      expect(result).toEqual(expectedOutput);
    });

    // Edge Cases
    test('should handle empty input', () => {
      expect(() => functionName('')).toThrow();
    });

    test('should handle null input', () => {
      expect(() => functionName(null)).toThrow();
    });

    // Boundary Values
    test('should handle minimum value', () => {
      const result = functionName(MIN_VALUE);
      expect(result).toBeDefined();
    });

    test('should handle maximum value', () => {
      const result = functionName(MAX_VALUE);
      expect(result).toBeDefined();
    });
  });
});
```

### pytest (Python)
```python
import pytest
from module import function_name

class TestFunctionName:
    def test_valid_input(self):
        """Happy path with valid input"""
        result = function_name(valid_input)
        assert result == expected_output

    def test_empty_input(self):
        """Should raise error for empty input"""
        with pytest.raises(ValueError):
            function_name('')

    def test_none_input(self):
        """Should raise error for None input"""
        with pytest.raises(TypeError):
            function_name(None)

    @pytest.mark.parametrize("input,expected", [
        (MIN_VALUE, expected_min),
        (MAX_VALUE, expected_max),
    ])
    def test_boundary_values(self, input, expected):
        """Boundary value tests"""
        assert function_name(input) == expected
```

## QA 리포트 구조

```markdown
# QA 테스트 리포트

## 요약
- 총 테스트 케이스: N개
- 통과: N개 (%)
- 실패: N개 (%)
- 스킵: N개 (%)

## 테스트 범위
| 모듈 | 테스트 수 | 통과 | 실패 | 커버리지 |
|------|----------|------|------|----------|
| auth | 15 | 14 | 1 | 85% |
| api | 23 | 23 | 0 | 92% |

## 실패한 테스트
### auth.test.js - loginUser
- **시나리오**: 만료된 토큰으로 로그인
- **예상**: UnauthorizedError
- **실제**: TimeoutError
- **원인 분석**: 토큰 검증 로직 누락

## 권장 조치
1. auth 모듈 토큰 검증 로직 추가
2. 타임아웃 처리 개선
```

## 사용 예시

```
이 프로젝트의 테스트 케이스를 생성해줘
user 모듈의 종합 테스트를 만들어줘
엣지 케이스 테스트를 추가해줘
```

## 출처
Original skill from skills.cokac.com
