顯而易見的是:並非我們所有人都可以從事研發工作。但是我們仍然可以學習一些行話。 這裡有一個短語:JSL 單元測試框架。 它是什麼? 它是怎麼來的? 為什麼它很重要?
讓我們揭開 JSL 單元測試框架的神秘面紗。
感謝妮可·瓊斯( @Nicole_Jones ), 高級分析測試高級經理,對此解釋:
“期限單元是指軟件產品的最小可測試組件和短語單元測試是驗證以確保單元按預期運行的過程。 詞組單元測試框架已經指代用於促進自動化單元測試的機制。”
首席研究統計學家約瑟夫·摩根 ( @約瑟夫摩根) 在 2005 年開始擔任統計測試員時向 JMP 介紹了這些術語。 (他現在在 DOE 小組工作。)約瑟夫的背景是軟件工程和計算機科學,以及離散數學和統計學。
“他構思了整個概念,一個中央測試框架,”測試工程高級經理 Audrey Shull 說( @Audrey_Shull ). “他有很多偉大的想法,這就是其中之一。”
“一旦他熟悉了 JMP 和 JSL,他就能夠開發 JSL 單元測試框架,同時牢記軟件的統計特性,”Nicole 說。
約瑟夫摩根解釋 (4:38)
“喝我們自己的香檳”
單元測試框架可以用其他語言編寫,但是有什麼工具比我們自己的 JSL 更好呢?
通過 JSL 單元測試框架,“我們使用 JMP 來測試 JMP,”Audrey 解釋說。 換句話說,我們是在“喝我們自己的香檳”。所有工具都不可能做到這一點。
“我們可以使用我們的軟件來測試我們的軟件,因為我們擁有這種通用的 JSL 語言,”Audrey 繼續說道。 “我們擴展了 JSL 可以做的事情來支持框架的限制。 這是一件很特別的事情。 框架本身作為 JSL 向後兼容性的巨大回歸測試。
“如果開發人員更改腳本的工作方式,測試組會首先發現它,因為我們是 JSL 語言的第一個客戶。
“所有公司都嘗試使用自動化,但他們通常使用其他第三方工具來這樣做。 他們不會總是有幸使用自己的軟件。”
一個可擴展的框架
A screenshot of the original dialog.原始對話框的屏幕截圖。 JSL 單元測試框架用於所有 JMP 平台。 例如,它可用於測試 Graph Builder 中的拖放功能。 或紅色三角菜單。 或分發平台中的任何代碼單元。
“我們不僅可以使用它來測試 JSL 本身,還可以使用該框架來測試所有其他平台,”Audrey 說。
妮可詳細說明:
“在 Joseph 開發框架時,他的主要工作重點是找到一種方法來為 JMP 中的統計平台創建回歸測試套件。 然而,他能夠創建一個可擴展的框架——回歸測試套件包括統計平台和圖形平台,它適用於 Macintosh 和 Windows,它測試數據表命令和報告結構。”
使用“安全網”
該框架可以手動運行——測試人員和開發人員可以啟動、點擊並運行。 但自動化是持續改進的關鍵。
該框架通過 Perforce(工作存儲庫)實現自動化,開發人員的工作在其中進行,代碼也在其中實現。 JMP 測試人員編寫測試用例並將它們上傳到 Perforce 中的專用部分。
Screenshot of the testing dialog as it looks today.今天的測試對話框的屏幕截圖。
由首席系統開發人員 Jim Borek 運行的夜間自動化流程獲取當天上傳的所有測試,獲取當天推送的所有代碼,在更新的代碼上運行測試用例,並在任何失敗時通知團隊。 Jim 是使這個過程自動化和維護機器的核心。
奧黛麗描述了所進行的測試的艱鉅性:每晚執行 240 萬次測試。 對於 JMP 17 和 JMP 16.2,這在每個操作系統(例如 Windows、Catalina、BigSur)上都會發生。 在一台機器上運行測試的過程需要 6-10 個小時,具體取決於機器的運行速度。
“這就是回歸測試套件——如果沒有這個框架,我們將不得不每天測試這些東西,看看它們是否會崩潰,”奧黛麗說。 “這不可能是手動的。 這套測試是自動化的,因此系統會提醒我們發生了故障。
“我們有時喜歡稱之為安全網。 我知道上次我測試它時它是有效的,我寫了一個測試用例,如果它破壞了系統讓我知道。 我可以繼續做其他事情。 我們正在嘗試測試新功能和即將添加到軟件中的功能。”
JSL 測試框架工作流程


