close
Skip to main content

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

Автоматизируйте отзывы Copilot , чтобы оптимизировать и улучшить процесс их рассмотрения.

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

Обзор кода Copilot is available for Copilot Pro, GitHub Copilot Pro+, Copilot Business and Copilot Enterprise. See Copilot plans.

Введение

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

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

1. Улучшить качество отзывов Copilot

          Обзор кода 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.

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

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})

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

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

Примечание.

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

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 можно предложить лучшие практики безопасности, Copilot Autofix это code scanning идёт дальше. Использование возможностей code scanning WITH CodeQL анализа для анализа кода в GitHub репозитории и поиска уязвимостей безопасности и ошибок в коде, Copilot Autofix позволяет предложить исправления оповещений, что позволит вам эффективнее предотвращать и уменьшать уязвимости.

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

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.
          Copilot Autofix Также подскажу рекомендации по возможному исправлению уязвимости для вашего рассмотрения. В этом случае он может предлагать коды, подобные ниже, для импорта пакета и обновления кода, связанного с хэшированием пароля. 
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 Autofix Это позволяет сосредоточиться на понимании безопасного кодирования и поиске исправлений, которые лучше всего подходят для вашей базы кода и проекта.

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

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

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

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

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

  1. Создайте индивидуальные инструкции для вашего Project и репозитория. Напишите свои собственные или вдохновляйтесь нашей библиотекой примеров. См . раздел AUTOTITLE.
  2. Чтобы включить автоматическое Обзор кода Copilot для вашего репозитория, смотрите Настройка автоматического проверки кода от GitHub Copilot.
  3. Чтобы настроить Copilot Autofix репозиторий, нужно включить code scanning. После code scanningCodeQL включения анализа по Copilot Autofix умолчанию включена. Для самой простой настройки смотрите Настройка настройки по умолчанию для сканирования кода.

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

Чтобы углубиться в обзоре кода, сгенерированного ИИ, см. Проверка кода, созданного искусственным интеллектом.