Cos'è il test di sistema?

Due colleghi che lavorano insieme su un computer, concentrandosi sul monitor davanti a loro.

Cos'è il test di sistema?

Il test di sistema è il test software end-to-end basato sulle prestazioni di un intero sistema. Questo test end-to-end include aspetti di functional testing, test non funzionali, test di interfaccia, test di stress e test di recupero.

Immagina di vedere un sistema software al microscopio, partendo dal livello più estremo di ingrandimento con l'unità. Questo è l'elemento costitutivo di base del sistema software. Poi la visuale si espande verso l'esterno per includere il livello successivo di ingrandimento, i moduli creati da quelle singole unità. Infine, allontanandosi completamente, si arriva al livello del sistema. A questo livello di ingrandimento è possibile vedere tutto ciò che è presente nel sistema e come tutti i componenti creati da quei moduli funzionano insieme.

In un certo senso, il test di sistema è un po' come quella visione microscopica, ma con una differenza fondamentale. Il test di sistema è una forma di test black box, il che significa che i tester sono meno interessati alla visualizzazione dei componenti coinvolti nel suo assemblaggio che alla funzionalità complessiva del sistema. Da questo tipo di prospettiva "superato/fallito", il comportamento del sistema è degno di nota in questo contesto solo per quanto riguarda le prestazioni del sistema. (Il test white box consente una maggiore visibilità sulla natura dei componenti all'interno di un sistema.)

Il test di sistema spesso comporta l'analisi di più sistemi software separati che possono o meno funzionare in sinergia all'interno di un determinato sistema software.

Le ultime notizie nel campo della tecnologia, supportate dalle analisi degli esperti

Resta al passo con le tendenze più importanti e interessanti del settore relative ad AI, automazione, dati e oltre con la newsletter Think. Leggi l' Informativa sulla privacy IBM.

Grazie per aver effettuato l'iscrizione!

L'abbonamento sarà fornito in lingua inglese. Troverai un link per annullare l'iscrizione in tutte le newsletter. Puoi gestire i tuoi abbonamenti o annullarli qui. Per ulteriori informazioni, consulta l'Informativa sulla privacy IBM.

Il software del tuo sistema è pronto per il lancio?

Consideriamo il conto alla rovescia che precede i lanci spaziali. Mentre tutti ricordano il drammatico conto alla rovescia in 10 fasi prima dell'accensione e del decollo, pochi ricordano i numerosi controlli di reparto che vengono richiesti dal capo volo e a cui si risponde affermativamente con un "via". In un tipico lancio spaziale, i capi dipartimento vengono consultati sulle operazioni pianificate, sulla sicurezza della missione, sui sistemi del veicolo e sulle condizioni meteorologiche previste, tra molte altre questioni. Ogni reparto viene interrogato e ogni capo reparto risponde a turno.

Allo stesso modo, il test di sistema può essere considerato la checklist finale che precede il lancio di un nuovo sistema software. L'ultimo turno di pulizia di eventuali bug software noti è stato completato. E proprio come nelle storiche liste di controllo ideate dai primi pionieri dello spazio, tutto si riduce a un ultimo tentativo da parte di ogni "dipartimento" incluso nei test del sistema.

Ogni query è colorata in base alla funzionalità del sistema:

  • Ogni componente funziona come previsto?
  • I componenti funzionano in modo coordinato tra loro?
Sviluppo di applicazioni

Sali a bordo: sviluppo di applicazioni Enterprise nel cloud

In questo video il Dr. Peter Haumer illustra l'aspetto del moderno sviluppo di applicazioni aziendali nell'hybrid cloud, mostrando diversi componenti e pratiche, tra cui IBM Z Open Editor, IBM Wazi e Zowe. 

Cosa comporta il test di sistema?

Quando si parla di test di sistema, incontreremo naturalmente l'argomento delle dipendenze, che sono relazioni che esistono all'interno dei casi di test. In tali situazioni, l'esito di un caso di prova può dipendere parzialmente o totalmente dai risultati di altri casi di test. Le dipendenze possono anche coinvolgere funzionalità, ambienti di testing o politiche di sicurezza e possono persino influenzare l'intero processo di testing che un'organizzazione mantiene in mente.

