Passer au contenu

Développement créatif

AP Principes de l'informatique · Sujet 1

Leçon vidéo pour ce sujet Ouvrir la page vidéo
6:15

Développement créatif

Voici un programme qui devrait afficher la moyenne de deux nombres. Il s'exécute. Il ne plante pas. Il affiche une réponse — et cette réponse est fausse. Donnez-lui quatre et six…

Narration en anglais · sous-titres en anglais et en 中文 au choix

1.1

Collaboration

Programme

Compréhension durable (CRD-1) : L'intégration de multiples perspectives grâce à la collaboration améliore les innovations informatiques au fur et à mesure de leur développement.

Objectif d'apprentissage CRD-1.A : Expliquer comment les innovations informatiques sont améliorées grâce à la collaboration. [Compétence 1.C]

  • CRD-1.A.1 Une innovation informatique comprend un programme comme partie intégrante de sa fonction.
  • CRD-1.A.2 Une innovation en informatique peut être physique (par ex., une voiture autonome), un logiciel de calcul non physique (par ex., un logiciel de retouche d'images) ou un concept de calcul non physique (par ex., le commerce électronique).
  • CRD-1.A.3 Une collaboration efficace produit une innovation en informatique qui reflète la diversité des talents et des perspectives de ceux qui l'ont conçue.
  • CRD-1.A.4 La collaboration incluant des perspectives diverses aide à éviter les biais dans le développement des innovations informatiques.
  • CRD-1.A.5 La consultation et la communication avec les utilisateurs sont des aspects importants du développement des innovations informatiques.
  • CRD-1.A.6 Les informations recueillies auprès des utilisateurs potentiels peuvent servir à comprendre la finalité d'un programme sous divers angles et à développer un programme intégrant pleinement ces perspectives.

Objectif d'apprentissage CRD-1.B : Expliquer comment les innovations informatiques sont développées par des groupes de personnes. [Compétence 1.C]

  • CRD-1.B.1 Les outils en ligne facilitent la collaboration en permettant aux programmateurs de partager et de fournir des commentaires sur des idées et des documents.
  • CRD-1.B.2 Des modèles courants tels que la programmation en binôme existent pour faciliter la collaboration.

Objectif d'apprentissage CRD-1.C : Démontrer des compétences interpersonnelles efficaces lors d'une collaboration. [Compétence 1.C]

  • CRD-1.C.1 Les équipes collaboratives efficaces pratiquent des compétences interpersonnelles, y compris mais sans s'y limiter :
    • la communication
    • la construction du consensus
    • la résolution de conflits
    • la négociation

Source : Description du cours et de l'examen AP College Board

Un puzzle en cours : collaboration et conception modulaire assemblent la solution
Un puzzle en cours : collaboration et conception modulaire assemblent la solution

En 1999, la NASA a perdu la sonde Mars Climate Orbiter, qui avait coûté bien plus de cent millions de dollars. Le code n’était pas mal écrit. Le logiciel d’une équipe fournissait ses nombres en unités américaines, tandis que celui d’une autre équipe les interprétait comme des unités métriques. Chaque élément fonctionnait seul ; la défaillance se situait dans la coordination entre les personnes. Cette unité porte sur la façon dont les programmes sont réellement créés : en groupe, pour des utilisateurs, par cycles répétés, en détectant et en corrigeant les erreurs au fur et à mesure.

L'informatique est une activité collaborative. Travailler en équipe apporte plus de perspectives, détecte plus d'erreurs et produit de meilleurs programmes que le travail individuel. Une bonne collaboration repose sur la construction du consensus, une communication claire et l'utilisation des forces de chaque membre. La programmation en binôme – deux personnes devant un seul ordinateur, l'un tapant et l'autre relisant – est une pratique courante. Aux examens, vous devrez pouvoir expliquer comment la collaboration a amélioré un programme (plus d'idées, moins de bugs, tests plus larges).

Une innovation informatique est toute nouveauté dont un programme constitue une partie essentielle. Elle peut être matérielle (une voiture autonome), logicielle (un logiciel de retouche photo) ou conceptuelle (les achats en ligne). Lorsqu’une question mentionne une « innovation informatique », chacun de ces trois types convient.

Pourquoi la diversité des personnes compte. Des personnes aux parcours différents remarquent des problèmes différents. Une équipe qui réunit des points de vue variés est plus susceptible d’éviter les biais, car quelqu’un demandera « qu’en est-il des utilisateurs comme moi ? ». Les développeurs échangent aussi directement avec les utilisateurs : leurs propos aident l’équipe à comprendre à quoi sert le programme et pour qui il doit fonctionner.

