> For the complete documentation index, see [llms.txt](https://vladislaveremeev.gitbook.io/qa_bible/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vladislaveremeev.gitbook.io/qa_bible/ai-v-testirovanii/prompt-driven-development.md).

# Prompt-Driven Development

**Prompt-Driven Development (PDD)** — подход, при котором промпт становится полноценным артефактом разработки наравне с кодом: он версионируется, ревьюится, тестируется и поддерживается командой. Промпт рассматривается не как случайный вопрос к AI, а как спецификация поведения системы или рабочего процесса.

***

## Ключевая идея

В традиционной разработке артефакты — это код, тесты, документация. В Prompt-Driven Development к ним добавляются:

* **Промпты** — инструкции для AI, управляющие поведением системы или рабочим процессом
* **Prompt Templates** — параметризованные шаблоны для типовых задач
* **Prompt Tests** — наборы входных данных с ожидаемыми выводами

Если ваш продукт использует AI (чат-бот, генерация контента, анализ данных), то промпты — это часть вашего кода. Изменение промпта меняет поведение системы так же, как изменение кода.

***

## Промпт как артефакт

### Традиционный подход к промптам

```
Разработчик придумывает промпт → вставляет в код → деплоит
Через месяц: никто не помнит, почему промпт именно такой
```

### Prompt-Driven Development подход

```
Промпт создаётся как артефакт → хранится в репозитории
→ проходит code review → тестируется на наборе кейсов
→ имеет changelog → версионируется вместе с кодом
```

### Структура промпта как артефакта

```markdown
---
id: generate-test-cases-v2
version: 2.1.0
author: qa-team
last-updated: 2025-03-15
tags: [test-design, qa]
---

# Промпт: Генерация тест-кейсов

## System
Ты — старший QA-инженер...

## User Template
Требование: {{requirement}}
Контекст системы: {{system_context}}
Тип тестирования: {{test_type}}

## Expected Output Format
[описание формата]

## Test Cases
- Input: [пример 1] → Expected: [ожидаемый вывод 1]
- Input: [пример 2] → Expected: [ожидаемый вывод 2]

## Changelog
- 2.1.0: Добавлены негативные сценарии в формат вывода
- 2.0.0: Переход на Given/When/Then формат
- 1.0.0: Начальная версия
```

***

## Артефакты Prompt-Driven Development

### Prompt Library (библиотека промптов)

Коллекция проверенных промптов для типовых задач команды. Структурируется по доменам:

```
prompts/
├── qa/
│   ├── test-case-generation.md
│   ├── bug-report-analysis.md
│   ├── regression-scope.md
│   └── risk-assessment.md
├── development/
│   ├── code-review.md
│   ├── refactoring.md
│   └── documentation.md
├── product/
│   ├── user-story-refinement.md
│   └── acceptance-criteria.md
└── REGISTRY.md
```

### Prompt Templates

Параметризованные промпты с переменными под конкретные контексты:

```markdown
Проанализируй {{artifact_type}} и найди:

1. {{primary_concern}} (критично)
2. {{secondary_concern}} (важно)

Артефакт для анализа:
{{artifact_content}}

Контекст:
- Продукт: {{product_name}}
- Версия: {{version}}
- Технологии: {{tech_stack}}

Формат ответа: {{output_format}}
```

Использование шаблона:

```python
prompt = template.render(
    artifact_type="REST API endpoint",
    primary_concern="security vulnerabilities",
    secondary_concern="error handling",
    artifact_content=code,
    product_name="Payment Service",
    version="3.2.1",
    tech_stack="Python FastAPI, PostgreSQL",
    output_format="markdown checklist"
)
```

### Prompt Tests (тесты промптов)

Набор входных данных с ожидаемыми выводами для верификации промпта:

```yaml
# test-case-generation.tests.yaml
prompt_id: generate-test-cases-v2

test_cases:
  - name: "Простая форма логина"
    input:
      requirement: "Форма входа с полями email и пароль"
      system_context: "Web SPA, REST API бэкенд"
      test_type: "функциональное"
    expected:
      min_test_cases: 10
      required_types: [positive, negative, boundary]
      required_coverage: [empty_fields, invalid_email, wrong_password, sql_injection]

  - name: "API endpoint с пагинацией"
    input:
      requirement: "GET /users?page=1&limit=10"
    expected:
      min_test_cases: 8
      required_coverage: [page_out_of_range, negative_limit, zero_limit]
```

***

## Тестирование промптов

Промпты нуждаются в тестировании так же, как код. Это один из ключевых постулатов PDD.

### Типы тестов

#### 1. Smoke Tests

Базовая проверка: промпт работает и возвращает ответ в правильном формате.

#### 2. Output Validation Tests

Проверка соответствия вывода ожидаемому формату и содержанию:

* Наличие обязательных элементов
* Соответствие структуры
* Отсутствие запрещённого контента

#### 3. Regression Tests

Проверка, что изменение промпта не ухудшило результаты на эталонных кейсах.

#### 4. Adversarial Tests

Проверка поведения при нетипичных входных данных:

* Пустой ввод
* Противоречивые инструкции
* Очень большой объём данных
* Ввод на другом языке

#### 5. Stability Tests

Проверка воспроизводимости: один и тот же промпт при temperature=0 должен давать идентичные или очень близкие результаты.

{% hint style="warning" %}
Обновление версии AI-модели — это потенциальная регрессия промптов. При смене модели обязательно прогоняйте полный набор prompt tests.
{% endhint %}

***

## Версионирование и CI/CD для промптов

### Версионирование

Промпты в репозитории — с semantic versioning:

```
MAJOR.MINOR.PATCH

MAJOR: изменение, меняющее формат вывода (breaking change)
MINOR: улучшение качества без изменения формата
PATCH: мелкая правка формулировки
```

### CI/CD пайплайн для промптов

```yaml
# .github/workflows/prompt-tests.yml
on:
  pull_request:
    paths: ['prompts/**']

jobs:
  test-prompts:
    steps:
      - name: Run prompt tests
        run: python -m pytest tests/prompts/ -v

      - name: Check output format
        run: python scripts/validate_prompt_outputs.py

      - name: Regression check
        run: python scripts/compare_with_baseline.py
```

***

## Применение в QA

### QA-процессы, которые выигрывают от PDD

**Генерация тест-кейсов:** Стандартизированный промпт гарантирует одинаковое качество и формат независимо от того, кто его использует.

**Анализ баг-репортов:** Промпт для классификации дефектов, определения severity, выявления корневых причин.

**Ревью требований:** Промпт, ищущий противоречия, неполноту, нетестируемые требования.

**Генерация регрессионного scope:** Промпт, определяющий зоны риска по описанию изменений.

**Анализ тест-покрытия:** Промпт, оценивающий полноту тест-кейсов по требованиям.

### Пример: промпт для ревью требований

```markdown
## Роль
Ты — опытный QA-аналитик, проводящий ревью требований перед тест-дизайном.

## Задача
Проанализируй следующее требование и найди:

**Критические проблемы (блокируют тест-дизайн):**
- Противоречия между частями требования
- Отсутствующие критерии приёмки
- Нетестируемые формулировки («система должна быть быстрой»)

**Важные проблемы (требуют уточнения):**
- Неопределённые граничные условия
- Неясное поведение в ошибочных сценариях
- Отсутствие примеров

**Улучшения:**
- Предложения по улучшению тестируемости требования

## Требование
{{requirement_text}}

## Формат ответа
Markdown с разделами по типам проблем.
Для каждой проблемы: цитата из требования → описание проблемы → вопрос команде.
```

***

## Риски и ограничения

### Prompt Lock-in

Команда становится зависимой от конкретной формулировки промпта. Изменение модели или бизнес-контекста требует ревью всей библиотеки промптов.

### Накладные расходы

Ведение библиотеки промптов, написание тестов, проведение ревью — это реальная работа. PDD оправдан, когда промпты используются регулярно и от их качества зависит рабочий процесс.

### Недетерминированность

AI-модели недетерминированы при temperature > 0. Тесты промптов должны допускать некоторую вариативность в выводе — нельзя требовать байт-в-байт совпадения.

***

## PDD vs другие подходы

| Параметр          | PDD                              | Ad-hoc промптинг | Context Engineering |
| ----------------- | -------------------------------- | ---------------- | ------------------- |
| Стандартизация    | Высокая                          | Отсутствует      | Средняя             |
| Воспроизводимость | Высокая                          | Низкая           | Высокая             |
| Тестирование      | Структурировано                  | Интуитивно       | Структурировано     |
| Накладные расходы | Высокие                          | Минимальные      | Средние             |
| Применимость      | Команды, активно использующие AI | Разовые задачи   | AI-first продукты   |

***

## Источники

* [Anthropic — Prompt Engineering Guide](https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview)
* [OpenAI — Prompt Engineering Best Practices](https://platform.openai.com/docs/guides/prompt-engineering)
* [PromptFlow — Microsoft](https://github.com/microsoft/promptflow) — инструмент для тестирования и CI/CD промптов
