Certains bugs ont la vie dure. Les ingénieurs de Facebook indiquent avoir résolu cette semaine un problème technique localisé depuis plusieurs mois au sein de l'application iOS dédiée au réseau social. Ce bug, limité aux terminaux Apple, était d'après eux à l'origine de plus de la moitié des plantages enregistrés par l'application. Soulagés sans doute par la fin de cette longue traque, deux des développeurs impliqués livrent un éclairage technique sur la source du problème, et expliquent pourquoi il a fallu aussi longtemps pour le résoudre.
Dans un premier temps, ils déclarent avoir constaté dernièrement que la première cause de crash observée au sein de l'application iOS se situait au niveau du framework Core Data, qui pour simplifier permet au développeur de manipuler sous forme d'objets les données stockées dans une base de données relationnelle. Spécifique à la programmation en monde Apple (OS X ou iOS), ce premier point explique pourquoi seule l'application iOS de Facebook était concernée.
Problème, Core Data est par définition un composant cœur, et les rapports de plantage analysés montraient que le problème pouvait se manifester de plusieurs façons distinctes. Pour affiner son diagnostic, l'équipe a donc tenté de déterminer à quelle période avaient pu débuter ces manifestations. Avec plusieurs centaines de développeurs impliqués sur des milliers de tickets différents, l'exercice se serait toutefois révélé vain.
Pour avancer, il convenait donc d'élaborer d'autres hypothèses, aboutissant vers des scénarios permettant d'isoler tel ou tel élément déclencheur. Entre autres tests, l'équipe a choisi de retravailler un pan de code de façon à parler directement à la base de données SQLite, sans passer par Core Data, alors que ce dernier était considéré comme l'une des sources du problème. La démarche se révéla judicieuse : une fois passé sur un environnement de test, le pan de code en question provoqua un message d'erreur explicite, aiguillant les développeurs vers une hypothèse, puis une autre.
De fil en aiguille, l'équipe finit par identifier que le problème ne se situe pas au niveau relationnel, mais à celui du réseau, avec un conflit dans la façon dont deux couches distinctes géraient un même objet. Une fois la faille identifiée, la résolution du problème n'aurait pris que quelques heures. « Les tâches du quotidien comme l'analyse des crashs ou la compréhension du code peuvent devenir de vrais défis de programmation », concluent les deux intéressés. On serait tenté d'ajouter que celui-ci ne prend jamais fin : fraîchement mise à jour vers la dernière version en date, l'application Facebook nous a gratifié d'un magnifique plantage jeudi matin.