Compétences et outils. Les bonnes équipes pratiquent la communication, la recherche de consensus, la résolution des conflits et la négociation. Des outils en ligne comme les documents partagés et les dépôts de code partagés permettent de donner des retours depuis n’importe où.

Exemple résolu. Deux élèves construisent une application de quiz. Mei écrit la procédure de notation tandis que Tom relit chaque ligne au fur et à mesure qu'elle tape ; plus tard, Tom demande à cinq camarades de tester l'application, et deux d'entre eux constatent qu'une réponse vide provoque un plantage. Comment la collaboration a-t-elle aidé ?

  1. Tom vérifie le code à mesure qu’il est saisi (programmation en binôme), ce qui peut permettre de détecter les erreurs tôt.
  2. Les camarades de classe sont des utilisateurs avec des habitudes différentes ; leurs tests ont révélé un cas que ni l'un ni l'autre programmeur n'avait envisagé, la réponse vide.
  3. Chaque avantage est nommé et lié au programme : « plus d'essayeurs ont détecté le crash à réponse vide » rapporte un crédit là où « le travail d'équipe est bon » ne le fait pas.

Exemple corrigé : un désaccord. Deux membres d’une équipe ne sont pas d’accord : Sara souhaite un chronomètre pour chaque question du quiz, tandis que Li estime qu’un chronomètre inquiétera les utilisateurs nerveux. Quelle est la meilleure prochaine étape ?

  • Sara et Li votent et la personne qui perd cède : c’est rapide, mais les utilisateurs ne sont pas pris en compte.
  • Chacun crée sa propre version sans jamais la partager : l’équipe se divise.
  • Ils interrogent des utilisateurs, puis conviennent ensemble d’une règle, par exemple un chronomètre que les utilisateurs peuvent désactiver.

La troisième solution est une recherche de consensus : la décision repose sur des éléments concrets et les deux personnes l’acceptent.

Vocabulaire Entrainer
English Français
collaborative/kəˈlæbrətɪv/ Collaboratif
perspectives/pəˈspektɪvz/ Perspectives
consensus building construction du consensus
Pair programming/peə ˈprəʊɡræmɪŋ/ programmation en binôme
bug/bʌɡ/ bug : bogue
testing/ˈtestɪŋ/ test
computing innovation/kəmˈpjuːtɪŋ ˌɪnəˈveɪʃn/ computing innovation : innovation informatique
bias/ˈbaɪəs/ biais
user/ˈjuːzə/ utilisateur
conflict resolution résolution des conflits
negotiation/nɪˌɡəʊʃɪˈeɪʃn/ négociation
purpose/ˈpɜːpəs/ Objectif
input/ˈɪnpʊt/ Entrée
output/ˈaʊtpʊt/ sortie
program/ˈprəʊɡræm/ programme
software/ˈsɒftweə/ logiciel
code segment segment de code
behavior/bɪˈheɪvjə/ Comportement
1.2

Fonction et but du programme

Programme

Compréhension durable (CRD-2) : Les développeurs créent et innoveront grâce à un processus de conception itératif axé sur l'utilisateur, qui intègre des cycles d'implémentation/retour d'information, et qui laisse largement de place à l'expérimentation et à la prise de risque.

Objectif d'apprentissage CRD-2.A : Décrire la finalité d'une innovation en informatique. [Compétence 1.A]

  • CRD-2.A.1 La finalité des innovations informatiques est de résoudre des problèmes ou de poursuivre des intérêts par l'expression créative.
  • CRD-2.A.2 Comprendre la finalité d'une innovation en informatique permet aux développeurs de développer cette innovation de manière améliorée.

Objectif d'apprentissage CRD-2.B : Expliquer comment un programme ou un segment de code fonctionne. [Compétence 4.A]

  • CRD-2.B.1 Un programme est un ensemble d'instructions de programme qui effectue une tâche spécifique lorsqu'il est exécuté par un ordinateur. Un programme est souvent appelé logiciel.
  • CRD-2.B.2 Un segment de code est un ensemble d'instructions de programme qui fait partie d'un programme.
  • CRD-2.B.3 Un programme doit fonctionner pour une variété d'entrées et de situations.
  • CRD-2.B.4 Le comportement d'un programme est la façon dont il fonctionne pendant son exécution et est souvent décrit par la manière dont un utilisateur interagit avec lui.
  • CRD-2.B.5 Un programme peut être décrit globalement par ce qu'il fait, ou plus en détail par à la fois ce que fait le programme et comment les instructions du programme accomplissent cette fonction.

