
Envoyé par
Amine Horseman
Êtes-vous d’accord avec l’avis de Henrik Warne ?
Surtout pas à ce sujet :

Envoyé par
Henrik Warne
Lorsque le programme fonctionne comme prévu, il n'y a souvent pas de différence dans la qualité des logs.
La qualité du log est justement indépendante du bon fonctionnement de l'application. Et d'ailleurs, je pense que le billet est basé sur cette idée biaisée que le log sert uniquement à comprendre un mauvais fonctionnement. Or les logs servent à la supervision de manière générale.
Et le
débogageanalyse d'incident n'est qu'une part de l'activité qui repose sur l'analyse des logs.
Je vais prendre un cas très "con" mais qui illustre bien le problème. Imaginons des serveurs Web en
grappe. Ce sont deux serveurs Web dupliqués avec
répartition de charge. Le choix d'une telle architecture n'est pas la charge mais simplement la disponibilité. Donc si un seul serveur fonctionne, il n'y a pas d'incidence pour les utilisateurs et donc à priori pas d'incident. Sauf que l'absence de logs "normaux" sur l'un des serveurs indiquent bien un problème. Mais c'est peut-être simplement l'infrastructure de la grappe qui est en cause (répartiteur, relance automatique, etc.). Sans des logs d'information "basique", impossible de savoir ce qui se passe.
On peut même étendre le raisonnement à un composant (ex: service) particulier de l'application. Si je n'ai pas de logs de fonctionnement normal d'un service, c'est peut-être que j'ai oublié de configurer le démarrage du composant.
Enfin un exemple "contraire", celle où l'application ne semble pas fonctionner mais fonctionne pourtant. Imaginons les logs suivants :
22/12/2011 13:57:01 INFO [00001] Connexion de l'utilisateur DUPONT
22/12/2011 13:57:01 INFO [00002] Connexion de l'utilisateur DUFFOUR
22/12/2011 13:57:01 INFO [00001] Ouverture du document titi.txt
22/12/2011 13:57:01 INFO [00002] Ouverture du document titi.txt
22/12/2011 13:57:01 INFO [00002] Echec de la pause du verrou.
Il suffit de recouper les informations d'une même transaction "[XXXXXX]" pour comprendre que DUFFOUR a essayé d'ouvrir le fichier titi.txt mais qu'il n'a pas pu obtenir le verrou.
Pour avoir ce niveau de log, c'est bien au-délà de la gestion des erreurs. Le problème c'est que cela ne s'arrête pas à la gestion des logs mais également à la gestion des retours à l'utilisateur. Que préférez-vous parmis les retours possible pour l'utilisateur :
- Le logiciel a rencontré une erreur fatale
- Le logiciel n'a pas pu ouvrir le document
- Le document est verrouillé
- Le document est vérrouillé par un autre utilisateur
- Le document est verrouillé par DUPONT
Ce point aussi me gêne un peu :

Envoyé par
Henrik Warne
un bon programmeur ajoute beaucoup de logs à son programme
Autant il est utile d'ajouter des traces précises autant il faut éviter d'en balancer de trop. Au risque de saturer les espaces de stockage (ou voir de perdre de l'information à cause de système de débordement/roulement), de rallonger les temps de traitement (manuel ou automatique), voir même
d'exposer des informations sensibles.
Pour le reste, comme d'habitude ce sont surtout des redîtes de bonnes pratiques qu'il est toujours facile de vendre dans la théorie mais la réalité est un peu différente. Je veux pas dire que c'est impossible en pratique, juste que parmi les milliers de petits détails qui tournent autour du code (documentation, test, couverture, qualimétrie, etc.) on finit nécessairement par négligé un paramètre et parfois ce sont les logs car il n'y a pas de piqûre de rappel (ex: Sonar).

Envoyé par
Amine Horseman
À part la journalisation, quelles autres habitudes pourraient aider les développeurs lors du débogage ?
Sans quitter le domaine de la journalisation, je trouve dommage qu'un billet traitant de ce sujet n'aborde même pas la notion de distinction entre les traces fonctionnelles et les traces techniques. Idem pour les notions de traçabilité, c'est-à-dire attribuer des identifiants (UUID) aux acteurs (utilisateurs, systèmes externes), aux erreurs (numéro que l'on remonte à l'utilisateur pour le suivi de l'anomalie), aux transactions (idem que précédemment), etc.
De manière plus générale, je pense à ce qui tourne autour de la robustesse. Je ne parles pas uniquement de la capacité d'un logiciel à résister aux erreurs mais aussi de sa capacité à fournir des informations détaillées, utiles et pertinentes ! Que ce soit pour le développeur mais également pour toutes les "parties prenantes" (utilisateur, AMO, équipe système, etc.). Car le maximum d'information on peut collecter et meilleure (rapidité, solutions proposées) sera l'analyse.
Sinon je voudrais revenir sur ce sujet :

Envoyé par
Amine Horseman
Deuxièmement, ils ne testent pas leur code « à fond » ; en effet, lorsqu’on teste notre code on s’assure qu’il fonctionne dans un grand nombre de scénarios différents, or « si vous ne testez pas tous les cas, vous êtes moins susceptible d'ajouter des fichiers journaux ».
Viens alors le problème de tester les logs ! S'ils prennent une place importante, ils sont donc des "output" à vérifier lors de l'exécution du morceau de code.
4 |
0 |