Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 78

Rédaction de la documentation technique : pseudo-code et choix de conception

Recommended resources

Bonjour !

Dans les leçons précédentes, nous avons finalisé notre projet de "Gestionnaire de Contacts". Nous avons d'abord validé sa logique par une trace manuelle, puis nous avons analysé sa performance, concluant que ses opérations principales ont une complexité temporelle O(n). Notre algorithme est donc juste et raisonnablement efficace.

Toutefois, un algorithme, aussi brillant soit-il, perd de sa valeur s'il est incompréhensible pour les autres, ou même pour vous-même dans quelques mois. L'étape finale pour transformer notre travail en une solution professionnelle est de le rendre clair et maintenable.

L'objectif de cette leçon est donc d'apprendre à rédiger une documentation claire de la solution, en expliquant le pseudo-code et les choix de conception. C'est une compétence fondamentale qui est au cœur de votre objectif d'écrire du "code clean".

1. Pourquoi la Documentation est-elle Cruciale ?

Imaginez que vous rejoignez une équipe et que l'on vous demande de corriger un bug dans un algorithme écrit par quelqu'un d'autre, sans aucun commentaire ni explication. Ce serait une tâche très difficile. La documentation est le pont entre l'auteur d'un algorithme et ses lecteurs.

Elle sert à :

  • Expliquer le "Pourquoi" : Le code montre comment l'algorithme fonctionne, mais la documentation explique pourquoi il a été conçu de cette manière. Pourquoi avoir choisi un tableau ? Pourquoi cette fonction existe-t-elle ?
  • Faciliter la maintenance et l'évolution : Pour corriger ou améliorer un algorithme, il faut d'abord le comprendre. Une bonne documentation accélère considérablement ce processus.
  • Clarifier vos propres pensées : L'acte d'écrire ce que vous avez fait vous force à structurer vos idées et peut même vous aider à identifier des faiblesses dans votre propre logique.

La rédaction technique est une compétence à part entière. Pour nous guider, nous allons nous inspirer des meilleures pratiques de rédaction de rapports.

Guide de rédaction de rapports pour les étudiants - DEV Community

L'article suivant, 'Guide de rédaction de rapports pour les étudiants', bien que destiné à des projets plus vastes, contient des principes d'une valeur inestimable pour structurer notre pensée et notre documentation. Nous n'allons pas écrire un rapport complet, mais en extraire les idées clés.

Lisez les sections suivantes : 'Structure du rapport' (en particulier 'Introduction', 'Analyse', 'Conception', et 'Réalisation / Implémentation'), et la section 'Règles de style' (surtout 'Expliquez le "pourquoi" des choses'). Concentrez-vous sur la logique de la structure : commencer par le contexte, expliquer les choix, puis décrire la solution. Ne vous attardez pas sur les aspects formels comme la page de garde.


2. Les Composantes d'une Documentation d'Algorithme

En nous inspirant de la lecture, nous pouvons définir une structure simple et efficace pour documenter notre projet "Gestionnaire de Contacts".

A. Présentation du Problème

  • Objectif : Décrire en une ou deux phrases le but de l'algorithme.
  • Exemple : "Cet algorithme a pour but de gérer une liste de contacts. Il doit permettre à l'utilisateur d'ajouter, rechercher, supprimer et lister des contacts."

B. Choix de Conception et de Structures de Données

  • Objectif : Justifier les décisions techniques importantes. C'est le "pourquoi" que nous avons évoqué.
  • Exemple :
    • Structure de données : "Nous avons choisi un tableau de Contact de taille fixe (100) pour stocker l'annuaire. Chaque Contact est une structure (ou enregistrement) contenant un nom, un prénom et un email. Un tableau est simple à mettre en œuvre pour une liste de taille modeste."
    • Modularité : "La logique a été décomposée en plusieurs fonctions (AjouterContact, SupprimerContact, etc.) pour rendre le code plus lisible, réutilisable et facile à tester. Chaque fonction a une seule responsabilité."

C. Explication du Pseudo-code

  • Objectif : Guider le lecteur à travers le pseudo-code. Il ne s'agit pas de traduire le code en français, mais d'expliquer la logique de chaque partie importante.
  • Deux niveaux d'explication :
    1. Les commentaires dans le code : Placer des explications brèves directement dans le pseudo-code pour clarifier des lignes ou des blocs spécifiques.
    2. Une description textuelle : Pour chaque fonction, décrire son rôle, ses paramètres (entrées), ce qu'elle retourne (sortie) et sa logique générale.

Pour le premier point, rappelons-nous comment insérer des commentaires.

Pseudo code - l'Informatique, c'est fantastique

Le document sur le pseudo-code que nous avons utilisé au début du cours a une section très courte mais essentielle sur les commentaires. Relisons-la pour nous rafraîchir la mémoire.

Repérez la section intitulée 'Les commentaires' dans le document. L'important est de retenir la syntaxe (//) et le conseil : les commentaires servent à la compréhension.

