日本ソフトウェア科学会第 35 回大会 (2018 年度) 講演論文集

継続的デリバリーにおけるテスト手法
加賀 洋渡

ビジネスの変化に素早く対応するため，迅速なソフトウェア開発が求められている．これに対してビルド，実行環境の準備，テストを自動で実施し，高頻度にソフトウェアを検証する継続的デリバリーが，品質担保の観点から注目されている．一方で継続的デリバリーでは，ソフトウェアの機能の追加/変更の度にテストを作成するため，テストの作成工数が大きい．そこで，本研究ではキーワード駆動を導入したテストプロセスを検討し，開発プロジェクトへ適用した．キーワード単位でのテストスクリプトの再利用を行うことにより，テストの作成工数の削減を図った．

The rapid software development is essential requirement because the provider must catches up businesstrend. In this situation, continuous delivery is focused that checks the quality with high frequency by automation build, deploy and test. On continuous delivery, the cost of test creation is high because the tests
are executed by the trigger that the software is added new function and modified. In this paper, we studied
the test process with keyword-driven test and applied to a development project for reduction the cost oftest creation.

装からテストによる不具合発覚までに時間を要する．

1 はじめにこのような従来の開発プロセスに対して，ソフト製品のリリースは，市場の要求に応えるために短ウェアを高頻度に検証する継続的デリバリー [1] が注いサイクルで行われる．一方開発においては，開発規目されている．継続的デリバリーは，ソフトウェアの模の増大から，開発工程に大きな工数を要している．

ビルド，実行環境の準備，テストを自動化し，ソフト品質担保と開発工数短縮を両立し，限られた人員で開ウェアの機能追加，変更のタイミングごとに品質を確発を進めるためには，開発プロセスの選定が重要と認する開発プロセスである．

なる．開発プロセスとして従来より用いられている

継続的デリバリーは高頻度に品質を確認できる一ウォーターフォールモデルは，仕様策定からコーディ方で，テストを自動化するためのテストスクリプトをング，テストを一連の工程として，それぞれの工程に作成する工数が大きい．そこで本研究では，継続的デ期間を設けて順番に実施する．

リバリーにおける，テストスクリプト作成工数の削減

ウォーターフォールモデルは，各工程を予め決定さを検討する．プロジェクト内のテストスクリプトの再れた期間で順番に実施するため，テスト可能な実行で利用を促進することで，テストスクリプト作成工数のきるソフトウェアが出来上がるまでに期間を要する．

削減を実現する．

このため，実行できるソフトウェアを確認後，仕様にテストスクリプトの再利用を促進するためには，プついて再検討することができず，仕様変更に柔軟に対ロジェクト内で用いるテストスクリプトの記述ルール応できない．また，ソフトウェアの品質を確認するテを統一する必要がある．そこで，プロジェクト内のテスト工程が全体の工程の中の後半になるため，機能実ストスクリプトの記述方法としてキーワード駆動 [2]Test Method on Continuous Delivery.
Hiroto Kaga, 日立製作所研究開発グループ, Dept. Research & Development Group, Hitachi, Ltd..

を採用する．また，プロジェクト内でテストスクリプ
トの記述方法と併せて，作成フローを統一するために，テストプロセスを策定する．以降に，継続的デリ理をキーワードとして定義し，キーワードの並び替えでテストを表現し，テストを行うテスト手法である．キーワード駆動に対応した OSS のテストフレー
ムワークとして，Robot Framework がある．RobotFramework はキーワード駆動で記述されたテストを実行することができる．Robot Framework を導入し，図1

継続的デリバリー環境

キーワード駆動でテスト記述することで，テストスクリプトをキーワードで共有することが可能となる．

バリー環境，キーワード駆動，テストプロセスの策定

テストの一例としてプロダクトに IO するテストの手について説明する．

順を示す．
手順 1. ターゲットに接続する

2 継続的デリバリー環境

手順 2. ターゲットに IO する
手順 3. ターゲットを切断する

