Das Offensichtliche: Nicht alle von uns können in F&E arbeiten. Aber wir können noch etwas von der Fachsprache lernen. Hier ist ein Satz: JSL-Unit-Testing-Framework. Was ist es? Wie kam es dazu? Und warum ist es wichtig?
Lassen Sie uns das JSL-Unit-Testing-Framework entmystifizieren.
Vielen Dank an Nicole Jones ( @Nicole_Jones ), Senior Manager of Advanced Analytics Testing, für diese Erklärung:
"Der Begriff Einheit bezieht sich auf die kleinste testbare Komponente eines Softwareprodukts und die Phrase Unit-Tests ist der Prozess der Validierung, um sicherzustellen, dass die Einheiten wie erwartet funktionieren. Der Satz Unit-Testing-Framework bezeichnet den Mechanismus, der verwendet wird, um automatisierte Unit-Tests zu erleichtern.“
Hauptforschungsstatistiker Joseph Morgan ( @Joseph Morgan ) führte diese Begriffe bei JMP ein, als er 2005 als Statistical Tester begann. (Er arbeitet jetzt in der DOE-Gruppe.) Josephs Hintergrund liegt in Softwaretechnik und Informatik sowie in diskreter Mathematik und Statistik.
„Er hat das Gesamtkonzept, ein zentrales Test-Framework, konzipiert“, sagt Sr. Manager of Test Engineering Audrey Shull ( @Audrey_Shull ). "Er hat viele große Ideen, und dies war eine davon."
„Nachdem er sich mit JMP und JSL vertraut gemacht hatte, konnte er das JSL-Unit-Testing-Framework unter Berücksichtigung des statistischen Charakters der Software entwickeln“, sagt Nicole.
Joseph Morgan erklärt (4:38)
„Unseren eigenen Champagner trinken“
Ein Unit-Testing-Framework kann in anderen Sprachen geschrieben werden, aber welches Werkzeug ist besser als unsere eigene JSL?
Mit dem JSL-Unit-Testing-Framework „verwenden wir JMP, um JMP zu testen“, erklärt Audrey. Mit anderen Worten, wir „trinken unseren eigenen Champagner“. Und das ist nicht mit allen Tools möglich.
„Wir können unsere Software zum Testen unserer Software verwenden, da wir über diese vielseitige JSL-Sprache verfügen“, fährt Audrey fort. „Wir erweitern die Grenzen dessen, was JSL tun kann, um das Framework zu unterstützen. Das ist etwas ganz Besonderes. Und das Framework selbst dient als großer Regressionstest für die JSL-Abwärtskompatibilität.
„Wenn das Entwicklungspersonal die Funktionsweise von Skripten ändert, findet die Testgruppe es zuerst, weil wir der erste Kunde der JSL-Sprache sind.
„Alle Unternehmen versuchen, Automatisierung zu nutzen, aber oft verwenden sie dafür andere Tools von Drittanbietern. Sie werden nicht immer den Luxus haben, ihre eigene Software zu verwenden."
Ein erweiterbarer Rahmen
Ein Screenshot des ursprünglichen Dialogs. Das JSL-Unit-Testing-Framework wird auf allen JMP-Plattformen verwendet. Es kann beispielsweise verwendet werden, um die Drag-and-Drop-Funktionalität im Graph Builder zu testen. Oder die roten Dreiecksmenüs. Oder eine beliebige Codeeinheit in der Distributionsplattform.
„Wir können damit nicht nur JSL selbst testen, sondern auch alle anderen Plattformen mit dem Framework testen“, sagt Audrey.
Nicole führt aus:
„Als Joseph das Framework entwickelte, lag sein Hauptaugenmerk darauf, einen Weg zu finden, eine Regressionstestsuite für die statistischen Plattformen in JMP zu erstellen. Dennoch konnte er ein erweiterbares Framework erstellen – die Regressionstestsuite umfasst Statistikplattformen sowie Grafikplattformen, sie funktioniert sowohl auf Macintosh als auch unter Windows, sie testet Datentabellenbefehle sowie Berichtsstrukturen.“
Arbeiten mit „einem Sicherheitsnetz“
Das Framework kann manuell ausgeführt werden – Tester und Entwickler können starten, zeigen und klicken und ausführen. Aber Automatisierung ist der Schlüssel zur kontinuierlichen Verbesserung.
Das Framework wird durch Perforce (ein Repository für Arbeit) automatisiert, in dem die Arbeit der Entwickler lebt und der Code implementiert wird. JMP-Tester schreiben Testfälle und laden sie in einen dedizierten Abschnitt in Perforce hoch.
Screenshot des Testdialogs, wie er heute aussieht.
Ein nächtlicher automatisierter Prozess, der von Principal Systems Developer Jim Borek ausgeführt wird, erfasst alle an diesem Tag hochgeladenen Tests, erfasst den gesamten an diesem Tag übertragenen Code, führt die Testfälle mit dem aktualisierten Code aus und benachrichtigt das Team, wenn etwas fehlschlägt. Jim ist von zentraler Bedeutung für die Automatisierung dieses Prozesses und die Wartung der Maschinen.
Audrey beschrieb die Ungeheuerlichkeit der stattfindenden Tests: 2,4 Millionen Tests werden jede Nacht ausgeführt. Und das geschieht auf jedem Betriebssystem (zB Windows, Catalina, BigSur) sowohl für JMP 17 als auch für JMP 16.2. Das Ausführen der Tests auf einer einzelnen Maschine dauert 6-10 Stunden, je nachdem, wie schnell die Maschinen laufen.
„Das ist die Regressionstestsuite – ohne dieses Framework müssten wir diese Dinge jeden Tag testen, um zu sehen, ob sie kaputt gehen oder nicht“, sagt Audrey. „Es kann nicht manuell sein. Die Testreihe ist automatisiert, sodass das System uns benachrichtigt, wenn ein Fehler aufgetreten ist.
"Wir nennen es manchmal gerne ein Sicherheitsnetz. Ich weiß, dass es beim letzten Test funktioniert hat, ich habe einen Testfall geschrieben und wenn es kaputt geht, informiert mich das System. Ich kann mich anderen Dingen zuwenden. Wir versuchen zu testen, was neu und kommend ist und in die Software aufgenommen wird.“
Der JSL-Test-Framework-Workflow


