年々、大規模化するソフトウェア開発。
品質に対する要求レベルも上昇しており、テストにかかる工数も増加しています。
こういった状況にあって、テスト自動化をはじめたい方々が増えており、
ハートランド・データでもテスト自動化の取り組みを進めています。

自動化の検討を始めるにあたり、まず自動化ツールって何があるのかを調べますよね。
この記事を読まれているあなたも、そんな方の一人でしょうか。
しかし、いざ調べてみると案外様々なツールがあって迷ってしまいます。
「どのツールを導入すればいいの?」
「課題に対して最適なツールはどれ?」
「ツールの良し悪しはどう判断すればいい?」

でも大丈夫。
自動化へ一歩踏み出す皆さんが導入からつまずかないよう、テスト自動化の始め方と自動化ツールについてまとめてみました。

 

そもそもテスト自動化とは?

テスト自動化と聞くと、「テストの実装や実行を自動化する」というイメージがありますが、
そもそも自動化とはなんでしょうか?

日本におけるソフトウェアテスト技術者資格認定の運営組織であるJSTQBでは、テスト自動化は

ソフトウェアを使った、テスト活動の実行や支援

と定義されています。
また、テスト(プロセス)活動は

  1. テスト計画
  2. テストのモニタリングとコントロール
  3. テスト分析
  4. テスト設計
  5. テスト実装
  6. テスト実行
  7. テスト完了

と定義されています。

つまり、テストの実装や実行を自動で行うことだけがテスト自動化ではありません。
計画や設計のフェーズも含まれますし、実行だけでなく支援もまた含まれます。

これらを踏まえた導入ツールの選定をするには、
先に課題(あるいは自動化したい範囲)を明確にしておく必要があります。
また、自動化ツールにはどのような種類があるかや、各ツールの自動化できる範囲、特性について知らなければ、
課題に対して適切なツールを選ぶことはできません。
そこで次項からは、自動化ツールに焦点を当て、ツールの種類や特性についてご紹介します。

 

自動化ツールの分類

「自動化ツール」で検索するとJenkinsやSeleniumといったツールがよく出てきます。
これらはそれぞれどのような場面の自動化に適したツールなのでしょうか?

ハートランド・データでは、テストツールを以下のように分類しています。

  1. CIツール
  2. 静的解析ツール
  3. モデルベースド(準形式手法)ツール
  4. 単体テストツール
  5. 単体テストフレームワーク
  6. UIテストツール
  7. テスト管理ツール

これらに分類されるツールで自動化できる範囲を図示してみましょう。
一般的なV字プロセス及びJSTQBのテスト活動の各フェーズに範囲を示しました。
(あくまで一例となります。具体的なツールの仕様や使い方しだいで、異なる範囲でも適用されます。)

V字プロセス及びJSTQBのテスト活動 vs 自動化ツールの分類

この図から、

  1. 各ツールで自動化できる範囲が異なること
  2. 実装・実行以外のフェーズにも適用できるツールが存在すること

が改めてお分かりいただけたのではないでしょうか。

「テスト自動化」というと、どうしても「テストの実行の自動化」に目が行きがちですが、
近年はアジャイル開発・DevOpsに代表されるように、開発プロセスのシフトレフト/シフトライト化も浸透してきており、
設計からテストまですべてのフェーズが繰り返し行われることもあります。

自分たちが今どのフェーズに課題を抱えているのか
どのフェーズであれば自動化する効果が高く出るのかを考えツールを選定していく

ことが非常に大切になります。

それでは、各分類におけるツールの特徴を簡単にご紹介しましょう。

 

自動化ツールの種類と特性

CIツール

CIツールは、その名の通り継続的インテグレーションをサポートするためのツールです。一般的な特徴として、構成管理ツールでコードの更新を行うと自動的にビルドやテストを行うことができます。また、設定されたトリガが発生すると、バッチやプログラム実行など複数の処理を並列・連続して行うことができます。
この通り、CIツール自体はテストツールではありませんが、他のツールによって既に自動化されたテストを自動実行することができ、テスト活動の支援にも使われます。
CIツールの例として、Jenkinsなどが挙げられます。

静的解析ツール

静的解析ツールは、コードを解析して構造的欠陥を見つけ出すツールです。一般的な特徴として、コードの解析により、領域外参照やデッドコード、メモリリークなどの発生を検出できます。また、コーディング規約違反の検出など、間接的な不具合の原因排除の一助となります。一方で、ハードウェアの動作や通信シーケンス依存の問題など、動的な不具合は検出できません。コード・言語依存の致命的な問題を早期に発見したい場合に効果的なツールです。
静的解析ツールの例として、KlocworkやSonerQubeなどが挙げられます。

モデルベースド(準形式手法)ツール

モデルベースド(準形式手法)ツールは、設計書等をモデル化(一定のルールに基づいて記述)したものからテストケースを自動生成するツールです。一般的な特徴として、図や表などの既定の記述内容からテストケースを自動生成します。テストケースは組み合わせ手法を用いて作成されるため、テストケースの抜け漏れを抑制することができます。一方で、ツールが対応する形式でドキュメントを作成しなければならないことから、テストケース作成の補助ツールとして使用されるケースが多いです。網羅的なテストケース作成にかかる時間を削減したい場合や、テストケース作成の属人化を避けたい場合に効果的なツールです。
モデルベースド(準形式手法)ツールの例として、PictmasterやCEGTestなどが挙げられます。

単体テストツール

単体テストツールは、コードからテストケースを自動生成し、テストコード作成から実行までを自動化するツールです。一般的な特徴として、コードの構造からテストケースやテストコードを自動生成します。また、網羅的なテストの実行、カバレッジの取得を行うことができます。一方で、コードベースのテストとなるため、設計書や要件へのトレーサビリティが必要になります。コードを網羅する単体テストの作成や実施をしたい場合に効果的なツールです。
単体テストツールの例として、C++Testなどが挙げられます。

