Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
REL08-BP02 Esecuzione di test funzionali come parte integrante dell'implementazione
Utilizza tecniche come i test di unità e i test di integrazione per convalidare le funzionalità richieste.
Il test di unità è un processo in cui si testa la più piccola unità funzionale di codice per convalidarne il comportamento. I test di integrazione cercano di convalidare che ogni funzionalità dell'applicazione operi secondo i requisiti del software. Mentre i test di unità si concentrano sulla verifica di una parte dell'applicazione in modo isolato, i test di integrazione considerano gli effetti collaterali (ad esempio, l'effetto della modifica dei dati attraverso un'operazione di mutazione). In entrambi i casi, i test devono essere integrati in una pipeline di implementazione e, se i criteri di esito positivo non sono soddisfatti, la pipeline viene interrotta o ripristinata. Questi test vengono eseguiti in un ambiente di pre-produzione, gestito per fasi prima della produzione nella pipeline.
Puoi ottenere i migliori risultati quando questi test vengono eseguiti automaticamente come parte delle operazioni di sviluppo e implementazione. Ad esempio, con AWS CodePipeline, gli sviluppatori affidano le modifiche a un repository di origine in cui CodePipeline rileva automaticamente le modifiche. L'applicazione viene creata e i test di unità vengono eseguiti. Dopo che i test di unità sono stati superati, il codice creato viene distribuito sui server di gestione temporanea per il test. Dal server temporaneo, CodePipeline esegue più test, ad esempio test di integrazione o caricamento. Una volta completati con successo i test, CodePipeline distribuisce il codice testato e approvato alle istanze di produzione.
Risultato desiderato: utilizzi l'automazione per eseguire test di unità e di integrazione per verificare che il codice si comporti come previsto. Questi test sono integrati nel processo di implementazione e un errore del test interrompe l'implementazione.
Anti-pattern comuni:
-
Ignori o aggiri gli errori di test e i piani durante il processo di implementazione per accelerare la tempistica di implementazione.
-
I test vengono eseguiti manualmente al di fuori della pipeline di implementazione.
-
Non esegui le fasi di test nell'automazione tramite i flussi di lavoro manuali di emergenza.
-
Esegui i test automatici in un ambiente che non assomiglia molto all'ambiente di produzione.
-
Crei una suite di test non sufficientemente flessibile e difficile da mantenere, aggiornare o scalare con l'evoluzione dell'applicazione.
Vantaggi dell'adozione di questa best practice: i test automatici durante il processo di implementazione individuano tempestivamente i problemi, riducendo il rischio di un rilascio in produzione con bug o comportamenti imprevisti. I test di unità verificano che il codice si comporti come desiderato e che i contratti API siano rispettati. I test di integrazione convalidano il funzionamento del sistema in base ai requisiti specificati. Questi tipi di test verificano il funzionamento previsto di componenti quali interfacce utente, API, database e codice sorgente.
Livello di rischio associato se questa best practice non fosse adottata: elevato
Guida all'implementazione
Adotta un approccio alla scrittura del software basato sullo sviluppo guidato dai test (TDD, Test-Driven Development), in cui sviluppi casi di test per specificare e convalidare il codice. Per iniziare, crea casi di test per ogni funzione. Se il test non va a buon fine, scrivi un nuovo codice per superare il test. Questo approccio consente di convalidare il risultato atteso di ciascuna funzione. Esegui i test di unità e verifica che vengano superati prima di eseguire il commit del codice in un repository del codice sorgente.
Implementa test di unità e di integrazione come parte delle fasi di compilazione, test e implementazione della pipeline CI/CD. Automatizza i test e avvia automaticamente i test ogni volta che una nuova versione dell'applicazione è pronta per essere implementata. Se non si soddisfano i criteri di esito positivo, la pipeline si arresta o viene sottoposta a rollback.
Se l'applicazione è un'app web o per dispositivi mobili, esegui test di integrazione automatizzati su più browser desktop o dispositivi reali. Questo approccio è particolarmente utile per convalidare la compatibilità e la funzionalità delle app per dispositivi mobili su una vasta gamma di dispositivi.
Passaggi dell'implementazione
-
Scrivi test di unità prima di scrivere codice funzionale (sviluppo basato su test, o TDD). Stabilisci linee guida per il codice in modo che la scrittura e l'esecuzione di test di unità siano un requisito di codifica non funzionale.
-
Crea una suite di test di integrazione automatizzati che coprano le funzionalità testabili identificate. Questi test devono simulare le interazioni degli utenti e convalidare i risultati attesi.
-
Crea l'ambiente di test necessario per eseguire i test di integrazione. Questo può includere ambienti di gestione temporanea o di pre-produzione che simulano fedelmente l'ambiente di produzione.
-
Configura le fasi di origine, compilazione, test e distribuzione utilizzando la console AWS CodePipeline o AWS Command Line Interface (CLI).
-
Distribuisci l'applicazione una volta che il codice è stato compilato e testato. AWS CodeDeploy può distribuirla negli ambienti di gestione temporanea (test) e di produzione. Questi ambienti possono includere istanze Amazon EC2, funzioni AWS Lambda o server on-premises. Per distribuire l'applicazione in tutti gli ambienti si deve utilizzare lo stesso meccanismo di implementazione.
-
Monitora l'andamento della pipeline e lo stato di ogni fase. Utilizza i controlli di qualità per bloccare la pipeline in base allo stato dei test. Puoi inoltre ricevere notifiche per qualsiasi errore che si verifica durante l'esecuzione o il completamento della pipeline.
-
Monitora costantemente i risultati dei test e cerca modelli, regressioni o aree che richiedono maggiore attenzione. Utilizza queste informazioni per migliorare la suite di test, identificare le aree dell'applicazione che richiedono test più approfonditi e ottimizza il processo di implementazione.
Risorse
Best practice correlate:
Documenti correlati: