09 Productivité développeur

Générer du code et expliquer du code existant

9.1 Génération de code ✨

Définition

La génération de code consiste à demander à Copilot de produire du code à partir :

  • d’un nom de fonction ;
  • d’un commentaire ;
  • d’un prompt ;
  • d’un fichier existant ;
  • d’une interface ;
  • d’un test ;
  • d’une règle métier ;
  • d’un exemple.

Copilot peut générer :

  • fonctions ;
  • classes ;
  • endpoints API ;
  • scripts ;
  • tests ;
  • helpers ;
  • DTO ;
  • interfaces ;
  • composants frontend ;
  • requêtes SQL ;
  • workflows ;
  • snippets de configuration.

Exemple simple

Tu écris :

ts
function calculateDiscount(price: number, percentage: number): number {

Copilot peut proposer :

ts
function calculateDiscount(price: number, percentage: number): number {
  return price - price * (percentage / 100);
}

C’est utile, mais il manque peut-être des validations.

Version plus robuste :

ts
function calculateDiscount(price: number, percentage: number): number {
  if (price < 0) {
    throw new Error("Price must be non-negative");
  }

  if (percentage < 0 || percentage > 100) {
    throw new Error("Percentage must be between 0 and 100");
  }

  return price - price * (percentage / 100);
}

Exemple avec prompt clair

Prompt :

Texte
Generate a TypeScript function to calculate a discounted price.

Requirements:
- price must be non-negative
- percentage must be between 0 and 100
- throw descriptive errors
- return the final price as a number
- include Jest tests

Copilot peut produire à la fois la fonction et les tests.

Exemple API

Prompt :

Texte
Create an Express POST /users endpoint.

Requirements:
- validate email and password
- hash the password using the existing password service
- do not return passwordHash
- return 201 with the created user
- return 400 for invalid input
- add Jest tests

Ce prompt est bien meilleur que :

Texte
Create user endpoint.

Quand utiliser Copilot pour générer du code ? ✅

Utilise Copilot pour :

  • boilerplate ;
  • fonctions utilitaires ;
  • endpoints simples ;
  • tests ;
  • mappings ;
  • transformations de données ;
  • scripts ;
  • exemples d’intégration ;
  • prototypes ;
  • accélérer une première version.

Quand être prudent ? ⚠️

Sois prudent quand le code touche :

  • authentification ;
  • autorisation ;
  • chiffrement ;
  • IAM ;
  • données personnelles ;
  • paiements ;
  • logique métier critique ;
  • suppression de données ;
  • migrations DB ;
  • infrastructure cloud ;
  • production.

Piège d’examen

Question possible :

Copilot génère une fonction qui semble correcte et compile.
Quelle est la meilleure action avant de l’intégrer ?

Bonne réponse :

Relire, tester et valider que le code respecte les exigences, la sécurité et les standards du projet.

Mauvaise réponse :

L’accepter directement parce qu’elle compile.

9.2 Explication de code existant 🔍

Définition

Copilot peut aider à comprendre du code existant.

C’est particulièrement utile quand tu :

  • rejoins une nouvelle codebase ;
  • lis du legacy code ;
  • dois corriger un bug ;
  • veux comprendre une dépendance ;
  • dois reviewer une PR ;
  • dois documenter un module ;
  • veux comprendre un test compliqué.

Exemple

Code :

py
def calculate_score(events):
    score = 0

    for event in events:
        if event["type"] == "purchase":
            score += 10
        elif event["type"] == "refund":
            score -= 5

    return max(score, 0)

Prompt :

Texte
Explain this function step by step.
Identify inputs, outputs, side effects, assumptions, and edge cases.

Réponse attendue :

  • La fonction prend une liste d’événements.
  • Elle initialise un score à 0.
  • Elle ajoute 10 pour chaque achat.
  • Elle retire 5 pour chaque remboursement.
  • Elle retourne un score minimum de 0.
  • Elle suppose que chaque event contient une clé "type".
  • Elle ne gère pas None, liste vide ou event mal formé.

Exemple plus avancé

Prompt :

Texte
Explain the role of this service in the application.
Identify:
- dependencies
- business rules
- side effects
- external calls
- error handling
- areas that are hard to test

Très utile pour comprendre un service métier.

Exemple avec code legacy

Prompt :

Texte
Analyze this legacy module.
Do not refactor yet.

Return:
- main responsibilities
- hidden side effects
- global state usage
- external dependencies
- risky areas
- suggested tests before refactoring

Ce prompt est excellent parce qu’il évite de modifier trop vite.

À retenir

Avant de modifier du code inconnu, utilise Copilot pour le comprendre.

Dans l’examen, si le scénario dit :

Le développeur ne comprend pas un fichier complexe.

La bonne réponse est souvent :

Utiliser Copilot Chat / Ask Mode pour expliquer le code avant de le modifier.

À retenir pour le GH-300

  • Générer est un premier jet : objectif, contraintes et validation déterminent sa valeur.
  • Pour comprendre du code inconnu, on demande une explication contextualisée avant de modifier.
  • Le langage ou l’outil change, mais la règle reste la même : relire, tester et vérifier les affirmations importantes.

D5 · Productivité développeur · 10–15 %