Objectif d'apprentissage CRD-2.C : Identifier l(les) entrée(s) d'un programme. [Compétence 3.A]

  • CRD-2.C.1 Les entrées de programme sont des données envoyées à un ordinateur pour traitement par un programme. L'entrée peut prendre diverses formes, telles que tactile, audio, visuelle ou textuelle.
  • CRD-2.C.2 Un événement est associé à une action et fournit des données d'entrée à un programme.
  • CRD-2.C.3 Les événements peuvent être générés lorsqu'une touche est enfoncée, qu'un clic de souris est effectué, qu'un programme est lancé ou qu'une autre action définie se produit affectant le flux d'exécution.
  • CRD-2.C.4 Les entrées affectent généralement la sortie produite par un programme.
  • CRD-2.C.5 En programmation événementielle, les instructions de programme sont exécutées lorsqu'elles sont déclenchées plutôt que par le flux séquentiel de contrôle.
  • CRD-2.C.6 L'entrée peut provenir d'un utilisateur ou d'autres programmes.

Objectif d'apprentissage CRD-2.D : Identifier la(les) sortie(s) produites par un programme. [Compétence 3.A]

  • CRD-2.D.1 Les sorties de programme sont toutes les données envoyées d'un programme vers un périphérique. La sortie de programme peut prendre diverses formes, telles que tactile, audio, visuelle ou textuelle.
  • CRD-2.D.2 La sortie de programme est généralement basée sur l'entrée d'un programme ou son état précédent (par ex., les valeurs internes).

Source : Description du cours et de l'examen AP College Board

Chaque programme est écrit pour un but précis – il résout un problème ou répond à un intérêt. Un programme prend une entrée, la traite et produit une sortie. Les entrées peuvent provenir d'un utilisateur, d'un appareil, d'un fichier ou d'un autre programme ; les sorties peuvent être visuelles, sonores, textuelles ou un signal envoyé à un appareil. Savoir énoncer clairement le but d'un programme et décrire ses entrées et sorties est une compétence fondamentale (et fait partie de la tâche de création).

Quelques termes employés précisément dans l’examen :

  • Un programme (aussi appelé logiciel) est un ensemble d’instructions qui accomplit une tâche lorsqu’un ordinateur l’exécute. Un segment de code est une partie d’un programme.
  • Le comportement d’un programme correspond à la façon dont il agit pendant son exécution ; il est généralement décrit par la manière dont un utilisateur interagit avec lui.
  • Les entrées comme les sorties peuvent être tactiles (toucher, vibration), audio, visuelles ou textuelles.
  • Les sorties dépendent généralement des entrées et peuvent aussi dépendre de l’état antérieur : les valeurs déjà détenues par le programme.

Vous pouvez décrire un programme de manière générale (ce qu’il fait) ou plus détaillée (ce qu’il fait et comment ses instructions le font). Une réponse écrite exige généralement la seconde approche.

Tout programme se décompose en entrée, traitement et sortie
Tout programme se décompose en entrée, traitement et sortie
Tout programme suit le modèle entrée-traitement-sortie
Tout programme suit le modèle entrée-traitement-sortie

Exemple corrigé. Une application de comptage de pas lit les mouvements captés par le capteur de mouvement du téléphone, compte les pas et affiche le total du jour ainsi qu’un badge lorsque l’utilisateur atteint 10,000.

Demande Réponse
Finalité : pourquoi il existe pour aider les utilisateurs à rester actifs en suivant leur marche
Fonctionnalité : ce qu'il fait compte les pas et compare le total à un objectif
Entrée relevés du capteur de mouvement ; l'objectif de l'utilisateur
Sortie le total des pas affiché à l'écran ; un insigne à 10,000

Le badge montre aussi l’état antérieur à l’œuvre : une même entrée correspondant à un pas ne donne un badge que si le total enregistré vient d’atteindre l’objectif.

Une erreur fréquente consiste à confondre la fonctionnalité avec la finalité : dire « il compte les pas » indique ce que fait le programme, pas le problème qu'il résout.

Explorer

Explorer le modèle entrée → traitement → sortie

Parcourez le modèle ETP. Chaque programme prend une entrée, effectue un traitement en suivant ses instructions, puis produit une sortie — suivez un exemple d'application météo à travers la chaîne.

Vocabulaire Entrainer
English Français
tactile tactile
iterative/ˈɪtərətɪv/ Itératif
1.3

Conception et développement de programme

Programme

