V字の左端でテストで品質を作り込む

##1. はじめに
[V字モデル](https://www.google.co.jp/search?hl=ja&as_q=V字モデル)は品質を作り込む工程と品質を確認する工程をそれぞれV字の左右に配置したものです。[JaSST'17 Tokyo 招待講演](http://jasst.jp/symposium/jasst17tokyo/report.html#invitation)の[「品質保証活動の本質」](http://jasst.jp/symposium/jasst17tokyo/pdf/A7.pdf)によると「V字モデルに基づく管理体系の構築、普及が1980年代の品質保証活動の一つ(p.21)」として紹介され、少なくともその頃から利用されていたようです。

ところで

- 設計の役割はV字の左側で品質を作り込むこと
- テストの役割はV字の右側で品質を確認すること

ときれいに左右に分けられるものでしょうか？

##2. 当たり前品質
2018年10月25日に出版された[ソフトウェア品質保証の基本](https://www.amazon.co.jp/dp/4817196572)から当たり前品質の解説を以下に引用します。

> 物理的に充足されていても, 大した満足度を顧客に与えない一方で, 物理的な充足に欠けると大きな不満足感を与えるような品質要素である. 機能は十分であるが信頼性に欠けるような場合や, 同業各社はそろって提供している機能がないというような場合が相当する. (p.29)

また、あとのページでは

> 品質保証の立場からは明示的な要求がない当たり前の品質特性についてもぜひ導出しておきたい.
> 
> ソフトウェアを使用する顧客が特定できる場合は, その顧客に対するインタビューや過去のトラブル事例などから必要な当たり前品質特性を導出する. 顧客が特定できないパッケージ製品などは, 市場での競合製品やサービスとの比較によって, 顧客が暗黙的に必要と感じている品質特性を導出する. (p.47)

と導出手順をあげ、信頼性を題材に[FTA](https://www.google.co.jp/search?hl=ja&as_q=FTA)や[FMEA](https://www.google.co.jp/search?hl=ja&as_q=FMEA)が紹介されています。競合製品やサービスとの比較に触れているのはユニークと思います。

##3. ベンチマークテスト
顧客に対するインタビューは例えば[JaSST'17 Niigata](http://jasst.jp/symposium/jasst17niigata/report.html)で「ユーザエクスペリエンスの要素とプロセス——UX/UCD概論」が取り上げられたり、過去のトラブル事例の分析は「不具合分析」、競合製品やサービスとの比較は「[ベンチマークテスト](https://www.google.co.jp/search?hl=ja&as_q=ベンチマークテスト)」で、いずれもSQAやテストエンジニアの出番な感じがしますよね？

ここで、ユーザーインタビューは「[ユーザビリティエンジニアリング(第2版)―ユーザエクスペリエンスのための調査、設計、評価手法―](https://www.amazon.co.jp/dp/4274214834)」が、不具合分析は「[組込みソフトウェア開発における品質向上の勧め[バグ管理手法編]](https://www.ipa.go.jp/sec/publish/tn12-005.html)」が参考書の一例として挙げられますのでそちらに譲り、ベンチマークテストにフォーカスします。

###3.1 ベンチマークテストとは
まず、ベンチマークテストがどのように解説されているかを調べました。

[ベンチマークテスト](http://yougo.ascii.jp/caltar/%E3%83%99%E3%83%B3%E3%83%81%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%86%E3%82%B9%E3%83%88)([ASCII.jpデジタル用語辞典](http://yougo.ascii.jp/caltar/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8))
> べんちまーくてすと 【ベンチマークテスト】 Benchmark Test 
コンピューターのハードウェアやソフトウェアの性能を、他社の製品と比較して評価する製品テストのこと。単にベンチマーク（基準という意味）とも呼ばれる。評価用のプログラムを使って、同じ条件下で基準となるテストを行い、その処理速度を数値化して性能を測定する。 

[ソフトウェアテスト標準用語集 日本語版 Version 2.3.J02](http://jstqb.jp/dl/JSTQB-glossary.V2.3.J02.pdf) p.53
> ベンチマークテスト（benchmark test）：
> (1)測定や比較のベースとなる標準。
> (2)コンポーネントやシステム同士の比較をするためのテスト、又は、(1)の標準と比較するためのテスト。

以下の書籍にはベンチマークテストは載っていないようです[^1]。

- [ソフトウェア品質保証 入門](https://www.amazon.co.jp/dp/4817192631)
- [ソフトウェア品質知識体系(SQuBOK)ガイド第2版](https://www.amazon.co.jp/dp/4274505227)
  - プロダクトの比較という意味でのベンチマークテストはありませんでした[^2]。

ベンチマークテストというと一般的には[性能テスト](https://www.google.co.jp/search?hl=ja&as_q=性能テスト)を指すようですが[JSTQB](http://jstqb.jp)では性能に限定せず比較するためのテストを指します。また、これ以上の踏み込んだ説明はこれといってないようです。

###3.2 ベンチマークテストの事例
パソコンのCPUやグラフィックカードのようなハードウェアの性能、あるいはデータベースやウェブブラウザの処理速度といったソフトウェアの性能に着目したベンチマークテストはググると見つかるものの、性能以外の事例となると極端に少ないようです。

筆者がググって見つけたものとして例えば[アリオン株式会社](https://www.allion.co.jp)の[技術ブログ](https://www.allion.co.jp/technical-blog/)に掲載されている「[スマートフォンのユーザー・エクスペリエンス最適化検証―カメラ編](https://www.allion.co.jp/smartphone-ux-validation-4/)」があります。ハードウェア寄りの記事ですがUXも取り上げているのは珍しいと思いました。貴重な記事を公開されていてありがたいです。

###3.3 ベンチマークテストの特徴
ベンチマークテストはSQuBOKガイド(第2版)でさえも取り上げておらず、また、性能以外となるとほとんど事例も出てこないためオーソライズされた解説はないようです。そこで筆者の考えるベンチマークテストの特徴を以下に挙げます。

- テストは仕様をインプットにするものと思いがちですが競合製品やサービスの仕様書は一般には入手できないため、ベンチマークテストは競合製品やサービスそのものをインプットとし、テストのアウトプットが要件や仕様のインプットになります。
- テスト内容が事前にすべて決まるとは限らず比較対象を学習しながら実施するのは探索的でもあります。

###3.4 ベンチマークテストとSQA
ベンチマークテストは要件や仕様を決めるために設計が行うものという感じがしますが以下のような理由によりSQAにとっても必要な取り組みと考えられます。

- お客様の比較の土俵に上がるものは自社プロダクトに限らず押さえておくべき
- ベンチマークテストに投入するテストツールの開発は品質技術の開発である
- ソフトウェア品質保証の基本に「品質保証の立場からは明示的な要求がない当たり前の品質特性についてもぜひ導出しておきたい」とあるように当たり前品質の導出をSQAは期待されている

また、筆者は以前[ソフトウェア品質保証のメモ](https://qiita.com/pbjpkas/items/8064523ea5170adf5678)で「[SQAのスコープはソフトウェア開発の全工程](https://qiita.com/pbjpkas/items/8064523ea5170adf5678#51-sqa%E3%81%AE%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97)」と書いたのですがその理由の一つにこのV字の左端からスタートするベンチマークテストがあります。

##4. おわりに
魅力品質や一元的品質だけでなく、当たり前品質が満たされることや時間の経過とともにレベルアップすることもソフトウェアの大事な価値です。テストはV字の右側で品質を確認するだけでなく左端のこれから要件を決めるという段階から品質の作り込みに重要な役割を担っています。

[^1]: 見落としていたら教えていただけますと幸いです。
[^2]: ベンチマーキングについて「業界内外の優れたベストプラクティスと自組織のプロセスのパフォーマンスを比較し、そのギャップを分析することにより、プロセスを見直す一連の活動である。(p.155)」という解説があります。