Detto in modo ovvio: non tutti possiamo lavorare nel settore ricerca e sviluppo. Ma possiamo ancora imparare un po' del gergo. Ecco una frase: framework di test unitario JSL. Che cos'è? Come è successo? E perché è importante?
Demistifiamo il framework di unit test JSL.
Grazie a Nicole Jones ( @Nicole_Jones ), Sr. Manager of Advanced Analytics Testing, per questa spiegazione:
“Il termine unità si riferisce al più piccolo componente testabile di un prodotto software e la frase test unità è il processo di convalida per garantire che le unità funzionino come previsto. L’espressione framework unit test è arrivata a riferirsi al meccanismo utilizzato per facilitare i test unitari automatizzati.
Il principale ricercatore statistico Joseph Morgan ( @joseph_morgan ) ha introdotto questi termini in JMP quando ha iniziato a lavorare come tester statistico nel 2005. (Ora lavora nel gruppo DOE). Il background di Joseph riguarda l'ingegneria del software e l'informatica, nonché la matematica discreta. e statistiche.
"Ha concepito l'intero concetto, una struttura di test centrale", afferma Audrey Shull, Sr. Manager of Test Engineering ( @Audrey_Shull ). "Ha tante grandi idee, e questa era una di quelle."
"Una volta acquisita familiarità con JMP e JSL, è stato in grado di sviluppare il framework di unit test JSL, tenendo presente la natura statistica del software", afferma Nicole.
Joseph Morgan spiega (4:38)
"Bere il nostro champagne"
Un framework di unit test può essere scritto in altri linguaggi, ma quale strumento migliore del nostro JSL?
Con il framework di unit test JSL "stiamo utilizzando JMP per testare JMP", spiega Audrey. In altre parole, stiamo “bevendo il nostro champagne”. E questo non è possibile con tutti gli strumenti.
"Possiamo utilizzare il nostro software per testare il nostro software perché disponiamo di questo versatile linguaggio JSL", continua Audrey. "Allarghiamo i limiti di ciò che JSL può fare per supportare il framework. È una cosa piuttosto speciale. E il framework stesso funge da enorme test di regressione per la compatibilità con le versioni precedenti JSL.
"Se lo staff di sviluppo cambia il modo in cui funziona lo scripting, il gruppo di test lo trova per primo perché siamo il primo cliente del linguaggio JSL.
“Tutte le aziende cercano di utilizzare l’automazione, ma spesso utilizzano altri strumenti di terze parti per farlo. Non sempre potranno permettersi il lusso di utilizzare il proprio software."
Un quadro estensibile
A screenshot of the original dialog. Uno screenshot della finestra di dialogo originale. Il framework di unit test JSL viene utilizzato su tutte le piattaforme JMP. Ad esempio, può essere utilizzato per testare la funzionalità di trascinamento della selezione nel Costruttore di grafici. O i menu del triangolo rosso. O qualsiasi unità di codice nella piattaforma di distribuzione.
"Non solo possiamo usarlo per testare JSL stesso, ma possiamo usare il framework per testare tutte le altre piattaforme", afferma Audrey.
Nicole approfondisce:
“Quando Joseph stava sviluppando il framework, il suo obiettivo principale era trovare un modo per creare una suite di test di regressione per le piattaforme statistiche in JMP. Eppure è stato in grado di creare una struttura estensibile: la suite di test di regressione include piattaforme statistiche e piattaforme grafiche, funziona su Macintosh e Windows, testa i comandi delle tabelle di dati e le strutture dei report.
Lavorare con "una rete di sicurezza"
Il framework può essere eseguito manualmente: tester e sviluppatori possono avviarlo, puntare, fare clic ed eseguirlo. Ma l’automazione è fondamentale per il miglioramento continuo.
Il framework è automatizzato tramite Perforce (un repository di lavoro), dove risiede il lavoro degli sviluppatori, dove viene implementato il codice. I tester JMP scrivono casi di test e li caricano in una sezione dedicata in Perforce.
Screenshot of the testing dialog as it looks today.Screenshot della finestra di dialogo del test come appare oggi.
Un processo automatizzato notturno, gestito dallo sviluppatore principale dei sistemi Jim Borek, acquisisce tutti i test caricati quel giorno, acquisisce tutto il codice inviato quel giorno, esegue i casi di test sul codice aggiornato e avvisa il team quando qualcosa fallisce. Jim è fondamentale per automatizzare questo processo e mantenere le macchine.
Audrey ha descritto l’enormità dei test che vengono effettuati: ogni notte vengono eseguiti 2,4 milioni di test. E questo sta accadendo su ogni sistema operativo (ad esempio Windows, Catalina, BigSur) sia per JMP 17 che per JMP 16.2. Il processo per eseguire i test su una singola macchina richiede 6-10 ore, a seconda della velocità delle macchine.
"Questa è la suite di test di regressione: senza questa struttura dovremmo testare queste cose ogni singolo giorno per vedere se si rompono o meno", afferma Audrey. “Non può essere manuale. La suite di test è automatizzata in modo che il sistema ci avvisi quando si è verificato un errore.
"A volte ci piace chiamarla rete di sicurezza. So che ha funzionato l'ultima volta che l'ho testata, ho scritto un caso di test e se si rompe il sistema me lo fa sapere. Posso andare avanti con altre cose. Stiamo cercando di testare le novità in arrivo e quelle aggiunte al software."
Il flusso di lavoro del framework di test JSL


