ソフトウェア品質シンポジウム2023

暗黙的になりがちな開発仕様パターンを活用してモデルベーステストを改善する
発表資料
2023年9月7日（木）○蛭田 恭章¹，須原 秀敏¹ ，藤田 真広¹，西 康晴²¹ 株式会社ベリサーブ， ²電気通信大学 大学院情報理工学研究科© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

目次
1. 本研究の背景と狙い
2. 実施概要
3. パターン蓄積フェーズ※パターン = 暗黙的になりがちな仕様に共通するパターン

4. パターン活用フェーズ
5. 考察
6. その後の取り組み© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

11. 本研究の背景と狙い© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

2

モデルベースドテスト（MBT）に注目した背景➢ ソフトウェアテストや品質保証に対して、ソフトウェアのリリースのスピードを保ちつつも、品質を向上するための貢献（自動化など）が求められている◼ World Quality Report 2021-22(Capgemini)では、2020年から以下の調査項目が追加されている◆ ソフトウェアリリースのスピードを保ちつつも品質を向上させる◆ 高品質を達成するためにチーム全員をサポートする◆ QAやテストプロセスを自動化でよりスマートにする➢ 上記要求に対応する技術として、MBTに注目した◼ MBTはテスト設計仕様として表したMBTモデルから直接テストケースを自動生成する技術であり、テスト実行まで自動化されることも多い◼ またアジャイル開発などでは、ソフトウェアの変更に伴う動作保証を目的としたテストが、高い頻度で自動で実施される◼ MBTによる自動化のテストを拡大することは、頻繁に実行されるテストの動作保証の範囲を広げられると考える

テスト設計

UML/SysMLなどのモデル表現の開発仕様をMBTの入力することも多い

自動生成

MBTモデル

テスト自動実行

テストケース

開発仕様© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

3

MBTモデルにはどのようなものがあるか？
➢ MBTモデルには、さまざまな表現方法があるが、どんな側面をテストするかによって使用するモデルも異なる➢ 一般的に使用されるMBTモデルを示す

状態遷移図

アクティビティ図

シーケンス図デシジョンテーブル© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

4本発表で対象にするMBTの課題➢ MBTの性質上、テストすべきことは明示的にMBTモデルに盛り込む必要がある➢ アジャイル開発では重要なところは仕様モデルを描くこともあるが、どうしても暗黙的な仕様は出てくる➢ 暗黙的な仕様をMBTモデルに盛り込むことで、自動テストでの動作保証の範囲が広がり、開発スピードも保ちつつも、品質を向上することへの貢献を期待できる➢ しかし、暗黙的な仕様を捉えるには経験やスキルが必要になるため容易ではない
明示的な仕様

暗黙的な仕様開発仕様

MBTモデルに盛り込む

MBTモデル

MBTで生成可能なテストケースが増える

テストケース

自動テストにて動作保証範囲が広がる

本発表で対象にするMBTの課題

MBTモデル開発時、暗黙的な仕様をどう把握するか© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

5

MBTモデルから漏れた暗黙的な仕様の例➢ WebAPIのticket-statusというパラメータに関する仕様
ticket-statusとパラメータに対して、openとin_progressとdoneという値を指定できることが分かる
この仕様から、仕様内の各値と仕様外の値を指定する条件を盛り込んだMBTモデルを開発する

ticket-statusは複数の値を指定できる仕様も存在した！

暗黙的な仕様© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

左記の仕様があるのであれば、ticket-statusに以下のように複数の値を指定した場合の条件をMBTモデルに盛り込む必要がある- in_progress, done
- open, in_progress, done
ソフトウェア品質シンポジウム2023

6

本研究の狙い➢ 仕様に書かれていないけど、テストケースには書かれていることがある➢ テストエンジニアは暗黙的になりがちな仕様の共通的なパターンを知っているのではないかと考えた➢ そして、そのようなパターンを蓄積し、活用できれば暗黙的な仕様を盛り込んだMBTモデルを開発でき、結果的にテストケースを増やせて、動作保証範囲を拡大できるのではないかと考えた➢ 今回の取り組み◼ パターン蓄積フェーズ◆ 開発仕様にて暗黙的になりがちな仕様に共通するパターンを蓄積する◼ パターン活用フェーズ◆ 暗黙的になりがちな仕様に共通するパターンを活用して、新たなMBTモデル開発、テストケース生成ができるかを試す© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

