Skip to main content

Una delle principali idee sbagliate nel panorama attuale del testing è che il testing in produzione richieda solo tre competenze: esperienza nei processi, conoscenza degli strumenti di test automatizzati e capacità di gestione degli incidenti. Queste sono importanti, ma ciò che è vistosamente assente — non solo da questo elenco ma anche nella mente dei responsabili delle assunzioni — è qualcosa che si penserebbe essere il più fondamentale:

La capacità di progettare un test pratico per ambienti di produzione.

Sarebbe comico se non fosse così allarmante che quasi nessuna organizzazione dia priorità a competenze chiave di QA durante l’implementazione di strategie di testing in produzione.

Want more from The CTO Club?

Create a free account to finish this piece and join a community of CTOs and engineering leaders sharing real-world frameworks, tools, and insights for designing, deploying, and scaling AI-driven technology.

This field is for validation purposes and should be left unchanged.
Name*

Che un test venga eseguito manualmente o tramite automazione in un sistema di produzione live, bisogna prima sapere progettare un test che offra informazioni utili senza compromettere l’esperienza dell’utente, giusto?

Sarebbe comico se non fosse così allarmante che quasi nessuna organizzazione dia priorità alle competenze di progettazione dei test durante l’implementazione di strategie di testing in produzione. Che un test venga eseguito manualmente in un ambiente controllato o automatizzato in un sistema di produzione live, bisogna prima sapere progettare un test che offra informazioni utilizzabili senza compromettere l’esperienza dell’utente, giusto?

C’è un problema ovvio nell’escludere la competenza nella progettazione dei test dall’approccio al testing in produzione:

Non è forse essenziale sapere che la persona che implementa i test nel tuo ambiente di produzione capisca cosa costituisce un test significativo?

Dato che automatizzare test progettati male in produzione ti fornisce dati inaffidabili più rapidamente e crea rischi inutili? E essere “agili” mentre si testa in produzione in modo incompetente non mi sembra un vero miglioramento, se non forse per lo scrum master.

L’importanza e la disciplina della progettazione dei test, soprattutto per scenari di testing in produzione, andrebbero riprese seriamente. Considera questo il mio contributo a tale sforzo.

Cosa È Essenziale per un Testing Efficace in Produzione?

Il primo passo verso la padronanza del testing in produzione è fare alcune distinzioni essenziali che saranno già familiari intuitivamente alla maggior parte delle persone QA, ma che raramente vengono presentate in modo sistematico in contesti di testing in produzione.

Esploriamo questi concetti fondamentali che trasformeranno il tuo approccio al testing in produzione.

Funzionalità Esplicite vs Implicite negli Ambienti di Produzione

Iniziamo con la distinzione fondamentale fra funzionalità esplicite e funzionalità implicite durante il testing in produzione.

Le prime sono ciò che la maggior parte di noi intende per “funzionalità”. Si riferiscono a funzionalità e capacità specificate formalmente dal Product e la cui specifica formale guida l’implementazione in Engineering. Durante il testing in produzione, queste funzioni esplicite sono tipicamente l’obiettivo degli strumenti di monitoraggio e osservabilità.

Per questo motivo, testare le funzionalità esplicite in produzione può sembrare semplice, ma anche con funzioni ben definite, così non è, come vedremo più avanti. Almeno il livello di specificità delle funzionalità esplicite rende più facile costruirci intorno un’impalcatura di test di produzione (o l’illusione di tale impalcatura).

La funzionalità implicita in un ambiente di produzione è un’entità completamente diversa.

Consiste in comportamenti e risposte a input di utenti o ambientali che non sono stati formalmente definiti o previsti. La mancata progettazione adeguata di test per questa funzionalità implicita in produzione è, di gran lunga, la principale causa dei bug più critici scoperti dopo il rilascio del prodotto (l’altra causa è il testing inadeguato in ambienti hardware/software/dispositivi estremi).

In altre parole:

Testare la funzionalità implicita in produzione richiede notevole ingegnosità e immaginazione. È la parte veramente creativa delle strategie di testing in produzione.

Il testing della funzionalità implicita negli ambienti di produzione richiede una certa dose di astuzia diabolica per diventare bravi, e purtroppo non può essere insegnata tramite i normali processi di QA.

Nessuna metodologia agile o framework di test automatizzato ti insegnerà come testare efficacemente la funzionalità implicita in produzione, ma una corretta progettazione dei test può incoraggiarla.

