Individuati 450 errori logici in banche dati popolari
I database devono diventare sempre più potenti. Tuttavia, l'affidabilità sembra risentirne. Gli informatici dell'ETH hanno sviluppato uno strumento che utilizza tre diversi metodi per rilevare automaticamente gli errori logici nei sistemi di database. Finora sono stati trovati e risolti oltre 450 bug.
(Aggiornato: )
![Schermo del computer con le lettere S Q L](/de/news-und-veranstaltungen/eth-news/news/2020/11/fehler-in-datenbanken/_jcr_content/news_content/fullwidthimage/image.imageformat.930.304912492.jpg)
Se un indirizzo è memorizzato su uno smartphone, si presume naturalmente che sia possibile trovarlo con la giusta interrogazione. Allo stesso modo in cui tutti gli articoli adatti sono elencati nel negozio web con i termini appropriati. Tuttavia, questo non è così ovvio come pensiamo. Un errore logico nel sistema di gestione del database (DBMS), in cui vengono gestite le informazioni memorizzate, può restituire risposte errate senza che ci accorgiamo dell'errore.
Sorprendente numero di bug in tutti i sistemi
Gli errori logici di questo tipo sono sorprendentemente comuni. O meglio, lo erano fino a poco tempo fa. I ricercatori dell'Advanced Software Technologies Lab dell'ETH di Zurigo hanno ora sviluppato uno strumento che rileva automaticamente gli errori logici nei software di database. Lo strumento è già stato utilizzato per trovare e successivamente correggere Chi siamo 450 errori di programmazione in database molto utilizzati.
"Siamo rimasti sorpresi dalla quantità di errori presenti nei comuni sistemi di gestione dei database", spiega Manuel Rigger: "Utilizzando i nostri metodi, ad esempio, abbiamo scoperto oltre 150 errori di programma nel database SQLite in esecuzione su quasi tutti gli smartphone e anche in molti browser web. E non si tratta di un caso estremo. Il tasso è simile in tutti i sistemi che abbiamo analizzato finora".
Programmi complessi e bug appena riconoscibili
Sono due le ragioni principali per cui gli informatici dell'ETH trovano così tanti bug. In primo luogo, i database di oggi sono molto complessi e possono comprendere diversi milioni di linee di codice. ? praticamente inevitabile che si verifichino contraddizioni ed errori di programmazione. In secondo luogo, gli errori logici non sono così facili da trovare. A differenza dei bug che causano il crash del sistema, raramente sono evidenti. Di norma, per riconoscerli è necessario un confronto con il risultato corretto. Finora questo era possibile solo con un grande sforzo.
L'unica procedura di test automatizzata finora utilizzata nella pratica è stata sviluppata oltre 20 anni fa. Si basa sul confronto di query con diversi sistemi di database. Poiché ogni produttore apporta estensioni e adattamenti specifici allo standard di interrogazione SQL (Structured Query Language), la formulazione di domande chiaramente confrontabili è ora limitata a una piccola area centrale dei sistemi. In alcuni casi i linguaggi di interrogazione dei produttori differiscono notevolmente, come i dialetti di una lingua umana.
Due settimane di lavoro perse
Rigger sospetta personalmente anche una terza ragione per cui gli errori non sono ancora stati analizzati con maggiore determinazione: Nel settore dei database, le attività si concentrano attualmente sul rendere i sistemi ancora più efficienti utilizzando metodi di intelligenza artificiale come il machine learning. Inoltre, la risoluzione dei problemi non è naturalmente molto interessante.
Rigger ha le sue radici nel testing del software e nello sviluppo di compilatori che consentono di tradurre diversi linguaggi di programmazione e di macchina. Si è reso conto del problema degli errori nell'area dei database grazie alla sua fastidiosa esperienza, quando due settimane di lavoro andarono perse a causa di un errore nel sistema di gestione del database.
Tre metodi per tre tipi di errori
Lo specialista di test ha quindi affrontato il problema insieme al responsabile dell'Advanced Software Technologies Lab, Zhendong Su. La loro soluzione consiste in tre diversi metodi con cui è possibile trovare query di confronto affidabili. Nel cosiddetto "partizionamento delle query", le query vengono automaticamente suddivise in più parti e poi verificate per vedere se l'insieme e la somma delle parti sommano la stessa cosa.
Il secondo metodo può essere utilizzato per individuare in modo specifico gli errori causati dai meccanismi di ottimizzazione dei database. Le query per il confronto vengono modificate in modo tale che il meccanismo di ottimizzazione non possa più funzionare.
A differenza dei primi due metodi, che possono essere eseguiti automaticamente senza una conoscenza dettagliata del database in questione, il terzo richiede una conoscenza specifica del database e anche un'implementazione individuale del confronto. Nel cosiddetto "Pivoted Query Synthesis", un'intera riga della tabella del database relazionale viene selezionata a caso. Si deve quindi creare una query che abbia come risultato la riga selezionata. In questo modo è possibile identificare gli errori logici in modo molto più efficiente rispetto all'analisi manuale delle singole voci, come avveniva in precedenza.
Lo strumento è già utilizzato dai produttori
Con i loro metodi e lo strumento SQLancer in cui sono stati automatizzati, gli informatici dell'ETH hanno ovviamente risvegliato gli spiriti addormentati. L'interesse dei produttori di database è estremamente alto. Anche se i tre metodi sono stati finora comunicati solo in modo informale come preprint e tramite i social media e saranno presentati ufficialmente solo nei prossimi giorni in occasione di conferenze specializzate, diversi produttori hanno già iniziato a testare i loro software con questi metodi. "Diversi produttori hanno già trovato numerosi bug nei loro sistemi e hanno incorporato SQLancer nei loro test", spiega Rigger in base a numerosi contatti diretti: "Alcuni hanno anche contribuito con il codice di programmazione al nostro progetto pubblicato come open source o hanno adattato ed esteso lo strumento alle loro esigenze specifiche".
Il 5 novembre, in occasione del Systeme-Software-Tagung, è stata presentata alla comunità dei ricercatori la "Pivoted Query Synthesis". pagina esternaOSDI (Progettazione e implementazione di sistemi operativi). Il metodo dell'errore di ottimizzazione sarà presentato il 13 novembre nell'ambito del programma di studio 28il ACM Joint Meeting on European Software Engineering Conference e Symposium on the Foundations of Software Engineering (pagina esternaESEC/FSE) e "Query Partitioning" il 18 novembre alla conferenza sui linguaggi di programmazione. pagina esternaOOPLSA (Programmazione orientata agli oggetti, sistemi, linguaggi e applicazioni).
![](/bin/ethz/components/previewImage/youtube/Np46NQ6lqP8.jpg)
Riferimenti
Rigger M, Su Z: Trovare bug nei sistemi di database tramite il partizionamento delle query. Proceedings of the ACM on Programming LanguagesNovember 2020 Article No.: 211. doi: pagina esternahttps://doi.org/10.1145/3428279
Rigger M, Su Z: Detecting Optimisation Bugs in Database Engines via Non-optimizing Reference Engine Construction. Atti del 28ilACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE 2020). 6 - 16 novembre 2020. doi: pagina esternahttps://dl.acm.org/doi/10.1145/3368089.3409710.
Rigger M, Su Z: Testing Database Engines via Pivoted Query Synthesis. Operating Systems Design and Implementation (OSDI). 4 - 6 novembre 2020. documento ufficiale: pagina esternahttps://www.usenix.org/conference/osdi20/presentation/rigger.