次の方法で共有


編集長より

非同期コードをテストする

Michael Desmond

Michael Desmond今月号の MSDN マガジンでは、2 つの特集記事で「非同期コード プロジェクトの単体テスト作業」という共通のテーマを扱っています。

MSDN マガジンで 2 年にわたり非同期開発について広範囲に執筆してきた Stephen Cleary は、今回「非同期コードの単体テスト」という特集記事で、非同期プロジェクトを成功させるために単体テストを採用する方法について説明しています。彼は、MSTest、NUnit、xUnit などの現存の単体テスト フレームワークをいくつか確認し、最高の結果を出すための戦略を示しています。それを補足するのが、Sven Grand による 2 つ目の特集記事「非同期コードの単体テスト: テストを容易にする 3 つの解決策」です。彼は、テスト対象のコードの設計を改善することで、速度が遅く、不安定な単体テストにならないようにする解決策を 3 つ提案します。

もちろん、非同期プログラミングは常に MSDN マガジンの関心事項になってきました。2011 年 10 月号では、マイクロソフトの専門家 Eric Lippert、Mads Torgersen、および Stephen Toub の各氏が、非同期プログラミングをテーマとした特集記事を執筆し、Visual Studio 2012 で新しく導入された async キーワードと await キーワードを取り上げています (msdn.microsoft.com/magazine/hh463583)。それ以来、MSDN マガジンでは非同期開発に特化した特集記事を多数掲載してきました。中でも、ここ 2 年で最も多く読まれたのが、Cleary による 2013 年 3 月号の記事「非同期プログラミングのベスト プラクティス」でした (msdn.microsoft.com/magazine/jj991977)。

重要なのは、非同期処理が注目の話題になる正当な理由があることです。Grand が今月の記事で書いているように、「CPU ベースの並列処理や I/O ベースの同時実行に非同期処理が使用され、ほぼすべてのリソースをすぐに利用できる状態にして、少ない労力で大きな成果を生み出しています。応答性の高いクライアント アプリケーションや拡張性の高いサーバー アプリケーションがすべて現実のものになっています」

非同期開発のメリットは (徐々にクラウド駆動型に移行している世界では特に) 明白ですが、この分野のプログラミングに初めて足を踏み入れる開発者にとっては難解な課題です。Cleary は、インタビューで次のように述べています。「非同期についてのチュートリアルでは、async/await の使い方は説明されていても、非同期の "伝染性" が開発者に説明されることはない。したがって、開発者がある async メソッドを記述し、その async/await がコードで広がり続けて初めて、その性質について警告される。開発者はこれが正しい動作なのかを確認するために検証することになる」

今月号の MSDN マガジンで、非同期コードの単体テストを扱う 2 つの特集記事を冒頭に掲載するのはこれが理由です。テストは、スケジュールが厳しいときに軽視されがちなものの 1 つですが、一貫したコード品質を保つためには、厳密で統制のとれたテスト体制が不可欠です。今月号の 2 つの特集記事では、適切に構造化およびサポートされている環境で非同期開発を実行していることを開発者が確認できるようにします。

「非同期コードの単体テストが課す課題の多くは、同期コードの単体テストと変わらない。コードが適切に設計されていれば、テストは簡単だ」と Cleary は話しています。「非同期コードの場合、より実用的なアプローチが役に立つだろう。つまり、副作用として値を設定するよりも、結果を返す方が良いということだ」

Grand は、開発者はカスタム コードから返されるライブラリ コードをテストするだけで終わりにしがちなので、テスト作業に集中することは重要だと説いています。「マイクロソフトの Task.Run が本当に機能するかどうか確認するためにテストを記述する必要はない。ちゃんと機能するので、安心してほしい。自分のコードのみをテストするようにすれば、テストはより単純でわかりやすくなる」

皆さんの組織の開発部門では非同期コードを記述していますか。また、テストをそれに適応させるためにはどうしましたか。ぜひ皆さんの体験をお聞かせください。連絡先は mmeditor@microsoft.com (英語のみ) です。


Michael Desmondは MSDN マガジンの編集長です。