尋找 Apple 錯誤
Joseph 分享了一個鞏固單元測試框架價值的早期軼事。
“在 JSL 單元測試框架的初始實施啟動並運行後不久,它的價值以一種相當不尋常的方式顯著顯現出來。 有趣的是,它檢測到的並不是 JMP 的回歸,而是隔離 MacOS 中一個相當嚴重的錯誤的關鍵。
“2006 年初,Apple 開始將 Macintosh 產品線從 PowerPC CPU 過渡到 Intel CPU,為了幫助這一過渡,它捆綁了一個名為 Rosetta 的模擬器與 MacOS。 該模擬器允許 PowerPC 應用程序在 Intel Mac 上運行,因此被 Apple 視為關鍵軟件。
“事實證明,Rosetta 仿真器中存在一個錯誤,導致 JMP 行為出現多個不尋常的異常。 通過單元測試框架,我能夠將問題隔離為 Rosetta 中平方根函數實現中的錯誤(參見缺陷 S0351925 ).
“Michael Hecht 和我與 Apple 工程師召開了幾次電話會議來解釋這個問題,但工程師們堅持認為這是一個 JMP 錯誤。 直到 Michael 建議我編寫一個非常簡單的 C++ 應用程序,該應用程序基本上模仿了展示錯誤的單元測試之一,Apple 才確信問題是 Rosetta 錯誤。 一年後,即 2007 年 3 月,Apple 發布了針對 Mac OS X 10.4.8 中 Rosetta 錯誤的修復程序。”
誰受益?
“[該框架] 是為測試人員開發的,但已被證明對開發人員也很有用,”Nicole 說。 “我很欣賞約瑟夫創建一個可以滿足我們這麼多人需求的框架的能力。”
位於 Cary 和北京的測試人員分擔職能並監控 JMP 的某些區域。 但無論他們負責測試 JMP 的哪一部分,每個人基本上也在測試腳本語言。
Audrey 說:“我們使用 JMP 和 JSL 的次數越多,我們就會想到‘可有可無’。 儘管我們不是實施者,但有時我們會要求‘你能添加這個或那個嗎?’”
當然,不斷改進也會讓客戶受益。
“我們的高級 JSL 用戶可能想要做一些我們正在做的事情。 它促使我們思考如何以更穩健的方式編寫腳本。”
許多已添加的花里胡哨的東西都是從開發、測試和發布工程團隊眾包而來的。
感謝多年來增加功能的主要參與者:
約瑟夫·摩根@約瑟夫摩根
梅蘭妮德雷克@Melanie_J_Drake
吉姆博雷克
贊格雷格@XanGregg
邁克爾赫克特@hecht_jmp
賈斯汀奇爾頓@賈斯汀奇爾頓
埃文麥科克爾@EvanMcCorkle
尼克·福爾摩斯@尼克霍姆斯13
這只是 JMP 部門的獨創性、協作和對持續改進的承諾的眾多例子之一。 我們希望突出更多這樣的故事。 向杰西卡·馬夸特 (Jessica Marquardt) 提出想法。
想了解更多信息?
JMP 測試儀錶盤
測試工程經理 Nala Sun 撰寫的這篇中國研發通訊文章( @娜拉) 為這篇文章提供了靈感: JSL 單元測試的自動化框架
以下是 JSL 單元測試結果是如何輸出、處理和用於夜間單元測試運行的: JSL 框架數據管道
約瑟夫摩根的一篇文章: JSL 單元:自動化 JSL 測試
Orso、Alessandro 和 Gregg Rothermel。 “軟件測試:研究遊記 (2000–2014)。”軟件工程會議的未來。 2014. 117-132.
Alex Orso 的專業頁面: https://www.cc.gatech.edu/home/orso/
並感謝@shannon_conners提供背景和指導。
對單元測試框架過程的解釋非常清楚,有很多人支持它。