Quelle est la place du débogage dans la programmation ?
Les formateurs de CodeUnion pensent qu'elle est la compétence la plus précieuse à enseigner

Le , par Amine Horseman, Expert éminent sénior
Si vous écrivez un programme et qu’il marche du premier coup sans aucun problème, c’est que quelque chose cloche. Voilà un fait dont tout le monde (ou presque) est d’accord.

En effet, les développeurs les plus expérimentés savent bien que le processus de débogage est une phase très importante de la programmation. D’ailleurs ça prend généralement plus de temps pour déboguer un code que de l’écrire, on a même créé des outils spéciaux rien que pour ça.
Ce qui fait du débogage une compétence essentielle que tout apprenti programmateur devra s’y intéresser.

« Si les novices vont dépenser beaucoup de leur temps à déboguer, alors ne devrions-nous pas, en tant qu'enseignants, dépenser une quantité proportionnelle de temps à leur enseigner comment bien le faire? », se demandent les formateurs de CodeUnion dans un billet de blog, ceci parce qu’ils avaient remarqué que la plupart des questions posées par leurs élèves étaient dues à une difficulté à détecter pourquoi leur code ne marchait pas comme prévu. Selon eux, chacun devrait se poser 3 questions lorsqu’il rencontre un problème :

  1. Qu'est-ce qui me fait dire que mon code ne fonctionne pas ?
  2. Qu'est-ce que mon code est censé faire et pourquoi ?
  3. Qu'est-ce que mon code fait à la place et comment je le sais ?

Cette méthodologie serait l’une des bonnes pratiques qu’un programmeur expérimenté intègre dans ses habitudes, même s’il le fait inconsciemment. Une autre difficulté réside dans le fait d’énumérer toutes les hypothèses assumées dans son algorithme ainsi que son code de sorte à pouvoir les tester une à une. Aussi, les apprentis programmeurs ne savent souvent pas poser les bonnes questions. En effet, lorsqu’on demande de l’aide à un expert, il faut bien lui définir ce que le code est censé faire et ce qu’il fait à la place.

« Il est impossible de préparer vos élèves pour chaque situation future possible, même en supposant que vous les connaissez toutes. Cela signifie que la meilleure chose à faire est de leur apprendre à s’orienter en cas de confusion ou dans des situations incertaines […] Notre travail est donc de minimiser les mauvaises habitudes de nos élèves tout en les aidant à développer le plus efficacement », peut-on lire dans le billet de blog.

Au final, les formateurs de CodeUnion pensent que le débogage est « la compétence la plus précieuse que à enseigner », et qu’elle est beaucoup trop négligée dans les formations. Pourtant, c’est elle « qui facilite, par la suite, l'acquisition de toutes les autres compétences de programmation ».

Source : CodeUnion

Et vous ?

Pensez-vous aussi que le débogage est la compétence la plus importante à enseigner ?

Pensez-vous que le débogage est négligé dans les formations en informatique ?

Quels sont les critères qui font de quelqu'un « un expert du débogage » ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de dfiad77pro dfiad77pro - Membre éprouvé http://www.developpez.com
le 27/11/2014 à 9:32
Bien-sûr que l'enseignement du débogage est primordial.
Cela dit ce n'est pas le plus important dans l'enseignement, il y'a tellement de domaines qui font un bon développeur .

Cela dit, sur beaucoup de projet (métier interne) on néglige des éléments essentiels :

1) Tests Unitaires

2) Débogage par IHM ( Ou débogage par création de fonctionnalité hors spécification)

Cette notion peut paraître stupide et effraye beaucoup d'entreprises mais le débogage graphique peut être fondamental.

Par exemple sur un moteur de tarifs pour le transport, il est important de prévoir des outils statistiques pouvant servir aussi bien pour le métier que pour le débogage.
- Carte géographique d’analyse thématique : distance/coût, etc
- Graphique de moyenne, écart type , dégressivité, ...


En effet mettre en oeuvre ce genre de chose est plus intéressant que le débogage avec tableau car il s'adresse aussi bien au DEV qu'au métier,
cela peut permettre de voir rapidement des anomalies en production (force utilisateur).
Cela dit les entreprises ont une politique de suppression de l’inutile, et préfèrent perdre plus d'argent en maintenance ( en plus avec le turnOver massif c'est catastrophique)