7

2. 実施概要© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

8

今回の取り組みで実施した概要➢ パターン蓄積フェーズ◼ WebAPI仕様を対象に、過去に作成された4プロジェクトのテストケースを分析する◼ 仕様書にはなくテストケースにはあった仕様を、暗黙的な仕様と捉えて抽出する◼ その中で共通性のあるものをパターンとして蓄積する➢ パターン活用フェーズ◼ パターン蓄積フェーズとは別の２プロジェクトにてパターンを活用したテスト設計を実施する◼ パターンを使うことで新たなMBTモデルの開発、新たなテストケース生成ができるかを確認する© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

9

WebAPI仕様のフォーマット
➢ 今回の取り組みの全てのプロジェクトでWebAPI仕様はSwaggerにより形式的に表現されていた◼ Swaggerは「Open API Initiative」という団体が推進しているRESTful APIのインターフェイスの記述をするための標準フォーマット◼ https://swagger.io/specification/(swagger.yaml)(Swagger UI)

Data type(=string)やRequiredなどが形式的に表現されている© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

10

3. パターン蓄積フェーズ© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

11

パターン蓄積の流れ
1. 過去のテストケース（テストスイート）を収集する◼ プロジェクト数：4◼ WebAPIメソッド数： 19 (GET:10, POST:6, PUT:1, DELETE:2)◼ テストケース数：268
2. テストケースの内容と入力となったWebAPIの開発仕様を確認する
3. Swaggerにて形式的に明記されているものを「明示的な仕様」、そうでないものを「暗黙的な仕様」に振り分ける◼ 実際暗黙的な仕様に振り分けられた中には以下の仕様が存在した◆ Swagger以外の文書で仕様の補足が記載されている◆ 開発者とのQ&Aに記載されている

4. 「暗黙的な仕様」のうち共通性のあるものを暗黙的になりがちな仕様に共通するパターンとする© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

12暗黙的な仕様とした例
既存のテストケースを分析した結果、暗黙的な仕様とした例を以下に示す➢ パラメータ間に関係性があった例◼ maxPriceはminPriceより大きい値をValueとして指定する必要あり➢ 指定する値に制約があった例◼ Request Bodyで指定するKey ”id” において、 Request Body内で重複するidは指定不可➢ API利用の前提として条件があった例◼ 該当API利用の際は以下のパーミッションが必要◆ PROFILE◆ USER_LIST© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム202313暗黙的な仕様の共通性
以下の例にある通り、暗黙的な仕様で共通性のあるものをパターンとして蓄積した暗黙的になりがちな仕様に共通するパターン共通性

Swaggerに記載された仕様

２つのパラメータの値において大小関係を持つ必要があるという制約を持つ

maxPriceの値はminPriceの値より大きい値で指定する

暗黙的な仕様パラメータ- maxPrice- minPrice- …

© 2023 VeriServe Corporation

パラメータ間の大小関係

会社名・製品名・サービス名は、各社の登録商標または商標です。

endの値はstartの値より大きい値で指定する

パラメータ- start- end- …

maxCountの値はlimitの値より大きい値で指定するパラメータ- maxCount- limit- …
ソフトウェア品質シンポジウム2023

14

パターンを整理し「前提」と「関連」で分類➢ Swaggerに定義された仕様の「前提」に関わるパターン◼ Swaggerで定義する仕様のスコープ外に当たるため暗黙的な仕様になる可能性がある➢ Swaggerに定義された仕様間の「関連」のパターン◼ Swaggerで形式的に表現しきれないため、暗黙的な仕様になる可能性がある

関連
前提・パラメータ間の関連・関連を考慮した値指定 など

・API利用の前提条件
・パラメータ指定の前提条件 など
Swagger© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

15

WebAPI仕様にて暗黙的になりがちな仕様に共通するパターン➢ 今回は以下の17パターンを蓄積した ※以下ツリーの最下層の項目をカウント『前提』仕様のパターン

