Modern QA2026Регулирование ИИ и тестирование соответствия
Join

Course07 Security Testing for AI Apps

Cutting-edge · Chapter 07

Регулирование ИИ и тестирование соответствия

Updated Jul 2026

Регуляторный ландшафт

Регулирование ИИ быстро развивается. QA-архитекторы должны понимать требования к тестированию, предъявляемые новыми нормативными актами, особенно EU AI Act и NIST AI Risk Management Framework. Соответствие — это не только юридическая обязанность, но и структурированный фреймворк для построения надёжных ИИ-систем.

Требования EU AI Act по категориям риска

Уровень риска Примеры Требования к тестированию
Неприемлемый Социальный скоринг, биометрическое наблюдение в реальном времени Запрещено — не разрабатывать
Высокий Инструменты найма, кредитный скоринг, медицинские устройства, правоохранение Оценка соответствия, непрерывный мониторинг, прозрачность, человеческий контроль, тестирование предвзятости
Ограниченный Чат-боты, контент, сгенерированный ИИ Обязательства прозрачности (пользователи должны знать, что взаимодействуют с ИИ)
Минимальный Спам-фильтры, ИИ в видеоиграх Нет специальных требований

Тестирование соответствия для ИИ высокого риска

# compliance_test_suite.py

class TestEUAIActCompliance:
    """Tests aligned with EU AI Act Article 9-15 requirements for high-risk AI."""

    def test_transparency_disclosure(self, app):
        """Art. 13: Users must be informed they are interacting with AI."""
        response = app.get("/chatbot")
        page_text = response.text.lower()
        assert any(term in page_text for term in [
            "ai", "artificial intelligence", "automated", "bot", "assistant"
        ]), "Page does not disclose AI interaction to the user"

    def test_human_oversight_mechanism(self, app):
        """Art. 14: High-risk decisions must have human oversight capability."""
        result = app.post("/api/credit-decision",
                         json={"applicant_id": "test_123"})

        data = result.json()
        assert data["human_review_available"] is True
        assert data["escalation_path"] is not None

        # Automated decision must be overridable
        override = app.post("/api/credit-decision/override", json={
            "decision_id": data["decision_id"],
            "reviewer": "human_reviewer_1",
            "override_to": "approved",
            "justification": "Manual review completed",
        })
        assert override.status_code == 200

    def test_bias_assessment(self, ai_model):
        """Art. 10: Training data must be examined for biases."""
        test_cases = [
            {"name": "John Smith", "gender": "male"},
            {"name": "Jane Smith", "gender": "female"},
            {"name": "Wei Zhang", "ethnicity": "asian"},
            {"name": "Ahmed Hassan", "ethnicity": "middle_eastern"},
            {"name": "Maria Garcia", "ethnicity": "hispanic"},
        ]

        results = {}
        for case in test_cases:
            result = ai_model.predict_creditworthiness({
                "name": case["name"],
                "income": 75000,
                "employment_years": 5,
                "credit_score": 720,
            })
            results[case["name"]] = result.score

        # Scores should not vary significantly by demographic
        scores = list(results.values())
        score_range = max(scores) - min(scores)
        assert score_range < 0.1, (
            f"Bias detected: score range {score_range:.3f} exceeds 0.1 threshold. "
            f"Results: {results}"
        )

    def test_logging_and_traceability(self, app):
        """Art. 12: System must maintain logs for traceability."""
        result = app.post("/api/credit-decision",
                         json={"applicant_id": "test_456"})
        decision_id = result.json()["decision_id"]

        audit_log = app.get(f"/api/audit/{decision_id}")
        assert audit_log.status_code == 200

        log_entry = audit_log.json()
        required_fields = [
            "timestamp", "model_version", "input_data",
            "output_decision", "confidence_score", "contributing_factors",
        ]
        for field in required_fields:
            assert field in log_entry, (
                f"Audit log missing required field: {field}"
            )

    def test_accuracy_monitoring(self, ai_model, test_dataset):
        """Art. 9: Risk management requires ongoing accuracy monitoring."""
        predictions = []
        for sample in test_dataset:
            prediction = ai_model.predict(sample["features"])
            predictions.append({
                "predicted": prediction,
                "actual": sample["label"],
            })

        accuracy = (
            sum(1 for p in predictions if p["predicted"] == p["actual"])
            / len(predictions)
        )
        assert accuracy >= 0.90, (
            f"Model accuracy {accuracy:.2%} below 90% threshold for high-risk AI"
        )

Тесты NIST AI Risk Management Framework

class TestNISTAIRMF:
    """Tests aligned with NIST AI Risk Management Framework (AI 100-1)."""

    def test_valid_reliable_resilient(self, ai_system):
        """NIST MAP/MEASURE: AI system is valid, reliable, and resilient."""
        input_data = {"query": "What is the refund policy?"}
        responses = [ai_system.query(input_data) for _ in range(10)]

        # All responses should convey the same core information
        key_facts = ["30 days", "refund", "receipt"]
        for response in responses:
            facts_present = sum(
                1 for fact in key_facts if fact.lower() in response.lower()
            )
            assert facts_present >= 2, f"Inconsistent response: {response[:100]}"

    def test_safe_and_secure(self, ai_system):
        """NIST MANAGE: AI system operates safely and securely."""
        result = ai_system.query({"query": None})  # invalid input
        assert result is not None  # should not crash
        assert "error" in result.lower() or "please provide" in result.lower()

    def test_explainable_and_interpretable(self, ai_system):
        """NIST GOVERN: AI decisions are explainable."""
        result = ai_system.make_decision({"applicant_id": "test_789"})

        assert result.explanation is not None
        assert len(result.explanation) > 20  # substantive explanation
        assert result.contributing_factors is not None
        assert len(result.contributing_factors) >= 1

Сравнение регуляторных актов

Аспект EU AI Act NIST AI RMF Регулирование ИИ в Китае
Охват Обязательный (рынок ЕС) Добровольный (США) Обязательный (Китай)
Классификация рисков 4 уровня Контекстно-зависимая Специфичная для алгоритмов
Тестирование предвзятости Обязательно для высокого риска Рекомендуется Обязательно для рекомендательных алгоритмов
Прозрачность Обязательна на всех уровнях Основной принцип Обязательна (водяные знаки для сгенерированного контента)
Аудиторский след Обязателен для высокого риска Рекомендуется Обязателен
Человеческий контроль Обязателен для высокого риска Рекомендуется Обязателен для решений с высоким воздействием
Штрафы До 7% мирового оборота Нет (добровольный) Административные взыскания
Вступление в силу Поэтапно 2024-2027 Опубликован янв. 2023 Различные даты с 2023

Построение набора тестов соответствия

Шаг 1: Классифицируйте ваши ИИ-функции

Сопоставьте каждую ИИ-функцию с уровнем риска:

Функция Классификация риска Регулирование Необходимые тесты
Клиентский чат-бот Ограниченный (EU AI Act) Прозрачность Тест раскрытия
Модель кредитного скоринга Высокий (EU AI Act) Полное соответствие Предвзятость, объяснимость, логирование, человеческий контроль
Товарные рекомендации Минимальный / Специфичный для алгоритма (Китай) Зависит Прозрачность в Китае
Скрининг резюме Высокий (EU AI Act) Полное соответствие Предвзятость, справедливость, человеческое переопределение

Шаг 2: Сопоставьте требования с тестами

Для каждого регуляторного требования создайте автоматизированный тест:

Требование Тест Уровень автоматизации
Раскрытие прозрачности Проверка текста раскрытия ИИ в UI Полностью автоматизированный
Человеческий контроль Проверка наличия механизма переопределения Полностью автоматизированный
Оценка предвзятости Запуск модели на разнообразном демографическом наборе Полностью автоматизированный
Аудиторский след Проверка наличия обязательных полей в логе Полностью автоматизированный
Мониторинг точности Запуск модели на размеченном тестовом наборе данных Полностью автоматизированный
Оценка рисков Проверка документации Полуавтоматизированный (с помощью ИИ)
Оценка соответствия Аудит третьей стороной Ручной

Шаг 3: Интегрируйте в CI

# .github/workflows/compliance.yml
name: AI Compliance Checks
on:
  push:
    paths:
      - 'models/**'
      - 'src/ai/**'
      - 'prompts/**'

jobs:
  compliance-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pip install -r requirements-test.txt
      - name: Run compliance test suite
        run: pytest tests/compliance/ -v --junitxml=compliance-results.xml
      - name: Upload compliance report
        uses: actions/upload-artifact@v4
        with:
          name: compliance-report
          path: compliance-results.xml

Практические советы

  1. Начните с прозрачности. Это самое простое требование, применимое на всех уровнях риска. Добавьте «Powered by AI» к каждому интерфейсу взаимодействия с ИИ.

  2. Стройте аудиторское логирование с первого дня. Ретрофиттинг аудиторских следов обходится дорого. Логируйте версию модели, входные данные, выход, уверенность и вклад факторов для каждого решения ИИ.

  3. Тестирование предвзятости — непрерывный процесс. Модель, справедливая при деплое, может стать предвзятой по мере сдвига распределения данных. Тестируйте ежемесячно, а не однократно.

  4. Автоматизируйте доказательства соответствия. Регуляторы будут запрашивать доказательства. Автоматические результаты тестов с временными метками — более убедительное доказательство, чем периодические ручные проверки.

  5. Следите за обновлениями. Внедрение EU AI Act растянуто до 2027 года. Новые руководящие документы и технические стандарты выпускаются регулярно. Назначьте ответственного за отслеживание регуляторных обновлений.

Соответствие — это не галочка, а непрерывная практика, значительно пересекающаяся с хорошим QA. Хорошо протестированная ИИ-система — это также и система, соответствующая требованиям.