Simple Science

Scienza all'avanguardia spiegata semplicemente

# Informatica# Linguaggi di programmazione

Un Nuovo Approccio al Testing Basato sulle Proprietà

Questo articolo parla di un nuovo linguaggio di programmazione per rendere più semplice il testing basato sulle proprietà.

― 5 leggere min


Semplificare il TestSemplificare il Testdelle Proprietàsviluppatori.testing basato su proprietà per gliUn nuovo linguaggio semplifica il
Indice

Nello sviluppo software, è fondamentale assicurarsi che i programmi funzionino come dovrebbero. Un metodo per controllare ciò è noto come [Testing basato su Proprietà](/it/keywords/testing-basato-su-proprieta--k3zrz1e). Questo approccio verifica se certe proprietà o regole riguardo al programma sono vere. Anche se il testing basato su proprietà può dare molta fiducia nella correttezza di un programma, non viene spesso usato nello sviluppo software reale. Una delle principali ragioni è la difficoltà di creare generatori, che sono strumenti che creano input casuali necessari per i test.

Scrivere questi generatori può essere complicato, soprattutto quando le strutture dati usate in un programma sono complesse. In questo articolo, daremo un'occhiata a un nuovo linguaggio di programmazione pensato per semplificare questo processo includendo strumenti integrati per le proprietà e la loro verifica.

Cos'è il Testing Basato su Proprietà?

Il testing basato su proprietà è un modo per testare il software impostando certe proprietà che il codice dovrebbe soddisfare. Invece di controllare alcuni esempi specifici, questo metodo permette di testare una gamma più ampia di input possibili. Un Programmatore scrive le proprietà che descrivono cosa dovrebbe essere vero per il programma. Poi, uno strumento genera Casi di Test casuali e verifica se le proprietà sono valide per quei casi.

Per esempio, se hai una funzione di somma, una proprietà potrebbe essere che sommare due numeri in qualsiasi ordine dovrebbe dare lo stesso risultato. Questo significa che (m + n) dovrebbe essere uguale a (n + m). Ci sono molte proprietà di questo tipo per diverse operazioni e funzioni, e più proprietà riesci a testare, più fiducia puoi avere che il tuo codice funzioni correttamente.

La Sfida dei Generator

Una delle sfide principali nell'uso del testing basato su proprietà è la necessità di scrivere generatori per gli input. I generatori creano dati casuali che saranno usati per testare le proprietà. Per tipi di dati semplici, questo compito può essere facile. Tuttavia, per tipi più complessi, l'impegno per scrivere questi generatori a mano può essere piuttosto elevato.

Molti sviluppatori trovano gravoso creare generatori per tutti i diversi tipi di dati di cui potrebbero avere bisogno. Questo è un grande ostacolo all'uso efficace del testing basato su proprietà.

Un Nuovo Linguaggio di Programmazione per il Testing

Per affrontare questo problema, è stato introdotto un nuovo linguaggio di programmazione funzionale. Questo linguaggio include caratteristiche integrate che aiutano a definire proprietà e generare automaticamente i dati di input necessari per i test.

L'obiettivo è rendere più facile per i programmatori condurre test basati su proprietà senza dover continuamente scrivere i propri generatori. Automatizzando questo processo, gli sviluppatori possono concentrarsi di più sulla scrittura delle proprietà che contano per il loro codice invece di passare tempo a creare input.

Come Funziona?

Immagina di voler controllare una proprietà di una funzione di somma. Potresti esprimerla così: "L'operazione di somma è commutativa." Questo significa che per qualsiasi due numeri (m) e (n), la relazione (m + n = n + m) dovrebbe sempre essere vera.

Nel nuovo linguaggio, un programmatore può definire questa proprietà in modo semplice. Il linguaggio si occuperà poi di generare numeri interi casuali per testare questa proprietà. Poiché il linguaggio ha un Generatore integrato per gli interi, generare input diventa semplice in molti casi.

