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


Apple のバグを見つける
ジョセフは、単体テスト フレームワークの価値を確固たるものにした初期の逸話を共有しています。
「JSL 単体テスト フレームワークの最初の実装が開始されてすぐに、その価値がかなり変わった形で劇的に明らかになりました。 興味深いことに、検出されたのは JMP のリグレッションではなく、MacOS のかなり深刻なバグを特定するための鍵でした。
「2006 年初頭、Apple は Macintosh ラインを PowerPC CPU から Intel CPU に移行し始め、この移行を支援するために、Rosetta として知られる MacOS にエミュレータをバンドルしました。 このエミュレーターは、PowerPC アプリケーションを Intel Mac 上で実行できるようにしたため、Apple によって重要なソフトウェアと見なされました。
「結局のところ、Rosetta エミュレーターにバグがあり、JMP の動作に異常な異常がいくつか発生していました。 単体テスト フレームワークを使用して、問題を Rosetta の平方根関数の実装のバグに切り分けることができました (欠陥 S0351925 を参照)。
「Michael Hecht と私は、問題を説明するために Apple のエンジニアと何度か電話会議を行いましたが、エンジニアは、これは JMP のバグであると断固として主張しました。 Apple が問題が Rosetta のバグであると確信したのは、Michael がバグを示した単体テストの 1 つを本質的に模倣する非常に単純な C++ アプリを作成することを提案したときでした。 1 年後の 2007 年 3 月、Apple は Mac OS X 10.4.8 の Rosetta バグの修正をリリースしました。
誰が利益を得ますか?
「[フレームワーク] はテスターを念頭に置いて開発されましたが、開発者にも役立つことが証明されています」と Nicole 氏は言います。 「私たちの多くのニーズに対応できるフレームワークを作成するジョセフの能力に感謝しています。」
ケーリーと北京にいるテスターが機能を分担し、JMP の特定の領域を監視します。 しかし、彼らが JMP のどの部分のテストを担当していても、基本的には全員がスクリプト言語もテストしています。
Audrey 氏は次のように述べています。 実装するのは私たちではありませんが、「これを追加してもらえますか?」と尋ねられることがあります。」
もちろん、絶え間ない改善は顧客に利益をもたらします。
「私たちの強力なJSLユーザーは、私たちが行っていることのいくつかをやりたいと思うかもしれません. より堅牢な方法でスクリプトを作成するにはどうすればよいかを考えるよう促されます。」
追加された多くの付加機能は、開発、テスト、およびリリース エンジニアリング チームからクラウドソーシングされたものです。
何年にもわたって機能を追加してきたキー プレーヤーへの称賛:
ジョセフ・モーガン@ジョセフ・モーガン
メラニー・ドレイク@Melanie_J_Drake
ジム・ボレク
ザン・グレッグ@ザングレッグ
マイケル・ヘクト@hecht_jmp
ジャスティン・チルトン@ジャスティン・チルトン
エヴァン・マッコークル@EvanMcCorkle
ニック・ホームズ@nicholmes13
これは、JMP 部門の創意工夫、コラボレーション、および継続的な改善への取り組みの多くの例の 1 つにすぎません。 このようなストーリーをさらに強調したいと考えています。 Jessica Marquardt にアイデアをお寄せください。
さらに情報が必要ですか?
JMP テスト ダッシュボード
この China R&D Newsletter の記事は、テスト エンジニアリング マネージャーの Nala Sun によるものです ( @ナラ) は、この投稿のインスピレーションを提供しました。 JSL単体テストの自動化フレームワーク
JSL 単体テストの結果がどのように出力され、処理され、毎晩の単体テストの実行に使用されるかを次に示します。 JSL フレームワーク データ パイプライン
ジョセフ・モーガンによる記事: JSL ユニット: 自動化された JSL テスト
オルソ、アレッサンドロ、グレッグ ロザメル。 「ソフトウェア テスト: 研究旅行記 (2000 ~ 2014 年)」。ソフトウェア工学議事録の未来。 2014. 117-132.
Alex Orso の専門ページ: https://www.cc.gatech.edu/home/orso/
そしておかげで@shannon_conners背景とガイダンスを提供するため。