D. Analyse de la Performance

  • Objectif : Résumer la complexité de l'algorithme et expliquer son impact.
  • Exemple : "Les opérations principales (ajout, suppression, recherche) ont une complexité temporelle de O(n), où n est le nombre de contacts. Cela signifie que le temps de réponse est proportionnel au nombre de contacts. La solution est performante pour un usage personnel, mais pourrait devenir lente pour un annuaire de plusieurs dizaines de milliers de contacts."

L'image suivante résume parfaitement les bonnes pratiques que nous visons.

Documentation Best Practices for Algorithms
Cette image synthétise les principes d'une bonne documentation. Nous nous concentrons aujourd'hui sur la **Clarté**, le **Détail** (expliquer les choix) et les **Exemples** (expliquer le fonctionnement de chaque fonction).

3. Exercice : Rédigeons la Documentation de Notre Projet

Il est temps de mettre tout cela en pratique ! Voici le pseudo-code complet de notre projet. Votre mission est de créer le document qui l'accompagne.


Pseudo-code Complet : Gestionnaire de Contacts

// Structure pour représenter un contact
STRUCTURE Contact
    nom: CHAINE
    prenom: CHAINE
    email: CHAINE
FIN STRUCTURE

// Programme principal
ALGORITHME GestionnaireDeContacts
VARIABLES
    annuaire: TABLEAU[100] DE Contact
    nb_contacts_actuels: ENTIER ← 0
    choix_utilisateur: ENTIER
    continuer: BOOLEEN ← VRAI

DEBUT
    TANT QUE continuer = VRAI
        AfficherMenu()
        LIRE choix_utilisateur

        SELON choix_utilisateur FAIRE
            CAS 1:
                AjouterContact(annuaire, &nb_contacts_actuels) // Passage par référence pour modifier nb_contacts_actuels
            CAS 2:
                SupprimerContact(annuaire, &nb_contacts_actuels)
            CAS 3:
                // Pour la recherche, pas besoin de modifier l'annuaire ou le compteur
                ChercherUnContact(annuaire, nb_contacts_actuels)
            CAS 4:
                AfficherTousLesContacts(annuaire, nb_contacts_actuels)
            CAS 5:
                continuer ← FAUX
                ECRIRE "Au revoir !"
            AUTREMENT:
                ECRIRE "Choix invalide. Veuillez réessayer."
        FIN SELON
    FIN TANT QUE
FIN

// ---- Définition des Fonctions ----

PROCEDURE AfficherMenu()
DEBUT
    ECRIRE "--- MENU ---"
    ECRIRE "1. Ajouter un contact"
    ECRIRE "2. Supprimer un contact"
    ECRIRE "3. Chercher un contact"
    ECRIRE "4. Afficher tous les contacts"
    ECRIRE "5. Quitter"
    ECRIRE "Votre choix : "
FIN

FONCTION RechercherContact(annuaire: TABLEAU DE Contact, n: ENTIER, nom_recherche: CHAINE, prenom_recherche: CHAINE) : ENTIER
VARIABLES
    i: ENTIER
DEBUT
    POUR i DE 0 A n-1
        SI annuaire[i].nom = nom_recherche ET annuaire[i].prenom = prenom_recherche ALORS
            RETOURNE i // Contact trouvé, on retourne son indice
        FIN SI
    FIN POUR
    RETOURNE -1 // Contact non trouvé
FIN

PROCEDURE AjouterContact(annuaire: TABLEAU DE Contact, &n: ENTIER)
VARIABLES
    nouveau_contact: Contact
    indice: ENTIER
DEBUT
    SI n >= 100 ALORS
        ECRIRE "Erreur : L'annuaire est plein."
        RETOURNE
    FIN SI

    ECRIRE "Nom : "
    LIRE nouveau_contact.nom
    ECRIRE "Prénom : "
    LIRE nouveau_contact.prenom
    ECRIRE "Email : "
    LIRE nouveau_contact.email

    indice ← RechercherContact(annuaire, n, nouveau_contact.nom, nouveau_contact.prenom)

    SI indice != -1 ALORS
        ECRIRE "Erreur : Ce contact existe déjà."
    SINON
        annuaire[n] ← nouveau_contact
        n ← n + 1
        ECRIRE "Contact ajouté avec succès."
    FIN SI
FIN

PROCEDURE SupprimerContact(annuaire: TABLEAU DE Contact, &n: ENTIER)
VARIABLES
    nom_supp: CHAINE
    prenom_supp: CHAINE
    indice: ENTIER
    i: ENTIER
DEBUT
    ECRIRE "Nom du contact à supprimer : "
    LIRE nom_supp
    ECRIRE "Prénom du contact à supprimer : "
    LIRE prenom_supp

    indice ← RechercherContact(annuaire, n, nom_supp, prenom_supp)

    SI indice = -1 ALORS
        ECRIRE "Contact non trouvé."
    SINON
        // Décaler les éléments pour combler le vide
        POUR i DE indice A n-2
            annuaire[i] ← annuaire[i+1]
        FIN POUR
        n ← n - 1
        ECRIRE "Contact supprimé avec succès."
    FIN SI
FIN

