Che cos'è il test di regressione?
Che cos'è il test di regressione?
Test di regressione è definito come un tipo di test del software per confermare che una recente modifica al programma o al codice non abbia influito negativamente sulle funzionalità esistenti. Possiamo anche dire che non è altro che una selezione totale o parziale di casi di test già eseguiti che vengono rieseguiti per garantire che le funzionalità esistenti funzionino correttamente.
Questo tipo di test viene eseguito per garantire che le nuove modifiche al codice non abbiano effetti collaterali sulle funzionalità esistenti. Garantisce che il vecchio codice funzioni ancora una volta apportate le ultime modifiche al codice.
Perché i test di regressione?
Il processo di test di regressione è essenziale nell'ambito del test. In quanto può identificare se le modifiche o i miglioramenti del codice stanno introducendo nuovi difetti o interrompendo i test funzionali esistenti.
Senza un processo di test di regressione, anche piccole modifiche al codice potrebbero causare errori costosi. Si tratta quindi di una pratica sistematica per aiutare a mantenere la qualità del software. Questo metodo aiuta a prevenire il ripetersi di problemi noti e aumenta la fiducia nel software.
Quando possiamo eseguire i test di regressione?
Ecco gli scenari in cui è possibile applicare il processo di test di regressione.
All'applicazione viene aggiunta una nuova funzionalità: Ciò accade quando vengono create nuove funzionalità o moduli in un'app o in un sito Web. La regressione viene eseguita per verificare se le funzionalità esistenti funzionano come al solito con l'introduzione della nuova funzionalità.
In caso di esigenza di modifica: Quando si verifica un cambiamento significativo nel sistema, viene utilizzato il test di regressione. Questo test viene eseguito per verificare se questi cambiamenti hanno influenzato le funzionalità che erano presenti.
Dopo che un difetto è stato risolto: Gli sviluppatori eseguono test di regressione dopo aver corretto un bug in qualsiasi funzionalità. Questo viene fatto per determinare se le modifiche apportate durante la correzione del bug hanno influenzato altre funzionalità esistenti correlate.
Una volta risolto il problema di prestazioni: Dopo aver risolto eventuali problemi di prestazioni, viene avviato il processo di test di regressione per verificare se ha influenzato altri test funzionali esistenti.
Durante l'integrazione con un nuovo sistema esterno: Il processo di test di regressione end-to-end è richiesto ogni volta che il prodotto si integra con un nuovo sistema esterno.
Come eseguire test di regressione nei test del software
Come discusso in precedenza, i test di regressione vengono attivati in base a qualsiasi modifica apportata al software. Può trattarsi di una correzione di bug, di integrazione di nuove funzionalità e così via. Ogni volta che avviene tale lavoro, il team di QA esegue le seguenti attività indicate di seguito. Queste attività vengono eseguite prima di avviare il ciclo di esecuzione del test di regressione.
- Discuti con il team di sviluppo sui moduli e sulle librerie specifici che sono stati toccati durante la modifica
- Discuti con il proprietario del prodotto della modifica alla nuova funzionalità e scopri come si estende o influisce su altre funzionalità.
- Identificare i test della suite di test esistente che i tester devono eseguire per regredire le funzionalità esistenti.
È possibile eseguire varie tecniche di test di regressione per un'efficace garanzia della qualità del software:
Ritestare tutto
Questo è uno dei metodi per i test di regressione, che utilizza in particolare una suite di test di regressione. In questo caso, tutti i test nel bucket o nella suite di test esistente devono essere rieseguiti. Questo è un metodo costoso in quanto richiede molto tempo e risorse.
Selezione del test di regressione
La selezione del test di regressione è una tecnica in cui vengono eseguiti alcuni casi di test selezionati da una suite di test. Aiuta a verificare se il codice modificato influisce o meno sull'applicazione software. Qui, i casi di test sono classificati in due parti. I casi di test riutilizzabili possono essere utilizzati in ulteriori cicli di regressione, mentre i casi di test obsoleti non possono essere utilizzati nei cicli successivi.
Priorità dei casi di test
La definizione delle priorità dei casi di test dipende dall'impatto aziendale, dalla criticità e dai test funzionali utilizzati di frequente. Inoltre, la definizione delle priorità dei casi di test in base alla priorità riduce notevolmente lo sforzo di esecuzione dei test di regressione.
Selezione dei casi di test per i test di regressione
Dai dati del settore è emerso che un buon numero dei difetti segnalati dai clienti erano dovuti a correzioni di bug dell'ultimo minuto. Ciò ha comportato effetti collaterali, quindi, selezionando il Test di Casi per i test di regressione non è un compito facile.
È possibile creare una suite di test di regressione efficace selezionando i seguenti tipi di casi di test:
- Casi di test da funzionalità/moduli che presentano difetti frequenti.
- Funzionalità più visibili agli utenti
- Casi di test che verificano le caratteristiche principali del prodotto
- Casi di test di funzionalità che hanno subito modifiche più recenti.
- Tutte le integrazioni si ripristinano
- Tutti casi di test complessi
- Casi di test del valore limite
- Percorso felice selezionato e casi di test negativi
Strumenti di test di regressione
Se il tuo software subisce modifiche frequenti, i costi dei test di regressione aumenteranno. Poiché l'esecuzione manuale dei casi di test aumenta i tempi e i costi di esecuzione dei test. L'automazione dei casi di test di regressione è la scelta intelligente in questi casi. Il grado di automazione dipende dal numero di casi di test che rimangono riutilizzabili per cicli di regressione successivi.
Di seguito sono riportati gli strumenti più importanti utilizzati per l'automazione dei test funzionali e di regressione nell'ingegneria del software:
1) testRigore
testRigore ti aiuta a esprimere direttamente i test come specifiche eseguibili in un inglese semplice. Gli utenti con tutte le competenze tecniche possono creare test end-to-end di qualsiasi complessità che coprano i passaggi mobile, Web e API. Le fasi del test sono espresse a livello di utente finale invece di fare affidamento su dettagli di implementazione come XPath o selettori CSS.
Caratteristiche:
- Versione pubblica gratuita per sempre
- I casi di test sono in inglese
- Utenti illimitati e test illimitati
- Il modo più semplice per imparare l'automazione
- Registratore per passaggi web
- Integrazioni con CI/CD e gestione dei test case
- Test di e-mail e SMS
- Passaggi Web + Mobile + API in un unico test
Selenium: Selenium è lo strumento open source più utilizzato per automatizzare le applicazioni web. Selenium può essere utilizzato per test di regressione basati su browser. Supporta linguaggi di programmazione come Java, Rubino, Python, ecc.
Test rapido professionale (QTP): HP Quick Test Professional è un software automatizzato progettato per automatizzare casi di test funzionali e di regressione. Utilizza il linguaggio VB Script per l'automazione. È uno strumento basato sui dati e basato su parole chiave.
Tester funzionale razionale (RFT): IBMIl tester funzionale razionale di è a Java strumento utilizzato per automatizzare i casi di test delle applicazioni software. Viene utilizzato principalmente per automatizzare i casi di test di regressione e si integra anche con Rational Test Manager.
Tipi di test di regressione
Ecco i diversi tipi di test di regressione:
1) Test di regressione unitaria (URT)
Si tratta di un approccio molto mirato in cui solo la sezione modificata viene sottoposta al test di regressione anziché la regione di impatto. In questo modo le altre porzioni del modulo rimangono inalterate.
Esempio
Come Ad esempio, nella build 1, è stato rilevato e segnalato un problema allo sviluppatore.
Diciamo che si trattava di un bug nella funzionalità di accesso. Quindi lo sviluppatore lo risolve, aggiunge la correzione del bug nella Build 2 e lo invia. Il team di test controlla solo se la funzionalità di accesso funziona come previsto invece di controllare altre funzionalità.
2) Test di regressione regionale (RRT)
Nei test di regressione regionale vengono testate le aree di modifica e di impatto. Quest'area viene esaminata per scoprire se eventuali moduli affidabili potrebbero essere interessati dalle modifiche.
Esempio: In questo esempio, nella prima build, i moduli A, B, C e D vengono inviati per essere testati dallo sviluppatore. Il tester trova bug nel modulo B, quindi l'applicazione viene restituita allo sviluppatore per correggere i bug.
Una volta che lo sviluppatore risolve i bug nella seconda build del modulo B, viene nuovamente inviata al tecnico del test. L'ingegnere del test apprende che la riparazione del modulo B ha interessato A e C.
Quindi, il tester controlla le modifiche del modulo B nella seconda versione. Quindi, testa anche le regioni di impatto in A e C per identificare come sono state colpite.
Nota: Durante il test di regressione, è possibile che si verifichi il problema riportato di seguito.
Problema:
- Nella build 1, i clienti di solito richiedono cambiamenti, modifiche e funzionalità aggiunte.
- Questa richiesta viene quindi inviata sia al team di sviluppo che a quello di test.
- Il team di sviluppo apporta quindi le modifiche. Successivamente, l'ingegnere del test invia un'e-mail al cliente, informandolo delle aree in cui avrà impatto la modifica.
- Il responsabile del test raccoglie quindi l'elenco delle aree interessate dal cliente, dagli sviluppatori e dal reparto di test.
- L'elenco degli impatti viene quindi inviato agli ingegneri di test, che avviano i test di regressione.
Questo tipo di metodo di test crea lacune nella comunicazione. Gli sviluppatori e i clienti non possono sempre tornare alle e-mail; quindi, non esiste una panoramica adeguata dell'area di impatto.
Soluzione: Per rimuovere questo tipo di problema, il team di test può organizzare un incontro una volta arrivata la nuova build dopo correzioni di bug, nuove funzionalità e modifiche. Questo incontro si terrà per discutere se i moduli sono interessati dalle modifiche.
Ci sarà un giro di test per trovare gli impatti in modo da poter creare un elenco di impatti. Il responsabile del test aggiunge il numero massimo di aree nella regione di impatto in questo elenco.
Ecco, di seguito è riportato come apparirà il processo:
- “Test di verifica della build” per verificare le principali funzionalità dell'applicazione.
- Test di tutte le nuove funzionalità.
- Esame delle caratteristiche cambiate o modificate.
- Nuova verifica dei bug.
- Quindi, infine, l'analisi dell'area di impatto utilizzando il test di regressione regionale.
3) Test di regressione completa (FRT):
Questo test copre tutte le funzionalità di un'applicazione. Il test di regressione completo viene solitamente eseguito nelle versioni successive. Pertanto, puoi utilizzare FRT dopo le prime versioni e come test finale prima del lancio.
Nella seconda o terza realizzazione il cliente o il titolare dell'attività potranno richiedere delle modifiche. Potrebbero anche richiedere nuove funzionalità e/o segnalare difetti. Il team di test conduce quindi l'analisi dell'impatto, apporta tutte le modifiche ed esegue un test finale completo del prodotto.
Ad esempio, la quarta build è la versione finale prima del lancio. Pertanto, in questa build, il team di test esegue un test completo o un nuovo test del prodotto invece che solo dell'area di impatto o di una funzionalità. Questo viene fatto dopo le modifiche e i test nelle build 4, 1 e 2.
Per eseguire test di regressione completi, è necessario considerare queste circostanze:
- Le modifiche vengono eseguite sui componenti principali dell'applicazione. Ad esempio, se è presente una modifica in un file root di un'app o nei moduli principali, è necessario regredire l'intera applicazione. Se sono state apportate numerose modifiche.
4) Test di regressione correttiva:
Questo test viene eseguito quando non vengono apportate modifiche alle funzionalità. Tali test possono essere eseguiti con casi esistenti.
5) Ritestare tutti i test di regressione:
In questa forma di test, tutte le modifiche minori o importanti apportate all'applicazione dall'origine o dalla build 1 vengono nuovamente testate.
Questo test viene eseguito quando tutti gli altri test di regressione non riescono a identificare la causa principale dei problemi.
6) Test di regressione selettivi:
Questo viene condotto per verificare come reagisce il codice quando un nuovo codice viene aggiunto al programma. Per condurre questo test, viene utilizzato un sottoinsieme di casi esistenti per renderlo efficiente ed economicamente vantaggioso. I criteri per la selezione di un sottoinsieme si basano sui moduli di codice modificati, sulle dipendenze, sulla criticità della funzionalità interessata e sui dati storici sui difetti.
7) Test di regressione progressiva:
Questo tipo di test di regressione produce risultati importanti quando vengono apportate modifiche specifiche al programma e vengono creati nuovi casi di test.
Aiuta a garantire che nessun componente delle versioni precedenti sia stato interessato nella versione più recente.
8) Test di regressione parziale:
Il test di regressione parziale viene utilizzato per verificare che nuove modifiche o miglioramenti al codice non influiscano negativamente sulle funzionalità esistenti. Tuttavia, a differenza di un test di regressione completo, che prevede il ritestare l'intera applicazione, nel test di regressione parziale ci concentriamo solo su parti specifiche del software interessate dalle modifiche recenti.
Pertanto, lo scopo principale del test di regressione parziale è risparmiare tempo e risorse evitando di ripetere il test delle parti invariate dell'applicazione. I casi di test per i test di regressione parziale vengono accuratamente selezionati in base all'analisi dell'impatto delle modifiche al codice. Identificare i casi di test corretti da includere nella suite di test di regressione parziale è cruciale. La mancanza di casi di test critici può portare a problemi trascurati.
Test di regressione automatizzato
Come accennato in precedenza, l'automazione dei test di regressione è necessaria quando sono presenti più rilasci. È inoltre richiesto per cicli di regressione multipli e numerose attività ripetitive. Poiché l'esecuzione di più cicli di test tra i rilasci richiede molto tempo.
Tuttavia, con l'automazione, puoi eseguire il test più volte. Ciò richiede la scrittura di script di test di automazione per l'esecuzione, che necessitano di pianificazione e progettazione pertinenti. In tali test, il team non può iniziare direttamente con l’automazione. Pertanto, dobbiamo coinvolgere sia i team di test manuali che quelli di test automatizzati per coprire questo ambito. Ecco come viene eseguito il test di regressione automatizzato:
Passo 1) Il team di test manuali controlla tutti i requisiti e identifica la regione di impatto. Dopo questo processo, inoltrano il pacchetto di test dei requisiti al team di automazione o all'ingegnere dell'automazione.
Passo 2) Il team di test manuale inizia a testare i nuovi moduli mentre il team di test di automazione scrive lo script e automatizza il test case.
Passo 3) Prima di utilizzare questo metodo di test di regressione, il team di automazione identifica quali casi supporteranno l'automazione.
Passo 4) Convertono questi test di regressione in script a seconda di quali casi possono essere automatizzati.
Passo 5) Durante il processo di scripting, il team di automazione fa riferimento ai casi di test di regressione. Lo fanno perché potrebbero non possedere il prodotto né la conoscenza dello strumento e dell'app.
Passo 6) Una volta completati gli script di test, il team di automazione li eseguirà sulla nuova app.
Passo 7) Dopo l'esecuzione, il risultato informa se il test è stato superato o fallito.
Passo 8) Se il test fallisce, viene ricontrollato utilizzando il metodo di test manuale e, se il problema esiste, viene segnalato al rispettivo sviluppatore.
Nota: Una volta risolto il bug, il problema e l'area di impatto vengono inviati al tester manuale per ripetere il test e il team di automazione riesegue lo script.
Passo 9) Questo processo continua finché tutte le funzionalità di regressione appena aggiunte non ottengono uno stato Superato.
Ecco i vantaggi dei test di regressione automatizzati:
- riutilizzabile: I suoi script di test sono riutilizzabili in più versioni.
- Precisione: Gli strumenti di automazione eseguono l'attività in modo ridondante, riducendo la possibilità di errore.
- Risparmia tempo: È più veloce del processo di test funzionale manuale ed è efficiente in termini di tempo.
- Esecuzione batch: È possibile eseguire tutti gli script simultaneamente e parallelamente nei test automatizzati.
- Nessun aumento delle risorse richiesto: Il test di regressione è destinato ad aumentare con ogni nuova versione. Tuttavia, non è necessario aggiungere nuove risorse per l'automazione.
Come scegliere i casi di test per i test di regressione?
Ecco come selezionare il caso giusto per il test di regressione.
- Comprendere la portata delle modifiche e determinare le parti dell'applicazione che sono state modificate, aggiunte o corrette. È quindi possibile concentrarsi su queste aree per i test di regressione.
- Avere una suite che copra le funzionalità critiche e le mantenga come base per i test di regressione. Come discusso in precedenza, è altamente consigliabile automatizzare questi test.
- Dai la priorità ai test in base alla criticità della funzionalità, all'impatto sull'utente finale e ai dati storici sui difetti.
Test di regressione migliori pratiche
Di seguito sono riportate alcune pratiche chiave da seguire durante la gestione dei test di regressione.
Automatizza dove possibile
I test di regressione automatizzati riducono lo sforzo di test e consentono l'esecuzione rapida di un gran numero di casi di test.
Integrazione continua
L'integrazione dei test di regressione nelle pipeline CI/CD garantisce che i test vengano eseguiti automaticamente ogni volta che vengono apportate modifiche alla base di codice.
Selezione del caso di test
Identificare e mantenere un sottoinsieme di casi di test che rappresentano le funzionalità principali e le aree ad alto rischio. È inoltre possibile scegliere quelli direttamente correlati alle modifiche apportate poiché l'esecuzione di tutti i casi di test precedenti potrebbe risultare poco pratica.
Esecuzione regolare
Esegui regolarmente i test di regressione, soprattutto dopo ogni modifica del codice. Ciò aiuta a identificare i problemi nelle prime fasi del processo di sviluppo.
Gestione dei dati di prova
Assicurarsi che i dati di test utilizzati per i test di regressione siano coerenti e gestibili poiché i problemi relativi ai dati possono influenzare i risultati dei test.
Gestione dell'ambiente
Mantenere ambienti di test coerenti e riproducibili. Ciò include l'utilizzo degli stessi sistemi operativi, browser e configurazioni dei dispositivi utilizzati nella produzione.
Registra e monitora i difetti
Eventuali difetti scoperti durante i test di regressione dovrebbero essere registrati, tracciati e gestiti. Dare priorità alla loro risoluzione in base alla gravità.
riutilizzabilità
Crea script di test riutilizzabili e dati di test per ridurre la duplicazione e migliorare la manutenibilità.
Test di regressione e gestione della configurazione
La gestione della configurazione durante i test di regressione diventa fondamentale negli ambienti agili in cui un codice viene continuamente modificato. Per garantire test di regressione efficaci, osservare quanto segue:
- Il codice sottoposto a test di regressione dovrebbe trovarsi in uno strumento di gestione della configurazione.
- Non deve essere consentita alcuna modifica al codice durante la fase di test di regressione. Il codice del test di regressione deve essere mantenuto immune dalle modifiche dello sviluppatore.
- Il database utilizzato per i test di regressione deve essere isolato. Non deve essere consentita alcuna modifica al database
Differenza tra test di ripetizione e test di regressione
Ritestare significa testare nuovamente il funzionamento del difetto o del bug per garantire che il codice sia corretto. Se non è risolto, il difetto necessita di essere riaperto. Se risolto, il difetto viene chiuso.
Test di regressione significa testare l'applicazione software quando subisce una modifica del codice. Viene fatto per garantire che il nuovo codice non abbia influenzato altre parti del software.
Di seguito sono riportate le principali differenze tra questi due test:
nuovo test | Test di regressione |
---|---|
È stato creato appositamente per la correzione dei difetti. | I test di regressione vengono eseguiti principalmente per verificare se le modifiche al codice hanno influito su altre funzionalità. |
Il nuovo test non controlla le altre versioni e verifica solo se le funzionalità interrotte vengono ripristinate. | Si concentra sulle versioni precedenti e verifica se le funzioni precedenti funzionano ancora come previsto. |
Ogni test è specifico | La regressione è un test generico. |
Questo test è per casi di test falliti. | È per i casi di test superati. |
Controlla i difetti specifici, quindi non può essere automatizzato. | Può essere automatizzato. Si consiglia vivamente anche di automatizzarlo, come abbiamo discusso in precedenza. |
La ripetizione del test non è sempre parte di un ciclo di test, poiché è richiesta solo quando vengono rilevati bug. | La regressione fa sempre parte del test, poiché ogni volta che un codice viene modificato, questo test deve essere condotto per capire se la funzionalità del prodotto è stabile. |
Si tratta di un test ad alta priorità poiché si concentra su problemi noti. | Si tratta di un test a bassa priorità, poiché si tratta di un test complessivo di possibili difetti. |
Questo test non richiede molto tempo poiché funziona su un difetto specifico. | Poiché coinvolge una vasta area del software, richiede molto tempo. |
Determina i difetti con gli stessi dati e ambiente con un input diverso e una nuova versione. | Questo test può acquisire casi da manuali utente, rapporti sui difetti e specifiche funzionali. |
Non è possibile ripetere il test senza il primo test. | Viene fatto quando cambiamenti e modifiche sono obbligatori nel progetto esistente. |
Inoltre, controlla l'elenco completo delle differenze rispetto a qui.
Vantaggi e svantaggi dei test di regressione
Vantaggi
- I test di regressione migliorano la qualità dei prodotti.
- Con questo test, ti assicuri che le modifiche e le correzioni dei bug non abbiano cambiato le funzionalità e le caratteristiche esistenti.
- Poiché i letti di regressione vengono eseguiti su funzionalità esistenti, possiamo garantire che anche i difetti più vecchi siano coperti.
- Facilita lo sviluppo efficiente del prodotto.
- È possibile ottenere un'elevata soddisfazione degli utenti con questo test in atto.
- Nel complesso, mantiene la stabilità del software.
Svantaggi
- Dovrebbe essere condotto ogni volta che viene apportata una piccola modifica, poiché la minima modifica può causare problemi nei moduli esistenti.
- Questo test può richiedere molto tempo se condotto manualmente e richiede test ripetuti.
Sfide nei test di regressione
Di seguito sono riportati i principali problemi di test per eseguire test di regressione:
- Con le successive esecuzioni di regressione, le suite di test diventano piuttosto grandi. A causa di vincoli di tempo e budget, l'intera suite di test di regressione non può essere eseguita
- Ridurre al minimo la suite di test ottenendo il massimo rimane una sfida
- Determinare la frequenza dei test di regressione, cioè dopo ogni modifica o ogni aggiornamento di build o dopo una serie di correzioni di bug, è una sfida.
Applicazione pratica dell'esempio di test di regressione con un video
Clicchi qui se il video non è accessibile
Esempio di test di regressione – Amazon
Consideriamo il gigante dell’e-commerce Amazon, che è un'azienda multimiliardaria che fa affidamento sul suo sito web per generare entrate. Per sostenere la sua funzionalità, affidabilità e performance, i test di regressione svolgono un ruolo cruciale.
Prendiamo uno scenario di aggiunta di una nuova categoria di prodotto.
Imagine That Amazon decide di espandere la propria offerta di prodotti introducendo una nuova categoria denominata "Dispositivi per la casa intelligente" accanto a categorie esistenti come "Elettronica" e "Abbigliamento".
Possibili casi di regressione sarebbero:
Funzionalità della home page: verifica che la home page visualizzi la nuova categoria "Dispositivi Smart Home" insieme a quelle esistenti senza problemi di visualizzazione.
Navigazione nelle categorie: assicurati che gli utenti possano navigare senza problemi alla pagina della categoria "Dispositivi Smart Home" e tornare alla home page senza problemi.
Funzionalità di ricerca: assicurati che la barra di ricerca restituisca risultati accurati per i dispositivi domestici intelligenti quando gli utenti li cercano e non li mescolano con altri prodotti.
Account utente: verifica che gli account utente possano essere creati, aggiornati e utilizzati per acquistare dispositivi domestici intelligenti e altri prodotti.
Elaborazione dei pagamenti: testa i gateway di pagamento specifici per gli acquisti e garantisce transazioni sicure e prive di errori.
Reattività mobile: verifica che il sito web rimanga reattivo ai dispositivi mobili, consentendo agli utenti di accedere e acquistare dispositivi domestici intelligenti su vari dispositivi.
Se uno qualsiasi di questi casi di test di regressione fallisce, indica un problema con la funzionalità esistente del sito Web a causa dell'aggiunta della nuova categoria di prodotto. Questo problema dovrebbe essere documentato e risolto immediatamente. Inoltre, come Amazon continua ad espandere la propria offerta e ad apportare modifiche al proprio sito Web, è necessario eseguire questi test di regressione per mantenere un'esperienza di acquisto online affidabile. Gli strumenti di test automatizzati possono semplificare questo processo.
Conclusione
- Significato del test di regressione – Il test di regressione è un tipo di test del software che garantisce che un'applicazione funzioni ancora come previsto dopo miglioramenti, eventuali modifiche al codice o correzioni di bug.
- Una strategia di regressione efficace può far risparmiare tempo e denaro all'organizzazione.
- Secondo i casi di studio, la regressione ha consentito di risparmiare fino al 60% delle correzioni di bug successive.