Einleitung
Codeüberprüfungen sind effizienter, wenn Sie weniger Zeit für kleinere Implementierungsdetails wie Benennungs- und Stilkonventionen aufwenden und sich stattdessen auf Design, Problemlösung und Funktionalität konzentrieren, die den Anforderungen der Benutzer entspricht.
In diesem Artikel zeigen wir, wie automatische Rezensionen Copilot dabei helfen können, Ihren Überprüfungsprozess zu optimieren, sodass Sie weniger Zeit mit geringfügigen Änderungen verbringen und mehr Zeit mit der nuancierten Problemlösung und tieferem Verständnis für die Implementierung verbringen können, die nicht einfach angemessen ist, sondern geschickt die Benutzeranforderungen erfüllt.
Verbessern Sie die Überprüfungsqualität von Copilot
Copilot-Codeüberprüfung kann automatisierte Überprüfungen für alle Pullanforderungen in Ihrem Repository bereitstellen und eine effizientere Überprüfung vornehmen, indem Sie Änderungen erfassen, die Sie in Ihrem Code nicht benötigen. Wenn Copilot-Codeüberprüfung mit benutzerdefinierten Anweisungen gepaart ist, ist es effektiver, da es Antworten bereitstellen kann, die auf die Arbeitsweise Ihres Teams, die verwendeten Tools oder die Besonderheiten Ihres Projekts zugeschnitten sind.
Zu den bewährten Methoden zum Schreiben von benutzerdefinierten Anweisungen gehören:
- Unterschiedliche Überschriften
- Aufzählungszeichen
- Kurze, direkte Anweisungen
Betrachten wir dazu ein Beispiel. Wenn Sie ein Auftragsverarbeitungssystem mit Python erstellen, können Ihre benutzerdefinierten Anweisungen Python spezifische Formatierung, Leistung und sichere Codierungspraktiken sowie Anleitungen enthalten, die für Ihr Projekt direkt relevant sind. Das folgende Beispiel zeigt, wie einige der Zeilen Ihrer benutzerdefinierten Anweisungen aussehen könnten.
## 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.
Im nächsten Abschnitt werden wir schrittweise durchgehen, wie sich unsere benutzerdefinierten Beispielanweisungen positiv auf die Rezensionskommentare Copilot auswirken können, die für eine Pullanforderung bereitgestellt werden.
2. Automatisieren von Überprüfungen zum Einhalten von Stilvorgaben und Leistungsanforderungen
Wenn die automatische Copilot-Codeüberprüfung Option aktiviert ist, wird Copilot eine Pullanforderung automatisch überprüft, sobald sie nicht mehr im Entwurfsmodus ist.
Stellen Sie sich vor, Sie übermitteln eine Pull-Anforderung, die die folgende Funktion enthält, um den Bestand in Ihrem Auftragsverarbeitungssystem zu aktualisieren.
def notify_inventory(product_id, quantity):
requests.post("http://inventory-service/update", json={"product_id": product_id, "quantity": quantity})
Obwohl dies funktionsfähig ist, fehlt es an Klarheit und Robustheit. Die Absicht von Typen ist implizit, es gibt keine Docstrings, und es enthält keine Fehlerbehandlung oder Protokollierung, wodurch unklar ist, ob die Benachrichtigung tatsächlich funktioniert hat.
Copilot würde den Code überprüfen und möglicherweise den folgenden Kommentar- und Codevorschlag machen.
Hinweis
Die folgende Antwort ist ein Beispiel. Da die Copilot-Chat-Antworten nicht deterministisch sind, erhältst du möglicherweise eine andere Antwort als die hier beschriebene.
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
Die Antwort von Copilot folgt den Vorgaben aus Ihren benutzerdefinierten Anweisungen in ihrer Empfehlung. In diesem Beispiel folgt es der PEP 8- und 257-Stilanleitung für Python und schlägt eine Verbesserung zur besseren Behandlung von Timeouts und Fehlerprotokollierung vor, wobei die Begründung hinter den Vorschlägen prägnant erklärt wird.
Hinweis
Überprüfen Sie die Vorschläge von Copilot immer sorgfältig, bevor Sie diese annehmen und festschreiben.
Automatische Überprüfungskommentare wie diese unterstützen Sie dabei, Ihr eigenes Verständnis des Codes zu entwickeln, oder sie können Ihnen helfen, sich beim Überprüfen zu konzentrieren und die Rückmeldungen gezielt zu gestalten.
3. Kennzeichnen von Sicherheitsrisiken und Beheben dieser Sicherheitsrisiken
Stellen Sie sich als Nächstes vor, Sie wurden beauftragt, die Speicherung von Kennwörtern in Ihrem Auftragsverarbeitungssystem zu verbessern. Sie übermitteln eine Pull-Anforderung mit Code, von dem Sie dachten, dass er Benutzerpasswörter ausreichend gehasht hat, um sie zu schützen.
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
In diesem Beispiel ist die Verwendung von SHA-256 jedoch nicht akzeptabel, da es nicht rechenintensiv genug ist, um Benutzerwörter zu schützen.
Obwohl Copilot-Codeüberprüfung Vorschläge zu bewährten Sicherheitsmethoden machen kann, geht Copilot Autofix für code scanning einen Schritt weiter. Wenn Sie die Funktionen der code scanningCodeQL Analyse nutzen, um den Code in einem GitHub Repository zu analysieren und Sicherheitsrisiken und Codierungsfehler zu finden, Copilot Autofix können Sie dann Korrekturen für Warnungen vorschlagen, sodass Sie Sicherheitsrisiken effizienter verhindern und reduzieren können.
Beispielsweise kann Copilot Autofix den folgenden Kommentar zum Code machen.
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 macht außerdem Codevorschläge für eine mögliche Lösung für die Sicherheitsanfälligkeit, die Sie überprüfen können. In diesem Fall kann es Codevorschläge wie die folgenden machen, um ein Paket zu importieren und den Code im Zusammenhang mit dem Hashing des Kennworts zu aktualisieren.
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)
Hinweis
- Verifizieren und validieren Sie immer alle Änderungen Copilot, bevor Sie diese akzeptieren.
- In diesem Beispiel kann Copilot-Codeüberprüfung auch die Notwendigkeit hervorgehoben werden, eindeutige Salze zu generieren.
Wie Sie sehen können, hilft Ihnen die automatische Identifizierung von Schwachstellen zusammen mit Vorschlägen zu deren Behebung, die Sicherheit in den Vordergrund zu stellen. Copilot Autofix ermöglicht Es Ihnen, sich auf das Verständnis sicherer Codierung und auf Korrekturen zu konzentrieren, die für Ihre Codebasis und Ihr Projekt am besten geeignet sind.
Optimierte Rezensionen mit Copilot
Kommentare zur automatischen Überprüfung helfen Ihnen, Ihre Rezensionen zu optimieren und Ihren Code effizienter zu sichern, unabhängig von Ihrer Erfahrung.
- Benutzerdefinierte Anweisungen halfen, die Antworten Copilot-Codeüberprüfung so zu verfeinern, dass sie speziell für unsere Projekt- und Benutzeranforderungen waren, und wir haben auch gesehen, wie wir anpassen können, wie viele Erklärungen Copilot in Feedback liefern.
-
Copilot-Codeüberprüfung hilft uns, unsere Fehlerprotokollierung schnell zu verbessern und zu verstehen, warum es wichtig ist. -
Copilot Autofix für code scanning hat uns geholfen, die Verwendung eines unzureichenden Kennworthashing-Ansatzes zu verhindern und Benutzerdaten zu schützen.
Nächste Schritte
Wenn Sie Ihre Rezensionen mithilfe Copilotder Überprüfungsfunktionen effizienter und effektiver gestalten möchten, führen Sie die folgenden Schritte aus.
- Erstellen Sie benutzerdefinierte Anweisungen speziell für Ihr Projekt und Ihr Repository. Schreiben Sie Ihr eigenes, oder inspirieren Sie sich von unserer Bibliothek mit Beispielen. Weitere Informationen findest du unter Benutzerdefinierte Anweisungen.
- Informationen zum Aktivieren der automatischen Copilot-Codeüberprüfung Aktivierung für Ihr Repository finden Sie unter Konfigurieren der automatischen Codeüberprüfung durch GitHub Copilot.
- Zum Konfigurieren Copilot Autofix Ihres Repositories müssen Sie es aktivieren code scanning. Sobald code scanning mit CodeQL-Analyse aktiviert ist, ist Copilot Autofix standardmäßig aktiviert. Die einfachste Einrichtung finden Sie unter Konfigurieren des Standardsetups für das Code-Scanning.
Weiterführende Lektüre
Weitere Informationen zum Überprüfen von KI-generierten Code finden Sie unter Überprüfen von KI-generierten Code.