テストを実施する継続的デリバリー環境について説明する (図 1)．継続的デリバリー環境はビルド，デプ

上記のテストのキーワード駆動によるテストスク

ロイ，テスト，結果確認の大きくに４つに分かれる．

リプトの記述を考える．上記テストを実施するためのビルドでは，Git に Push したソースコードに対して詳細処理は以下の通りになる．
手順 1. ターゲットに接続するビルドを実施し，バイナリを生成する．デプロイでは，デプロイツール (vagrant，ansible など) を用い

詳細 1.1. ホスト PC に SSH 接続するてビルドしたソフトウェア (ターゲット) を実行でき

詳細 1.2. ホスト PC にログインするる環境を構築する．テストでは，ターゲットに対して

詳細 1.3. ターゲットに iSCSI で接続する
手順 2. ターゲットに対して IO する

テストを実行する．結果確認では，テスト結果を確認する．開発者はソースコードを Push した後，自動で

詳細 2.1. IO するブロック数を計算する

デプロイ，テストされた結果を確認する．テストで実詳細 2.2. IO する

行されるテストスクリプトを Git に Push する．テス

詳細 2.3. 正しく IO できたかバイナリを比較する

ト実行時には，Git より対象のテストスクリプトが呼手順 3. ターゲットを切断する

び出される．

詳細 3.1. ターゲットの iSCSI 接続を切断する

テストスクリプトは各開発者が個別に実装すると，

詳細 3.2. ターゲットを削除する

同様の機能を重複して実装する可能性がある．同様の機能を共有することで，テストスクリプトの作成工数

テストスクリプト作成者は詳細処理の実装を手順を削減する．そこでテストスクリプトを共有する手法でまとめ，手順をキーワードとして他の開発者に提として，キーワード駆動を適用する．次章でキーワー供する．上記の例では，プロダクトに接続する，プド駆動について説明する．

ロダクト対して IO する，プロダクトを切断する，の3 つをキーワードとする．テストの手順をキーワード3 キーワード駆動として担当者間で共有する．これにより，担当者は詳

テストスクリプト記述方針をプロジェクト内で統一

細処理を理解していなくてもスクリプトを共有する

し，対応したテストフレームワークを導入することことができる．キーワード駆動によるテストスクリプ

で，テストスクリプトの共有を推進する．テストスク

トの実装の例を (Listing1) に示す．

リプト記述のベストプラクティスとして，キーワードListing 1駆動が知られている．
1

キーワード駆動とは，テストに対応する手順や処

2

キーワード駆動による記述例*** Test Cases ***Linux IO Test

345Connect Storage# test procedure 1Write# test procedure 2
Disconnect Storage # test procedure 367891011121314151617181920212223242526*** Keywords ***Connect Storage# detail 1.1
Open Connection( host IP )# detail 1.2
Login( user name )( password )# detail 1.3
Execute command
iscsiadm login ( iscsistorage IP )Write
# detail 2.1
Evaluate( file size ) / 512# detail 2.2
Execute commanddd( block size )(directory )# detail 2.3
Execute commandcmp( binary 1)(binary 2)
Disconnect Storage# detail 3.1
Execute command
iscsiadm logout ( iscsi
storage IP )# detail 3.2
Execute command
iscsiadm delete ( iscsistorage IP )図2

キーワード検索システム

キーワード検索システムは，開発者がキーワードを確認するために，個々のファイルの中身を確認せずに済むように，予めキーワードが記述されたファイルを解析し，キーワードの一覧表を作成する．Robot

Framework 向けの解析ツールである，robot.parsingを利用する．これを利用することで，キーワードファイルに記述された下記項目が抽出される．これらは開発者がキーワードを再利用する上で必要な情報である．

4 テストプロセスの設計

Keyword Name： キーワードの名前

テストスクリプト作成工数の抑制の課題を解決す

Documentation： ユーザが記述したキーワーるアプローチとして，テストスクリプトの再利用に関ドに関する説明する手順を追加し，自動テスト向けプロセスを設計

