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


查找 Apple 錯誤
Joseph 分享了一個鞏固單元測試框架價值的早期軼事。
“在 JSL 單元測試框架的初始實施啟動並運行後不久,它的價值以一種相當不尋常的方式變得非常明顯。 有趣的是,它檢測到的並不是 JMP 的回歸,而是隔離 MacOS 中相當嚴重的錯誤的關鍵。
“在 2006 年初,Apple 開始將 Macintosh 產品線從 PowerPC CPU 過渡到 Intel CPU,為了幫助這種過渡,它在 MacOS 中捆綁了一個名為 Rosetta 的模擬器。 該模擬器允許 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 錯誤的修復程序。”
誰受益?
“[該框架] 是為測試人員開發的,但事實證明,它對開發人員也很有用,”妮可說。 “我很欣賞 Joseph 創建一個可以滿足我們許多人需求的框架的能力。”
位於卡里和北京的測試人員分工負責並監控 JMP 的某些區域。 但無論他們負責測試 JMP 的哪個部分,每個人本質上也是在測試腳本語言。
Audrey 說:“我們使用 JMP 和 JSL 的次數越多,我們就會想到‘有得有失’。 即使我們不是實施事情的人,我們有時也會要求'你能添加這個或那個嗎?'”
當然,不斷改進使客戶受益。
“我們的強大 JSL 用戶可能想要做一些我們正在做的事情。 它促使我們思考如何以更強大的方式編寫腳本。”
添加的許多花里胡哨都是從開發、測試和發布工程團隊眾包而來的。
感謝多年來增加功能的主要參與者:
約瑟夫摩根@joseph_morgan
梅蘭妮·德雷克@melaniedrake
吉姆·博雷克
贊格雷格@XanGregg
邁克爾·赫克特@hecht_jmp
賈斯汀·奇爾頓@Justin_Chilton
埃文·麥科克爾@EvanMcCorkle
尼克福爾摩斯@nickholmes13
這只是 JMP 部門對持續改進的獨創性、協作和承諾的眾多例子之一。 我們希望突出更多這樣的故事。 聯繫 Jessica Marquardt 提出想法。
想了解更多信息?
JMP 測試儀表板
這篇中國研發通訊文章由測試工程經理 Nala Sun ( @娜拉) 為這篇文章提供了靈感: JSL 單元測試的自動化框架
以下是 JSL 單元測試結果的輸出、處理和用於夜間單元測試運行的方式: JSL 框架數據管道
約瑟夫摩根的一篇文章: JSL 單元:自動化 JSL 測試
奧索、亞歷山德羅和格雷格·羅瑟梅爾。 “軟件測試:研究遊記(2000-2014)。”軟件工程論文集的未來。 2014. 117-132。
Alex Orso 的專業頁面: https://www.cc.gatech.edu/home/orso/
並感謝@shannon_conners提供背景和指導。
對單元測試框架過程的解釋非常清楚,有一個很棒的團隊支持它。