Compréhension durable (CRD-2) : Les développeurs créent et innoveront grâce à un processus de conception itératif axé sur l'utilisateur, qui intègre des cycles d'implémentation/retour d'information, et qui laisse largement de place à l'expérimentation et à la prise de risque.

Objectif d'apprentissage CRD-2.E : Développer un programme en utilisant un processus de développement. [Compétence 1.B]

  • CRD-2.E.1 Un processus de développement peut être ordonné et intentionnel, ou exploratoire par nature.
  • CRD-2.E.2 Il existe plusieurs processus de développement. Les phases suivantes sont couramment utilisées lors du développement d'un programme :
    • l'enquête et la réflexion
    • la conception
    • la prototypage
    • le test
  • CRD-2.E.3 Un processus de développement itératif nécessite des raffinements et des révisions basés sur les retours d'information, les tests ou la réflexion tout au long du processus. Cela peut nécessiter de revenir aux phases antérieures du processus.
  • CRD-2.E.4 Un processus de développement incrémental est celui qui divise le problème en petits morceaux et s'assure que chaque morceau fonctionne avant de l'ajouter à l'ensemble.

Objectif d'apprentissage CRD-2.F : Concevoir un programme et son interface utilisateur. [Compétence 1.B]

  • CRD-2.F.1 La conception d'un programme intègre une enquête pour déterminer ses exigences.
  • CRD-2.F.2 L'enquête dans un processus de développement est utile pour comprendre et identifier les contraintes du programme, ainsi que les préoccupations et intérêts des personnes qui utiliseront le programme.
  • CRD-2.F.3 Certaines façons dont l'enquête peut être réalisée sont les suivantes :
    • la collecte de données par sondages
    • les tests utilisateurs
    • les entretiens
    • les observations directes
  • CRD-2.F.4 Les exigences du programme décrivent comment un programme fonctionne et peuvent inclure une description des interactions utilisateur qu'un programme doit fournir.
  • CRD-2.F.5 La spécification d'un programme définit les exigences du programme.
  • CRD-2.F.6 Dans un processus de développement, la phase de conception énonce comment réaliser une spécification de programme donnée.
  • CRD-2.F.7 La phase de conception d'un programme peut inclure :
    • le brainstorming
    • la planification et le storyboarding
    • l'organisation du programme en modules et composants fonctionnels
    • la création de diagrammes représentant les mises en page de l'interface utilisateur
    • le développement d'une stratégie de test pour le programme

Objectif d'apprentissage CRD-2.G : Décrire la finalité d'un segment de code ou d'un programme en rédigeant de la documentation. [Compétence 4.A]

  • CRD-2.G.1 La documentation de programme est une description écrite de la fonction d'un segment de code, d'un événement, d'une procédure ou d'un programme et de la façon dont il a été développé.
  • CRD-2.G.2 Les commentaires sont une forme de documentation de programme écrite directement dans le programme pour être lue par des humains et n'affectent pas le fonctionnement d'un programme.
  • CRD-2.G.3 Les programmateurs doivent documenter un programme tout au long de son développement.
  • CRD-2.G.4 La documentation de programme facilite le développement et le maintien de programmes corrects lors du travail individuel ou dans des environnements de programmation collaboratifs.
  • CRD-2.G.5 Tous les environnements de programmation ne prennent pas en charge les commentaires, donc d'autres méthodes de documentation peuvent être nécessaires.

Objectif d'apprentissage CRD-2.H : Reconnaître les segments de code utilisés provenant d'autres sources. [Compétence 1.C]

  • CRD-2.H.1 Il est important de reconnaître tout segment de code qui a été développé collaborativement ou par une autre source.
  • CRD-2.H.2 La reconnaissance d'un ou de segments de code écrits par quelqu'un d'autre et utilisés dans un programme peut figurer dans la documentation du programme. La reconnaissance doit inclure l'origine ou le nom de l'auteur original.

Source : Description du cours et de l'examen AP College Board

Un programmeur en train de déboguer sur un poste de travail multi-écrans — conception et test itératifs
Un programmeur en train de déboguer sur un poste de travail multi-écrans — conception et test itératifs

Les programmes se construisent selon un processus itératif, et non linéairement : explorer le problème et les utilisateurs, concevoir (souvent avec un diagramme ou un plan écrit), implémenter en code, puis tester — et répéter. Un problème complexe est décomposé en sous-parties (décomposition). Les commentaires et une nommentation claire documentent la conception afin que d'autres (et votre futur moi) puissent la comprendre. Le développement est incrémental : on construit et teste une petite partie, puis on ajoute la suivante.