Trovare un bug di Apple
Joseph condivide un primo aneddoto che ha consolidato il valore del framework di unit test.
“Poco dopo che l’implementazione iniziale del framework di unit test JSL era diventata operativa, il suo valore è diventato drammaticamente evidente in un modo piuttosto insolito. È interessante notare che non è stata rilevata una regressione di JMP ma, invece, è stata fondamentale per isolare un bug piuttosto serio in MacOS.
“All'inizio del 2006, Apple ha iniziato la transizione della linea Macintosh dalle CPU PowerPC alle CPU Intel e, per facilitare questa transizione, ha fornito in bundle un emulatore con MacOS noto come Rosetta. Questo emulatore consentiva l'esecuzione delle applicazioni PowerPC su Mac Intel e quindi era considerato un componente software chiave da Apple.
“A quanto pare, c'era un bug nell'emulatore Rosetta che portava a diverse anomalie insolite nel comportamento di JMP. Con il framework di unit test, sono riuscito a isolare il problema in un bug nell'implementazione della funzione radice quadrata in Rosetta ( vedi Difetto S0351925 ).
“Michael Hecht e io abbiamo avuto diverse teleconferenze con gli ingegneri Apple per spiegare il problema, ma gli ingegneri erano fermamente convinti che si trattasse di un bug di JMP. È stato solo quando Michael mi ha suggerito di scrivere un'app C++ molto semplice che imitasse essenzialmente uno degli unit test che mostravano il bug che Apple si è convinta che il problema fosse un bug di Rosetta. Un anno dopo, nel marzo 2007, Apple ha rilasciato una correzione per il bug Rosetta in Mac OS X 10.4.8.
Chi ne trae vantaggio?
"[Il framework] è stato sviluppato pensando ai tester, ma si è rivelato utile anche per gli sviluppatori", afferma Nicole. "Apprezzo la capacità di Joseph di creare una struttura in grado di soddisfare le esigenze di tanti di noi."
I tester situati a Cary e Pechino si dividono le funzioni e monitorano alcune aree di JMP. Ma non importa quale parte di JMP siano responsabili del test, tutti stanno essenzialmente testando anche il linguaggio di scripting.
Audrey afferma: “Più utilizziamo JMP e JSL, più pensiamo a qualcosa di 'bello da avere'. Anche se non siamo noi a implementare le cose, a volte siamo noi a chiedere “puoi aggiungere questo o quello?”
E il miglioramento costante, ovviamente, va a vantaggio dei clienti.
“I nostri utenti esperti di JSL potrebbero voler fare alcune delle cose che stiamo facendo noi. Ci spinge a pensare a come possiamo scrivere in modo più robusto”.
Molti degli extra che sono stati aggiunti sono stati forniti in crowdsourcing dal team di sviluppo, test e ingegneri del rilascio.
Complimenti ai principali attori che hanno aggiunto funzionalità nel corso degli anni:
Joseph Morgan @joseph_morgan
Melanie Drake @Melanie_J_Drake
Jim Borek
Xan Gregg @XanGregg
Michael Hecht @hecht_jmp
Justin Chilton @Justin_Chilton
Evan McCorkle @EvanMcCorkle
Nick Holmes @nickholmes13
Questo è solo uno dei tanti esempi dell'ingegno, della collaborazione e dell'impegno della divisione JMP verso il miglioramento continuo. Speriamo di evidenziare più storie come questa. Contatta Jessica Marquardt con le tue idee.
Vuoi maggiori informazioni?
Pannello di test di JMP
Questo articolo della newsletter di ricerca e sviluppo cinese del Test Engineering Manager Nala Sun ( @Nala ) ha fornito ispirazione per questo post: Framework di automazione degli unit test JSL
Ecco come i risultati dei test unitari JSL vengono generati, elaborati e utilizzati per le esecuzioni notturne dei test unitari: JSL Framework Data Pipeline
Un articolo di Joseph Morgan: Unità JSL: test JSL automatizzato
Orso, Alessandro e Gregg Rothermel. "Test del software: un diario di viaggio di ricerca (2000-2014)." Futuro dei procedimenti di ingegneria del software. 2014. 117-132.
Pagina professionale di Alex Orso: https://www.cc.gatech.edu/home/orso/
E grazie a @shannon_conners per aver fornito informazioni e indicazioni.