Le metodologie di test di sistema non offrono uno sguardo approfondito sul loro funzionamento interno (ricorda, si tratta di una forma di black box testing), ma ti permettono invece di capire se una determinata applicazione funziona. L'idea è che i test di sistema aiutino a individuare lacune, errori o requisiti mancanti in quanto determinano la funzionalità complessiva dell'applicazione software.

I test di sistema vengono solitamente eseguiti dopo integration testing ma prima dei test di accettazione, assicurando così che tutti i componenti funzionino correttamente insieme. Come vedremo, spesso comprende sia gli aspetti funzionali che quelli non funzionali del sistema. Poiché si basa sia sull'area strettamente funzionale che su quella ampiamente non funzionale, affronta aspetti molto diversi come usabilità, sicurezza e prestazioni.

Uno degli scopi principali del test di sistema è che consente di Verify che il linguaggio di codifica di un software possa essere tradotto in un programma utilizzabile. Tuttavia, l'obiettivo principale dei test di sistema è assicurarsi che il software oggetto di valutazione supporti in modo efficace i requisiti aziendali degli utenti che vi faranno affidamento.

Il processo di test deve rispecchiare lo stesso ambiente di produzione che verrà utilizzato, per garantire che il software funzioni come richiesto nonostante le condizioni mutevoli del mondo reale. Allo stesso modo, i dati di test vengono creati per imitare dati e situazioni reali. Una volta condotti i casi di test, i difetti nel software possono essere individuati e riparati.

Tipi di test funzionali di sistema

I test di sistema possono essere classificati secondo uno dei tre principali gruppi. Il primo, il functional testing, riguarda le prestazioni del sistema, ma non cerca risposte più approfondite se non quella di verificare se il software funziona come promesso. Ecco alcuni dei principali tipi di functional testing:

  • Test di accettazione: i test di accettazione da parte degli utenti mirano a incorporare i test di prestazioni condotti dalle persone che rappresentano il target demografico del software prodotto. Questi utenti aggiungono realismo al processo di test testando il software in condizioni reali.
  • Test di integrazione: un'area di fondamentale importanza dei functional testing studia il modo in cui diversi moduli o componenti si "adattano" tra loro quando sono costretti a lavorare in stretta collaborazione. Questo è il test di integrazione di sistema. Un sistema completamente integrato offre ai tester la funzionalità di valutare le interazioni chiave.
  • Smoke testing: lo smoke testing fornisce un mezzo per verificare se la funzionalità complessiva è stata mantenuta anche dopo che uno sviluppatore ha apportato una modifica al codice. La modifica è stata apportata e i test di fumo consentono di verificare rapidamente se la modifica al codice ha prodotto effetti negativi.
  • Test unitari: nei test unitari, una sezione limitata di codice viene controllata in un ambiente di test isolato. Se l'unità in questione non supera il test (come si evince dal confronto tra i dati del test e gli obiettivi di funzionalità), di solito sono necessari ulteriori test dei singoli componenti o moduli a livello di sistema.

Tipi non funzionali di test di sistema

Sebbene il functional testing fornisca informazioni estremamente importanti, questi dati si limitano fondamentalmente a un voto positivo o negativo, basato esclusivamente sul fatto che il sistema funzioni come dovrebbe. Ciò omette un numero enorme di variabili pertinenti, come la sicurezza del sistema, la UX e le prestazioni.

I test di sistema non funzionali forniscono un mezzo per valutare il funzionamento del sistema. La differenza essenziale tra test funzionali e test non funzionali può essere ridotta al seguente semplice confronto:

  • Functional testing: il sistema funziona?
  • Test non funzionali: il sistema funziona bene?

