NTT技術ジャーナル記事

   

「NTT技術ジャーナル」編集部が注目した
最新トピックや特集インタビュー記事などをご覧いただけます。

PDFダウンロード

特集

将来の情報処理基盤実現に向けた取り組み

テスト活動データを分析してバグを狙い撃つテスト自動化技術

コストを抑えながらソフトウェアを早期にリリースすることへの要求が増しています。そのため、開発全体のコストに占める割合が大きく、ソフトウェアの一定の品質を確保するために必要となるソフトウェアテストは、開発におけるQCD(Quality、 Cost、 Delivery)の要といえます。本稿では、NTTソフトウェアイノベーションセンタが取り組んでいるテストを飛躍的に効率化する技術について解説するとともに、将来展望についても紹介します。

丹野 治門(たんの はると)/切貫 弘之(きりぬき ひろゆき)
安達 悠(あだち ゆう)/生沼 守英(おいぬま もりひで)
村本 達也(むらもと たつや)
NTT ソフトウェアイノベーションセンタ

ソフトウェアテストの重要性

ソフトウェア開発は図1のように行われます。テストで摘出できなかったソフトウェアの不具合はそのままユーザの元へリリースされてしまうため、ソフトウェアの品質確保においてテストは欠くことのできない大事な工程です。しかし、これらを手動ですべて行おうとすると大きなコストがかかってしまいます。また、近年ではユーザのニーズの変化や、動作環境となるソフトウェア、ハードウェアの進化のスピードが早いため、必要に応じて素早くソフトウェアを改良し短期で繰り返してリリースすることも求められています。しかし、一定の品質を確保しながらソフトウェアのリリースを繰り返し行うためには、小規模な改良であっても、新規部分のテストに加えて、新規機能追加や新たな動作環境への対応などの影響による既存機能の劣化が引き起こされていないかを確認するためのテスト(回帰テスト)を、リリースのたびに既存機能全体に対しても行う必要があり、これにも大きなコストがかかります。NTTソフトウェアイノベーションセンタでは、ソフトウェア開発におけるQCD(Quality、 Cost、 Deliv­ery)の要となっているテストを変革し、ソフトウェア開発の生産性を飛躍的に向上させることをめざしています。

ソフトウェアテストの現状

ソフトウェアテストの目的は、ソフトウェアが正常に振る舞うことを確認したり、ソフトウェアの不具合数を減らしたりすることです。テスト工程は図2に示すように、大まかにテスト計画、テスト設計、テスト実施、テスト管理、テスト報告という5つのタスクで構成されています。テスト計画では開発全体の計画に基づき、テストを行う期間やリソース配分の策定を行います。テスト設計では、行うべきテストのバリエーションの洗い出しを行い、テストケースを網羅的に設計し、各テストケースそれぞれについて具体的にテスト実施可能な手順への詳細化や、自動実施用のスクリプト作成を行います。そしてテスト実施では、テストケースごとに、入力データを与え、ソフトウェアを動作させ、それぞれのテストケースでソフトウェアの振る舞いが期待どおりであるかを確認します。テスト管理では、テストの実施状況等の管理を随時行い、必要であれば計画の見直しなどを行います。すべてのテストの実施が完了すると、その結果をまとめ、テスト報告を行い、完了となります。この中で、「テスト設計」「テスト実施」がテスト工程における主要なタスクとなります。
1番目の課題は、従来の網羅的なテストでは設計にも実施にも大きなコストがかかるという点です。品質向上をめざして網羅性を追求すると膨大な時間がかかり、リリースまでの期間も長くなってしまいます。さらにいえば、網羅性を評価すること自体がそもそも難しく、例えば、仕様に基づいた網羅性の基準は仕様書の質に大きく依存しますし、コード網羅率でテストの内容自体を評価することはできません。そして、指標値をクリアしても品質向上の度合いはよく分からないということもあります。
2番目の課題は、短期で繰り返しリリースを行うために必要となる回帰テストの自動化にコストがかかる点です。JUnit、Seleni­umなど、テストを自動実行するための既存のフレームワークやライブラリは多く存在しますが、自動実行のためにはスクリプト作成が必要となり、スクリプト作成に大きな手間がかかります。そのうえ、スクリプトは一度作成したら終わりではなく、テスト対象ソフトウェアの修正に合わせてスクリプトを修正という保守作業にも大きな手間がかかります。

めざす世界

NTTソフトウェアイノベーションセンタでは、多様化・曖昧化するビジネスの要件とビジネスの進化スピードに対応した超高速開発の実現のため、人の作業の一部を代替・超越するAI(人工知能)開発技術を確立し、AIと人が協働して開発を行うというアプローチをとっています。超高速開発におけるテストについては図3に示すような世界をめざしています。私たちのアプローチでは闇雲に網羅性を追求せず、テストすべき個所を選択し、そこに集中します。そして、どこへ選択・集中するかについては、テスト実施状況・結果のデータを収集、分析して逐次判断します。これにより、従来の網羅的なテストの課題を解決し、テストの飛躍的な効率化を実現します。加えて、蓄積されたテスト活動データを活用し、保守しやすいテストスクリプトの自動生成も行うことで、回帰テストの自動化を容易に行えるようにし、ソフトウェアを改良した後に迅速なリリースを可能にします。
今回、本稿では、NTTグループ内でも多く開発されている、Webアプリケーションをフロントエンドとして持つ業務アプリケーションにおける、効率化のニーズが高い結合テストを対象とした技術LatteArtの説明をします。

 

 

テスト活動データを分析してバグを狙い撃つ技術LatteArt

