テスト自動化の技術がいろいろあるので整理してみた(い)


この記事を書こうと思ったきっかけ

・テスト自動化の技術を整理している記事があんまり見つからない
・よくわかんないけどJUnitとSelenium使えばいいの?みたいな状況を脱却したい

ざっくり分類すると

以下の2つになるのかなと思っています。
1.ソースコードが正しく書けたかの検証を自動化するための技術(ホワイトボックス的)
2.ユーザ目線で、アプリケーションの挙動が正しいかの検証を自動化するための技術(ブラックボックス的)

さらに、上記1.は「静的解析」と「動的解析」に分かれます。

あと例外として、
3.テスト自動化の技術に含まれなくはないけどそのものではない技術
もあると思っています。Jenkinsとか。

補足

この記事では、「個人的によく質問されたり質問したりする」ツールをピックアップして紹介しています。網羅性という意味では全く足りていませんが、例えば一部の大企業で使われているような高価なツールについてだったりの話は、恐らく需要がないので割愛しました。

1.ソースコードが正しく書けたかの検証を自動化するための技術(ホワイトボックス的)

JUnit

そもそも何なのか

Javaで書いたプログラムの(ソースコードレベルの)単体テストをするときに便利なフレームワークです。動的解析ツールです。

なにが便利なの?

たとえば、テストするときに繰り返し必要になる仕組みがメソッド化されています。
車輪の再発明が不要です。
例)テスト対象のロジックを実行した結果が、期待値と一致しているかをチェックするためのメソッドが最初から用意されている

フレームワーク使わなくても生でテストコード書けば良くない?

そのほうが良いと判断すればそうやるのもありだと思います。実践投入するかはケースバイケース。

Javaで書いてないひとはどうすればいいの?

xUnitの項目を参照してください。

xUnit

そもそも何なのか

「xUnit」という名前のフレームワークはありません。(xUnit.netがありました)
単体テストをするときのフレームワークを総称してxUnitと読んでいます。
プログラミング言語によって様々な「なんちゃらUnit」があるので、Java以外の言語を使って開発している人は、その言語に対応するフレームワークを探せばOKです。
例)VBならVBUnit、PythonならPyUnit

SonarQube

そもそも何なのか

ソースコードを静的に解析して、レビューしてくれるツールです。
「その書き方はちょっとよろしくないんじゃないかな」を教えてくれます。

FindBugs

そもそも何なのか

ソースコードを静的に解析して、レビューしてくれるツールです。
Javaのソースコードに対して使用できます。

2.ユーザ目線で、アプリケーションの挙動が正しいかの検証を自動化するための技術(ブラックボックス的)

Selenium

そもそも何なのか

実際に動くアプリケーションを、マウスとキーボードで操作して検証するときに、その操作と検証を自動化できるツールです。
基本的に、PCのWEBブラウザに特化しています。

なにが便利なの?

JUnitと同様に、テストするときに繰り返し必要になる仕組みがメソッド化されています。
なので、ただのキャプチャ&リプレイより優れています。

PCのクライアントアプリには使えないの?

Seleniumではできません(と理解しています)が、WiniumとかFriendlyとかを使えばできるようです。

スマホアプリの検証はできないの?

Appiumの項目を参照してください。

Appium

そもそも何なのか

AndroidアプリとiOSアプリに対して、Seleniumと同様に、その操作と検証を自動化できるツールです。

3.テスト自動化の技術に含まれなくはないけどそのものではない技術

Jenkins

そもそも何なのか

ソフトウェア開発を全面的にサポートしてくれるツールです(なので、執事のおじさんがアイコンになっています)。継続的インテグレーション(CI)ツールと呼ばれています。

なにが便利なの?

ツールのいち機能として、例えばJUnitで書かれたテストコードを実行して、レポートを出力してくれる機能があったりします。
さらに、ソースコードに変更が入ったら自動的にビルドをして、テストコードを実行して、その結果を出力するということもやってくれます。ナイス執事。

ありがちな誤解

Jenkinsおじさんはあくまで執事なので、「Jenkinsでテストコードを書く」といったような考え方はありません。

Ant,Maven,Gradle

そもそも何なのか

ビルドツールです。

ありがちな誤解

こちらも自動テストをまわすためには必要なツールですが、CIツールと同様、「Gradleでテストコードを書く」といったような考え方はありません。