テストの自動化と「Remote Testkit」
1.はじめに
みなさんは、プログラムを書く事は好きですか? おそらく、この記事を読むみなさんは、職業的にプログラムを書いたり、なんらかの形で日常的にソフトウエアの開発に従事されている方だと思います。多くの人はプログラムする事に、ものづくりの楽しさや学ぶ事の喜びを感じながら、日々コードを書いているのではないでしょうか。 みなさんは、プログラムをテストする事は好きですか? おそらく、みなさんの多くは「好き」と言わないと思います。それより積極的に「嫌い」「単調だ」「苦痛だ」という意見も多いのではないかと思います。ただし、今日のソフトウエアの複雑さと社会的重要性から、テストが不要だ、と断言するエンジニアはほとんどいないと思います。多くのエンジニアはテストの重要性を十分認め、これは単に楽しみのためのプログラムではなくて、必要だから、と自分に言い聞かせながらテストをやっているのではないでしょうか。 この差は一体どこから生じるのでしょうか?また、この様に単調なテスト業務を皆さんが大好きなプログラムを書く事のようにする事はできないでしょうか?さらに、プログラミングと比較して労働集約型になりがちで生産性が高いとは言えないテスト業務の効率をもっと高めることはできないでしょうか? この記事はそんな皆さんに、ソフトウエアのテストをもっと効率よく、もっと積極的に、さらに欲張って、スマホの開発を楽しくするためのヒントを書いていきたいと思います。また、この記事では、スマホアプリの開発で最先端の技術を集約した「Remote TestKit」が、快適で効率のよい開発にかかせないツールである事を示していきます。2.ソフトウエア開発プロセスとテスト
ソフトウエアの開発では主に以下の様な手法で開発を進行し、作成したコードをテストし、その品質を評価します。 ・「V字モデル」 ・「テスト駆動開発(TDD)」 1)V字モデル 「V字モデル」は、伝統的なソフトウェア開発手法です。 「V字モデル」は、開発工程を「設計する工程」→「実装(コーディング)」→「テストする工程」のフェーズで実施します。3.テスト駆動開発(TDD)
テスト駆動開発(TDD)は、アジャイル開発の実践手法の1つとして2010年頃から導入されつつある手法です。 キーポイントは「テストファースト」です。これは、コードを実装する事(コーディング)に先立ち、テスト用のコードを作成する事を意味します。TDD は、この「テストファースト」に則った、開発手法の事です。手順を以下に示します。 1.実装すべき機能からTODOリストを作成する。 2.TODOリストから、テストコードを作成する。 この時点では、プログラムの本体部である、コード実装はまだ作成しません。それより先に通常のプログラムスタイルでは脇役であることが多い、テストコードを先に書きます。 3.ブランクのコード実装を行う(レッド)。 「ブランクのコード実装」とは、例えば、クラスと最小限のメソッドだけを定義して、メソッドの中身は、ほとんど何も書かない様な事です。したがって、この時点でテストを行っても、その結果は、当然エラーとなります。この工程でエラーがある事を「レッド」と呼びます。 4.上記のテストでエラーがなくなる様に最低限のコード実装を書いていく(グリーン)。 先ほどのブランクのコード実装の中身を、そのモジュールが最低限の振る舞いを満たす様に充実させて行きます。この作業により、このモジュールは、ついにはエラーを出さなくなるでしょう。この工程でエラーがなくなった事を「グリーン」と呼びます。 5.最低限のコード実装の内容を見直し、よりふさわしいコードに書き直す(リファクタリング)。 上記4.の工程では、必要最低限でコード本体はかろうじて動作しているだけにすぎません。プログラマはこの工程で、オブジェクトとしての実装コードを「あるべき姿」を考え、最適化していきます。4.これからのテストと Remote TestKit
このTDD のループ構成は、ロボットなどの開発で用いられる制御理論の様に単体テスト → 結合・機能テスト → システムテストへとループ構成の範囲を広げていく事が可能でしょう。これは、ノーバート・ウィーナーが提唱したサイバネティックスをソフトウエアの開発に適用した例と言えるでしょう。 最近、Jenkinsなどの継続的インテグレーションツール(CI ツール)が注目を浴びています。 このツールをハブとし、さらにコンパイルの自動化や Selenium などと連携することで、各種のサイト・アプリ開発が自動化できます。 一方、「Remote TestKit」は、ネットワークを介し、スマホ実機にアクセスするサービスです。 このサービスは、手元になくても、たくさんのスマホを使った試験環境を提供します。そのため開発者はたくさんのスマホを用意する手間や、コスト、それを用意する場所に制約されなくても実機テストをできる、というメリットがあります。さらに、これ以上に大きな可能性を持つのが、「ネットワークを介し、スマホ実機のUIにアクセスできる」ということです。 ・ソフトウエア的な開発手法のTDD ・ネットワーク上でつながる各種 CI ツール ・ネットワークでUI操作できるスマホ実機 つまり、上記で述べたほぼすべての開発に関するアイテムがネットワークを介して1つのシステムとして運用できるという事になります。しかも、この一連のシステムの中の主役であるスマホは、単なるスタブや仮想のオブジェクトではなく文字通りの「実機」です。このことから、「Remote TestKit」は、いままで困難だった実機を使ったテスト自動化まで、ITに於ける検証の可能性を広げることにもなるでしょう。5.この記事で紹介すること
次回から、具体的にオープンソースの各種CI ツールの使い方の紹介と、これを「Remote TestKit」と連携させることで自動テストのエコシステムを構築する手法を紹介していきたいと思います。 それでは、宜しくお願いします。執筆者 丸地弘城