Les bugs du temps

Chaque année, j’ai l’impression que c’est la même chose. A chaque passage à la nouvelle année, ou à chaque changement d’heure d’hiver/d’été, on entends parler d’un logiciel ou d’un appareil qui plante lamentablement. Cette année, les iPhone encore sous iOS4 ont rencontré des bugs avec l’application Horloge. En 2008, plus aucun Zune ne démarrait.

J’avais beau réfléchir, je voyais mal pourquoi autant de grands constructeurs rencontraient régulièrement des problèmes avec la gestion du temps et des fuseaux horaires. Après un peu de recherche et un petit tour sur Reddit, j’ai compris pourquoi.

Voici la règle générale pour gérer la date et l’heure partout dans le monde.

  • Une année dure 365 jours, une journée dure 24 heures, une heure dure 60 minutes et une minute dure 60 secondes.

Et maintenant, voici les exceptions.

Bon courage si un jour vous devez développer un système de gestion d’horaires.

L’article décrivant le bug du Zune de 2008 résume à mon avis bien la situation :

Quand un gros bug comme celui-ci est découvert, c’est tentant d’en faire des tonnes et de se moquer des développeurs qui ont sorti ce code défectueux. Et je pense que c’est une erreur qui aurait dû être détecté lors des tests ou d’une revue de code. D’un autre côté, j’ai moi même fait tellement d’erreurs depuis des années que je suis réticent à l’idée de me moquer des autres. Et je pense que la principale leçon de cet incident n’est pas le refrain habituel qui dit que Microsoft sont nuls. C’est plutôt l’observation qu’un logiciel c’est compliqué. Des pièges subtils vous attendent même dans ce qui semble le plus simple algorithme.

  1. Pauland, le

    Rien à dire. +1

  2. jigso, le

    L’une des pire erreurs est d’utiliser l’heure locale dans les programmes. Souvent on ne se pose pas de question (« ben quoi, l’heure de saisie, c’est l’heure de la montre du type qui tape sur le clavier »). Puis cette heure part via un serveur dans une base de données, puis est extraite, renvoyer ailleurs, retraité, etc. Et quand on affiche sur un écran à Paris une heure et une date saisies à Tokyo, on réalise le bordel… Et souvent c’est pas corrigeable simplement (trop de programmes mis en jeu, tous doivent être mis à jour en même temps…). Alors on bricole, on essaye de récupérer la timezone, d’appliquer des décalages horaires. on oublie les changements d’heures hiver/été, etc… La solution est évidemment de tout avoir en GMT dès le début, et ne de faire les conversion que lors des affichages.