Einen Apple-Fehler finden
Joseph erzählt eine frühe Anekdote, die den Wert des Unit-Testing-Frameworks festigte.
„Kurz nachdem die erste Implementierung des JSL-Unit-Testing-Frameworks in Betrieb war, wurde sein Wert auf ungewöhnliche Weise dramatisch deutlich. Interessanterweise war es keine Regression von JMP, die es entdeckte, sondern es war der Schlüssel zur Isolierung eines ziemlich schwerwiegenden Fehlers in MacOS.
„Anfang 2006 begann Apple mit der Umstellung der Macintosh-Reihe von PowerPC-CPUs auf Intel-CPUs und um diesen Übergang zu unterstützen, bündelte Apple einen Emulator mit MacOS, bekannt als Rosetta. Dieser Emulator ermöglichte die Ausführung von PowerPC-Anwendungen auf Intel-Macs und wurde daher von Apple als Schlüsselsoftware angesehen.
„Wie sich herausstellte, gab es einen Fehler im Rosetta-Emulator, der zu mehreren ungewöhnlichen Anomalien im Verhalten von JMP führte. Mit dem Unit Testing Framework konnte ich das Problem auf einen Fehler in der Implementierung der Quadratwurzelfunktion in Rosetta ( siehe Defekt S0351925 ).
„Michael Hecht und ich hatten mehrere Telefonkonferenzen mit Apple-Ingenieuren, um das Problem zu erklären, aber die Ingenieure waren fest davon überzeugt, dass es sich um einen JMP-Bug handelte. Erst als Michael vorschlug, eine sehr einfache C++-App zu schreiben, die im Wesentlichen einen der Komponententests nachahmte, die den Fehler zeigten, war Apple überzeugt, dass das Problem ein Rosetta-Fehler war. Ein Jahr später, im März 2007, veröffentlichte Apple einen Fix für den Rosetta-Bug in Mac OS X 10.4.8.“
Wer profitiert?
„[Das Framework] wurde mit Blick auf Tester entwickelt, hat sich aber auch für Entwickler als nützlich erwiesen“, sagt Nicole. „Ich schätze Josephs Fähigkeit, einen Rahmen zu schaffen, der den Bedürfnissen so vieler von uns gerecht wird.“
Tester in Cary und Peking teilen Funktionen auf und überwachen bestimmte Bereiche von JMP. Aber egal für welchen Teil von JMP sie zum Testen verantwortlich sind, jeder testet im Wesentlichen auch die Skriptsprache.
Audrey sagt: „Je häufiger wir JMP und JSL verwenden, denken wir an ‚nice-to-haves'. Auch wenn wir nicht diejenigen sind, die Dinge implementieren, sind wir manchmal diejenigen, die fragen: "Können Sie bitte dies oder das hinzufügen?"
Und die ständige Verbesserung kommt natürlich den Kunden zugute.
„Unsere leistungsstarken JSL-Benutzer möchten vielleicht einige der Dinge tun, die wir tun. Es regt uns dazu an, darüber nachzudenken, wie wir robustere Skripte erstellen können.“
Viele Schnickschnack, die hinzugefügt wurden, stammen aus der Crowd aus Entwicklung, Tests und dem Release-Engineering-Team.
Ein großes Lob an die wichtigsten Akteure, die im Laufe der Jahre Funktionen hinzugefügt haben:
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
Dies ist nur eines von vielen Beispielen für den Einfallsreichtum, die Zusammenarbeit und das Engagement der JMP-Abteilung für kontinuierliche Verbesserung. Wir hoffen, weitere Geschichten wie diese hervorheben zu können. Wenden Sie sich mit Ideen an Jessica Marquardt.
Möchten Sie weitere Informationen?
JMP-Test-Dashboard
Dieser China R&D Newsletter Artikel von Test Engineering Manager Nala Sun ( @Nala ) lieferte Inspiration für diesen Beitrag: Automatisierungs-Framework von JSL-Einheitentests
So werden JSL-Komponententestergebnisse ausgegeben, verarbeitet und für die nächtlichen Komponententestläufe verwendet: JSL-Framework-Datenpipeline
Ein Artikel von Joseph Morgan: JSL-Einheit: Automatisierte JSL-Tests
Orso, Alessandro und Gregg Rothermel. „Softwaretests: ein Forschungsreisebericht (2000–2014).“ Zukunft der Software-Engineering-Verfahren. 2014. 117-132.
Die berufliche Seite von Alex Orso: https://www.cc.gatech.edu/home/orso/
Und danke an @shannon_conners für Hintergrundinformationen und Anleitungen.