Affermare l'ovvio: non tutti noi possiamo lavorare in ricerca e sviluppo. Ma possiamo ancora imparare un po' del gergo. Ecco una frase: framework di test delle unità JSL. Che cos'è? Come è nato? E perché è importante?
Demistifichiamo il framework di unit test JSL.
Grazie a Nicole Jones ( @Nicole_Jones ), Senior Manager di Advanced Analytics Testing, per questa spiegazione:
"Il termine unità si riferisce al più piccolo componente verificabile di un prodotto software e alla frase test dell'unità è il processo di convalida per garantire che le unità funzionino come previsto. La frase quadro di test unitari è arrivato a fare riferimento al meccanismo utilizzato per facilitare i test di unità automatizzati”.
Responsabile statistico della ricerca 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 è in ingegneria del software e informatica, così come matematica e statistica discreti.
"Ha concepito l'intero concetto, un framework di test centrale", afferma Sr. Manager di Test Engineering Audrey Shull ( @Audrey_Shull ). "Ha molte 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 usando 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é abbiamo questo versatile linguaggio JSL", continua Audrey. “Estendiamo 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 di JSL.
"Se lo staff di sviluppo cambia il modo in cui funziona lo script, 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 avranno sempre il lusso di utilizzare il proprio software".
Un quadro estensibile
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 in Graph Builder. 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 elabora:
“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 un framework estendibile: la suite di test di regressione include piattaforme stat 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: i tester e gli sviluppatori possono avviare, puntare e fare clic ed eseguire. Ma l'automazione è la chiave 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 della finestra di dialogo di 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 non va. Jim è fondamentale per automatizzare questo processo e mantenere le macchine.
Audrey ha descritto l'enormità dei test che si svolgono: ogni notte vengono eseguiti 2,4 milioni di test. E questo accade su ogni sistema operativo (ad es. 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 questo framework 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 che si è verificato un errore.
"A volte ci piace chiamarla una rete di sicurezza. So che ha funzionato l'ultima volta che l'ho testato, ho scritto un test case e se si rompe il sistema me lo fa sapere. Posso andare avanti per altre cose. Stiamo cercando di testare le novità, le novità in arrivo e le aggiunte al software".
Il flusso di lavoro del framework di test JSL


Trovare un bug di Apple
Joseph condivide un primo aneddoto che ha cementato il valore del framework di test unitari.
“Poco dopo che l'implementazione iniziale del framework di unit test JSL è stata avviata e funzionante, il suo valore è diventato drammaticamente evidente in un modo piuttosto insolito. È interessante notare che non è stata rilevata una regressione di JMP, ma è stata invece la chiave per isolare un bug piuttosto serio in MacOS.
“All'inizio del 2006, Apple ha iniziato a trasferire la linea Macintosh da CPU PowerPC a CPU Intel e, per aiutare questa transizione, ha fornito un emulatore con MacOS noto come Rosetta. Questo emulatore consentiva l'esecuzione delle applicazioni PowerPC su Mac Intel ed è stato quindi considerato un software chiave da Apple.
“A quanto pare, c'era un bug nell'emulatore Rosetta che ha portato a diverse anomalie insolite nel comportamento di JMP. Con il framework di unit test, sono stato in grado di isolare il problema da un bug nell'implementazione della funzione radice quadrata in Rosetta ( vedere Difetto S0351925 ).
"Michael Hecht e io abbiamo avuto diverse chiamate in conferenza 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 era convinta che il problema fosse un bug di Rosetta. Un anno dopo, nel marzo 2007, Apple ha rilasciato una correzione per il bug di Rosetta in Mac OS X 10.4.8."
Chi ne beneficia?
"[Il framework] è stato sviluppato pensando ai tester, ma si è dimostrato 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 ea 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ù usiamo JMP e JSL, pensiamo a 'piacevoli da avere.' Anche se non siamo quelli che implementano le cose, a volte siamo quelli che chiederanno 'puoi aggiungere questo o quello?'”
E il miglioramento costante, ovviamente, avvantaggia i clienti.
“I nostri utenti esperti di JSL potrebbero voler fare alcune delle cose che stiamo facendo. Ci spinge a pensare a come possiamo scrivere in un modo più robusto".
Un sacco di campane e fischietti che sono stati aggiunti sono stati raccolti in crowdsourcing dallo sviluppo, dai test e dal team di ingegneri di rilascio.
Complimenti ai giocatori chiave che hanno aggiunto funzionalità nel corso degli anni:
Joseph Morgan @Joseph Morgan
Melanie Drake @melaniedrake
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'ingegnosità, della collaborazione e dell'impegno della divisione JMP per il miglioramento continuo. Speriamo di evidenziare altre storie come questa. Contatta Jessica Marquardt con delle idee.
Vuoi maggiori informazioni?
Cruscotto di test JMP
Questo articolo della newsletter di ricerca e sviluppo in Cina del responsabile dell'ingegneria dei test Nala Sun ( @Nala ) ha fornito ispirazione per questo post: Framework di automazione degli unit test JSL
Ecco come vengono prodotti, elaborati e utilizzati i risultati degli unit test JSL per le esecuzioni notturne degli unit test: Pipeline di dati del framework JSL
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.
La pagina professionale di Alex Orso: https://www.cc.gatech.edu/home/orso/
E grazie a @shannon_conners per fornire informazioni di base e indicazioni.