単体テストフレームワーク

単体テストフレームワークは、関数に対して前提条件や入力を設定し、出力・戻り値に対する検証を自動化するツールです。この種類のツールの多くはアプリケーションではなく、単体テストのテストコードを効率よく書くためのフレームワークです。また、テストの実行はバッチ化し、CIツールと連携することで自動実行するケースが多いです。テストコードの構築に時間がかかっている場合や、テストコードが属人化・煩雑化している場合に効果的なツールです。
単体テストフレームワークの例として、C++用のGoogleTest、Java用のJUnit、Python用のPyUnit、javascript用のMochaなどが挙げられます。

UIテストツール

UIテストツールは、その名の通りUIに対するテストを自動化するツールです。一般的な特徴として、ユーザの操作を記録してテストデータ作成を補助する機能があり、記録した操作を再現することで、UIに対する操作を行うテストを自動化できます。また、ローコーディングでテストデータを作成でき、専門的な知識が必要ないツールも多く存在します。UIに対して同じ操作を行う妥当性確認テストの回帰テストなど、人が操作を行うブラックボックステストの自動化に効果的です。
UIテストツールの例として、SeleniumやRanorexなどが挙げられます。

テスト管理ツール

テスト管理ツールは、テストや不具合のモニタリングを補助し、統計や一覧の作成を自動化するツールです。一般的な特徴として、テストケース単体の状態管理や進捗などテストフェーズ・テストレベル全体の管理を行うことができます。さらに、チケット管理ツールなどと連携することで管理する範囲を広げることができるものもあります。また、テスト管理に限らず、プロセス管理ツールも存在します。一方で、部署やプロジェクトに合わせて、独自の運用ルールを設けなければならない場合が多いです。状態管理の人的ミスが多い場合や、進捗管理など管理工数がボトルネックとなっている場合に効果的なツールです。
テスト管理ツールの例として、TestRailやTestLinkなどが挙げられます。

 

組込みソフトに特化したテスト自動化ソリューション

ここまで、様々なツールをご紹介してまいりましたが、
どれもソフトウェア単体における検証を自動化していくためのツールであり、
ハードウェアが絡む組込みソフトウェア開発においては、かゆい所まで自動化できないことが多いのが実情です。
そこで、ここからは弊社が開発を行っている、組込みソフトウェアのテスト自動化のためのソリューション
「Small Start Kit」をご紹介します。

Small Start Kitとは

Small Start Kitはハードウェア動作を含めた組込みソフトウェアのテストを自動化することに特化したソリューションです。
「自動化したい範囲に適切なツールを、簡単に構築するソリューション」をコンセプトとしており、
はじめからすべてを自動化するのではなく、まずは小さい範囲から自動化を始め、
段階的に自動化可能な部分を増やし、徐々に機能や範囲を拡張していくためのソリューションとなっています。

  • ソフトだけじゃなくハード動作も検証したいけど、実機操作を自動化ってどうすればいい?
  • HILSやロボットアームで環境構築している事例を見るけど高額だから手が出ない…
  • そもそもウチの組込み製品に自動化って適用できるの?

といった悩みをお持ちの方に最適です。

Small Start Kitの構成と機能

Small Start Kitは、テストマネージャアプリとテストユニットで構成されます。

テストマネージャアプリがテストシナリオに沿ってテストユニットに指示を出します。
テストユニットは指示に従い駆動信号を出力。ターゲットとなる組み込み機器を制御します。
また、テストユニットはターゲット機器からの信号の計測も行うことができます。

計測結果はテストマネージャアプリのGUI上に表示されます。

 

さらにSmall Start Kitは、上記でご紹介した分類のツールと連携させ、
組込み機器に最も適したかたちで運用することができます。

例えば、Small Start Kitはコマンドライン制御が可能ですので、
CIツールと組み合わせることで

  1. 夜間や休日などテストの定期実行
  2. 構成管理ツールへのPushをトリガーとする回帰テストの自動実行

などができます。

アプリと連携しているIoT機器のテストをしたい場合は、Small Start KitとUIテストツールを連携させることで、
アプリから操作しつつハード的な動作検証やハードウェア操作の再現が必要なケースでも自動化できます。

Small Start Kitにご興味を持っていただけた方は、
ぜひ一度↓のボタンから製品ページをチェックしてみてくださいね。
Small Start Kitの詳細はこちら!

 

まとめ

いかがでしたか。
テスト自動化ツールと言っても、自動化できるフェーズによって使うべきものが違うことがお分かりいただけたでしょうか。
自動化の検討を始めるにあたり、まずは課題や自動化したい範囲を明確にすることが大切です。
その上で、課題に適したツールを選択するために、
自動化ツールの種類や自動化できる範囲、それぞれの特性を知ること
がスムーズに自動化の検討を進めるポイントになります。

今回の記事では様々なツールを、特徴ごとに簡単に分類してご説明しましたが、
ご紹介した分類には当てはまらない、ユニークなツールもございますので、
気になったものがありましたら、ぜひご自身でも調べてみてください。

テスト自動化に関するセミナーを実施します!見逃し配信中

自動化を行うことのメリットや、自動化着手の際によくある「つまずき」を詳しく解説。
さらに、他社がテスト自動化を導入した際の具体的な構築事例についてご紹介いたします。
組込み機器のテスト自動化に興味がある方、自動化を検討している方はもちろん、
テスト自動化とは何かを知りたい方も、ぜひお気軽にご参加ください。
お申込みはこちら!