6パターン

API利用の前提条件

パラメータ使用の前提条件
APIのアクセス制限『関連』仕様のパターン

11パターン※以下ツリーで表現されたパターンの他に、仕様更新前後の関連として3パターン関連を考慮した
値指定
複数値指定可能(DBに)存在する値の要指定

特定パラメータに依存した
値指定
ユニークな値を要するKey

権限

パラメータ間の関連
リクエスト頻度
パラメータの要同時指定

API利用のコンテキスト© 2023 VeriServe Corporation

パラメータ間の親子関係

過去バージョンのAPI有無

パラメータ間の排他関係

利用者属性

パラメータ間の大小関係

会社名・製品名・サービス名は、各社の登録商標または商標です。

16

4. パターン活用フェーズ© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

17従来法とパターン活用法によるテスト設計➢ 従来法、パターン活用法でそれぞれテスト設計(MBTモデル開発～テストケース生成）を以下のAPIで実施した◼ テスト設計方法◆ 従来法⚫ Swaggerの仕様のみを入力としテスト設計を実施◆ パターン活用法⚫ パターンを活用することで把握できた暗黙的な仕様も踏まえてテスト設計を実施◼ テスト設計対象のAPI◆ イベントを更新するAPIのPUTメソッド⚫ 指定するパラメータ数:4, Request Bodyで使用するKeyの数:25◆ 指定した範囲のスコアの値を取得するAPIのGETメソッド⚫ 指定するパラメータ数:21, Request Bodyで使用するKeyの数:0

テスト設計者
テスト設計経験：約2年
APIテスト経験：約1年
対象ドメイン経験：約1年© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

18

パターン活用法の進め方➢ テスト設計者は以下の内容でパターンを活用した◼ 各パターン(17パターン)を基にして仕様を調査した◆ パラメータが複数ない、新規開発のAPIなどの場合は調査不要なパターンも存在した◼ 調査方法として、以下の順で進める
1. Swagger内に形式的ではないが、コメントとして仕様が記載されていないかを確認
2. Swagger以外の文書（開発者との打ち合わせ議事録など含む）に仕様が記載されていないかを確認

3. 開発者に問い合わせて確認◼ 入手できた情報（仕様）を基にMBTモデルを開発し、テストケースを生成する© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

19従来法とパターン活用法の比較➢ 従来法とパターン活用法で動作保証範囲を比較した➢ 動作保証範囲はMBTモデル数とテストケース数で比較した
テストケース数（件）MBTモデル数（個）従来法
イベントを更新する
APIのPUTメソッド

19

指定した範囲のスコアの値を取得する
APIのGETメソッド

17

パターン
活用法

新たに開発した 既存MBTモデル
MBTモデル数の変更数

21(約11%増)

20(約18%増)

従来法

2

176

3167

パターン
活用法

新たに開発した 変更MBTモデル
MBTモデルから から新たに生成された
生成された
テストケース数 テストケース数

84(約11%増)

77(約15%増)7182

以上の通り、パターン活用法は従来法と比較して、MBTモデル数、テストケース数が約11～18%増加する結果となった© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

20

新たに開発したMBTモデルの例
Swaggerの記載（指定した範囲のスコアの値を取得するAPIのGETメソッド）

従来法で作られたMBTモデル

from integer
minimum: 1
maximum: 100
from, toのパラメータ単体で、最小、最大の値の範囲を意識したMBTモデル

to integer
minimum: 1
maximum: 100「パラメータ間の大小関係」というパターンを活用し、暗黙的な仕様を調査する

パターン活用法で新たに作られたMBTモデル
パターン活用によりfrom, toとパラメータを組合せたMBTモデルを新たに開発する『from < to』という暗黙的な仕様（制約）を捉える© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム202321

従来法で作られたMBTモデルに変更を加えた例
Swaggerの記載（イベントを更新するAPIのPUTメソッド）

event{
event_id integer
event_name string}

従来法で作られたMBTモデル

Request Bodyに指定するevent数を意識したMBTモデル

パターン活用法により変更を加えたMBTモデル「ユニークな値を要するKey 」というパターンを活用し、暗黙的な仕様を調査する『event_id』はRequest Body
内で重複した値の指定は不可という暗黙的な仕様（制約）を捉える© 2023 VeriServe Corporation

パターン活用によりevent_idが重複する場合、しない場合を条件として追加する

会社名・製品名・サービス名は、各社の登録商標または商標です。

新たに生成されるテストケース
ソフトウェア品質シンポジウム2023

22

5. 考察© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

23

考察➢ パターン活用フェーズで見つかった暗黙的な仕様について※パターン = 暗黙的になりがちな仕様に共通するパターン◼ 仕様記述について◆ 今回把握できた暗黙的な仕様のうち、Swagger内にコメントで記載されていた仕様も存在した⚫ 例で紹介したevent_idに対する「ユニークな値を要するKey」が該当する⚫ Swaggerで形式的記述するには制限があるので、コメントなどで制約等の仕様を補っていると考えられる◆ 「パラメータ間の大小関係」については文書に記述されておらず、開発者に問い合わせることで把握した⚫ 例で紹介したfrom/to以外にも、min/maxやstart/endなどが該当した⚫ 直感的に大小関係を認識できるパラメータだったので、記述を省くことが多いと予想される◼ 不明な仕様◆ 「特定パラメータに依存した値指定」というパターンをきっかけに把握した暗黙的な仕様について開発者に質問した◆ 回答結果は、明確な仕様が分からず、「動作としてはおそらくエラーになるはず」という内容だった◆ その後、テスト実施した結果の振る舞いを開発者に伝えるということがあった◆ 仕様が明確でない場合、テスト実施した結果から仕様を見直すことも考えられる◆ その場合でもMBTにより仕様変更の対応が容易になることも期待できる© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

24

考察➢ テスト設計者へのヒアリングを通して分かったこと※パターン = 暗黙的になりがちな仕様に共通するパターン◼ 時間的な側面◆ パターン活用法でも、従来法と比較をして大幅に時間がかかるようなことはなかった◆ これまでも経験に基づきに暗黙的な仕様を調査していたため、全体的な作業時間として増える事はなかったと思われる◆ パターンにより何を意識して調査するかが明確になった点が良かったというコメントをもらった◼ パターン活用の難易度◆ 作業開始時にパターンの解釈について質問をされることがあり、その場で追加説明を行った◆ パターン活用により明らかにできた仕様もあったが、見逃している仕様もあるかもしれないというコメントもあった◆ 今回正しくパターンを活用できていたかの側面では検証できていないため、その点は今後の課題である© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

25

6. その後の取り組み© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

26

その後の取り組み➢ WebAPIテスト◼ 自動テスト実行にどうつなげるかの検討➢ パターンの拡張◼ テストケースを生成するロジックとしてのパターン検討◼ 状態遷移図/アクティビティ図などのモデルに対するパターンの検討© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

27

WebAPIテスト

自動生成

2022年

テスト
スクリプト

自動テスト実行2023年➢ 2023年は自動テスト実行可能なテストスクリプトの自動生成に取り組む➢ 現状◼ 一部のテストケースは自動テスト実行までつなげることに成功している◼ 以下の課題があり現在はこの解決に向けて取り組み中◆ 特定条件のテストデータを要するテストケース◆ テストケースの条件を満たすRequest Bodyの指定を要するテストケース© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

28

パターンの拡張➢ モデルで表現されたテスト対象が、このような特徴を持っていた場合に、➢ このようなテストケースを生成するという一連のロジックをパターンとして整理する【特徴】
Request_Yを割り込める【特徴】履歴状態を持つ

履歴状態の遷移を網羅的に確認したい• 履歴なしの場合の遷移を確認• 履歴ありの場合は取りうる各状態での遷移を確認する© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

Request_Yを割り込むタイミングを狙う• Request_Xの処理開始直後• Request_Xの処理終了直前
ソフトウェア品質シンポジウム2023

29

© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023

30

ご清聴ありがとうございました© 2023 VeriServe Corporation

会社名・製品名・サービス名は、各社の登録商標または商標です。

ソフトウェア品質シンポジウム2023