Quindi, come si definisce una strategia di progettazione dei test per la funzionalità implicita nel proprio ambiente di produzione? Fortunatamente, si può fare. Ma prima di approfondire direttamente questa domanda, esploriamo alcune altre distinzioni rilevanti e critiche per un testing efficace in produzione.

Testing Positivo vs Negativo

Punto Chiave: Quando si testa in produzione, sia il testing positivo che quello negativo richiedono attenzioni particolari che vanno oltre gli approcci QA tradizionali.

La maggior parte delle persone che lavorano nella QA comprende la differenza di base tra questi due tipi di test:

  • Test positivo in produzione: Validazione che le funzionalità funzionino come previsto in ambienti live
  • Test negativo in produzione: Verifica strategica di come il sistema risponde a input inattesi senza disturbare gli utenti reali

Perché il test in produzione è diverso

Sebbene queste distinzioni siano concettualmente chiare, testare in produzione introduce sfide uniche:

  • Rischio maggiore: I casi limite impattano clienti reali e le operazioni aziendali
  • Complessità reale: I comportamenti degli utenti raramente seguono schemi prevedibili
  • Continuità operativa: I test non devono interrompere le normali operazioni

Oltre la specifica

Le specifiche raramente forniscono tutto il necessario per un testing efficace in produzione:

Dipendere troppo dalla specifica — sia essa di Product o Engineering — limita la tua capacità di ragionamento. Questo è particolarmente problematico quando si esegue il testing in produzione, dove i modelli di utilizzo nel mondo reale spesso si discostano dalle specifiche.

Questo illustra ciò che chiamo "l'errore empirico": attendere che qualcosa ti dica esplicitamente cosa fare prima di poterlo comprendere.

La progettazione efficace di test per ambienti di produzione richiede:

  1. Parametrizzazione adeguata delle funzionalità
  2. Pensiero logico su ciò che è possibile
  3. Considerazione sia delle interazioni utente che ambientali

Esempio reale: comportamenti inattesi