Argument： キーワードの引数する．開発者がテストスクリプト部品として，再利用

Return： キーワードの返り値できるキーワードがあるかを把握するために，キー

Source File： キーワードが記述されているファ

ワード実装前に既存のキーワードを確認する手順をイル名追加する．次に，テストスクリプトを作成し始めてかキーワード検索システムは，上記解析ツールを用ら完成するまでの間に，他の開発者が同一処理を重いて Robot Framework のスクリプトを解析し，解複実装してしまうことを考える．これを防ぐために，析結果を一覧として表示する．構築したキーワード

キーワード実装が完了する前にキーワード名を登録

検索システムの表示例を (図 2) に示す．左の列から，する手順を追加する．さらに，キーワード実装後に，キーワードの名前，説明，キーワードの引数，返りキーワード名と，実際に実装した処理の内容との乖離値，キーワードが記述されているファイルを示し，こを防ぐために，キーワードの実行が確認できた後に，れらを一覧として表示している．これにより，キーキーワード名を見直す手順を追加する．これらの手順

ワードが記述されているファイルの中身を確認せずには，人手で行う必要があるため，開発者が遵守しやす済み，キーワードの検索が容易になる．

い手順にする必要がある．これら手順の内，キーワードの確認について，現状，所望の処理が実装されてい5 結果と考察るかを確認するには，テストスクリプトの中身を確認

前章で設計したテストプロセスを示す (図 3)．

する必要がある．各テストスクリプトの中身の確認

開発者はまずテストスクリプトのファイルを用意

は，その他の手順に比べ工数を要するため，プロセスする．次に，キーワード検索システムにて，所望の遵守の障壁となる．これに対して，キーワード検索のキーワードが既に存在するか確認する．存在する場合容易化のためのキーワード検索システムを構築する．

は，キーワードを用いてテストスクリプトを作成す得られない場合には，キーワードの確認に戻り，所望の結果が得られるまで繰り返す．
設計したプロセスにより，プロジェクトのテストスクリプト共有促進した．これによりテストスクリプ
トの共通キーワードが 114 件作成された．テストス
クリプトの全体の内，共通キーワードは 1743 回再利用されている．共通キーワードは 1 件当たり平均で0.08 人日で作成されており，プロジェクトとして 7.6人月の削減の見積もりを得た．

6 まとめと今後の課題
ビジネスの変化に素早く対応するため，迅速なソフトウェア開発が求められている．これに対してビルド，実行環境の準備，テストを自動で実施し，高頻度にソフトウェアを検証する継続的デリバリーが，品質担保の観点から注目されている．継続的デリバリーは高頻度に品質を確認できる一方で，テストを自動化するためのテストスクリプトを作成する工数が大きい．
そこで本研究では，継続的デリバリーにおける，テストスクリプト作成工数の削減を検討した．テストス
クリプトの共有を促進するために，キーワード駆動を取り入れたテストプロセスを策定した．今後の課題として，デバッグ支援のためのログ解析がある．継続的デリバリー適用後，テストが自動で日々実行されテスト結果が大量に出力されるため，これらテスト結果の集計や解析の支援が必要となる．これに対し，
図3

テストプロセス

ログ解析ツールを活用することで，大量のテスト結果の解析を容易化できると考えられる．

る．キーワードが存在しない場合は，これから作成するキーワードを先に登録する．その後，キーワードを参 考 文 献作成する．テストスクリプトが作成できた後，テスト[1] Jez Humble：継続的デリバリー，KADOKAWA，
ISBN：978-4048930581(2012.03)[2] 29119-5-2016 - ISO/IEC/IEEE International
Standard - Software and systems engineering – Software testing – Part 5: Keyword-Driven Testing
http://standards.ieee.org/findstds/standard/291195-2016.html

スクリプトを Git へ Push する．次にテストスクリプ
トを実行し，結果を確認する．所望の結果が得られた
場合には，テストスクリプトに用いたキーワード名が，実際の役割を示しているかを確認し，示していない場合には，キーワード名を変更する．所望の結果が