Affinamento del testing metamorfico per una valida convalida del software
Un nuovo metodo migliora i test del software affinando le Relazioni Metamorfiche.
― 7 leggere min
Indice
La verifica del software è un passaggio fondamentale per garantire che il software funzioni bene. Una delle grandi sfide nei test del software è quella che chiamiamo il "problema dell'oracolo dei test". Questo succede quando non c'è un modo chiaro per controllare se il software fornisce i risultati giusti per determinati input. Il Test Metamorfico (MT) è un metodo che aiuta a risolvere questo problema. Invece di confrontare l'output di un singolo input con un output previsto, il MT guarda le relazioni tra input e output su più esecuzioni del software, conosciute come Relazioni Metamorfiche (MRs). Le MRs definiscono come ci aspettiamo che l'output cambi se cambiamo l'input in modi specifici.
Quando una MR non viene seguita durante i test, suggerisce che potrebbe esserci un problema nel software. Ma solo perché una MR viene seguita non vuol dire che il software sia completamente corretto. Questo crea una sfida: come possiamo sapere se una MR è violata a causa di un difetto nel software o perché la MR stessa non si applica davvero a quella situazione?
Comprendere le Relazioni Metamorfiche
Le Relazioni Metamorfiche sono il cuore del Test Metamorfico. Mostrano come ci aspettiamo che gli output cambino quando modifichiamo gli input in modi particolari. Ad esempio, se abbiamo una funzione che somma due numeri, una MR potrebbe affermare che se aggiungiamo 1 a uno di quei numeri, l'output dovrebbe aumentare di 1 anche. Se il software fallisce questo test, suggerisce che potrebbe esserci un difetto. Tuttavia, se supera il test, non possiamo ancora dire con certezza che il software sia privo di bug.
Identificare e scegliere MRs appropriate può essere complicato. Richiede una profonda comprensione di cosa fa il software e dei tipi di input che si aspetta. A causa di questa necessità di competenza, scoprire automaticamente le MRs è difficile. Inoltre, distinguere se una MR fallita indica un bug o semplicemente mostra che la MR non si applica è solitamente fatto manualmente. Questo può richiedere tempo.
La Necessità di Rifinire le Relazioni Metamorfiche
Data la complessità di interpretare le MRs, abbiamo una questione di ricerca urgente: come possiamo rifinire le MRs basandoci sui dati di input usati nei test? Proponiamo un metodo per semplificare questo processo. Questo metodo aiuta a suggerire se il fallimento nel rispettare una MR è dovuto a un reale difetto nel software o perché la MR non si adattava al caso particolare testato.
Il metodo che abbiamo sviluppato utilizza una combinazione di Fuzz Testing, passive testing e una tecnica chiamata Association Rule Mining (ARM).
Fuzz Testing
Il fuzz testing implica l'inserimento di dati casuali o inaspettati nel software per vedere come si comporta. Questo può aiutare a scoprire difetti che i test normali potrebbero perdere. Nel nostro approccio, il primo passo è usare un fuzzer per creare una varietà di input per il software sotto test (SUT).
Passive Testing
Una volta ottenuti gli input casuali, applichiamo le modifiche richieste in base alle nostre MRs predefinite. Successivamente, registriamo gli output dal SUT. Questi log contengono informazioni sugli input, sugli output e sulle violazioni delle MR.
Association Rule Mining
Il cuore della nostra analisi si basa sull'Association Rule Mining. Questa tecnica ci aiuta a trovare schemi in grandi dataset. Con i nostri log, possiamo cercare relazioni interessanti tra gli input utilizzati e se le MRs sono state violate o meno. Queste informazioni possono essere cruciali per decidere se una MR è rilevante o meno.
Il Nostro Metodo in Azione
Per dimostrare il nostro metodo, abbiamo condotto un esperimento proof-of-concept usando un esempio semplice. Questo esempio riguardava un programma che esegue operazioni aritmetiche di base: somma, sottrazione e moltiplicazione. Abbiamo convalidato il nostro approccio usando questo esempio, e ci ha permesso di vedere quanto bene il nostro metodo potesse fornire suggerimenti utili per migliorare il processo di test.
Fase 1: Valutare le Relazioni Metamorfiche
Nella prima fase, ci siamo concentrati sul capire quanto bene si applicassero le MRs ai nostri test. Questa fase ha tre parti principali: generazione dei dati di test, conduzione dei test metamorfi e analisi dei risultati.
Generazione dei Dati di Test
Il primo passo è generare un insieme di dati di test casuali tramite fuzz testing. Per il nostro esempio, abbiamo creato coppie di numeri casuali da usare come input per il SUT. Questi numeri sono stati generati usando una distribuzione uniforme per garantire una varietà di scenari.
Test Metamorfico
Dopo aver generato i dati di test, applichiamo le MRs per vedere come cambiano gli output. Controlliamo sia i dati originali che quelli trasformati rispetto alle MRs. Questo confronto ci aiuta a vedere se il software si comporta come ci aspettiamo.
Analizzare i Risultati
I risultati dei test vengono quindi organizzati e registrati per un'analisi successiva. Il log contiene dettagli su ogni test e il verdetto su se le MRs siano state violate o meno. Usiamo poi questi dati di log per scoprire connessioni tra i dati di test e le violazioni delle MR.
Fase 2: Creare il Test Suite
La fase successiva è incentrata sull'utilizzo delle intuizioni raccolte nella Fase 1 per costruire un insieme di test per le future versioni del software. L'obiettivo qui è che il test suite garantisca che il software rimanga affidabile e si comporti come ci si aspetta dopo gli aggiornamenti.
Generazione del Test Suite Finale
Con le informazioni raccolte, possiamo creare un robusto test suite di regressione. Questo suite sarà basato sulle MRs rifinite che abbiamo identificato nella Fase 1. Per ogni funzione nel nostro programma di esempio, abbiamo generato test che garantiscono che il software possa gestire correttamente diversi tipi di input.
Efficacia del Metodo
Usando il nostro approccio, la selezione delle MRs può essere fatta in modo più efficiente rispetto al metodo tradizionale. Il nostro metodo aiuta a identificare quali MRs possono essere applicate con successo, risparmiando così tempo e sforzo nel processo di test. Il tempo speso a determinare la validità delle MRs è ridotto perché il metodo automatizza parti di questo processo.
Se il nostro approccio funziona bene, potrebbe portare a test più rapidi ed efficaci del software. Tuttavia, come tutti i metodi di test, il suo successo dipende dalla selezione accurata dei dati di test. I lavori futuri esploreranno come possiamo migliorare la selezione dei dati di test per aumentare l'efficacia del nostro metodo.
Affrontare le Minacce alla Validità
Quando implementiamo il nostro metodo, è essenziale considerare eventuali minacce alla sua validità. Due categorie significative sono la validità interna ed esterna.
Validità Interna
Per garantire la validità interna del nostro metodo, ci siamo affidati a strumenti e tecniche ben conosciuti. Tuttavia, l'efficacia degli algoritmi ARM in diversi scenari richiede comunque ulteriori indagini. I lavori futuri esploreranno diversi approcci ARM per comprendere meglio la loro applicabilità.
Validità Esterna
In termini di validità esterna, i nostri esperimenti iniziali erano limitati a un solo programma semplice. Saranno necessari test più estesi in scenari diversi per confermare quanto bene il nostro metodo funzioni nelle situazioni reali.
Lavori Correlati
Il Test Metamorfico è stato riconosciuto come una tecnica preziosa fin dal suo primo utilizzo. È stato applicato con successo in vari settori in cui i metodi di test tradizionali faticano, come nelle situazioni in cui è difficile stabilire un oracolo.
Diversi studi hanno esplorato metodi per migliorare il MT, inclusa la priorizzazione delle MRs in base alla loro efficacia o impatto sulla rilevazione dei difetti. Questi metodi hanno mostrato promettenti risultati nel ridurre il numero di casi di test necessari, minimizzando così il tempo di ispezione manuale.
Conclusione e Direzioni Future
Abbiamo introdotto un nuovo metodo per rifinire le Relazioni Metamorfiche utilizzando tecniche come il fuzz testing e l'Association Rule Mining. Questo metodo mira a chiarire se un fallimento nel rispettare le MRs è dovuto a un difetto nel software o semplicemente a una discordanza con i dati di input utilizzati.
Il nostro metodo opera in due fasi: la prima valuta l'applicabilità delle MRs, e la seconda utilizza quelle intuizioni per creare un test suite per il testing di regressione. La prova di concetto mostrata nel nostro esperimento dimostra che il nostro approccio è valido e può aggiungere valore al processo di test del software.
Guardando al futuro, pianifichiamo di condurre ulteriori test con vari tipi di software ed esplorare come migliorare la selezione dei dati di test. Il nostro obiettivo è creare un metodo che trovi con precisione i bug e offra soluzioni di test robuste per un'ampia gamma di applicazioni software.
Titolo: Bug or not Bug? Analysing the Reasons Behind Metamorphic Relation Violations
Estratto: Metamorphic Testing (MT) is a testing technique that can effectively alleviate the oracle problem. MT uses Metamorphic Relations (MRs) to determine if a test case passes or fails. MRs specify how the outputs should vary in response to specific input changes when executing the System Under Test (SUT). If a particular MR is violated for at least one test input (and its change), there is a high probability that the SUT has a fault. On the other hand, if a particular MR is not violated, it does not guarantee that the SUT is fault free. However, deciding if the MR is being violated due to a bug or because the MR does not hold/fit for particular conditions generated by specific inputs remains a manual task and unexplored. In this paper, we develop a method for refining MRs to offer hints as to whether a violation results from a bug or arises from the MR not being matched to certain test data under specific circumstances. In our initial proof-of-concept, we derive the relevant information from rules using the Association Rule Mining (ARM) technique. In our initial proof-of-concept, we validate our method on a toy example and discuss the lessons learned from our experiments. Our proof-of-concept demonstrates that our method is applicable and that we can provide suggestions that help strengthen the test suite for regression testing purposes.
Autori: Alejandra Duque-Torres, Dietmar Pfahl, Claus Klammer, Stefan Fischer
Ultimo aggiornamento: 2023-05-16 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2305.09640
Fonte PDF: https://arxiv.org/pdf/2305.09640
Licenza: https://creativecommons.org/licenses/by/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.