性能試験とは何かですが、世の中に性能試験と呼ばれるものは数多くあるかとおもいます。いわく自動車の性能だとか、ジェット機の性能だとか、船の性能とか、実際に新しい製品が完成する前に、目的とする性能を満たしているかをテストすることをそう呼びます。
ここで説明する性能試験はコンピュータのシステムの性能試験です。システム(コンピュータシステムのことをこれからはシステムと呼びますが)の開発にはいくつかの工程があります。
簡単に言うと
- 要件定義(要求定義というものもある場合あり
- 設計
- 開発
- テスト
- 導入
となりますが、性能試験は、4つの目のテストの工程に属しますが、テストにも種類があります。単体テスト(プログラムのアプリ単位でおこなう)や結合テスト(アプリを組み合わせておこなう)、総合テスト(業務の環境に近い状態で行う)など機能的な面のテストをおこない、不具合がないことを確認します。
その後で、性能試験を行いますが、機能的には問題なくても性能的に問題ないかを検証するので、性能試験は、非機能試験とも呼ばれます。
※最後に実施すると書きましたが、場合によっては、単体テスト、結合テスト、総合テストの段階において、それぞれで性能試験をおこなうこともあります。
この記事では、性能試験とは【何か・種類・方法・ツール・メリット・デメリット】どを解説していきます。
コンピュータの専門学校がプログラミング及び、コンピュータの基礎を学び、その後、日本電気の子会社で働きました。その後、いくつかの開発の仕事を経て,コンピュータの専門学校の講師兼担任を経験し、その後はフリーにてシステムエンジニアやプログラマーの開発の仕事を担当、そのかたわらプログラミングスクールや職業訓練所、企業の新人教育などを担当しました。 25年以上のシステムエンジニア、プログラマーの仕事の経験があります。
性能試験とは?定義から解説

性能試験とは、先ほども説明しましたが、システムの機能的面(入力等)ではなく性能が要件を満たすかということを検証する試験です。要件は通常、要件定義でお客様と開発会社で話し合って、合意を得ておきます。
そのために要件定義書に性能についての項目が記載されます。では、システムにおける性能とは何かと言えば、現時点のシステム開発はほとんどと言ってよいほどWEBシステムになりますので、レスポンスタイム・スループット・同時接続ユーザ数という指標を性能とします。
※レスポンスというのはサーバーに要求を出したとき、サーバーから返事が返ってくるまでの時間をいいます。厳密に言うと返事が返ってくるだけでなく要求した仕事が全部終わった時間でないと正確には性能が測れません、その時間のことをTAT(ターンアラウンドタイム)といいます。なのですがレスポンスタイムはターンアラウンドタイムのこととして説明していきます。
スループットについては後程詳しく説明します。同時接続ユーザ数というのは一定の時間内で何人の人がサーバーに繋いで使えるかということになります。
性能試験の目的
性能試験はシステムが求められる要件を満たしているかを検証します。例えば画面のボタンをクリックした時に、次の画面が表示されるとき応答が早くないとストレスが溜まります。また、画面の表示だけでなく検索をした場合に、データ処理できる量、同時にどれだけの人数(ユーザ)で使えるかということをあらかじめ要件定義で決めておきます。
それらの指標として、以下のものを使います。(実際の業務で使った場合を想定し、数値を決定します。)
- レスポンスタイム
- スループット
- 同時ユーザ数
さらに、ユーザが最大でピーク時に一気に繋いだ時に、システムが耐えられるかという負荷試験もおこないます。
この3つに加えて、ハードウェア(サーバーそのもの)のCPUやメモリ、記録装置も加えて、リソースという指標を使う場合もあります。
それにしたがって最初のインフラ(コンピュータや通信設備)を構築します。コンピュータのCPUやメモリ、記録装置(HDD,SDD等)のスペックによって処理のスピードが決定するからです。もちろん、通信回線自体の速さも関係します。
※最初と書いたのは性能試験の結果によって、通常、予算が決まっているのであまりあり得ませんが、変更する場合もあるからです。
要件定義で決めたこれらの指標をシステムが満たしているかを試して、問題あれば改善するということが性能試験の目的となります。
性能試験と負荷試験の違い
先程も触れましたが、【性能試験】と【負荷試験】とは別のものです。通常の業務を想定し、おこなうのが性能試験です。それに対して、負荷試験は最大でどれだけのユーザが同時接続して使った場合にシステムがダウンしないかを試験します。最大負荷をかけた状態での試験となります。
※性能試験は、業務の想定でのアクセスや処理を行いますので、それもシステムに負荷をかけることなので、それを負荷試験と表現する場合もありますが、ここでは負荷試験はあくまでも想定外のアクセスについての試験のことを説明しています。
負荷試験は、例えば、お正月やクリスマスの前などや、会社の決算時などの繫忙期に、もしも、想定外の人がシステムを使った際にどこまで耐えらるかを測り、どこまでの限界値で、システムを構築するかを見ます。予算をかければ無限に耐えられるシステムを構築することは可能かもしれませんが、コストを考える必要はあります。例えば、スポーツカーが欲しくても、お金がなければ普通の車でがまんする必要があります。
しかし、通常の生活に耐えられる車は必要ですから、性能試験では普通の状態での負荷をかけて。指標を測ります。
以下に性能試験と負荷試験の違いを表にして見ました。
| 性能試験 | 負荷試験 | |
|---|---|---|
| 目的 | 通常の業務を想定して、【速度】や【処理件数】を測る | 最大負荷をかけた時に、システムが処理できるかを確認 |
| 評価対象 | 通常の業務での機能を使った場合の性能。 | 最大の負荷がかかった場合の性能・どこまで耐えられるか |
| 主要な利点 | 性能が評価基準より低い場合に、原因の特定またその改善点の発見 | 想定外の負荷がかかった場合、システムの限界 |
| 主要な計測値 | レスポンスタイムやスループットにより、速度や安定性、信頼性を測る | 負荷がかかった場合の、速度、同時ユーザー数 |
| 使用される場面 | 通常の業務と同じ想定で、試験をおこなう | 最大のアクセスや、処理をツールや手動で試験をおこなう |
| 再現条件の例 | 通常の業務と同じ処理をおこない、接続数も想定内にする。 | ツールや手動で、よく使う業務や処理を最大数で使ってみる。 |
性能試験の種類

性能試験には数々の種類が存在します。開発したシステムの特性を考え、どの性能を試験すればよいかを決めます。性能試験の種類を表にしてみました。この中から必要なものを選んで実施します。特に重要なものを2つ詳しく説明します。
| テスト種類 | 説明 |
|---|---|
| 負荷試験(スループット:通常の業務での想定) | 通常の業務での想定や、その想定内でのピーク時など、業務が実際に使用される場合に予想される負荷を発生させる最も一般的な試験 |
| ストレス試験(負荷試験) | 通常の業務ではない想定外の負荷をかける試験 |
| スパイク試験 | 突然の最大負荷から普通の状態に戻るまでの一連の性能を確認する試験 |
| スケーラビリティ試験 | 将来に渡って、ユーザ数の増加やデータ量の増加等した場合の性能を試験 |
| 耐久試験 | 長い時間において連続使用した時の性能を試験 |
| キャパシティ試験(負荷試験に該当する) | ある範囲内で、最大の負荷をかけた場合にも性能が維持できるかを試験 |
| コンカレンシーテスト | 同時に同じ処理を行った場合に、正常に処理できるかを見る試験 |
負荷試験(スループット)
ここでいうところの負荷試験というのは通常の業務でシステムを使った場合にも、ある程度の一定の負荷がサーバーにかかりますので、その負荷のことを示します。例えば、画面を表示するボタンを押しただけで、アクセスという負荷がサーバーにかかります。
通常の状態でも何人か同時にアクセスをおこないますので、その状態で想定している性能が実現できているかを試験します。あくまでも通常かかるであろう負荷での試験です。
性能試験を実施する時は、いくつか工程があります。大雑把に言うと次のようになります。
- テスト計画
- シナリオ作成
- 実施
テスト計画は、環境の構築や、人員の確保等をどうするかを計画します。
シナリオ作成の工程で、実際の業務と同じような一連の業務の流れを実現できるようにシナリオ(筋書き)を作成します。
シナリオをつくる際には、業務の責任者や、実際に業務に携わる人などにやり方をヒアリングしてつくります。
シナリオに従って、試験を実施しますが、要件で設定された性能が、実際に出ていないならなにが原因かボトルネックかを見つけ出します。
実際の性能は、人の感覚に頼ると、人によっては早く感じたり、遅く感じたり、マチマチなので、指標を実際に計測します。
※webシステムの開発では、指標を計測するのが一般的です。但し、試験の項目によってはストップウォッチで、時間計測を行う場合もあります。
その指標がレスポンスタイムとスループットになります。
※スループットとは、一定の時間内に処理できるデータ量のことです。似たような言葉にトラフッィクもありますが、トラフッィクはインターネット回線をある場所に特定し、測ったデータ量のことになります。
※レスポンスタイムのことをレインテンシと呼ぶこともあります。インターネット回線の性能を表す場合はレインテンシと呼ぶこともあります。
まとめると、ここでいう負荷試験(スループット)とは、業務に似たシナリオに従って、指標を計測し、実際に使った場合に支障がないかをテストするものです。
スケーラビリティ試験
スケーラビリティとは、拡張性のことを言います。ユーザ数の増加や、アクセス数の増大にどこまで対応が、できるかを試験します。
拡張するには、ハードウェア(コンピュータと通信設備)を増やすか、ソフトウェアでプログラミングで、最適なコードを使って効率化し、消費するリソースを減らして拡張する方法があります。
ここでは、システム開発をした状態で、どこまでのユーザ数や、スループットに耐えられるかを試験します。
ユーザ数が増えても、アクセス数が増えてスループットが増大しても、アプリの操作が問題なく、通常の状態と同じように使えるかを試験します。
指標としては、レスポンスタイムや、CPU稼働率、メモリ使用率などを計測します。
将来的にユーザが増えたり、アクセス数が増えても問題なく使えるかをテストして、問題あれば、ハードウェアの拡張か、または、プログラミングを変えて対処します。
プログラミング的な対処として、よく知られているのはデータベース(データの保存をするソフトウェア)に、データを登録、更新、削除、検索するときにSQLという言語を使いますが、とくに検索の時、SQLを組み直すことで速さが変わることがあります。
性能試験の方法

実際の性能を実施する際は、本番同様の環境づくりと、テストデータの作成(あるいはテストで入力するデータを資料として作成して、試験時にそれを参照して入力する)そして、ツールの選定かもしくは手作業でやるかをきめます。性能試験の方法には、次の2種類があります。
- 自動試験ツールを使用した方法
- 手動による実施
ここでは、この2つについて、解説します。
自動試験ツールを使用した方法
最近のwebシステムの開発では、開発用のツールが数々用意されてますが、性能試験をおこなうにも自動で試験するものがあります。
高価なものになるとPOSシステムなども性能試験するものもありますが、無料で使えるものもあります。
自動化するには、JavaやPHP等のプログラミングの中に組み込むものや、スクリプト(短いプログラミングのようなもの)をつくるもの、設定ファイルをつくるもの、画面で設定をしていくものなどがあります。
そのため、自動試験ツールを使うには、そのツールを使い方をまずは習得する必要があります。有料のツールならサポートが受けられますが、無料のものは自分で資料を探して、使い方を調べることが必要となります。
有料ツールは、機能が多く、使いやすいなど利点はありますが、値段が100万円以上するので、コストがかかります。
また、ツールによって、調べる特性や項目が違っているためどのツールを使えばいいかの選定が必要となります。
有名なツールは、
等があります。
自動試験ツールを使うには、経験と知識が必要なので、最初はうまくいかないかもしれません。そういう意味では、信頼のおける開発会社に依頼するのが得策です。
手動による実施
自動試験ツールでは自動的に試験ができますが、どうしても限界はあります。
また、先程も書きましたが、プログラムに書き込んだり、スクリプトを作ったり、設定ファイルを作ったり、画面から設定するなどの手間がかかります。
そういう意味では、手動で、実際の業務と同じように画面入力をおこない、性能を計測することで試験はできます。
手動テストの方が、ユーザ(お客様)の振る舞いなどが試験に影響するので、より、業務に近いテストになります。
手動テストをおこなうことで、誰でもテストに参加できることが可能で、あまりトレーニングも必要ありません。(自動試験ツールを使うのにはある程度のプログラミング知識が必要となる。)
しかし、逆に、人手が多く必要となるため、自動試験ツールを使うよりも、おもわぬ人的コストがかかります。
一部の機能は、自動試験ツールを使い、別の機能については手動でおこなうなど、組み合わせた使い方もできます。
自動試験ツールを使うか、手動で性能試験をやるかはシステム開発の初期の段階で検討します。
性能試験のメリット
![]()
2019年にレポートが発表されましたが、そのレボートによれば、Mete(旧Facebook)は甚大な停電被害を受け、およそ120億7,000万円(約9,000万ドル)の収益の損失を経験しました。
また、2015年には、AppStoreがダウンしたことによって、Applはがおよそ33億6,700万(2,500万ドル)の収益が減りました。
最初の件は物理的な問題かと想いますが、システムのダウンは、アクセス数の増大や、スループットが大きくなることにより、サーバーのダウンは起こリ得ることです。
また、システムの遅延により、販売の機会を逃すこともあったり、クレームの対象となることもあります。
そういう損失を防ぐためにも、性能試験を事前に実施しておくことは大切なことです。
また、ユーザ(お客様)へのサービス向上のためにも必要です。
ここでは、性能試験のメリットについて詳細に解説していきます。
ぜひ、システム開発においては、性能試験を組み込むことをお勧めします。
システム障害の防止
先程、解説しましたが、ユーザ数(アクセス数)や、スループットが一定時間に増大すると、サーバー(コンピュータそのもの)が処理しきれずにダウンしてしまいます。または、遅延を起こして、レスポンスタイムが異常に遅くなります。
(よく、チケットの争奪戦で、サーバーがダウンしましたとか、全然、動かなくなって、時計マークがグルグルするなど経験があったり、ニュースになったりします。)
これは、サーバーのCPUやメモリなどのリソースが足りなくなって、これ以上は処理できませんという状態になります。
サーバーには、データベースサーバーというものが別にあり、データの読み込みや、書き込みができなくなるという現象も起こります。
このような状態に、なると先程に説明したとおり、売る機会の損失や、なんらかの保証が発生し、多大な損益が発生する場合があります。
そういうことを事前に性能試験をおこなうことで、事前に予防できるということがあります。
また、通常の業務でも、期待した性能がでてない場合に、どこが問題なのか、ボトルネックになっているかを、本稼働以前に察知できるので、業務の遅延を防ぐことができます。
コスト削減
障害や遅延を起こさないためには、サーバーのリソース例えば、CPUを処理能力の高いものにするとか、メモリを最大限に増やすとか、通信回線を高速なものにするということで対処はできます。
しかし、処理能力がたかいものや、メモリを増やす、通信回線を最大限にするということは、それだけコストが増えることになります。
今までと逆説的なことを言うかもしれませんが、システム開発は、特に売上に直結するものではありません。(システムがよくなると確かに売上はよくなるが、直接的に営業や、販売するわけではないので、どんなに高いシステムを開発や導入しても売上に直結するわけではない。)
どちらかというと間接的な費用となります。
間接的な費用は、経営的にも抑えたいところです。会社は結局、売上-コストで利益がでますので、このコストは最小限に抑えたいところです。
確かに理論上は、紙の上で、数値を出して、サーバーの性能をあらかじめ決定することはできますが、いくつかのサーバーや通信設備を組み合わせる構成では、理論上では計算できません。
やはり、性能試験をシステム開発の時点でおこなって、どのくらいの性能のサーバーや通信設備が必要かを実際の検証は必要であると言えます。
それによって必要最小限の構成ができて、コストダウンになります。
性能試験の問題点

性能試験はよいとこばかりあるようにおもえますが、性能試験にも問題点というかデメリットもあります。
また、そもそも、会社内で使う業務用のシステムでは、ユーザ数や、アクセス数がそんなに増えることもないので必要ないかもしれません。
また、すでに実績があるシステムとほとんど同じ構成にするなら予測ができて、試験をするのもいらないこともあるかもしれません。
ここでは、性能試験の問題点について詳しく説明します。
試験環境の構築コスト
性能試験は、本番稼働と同じ条件で試験をするというのが前提です。そうしないと実際の指標が計測できません。
システム開発の試験には、通常、
- 単体テスト(システムの中のアプリ単体)
- 結合テスト(アプリを組み合わせる)
- 総合テスト(システム全体をテストする)
という工程があり、それぞれに環境が必要となります。
また、それぞれで、必要となるテストデータも違います。
性能試験は、総合テストという工程と同じ環境を使えばよいですが、この環境は実際の業務で使う環境とまったく同じか、あるいは似たものになります。
単体テストや、結合テスト、総合テストは、まだ、同じサーバー上に違う環境を用意して実施するなどができますが、(スペックが高いサーバーならということです。)性能性能試験は他のものが邪魔しない環境が必要です。
そのため、サーバーや通信設備を用意しなくてはならなくコストがかかります。本番環境を使えばいいようにおもえますが、本番環境は本番が開始される環境なので、綺麗にしておきたいなどの要望があります。
また、性能試験用ツールの購入、ツールを使わない時は人手の確保など、とにかくコストがかかります。
試験の実施に時間がかかる
次に考えられる問題点は、実施に時間がかかるということです。
まずは、業務と同等のシナリオ作りをしますが、これにも業務の責任者や、実際の作業者へのヒヤリングが、まず必要で、そのあとまとめる作業や、確認をしてもらう工程が発生します。
実際の試験過程でも、実際の業務と同じことをやるので、その分は時間がかかります。
そのあと、試験が終わったらでてきた指標を整理し、分析する時間も必要です。
もしも、指標が目標に達していない場合は、原因やボトルネックを探して、それを修正し、再度、性能試験の実施か必要です。
とにかく時間がかかるので、業務そのまま試験するのは無駄がでるので、特に性能試験をしておくべきところだけを絞ってやる必要があります。
例えばログインの画面などは、そんなにスループットが増大したりしないので、それはやらないとか、選定の作業が必要となります。
選定では、やみくもに、実施ところを絞るのではなく、理由が必要となるのはいうまででもありません。
性能試験のポイント

性能試験に限らず、仕事を成功させていくには、まず目標の明確化、なにをしたいのかをはっきりさせます。続いて計画をたてます。目標に対して何をすれば良いかを計画します。
計画にはシナリオ作成もはいるでしょうし、準備をおこなう事もスケジュール化します。準備が整ってないため失敗するということは多いです。
準備にはテストデータの作成や、環境作りが入ってます。実施の段階ではおもいがけないことも起こるので、それに対処することも大切です。
ここでは、性能試験を成功させていく大切なポイントについて説明していきます。
試験目的の明確化
まずは、性能試験において何を測定するか、測定した結果はいかにあるべきかを明確化します。
測定は、システム的要件と、ユーザ(使う側)の要件があります。システム的要件は、レスポンスタイムや、スループット、CPU稼働率、メモリ使用率などになります。
システム的な、要件で性能は把握できますが、さらにユーザ的視点として、検索をした時にどれくらいで応答が返ってくるか、(レスポンスタイムである程度わかりますが、ボトルネックを明確化するために、別にデータベースのSQLはどうか等の測定もいる。)印刷やダウンロードした時のスピードはどうか、(これも印刷やダウンロードになにかツールを使ってないかなど)等使い勝手の観点からの性能試験の項目も必要であります。
それらの性能についてあらかじめ決めておくことは大事です。(開発会社に開発を頼むにせよ、自社開発の場合でも使う部署の責任者の同意は必要です。)
また、取り決めた性能については要件定義に記載し、開発に関わる人すべてに周知徹底が必要です。
適切なツール選定
性能試験ツールを使う際は、どのツールを使うかの選定が必要となります。性能試験ツールは、製品によって特徴があり、例えば【ある一定の時間に、決められたアクセス数でアクセスしたい】【業務に合わせた、複雑なシナリオを試験させたい】なさせたい試験によって選定するツールが違います。
選定する基準として、以下な点があります。
-
- 性能試験におけるシナリオを実現できるか。
- 試験項目の設定が簡単か複雑か。
- 試験結果がうまく得られるか。(試験結果の分析に加工が必要か。)
- 性能試験ツールのお値段
特定の画面だけにアクセスしたいなどというシナリオならどの性能試験ツールでも可能です。しかし、画面遷移や、データベースへのアクセスなどのシナリオがある場合は、絞られてきます。よって、性能試験におけるシナリオは実現できるかは選定基準となります。性能試験ツールの使い方というか、どうやって設定するかは性能試験ツールによって違います。画面だけで済むものや、コマンドライン(命令を一文づつ書く)、設定ファイルに独特の記述する、プログラミングの時点で命令を組み込むなど違いがあります。そのため、事前に性能試験ツールの使い方を習得しておく必要があります。(これは経験と実績のある開発会社に委託するという方法があります。)
どちらにせよ、性能試験ツールの使い方(設定)が簡単かどうかは選定の基準になります。
試験結果についても、分析する機能がついているものと、画面にただ表示されるもの、csv(テキストファイル)でダウンロードして、自分達で加工しなくてはならないものがあります。
最後にこれは大事な点ですが、性能試験ツールのお値段はいくらかという基準があります。高い性能試験ツールは100万円以上します。とおもえば無料のものもありますが、無料のものは、資料が少なく自分で探してくる必要があります。
有料のものは大規模システムに対応してますし、サポートやヘルプが充実しています。
性能試験のまとめ

性能試験の目的は、ユーザー(使う人)が、システムを使う時にストレスなくスムーズに使えるかどうかを試験することです、
また、性能試験とは別に負荷試験と呼ばれるものがあり、その試験はユー数が増加していった場合、最大でどこまで耐えられるかを見ます。繁忙期など急なユーザー増加した場合にシステムダウンが起こらないことを目指します。
性能試験には指標があります。
レスポンスタイム
スループット
同時接続ユーザー数
を測定します。
(サーバーの、CPU使用率や、メモリ使用率などリソースを測定する場合もあります。)
システム開発の一番最初の段階である要件定義の段階で、以上の指標について、最適な値を決めておきます。
性能試験の結果が決めた数値より下回れば、原因追求・ボトルネックを探し、取り除きます。
性能試験の種類は、性能試験ツールを使う、または手作業で実施の2つの方法があります。
性能試験のメリットは、システムダウンが起こったしまった際の損失を抑えることができ、ユーザー(お客様)が実際に使った場合のストレスを抑え、サービス向上になります。また、事前に最適なサーバーや通信設備等を用意することができ、余剰なコストを抑えることができます。
性能試験のデメリットは、性能試験を実施するのに時間がかかるということと、性能試験ツールを使うのに多額なコストがかかるということです。
性能試験は、経験と実績がないと結果を分析し、原因やボトルネックを探すことは難しいです。また、性能試験ツールを使いこなすには熟練が必要です。
性能試験を実施したい場合は、システム開発会社に委託することをお勧めします。
その選択のひとつとして、実績豊富な株式会社Jiteraに一度ご相談ください。貴社の要件に対する的確なアドバイスが提供されると期待できます。
