450 erreurs de logique trouvées dans les bases de données populaires

Les systèmes de bases de données sont soumis à des pressions pour devenir de plus en plus puissants. Mais la fiabilité semble en souffrir. Aujourd'hui, les informaticien·nes de l'ETH Zurich ont mis au point un outil permettant de détecter automatiquement les erreurs de logique dans les systèmes de bases de données en utilisant trois méthodes différentes. Ils et elles ont trouvé et signalé plus de 450 bugs uniques, jusqu'alors inconnus.
Les bases de données SQL (Structured Query Language) sont l'épine dorsale de l'informatique. Les chercheuses et chercheurs de l'ETH Zurich ont maintenant développé des méthodes pour trouver automatiquement les erreurs de logique dans ces bases de données. (Image : Shutterstock)

Lorsqu'un smartphone enregistre une adresse, nous supposons que nous pouvons retrouver l'adresse en utilisant la bonne requête. Tout comme tous les articles correspondants dans un magasin en ligne peuvent être répertoriés en utilisant les bons termes de recherche. Il y a juste un problème : ce n'est pas tant une question d'évidence que nous le pensons. Une erreur de logique dans le système de gestion de base de données (SGBD), qui gère les informations stockées, peut renvoyer des réponses incorrectes sans que nous nous en rendions compte.

Un nombre surprenant d'erreurs dans tous les systèmes

Ces types d'erreurs de logique sont étonnamment fréquents. Ou plutôt, ils l'étaient jusqu'à récemment. Les chercheuses et chercheurs du laboratoire des technologies logicielles avancées de l'ETH Zurich ont maintenant développé un outil qui détecte automatiquement les erreurs de logique dans les logiciels de base de données. Ils et elles ont déjà trouvé plus de 450 défauts de programmation dans des systèmes de gestion de bases de données largement utilisés.

«Nous avons nous-mêmes été surpris·es du nombre d'erreurs cachées dans les systèmes de gestion de bases de données populaires», explique Manuel Rigger. «Par exemple, en utilisant nos méthodes, nous avons découvert plus de 150 erreurs de programmation dans les systèmes de base de données SQLite, qui fonctionne sur presque tous les smartphones et également dans de nombreux navigateurs web. Et ce n'est pas du tout un cas extrême. Le taux est similaire dans tous les systèmes que nous avons examinés jusqu'à présent».

Des programmes complexes et des bugs difficiles à détecter

Il y a deux raisons principales pour lesquelles les informaticien·nes de l'ETH Zurich trouvent autant de bugs. Premièrement, les systèmes modernes de gestion de bases de données sont très complexes et peuvent comprendre plusieurs millions de lignes de code. Il est donc pratiquement inévitable que des erreurs de programmation se produisent. Deuxièmement, les erreurs de logique sont très difficiles à trouver. Contrairement aux bugs qui font planter le système, les erreurs de logique ont rarement un effet évident. En général, une comparaison avec le résultat correct est nécessaire pour les détecter. Jusqu'à présent, cela n'était possible qu'avec beaucoup d'efforts manuels.

La seule procédure de test automatique réellement utilisée dans la pratique a été conçue il y a plus de 20 ans. Elle compare les requêtes dans différents systèmes de base de données. Comme chaque fabricant apporte des extensions et des adaptations spécifiques à la norme d'interrogation SQL (Structured Query Language), il n'est possible de formuler des interrogations comparables sans ambiguïté que pour une petite partie des systèmes. En effet, les langages d'interrogation des fabricants diffèrent parfois considérablement, un peu comme les dialectes d'une langue humaine.

Deux semaines de travail perdues

Cependant, Manuel Rigger pense qu'il y a une troisième raison pour laquelle il n'y a pas eu jusqu'à présent une plus grande détermination à traquer les erreurs : dans le domaine des systèmes de gestion de bases de données, les travaux se concentrent actuellement sur l'augmentation de la puissance des systèmes en utilisant des méthodes d'intelligence artificielle comme l'apprentissage machine. Le dépannage semble naturellement moins intéressant en comparaison.

Manuel Rigger a lui-même fait ses armes dans le domaine des tests de logiciels et du développement de compilateurs qui traduisent divers langages de programmation en langages machine. Il a pris conscience du problème des erreurs dans les systèmes de gestion de base de données par sa propre expérience frustrante lorsqu'il a perdu deux semaines de travail à cause d'une erreur dans un système de gestion de base de données très utilisé.

Trois méthodes pour trouver trois types d'erreurs

C'est alors que ce spécialiste des tests a décidé de s'attaquer au problème, avec le chef du laboratoire des technologies logicielles avancées, Zhendong Su. Leur solution consiste en trois méthodes différentes qui permettent de comparer les requêtes de manière fiable. Avec le «partitionnement des requêtes», les requêtes sont automatiquement décomposées en plusieurs parties et vérifiées pour s'assurer que le tout est identique à la somme des parties.

La deuxième méthode cible les erreurs causées par les mécanismes d'optimisation des systèmes de gestion de bases de données. Les requêtes sont modifiées de manière à ce que le mécanisme d'optimisation ne puisse plus fonctionner.

Contrairement aux deux premières méthodes, qui peuvent être exécutées automatiquement même sans connaissance détaillée du système de gestion de la base de données en question, la troisième exige une connaissance spécifique du système de gestion de la base de données et une mise en œuvre individuelle de la comparaison. Avec la «synthèse de requête pivot», une ligne entière de la table du système de base de données relationnelle est sélectionnée au hasard. Une requête doit ensuite être générée qui aboutit à la ligne sélectionnée. Cela permet d'identifier les erreurs de logique beaucoup plus efficacement que l'analyse manuelle des entrées individuelles, comme cela a été le cas jusqu'à présent.

Outil déjà utilisé par les fabricants

Les informaticien·nes de l'ETH Zurich semblent avoir suscité un enthousiasme latent avec leurs méthodes et l'outil SQLancer, qui les automatise. Les fabricants de systèmes de bases de données ont manifesté un intérêt important. Bien que les trois procédures n'aient été communiquées jusqu'à présent que de manière informelle, sous forme de préimpression et via les médias sociaux, et qu'elles ne soient officiellement présentées que maintenant lors des conférences techniques pertinentes, de nombreux fabricants ont déjà commencé à les utiliser pour tester leurs logiciels. «Plusieurs fabricants ont déjà trouvé de nombreux bugs dans leurs systèmes et ont intégré SQLancer dans leurs tests», explique Manuel Rigger, qui a eu des retours de nombreux contacts directs. «Quelques-uns ont également contribué au code de notre projet, qui est open source, ou ont adapté et développé l'outil en fonction de leurs besoins spécifiques».

«Synthèse de requête pivot» a été présenté à la communauté des chercheuses et chercheurs le 5 novembre lors de la conférence sur les logiciels de systèmes OSDI (Operating Systems Design and Implementation). La méthode d'optimisation des erreurs  sera présentée le 13 novembre lors de la 28eACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE)  et le «partitionnement des requêtes» le 18 novembre lors de la conférence sur les langages de programmation OOPLSA(Object-Oriented Programming, Systems, Languages, and Applications).

Trouver des bugs de logique dans les systèmes de gestion de bases de données. (Vidéo : Manuel Rigger, ETH SQLancer, YouTube)