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

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

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

 

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

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

日本におけるソフトウェアテスト技術者資格認定の運営組織である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などが挙げられます。

 

ラズパイで組込みソフトのテスト自動化を実現するソリューション

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

Automealとは

Automealはハードウェア動作を含めた組込みソフトウェアのテスト自動化を、
ラズパイを使うことでお手軽に実現するソリューションです。

「はじめやすい。つづけやすい。ひろげやすい。」をコンセプトとしており、
はじめからすべてを自動化するのではなく、
・まずは小さい範囲からお手軽に自動化を始め
・段階的に自動化部分を増やし
・徐々に機能や範囲を拡張する
といった使い方ができるソリューションとなっています。

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

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

Automealの構成と機能

※2022年4月現在、鋭意開発中のものであり、実際の製品版とは仕様が異なる場合がございます。ご了承ください。

Automealは、以下のアプリ/ユニットで構成されます。
・マネージャアプリケーション
・ランナーアプリケーション
・テストユニット(ラズベリーパイ)
・拡張ボード
で構成されます。

導入はかんたん。
ラズパイとターゲット機器を接続するだけ。

ユーザーがクラウド環境のマネージャアプリを操作してテスト実行管理(シナリオ作成や実行指示など)を行うと、
あとはランナーアプリがテストシナリオに沿ってテストユニットに指示を出し、
テストユニットが駆動信号を出力、ターゲットとなる組み込み機器を制御して結果を測定します。
テスト結果がマネージャアプリのGUI上に表示されます。

さらにAutomealは、上記でご紹介した分類のツールと連携が可能であり、
組込み機器開発に最も適したかたちで運用することができます。

例えば、CIツールと組み合わせることで

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

などができます。

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

Automealにご興味を持っていただけた方は、
ぜひ以下の記事もご確認してみてくださいね!

ラズパイとPythonでテスト自動化やってみた
~Automeal:制御編~

すっかりリモートワークが主流になった昨今でも、実機を操作しないと開発がすすまない… 一体どうすれば!この記事では、 自動テスト初心者なエンジニアが、テスト自動化ソリューション“Automeal”を使ってみた様子をお届けします。

Automealの詳細はこちら!
 

まとめ

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

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

【見逃し配信中!2022年06月30日まで!】テスト自動化に関するウェビナー

近年の組込み機器開発の現場では「テスト自動化」が進んでいます。
しかし、いざ自動化に取り組もうとしても、なかなか導入検討が進まない・・・というお悩みが。
そこで、「Raspberry Pi」でお手軽にテスト自動化を実現する「Automeal(オートミール)」をご紹介します。
さらに、「自動化導入のメリット」や「最大限活用するためのコツ」などもご紹介!

また、今回のセミナーでは、参加者の方全員に、
すぐにお試しいただける「Automeal」サンプルアプリ を プレゼント!
ぜひお気軽にご参加ください。

お申込みはこちら!