Les phases courantes comprennent l’étude et la réflexion, la conception, la création d’un prototype (un premier modèle fonctionnel) et les tests. L’ordre peut être planifié à l’avance ou plus exploratoire, et une équipe peut revenir à une phase précédente à tout moment.

Exemple corrigé : itératif ou incrémental ? Les deux mots se ressemblent et l’examen les distingue.

Ce que fait l’équipe Terme Pourquoi
Les personnes chargées des tests indiquent que le texte est trop petit, donc l’équipe revient à la conception et la modifie itératif les retours conduisent l’équipe à revenir en arrière pour apporter des modifications
L’équipe affiche les questions, teste cette fonction, ajoute le calcul des points, le teste, puis ajoute un chronomètre incrémental un élément à la fois, chacun fonctionnant avant d’être intégré à l’ensemble

Un projet réel combine généralement les deux approches.

Les étapes du développement de programme, avec le test qui fournit des retours pour corriger et affiner
Les étapes du développement de programme, avec le test qui fournit des retours pour corriger et affiner
Le logiciel est construit par un processus de développement itératif et incrémental
Le logiciel est construit par un processus de développement itératif et incrémental

Enquêter sur ce dont les utilisateurs ont réellement besoin

Avant d’écrire du code, le développeur étudie le problème et les personnes qui utiliseront le programme. Voici un moyen de le faire :

  • des enquêtes envoyées aux utilisateurs potentiels, qui collectent rapidement des données auprès de nombreuses personnes;
  • des entretiens et une observation directe des utilisateurs effectuant la tâche manuellement;
  • les tests utilisateurs, au cours desquels des personnes essaient une première version sous le regard de l’équipe ;
  • l'étude de solutions existantes pour voir ce qui fonctionne déjà et ce qui frustre les gens.

Les résultats sont transformés en conception. Deux artefacts servent à cela : une liste de spécifications du programme précisant exactement ce que le programme doit faire, et des diagrammes représentant la mise en page de l'interface utilisateur — des esquisses montrant où apparaissent les commandes et ce que chacune fait lorsqu'elle est utilisée. Concevoir l'interface sur papier d'abord coûte moins cher que de découvrir après codage que les boutons sont mal placés.

La spécification d’un programme définit ses exigences. La phase de conception prévoit ensuite comment y répondre. Elle peut comprendre une séance de remue-méninges, un scénarimage (une suite de croquis de ce que voit l’utilisateur), la division du programme en modules et la planification des tests.

Événements, et programmes qui attendent

Tous les programmes ne s’exécutent pas simplement du début à la fin. Un événement est généré lorsqu’une touche est enfoncée, qu’un clic de souris est effectué, qu’un programme est lancé ou que toute autre action définie se produit — et un événement peut modifier le flux d’exécution en déclenchant le code qui lui est associé, appelé gestionnaire d’événement. Dans de nombreux programmes graphiques, les événements attendent dans une file jusqu’à ce que le gestionnaire en cours ait terminé.

C’est pourquoi un programme doté d’une interface graphique peut sembler ne rien faire : il attend le prochain événement. L’ordre d’arrivée de ces événements dépend des actions de l’utilisateur et d’autres sources d’événements ; un même programme peut donc exécuter ses blocs dans un ordre différent à chaque utilisation.

Cette approche s’appelle la programmation événementielle : les instructions s’exécutent lorsqu’elles sont déclenchées, et non les unes après les autres depuis le début. L’événement fournit également des données d’entrée, comme la touche qui a été enfoncée.

Documentation et attribution

La documentation d’un programme est une description écrite de ce que fait un segment de code, un événement, une procédure ou un programme et de la manière dont il a été développé. Les commentaires en sont une forme : ils sont écrits pour les personnes et ne modifient pas l’exécution du programme. Tous les environnements de programmation ne permettent pas d’ajouter des commentaires ; la documentation se trouve donc parfois dans un fichier séparé.

Rédigez la documentation tout au long du développement, et non à la fin : elle vous aide, vous et vos coéquipiers, à maintenir le programme correct.

Le code provenant d’une autre personne doit être attribué à son auteur : indiquez dans la documentation sa provenance et le nom de l’auteur d’origine si vous le connaissez. Cela s’applique aussi au code écrit avec un partenaire.

Explorer

Parcourez le processus de développement itératif

Le développement est itératif : vous répétez les étapes, améliorant le programme un peu à chaque tour. Parcourez la boucle et remarquez qu'elle revient au début plutôt que de s'arrêter après un seul passage.