Ai tempi del "cretaceo" del software (cioè, negli anni '80), testavo software di conversione documentale e scoprii funzionalità sorprendenti:

Mostra immagine

Esempio classico: In WordPerfect, era possibile inserire un comando di interlinea a metà paragrafo che influenzava solo le linee successive, creando paragrafi con due valori di interlinea diversi.

Equivalenti moderni nei test in produzione:

  • Combinazioni inattese di permessi utente nelle applicazioni cloud
  • Sequenze di richieste API impreviste nelle architetture a microservizi
  • Race condition in ambienti ad alta concorrenza

Ora esaminiamo i tre parametri chiave che affineranno il tuo approccio ai test in produzione:

1. Test dell'ambito funzionale

Definizione: Identificare come gli utenti potrebbero usare le funzioni in contesti o modi mai previsti in fase di progettazione.

Perché è importante nei test

Non tutti i vincoli vengono previsti durante lo sviluppo. In produzione, questa mancanza può avere conseguenze gravi.

Oltre la semplice validazione

Durante i test in produzione, considera questi limiti:

Ricorda: Validare una funzionalità in produzione non significa solo confermare che funziona come progettato, ma anche verificare che non possa essere usata in modi non previsti che potrebbero compromettere la stabilità o la sicurezza del sistema.

Upgrade your inbox with more tech leadership wisdom for delivering better software and systems.

Upgrade your inbox with more tech leadership wisdom for delivering better software and systems.

This field is for validation purposes and should be left unchanged.
Name*

2. Test delle interruzioni dei workflow nei sistemi live

Attenzione: Questo approccio presuppone che tu stia già testando in produzione i flussi di lavoro definiti. In caso contrario, affronta prima quelle basi!

Oltre il "cammino felice"

Quando testi in produzione, esplora queste criticità nei flussi di lavoro:

Workflow interrotti: Processo iniziato ma mai completato
Operazioni annullate: L'utente annulla esplicitamente a metà
Processi riavviati: L'utente tenta la stessa azione più volte
Retromarcia: L'utente torna a passi precedenti con input diversi

Suggerimenti pratici per i test in produzione

Utilizza tecniche come i feature flag per controllare in sicurezza l'esposizione di questi test negli ambienti di produzione.

Applicazioni reali


Consiglio: Questi scenari raramente vengono catturati nelle specifiche, ma rappresentano comportamenti reali degli utenti in produzione.

3. Sequenzialità nei test in produzione

La sfida: Nei sistemi di produzione con più processi concorrenti, la sequenza delle operazioni può portare a guasti inaspettati difficili da riprodurre in ambienti di test.

Due schemi critici di sequenzialità

Condizioni antecedenti contributive

Mostra immagine

  • Definizione: Eventi che devono verificarsi prima di un processo che fallisce
  • Caratteristiche: Possono manifestarsi solo dopo specifiche sequenze che richiedono giorni per verificarsi naturalmente
  • Esempio in produzione: Permessi utente modificati → cache scade → chiamata specifica API

Condizioni successive contributive

  • Definizione: Guasti che diventano evidenti solo tramite interazioni successive
  • Manifestazione: Il guasto rimane nascosto fino a un'operazione successiva
  • Esempio in produzione: Un danneggiamento dei dati si verifica silenziosamente finché non viene generato un report

Perché è così difficile?

Definire l'ambito dei test di sequenzialità in produzione richiede:

  1. Conoscenza approfondita delle interazioni di sistema
  2. Modellazione delle transizioni di stato per processi complessi
  3. Comprensione sia delle combinazioni di stato previste sia di quelle non intenzionate

"Come quei valori doppi di interlinea all'interno di un singolo paragrafo, questi stati inattesi possono portare al caos negli ambienti di produzione."

Strumenti essenziali per il test della sequenzialità in produzione

  • Chaos engineering per introdurre deliberatamente guasti controllati
  • Strumenti di osservabilità per tracciare i cambiamenti di stato tra i sistemi
  • Tracing distribuito per seguire i percorsi delle richieste attraverso i microservizi

In sintesi: I problemi di sequenzialità rappresentano una delle fonti più ricche di bug gravi nei moderni sistemi di produzione. Dai priorità a questo aspetto nella tua strategia di testing.

Il punto chiave

I feature flag trasformano il testing in produzione da una pratica rischiosa a un processo controllato e guidato dai dati. Separando il deployment dal rilascio e fornendo capacità di rollback istantanee, creano una rete di sicurezza che consente ai team di validare il software in condizioni reali senza compromettere l'esperienza utente o la stabilità del sistema.

Piattaforme di gestione dei feature flag nel testing in produzione

Le piattaforme di gestione dei feature flag hanno trasformato il testing in produzione da un'attività rischiosa a un processo controllato e sistematico. Tuttavia molte organizzazioni non sfruttano efficacemente questi strumenti all'interno della loro strategia di test design.

L'evoluzione della gestione del rischio in produzione

Gli approcci tradizionali al testing in produzione prevedevano decisioni binarie: una funzionalità era attivata per tutti o per nessuno. Le piattaforme di feature management cambiano radicalmente questo paradigma:

  • Controllo granulare: Testa le funzionalità con specifici segmenti di utenti anziché con un rilascio totale o nullo
  • Rimedi istantanei: Disabilita funzionalità problematiche senza dover distribuire nuovamente il codice o effettuare rollback
  • Esposizione progressiva: Aumenta gradualmente la copertura utenti in base ai dati di performance in tempo reale

Oltre ai semplici feature flag

Sebbene i feature flag di base esistano da anni, le moderne piattaforme di gestione dei feature flag forniscono capacità essenziali che trasformano i test in produzione:

Quando integrate correttamente nella strategia di test design, le piattaforme di gestione delle funzionalità consentono di:

  1. Contenimento mirato del rischio - Limita l'esposizione delle nuove funzionalità a segmenti specifici di utenti
  2. Validazione con utenti reali - Testa con utenti effettivi anziché dati di test sintetici
  3. Rimedi immediati - Risolvi i problemi senza deploy d'emergenza o rollback

Integrazione con strumenti di osservabilità

Il vero potenziale delle piattaforme di gestione dei feature flag emerge quando vengono integrate con sistemi di osservabilità e monitoraggio:

Approccio tradizionale:

  • Rilevare problemi dopo il deployment completo
  • Verifica manuale dei risultati dei test
  • Analisi post-mortem dopo gli incidenti

Integrazione con la Gestione delle Feature:

  • Correlare l'attivazione delle feature con le metriche di sistema
  • Monitoraggio automatico delle prestazioni per ogni feature flag
  • Visione in tempo reale degli impatti delle feature

Impatto Reale: Trasformare i Test in Produzione

Le organizzazioni che implementano piattaforme di gestione delle feature riportano vantaggi significativi:

  • Riduzione della gravità degli incidenti: "Possiamo testare le feature in produzione molto prima di un lancio di marketing. E se una feature causa problemi il giorno del lancio, possiamo semplicemente disattivarla con un kill switch—senza rollback." — Chris Guidry, VP of Engineering, O'Reilly Media.
  • Cicli di rilascio accelerati: I team di IBM, TrueCar e altre aziende leader usano la gestione delle feature per testare in produzione, ottenendo quello che descrivono come "rilasci sicuri e senza cerimonie."
  • Copertura di test potenziata: Le feature flag espongono casi limite impossibili da simulare in ambienti controllati.

Implementazione Pratica nella Progettazione dei Test

Per integrare efficacemente le piattaforme di gestione delle feature nella strategia di progettazione dei test:

  1. Progetta punti di verifica che si allineino alle transizioni delle feature flag
  2. Crea scenari di fallback per ogni componente configurato con feature flag
  3. Stabilisci soglie di prestazione che attivano la disattivazione automatica della feature
  4. Definisci casi di test specifici per segmento per validare il comportamento tra le diverse popolazioni di utenti
  5. Documenta le dipendenze tra flag per evitare errori a cascata

Le piattaforme di gestione delle feature non sostituiscono una progettazione ponderata dei test—la rafforzano. La qualità dei test in produzione dipende ancora fondamentalmente da quanto bene sono stati progettati i test stessi.

Errori Comuni da Evitare

Anche con una gestione robusta delle feature, rimangono diverse sfide:

  • Flag debt - Flag abbandonate o dimenticate che generano debito tecnico
  • Monitoraggio insufficiente - Mancata correlazione tra lo stato dei flag e le prestazioni di sistema
  • Eccessiva sicurezza - Riduzione prematura dei test in pre-produzione
  • Interdipendenze tra flag - Creazione di relazioni complesse e difficili da diagnosticare

La Conclusione

Le piattaforme di gestione delle feature offrono capacità potenti per testare in produzione, ma vanno integrate con attenzione nella strategia complessiva di progettazione dei test. Le organizzazioni che ottengono maggior valore non si limitano a implementare questi strumenti—ri-pensano radicalmente il modo in cui funziona la progettazione dei test in un ambiente con feature flag.

Se correttamente integrate come parte di un approccio di progettazione dei test completo, le piattaforme di gestione delle feature trasformano i test in produzione da "male necessario" a vero vantaggio competitivo.

Strumenti per i Test in Produzione: Le Sfide dell'Implementazione

Se le feature flag e le piattaforme di gestione costituiscono la base dei test in produzione, il più ampio ecosistema di strumenti pone una serie di sfide specifiche nell'implementazione. La selezione e la configurazione degli strumenti appropriati richiedono un'attenta valutazione delle competenze del team, dell'architettura del sistema e dei bisogni organizzativi.

Strumenti di Monitoraggio e Osservabilità

Un testing efficace in produzione dipende da una visibilità completa sul comportamento del sistema:

  • Application Performance Monitoring (APM)
    Vantaggi: Fornisce dettagliate informazioni sulle prestazioni attraverso tutti i livelli dell'applicazione.
    Sfide: Spesso richiede un'ampia strumentazione e può generare dati eccessivi che sovraccaricano team più piccoli.
  • Sistemi di Gestione dei Log
    Vantaggi: Essenziali per il debugging e l'analisi forense durante i test in produzione.
    Sfide: Possono generare volumi di dati ingestibili senza strategie di filtraggio e indicizzazione adeguate.
  • Tracciamento Distribuito
    Vantaggi: Offre visibilità end-to-end su architetture a microservizi.
    Sfide: La complessità di implementazione aumenta notevolmente in ambienti eterogenei con più stack tecnologici.

Sistemi di Gestione degli Alert

Un'adeguata gestione degli alert è cruciale durante il test di nuove feature in produzione:

  • Piattaforme di aggregazione degli avvisi
    Vantaggi: Consolidano le notifiche provenienti da diversi sistemi di monitoraggio.
    Sfide: Ottime per la gestione degli incidenti ma possono essere di disturbo se non configurate con attenzione per evitare l’affaticamento da allerta.
  • Sistemi di risposta agli incidenti
    Vantaggi: Snelliscono la comunicazione durante gli incidenti in produzione.
    Sfide: Necessitano di runbook ben definiti e di punti di integrazione per essere efficaci; possono introdurre sovraccarico per implementazioni semplici.

Considerazioni sull’implementazione

Quando si implementano strumenti per il test in produzione, i team dovrebbero valutare:

  1. Requisiti di scalabilità - Lo strumento riuscirà a gestire i volumi di traffico e la crescita dei dati?
  2. Capacità d’integrazione - Quanto facilmente si connette alla vostra toolchain esistente?
  3. Consumo di risorse - Quale sovraccarico introduce lo strumento stesso?
  4. Competenze del team - Avete le conoscenze necessarie per massimizzare il valore dello strumento?
  5. Rapporto segnale-rumore - Siete in grado di estrarre informazioni utili senza essere sommersi dai dati?

Errori comuni nell’implementazione

  • Proliferazione di strumenti - Accumulare troppe soluzioni sovrapposte
  • Strumentazione incompleta - Mancanza di punti di monitoraggio critici
  • Affaticamento da allerta - Generare troppe notifiche che i team finiscono per ignorare
  • Contesto insufficiente - Mancato collegamento dei metriche con l’impatto sull’utente
  • Silos di dati - Creare sistemi di monitoraggio isolati che non condividono le informazioni

Trovare il giusto equilibrio

Le implementazioni più riuscite di testing in produzione raggiungono un equilibrio tra:

  • Monitoraggio completo vs. complessità gestibile
  • Approfondimenti dettagliati vs. sovraccarico informativo
  • Risposte automatizzate vs. punti decisionali umani

Quando si implementano strumenti di testing negli ambienti di produzione, è bene iniziare in piccolo con obiettivi mirati, per poi espandere gradualmente la copertura man mano che il team acquisisce competenza sia sugli strumenti che nell’interpretazione dei dati prodotti.

Carico, Complessità, Latenza

Considera i macro fattori di sistema: carico, complessità e latenza nella progettazione dei tuoi test. Questi possono influenzare l’esecuzione o il completamento di una richiesta, di un processo o di un evento. 

La rilevanza del carico di sistema dovrebbe essere ovvia. Il modo in cui le richieste o le transazioni vengono elaborate durante periodi di stress da carico può fallire (in qualsiasi fase del processo di transazione).

Questo dovrebbe essere una parte di default della pianificazione dei tuoi test. Come sappiamo, il carico può essere generato anche dalla richiesta stessa — ad esempio, una query dati che scatena l’elaborazione e la trasmissione di grandi quantità di dati.

Complessità qui si riferisce principalmente alla complessità delle richieste presentate contro un sistema. Questa complessità può derivare dal numero di condizioni specificate (e dalle rispettive esclusioni ed eccezioni), dal numero di database (virtuali o meno) implicati nelle richieste, oppure dalla topologia di elaborazione del sistema stesso.

Nel contesto di questa discussione, uso il termine latenza per indicare l’introduzione di intervalli di tempo nel processo di richiesta, che non è il suo significato usuale. Mi riferisco qui alla latenza utente, non alla latenza di risposta del sistema stesso. 

In altre parole, come si comporta la funzione o capacità se l’utente arriva a un certo passaggio del processo e poi resta in pausa su quella schermata, senza fare nulla? Il sistema va in timeout (probabilmente dovrebbe)? Dovrebbe avvisare l’utente? Deve restare in quello stato all’infinito? 

Le risposte a queste domande potrebbero essere fornite nelle specifiche, ma il prodotto in test potrebbe non comportarsi in quel modo, ed è proprio per questo che si esegue il test.

Ruoli Utente

Naturalmente, gli utenti finali possono interagire con i sistemi software in diversi ruoli. Lo stesso utente può interagire con il sistema in ruoli differenti, a seconda delle sue azioni. 

Tuttavia, anche processi e servizi possono avere ruoli e privilegi associati diversi. In entrambi i casi, assicurati che la progettazione e pianificazione dei tuoi test, sia per funzionalità che capacità, consideri ed eserciti tutti i possibili stati di ruolo.

Prossimi Passi

Cerchi altri consigli sulla progettazione dei test? Vuoi potenziare la crescita della tua SaaS e affinare le tue competenze di leadership?

Iscriviti alla nostra newsletter per ricevere le ultime novità da CTO e aspiranti leader tecnologici. 

Ti aiuteremo a scalare in modo più intelligente e guidare con maggiore forza grazie a guide, risorse e strategie dei migliori esperti!