Skip to main content

Постройте оптимизированный процесс проверки с помощью Copilot

Автоматизируйте отзывы с помощью Copilot для оптимизации и улучшения процесса проверки.

Кто может использовать эту функцию?

Проверка кода Copilot is available for Copilot Pro, GitHub Copilot Pro+, Бизнес Copilot and Копилот Энтерпрайз. See Copilot plans.

Введение

Обзоры кода эффективнее, когда вы меньше времени уделяете мелким деталям реализации, таким как именования и стилевые соглашения, и вместо этого сосредотачиваетесь на более высокоуровнем дизайне, решении задач и функциональности, удовлетворяющей потребности пользователя.

В этой статье мы покажем, как автоматические отзывы

Проверка кода Copilot может автоматически проверять все pull requests в вашем репозитории и повышает эффективность, фиксируя нежелательные изменения в вашем коде. В сочетании с пользовательскими инструкциями Проверка кода Copilot более эффективен, так как может давать ответы, адаптированные под работу вашей команды, используемые инструменты или особенности вашего проекта.

Лучшие практики написания индивидуальных инструкций включают:

  • Отдельные заголовки
  • Основные пункты
  • Краткие, прямые инструкции

Рассмотрим пример. Если вы создаёте систему обработки заказов на Python, ваши собственные инструкции могут включать специфические для Python форматирование, производительность и безопасные практики программирования, а также руководство, непосредственно относящиеся к вашему проекту. Следующий пример показывает, как могут выглядеть некоторые строки ваших индивидуальных инструкций.

## Repository context
- This repository implements an order processing system (order intake, payment, fulfillment) where correctness, security, and auditability are critical. 

## Style and conventions
- Follow the PEP 8 and PEP 257 style guide for Python.
- Use clear, domain-relevant names (orders, payments, inventory, customers, shipments).
- Prefer small, focused functions and methods with clearly defined responsibilities.

## Secure coding 
- Verify proper input validation and sanitization.
- Review authentication and authorization logic.

## Error handling guidelines
- Handle timeouts and network errors gracefully.
- Ensure failures are logged with enough detail for debugging.

## Order processing context
- Ensure order creation, payment handling, and updates are idempotent to avoid duplicate orders or duplicate charges.
- Validate and normalize all order, payment, and customer data before persisting or acting on it.
- Do not log or persist sensitive data (passwords, raw payment details, full identifiers) without hashing, encryption, or redaction.
- Call out obvious performance issues in core order workflows (e.g., N+1 queries, per-order synchronous network calls) and suggest simpler, more efficient alternatives.

## Review style
- Be concise, specific and actionable.
- Explain the "why" behind recommendations using bullet points.

В следующем разделе мы рассмотрим, как наши примеры пользовательских инструкций могут положительно влиять на комментарии к обзору Copilot предоставляет pull request.

2. Автоматизировать обзоры с учётом стилевых условностей и производительности

Когда автоматическое Проверка кода Copilot включено, Copilot автоматически просматривает pull request, когда он выходит из режима черновика.

Представьте, что вы отправляете pull request, который включает следующую функцию обновления запасов в вашей системе обработки заказов.

def notify_inventory(product_id, quantity):
    requests.post("http://inventory-service/update", json={"product_id": product_id, "quantity": quantity})

Хотя это функционально, ему не хватает ясности и надёжности. Замысел типов подразумевается, нет строк документов, и не включает обработку ошибок или логирование, что делает неясным, действительно ли уведомление работало.

Copilot проверит код и может сделать следующий комментарий и рекомендацию по коду.

Примечание.

Следующий ответ является примером. Ответы Копилот Чат являются недетерминированными, поэтому вы можете получить другой ответ, показанный здесь.

Missing error handling for network calls

The notify_inventory function makes a synchronous network call without any error handling for timeouts, connection failures, or non-200 responses.

Why this matters:

- Network failures will cause unhandled exceptions and crash the order processing flow
- Orders could be marked as CONFIRMED but inventory never gets updated
- This violates the requirement to "handle timeouts and network errors gracefully"
- Failures won't be logged with enough detail for debugging

Recommendation: Add proper error handling with timeout and logging:
def notify_inventory(product_id: str, quantity: int) -> bool:
    """Notify the inventory service of order placement.

    Args:
        product_id: The product identifier.
        quantity: The quantity ordered.

    Returns:
        True if the notification succeeded; False otherwise.
    """
    try:
        response = requests.post(
            "http://inventory-service/update",
            json={"product_id": product_id, "quantity": quantity},
            timeout=5,
        )
        response.raise_for_status()
        logger.info(
            "Inventory notified for product %s, quantity %d (status %d)",
            product_id,
            quantity,
            response.status_code,
        )
        return True
    except requests.exceptions.Timeout:
        logger.error(
            "Timeout notifying inventory for product %s, quantity %d",
            product_id,
            quantity,
            exc_info=True,
        )
    except requests.exceptions.RequestException:
        logger.error(
            "Failed to notify inventory for product %s, quantity %d",
            product_id,
            quantity,
            exc_info=True,
        )
    return False