Vocabulaire Entrainer
English Français
diagram diagramme
implement implémenter
decomposition/ˌdiːkɒmpəˈzɪʃn/ décomposition
Comments/ˈkɒments/ commentaires
incremental/ˌɪŋkrɪˈmentl/ Incrémental
prototype/ˈprəʊtəʊtaɪp/ Prototype
surveys/ˈsɜːveɪz/ enquêtes
interview/ˈɪntəvjuː/ entretien
observation/ɒbzəˈveɪʃn/ observation
user testing tests utilisateurs
program requirements spécifications du programme
user interface/ˈjuːzə ˈɪntəfeɪs/ interface utilisateur
specification/ˌspesɪfɪˈkeɪʃn/ spécification
storyboard/ˈstɔːribɔːd/ scénarimage
event/ɪˈvent/ événement
flow of execution flux d'exécution
event handler/ɪˈvent ˈhændlə/ Gestionnaire d'événements
event-driven programming programmation événementielle
program documentation documentation du programme
debugging/ˈdiːbʌɡɪŋ/ debugging : débogage
syntax error/ˈsɪntæks ˈerə/ syntax error : erreur de syntaxe
runtime error/ˈrʌntaɪm ˈerə/ runtime error : erreur d'exécution
logic error/ˈlɒdʒɪk ˈerə/ logic error : erreur logique
overflow error/ˌəʊvəˈfləʊ ˈerə/ overflow error : dépassement de capacité
test case cas de test
print statement instruction d'affichage
hand-tracing suivi manuel
debugger/ˈdiːbʌɡə/ débogueur
visualization/ˌvɪʒuːəlaɪˈzeɪʃn/ Visualisation
order of operations/ˈɔːdə ɒv ˌɒpəˈreɪʃnz/ ordre des opérations
feedback/ˈfiːdbæk/ rétroaction
1.4

Identifier et corriger les erreurs

Programme

Compréhension durable (CRD-2) : Les développeurs créent et innoveront grâce à un processus de conception itératif axé sur l'utilisateur, qui intègre des cycles d'implémentation/retour d'information, et qui laisse largement de place à l'expérimentation et à la prise de risque.

Objectif d'apprentissage CRD-2.I : Pour les erreurs dans un algorithme ou un programme : a. Identifier l'erreur. [Compétence 4.C] b. Corriger l'erreur. [Compétence 4.C]

  • CRD-2.I.1 Une erreur logique est une erreur dans l'algorithme ou le programme qui le fait se comporter incorrectement ou inattendu.
  • CRD-2.I.2 Une erreur de syntaxe est une erreur dans le programme où les règles du langage de programmation ne sont pas respectées.
  • CRD-2.I.3 Une erreur d'exécution est une erreur dans le programme qui survient pendant l'exécution d'un programme. Les langages de programmation définissent leurs propres erreurs d'exécution.
  • CRD-2.I.4 Une erreur de dépassement est une erreur qui survient lorsqu'un ordinateur tente de traiter un nombre qui est en dehors de la plage de valeurs définie.
  • CRD-2.I.5 Les moyens suivants sont efficaces pour trouver et corriger les erreurs :
    • les cas de test
    • le traçage manuel
    • les visualisations
    • les débogueurs
    • l'ajout de statement(s) de sortie supplémentaires

Objectif d'apprentissage CRD-2.J : Identifier les entrées et les sorties attendues ou comportements correspondants pouvant être utilisés pour vérifier la correction d'un algorithme ou d'un programme. [Compétence 4.C]

  • CRD-2.J.1 Dans le processus de développement, le test utilise des entrées définies pour s'assurer qu'un algorithme ou un programme produit les résultats attendus. Les programmateurs utilisent les résultats des tests pour réviser leurs algorithmes ou leurs programmes.
  • CRD-2.J.2 Les entrées définies utilisées pour tester un programme doivent démontrer les différents résultats attendus qui sont à ou juste au-delà des extrêmes (minimum et maximum) des données d'entrée.
  • CRD-2.J.3 Les exigences du programme sont nécessaires pour identifier les entrées définies appropriées pour les tests.

Source : Description du cours et de l'examen AP College Board

Un bogue est une erreur dans un programme ; le débogage consiste à la trouver et à la corriger. L’examen distingue quatre types d’erreurs :

  • une erreur de syntaxe viole les règles du langage, empêchant ainsi le programme de s'exécuter;
  • une erreur d'exécution fait planter le programme pendant son fonctionnement (par exemple, une division par zéro);
  • une erreur logique laisse le programme s’exécuter, mais produit un résultat incorrect ;
  • une erreur de dépassement de capacité se produit lorsqu’un nombre se situe hors de la plage que l’ordinateur peut traiter.
