Introducción
Las revisiones de código son más eficaces cuando se dedica menos tiempo a detalles de implementación menores, como las convenciones de nomenclatura y estilo, y en su lugar se centran en el diseño de nivel superior, la resolución de problemas y la funcionalidad que satisface las necesidades del usuario.
En este artículo, mostraremos cómo las revisiones automáticas de Copilot pueden ayudar a optimizar el proceso de revisión para que dedique menos tiempo a cambios menores y más tiempo en la resolución de problemas matizados y una comprensión más profunda de la implementación que no es simplemente adecuada, sino que satisface las necesidades de los usuarios de forma eficaz.
1. Mejorar la calidad de la revisión de Copilot
Revisión del código de Copilot puede proporcionar revisiones automatizadas para todas las solicitudes de incorporación de cambios en el repositorio y hacer que la revisión sea más eficaz detectando los cambios que no desea en el código. Cuando se emparejan con instrucciones personalizadas, Revisión del código de Copilot es más eficaz, ya que puede proporcionar respuestas adaptadas a la forma en que funciona el equipo, las herramientas que usa o los detalles del proyecto.
Entre los procedimientos recomendados para escribir instrucciones personalizadas se incluyen:
- Encabezados distintos
- Puntos de viñeta
- Instrucciones cortas y directas
Veamos un ejemplo. Si va a crear un sistema de procesamiento de pedidos mediante Python, las instrucciones personalizadas pueden incluir procedimientos de codificación, rendimiento y formato específicos de Python, así como instrucciones directamente relevantes para el proyecto. En el ejemplo siguiente se muestra el aspecto de algunas de las líneas de las instrucciones personalizadas.
## 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.
En la siguiente sección, veremos cómo nuestras instrucciones personalizadas de ejemplo pueden influir positivamente en los comentarios de revisión que Copilot proporciona para una solicitud de incorporación de cambios.
2. Automatizar las revisiones para abordar las convenciones de estilo y el rendimiento
Cuando se habilita la revisión automática de Revisión del código de Copilot,Copilot revisará automáticamente una pull request una vez que esté fuera del modo borrador.
Imagina que envías un pull request que incluye la siguiente función para actualizar el inventario en el sistema de procesamiento de pedidos.
def notify_inventory(product_id, quantity):
requests.post("http://inventory-service/update", json={"product_id": product_id, "quantity": quantity})
Aunque esto es funcional, carece de claridad y solidez. La intención de los tipos es implícita, no hay ninguna cadena de documentos y no incluye el control de errores ni el registro, lo que hace que no esté claro si la notificación ha funcionado realmente.
Copilot revisarían el código y podrían hacer los siguientes comentarios y sugerencias de código.
Nota:
La respuesta siguiente es un ejemplo. Las respuestas de Chat de Copiloto no son deterministas, por lo que puedes obtener una respuesta diferente a la aquí mostrada.
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
La respuesta de Copilot sigue la orientación de sus instrucciones personalizadas en su recomendación. En este ejemplo, sigue las instrucciones de estilo PEP 8 y 257 para Python y sugiere una mejora para controlar mejor los tiempos de espera y el registro de errores, al tiempo que explica con concisamente el razonamiento detrás de las sugerencias.
Nota:
Revise siempre detenidamente las sugerencias de Copilot antes de aceptar y aplicar.
Los comentarios de revisión automática como estos le ayudan a crear su propia comprensión al codificar o pueden ayudarle a centrarse y restringir los comentarios proporcionados a otros usuarios al revisarlos.
3. Marcar vulnerabilidades de seguridad y corregirlas
A continuación, imagine que se le ha encargado mejorar cómo se almacenan las contraseñas en el sistema de procesamiento de pedidos. Envías una solicitud de incorporación de cambios con un código que asumiste que cifraba suficientemente las contraseñas de usuario para protegerlas.
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
Sin embargo, en este ejemplo, el uso de SHA-256 no es aceptable, ya que no es lo suficientemente costoso de cálculo como para proteger las contraseñas de usuario.
Aunque Revisión del código de Copilot puede realizar sugerencias de procedimientos recomendados de seguridad, Corrección automática de Copilot para code scanning lo lleva un paso más allá. Aprovechar las funcionalidades de code scanning con el análisis de CodeQL para analizar el código en un repositorio GitHub e identificar vulnerabilidades de seguridad y errores de codificación, Corrección automática de Copilot puede sugerir correcciones a las alertas, permitiéndole evitar y reducir vulnerabilidades de forma más eficaz.
Por ejemplo, Corrección automática de Copilot podría realizar el siguiente comentario en el código.
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.
Corrección automática de Copilot también proporcionará sugerencias de código para una propuesta de corrección de la vulnerabilidad, para que usted pueda revisar. En este caso, puede realizar sugerencias de código, como las siguientes, para importar un paquete y actualizar el código relacionado con el hash de la contraseña.
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)
Nota:
- Compruebe y valide siempre los cambios Copilot sugiere antes de aceptarlos.
- En este ejemplo, Revisión del código de Copilot también puede resaltar la necesidad de generar sales únicas.
Como puede ver, la identificación de vulnerabilidades automáticamente, junto con sugerencias para corregirlas, le ayuda a hacer que la seguridad sea una prioridad. Corrección automática de Copilot le permite centrarse en comprender la codificación segura y en las correcciones que funcionan mejor para el código base y el proyecto.
Revisiones optimizadas con Copilot
Los comentarios de revisión automática le ayudan a optimizar las revisiones y proteger el código de forma más eficaz, independientemente del nivel de experiencia.
- Las instrucciones personalizadas ayudaron a refinar las respuestas de Revisión del código de Copilot para que fueran específicas para nuestro proyecto y nuestras necesidades y las del usuario, y también vimos cómo podemos adaptar el nivel de detalle de las explicaciones que Copilot proporciona en los comentarios.
- Revisión del código de Copilot nos ayudaron a mejorar rápidamente el registro de errores y comprender por qué importaba.
- Corrección automática de Copilot para code scanning nos ayudó a evitar el uso de un enfoque insuficiente para el hash de contraseñas y, así, proteger los datos de los usuarios.
Pasos siguientes
Para que sus revisiones sean más eficientes y eficaces mediante las capacidades de revisión de Copilot, empiece por seguir estos pasos.
- Cree instrucciones personalizadas específicas para el proyecto y el repositorio. Escriba su propio o tome inspiración de nuestra biblioteca de ejemplos. Consulta Instrucciones personalizadas.
- Para habilitar la revisión automática de código de Revisión del código de Copilot para su repositorio, consulte Configuración de la revisión automática de código en GitHub Copilot.
- Para configurar Corrección automática de Copilot para tu repositorio, necesitarás habilitar code scanning. Una vez que code scanning con CodeQL está habilitado, Corrección automática de Copilot se habilita de manera predeterminada. Para obtener la configuración más sencilla, consulte Establecimiento de la configuración predeterminada para el examen del código.
Lectura adicional
Para profundizar en la revisión del código generado por IA, consulte Revisión del código generado por IA.