Le débogage ne doit pas corriger que les bugs/plantages facilement visibles.
Avatar de ustensile ustensile - Membre régulier http://www.developpez.com
le 27/11/2014 à 10:18
Un des gars qui m'a formé disait: " on devrait pas avoir besoin de débugger, si on en a besoin, c'est que le développement est pourri, recommence" c'est pas faux mais débugger fait gagner beaucoup de temps et permet d'apprendre de ses erreurs
Avatar de Bousk Bousk - Rédacteur/Modérateur http://www.developpez.com
le 27/11/2014 à 10:36
L'utilisation du debugger est essentiel. Croire qu'on peut écrire un code tout bon, c'est valable que pour des projets étudiants (et encore), où le nombre de lignes total ne dépasse les quelques milliers dans le meilleure/pire des cas.
Dans la vraie vie, tu développes ton truc, ça marche, ton voisin (ou un mec à l'autre bout de la planète) en développe une autre, ça marche, mais sans s'en apercevoir il a impacté ton morceau, qui ne marche plus.
C'est bien parce que les applications sont complexes qu'on a besoin de debugger. Parce qu'on a oublié certains cas précis, parce que....

Savoir debugger est primordial pour toute personne voulant faire du dev son métier, ou voulant faire du dev un tantinet sérieux. Le problème étant surtout que pour vouloir apprendre à utiliser le debugger aux étudiants, malheureusement leurs projets/TP/cours ne proposent que des développements triviaux qui n'en ont pas vraiment utilité.
Debugger un hello world, comment dire...

Sinon pour se vanner, j'ai 2 MOTO à ce sujet
- tester c'est douter
- debugger c'est tricher
Avatar de _skip _skip - Expert éminent http://www.developpez.com
le 27/11/2014 à 10:41
Citation Envoyé par Amine Horseman  Voir le message
Pensez-vous aussi que le débogage est la compétence la plus importante à enseigner ?
Pensez-vous que le débogage est négligé dans les formations en informatique ?

Non, sérieux c'est un travail qui se fait inconsciemment. Si on a besoin d'expliquer à quelqu'un comment il doit débugger son code, c'est que ce quelqu'un n'a pas un niveau suffisant pour comprendre ce qu'il fait.

Qu'est-ce qui me fait dire que mon code ne fonctionne pas ?
Qu'est-ce que mon code est censé faire et pourquoi ?
Qu'est-ce que mon code fait à la place et comment je le sais ?

Je regrette, ça s'enseigne pas... C'est une compétence qui se développe dans un coin du cerveau, il y a pas de mode de raisonnement universel qu'on apprend par coeur et qu'on applique. J'ai l'impression que c'est comme avec les tests, les approches de développement, les méthodologies de gestion de projet à la mode, on aimerait pouvoir tout standardiser et mettre dans des manuels qu'il suffirait de suivre.

Quels sont les critères qui font de quelqu'un « un expert du débogage » ?

La pratique? Avec l'expérience on commence à mieux sentir ce qui peut foirer dans un code, et mieux encore, on arrive mieux à isoler les causes des effets et ainsi, on saura plus vite où et dans quelle direction chercher. Et pour rejoindre mon point plus haut, la pratique c'est la chose qui s'apprend le moins bien en école, dommage.
Avatar de Angelsafrania Angelsafrania - Membre averti http://www.developpez.com
le 27/11/2014 à 10:44
Normalement on devrait pas avoir à faire de débug (dans la vie des bisounours).
Dans mon ancien poste, le débug c'était normal on faisait ça quasiment à chaque fois qu'il y avait un problème, c'est à dire plusieurs fois par jour sur des portions de code plus ou moins importantes.
Sur le projet ou je suis actuellement, le débug je m'en sert peut être 1 fois par semaine.
Pourquoi cette différence ? (de mon point de vue).
Sur le projet actuellement j'ai une meilleur vision du code et du métier. (je pense que c'est la principal raison).
Mais aussi on a des tests unitaires qui couvrent presque toute l'application (on doit être à 85%), mais aussi des tests d'intégrations avec des cas métiers.
Je pense que ces deux facteurs expliquent pourquoi je me sert presque plus du débug.

