フォーム読み込み中
こんにちは、八木秀嗣です。
この記事は、ソフトバンク Advent Calendar 2022 の 25日目の記事になります。
ここでは、回帰テストにおけるGitの活用と、テスト自動化の取り組みについて、お話しします。
回帰テストとは、ソフトウェアの機能の追加や変更、不具合の改修などに伴うプログラムの変更によって、変更した点以外のところに意図しない影響が発生していないかどうかを確認するテストのことです。リグレッションテストとも呼ばれます。
ソフトウェアテストを行うためには、与えられた入力に対して正しい出力を定義する必要があります。この入力に対する出力を、人ではなくコンピュータに確認させるのが、ソフトウェアテストの自動化と呼ばれるものです。
この入力/出力の組み合わせによって、さまざまなテスト自動化ツールが世に出ています。
以下は、その分類と一例です。
分類 | 対象 | 入力 | 出力 | 代表的なツール |
---|---|---|---|---|
静的解析 | ソースコード | ソースコード | 構造的欠陥の検出 | Klocworkなど |
単体テスト | クラスやメソッド | プロパティ値や引数値 | プロパティ値や戻り値 | JUnitなど |
UIテスト | UI | ユーザ操作 | 画面の出力 | Seleniumなど |
いざ、これらの自動化ツールを回帰テストに適用してみようとすると、なかなか難しいことがわかります。それは、これらの自動化ツールで行うテストの目的と、回帰テストの目的とが異なるためです。
静的解析を除くと、これらの自動化ツールで行うテストは、ソフトウェアが仕様通りに動作するかを確認するためのものです。したがって、これらのツールを利用するには、テストするソフトウェアの仕様について熟知していなければなりません。テストする入力に対し、それに対応する正しい出力を用意し、実際の出力がそれに沿うものかを検証する仕組み(テストコードなど)が必要となります。この手間は、馬鹿になりません。
一方で、回帰テストは、ソフトウェアの改修の前後で、意図しない影響が発生しないことを確認するためのものです。ここで、改修前のソフトウェアに対して、ある入力に対する正しい出力がすでに用意されているものとします。次に、改修後のソフトウェアで、この入力に対する出力を得ます。この改修前の出力と改修後の出力を比較すれば、回帰テストの目的を達することができます。つまり、回帰テストにおいてソフトウェアの仕様は、必ずしも知っていなければならないものではないのです。
まとめると、前述の自動化ツールによるテストは、仕様との比較を行うものであり、一方で回帰テストは、以前の出力との比較を行うべきものです。この2つは目的のベクトルが異なるため、回帰テストにこれらのツールを適用しようとすると、使い勝手が良くないということになるのです。
ここからが本題です。
上でも述べたように、回帰テストを行うには、以前の出力を知っている必要があります。モダンな開発では、ソースコードとともにテストコードを管理するのが通例ですが、同じように回帰テストの出力をソースコードとともにファイルとしてとっておきます。そしてそれを、Gitなどのバージョン管理ツールで管理するのです。
以下は、Windows環境でTortoiseGitを使って構築した一例です。
このような環境を構築したうえで回帰テストを行うと、以前の出力との差分を、Gitの機能を使って簡単に確認することができます。特に、出力をテキストファイルとして保存するようにしておけば、その差分の詳細も簡単に確認することができるのです。
ここで、回帰テストを実行してみましょう。
このように、TortoiseGitを使った環境だと、差分のあった出力が即時にわかります。
差分の詳細も、TortoiseGitのDiffコマンドを使えば、簡単に確認できます。
Macなど、TortoiseGitを使えない環境では、git diff コマンドでも確認することができます。
あとはその回帰テストを動かすランチャーを作るだけです。それには、上で紹介した自動化ツールを利用するのが一番簡単です。これらツールのフレームワークを利用して、回帰テストを動かすコードを書きましょう。出力をファイルとして保存するためのコードも必要です。仕様との比較は行わないので、Assertを使うことはありません。回帰テストの結果の確認は、テストコードの中ではなく、前バージョンとの差分の比較をもって行います。
こうやって自動化した回帰テストでは、さまざまな対象をテストすることができます。
これらをどうやってテキスト化するかですが、オブジェクトはJSONやXMLを使って簡単にテキストにできますし、帳票のテキスト化もそれほど難しくありません。ログはそもそもテキストデータですし、画面は…テキスト化が難しそうですが、やれないこともなさそうです。
ビジュアルリグレッションテストはご存じでしょうか。
ビジュアルリグレッションテストとは、画面に表示されたページや要素が期待通りに表示されているかを、修正前後の画像比較で検証するテストのことで、本記事で述べた考え方と非常に似通っています。こちらのほうは、すでにさまざまな自動化ツールが世に出ており、前節で述べた画面のテストに関しては、こちらを使ったほうがやりやすいかもしれません。
テックブログ内でも、ビジュアルリグレッションテストの実践に取り組んでいる記事がありますので、是非ご覧下さい。
今日では、システムリリースのスピードが日々速まり、回帰テストの重要性がより高まってきております。今回の記事が、システムに関わる多くの方々の一助になれば幸いです。
以上、最後までお読みいただきありがとうございました。
条件に該当するページがございません