Affermando l'ovvio: non tutti noi possiamo lavorare nella ricerca e sviluppo. Ma possiamo ancora imparare un po' del gergo. Ecco una frase: framework di unit test JSL. Che cos'è? Come è successo? E perché è importante?
Demistificare 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 alla frase test unitario è il processo di convalida per garantire che le unità funzionino come previsto. La frase quadro di test unitario è arrivato a riferirsi al meccanismo utilizzato per facilitare i test unitari automatizzati.
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 è nell'ingegneria del software e nell'informatica, oltre che in matematica discreta e statistica.
"Ha concepito l'intero concetto, un framework di test centrale", afferma Audrey Shull, Sr. Manager of Test Engineering ( @Audrey_Shull ). "Ha un sacco di 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. “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 scripting, il gruppo di test lo trova per primo perché siamo i primi clienti 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
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 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 utilizzare 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 statistiche e piattaforme grafiche, funziona su Macintosh e Windows, testa i comandi della tabella dati e le strutture dei report.
Lavorare con "una rete di sicurezza"
Il framework può essere eseguito manualmente: tester e sviluppatori possono avviarlo, puntare e fare clic ed eseguirlo. 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 of the testing dialog as it looks today.Screenshot della finestra di dialogo di test come appare oggi.
Un processo automatizzato notturno, gestito dal Principal Systems Developer 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 si svolgono: ogni notte vengono eseguiti 2,4 milioni di test. E questo accade su tutti i sistemi operativi (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 provato, ho scritto un caso di test e se si rompe il sistema fammelo sapere. Posso passare ad altre cose. Stiamo cercando di testare le novità in arrivo e che vengono 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 dei test unitari.
“Poco dopo l'implementazione iniziale del framework di unit testing JSL, il suo valore è diventato drammaticamente evidente in un modo piuttosto insolito. È interessante notare che non è stata una regressione di JMP che ha rilevato, ma invece è stata la chiave per isolare un bug piuttosto serio in MacOS.
“All'inizio del 2006, Apple ha avviato la transizione della linea Macintosh dalle CPU PowerPC alle CPU Intel e, per favorire questa transizione, ha fornito in bundle un emulatore con MacOS noto come Rosetta. Questo emulatore consentiva alle applicazioni PowerPC di funzionare su Mac Intel e quindi era 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 unit test, sono stato in grado di isolare il problema a un bug nell'implementazione della funzione radice quadrata in Rosetta ( vedere 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 essenzialmente imitava 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.
A chi giova?
"[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 determinate aree di JMP. Ma non importa quale parte di JMP sia responsabile del test, tutti stanno essenzialmente testando anche il linguaggio di scripting.
Audrey dice: “Più usiamo JMP e JSL, pensiamo a 'carini 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, avvantaggia i clienti.
“I nostri esperti utenti JSL potrebbero voler fare alcune delle cose che stiamo facendo noi. Ci spinge a pensare a come scrivere in un modo più solido".
Un sacco di campane e fischietti che sono stati aggiunti sono stati raccolti in crowdsourcing dal team di sviluppo, test e ingegneria del rilascio.
Complimenti ai giocatori chiave che hanno aggiunto funzionalità nel corso degli anni:
Joseph Morgan @Joseph Morgan
Melania Drake @Melanie_J_Drake
Jim Borek
Xan Gregg @XanGregg
Michael Hecht @hecht_jmp
Giustino Chilton @Justin_Chilton
Evan McCorcle @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 idee.
Vuoi maggiori informazioni?
Pannello di controllo dei test di JMP
Questo articolo della newsletter sulla ricerca e lo sviluppo in Cina del responsabile dell'ingegneria dei test Nala Sun ( @Nala ) ha fornito l'ispirazione per questo post: Quadro di automazione dei test unitari JSL
Ecco come vengono emessi, elaborati e utilizzati i risultati dei test unitari JSL per le esecuzioni notturne dei test unitari: 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 aver fornito informazioni e indicazioni.