Pour moi un expert du débug c'est une personne qui maîtrise mal, soit son projet, soit le code personne ne devrait être expert débug.
Avatar de AoCannaille AoCannaille - Membre expérimenté http://www.developpez.com
le 27/11/2014 à 11:05
Citation Envoyé par _skip  Voir le message
Non, sérieux c'est un travail qui se fait inconsciemment.

Tu veux dire comme c'est dit dans la news?
Citation Envoyé par News
même s’il le fait inconsciemment.

Plus sérieusement une fois que tu lutte sur un bug depuis un certain temps et que tes mécanismes inconscients n'ont pas suffit, ça peut tjrs servir d'avoir une liste quelque part qui te rappelle quoi essayer ou quoi remettre en cause. Reprendre du recul quoi.

Citation Envoyé par Angelsafrania  Voir le message
Normalement on devrait pas avoir à faire de débug (dans la vie des bisounours).
Dans mon ancien poste, le débug c'était normal on faisait ça quasiment à chaque fois qu'il y avait un problème, c'est à dire plusieurs fois par jour sur des portions de code plus ou moins importantes.
Sur le projet ou je suis actuellement, le débug je m'en sert peut être 1 fois par semaine.
Pourquoi cette différence ? (de mon point de vue).
Sur le projet actuellement j'ai une meilleur vision du code et du métier. (je pense que c'est la principal raison).
Mais aussi on a des tests unitaires qui couvrent presque toute l'application (on doit être à 85%), mais aussi des tests d'intégrations avec des cas métiers.
Je pense que ces deux facteurs expliquent pourquoi je me sert presque plus du débug.

Pour moi un expert du débug c'est une personne qui maîtrise mal, soit son projet, soit le code personne ne devrait être expert débug.

Citation Envoyé par Angelsafrania  Voir le message
Pour moi un expert du débug c'est une personne qui maîtrise mal, soit son projet, soit le code personne ne devrait être expert débug.

Je viens d’atterrir sur un projet en 20 ans d'age (MFC ) ou ceux qui savent où ont su ont disparu. 1,5 million de ligne de code sur 900 classes, avec une 15aine de tâches qui discutent entre elles.
évidement, très peu de doc existe et celle qui existe est souvent obsolète.

Bien maîtriser le débogage est essentiel, même si cela s'apparente finalement a du rétro engineering...
Avatar de BugFactory BugFactory - Membre éprouvé http://www.developpez.com
le 27/11/2014 à 13:54
Je m'étonne des commentaires parlant de n'utiliser que rarement le débogueur, et que l'utiliser souvent est le symptôme d'un problème. Je dois être moins doué que je ne le pensais : je suis incapable d'écrire en une fois un programme qui fonctionne sans erreur du premier coup. (Note : comme je vous vois venir, je ne parle pas de projets de type Hello World, mais d'applications complexes à développer rapidement.) Chez moi, les tests révèlent immanquablement des problèmes et dans ce cas, je recours quasi systématiquement au débogueur, aux logs, à tous les outils disponibles. Je me sers également du débogueur pour vérifier qu'un code qui ne produit pas de résultat visible à l'écran fonctionne comme il doit. Quand un code est complexe, je m'en sers aussi même si le code donne un résultat correct : ça permet de vérifier que le code a donné le résultat correct, mais aussi qu'il y est parvenu de la façon attendue. J'ai pris cette habitude après avoir trop souvent hérité de codes qui renvoyaient le bon résultat par hasard, ne libéraient pas leurs ressources, créaient des effets de bord etc. Le débogueur est aussi très pratique pour faire l’ingénierie à rebours d'une librairie dont la documentation est insuffisante. Il l'est plus encore quand on doit déboguer le code bien sûr non commenté de son prédécesseur.

Retour au sujet du thread : l'enseignement du débogage. A l'évidence, un développeur doit être capable de corriger les problèmes d'un programme. Ce n'est pas simplement important, c'est indispensable. A moins d'imaginer un génie capable d'écrire des millions de lignes de code sans la moindre erreur, qui ne travaillerait qu'avec d'autres génies ne commettant jamais d'erreur, et ne travaillerait qu'avec des outils n'ayant aucune erreur. (Déjà, il faudrait un OS sans aucune faille.)
Maintenant, est-ce la compétence la plus importante à enseigner? Je ne pense pas. Tout d'abord, on ne peut pas déboguer sans comprendre l'algorithmie, ce qui rend cette dernière automatiquement plus importante. Ensuite, même sans compétence spécifique, déboguer peut s'improviser. Ce n'est pas le cas d'autres activités indispensables du métier de développeur comme la conception et l'écriture du code, qui implique de connaitre le langage de programmation.