Une table de traçage enregistre la valeur de chaque variable au fur et à mesure que le programme s'exécute, afin de détecter les bogues
Une table de traçage enregistre la valeur de chaque variable au fur et à mesure que le programme s'exécute, afin de détecter les bogues

Repérez les bogues à l’aide de cas de test utilisant différentes entrées, en ajoutant des instructions d’affichage pour voir les valeurs et en suivant l’exécution du code à la main. Un débogueur arrête le programme à une ligne choisie afin de permettre l’examen de chaque variable, et une visualisation, comme un graphique, peut rendre une anomalie facile à voir. Choisissez les entrées de test délibérément : elles doivent montrer les différents résultats attendus aux limites ou juste au-delà — les valeurs minimale et maximale que le programme doit accepter, ainsi qu’une valeur juste en dehors de chacune de ces limites. Un programme qui fonctionne avec des données ordinaires échoue très souvent avec une liste vide, un zéro ou une valeur située juste après la fin d’une plage ; ce sont donc les entrées à essayer en premier. La méthode fiable consiste à corriger un bogue à la fois, puis à refaire les tests.

Exemple corrigé : choisir les entrées de test. Une page d’inscription à un club doit accepter les âges de 13 à 18. Les exigences indiquent le résultat correct ; vous pouvez donc choisir des entrées et préciser le résultat attendu :

Une droite graduée des âges sur laquelle les valeurs de 13 à 18 sont indiquées comme acceptées ; les tests avec 12 et 19 sont rejetés et ceux avec 13, 15 et 18 sont acceptés
Testez les deux limites de la plage et une valeur juste au-delà de chacune

Cinq tests suffisent : 12, 13, 15, 18 et 19. Si le code indique age > 13, seul le test avec 13 révèle l’erreur ; l’âge 15 est accepté dans les deux cas.

Compétence d'examen : savoir nommer le type d'erreur et décrire une stratégie de test capable de la détecter — thème récurrent en QCM et en tâche Create.

Trois types d'erreurs de programmation : syntaxe, logique et exécution
Trois types courants d’erreurs de programmation : syntaxe, logique et exécution

Exemple résolu. Un programme censé afficher la moyenne de deux nombres exécute au lieu de cela avg = a + b / 2. En traçant l'ordre des opérations, / s'exécute avant +, calculant ainsi $a+\tfrac{b}{2}$ plutôt que la moyenne. Ajouter des parenthèses corrige l'erreur : avg = (a + b) / 2. Tester avec $a=4,\ b=6$ confirme la correction — la ligne erronée produit $4+3=7$, la ligne corrigée produit $\tfrac{10}{2}=5$. Tester avec des entrées connues est exactement la méthode permettant de repérer et de valider une erreur logique.

Exemple corrigé : nommer l’erreur.

Ce qui se produit Type Raison
Il manque un crochet fermant à DISPLAY(score ; rien ne s’exécute syntaxe une règle du langage n’est pas respectée
list[0] arrête le programme avec un message d’erreur exécution les listes AP commencent à l’indice 1 et l’erreur ne se produit qu’à l’exécution
Une remise de 10 % est considérée comme une remise de 10 dollars logique le programme s’exécute et la réponse est incorrecte
On ajoute 1 à un compteur de 4 bits dont la valeur est 1111 dépassement de capacité 16 est hors de la plage

Réponses écrites sur votre propre programme

La section II de l’examen accorde 60 minutes pour deux questions comportant quatre consignes de réponse écrite, toutes relatives au programme que vous avez soumis pour la tâche de création. Vous voyez vos propres segments de code dans votre document de référence personnalisé du projet ; les réponses doivent donc porter sur votre programme, et non sur les programmes en général. Imaginez que la procédure suivante figure dans le vôtre :

PROCEDURE Average(numbers)
{
   sum ← 0
   FOR EACH n IN numbers
   {
      sum ← sum + n
   }
   RETURN(sum / LENGTH(numbers))
}

Les consignes des examens précédents ont demandé les éléments suivants.

  1. Une modification qui provoque une erreur logique et la manière dont le comportement change. « Si sum ← 0 est remplacé par sum ← 1, la procédure s’exécute toujours, mais chaque total est supérieur d’une unité à la valeur attendue. Average([2, 4]) renvoie $3.5$ au lieu de $3$. »
  2. Un appel que la procédure accepte mais traite incorrectement. « Average([]) : la liste vide est acceptée, mais LENGTH(numbers) vaut 0 ; la dernière ligne divise donc par zéro et une erreur d’exécution arrête le programme. » Indiquez l’appel, le comportement incorrect et la raison : ce sont trois éléments distincts.
  3. Une documentation destinée à un autre programmeur. « Un commentaire au-dessus de la procédure indiquant que numbers ne doit pas être vide. Un autre programmeur qui réutilise Average sait ainsi qu’il doit vérifier que la liste n’est pas vide avant de l’appeler. »
  4. Une entrée inattendue. Nommez une entrée réelle de votre programme et indiquez ce que celui-ci fait ensuite. S’il rejette l’entrée, indiquez la ligne qui effectue ce rejet.

Erreurs courantes. Décrire une modification sans indiquer ce qui change lors de l’exécution du programme. Donner un appel sans valeurs d’arguments précises. Répondre à propos d’une procédure différente de celle que la consigne désigne.

Explorer

Suivez la logique du jeu de devinette et repérez une erreur de logique

Faites glisser la réponse et observez quelle branche s'exécute. Une erreur de logique enverrait la même réponse sur la mauvaise branche — le programme s'exécute toujours, mais affiche le mauvais message. Le numéro secret ici est 50.

1.4

Pratique

Répondez à chaque question avant de lire les réponses ci-dessous.

  1. Une application de podomètre compte les pas et affiche un total quotidien afin que les utilisateurs puissent atteindre un objectif. Indiquez la finalité du programme et l’une de ses fonctions.
  2. Classez chaque erreur : syntaxe, logique, exécution ou dépassement de capacité : (a) un crochet fermant manquant ; (b) une moyenne calculée comme sum / (count + 1) ; (c) une division par une variable qui vaut zéro pendant l’exécution du programme ; (d) l’ajout de $1$ à la plus grande valeur qu’un nombre fixe de bits peut stocker.
  3. Une procédure renvoie "pass" pour les scores supérieurs ou égaux à $60$. Choisissez quatre entrées de test et expliquez vos choix.
  4. Donnez un avantage de la collaboration lors de la conception d’un programme.
  5. Distinguez le développement itératif du développement incrémental.
  6. Donnez deux raisons de rédiger des commentaires et d’autres documents relatifs au programme.
1.4

Réponses

  1. Finalité : aider les utilisateurs à atteindre un objectif quotidien d’activité. Fonction : par exemple, ajouter $1$ au total chaque fois qu’un pas est détecté ou afficher le total.
  2. (a) Syntaxe ; (b) logique ; (c) exécution ; (d) dépassement de capacité.
  3. $59$, $60$ et $61$ testent la limite, où les erreurs sont les plus probables ; une valeur extrême telle que $0$ ou $100$ vérifie les limites des entrées valides.
  4. Des points de vue différents aident à trouver les erreurs et à éviter les biais, afin que le programme fonctionne pour davantage d’utilisateurs (par exemple, la programmation en binôme permet de repérer les erreurs plus tôt).
  5. Le développement itératif répète des cycles de conception, de test et d’amélioration, en révisant le programme après les retours reçus. Le développement incrémental construit et teste le programme par petits éléments, en ajoutant une partie fonctionnelle à la fois.
  6. Elle explique ce que fait le code et pourquoi, afin que d’autres personnes (et l’auteur plus tard) puissent le comprendre, le maintenir et le déboguer ; elle consigne également les sources du code emprunté.
1.4

Conseils d'examen

  • L'évaluation comprend des questions à choix multiples et la composante Créer, avec des réponses écrites sur l'examen AP. Expliquez clairement votre raisonnement, pas seulement votre résultat.
  • Connaissez les avantages de la collaboration et la façon dont des perspectives diverses réduisent les biais dans un programme.
  • Utilisez un vocabulaire précis (itératif, incrémental, exigences du programme) lorsque vous décrivez un processus de conception.
  • Testez les limites de la plage d’entrée et les valeurs juste au-delà, et indiquez la sortie attendue pour chaque test.
  • donner et recevoir des retours constructifs ; reconnaître les collaborateurs et les sources.
  • Décomposez un grand problème en modules plus petits qu'une équipe peut construire en parallèle.

Leçons interactives sur ce sujet

Traversez-le étape par étape, avec des exercices à vérification instantanée.

Épreuves Passées

Plus de sujets dans AP Principes de l'informatique

Se connecter ou créer un compte

IGCSE, A-Level & AP