明白なことを述べる:私たち全員が研究開発で働くことができるわけではありません。しかし、私たちはまだいくつかの用語を学ぶことができます。 フレーズは次のとおりです。JSLユニットテストフレームワーク。 それは何ですか? どうしてなったの? そして、なぜそれが重要なのでしょうか?
JSLユニットテストフレームワークをわかりやすく説明しましょう。
ニコールジョーンズ( @Nicole_Jones )、高度な分析テストのシニアマネージャー、この説明について:
"用語単位ソフトウェア製品のテスト可能な最小のコンポーネントとフレーズを指しますユニットテストユニットが期待どおりに動作することを確認するための検証プロセスです。 表現ユニットテストフレームワーク自動化された単体テストを容易にするために使用されるメカニズムを指すようになりました。」
プリンシパルリサーチ統計家ジョセフモーガン( @joseph_morgan )2005年に統計テスターとして働き始めたときに、これらの用語をJMPに導入しました。 (彼は現在、DOEグループで働いています。)Josephのバックグラウンドは、ソフトウェアエンジニアリングとコンピューターサイエンス、および離散数学と統計です。
「彼は、中央のテストフレームワークであるコンセプト全体を考案しました」と、テストエンジニアリングのシニアマネージャーであるAudrey Shull( @Audrey_Shull )。 「彼にはたくさんの大きなアイデアがあり、これはそのうちの1つでした。」
「彼はJMPとJSLに精通すると、ソフトウェアの統計的性質を念頭に置いて、JSLユニットテストフレームワークを開発することができました」とNicole氏は言います。
ジョセフ・モーガンは説明します(4:38)
「私たち自身のシャンパンを飲む」
ユニットテストフレームワークは他の言語で書くことができますが、私たち自身のJSLよりも優れたツールは何でしょうか。
JSLユニットテストフレームワークでは、「JMPを使用してJMPをテストしています」とAudrey氏は説明します。 言い換えれば、私たちは「自分たちのシャンパンを飲んでいる」のです。そして、それはすべてのツールで可能というわけではありません。
「この用途の広いJSL言語があるので、ソフトウェアを使用してソフトウェアをテストできます」とオードリー氏は続けます。 「私たちは、フレームワークをサポートするためにJSLができることの限界を広げます。 それはかなり特別なことです。 また、フレームワーク自体は、JSLの下位互換性のための巨大な回帰テストとして機能します。
「開発スタッフがスクリプトの動作方法を変更した場合、私たちがJSL言語の最初の顧客であるため、テストグループが最初にスクリプトを見つけます。
「すべての企業が自動化を使おうとしていますが、多くの場合、他のサードパーティツールを使用しています。 自分たちのソフトウェアを使う余裕があるとは限らない」と語った。
拡張可能なフレームワーク
元のダイアログのスクリーンショット。 JSLユニットテストフレームワークは、すべてのJMPプラットフォームで使用されます。 たとえば、グラフビルダーのドラッグアンドドロップ機能をテストするために使用できます。 または赤い三角形のメニュー。 または、配布プラットフォームのコードの任意の単位。
「これを使用してJSL自体をテストするだけでなく、フレームワークを使用して他のすべてのプラットフォームをテストすることもできます」とAudrey氏は言います。
ニコールは詳しく説明します:
「ジョセフがフレームワークを開発していたとき、彼の主な焦点は、JMPの統計プラットフォーム用の回帰テストスイートを作成する方法を見つけることでした。 それでも、彼は拡張可能なフレームワークを作成することができました。回帰テストスイートには、統計プラットフォームとグラフ作成プラットフォームが含まれ、MacintoshとWindowsで動作し、データテーブルコマンドとレポート構造をテストします。」
「セーフティネット」の使用
フレームワークは手動で実行できます–テスターと開発者は起動、ポイントアンドクリック、および実行できます。 しかし、自動化は継続的な改善の鍵です。
フレームワークは、開発者の作業が行われ、コードが実装されるPERFORCE(作業のリポジトリ)によって自動化されます。 JMPテスターは、テストケースを作成し、PERFORCEの専用セクションにアップロードします。
今日のテストダイアログのスクリーンショット。
プリンシパルシステム開発者のJimBorekによって実行される夜間の自動化プロセスは、その日にアップロードされたすべてのテストを取得し、その日にプッシュされたすべてのコードを取得し、更新されたコードでテストケースを実行し、何かが失敗したときにチームに通知します。 ジムは、このプロセスを自動化し、マシンを保守する上で中心的な役割を果たします。
オードリーは、行われるテストの巨大さについて説明しました。毎晩240万のテストが実行されます。 そして、それはJMP17とJMP16.2の両方のすべてのオペレーティングシステム(Windows、Catalina、BigSurなど)で発生しています。 単一のマシンでテストを実行するプロセスは、マシンの速度にもよりますが、6〜10時間かかります。
「これが回帰テストスイートです。このフレームワークがなければ、これらを毎日テストして、壊れているかどうかを確認する必要があります」とオードリー氏は言います。 「手動にすることはできません。 一連のテストは自動化されているため、システムは障害が発生したことを警告します。
「私たちは時々それをセーフティネットと呼びたいです。 前回テストしたときに機能したことはわかっています。テストケースを作成しました。問題が発生した場合は、システムから通知されます。 私は他のことに進むことができます。 私たちは、ソフトウェアに新しく追加されるものをテストしようとしています。」
JSLテストフレームワークワークフロー