PROCEDURE ChercherUnContact(annuaire: TABLEAU DE Contact, n: ENTIER)
VARIABLES
    nom_rech: CHAINE
    prenom_rech: CHAINE
    indice: ENTIER
DEBUT
    ECRIRE "Nom du contact à chercher : "
    LIRE nom_rech
    ECRIRE "Prénom du contact à chercher : "
    LIRE prenom_rech

    indice ← RechercherContact(annuaire, n, nom_rech, prenom_rech)

    SI indice = -1 ALORS
        ECRIRE "Contact non trouvé."
    SINON
        ECRIRE "Contact trouvé :"
        ECRIRE "Nom: ", annuaire[indice].nom, ", Prénom: ", annuaire[indice].prenom, ", Email: ", annuaire[indice].email
    FIN SI
FIN

PROCEDURE AfficherTousLesContacts(annuaire: TABLEAU DE Contact, n: ENTIER)
VARIABLES
    i: ENTIER
DEBUT
    SI n = 0 ALORS
        ECRIRE "L'annuaire est vide."
    SINON
        ECRIRE "--- Liste des contacts ---"
        POUR i DE 0 A n-1
            ECRIRE "Nom: ", annuaire[i].nom, ", Prénom: ", annuaire[i].prenom, ", Email: ", annuaire[i].email
        FIN POUR
    FIN SI
FIN

Votre Tâche

Créez un document texte et remplissez les sections suivantes. Je vais commencer la première partie pour vous guider.



Documentation de l'Algorithme GestionnaireDeContacts

1. Présentation du Problème

Cet algorithme a pour but de fournir les fonctionnalités de base pour la gestion d'un annuaire numérique. Il permet à un utilisateur de gérer une liste de contacts via un menu interactif, avec des options pour ajouter, supprimer, rechercher et afficher des contacts.

2. Choix de Conception et de Structures de Données

(À vous de compléter cette partie. Expliquez pourquoi un TABLEAU de STRUCTURE Contact a été utilisé, et pourquoi la logique a été séparée en plusieurs procédures et fonctions.)

3. Explication du Pseudo-code

Algorithme principal : GestionnaireDeContacts
Le corps principal du programme est une boucle TANT QUE qui maintient l'application active. À chaque tour de boucle, un menu est affiché à l'utilisateur. En fonction du choix de l'utilisateur (géré par une structure SELON), l'algorithme appelle la fonction ou la procédure appropriée pour effectuer l'action demandée. La boucle se termine lorsque l'utilisateur choisit de quitter.

Fonction RechercherContact

  • Rôle : Cherche un contact dans l'annuaire en se basant sur son nom et son prénom.
  • Paramètres :
    • annuaire : Le tableau de contacts.
    • n : Le nombre actuel de contacts.
    • nom_recherche, prenom_recherche : Les informations du contact à trouver.
  • Retourne : L'indice (la position) du contact dans le tableau s'il est trouvé ; -1 sinon.
  • Logique : La fonction parcourt le tableau du début à la fin. Pour chaque contact, elle compare son nom et son prénom avec ceux recherchés. Si une correspondance est trouvée, elle arrête immédiatement la recherche et retourne l'indice. Si la boucle se termine sans trouver de correspondance, cela signifie que le contact n'est pas dans l'annuaire, et la fonction retourne -1.

Procédure AjouterContact
(À vous de compléter. Décrivez le rôle, les paramètres et la logique de cette procédure. N'oubliez pas d'expliquer la vérification de l'annuaire plein et la gestion des doublons !)

Procédure SupprimerContact
(À vous de compléter.)

Procédure ChercherUnContact
(À vous de compléter. Expliquez comment elle utilise la fonction RechercherContact.)

Procédure AfficherTousLesContacts
(À vous de compléter.)

4. Analyse de la Performance et Limites

(À vous de compléter. Résumez ce que nous avons appris dans la leçon précédente sur la complexité O(n) et mentionnez la limite principale de notre solution, par exemple la taille fixe du tableau.)


Prenez votre temps pour rédiger des explications claires et concises. Cet exercice est la synthèse parfaite de tout ce que vous avez appris, car il vous oblige à réfléchir non seulement à comment l'algorithme fonctionne, mais aussi à pourquoi il est conçu comme il l'est.


Conclusion

Félicitations ! Vous venez de franchir une étape majeure qui distingue un amateur d'un professionnel : savoir documenter son travail. Un algorithme bien documenté est un algorithme qui vivra, évoluera et sera utile à d'autres.

Points clés à retenir :

  • La documentation est essentielle pour la compréhension, la maintenance et la collaboration.
  • Une bonne documentation explique le "pourquoi" des choix de conception, et pas seulement le "comment" du code.
  • Une structure type inclut : la présentation du problème, les choix de conception, l'explication du pseudo-code (avec des commentaires) et une analyse de la performance.
  • Savoir expliquer son travail clairement est une compétence aussi importante que de savoir le concevoir.

Ce document que vous venez de créer sera la base de notre toute dernière leçon, où vous apprendrez à présenter et justifier oralement votre solution. Vous êtes presque au bout de ce projet de synthèse