業務アプリケーションは、多くのユースケースシナリオ、機能、画面があり、各画面における入力のパターンも多くの組合せが存在し、従来の網羅的なテストには大きなコストがかかります。何らかのモデル(例えば、ソフトウェアの設計モデル)から網羅的なテストを自動設計することでテスト設計を支援するツールも存在しますが、すべてのテストを実施するには手間がかかるため、テスト全体の効率化に限界がありました。また、Webアプリケーションのテストを自動化するためには、画面の操作を自動で行うテストスクリプトの作成が必要となります。このようなテストスクリプトを人手で作成することはコストがかかるうえ、Webアプリケーションの改修に伴ってテストスクリプトの修正も必要になるため、保守にも大きなコストがかかります。既存のキャプチャ&リプレイツール(例:SeleniumIDE)を使うことで、高いスキルがなくてもスクリプトを作成することはできますが、スクリプト作成の手間はかかりますし、キャプチャ&リプレイツールで記録したテストスクリプトはモジュール化されていないため、保守性が低いという課題もあります。
このような課題を解決するため、私たちはテスト活動データを分析してバグを狙い撃つ技術LatteArtの開発を進めてきました。LatteArtには以下のような特徴があります。
(1) テスト活動データの収集
テスターのWebアプリケーション画面上の操作ログ、スクリーンショットおよび、テスターがテスト実施中に入力したテスト目的、バグ、気付きなどをテスト活動データとして自動で収集します。
(2) テスト活動データの分析
細かいレベルでテストをつくらず、「テスト観点×テスト対象機能」というおおまかなレベルでテスト管理者がテスト内容を指示(1)、(2)し、その指示に基づきテスターがテストを行います。そして、自動で収集されたテスト活動データを分析し、さまざまなデータモデルで可視化することで、テスト管理者が充足性を判定したり、追加のテストを指示したりすることを可能にします。例えば、図4、5に示すようなシーケンス図、画面遷移図といったモデルで可視化することが可能です。図6に示すように画面遷移図で特定の画面遷移に着目し、着目した画面遷移時の入力パターンの一覧を確認することもできます。これにより、テストすべき個所を選択し、そこに集中することで、効率良くバグを狙い撃つテストを可能とします。
(3) テスト活動データの活用
テスト活動データから、ページオブジェクトパターンの考え方に基づき、画面要素のロケータをモジュール化したテストスクリプトを自動生成(3)します。これにより、アプリケーションに修正があった場合でもテストスクリプトの保守が容易になり、手間をかけずに回帰テストを自動化することを可能とします。

到達点と今後の展望

私たちは、テスト活動データの分析に基づくテスト技術の第一人者となり、SI業界における旧来のテストを変えていきたいと考えています。現在、事業会社との共同実験でLatteArtの適用評価を行っており、開発現場からは好感触を得ています。また、LatteArtの技術については国内の学会における発表でも高い評価を受け、複数の賞をいただくことができました。本稿で紹介したテスト活動の分析と可視化、テストスクリプト自動生成のほかにも、以下に例をあげるように、LatteArtにより自動収集して蓄積したテスト活動データを活用することで、さまざまな研究の方向性が考えられます(4)。
•テスト推薦:過去のテスターがどのようなテストを行ったときにバグを発見できたかを分析することで、バグを発見できる可能性の高いテストを自動推薦できるようにする。
•テスト教育:テスト上級者のテスト活動データを教材として活用する。また、複数のテスターのテスト活動データを分析、比較することで、テストスキルの測定を行えるようにする。
•テスト以外の領域への応用:テスト活動データから、テスト対象ソフトウェアの仕様を復元したり、マニュアルの自動生成をしたりする。
私たちは、このような研究を、NTTグループに閉じず、NTTグループ外の企業、大学とも連携しながら、産学のさまざまな知見を持ち寄り進めていくことで、LatteArtを中心としたテスト変革、ソフトウェア開発変革のエコシステムを育てていきたいと思っています。そのために、LatteArtについてはオープン化なども検討し、広く技術の普及を行っていきたいと考えています。開発現場からのフィードバックによって技術を磨きながら、究極的なゴールとしては、収集した大量のテスト活動データを用いることで、AIが自動でテストを行うような世界をめざし、一歩一歩着実に研究開発を進めていきたいと考えています。

■参考文献
(1) 熊川・峯尾・丹野・切貫・倉林:“SONAR Testing 効率と客観性を両立した新たなテスト手法,”日本科学技術連盟 ソフトウェア品質シンポジウム2019, 2019.
(2) H.Kirinuki, T. Kurabayashi, H. Tanno, I. Kumagawa: “Post­er: SONAR testing – novel testing approach based on operation recording and visualization,”ICST 2020, pp. 410-413, Porto, Portugal, 2020.
(3) 切貫・丹野:“手動テストのログを用いた有用なEnd-to-Endテストスクリプトの自動生成,”ソフトウェアエンジニアリングシンポジウム2020論文集, pp. 106-114,2020.
(4) 峯尾・切貫:“SONAR Testing ~新しいテスト手法の今後の展望~,”日本科学技術連盟 ソフトウェア品質シンポジウム2020, 2020.

(上段左から)丹野 治門/切貫 弘之/安達 悠
(下段左から)生沼 守英/村本 達也

私たちはテストを飛躍的に効率化することをめざし、テスト活動データを分析してバグを狙い撃つテスト自動化技術の研究開発を進めています。今後も、開発現場のフィードバックを得ながら技術を磨いていきます。

問い合わせ先

NTT ソフトウェアイノベーションセンタ
ソフトウェア開発技術プロジェクト
TEL 03-6712-9638
FAX 03-6712-8372
E-mail iso-tool-support-p-ml@hco.ntt.co.jp