Méthodes automatisées de test formel des systèmes de stockage et des applications

Abstract

As internet grows to be cheaper and faster, distributed software systems and applications are becoming more and more ubiquitous. Today they are the backbone of a large number of online services like banking, e-commerce, social networking, etc. As the popularity of these softwares increases, it is very important that they ensure strong levels of reliability and security.Modern distributed software is centered around using large-scale storage systems for storing and retrieving data. To ensure persistence and availability of data in the presence of failures, these systems maintain data in multiple copies that are stored on different nodes in the network. Then, for performance reasons, these copies are allowed to (temporarily) diverge, an instance of the so-called weak-consistency, which makes the semantics of concurrent accesses to data quite complex.Over the recent years, many solutions for implementing weakly-consistent storage systems have been proposed. These implementations are most often very complex and error-prone. The specific levels of weak consistency they ensure are most often described only informally, which makes it difficult to reason about them. Moreover, in many cases, there are significant discrepancies between the guarantees claimed in their documentation and the guarantees that they really provide.The objective of this dissertation is to propose algorithmic techniques for automated testing of weakly-consistent distributed systems against formal specifications. We focus on an important class of distributed data types, called Conflict-Free Replicated Data Types (CRDTs for short), that include many variations like registers, flags, sets, arrays, etc., and on Transactional Systems (Databases), which enable computations on shared data that are isolated from other concurrent computations and resilient to failures. We introduce formal specifications for such systems and investigate the asymptotic complexity of checking whether a given execution conforms to such specifications. We also study the problem of testing applications that run on top of weakly-consistent transactional systems, introducing an mock in-memory storage system that simulates the behaviors of such systems according to their formal specificationsÀ mesure que l'internet devient moins cher et plus rapide, les systèmes et les applications logicielles distribués deviennent de plus en plus omniprésents. Aujourd'hui, ils sont à la base d'un très grand nombre de services en ligne tels que les banques, le commerce électronique, les réseaux sociaux, etc. Au fur et à mesure que la popularité de ces logiciels augmente, il est très important qu'ils garantissent des niveaux élevés de fiabilité et de sécurité.Les logiciels distribués modernes sont centrés sur l'utilisation de systèmes de stockage à grande échelle pour stocker et manipuler des données. Pour assurer la persistance et la disponibilité des données en présence de pannes, ces systèmes maintiennent les donnéesen plusieurs copies stockées sur différents nœuds du réseau. Pour des raisons de performances, ces copies peuvent diverger (temporairement), une instance de la soi-disant cohérence faible, ce qui rend la sémantique des accès concurrents aux données très complexe.Au cours des dernières années, de nombreuses solutions pour implémenter des systèmes de stockage à cohérence faible ont été proposées. Ces implémentations sont le plus souvent très complexes et sujettes aux erreurs. Les niveaux spécifiques de cohérence faible qu'ils assurent ne sont le plus souvent décrits que de manière informelle, ce qui rend difficile le raisonnement sur leurs corrections. De plus, dans de nombreux cas, il existe des écarts importants entre les garanties mentionnées dans leur documentation et les garanties qu'elles fournissent réellement. L'objectif de cette thèse est de proposer des techniques algorithmiques pour le teste automatisé de systèmes distribués à cohérence faible par rapport à des spécifications formelles. Nous étudions une classe importante de types de données distribués, appelés types de données répliqués sans conflit (CRDT), qui inclut de nombreuses variantes comme des registres, des ensembles, des tableaux, etc., et des systèmes (bases de données) transactionnels, qui permettent des calculs sur des données isolés des autres calculs concurrents et tolérants aux pannes. Nous introduisons des spécifications formelles pour de tels systèmes et nous étudions la complexité asymptotique de la vérification de la correction d'une exécution donnée par rapport à ces spécifications. Nous étudions également le problème du teste des applications qui s'exécutent sur des systèmes transactionnels à cohérence faible, en introduisant un système de stockage en mémoire qui simule les comportements de ces systèmes par rapport à leurs spécifications formelles

    Similar works

    Full text

    thumbnail-image

    Available Versions

    Last time updated on 10/12/2022