Tenendo questo in mente, ecco alcune delle principali forme di test di sistema non funzionali:

  • Test di accessibilità: il contenuto digitale presentato è accessibile a tutti, comprese le persone con diverse disabilità? I test di accessibilità indagano su questa questione e lavorano per garantire che i contenuti vengano comunicati a tutti i possibili utenti, in modi che superino le difficoltà fisiche e mentali e garantiscano la coerenza con gli standard di inclusione stabiliti dall'Americans with Disabilities Act (ADA).
  • Test di compatibilità: quando si considera quanto ampiamente le applicazioni siano distribuite e quanti viaggi cross-platform le app devono compiere, diventa facile capire la necessità di test di compatibilità, che valutano quanto bene queste app funzionino, indipendentemente da quante reti, browser, sistemi operativi e configurazioni hardware devono attraversare.
  • Test di carico: in una disciplina secondaria che affronta la fisica unica presentata dalla nozione di carico e come essa influenzi la capacità di un sistema di elaborare richieste di sistema, il test di carico si concentra su cosa accade quando la scalabilità avviene su larga scala. Supponiamo che il sistema non avrà problemi a elaborare una singola richiesta di sistema, ma cosa succede quando tale carico viene moltiplicato per migliaia di richieste, o anche di più?
  • Test di localizzazione: si tratta di un'economia globale alla quale partecipano più Paesi e culture che mai. Il test di localizzazione riguarda l'assicurarsi che i contenuti software esportati in varie località nel mondo siano appropriati per quell'area specifica, secondo le regole generali riguardanti l'UX.
  • Test delle prestazioni: questo tipo di non-functional testing presta particolare attenzione ai problemi di prestazioni. Ad esempio, è essenziale per buone prestazioni che un sistema risponda alle richieste in modo rapido e fluido. Il piano di test nei test delle prestazioni valuta il tempo che gli utenti devono attendere per l'elaborazione delle richieste.
  • Test di sicurezza: non è un segreto che oggigiorno la sicurezza dei dati sia di primaria importanza. Quindi, ha senso che una forma di test sia specificamente orientata alla sicurezza. I metodi di test di sicurezza vengono selezionati in base al tipo di minacce potenziali ricevute dall'azienda.
  • Test di stress: così come un test di stress medico cerca di capire quanto bene funzioni il cuore di una persona sotto pressione di attività, il test di stress del software verifica quanto bene un sistema possa rimanere operativamente resiliente quando supera la sua normale capacità di rilevare i colli di bottiglia e vulnerabilità.
  • Test di usabilità: questo tipo di non-functional testing riguarda interamente la qualità dell'esperienza utente (UX). Il test di usabilità è un processo di test manuale, utilizzato soprattutto su piccola scala. Ciononostante, probabilmente dovrebbe essere applicato spesso, soprattutto quando si eseguono spostamenti complicati come la localizzazione di applicazioni.

Altri tipi di test di sistema

Altri tipi di test di sistema sono utili anche se non rientrano nelle categories di test funzionanti o non funzionanti. Ecco alcune delle metodologie più degne di nota:

  • Test API: application programming interfaces (API) sono estremamente importanti, poiché consentono lo sviluppo software aiutando diverse app o sistemi a connettersi. Il testing API garantisce che i punti di connessione API funzionino come previsto. Fornisce inoltre una supervisione sui permessi degli utenti e sul modo in cui i dati vengono gestiti tramite API.
  • Test automatizzati: come suggerisce il nome, il test automatizzato (chiamato anche automazione dei test) mette la potenza dell'automazione al lavoro per testare le applicazioni software. Lo fa creando e utilizzando script di test progettati per eseguire casi di test su app software, cosa che fa su larga scala, senza intervento umano. Gli insiemi strutturati di linee guida, strumenti e pratiche che aiutano ad automatizzare il processo di test sono chiamati framework.
  • Test manuale: in diretta opposizione ai test automatizzati, il testing manuale si basa su test umani per sperimentare con il software valutato, guidati da vari scenari di test e script di test. I tester sono incoraggiati a mettere davvero il software alla prova per individuare i problemi che necessitano di correzione.
  • Test di migrazione: i test di migrazione sono necessari alle organizzazioni impegnate nell'aggiornamento o nella trasformazione della cultura digitale aziendale. Quando le aziende sono impegnate in tali sforzi di trasformazione, hanno bisogno di convalidare che i dati e il software chiave vengano trasferiti correttamente da un sistema in uscita a un sistema in entrata.
  • Test di regressione: mentre le modifiche al codice sono pensate per migliorare il software o aumentare le sue funzionalità, possono involontariamente introdurre difficoltà se in qualche modo si aggiunge un errore umano. I test di regressione permettono ai tester di confermare il funzionamento stabile e corretto eseguendo nuovamente i test secondo necessità.

Sfide nell'utilizzo dei test di sistema

Sebbene il processo di test del sistema fornisca il test delle prestazioni black-box più completo che esista, l'esecuzione del test del sistema non è priva di potenziali problemi:

Requisiti in evoluzione

I requisiti che i test di sistema devono soddisfare sono numerosi, che si tratti di requisiti aziendali endemici per quell'organizzazione, requisiti funzionali unici di quel software o requisiti specifici che possono applicarsi alle sue operazioni. In effetti, sembra che non manchino mai i requisiti di sistema che i sistemi operativi devono assorbire. I requisiti che cambiano spesso possono mettere in difficoltà un sistema e lasciarlo con un lotto incompleto di casi di test.

Pressioni sulle scadenze

Non dovrebbe essere una novità per nessuno che le scadenze possano creare scompiglio in un ambiente di lavoro. È noto che le scadenze hanno un impatto notevole quando i programmi di lavoro si scontrano con le aspettative dettate dal calendario. La pressione delle scadenze nello sviluppo del software si manifesta nel fatto che test di sistema adeguati e ampi vengono spesso trascurati e condotti in modo incompleto o addirittura ignorati. Spesso ciò richiede nuovi test in una fase successiva del ciclo di sviluppo del software.

Limitazioni delle risorse

Il test del sistema non avviene nel vuoto o senza sforzo. Richiede innanzitutto il lavoro qualificato dei team di test, strumenti di test per supportare tale lavoro e un budget adeguato per renderlo possibile. Senza questi componenti, è facile che vengano implementate delle scorciatoie al loro posto, con conseguente incompletezza dei test. E se una parte di quell'equazione viene alterata o annullata, probabilmente avrà un impatto negativo sulla copertura del test che deriva dal test di sistema di quell'applicazione o prodotto software.

Instabilità ambientale

Molte potenziali vulnerabilità possono essere valutate durante il processo di test, ma il personale di ingegneria del software può effettuare tali valutazioni solo se supportato e sotto controllo dell'ambiente di testing in cui lavora. Quando i tester non lavorano in ambienti stabili, diventa più facile per loro trascurare potenziali difetti software. E se i tester in ambienti instabili trovano bug software da riparare, spesso avranno più difficoltà a riprodurli in seguito.

Interruzioni nelle comunicazioni

Quando il tuo compito riguarda il controllo della qualità del software, la revisione delle righe di codice informatico è un lavoro laborioso che può diventare noioso e richiedere molto tempo. Ciò che può rendere questo tipo di lavoro ancora più spiacevole è quando si verificano lacune di comunicazione tra tester, sviluppatori e altri stakeholder. Come in ogni impresa aziendale, i problemi di comunicazione generano incomprensioni e creano un ambiente produttivo in cui i difetti possono sfuggire al rilevamento e radicarsi nei sistemi operativi.

Gestione delle complessità dei dati di test

Le tecniche di test variano e i risultati dei test sono di tutti i tipi, da dati di test semplici a set di dati vasti e complessi che richiedono una gestione più seria durante e dopo la fase di test. Il livello di complessità del progetto aumenta ulteriormente quando gli ambienti di test non rispecchiano completamente quelli di produzione. La strategia di test implementata durante il processo di sviluppo del software deve considerare come affrontare al meglio questi problemi.

Soluzioni correlate
IBM Enterprise Application Service for Java

Un servizio single-tenant completamente gestito per lo sviluppo e la distribuzione di applicazioni Java.

Esplora le applicazioni Java
Soluzioni DevOps

Utilizza il software e gli strumenti DevOps per creare, distribuire e gestire app cloud-native su più dispositivi e ambienti.

Esplora le soluzioni DevOps
Enterprise Application Development Services

Lo sviluppo di applicazioni cloud significa programmare una volta, iterare rapidamente e distribuire ovunque.

Servizi per lo sviluppo di applicazioni
Fai il passo successivo

I servizi di consulenza per lo sviluppo delle applicazioni IBM Cloud offrono consulenza esperta e soluzioni innovative per semplificare la tua strategia cloud. Collabora con gli esperti di cloud e sviluppo di IBM per modernizzare, scalare e accelerare le tue applicazioni, ottenendo risultati trasformativi per la tua azienda.

Esplora i servizi per lo sviluppo di applicazioni Inizia a creare gratuitamente con IBM Cloud