Ответ от Copilot следует рекомендациям из ваших индивидуальных инструкций. В этом примере она следует рекомендациям в стиле PEP 8 и 257 для Python и предлагает улучшение для лучшей обработки тайм-аутов и логирования ошибок, при этом кратко объясняется мотивация предложений.

Примечание.

Всегда внимательно изучайте предложения Copilot перед тем, как принять и принять решение.

Автоматические комментарии по отзывам, такие как эти, помогают вам строить собственное понимание при написании кода или могут помочь сосредоточиться и сузить обратную связь, которую даёт другим при повторении.

3. Отмечайте уязвимости безопасности и исправляйте их

Далее представьте, что вам поручили улучшить хранение паролей в системе обработки заказов. Вы отправляете pull-запрос с кодом, по вашему мнению, достаточно хешированным паролями пользователей для их защиты.

def get_password_hash(password: str, salt: str) -> str:
    """Hash a password with the given salt using SHA-256.

    Returns the hexadecimal representation of the hashed password.
    """
    return hashlib.sha256((password + salt).encode()).hexdigest()

class User:
    """Represents a user in the order processing system."""

    def __init__(self, username: str, password: str, salt: str):
        """Initialize a User with username, password, and salt.

        The password is hashed and stored for authentication.
        """
        self.username = username
        self.salt = salt
        self.password_hash = get_password_hash(password, self.salt)

    def verify_password(self, password: str) -> bool:
        """Verify a plain-text password against the stored hash."""
        return get_password_hash(password, self.salt) == self.password_hash

Однако в этом примере использование SHA-256 недопустимо, так как он недостаточно вычислителен для защиты паролей пользователей.

Хотя Проверка кода Copilot может предложить лучшие практики безопасности, Автофикс второго пилота для code scanning идёт дальше. Используя возможности code scanning с CodeQL analysis для анализа кода в репозитории GitHub и поиска уязвимостей безопасности и ошибок в коде, Автофикс второго пилота может предложить исправления оповещений, что позволит вам эффективнее предотвращать и уменьшать уязвимости.

Например, Автофикс второго пилота может сделать следующий комментарий к коду.

Using SHA-256 for password hashing is insecure for authentication systems. SHA-256 is designed to be fast, making it vulnerable to brute-force attacks. 

To fix the problem, use a password-specific hashing algorithm like bcrypt, scrypt, or argon2 (e.g., `argon2-cffi` from the PyPI package) which are designed to be slow and include built-in salting mechanisms.

Автофикс второго пилота также предложит варианты исправления уязвимости для вашего рассмотрения. В этом случае он может предлагать коды, подобные ниже, для импорта пакета и обновления кода, связанного с хэшированием пароля.

from argon2 import PasswordHasher
def get_initial_hash(password: str):
    ph = PasswordHasher()
    return ph.hash(password)

def check_password(password: str, known_hash):
    ph = PasswordHasher()
    return ph.verify(known_hash, password)

Примечание.

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

Как видите, автоматическое выявление уязвимостей вместе с предложениями по их устранению помогает сделать безопасность приоритетом. Автофикс второго пилота позволяет сосредоточиться на понимании безопасного кодирования и поиске исправлений, которые лучше всего подходят для вашей базы кода и проекта.

Оптимизированные отзывы с помощью Copilot

Автоматические комментарии к отзывам помогают оптимизировать отзывы и эффективнее защищать код, независимо от уровня вашего опыта.

  • Пользовательские инструкции помогали уточнять ответы от Проверка кода Copilot, чтобы они соответствовали нашим проектам и потребностям пользователей, а также мы увидели, как можно адаптировать объяснение Copilot в обратной связи.
  • Проверка кода Copilot помогли нам быстро улучшить логирование ошибок и понять, почему это важно.
  • Автофикс второго пилота для code scanning помогло нам избежать использования недостаточного хеширования паролей и защитить пользовательские данные.

Дальнейшие шаги

Чтобы сделать ваши отзывы более эффективными и результативными с помощью возможностей обзора Copilot, начните с следующих шагов.

  1. Создайте индивидуальные инструкции для вашего проекта и репозитория. Напишите свои собственные или вдохновляйтесь нашей библиотекой примеров. См . раздел AUTOTITLE.
  2. Чтобы включить автоматическое Проверка кода Copilot для вашего репозитория, см. Настройка автоматической проверки кода с помощью GitHub Copilot.
  3. Чтобы настроить Автофикс второго пилота для вашего репозитория, вам нужно включить code scanning. После того как code scanning с CodeQL включён анализ, Автофикс второго пилота по умолчанию активируется. Для самой простой настройки смотрите АВТОЗАГОЛОВОК.

Дополнительные материалы

Чтобы углубиться в обзоре кода, сгенерированного ИИ, см. АВТОЗАГОЛОВОК.