Appleのバグを見つける
ジョセフは、ユニットテストフレームワークの価値を確固たるものにした初期の逸話を共有しています。
「JSLユニットテストフレームワークの最初の実装が開始されて実行された直後に、その価値はかなり珍しい方法で劇的に明らかになりました。 興味深いことに、検出されたのはJMPのリグレッションではなく、MacOSのかなり深刻なバグを特定するための鍵でした。
「2006年の初めに、AppleはMacintoshラインをPowerPCCPUからIntelCPUに移行し始めました。この移行を支援するために、Rosettaとして知られるMacOSにエミュレータをバンドルしました。 このエミュレーターにより、PowerPCアプリケーションをIntel Macで実行できるようになったため、Appleはソフトウェアの重要な部分と見なしていました。
「結局のところ、Rosettaエミュレーターにバグがあり、JMPの動作にいくつかの異常な異常が発生しました。 ユニットテストフレームワークを使用して、Rosettaの平方根関数の実装におけるバグに問題を切り分けることができました(欠陥S0351925を参照してください)。
「MichaelHechtと私は、問題を説明するためにAppleのエンジニアと何度か電話会議を行いましたが、エンジニアはそれがJMPのバグであると断固として主張しました。 マイケルが、バグを示す単体テストの1つを本質的に模倣した非常に単純なC ++アプリを作成することを提案するまで、Appleは問題がロゼッタのバグであると確信していました。 1年後の2007年3月、AppleはMac OS X10.4.8のRosettaバグの修正をリリースしました。」
誰が恩恵を受けますか?
「[フレームワーク]はテスターを念頭に置いて開発されましたが、開発者にも役立つことが証明されています」とニコールは言います。 「私たちの多くのニーズに対応できるフレームワークを作成するJosephの能力に感謝します。」
ケアリーと北京にいるテスターは、機能を分割し、JMPの特定の領域を監視します。 しかし、JMPのどの部分をテストするかに関わらず、基本的に誰もがスクリプト言語もテストしています。
オードリーは、次のように述べています。 私たちは物事を実行しているわけではありませんが、「これまたはあれを追加していただけませんか?」
そしてもちろん、絶え間ない改善は顧客に利益をもたらします。
「私たちのパワーJSLユーザーは、私たちが行っていることのいくつかを実行したいと思うかもしれません。 より堅牢な方法でスクリプトを作成する方法を考えるように促します。」
追加された多くのベルとホイッスルは、開発、テスト、およびリリースエンジニアリングチームからクラウドソーシングされました。
長年にわたって機能を追加してきた主要なプレーヤーへの称賛:
ジョセフ・モーガン@joseph_morgan
メラニー・ドレイク@melaniedrake
ジム・ボレク
ザングレッグ@XanGregg
マイケル・ヘクト@hecht_jmp
ジャスティン・チルトン@Justin_Chilton
エヴァン・マコークル@EvanMcCorkle
ニックホームズ@ nickholmes13
これは、JMP部門の創意工夫、コラボレーション、継続的な改善への取り組みの多くの例の1つにすぎません。 このようなストーリーをもっと強調したいと思います。 アイデアを持ってジェシカ・マルカートに連絡してください。
詳細情報が必要ですか?
JMPテストダッシュボード
テストエンジニアリングマネージャーのNalaSunによるこの中国のR&Dニュースレターの記事( @ナラ)この投稿にインスピレーションを与えました: JSLユニットテストの自動化フレームワーク
JSLユニットテストの結果が出力され、処理され、夜間のユニットテストの実行に利用される方法は次のとおりです。 JSLフレームワークデータパイプライン
ジョセフ・モーガンの記事: JSLユニット:自動JSLテスト
オルソ、アレッサンドロ、グレッグ・ロザメル。 「ソフトウェアテスト:研究旅行記(2000–2014)。」ソフトウェア工学手続の将来。 2014.117-132。
Alex Orsoのプロフェッショナルページ: https://www.cc.gatech.edu/home/orso/
そしてありがとう@shannon_conners背景とガイダンスを提供するため。
ユニットテストフレームワークプロセスの非常に明確な説明。これには、それをサポートする素晴らしいチームがいます。