テスト工数の増加。昨今の多機能、高機能、高品質なソフトウェアが望まれる環境下においては避けられない事実です。また、これらの「多○○」「高○○」と反比例するかのように、短納期・低コストがソフトウェアベンダーや開発者に求められているのも事実です。こうやってみると、現場の開発者は疲弊して行くばかりだと思われがちです。しかし、そこは開発者。自分の作業を効率化するための開発環境をつくることができます。単純な例が「作業の自動化」です。毎回繰り返す作業を自分の手を介さずに、しかも自動で実施することができれば、その間開発者は別な作業を行うことができますし体を休めることができます。「自動化」を行うためのツールやそれにまつわる情報は、近年急激に増えてきています。昨今のソフトウェアに望まれる「多○○」「高○○」に最も近い割合で増えるものの一つと言えるかもしれません。
さて、今回から数回にわたり「動的テストの自動化を考える」をテーマに実践的な方法について紹介していきたいと思います。特に、Jenkinsを使用した「動的テストの自動化」を行うためのCI(Continuous Integration)環境の構築方法を中心に、DTシリーズのツールのノウハウとあわせてご紹介していきたいと思います。
まず、第1回では、CI環境を構築する前に「動的テストの自動化のメリット」について考えてみましょう。
CONTENTS
- CI環境とは
- CI環境のメリットとは
- メリット1: 曖昧さの排除
- メリット2: 属人性のないテストの実施
- メリット3: リソース(時間・人)の緩和
- 動的テストの自動化
- 動的テスト自動化のメリット
- メリット1: テスト失敗原因解析の効率化
- メリット2: 実環境上のパフォーマンスの見える化
- メリット3: テストケース漏れの可視化
- 最後に
CI環境とは
CIとは”Continuous Integration”の略で、Java等の言語をベースにPC・Webアプリケーション等の分野で提唱されている開発習慣です。図1のように各開発者のソースファイルを変更するたびにビルド・テストを実施し、変更に対してテストが実施できる環境を指します。元々デイリービルドといった形で一部実施されていましたが、Jenkinsをはじめとしたツールの普及やクラウド化等の環境の変化により単純なビルドからテストも含む形で活用シーンが増え、急速な広まりを見せています。
図1: CIの例
CI環境のメリットとは
CI環境を構築することで一番のメリットが得られるフェーズはテストのフェーズとなります。特に、テストの自動化によって得られるメリットは大きく以下の3つです。
メリット1: 曖昧さの排除
統合テストでのテストケースは、機能仕様書から作られることが多いため、ほとんどが文章で書かれます。明瞭な文章で書かれていれば解釈の違いは発生しないかもしれませんが、解釈の違いが発生しやすい文章の場合、テストを実施する人によって結果が異なるケースが発生します。これを、テスト自動化によって同じ解釈のもと実施することができ、曖昧さが排除され、毎回同じテストの実施が可能になります。
メリット2: 属人性のないテストの実施
書かれているテストケースの解釈の仕方に違いがなくても、テストを実施する際の手順、方法、見るべきポイントが属人化されているケースもあります。特に、この人でないとテストの実施ができないという機能がある場合、効率的な開発は見込めません。手順を一定化し誰がやっても同じ手順・タイミングで実施可能なテスト環境を作っておくことも重要となります。
自動化によって、一定時刻でのテストの実施、人の手が介在しない状態でのテストの実施ができるため、テストに掛かる工数の削減が期待できます。
メリット3: リソース(時間・人)の緩和
テスト自動化によって、人の手が介在しない状態でのテストの実施、一定時刻でのテストの実施ができるため、単純にテストに掛かる人件費の削減が期待できます。しかし、テストを自動化するための環境構築に人・時間が掛かってしまうようでは、自動化の意味がありませんので、最終的には、「テストの自動化を行う機能」「フェーズ」「得られる効果」をトレードオフしながらトータルで判断することになります。
自動化によるさらなるメリットとしては、不具合や不具合につながる予兆の早期発見です。問題につながる予兆が早期発見できれば、手戻りが発生した場合の工数も軽微で済むはずです。例えば、ソースコードを構成管理ツールにコミットする度に自動でテストが実行できるような環境を構築しておくことで、問題の早期発見が期待できます。
動的テストの自動化
「テスト判定がNGになった際の調査の手段」や「確認の必要な処理が実機上できちんとテストできたか」をフィードバックする手段があるとないとでは、その後の作業が大きく変わってきます。そこで、このフィードバックするため手段としての「動的テスト」を考えます。弊社が提唱する「動的テスト」は、いわゆる「グレーボックステスト」に相当しますので、テスト結果とあわせてフィードバックに必要な内部の構造や情報も得ることができます。
動的テスト自動化のメリット
弊社では動的テストツールDTシリーズを活用した「動的テストの自動化」を推奨しています。動的テストを自動化するメリットとして、以下の3つが挙げられます。
メリット1: テスト失敗原因解析の効率化
実機上での経路情報をトレースすることで、自動テストの結果がエラーになった時の原因分析をすぐに行うことが可能です。これにより、テスト結果に対するトレーサビリティを確保し、テスト失敗の発生時すぐに原因の解析を行える事で、ソフトウェアの改修を効率化する事ができます。
メリット2: 実環境上のパフォーマンスの見える化
実機上でソフトウェアを実行させた時のパフォーマンスの計測ができ、結果を読み取る事で変更点に対しての処理時間の影響の有無を検出することができます。これにより、変更によって処理時間が規定値を超えていないか、他の処理のパフォーマンスに影響を及ぼしていないか等を常に監視できます。
メリット3: テストケース漏れの可視化
実機上で動作したコードをカバレッジとして計測することができます。テスト済/未実施の処理を可視化し、テストの実施が期待通り行われているか、テストの漏れが無いかをチェックすることができます。
最後に
みなさんは、「木こりのジレンマ」ということばを聞いたことがありますか?木こりが、斧を研ぐ時間がもったいないからといって同じ斧を使い続けてしまい、効率が悪くなっているにもかかわらず使い続けてしまう状況を表す例えです。
一方で、同じ斧の話でも、エイブラハムリンカーンは「もし木を切り倒すのに8時間与えられたなら私は6時間を斧を研ぐのに費やすだろう」と言っていたようです。初めから問題となることが予想できれば、リンカーンのようにあらかじめ手を打てるのかもしれません。
ツールベンダー目線でお客様となるエンジニアの方を見させていただくと、ゆっくりと迫る問題や危機に対しても敏感に気づき軌道修正できるエンジニアは確かに増えつつありますが、その一方で、「木こりのジレンマ」状態に陥ってしまいなかなか軌道修正でない人との二極化が一層進んでいるようにも見えます。
「動的テストの自動化を考える」のシリーズを通して、エンジニアのみなさんが「木こりのジレンマ」状態に陥らず、問題に敏感に気づくことのできるエンジニアとなるための助けとなる情報を発信していきたいと思いますので、エンジニアのみなさんには、一息ついたところで、弊社ブログを読んでいただけると幸いです。
次回は、「Jenkinsによるテストポイントの自動挿入」について考えていきたいと思います。
バックナンバー
- 「動的テストの自動化を考える #1」- 動的テスト自動化のメリット
- 「動的テストの自動化を考える #2」- テストポイント挿入のための4W2H
- 「動的テストの自動化を考える #3」- CUIによるテストポイント挿入
- 「動的テストの自動化を考える #4」- DTシリーズ製品をJenkinsで動かすための準備
- 「動的テストの自動化を考える #5」- 動的テスト自動化のための設計
- 「動的テストの自動化を考える 番外編」- ESEC2018に出展したテスト自動化のデモ
- 「動的テストの自動化を考える #6」- Jobの設計
- 「動的テストの自動化を考える #7」- Jenkinsのパイプラインで何ができるか
- 「動的テストの自動化を考える 番外編2」- ET2018に出展したテスト自動化デモ
- 「動的テストの自動化を考える #8」- Jenkinsのパイプラインで動的テストの自動化を設計
- 「動的テストの自動化を考える #最終回」- Jenkinsのパイプラインで動的テストの自動化を実現
- 「動的テストの自動化を考える #最終回のおまけ」- Jenkinsによる動的テスト自動化の動画