ISTQB「性能テスト担当者」シラバスに登場しない性能テストの話

## 1. はじめに
[ISTQBテスト技術者資格制度 Foundation Level Specialist シラバス 性能テスト担当者 日本語版 Version 2018.J01](https://jstqb.jp/syllabus.html#syllabus_foundation_specialist_performance)（以下「シラバス」）が2022年4月16日に公開されました。性能テストのベースラインが整備され、性能テストを依頼する側、実施する側のどちらも役立つと思います。

ただ、組み込み系からすると以下の点でちょっと物足りなさがありますので補ってみます。
- 性能要件として「所定の時間どおりに機能が動作すること」を求められることがあるもののそういった記述がない
- 代表的な通信プロトコルで取り上げられているものがインターネットに関するものに片寄っているように見える

## 2. 所定の時間通りに機能が動作するとは
例えば写真を撮るときにシャッターボタンを押下してから実際にシャッターが切れるまでのタイミングがばらばらだったり何回かに一回はそのタイミングが極端にずれるようだととっても撮影がしづらいですよね。

オートフォーカスの一眼レフカメラはシャッターボタンを押してから実際にシャッターが切れるまで2段階の遅延時間があり、後者の遅延時間をレリーズタイムラグと呼びます。

1. シャッターボタンを半押ししてピントが合うまでの時間
1. ピントを合わせた状態でさらにシャッターボタンを押し込んでから実際にシャッターが切れる時間

例えばキヤノンEOS-1D X Mark IIのレリーズタイムラグは最短で36msですが初期値は初代EOS-1から55msとなっていて[^1]最新機種のEOS-1を手にしたユーザがそれまでのEOS-1と同じ感覚でシャッターを切ることができます[^2]。この55msというのが大事で短くても長くてもダメというものです。性能要件としてはおそらく55ms±XXmsのように許容範囲を定めて品質管理されているものと思います[^3]。

シラバスに「時間効率性の評価は、最も一般的な性能テストの目的である。性能テストのこの側面では、コンポーネントやシステムが、指定された時間内に、指定された条件下で、ユーザーやシステムの入力に応答する能力を調査する。（p.11）」とあるのですが、レリーズタイムラグは指定された時間**内**ではなく、指定された時間**どおり**であることが重要な性能になります。また、この「時間どおり」「ばらつきが所定の範囲内であること」の性能についてはシラバスに言及がありませんでした。

## 3. 指定された時間どおりであることの性能テスト
ここでは以下の性能要件の架空のカメラを想定します。
1. レリーズタイムラグは100ms±5ms（合格範囲：95ms～105ms）
1. 連続撮影時の撮影枚数制限は20枚

ここで、連続撮影の枚数制限を解除してレリーズタイムラグを50回連続して測定した結果が以下のとおりだったとします。

| 回数 | 結果[ms] | 回数 | 結果[ms] | 回数 | 結果[ms] | 回数 | 結果[ms] | 回数 | 結果[ms] |
|------|----------|------|----------|------|----------|------|----------|------|----------|
| 1    | 100.7    | 11   | 104.3    | 21   | 104.7    | 31   | 104.9    | 41   | 104.7    |
| 2    | 101.0    | 12   | 98.9     | 22   | 101.5    | 32   | 97.0     | 42   | 99.7     |
| 3    | 100.1    | 13   | 102.4    | 23   | 101.3    | 33   | 101.8    | 43   | 100.7    |
| 4    | 99.6     | 14   | 100.7    | 24   | 99.2     | 34   | 101.5    | 44   | 98.7     |
| 5    | 100.3    | 15   | 99.9     | 25   | 99.9     | 35   | 102.1    | 45   | 102.3    |
| 6    | 104.1    | 16   | 103.9    | 26   | 103.9    | 36   | 104.9    | 46   | 104.9    |
| 7    | 99.1     | 17   | 101.0    | 27   | 98.0     | 37   | 99.7     | 47   | 99.2     |
| 8    | 100.4    | 18   | 98.2     | 28   | 101.7    | 38   | 98.3     | 48   | 100.6    |
| 9    | 102.5    | 19   | 102.0    | 29   | 98.6     | 39   | 100.4    | 49   | 99.8     |
| 10   | 100.9    | 20   | 101.7    | 30   | 102.2    | 40   | 101.7    | 50   | 102.0    |

Excelで集計すれば最小値97.0ms、最大値104.9ms、平均値101.2ms、中央値101.0ms、標準偏差2.0と一瞬で計算できます。ただ、表のままだと傾向まではよくわかりません。

## 4. 性能テストの結果はグラフにしてみよう
シラバスに「これらの情報の多くは表で表現できるが、グラフで表現することにより、データを見やすく、傾向を把握しやすくできる。（p.61）」とありますが性能テストの結果はグラフに描いてみることをお勧めします。以下に散布図とヒストグラムを示します。

![散布図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221758/802bf89d-5513-db8a-f9ec-6eeabde10688.png)
![ヒストグラム](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221758/ef029261-7d8d-1891-bb5a-b3fba3ab3647.png)

グラフを描くことで表を眺めていただけではわかりづらい規則性、周期性といった傾向に気づくことがあるのでそういう分析結果も一緒に報告されると受け取る方としては有難いです。傾向性が見つかるとそれが性能問題の解決の手掛かりになることがあります。

例えばこのカメラは6枚目、11枚目、16枚目、、、と撮影枚数が5枚増えるところでタイムラグが悪化していることがわかります。また、ヒストグラムを見ると100msを中心につりがね状を呈している分布と104ms～105msの2つの分布があることがわかります。シャッターのメカニカルな動作は100msを中心に動いていて、それとは別の要因でタイムラグが伸びている可能性が考えられます。

タイムラグが伸びている理由を調査するのは開発者の役目ですが、傾向性まで分析されているとこれが意図したとおりの動作であるかの判断の助けになります。

## 5. 通信プロトコル
この章では組み込み系の通信プロトコルの例としてごく身近にありふれているUSB（Universal Serial Bus）と、扱えるようになると性能テストを効率化できるSCPI（Standard Commands for Programmable Instruments）を取り上げます。

### 5.1 USB
シラバスに「通信プロトコルは、OSI（Open Systems Interconnection）モデルの階層で記述されることが多いが（ISO/IEC 7498-1 参照）、プロトコルによってはこのモデルから外れるものもある。（p.43）」とありますが[USB](https://www.usb.org/)はOSIモデルとは異なるモデルです。例えば[通信用語の基礎知識](https://www.wdic.org/)では以下のような[階層構造](https://www.wdic.org/w/WDIC/USB%20%28%E3%83%90%E3%82%B9%29#xE3x83x97xE3x83xADxE3x83x88xE3x82xB3xE3x83xAB)を示しています。
> 規格上は特に何層という名前は無いが、USBのプロトコル階層は上位層から順に、次のようになっている。
> - 実際のデータ (上位層)
> - パケット構造 (第4層)
> - フレーム構造 (第2‐3層)
> - 物理層 (第1層)

USBはホスト（PCやマイコンなど）⇔ターゲット（周辺機器）のデータの転送方式にコントロール転送、バルク転送、インタラプト転送、アイソクロナス転送があります。

|転送方式|特徴
|----|----
|コントロール転送|周辺機器接続時の機器認識などで使用される転送方式。
|バルク転送|プリンタ、スキャナ、カメラ、マスストレージデバイス、ネットワークインターフェースなど大量のデータかつ高信頼性を求められる用途で使用される転送方式。ハードウェアでエラー検出を行い、エラーが発生すると再送が行われる。
|インタラプト転送|キーボードやマウスなど小量のデータ転送で使用される転送方式。
|アイソクロナス転送|動画や音声のストリーミングなどリアルタイム性を求められる用途で使用される転送方式。エラーが発生しても再送が行われない。

バルク転送は「時間がかかっても正確」、アイソクロナス転送は「データが化けることがあるがリアルタイム」と真逆の特徴を備えています。シラバスで「システムの特定の部分を対象としたテストケースを適切に設計するには、プロトコルを理解する必要がある。（p.43）」とあるのは組み込み系も一緒です。

なお、USBのテストに[USBコンプライアンステスト](https://www.google.com/search?q=USBコンプライアンステスト)がありますがこれはハードウェアのテストです。テストモードのファームウェアを使用してUSBのバスに所定のテストパターンの信号を出力しコンプライアンステストに対応した計測機器で[アイパターン](https://www.google.com/search?q=アイパターン)を測定したりします。

### 5.2 SCPI
計測機器を制御する通信プロトコルを理解することは性能テストの自動化に役立ちます。特に1999年に制定され2003年より[IVI Foundation](https://ivifoundation.org)で保守されている[SCPI](https://ivifoundation.org/scpi/default.aspx)はさまざまな計測機器の機能を標準的に扱えるようにしたコマンド言語で、SCPIに対応している計測機器はメーカーや機種が違っていても基本的には同じコマンドで測定を行うことができます。

:::note
「基本的には」としているのは機器によってコマンドに若干の差異が認められるためです。例えばKeysightのInfiniiVisionシリーズやRIGOLのDS2000Aは:MEASureコマンドを以下のように記述します。
 * :MEASure:VMAX? CHANnel1
 * :MEASure:FREQuency? CHANnel1

ところが同じRIGOLでもDS1104ZはDS2000Aの記述形式のコマンドも受け付けるものの[DS1000Z Programming Guide](https://jp.rigol.com/Public/Uploads/uploadfile/files/ftp/DS/%E6%89%8B%E5%86%8C/DS1000Z/EN/DS1000Z_ProgrammingGuide_EN.pdf)によると以下のようなシンタックスとなります。
 * :MEASure:ITEM? VMAX, CHANnel1
 * :MEASure:ITEM? FREQuency, CHANnel1
:::

IVI FoundationのSCPI Consortiumの説明によると

>SCPIの構文はASCIIテキストであるため、BASIC、C、C++など、あらゆるコンピュータのテスト言語に添付することが可能である。また、LabWindows/CVI、LabVIEW、MATLAB、Microsoft Visual Studio、Agilent VEEなどのテストアプリケーション環境でも使用できる。[^4]

とあり、筆者はMicrosoft ExcelやPythonで使用しています。

## 6. おわりに
- シラバスを注意深く読むと「データの分析に使う技法には、以下のものがある。（略）統計的品質管理手法（略）（p.61）」とあって本にするとこれだけで一冊ぶんの説明が一行に集約されています。[QC7つ道具](https://www.google.co.jp/search?hl=ja&as_q=QC7つ道具)の散布図やヒストグラムはシラバスに登場しないというよりもその説明が統計的品質管理に譲られていると考えると良さそうです。
- 性能テスト担当者はシラバスだけでは足りなくて統計的品質管理の理解も必要と言えそうです。Foundation Levelとはいえ要求水準が高いところがSpecialistの所以と思いました。
- USBやSCPIはシラバスの範囲外ですがこの記事の程度であればFoundation Levelのレベル感と思います。このくらいならFoundationのレベル、ここまで深入りするとAdvancedのレベルといったレベル感が持てるようになったのはシラバスが公開されたことのメリットの一つと思います。

## A. 参考資料
### A1. 統計的品質管理
- [統計的品質管理の役割と歴史（ナレッジ - 品質管理なら日本科学技術連盟）](https://www.juse.or.jp/faq_knowledge/knowledge/index.html#統計的品質管理の役割と歴史) 

### A2. プロトコル
- [オリックス・レンテック | プロトコルとレイヤ - 計測器・測定器玉手箱  | ORIX Rentec Corporation](https://www.orixrentec.jp/helpful_info/detail.html?id=75)

### A3. USB
- [USB 2.0 Specification | USB-IF](https://www.usb.org/document-library/usb-20-specification)
  - リンク先のZIPファイルに入っているusb_20.pdfが "The Original USB 2.0 specification released on April 27, 2000" です。

### A4. SCPI
- [SCPI仕様書](https://www.ivifoundation.org/docs/scpi-99.pdf)
  - Syntax and Style、Command Reference、Data Interchange Format、Instrument Classesの4章構成です。

[^1]: [メーカー直撃インタビュー：伊達淳一の技術のフカボリ！：キヤノンEOS-1D X Mark II - デジカメ Watch Watch](https://dc.watch.impress.co.jp/docs/news/interview_dcm/753251.html)より。
[^2]: [EOS-1DX Technical Overview](https://cweb.canon.jp/pdf-catalog/eos/pdf/1dx-technical-overview.pdf) p.12「最短で約36ms（略）。なお、初期設定は55ms（0.055秒）。これまでの「1D」と同じ感覚でシャッターを切れます。」より。
[^3]: 筆者はキヤノンの関係者ではないため実際のところは分からないですが。
[^4]: "SCPI syntax is ASCII text, and therefore can be attached to any computer test language, such as BASIC, C, or C++. It can also be used with Test Application Environments such as LabWindows/CVI, LabVIEW, MATLAB, Microsoft Visual Studio, or Agilent VEE."のDeepL翻訳です。