こんにちは。サービスコンピテンシー統括部のあおやまです。
私は普段は、プロジェクトの技術サポートや開発プロセスの改善活動に従事しています。
また技術研究所での自身の過去成果であるフレームワークの現場適用支援やメンテナンスなども行っています。
今回は、複雑化・短納期化していくシステム開発、恒常的な人手不足などの課題への対応として、自身も携わってきたテスト自動化への取り組みについてお話させていただきます。
技術研究所では、2015年度から研究テーマの1つに「開発技術」を挙げており、
作業の自動化や開発業務に適用可能な技術の研究を行ってきました。
その中でも「テスト自動化」は重要なテーマとして取り掛かってきました。
「テスト自動化」に着眼した理由は以下の通りです。
- テストケースの作成・実施などではパターン化された作業が多くを占めるため自動化と相性が良い
- 網羅的なテストケースの作成・実施は工数が大きくなるため自動化による工数削減の恩恵が大きい
「テスト自動化」と一言で申し上げてもJUnit/Seleniumなどの手段の自動化など多種多様な自動化手段がありますが、弊社では主にテストケース(テストモジュール含む)作成の自動化を行ってきました。
実際に活動してきた成果は以下の通りとなります。
活動年度 | 研究タイトル | 研究内容 |
---|---|---|
2015年度 | テスト設計の自動化 | UMLモデリングツールPlantUMLを利用しテストケースを自動生成する |
外部設計書を用いたテスト設計の支援 | 外部設計書を読み込みテストケースを自動生成する | |
2016年度 | 外部設計書を用いたテスト実装の支援 | 外部設計を読み込みWebAPIアプリケーション用の単体テスト(JUnit)コードを自動生成する |
2017年度 | 設計書の定型化によるテスト工程改善 | Excel形式のアプリケーション処理記述書の記述形式を定型化することによりテストケースを自動作成する |
設計情報を用いた自動テスト実装の支援 | Web画面(HTML)をもとにしてテスト仕様書テンプレートを自動生成する |
今年度の研究成果(2017年度)の研究成果については、オープンハウスで発表しますので、
ここでは2016年度に行った「外部設計書を用いたテスト実装の支援」の紹介をします。
自動テスト自体は非常に有効な手段と認識されていますが一般的には以下の課題があり
- そもそも自動化の仕方がわからない
- 正しく自動化できていない
- 導入及び教育に大きなコストがかかる
導入に大きな負担を感じ実際の利用までには至らないプロジェクトが多くあります。
当研究では設計書を基にテストコードを出力するツールを作成することで自動テストの導入負荷低減を目指しました。
具体的にはWebAPIの入出力定義書に着眼しJUnitのテストケースを生成します。
生成するテストケースは
- 取りうる入力値をベースにAllPair法を用いた効率的な正常系テストケース
- バグが集中しやすい境界値に着眼した単項目異常系ケース
です。
実プロジェクトでの検証では、テスト実行コード作成が不要のため自動テスト未経験でも自動テスト導入でき、UT工程の工数が当初の見積りより3割減を確認することができました。
既に弊社フレームワークに機能として取り込み済みであり誰でも利用可能となっています。
では、上記テストの自動化を推し進めるだけでテストは十分に実施でき、
システムの品質を担保することができるのでしょうか?
テスト自動化で担保出来るのはある程度単純なパターンであり、お客様の要件を理解し、
設計書では表現し切れていない機能が「正しく」動いている事を確認するためには、やはり人の力が必要となります。
そのためには「テスター」ではなく「テストエンジニア」が必要です。
「テスター」はケースに沿ってテストを行うメンバですが、「テストエンジニア」は上記自動化ツールなどを使いこなすスキルを保持し、また自身が優秀なテスト実施者でもあります。
(こちらを参照ください。)
優秀なテスト実施者がいるとバグの発見率が異なり、システムの品質向上に貢献することは皆さんも経験があるかと思いますが、ただ、弊社のようなSIerでは、マネージメントを行うPM/リーダであったり、ウォーターフォールにおける上流工程を行う事ができるエンジニアの方が重宝される傾向があります。
「テストエンジニア」は、縁の下の力持ちであり目立つ存在ではないのかもしれません。
しかし、自動化の仕組みを導入し工数削減に貢献し、また同時に効果的にバグを発見していく、プロジェクトにとって大事な存在となります。そのような専門性を持ったエンジニアを組織として育成していく必要があるかと思います。
では最後にまとめですが、組織としてテスト工程の改善を進めていくためには
・テストを網羅的・効率的に実施していくためには、テストを人海戦術で乗り切るのはもう無理があるので自動化は必須である。
・自動化するだけでは問題は解決しない。自動化手段を使いこなすことができ、かつ自身が優秀なテスト実施者である「テストエンジニア」を育成していく必要がある。
まだまだ長い道のりではありますが、継続的に取り組んでいかないといけないと考えています。