ソフトウェアの品質を学びまくる2.0

ソフトウェアの品質、ソフトウェアテストなどについて学んだことを記録するブログです。

ISTQBの「性能テスト担当者」シラバス日本語版を読んでみた - その2

 今回は、1.2で扱われている、性能テストのテストタイプについての記事です。前回の記事はコチラ
 性能テストにはさまざまなテストタイプがあるので、1つのデファクト・スタンダードとしてISTQBが整理してくれているのはありがたいことです。
 またこの部分については、翻訳者でもある湯本さんがブログを公開されています。

note.com

 わたしはこのテストタイプたちを、また違う軸で捉えていたので、ちょっと整理してみました。
 縦軸はテストの目的で、実行条件が想定「以下」「内」なのか、想定「以上」「外」なのか。
 横軸は注目している時間範囲の長さを「短」「中」「長」に分けているます。

 このマトリクスに、シラバスにあるテストタイプを乗せると、こんな感じ。
 ★は、このシラバスには出てこないものです。

目的 時間範囲: 短 時間範囲: 中 時間範囲: 長
想定を超えた条件において、
どのようにふるまうかを確認する
スパイクテスト
コンカレンシーテスト
ストレステスト
キャパシティテスト
拡張性テスト
★加速試験
想定内の条件において、
要件通りにふるまえるかどうかを確認する
同上 負荷テスト 耐久テスト
★ソークテスト

 それぞれのセルを見ていきましょう。

時間「中」×想定「内」

 まずここが基本。
 「想定として定義された負荷条件に対し、どのような性能を示すか」という負荷テストが入ります。

時間「中」×想定「外」

 このセルには、ストレステスト、キャパシティテスト、拡張性テストの3つが入ると考えます。なぜ3つも入るのかというと、目的が異なるからです。目的を無視しているのが、このマトリクスの大きな欠点と言えるでしょう・・・。

 ストレステストでは、負荷が想定以上になった場合のふるまいを検証するものです*1。負荷テストのわかりやすい延長上にあります。
 キャパシティテストと拡張性テストの違いは、わたしにはよくわかりませんでした。ともに、「これからユーザや負荷が増えていったとして、どこまでなら性能要件を守れるか」と言っているように感じます*2

時間「短」

 この列は、想定「外」「内」は分けずに、スパイクテストとコンカレンシーテストを入れています。
 この2つは似ているようにも思えますが、別のものです。

 スパイクテストの特徴は、「突然」。次第に負荷が増えてピークを打ち、次第に下がっていくのではなく、いきなりガンと上がってすぐに収まるという、Twitterでいうバルス的な事象に耐えられるかに注意します。シラバスには「その後、定常状態に戻る能力」とも書かれており、「素に戻る」ことができるかもポイントです。

 一方コンカレンシーテストは、ある短い一定時間の間に「特定のアクションが同時に発生する状況」Tをテストするもの。
 各実行の操作対象が同一のものだったり、実行のために使うリソースが共有されていたりする場合に起きるような、逆にいうと単発の実行では起きない・起きづらい問題が、コンカレンシーテストで見つかることがあります。

 全然現実的なじゃなさそうですが、ある銀行口座に対する入金処理についてテストするとすると、

  • スパイクテスト: 1人が1分間に1000回の入金を行う
  • コンカレンシーテスト: 100人が1分間に1回ずつ入金を行う

といった感じでしょうか。

時間「長」×想定「内」

 ここには、耐久テストが入ります。単発では性能がよくても、時間が経つに連れて急激に悪化していくかもしれません。短時間では発見しづらい問題を、耐久テストで見つけられることがあります。
 「ロングランテスト」という別名に加え、わたしは「ヒートラン」という言葉も(方言的に)使っていたのですが、これは機械・電子機器の文脈で使われる、まったく違う意味の言葉のようですね・・・。

ヒートラン 【heat run】 エージング / バーンイン
ヒートランとは、機械や電子機器などの出荷前に行われる稼動試験、または、使用開始前に行われる「慣らし運転」のこと。
IT用語辞典より

 なお、秋山さんの以下の記事では、 「ソークテスト」 が説明されています。

note.com

ソークテストなら、長時間連続して、実際の利用環境であり得る嫌な負荷をかけ続けるテストということを押さえておきましょう。

 この説明を見る限り、ソークテストも「長」×「内」に入れておくのがよさそうです。

時間「長」×要件「外」

 シラバスにはここに当たるテストタイプはなさそうですが、「加速試験」(これも方言)が、一応これにあたるかもしれません。

 耐久テストにおいて、たとえば「1ヶ月稼働後の様子を確認したい!」といっても、なかなかできるものではありません。そこで、「想定される負荷の周期」を1/10にすることで、3日間で1ヶ月分を模擬する。雑にいうと、加速テストとはこんな発想のテストです。
 「加速した場合の動作を確認する」ことが目的ではなく、あくまでも「耐久テストを効率的に行う」ことが目的なので、テストタイプとはちょっと違いますね。
 いずれにせよ、それが本当に「模擬」と言えるかどうかは十分な吟味が必要です。

おわり

 以上、性能テストのテストタイプを、目的と時間範囲のマトリクスで分類してみました。
 正直、いくばくかの無理矢理感はありますが、分類してみることで理解が進むこともあるかもしれないので、ヨシとします。

Top speed

*1:シラバスでは、「リソースの可用性が低下した場合のシステムの処理能力を評価するためにも使用できる」とあります。障害時の「片肺運転」「縮退動作」中の性能評価ですね。

*2:湯本さんの記事では、拡張性テストは想定の範囲「内」、キャパシティテストは「外」で、後者とストレステストの仲間と説明されています。