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 Überprüfungen von Copilot helfen können, Ihren Überprüfungsprozess zu optimieren, sodass Sie weniger Zeit für kleinere Änderungen und mehr Zeit für die nuancierte Problemlösung und ein tiefes Verständnis für die Implementierung aufwenden können, die nicht nur ausreichend ist, sondern geschickt die Benutzeranforderungen erfüllt.
1. Verbesserung der Bewertungsqualität von Copilot
Copilot-Codeüberprüfung kann automatisierte Überprüfungen für alle Pull Requests in Ihrem Repository durchführen und die Überprüfung effizienter gestalten, indem Änderungen erkannt werden, die Sie in Ihrem Code nicht wünschen. Bei Kombination mit benutzerdefinierten Anweisungen ist Copilot-Codeüberprüfung effektiver, da sie Antworten bereitstellen kann, die auf die Funktionsweise Ihres Teams, die von Ihnen 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 erläutern, wie sich unsere beispielhaften benutzerdefinierten Anweisungen positiv auf die von Copilot bereitgestellten Kommentare zur Überprüfung eines Pull-Requests auswirken können.
2. Automatisieren von Überprüfungen zum Einhalten von Stilvorgaben und Leistungsanforderungen
Wenn die automatischen Copilot-Codeüberprüfung aktiviert sind, überprüft Copilot automatisch eine Pull-Anforderung, sobald sie sich außerhalb des Entwurfsmodus befindet.
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 funktional 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 kann 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 Ihren benutzerdefinierten Anweisungen in der Empfehlung. In diesem Beispiel folgt es der PEP 8- und 257-Stilanleitung für Python und schlägt eine Verbesserung vor, um Timeouts und Fehlerprotokollierung besser zu behandeln, während 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 sie akzeptieren und übernehmen.
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.
Während Copilot-Codeüberprüfung Empfehlungen für bewährte Sicherheitspraktiken geben kann, geht Copilot Autofix für code scanning noch einen Schritt weiter. Durch die Nutzung der Funktionen von code scanning in Verbindung mit der CodeQL-Analyse zur Codeanalyse in einem GitHub-Repository und zum Auffinden von Sicherheitslücken und Codierungsfehlern kann Copilot Autofix anschließend Korrekturen für Warnmeldungen vorschlagen, sodass Sie Sicherheitslücken effizienter verhindern und reduzieren können.
Beispielsweise kann Copilot Autofix den folgenden Kommentar zum Code erstellen.
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 Ihnen auch Codevorschläge, die Sie überprüfen können, um eine mögliche Sicherheitslücke zu beheben. 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
- Überprüfen und validieren Sie immer alle Änderungen, die Copilot vorschlägt, bevor Sie sie annehmen.
- In diesem Beispiel können Copilot-Codeüberprüfung auch die Notwendigkeit hervorheben, eindeutige Salts 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 von sicherem Codieren und auf Korrekturen zu konzentrieren, die am besten zu Ihrer Codebasis und Ihrem Projekt passen.
Optimierte Bewertungen 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 von Copilot-Codeüberprüfung so zu verfeinern, dass sie für unser Projekt und unsere Benutzeranforderungen spezifisch waren, und wir haben auch gesehen, wie wir anpassen können, wie viel Erklärung Copilot in Feedback liefert.
- Copilot-Codeüberprüfung half uns, unsere Fehlerprotokollierung schnell zu verbessern und zu verstehen, warum sie wichtig ist.
- Copilot Autofix für code scanning half uns, die Verwendung eines unzureichenden Passwort-Hashing-Ansatzes zu verhindern und Benutzerdaten zu schützen.
Nächste Schritte
Um Ihre Rezensionen mithilfe der Rezensionsfunktionen von Copilot effizienter und effektiver zu gestalten, beginnen Sie mit diesen Schritten.
- Erstellen Sie benutzerdefinierte Anweisungen speziell für Ihr Projekt und Repository. Schreiben Sie Ihr eigenes, oder inspirieren Sie sich von unserer Bibliothek mit Beispielen. Weitere Informationen findest du unter Benutzerdefinierte Anweisungen.
- Um die automatische Copilot-Codeüberprüfung für Ihr Repository zu aktivieren, siehe Konfigurieren des automatischen Code Reviews durch GitHub Copilot.
- Um Copilot Autofix für Ihr Repository zu konfigurieren, müssen Sie code scanning aktivieren. Sobald die Analyse code scanning mit CodeQL 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.