Tuttavia, proprietà più complicate richiedono più sforzo. Per esempio, se vuoi controllare che aggiungere zero a un numero non cambi il suo valore, devi impostare una proprietà che coinvolge qualche funzione (f) oltre agli interi. Il generatore automatico creerà i casi di test necessari per verificare anche questa proprietà.

Esempi Pratici

Consideriamo alcuni esempi pratici.

  1. Commutatività della Somma: Vuoi verificare che sommare due numeri dia lo stesso risultato indipendentemente dall'ordine. Il linguaggio può produrre automaticamente numeri e controllare la proprietà, fornendoti feedback su se passa per diversi casi di test.

  2. Zero come Identità: Puoi testare se aggiungere zero a un numero restituisce lo stesso numero. Il linguaggio può generare i termini appropriati e sostituirli nella proprietà, producendo risultati con ogni test.

  3. Proprietà della Sottrazione: Puoi anche verificare proprietà che coinvolgono la sottrazione, come controllare se l'ordine della sottrazione influisce sul risultato. Il linguaggio genererà i casi di test pertinenti e aiuterà a mostrare quando la proprietà fallisce.

Facilità d'Uso

Usando questo nuovo linguaggio, i programmatori sono sollevati dal peso di scrivere ripetutamente generatori. Invece, si concentrano sulla definizione delle proprietà e lasciano che il linguaggio gestisca il resto. Questo approccio non solo fa risparmiare tempo, ma aiuta anche a prevenire errori che potrebbero verificarsi quando si scrivono generatori complessi da zero.

Confronto con Strumenti Esistenti

Anche se ci sono altri strumenti disponibili per il testing basato su proprietà, molti richiedono una configurazione manuale significativa per i generatori. Questo nuovo approccio è progettato per semplificare ulteriormente il processo, rendendolo più accessibile per gli sviluppatori. In molte comparazioni, il sistema automatizzato si comporta bene rispetto a librerie già popolari in ambienti accademici.

Conclusione

In sintesi, il testing basato su proprietà è un modo efficace per garantire la correttezza del software, ma la necessità di generatori l'ha reso meno popolare tra gli sviluppatori. Un nuovo linguaggio di programmazione funzionale mira a cambiare questo integrando le definizioni di proprietà e la generazione di input di test nelle sue caratteristiche principali. Questo cambiamento dovrebbe abbattere le barriere all'uso del testing basato su proprietà, rendendo più facile per i programmatori validare il loro software.

Man mano che il software diventa più complesso, garantire la sua correttezza rimarrà vitale. Nuovi strumenti e linguaggi come questo possono svolgere un ruolo importante nel semplificare i test, renderli più efficienti e, in ultima analisi, più affidabili. Concentrandosi sulle proprietà invece di sui singoli casi di test, gli sviluppatori possono avere maggiore fiducia nel loro codice risparmiando tempo e sforzo nel processo di test.

Fonte originale

Titolo: pun: Fun with Properties; Towards a Programming Language With Built-in Facilities for Program Validation

Estratto: Property-based testing is a powerful method to validate program correctness. It is, however, not widely use in industry as the barrier of entry can be very high. One of the hindrances is to write the generators that are needed to generate randomised input data. Program properties often take complicated data structures as inputs and, it requires a significant amount of effort to write generators for such structures in a invariant preserving way. In this paper, we suggest and formalise a new programming language \textsf{pun}; a simple functional programming with properties as a built-in mechanism for program validation. We show how to generate input for \textsf{pun} properties automatically, thus, providing the programmer with a low barrier of entry for using property-based testing. We evaluate our work a on library for binary search trees and compare the test results to a similar library in Haskell.

Autori: Triera Gashi, Sophie Adeline Solheim Bosio, Joachim Tilsted Kristensen, Michael Kirkedal Thomsen

Ultimo aggiornamento: 2023-09-12 00:00:00

Lingua: English

URL di origine: https://arxiv.org/abs/2309.04696

Fonte PDF: https://arxiv.org/pdf/2309.04696

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.

Altro dagli autori

Articoli simili