En revanche, je suis tout à fait d'accord avec CodeUnion pour dire que sa place dans la formation des informaticiens devraient être plus grande. Le débogueur, mais aussi les logs, la gestion des exceptions, etc. sont des outils précieux auxquels les développeurs devraient être formés. Il y a également des bonnes pratiques à connaître pour rendre un code plus facile à déboguer. Ceci dit, pour le débogage, rien ne vaut la pratique. C'est probablement pour ça que son enseignement est négligé : le débogage ne s'apprend pas tant en classe que devant un code qui refuse de fonctionner. C'est avec l'expérience qu'on apprend à trouver les causes d'un problème mystérieux, et, plus important, à écrire un code dont les problèmes ne soient pas mystérieux parce que générant des messages d'erreur clairs.

En résumé : la formation des développeurs devraient en effet se consacrer davantage aux outils et aux bonnes pratiques du débogage. En revanche, y passer une quantité de temps proportionnelle au temps qu'on y passe est exagéré, car le débogage s'apprend essentiellement par la pratique et repose également sur les autres compétences du développeur.
Avatar de psychadelic psychadelic - Membre chevronné http://www.developpez.com
le 27/11/2014 à 15:44
Primo, personne n’est parfait, et des erreurs on en fait tous.
Ceux qui prétendent le contraire sont des mégalos.

Bien sur, avec le temps, l’expérience, la pratique, on peut atteindre le zéro Bugs dès la première écriture, mais c’est un peu comme au Golf, le « trou en un », ça existe, mais c’est pas mal de la chance.

Je vais pas rentrer dans les conditions préalables (et déterminantes) pour écrire du bon code dès le départ, car en fin de compte elles son plutôt rares, les cahiers des charges et d’analyse sont bâclées ou incomplets, les utilisateurs ne savent pas trop ce qu’ils veulent, ou à quoi s’attendre, etc…
Il y a milles et une raisons, qui font qu’au bout du compte, le code ne tiennne plus la route.

Par exemple, j’ai travaillé sur des programmes écrits en 198x, en COBOL pour machines Wang mais émulé sur des systèmes IBM (Quand Wang à été racheté par IBM, le Pentagone à imposé à IBM de créer cet émulateur), le tout pour ajouter des retours d’informations vers des smartphones via des encapsulations en Java…

Tout séparément, en test unitaires, fonctionnait parfaitement, mais une fois « packé » ça partait en sucettes…
Alors Oui, le debuging, c’est vital !

Du reste, c’est en étudiant le code des autres que j’ai le plus appris (mais c’est une autre histoire).

Au passage, pour ceux que ça intéresse, il y a un excellent article sur la résolution d’un Bug (surconsommation de CPU) chez Netflix, utilisant notamment des « graphes de flammes » en SVG…
http://techblog.netflix.com/2014/11/...in-flames.html
Avatar de Luckyluke34 Luckyluke34 - Membre chevronné http://www.developpez.com
le 27/11/2014 à 15:46
Le debug est une activité de diagnostic post-incident fortement consommatrice de temps. Le recours au debug peut être largement réduit si on utilise des techniques de conception maximisant la fiabilité du code dès son écriture :

  • Système de types riche et plus strict
  • Immuabilité
  • Tests unitaires automatisés
  • Programmation par contrats
  • etc.


On devrait apprendre en priorité à concevoir des applications robustes, et ensuite à diagnostiquer les éventuels problèmes quand ça se passe mal à l'exécution (debug mais aussi lecture de logs, outils d'analyse, etc.)
Avatar de Washmid Washmid - Membre actif http://www.developpez.com
le 27/11/2014 à 17:05
En lisant les commentaires ça donne l'impression que certains parlent des phases de dev et d'autres des phases de maintenance...?
Offres d'emploi IT
Chef de projet
SECOND BRIDGE - Ile de France - Paris (75015)
2 Charge-e d'appli. informatiques embarquées h/f
Menway Talents - Ile de France - Paris (75000)
Ingénieur développement & conception iot h/f
BULL FR - Ile de France - Issy-les-Moulineaux (92130)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil