Ciao a tutti, mi chiamo Alessandro e sono un ingegnere della qualità dei dati che si occupa di verificare i dati per la loro qualità. In questo articolo parlerò di come sono arrivato a questo punto e perché nel 2020 questa area di testing è diventata così importante.

Tendenza globale
Il mondo di oggi sta vivendo una nuova rivoluzione tecnologica, uno degli aspetti della quale è l'utilizzo da parte delle varie aziende dei dati accumulati per alimentare il loro ciclo di vendite, profitti e pubblicità. Si ritiene che avere buoni dati (di qualità) e menti capaci di trasformarli in denaro (elaborandoli correttamente, visualizzandoli, costruendo modelli di machine learning ecc.) sia oggi la chiave del successo per molti. Se 15-20 anni fa il lavoro con i dati e la loro monetizzazione era appannaggio principalmente delle grandi aziende, oggi è una questione di quasi tutte le aziende razionali.
In questo contesto, alcuni anni fa tutti i portali dedicati alla ricerca di lavoro in tutto il mondo sono stati invasi da offerte di lavoro per Data Scientist, poiché tutti erano convinti che assumendo uno specialista di questo tipo si potesse costruire un super modello di machine learning, prevedere il futuro e compiere un "salto quantico" per l'azienda. Col tempo, le persone hanno capito che questo approccio non funziona quasi mai, poiché non tutti i dati che arrivano in mano a tali specialisti sono adatti per addestrare modelli.
E sono iniziati i richieste dai Data Scientists: «Acquistiamo ancora dati da questi e da quelli...», «Ci mancano dati...», «Necessitiamo di ulteriori dati, preferibilmente di alta qualità...». Sulla base di queste richieste, sono state avviate numerose interazioni tra le aziende che possiedono un certo insieme di dati. Naturalmente, questo ha richiesto un'organizzazione tecnica di questo processo: collegarsi alla fonte di dati, estrarli, verificare che siano stati caricati in modo completo, e così via. Il numero di tali processi ha iniziato a crescere e oggi abbiamo una enorme necessità di un altro tipo di specialisti: gli ingegneri della Data Quality, cioè coloro che monitorano il flusso di dati nel sistema (data pipelines), la qualità dei dati in entrata e in uscita, e traggono conclusioni sulla loro sufficienza, integrità e altre caratteristiche.
La tendenza verso gli ingegneri della Data Quality ci è giunta dagli Stati Uniti, dove nel pieno dell'era capitalista, nessuno è pronto a perdere la battaglia per i dati. Di seguito ho presentato degli screenshot di due dei siti di ricerca lavoro più popolari negli Stati Uniti: e — sui quali sono visualizzati i dati aggiornati al 17 marzo 2020 riguardo al numero di offerte di lavoro pubblicate, a partire dalle parole chiave: Data Quality e Data Scientist.
Data Scientists – 21416 offerte di lavoro
Data Quality – 41104 offerte di lavoro


Data Scientists – 404 offerte di lavoro
Data Quality – 2020 offerte di lavoro


È evidente che queste professioni non competono in alcun modo l'una con l'altra. Gli screenshot sono stati utilizzati solo per illustrare la situazione attuale del mercato del lavoro per quanto riguarda la domanda di ingegneri della Data Quality, di cui c'è attualmente una richiesta molto maggiore rispetto ai Data Scientists.
Nel giugno 2019, EPAM, rispondendo alle esigenze del moderno mercato IT, ha separato la pratica della Data Quality in un'area specifica. Gli ingegneri della Data Quality, nel corso della loro attività quotidiana, gestiscono i dati, ne verificano il comportamento in nuove condizioni e sistemi, controllano la rilevanza dei dati, la loro sufficienza e attualità. Nonostante ciò, in senso pratico, gli ingegneri della Data Quality dedicano effettivamente poco tempo ai test funzionali classici, MA questo dipende molto dal progetto (un esempio lo presenterò in seguito).
Le responsabilità di un ingegnere Data Quality non si limitano solo a controlli manuali o automatici di routine su «nulls, count e sums» nelle tabelle del database, ma richiedono una profonda comprensione delle esigenze aziendali del cliente e, di conseguenza, la capacità di trasformare i dati disponibili in informazioni utili per il business.
Teoria della Data Quality

Per avere un'idea più completa del ruolo di un ingegnere di questo tipo, vediamo cos'è la Data Quality in teoria.
Data Quality è una delle fasi della Data Management (un intero mondo che vi lasceremo esplorare autonomamente) e si occupa dell'analisi dei dati secondo i seguenti criteri:

Non credo sia necessario decifrare ciascun punto (in teoria chiamati «data dimensions»), sono ben descritti nell'immagine. Tuttavia, il processo di test non implica una copia rigorosa di queste caratteristiche nei test-case e la loro verifica. Nella Data Quality, come in qualsiasi altro tipo di test, è fondamentale partire dai requisiti di qualità dei dati concordati con i partecipanti al progetto che prendono decisioni aziendali.
A seconda del progetto, un ingegnere Data Quality può svolgere diverse funzioni: da semplice tester automatizzato con una valutazione superficiale della qualità dei dati, fino a una persona che conduce un profilo approfondito secondo le caratteristiche sopra indicate.
Una descrizione molto dettagliata dei processi di Data Management, Data Quality e correlati è ben descritta nel libro intitolato «DAMA-DMBOK: Data Management Body of Knowledge: 2nd Edition». Raccomando vivamente questo libro come introduzione a questo tema (trovate il link alla fine dell'articolo).
La mia storia
Nell'industria IT sono passato da Junior tester in aziende di prodotto a Lead Data Quality Engineer nella società EPAM. Già dopo circa due anni di lavoro come tester, ero fermamente convinto di aver svolto tutti i tipi di test: regressione, funzionale, stress, stabilità, sicurezza, UI, ecc. — e ho provato un gran numero di strumenti di testing, lavorando nel frattempo in tre linguaggi di programmazione: Java, Scala, Python.
Guardando indietro, capisco perché il mio insieme di competenze professionali sia così vario: ho partecipato a progetti legati alla gestione dei dati, grandi e piccoli. È proprio questo che mi ha portato nel mondo di un gran numero di strumenti e opportunità di crescita.
Per apprezzare la varietà degli strumenti e delle opportunità di acquisire nuove conoscenze e abilità, basta dare un'occhiata all'immagine qui sotto, che mostra i più popolari nel mondo di «Data & AI».

Questo tipo di illustrazioni è realizzato ogni anno da uno dei noti investitori di venture capital, Matt Turck, proveniente dallo sviluppo software. Ecco al suo blog e , dove lavora come partner.
Ho avuto una crescita professionale particolarmente rapida quando ero l'unico tester in un progetto, o almeno all'inizio del progetto. In quel momento si è responsabile dell'intero processo di test e non si ha modo di fare marcia indietro, solo di andare avanti. Inizialmente questo era spaventoso, ma ora mi sono chiare tutte le posizioni positive di tale prova:
- Inizi a comunicare con tutto il team come mai prima d'ora, poiché non c'è alcun intermediario per le comunicazioni: né test manager, né colleghi tester.
- L'immersione nel progetto diventa incredibilmente profonda e hai una padronanza delle informazioni su tutti i componenti, sia in generale che nei dettagli.
- Gli sviluppatori non ti vedono come «quello del testing che non sa che cosa fare», ma piuttosto come un pari che produce un'incredibile utilità per il team con i suoi test automatici e la sua capacità di prevedere l'emergere di bug in un nodo specifico del prodotto.
- Come risultato, sei più efficace, più qualificato, più richiesto.
Con l'espansione del progetto, nel 100% dei casi sono diventato mentore per i nuovi tester che vi si univano, formando e trasmettendo loro le conoscenze che avevo acquisito. Tuttavia, a seconda del progetto, non sempre ricevevo dallo management specialisti di automazione dei test di altissimo livello e c'era necessità di formare anche loro all'automazione (per chi era interessato), oppure di creare strumenti per aiutarli nelle loro attività quotidiane (strumenti per la generazione di dati e il loro caricamento nel sistema, strumenti per effettuare test di carico/stabilità "rapidamente", ecc.).
Esempio di un progetto specifico
Sfortunatamente, a causa degli obblighi di riservatezza, non posso parlare in dettaglio dei progetti su cui ho lavorato, ma fornirò esempi di compiti tipici di un Data Quality Engineer in uno di essi.
L'obiettivo del progetto era implementare una piattaforma per la preparazione dei dati da cui generare modelli di machine learning. Il committente era una grande azienda farmaceutica degli Stati Uniti. Tecnicamente, si trattava di un cluster , in esecuzione su istanze, con diversi microservizi e basato su un progetto Open Source della compagnia EPAM — , adattato alle esigenze del specifico committente (ora il progetto è evoluto in ). I processi ETL sono stati organizzati utilizzando e spostavano i dati dal Buckets AWS S3. Successivamente, un'immagine Docker del modello di machine learning veniva distribuita sulla piattaforma, la quale si addestrava con dati freschi e forniva previsioni tramite l'interfaccia REST API, rispondendo alle esigenze del business e risolvendo problemi specifici. Buckets. Visivamente, tutto appariva approssimativamente in questo modo:
Il testing funzionale in questo progetto era abbondante, e considerando la velocità di sviluppo delle funzionalità e la necessità di mantenere il ritmo del ciclo di rilascio (sprint di due settimane), era indispensabile iniziare a pensare all'automazione del testing dei punti più critici del sistema. La maggior parte della piattaforma stessa, basata su Kubernetes, era coperta da test automatici, implementati su

Robot Framework + Python, ma era necessario anche supportarli ed espanderli. Inoltre, per comodità del cliente, è stato creato un GUI per gestire i modelli di machine learning implementati nel cluster, oltre alla possibilità di specificare da dove e verso dove è necessario trasferire i dati per addestrare i modelli. Questo ampio supplemento ha portato all'espansione delle verifiche funzionali automatizzate, per la maggior parte effettuate tramite chiamate REST API e un numero ridotto di test UI end-to-end. Circa a metà di tutto questo, si è unito a noi un tester manuale che ha gestito bene i test di accettazione delle versioni del prodotto e la comunicazione con il cliente riguardo all'accettazione del prossimo rilascio. Inoltre, grazie all'arrivo di un nuovo specialista, siamo stati in grado di documentare il nostro lavoro e aggiungere alcune verifiche manuali molto importanti, che era difficile automatizzare subito.
E infine, dopo aver raggiunto la stabilità della piattaforma e del GUI sopra di essa, abbiamo iniziato a costruire pipeline ETL utilizzando DAG di Apache Airflow. La verifica automatizzata della qualità dei dati è stata effettuata scrivendo speciali DAG di Airflow che controllavano i dati in base ai risultati del processo ETL. In questo progetto siamo stati fortunati e il cliente ci ha fornito accesso a set di dati anonimizzati su cui abbiamo effettuato i nostri test. Abbiamo controllato i dati riga per riga per verificare la conformità ai tipi, la presenza di dati danneggiati, il numero totale di record prima e dopo, e il confronto delle trasformazioni effettuate dal processo ETL per aggregazione, modifica dei nomi delle colonne e altro ancora. Inoltre, queste verifiche sono state scalate su diverse fonti di dati, per esempio oltre a SalesForce anche su MySQL.
Le verifiche della qualità finale dei dati sono state effettuate già a livello di S3, dove venivano memorizzati e si trovavano in uno stato pronto all'uso per l'addestramento dei modelli di machine learning. Per ottenere i dati dal file CSV finale, situato nel bucket S3 e per la loro validazione, è stato scritto un codice utilizzando .
C'era anche una richiesta da parte del cliente per memorizzare parte dei dati in un bucket S3 e parte in un altro. Per questo è stato necessario scrivere ulteriori verifiche che controllassero l'affidabilità di tale ordinamento.
Esperienza generale su altri progetti
Esempio dell'elenco più generico delle attività dell'ingegnere Data Quality:
- Preparare dati di test (validi non validi grandi piccoli) tramite uno strumento automatizzato.
- Caricare il set di dati preparato nella fonte originale e verificare la sua prontezza per l'uso.
- Avviare i processi ETL per l'elaborazione del set di dati dalla sorgente originale a quella finale o intermedia utilizzando un certo insieme di configurazioni (nel caso sia possibile impostare parametri configurabili per il compito ETL).
- Verificare i dati trattati tramite il processo ETL per la loro qualità e conformità ai requisiti aziendali.
In questo caso, l'accento principale delle verifiche dovrebbe non solo riguardare il fatto che il flusso di dati nel sistema sia andato a buon fine e sia giunto al termine (che fa parte del test funzionale), ma principalmente sulla verifica e convalida dei dati per la conformità ai requisiti attesi, l'identificazione di anomalie e altro.
Strumenti
Una delle tecniche per questo controllo dei dati potrebbe essere l'organizzazione di controlli a catena in ciascuna fase di elaborazione dei dati, noto in letteratura come «data chain» — il controllo dei dati dalla sorgente al punto di utilizzo finale. Questo tipo di controlli è spesso realizzato scrivendo query SQL di verifica. È chiaro che tali query devono essere il più leggere possibile e verificare singoli pezzi di qualità dei dati (metadata delle tabelle, righe vuote, NULL, Errori di sintassi — altri attributi di verifica richiesti).
Nel caso di test di regressione, in cui vengono utilizzati set di dati già pronti (immutabili leggermente modificabili), nel codice dei test automatici possono essere archiviati già pronti modelli di verifica dei dati per la conformità alla qualità (descrizioni dei metadata attesi delle tabelle; oggetti campionari che possono essere selezionati casualmente durante il test, e altro ancora).
Inoltre, durante il test, è necessario scrivere processi ETL di prova, utilizzando framework come Apache Airflow, o addirittura strumenti cloud black-box tipo , e altro ancora. Questa circostanza costringe il test engineer ad approfondire i principi di funzionamento degli strumenti sopra menzionati, rendendo così più efficace sia l'esecuzione dei test funzionali (ad esempio, degli ETL process esistenti nel progetto), sia l'utilizzo di questi strumenti per la verifica dei dati. In particolare, per Apache Airflow sono già disponibili operatori pronti per lavorare con le popolari basi di dati analitiche, ad esempio . Il più semplice esempio di utilizzo è già descritto , quindi non mi ripeterò.
Oltre alle soluzioni pronte, nessuno vi vieta di implementare le vostre tecniche e strumenti. Questo non solo porterà vantaggi al progetto, ma anche al Data Quality Engineer stesso, che in questo modo amplificherà i suoi orizzonti tecnici e le sue abilità di codifica.
Come funziona in un progetto reale
Una buona illustrazione degli ultimi paragrafi su "data chain", ETL e verifiche onnipresenti è il seguente processo preso da uno dei progetti reali:

Qui, nella "funnel" in ingresso del nostro sistema, entrano dati diversi (ovviamente preparati da noi): validi, non validi, misti, ecc.; poi vengono filtrati e arrivano in uno storage intermedio, quindi li aspetta una serie di trasformazioni prima di essere posizionati nello storage finale, da cui, a sua volta, sarà effettuata l'analisi, la costruzione di data mart e la ricerca di business insights. In un sistema del genere, senza testare funzionalmente l'operato degli ETL process, ci concentriamo sulla qualità dei dati prima e dopo le trasformazioni, così come sull'output per l'analisi.
Riassumendo quanto detto sopra, indipendentemente dai luoghi in cui ho lavorato, sono sempre stato coinvolto in progetti Data che condividevano le seguenti caratteristiche:
- Solo attraverso l'automazione si possono testare alcuni casi e raggiungere un ciclo di rilascio accettabile per il business.
- Il tester in un progetto di questo tipo è uno dei membri più rispettati del team, poiché porta enormi vantaggi a ciascun partecipante (accelerazione dei test, dati di qualità per i Data Scientist, rilevazione di difetti nelle fasi iniziali).
- Non importa se lavori sulla tua macchina o nel cloud: tutte le risorse sono astratte in un cluster di tipo Hortonworks, Cloudera, Mesos, Kubernetes, ecc.
- I progetti sono costruiti su un approccio a microservizi, predominano i calcoli distribuiti e paralleli.
Voglio sottolineare che, occupandomi di test nel campo della Qualità dei Dati, uno specialista dei test sposta il suo focus professionale sul codice del prodotto e sugli strumenti utilizzati.
Caratteristiche distintive del testing della Qualità dei Dati
Inoltre, per me ho identificato le seguenti (vorrei precisare che sono MOLTO generalizzate e puramente soggettive) caratteristiche distintive del testing in progetti (sistemi) Data (Big Data) e in altri ambiti:

Link utili
- Teoria: .
- EPAM
- Materiali consigliati per un ingegnere di Qualità dei Dati alle prime armi:
- Corso gratuito su Stepik: .
- Corso su LinkedIn Learning: .
- Articoli:
- ;
- ;
- ;
- Video:
- ;
- ;
Conclusione
Data Quality — è un campo molto giovane e promettente, farne parte significa essere parte di una sorta di startup. Entrando nella Qualità dei Dati, ti immergerai in una grande quantità di tecnologie moderne richieste, ma soprattutto — si apriranno immense opportunità per generare e realizzare le tue idee. Potrai applicare un approccio di miglioramento continuo non solo nel progetto, ma anche per te stesso, sviluppandoti continuamente come professionista.
Fonte: habr.com
