Last updated
Last updated
Quando si utilizza GitHub Copilot per la generazione di codice, รจ difficile aspettarsi una copertura sufficiente dei casi di test senza fornire un contesto all'IA. Non solo con GitHub Copilot, ma anche utilizzando strumenti come ChatGPT, รจ importante scrivere test case in modo approfondito.
GitHub Copilot รจ uno strumento di generazione automatica di codice basato sull'IA, che mira a ridurre la scrittura manuale di codice da parte del programmatore. Utilizzando GitHub Copilot, l'IA potrebbe generare del codice eccellente in sintassi e approcci che non sei abituato a usare. Tuttavia, il codice generato potrebbe essere di bassa leggibilitร per te, il che potrebbe diminuire la manutenibilitร . Pertanto, รจ importante fornire dei test case solidi anche quando si utilizza GitHub Copilot. I test case svolgono un ruolo importante nell'assicurare la qualitร del programma e la copertura dei casi di test del codice generato automaticamente รจ essenziale.
Nel caso in cui si voglia utilizzare GitHub Copilot per scrivere i test case, senza fornire un contesto dettagliato, non รจ possibile generare dei test case sufficientemente coprenti.
Ad esempio, supponiamo di voler scrivere i seguenti test case utilizzando GitHub Copilot. Questo codice esegue la moltiplicazione di due numeri.
Utilizzando GitHub Copilot, รจ possibile generare facilmente il seguente codice di test.
Ora, sappiamo che GitHub Copilot puรฒ essere utilizzato anche per il Test-Driven Development (TDD). Tuttavia, questi test case che abbiamo presentato sono veramente buoni? "No way!" I test case forniti da GitHub Copilot non si avvicinano nemmeno ai test case eccellenti.
Qui sono elencati alcuni problemi con questi test case. Innanzitutto, c'รจ duplicazione nei test. Alcuni test case si aspettano lo stesso risultato, il che significa che stiamo eseguendo test ridondanti.
In secondo luogo, non viene rilevato alcun errore. Questi test case controllano se la funzione multiply() funziona correttamente, ma non rilevano errori. Ad esempio, non c'รจ alcun controllo per la gestione di input di tipo stringa.
Se utilizzassimo la funzione multiply() testata fino ad ora, e le passassimo il seguente input, scopriremmo che non produce il risultato previsto.
Come abbiamo visto, ci sono duplicazioni nei test case e non vengono rilevati errori. Se si volesse scrivere codice, potrebbe essere utile comunicare con GitHub Copilot e specificare ogni condizione di test una per una, come nell'esempio seguente:
Questo approccio รจ giร un miglioramento rispetto ai test case precedenti. Tuttavia, non รจ ancora sufficientemente esaustivo. Come possiamo utilizzare al meglio GitHub Copilot per scrivere test case piรน coprenti?
Soluzione
Quando si scrivono codici di test utilizzando GitHub Copilot, รจ necessario fornire un contesto dettagliato. Utilizzando modelli di elaborazione del linguaggio naturale come ChatGPT, รจ possibile creare casi di test piรน completi.
Proviamo a passare una prompt come questa a ChatGPT:
Quali sono i casi di test/le condizioni da includere per scrivere codice di test completo per il seguente codice? Si prega di elencare puntualmente.
ChatGPT restituirร una lista di casi di test da includere, che sembrano molto completi:
Ecco alcuni esempi di casi di test da includere nel codice di test per la funzione multiply ():
Verificare che restituisca il risultato corretto quando si inseriscono due numeri interi positivi.
Verificare che restituisca il risultato corretto quando si inseriscono due numeri interi negativi.
Verificare che restituisca il risultato corretto quando si inserisce un numero intero positivo e un numero intero negativo.
Verificare che restituisca 0 quando uno dei due input รจ 0.
Verificare che si verifichi un errore quando si inserisce un numero decimale come input.
Verificare che si verifichi un errore quando si inserisce una stringa come input.
Verificare che si verifichi un errore quando si inserisce un input non intero.
Utilizzando questi casi di test, possiamo scrivere il seguente codice di test con GitHub Copilot. Il risultato sembra molto meglio.
Tuttavia, non รจ ancora perfetto. Ad esempio, la necessitร di verificare se si verifica un errore quando si inserisce un numero decimale come input dipende dall'implementazione del codice, e gli ultimi due casi di test stanno testando lo stesso errore. Ci sono ancora margini per la correzione manuale. Tuttavia, รจ fantastico che si possa raggiungere questo punto in pochi istanti durante la scrittura del codice di test.
In sintesi, quando si utilizza GitHub Copilot per generare codice automaticamente, รจ necessario prestare attenzione alla completezza del codice di test. ร possibile creare casi di test piรน completi utilizzando modelli di elaborazione del linguaggio naturale come ChatGPT e fornendo un contesto dettagliato. Tuttavia, รจ importante tenere presente che non รจ possibile generare automaticamente codice di test perfetto, e che รจ necessario apportare correzioni manuali. Il codice di test รจ molto importante per garantire la qualitร del programma, e avere casi di test completi รจ essenziale.