显而易见:并非所有人都可以从事研发工作。但是我们仍然可以学习一些行话。 这里有一个短语: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提供背景和指导。
对单元测试框架过程的解释非常清楚,有一个很棒的团队支持它。