ソフトウェア信頼性テストとは、ソフトウェアが特定の環境条件下で一定期間正常に機能する能力をテストするソフトウェアテストの一分野です。ソフトウェア信頼性テストは、ソフトウェアの設計や機能における多くの問題点を発見するのに役立ちます。
ソフトウェアの信頼性とは、ソフトウェアが特定の環境下で一定期間正常に動作する確率のことです。以下の式を用いて、利用可能なすべての入力状態のサンプルをテストすることで、故障確率を計算します。平均故障間隔(MTBF)=平均故障時間(MTTF)+平均修復時間(MTTR)
すべての可能な入力状態の集合を入力空間と呼びます。ソフトウェアの信頼性を調べるには、与えられた入力空間とソフトウェアから出力空間を見つける必要があります。[ 1 ]
信頼性テストでは、設計段階や運用段階など、開発のさまざまな段階からデータが収集されます。テストは、コストや時間の制約などの制限により制限されます。ソフトウェアの信頼性をテストするために、ソフトウェア製品から統計サンプルが取得されます。十分なデータまたは情報が収集されたら、統計的調査が行われます。時間的制約は、テストを実行するための固定日または期限を適用することによって対処されます。このフェーズの後、ソフトウェアの設計は停止され、実際の実装フェーズが開始されます。コストと時間に制約があるため、各データに何らかの目的があり、期待される精度が得られるように、データは慎重に収集されます。[ 2 ] 信頼性テストから満足のいく結果を得るには、いくつかの信頼性特性に注意する必要があります。たとえば、平均故障時間 (MTTF) [ 3 ]は、次の3つの要素で測定されます。
制約が運用時間に関するものである場合、または改善の第一点に焦点を当てている場合は、圧縮時間加速を適用してテスト時間を短縮できます。カレンダー時間に焦点を当てている場合(つまり、事前に定義された期限がある場合)は、強化ストレステストが使用されます。[ 2 ] [ 4 ]
ソフトウェアの可用性は、平均故障間隔(MTBF)で測定されます。[ 5 ]
MTBFは、平均故障時間(MTTF)と平均修復時間(MTTR)から構成されます。MTTFは2つの連続した故障間の時間の差であり、MTTRは故障を修復するために必要な時間です。[ 6 ]
定常状態における可用性とは、ソフトウェアが正常に動作している割合を表します。
例えば、ソフトウェアのMTTF(平均故障間隔)が1000時間であれば、そのソフトウェアは1000時間の連続稼働に耐えられるはずです。
同じソフトウェアの場合、MTTR = 2 時間であれば、。
それに応じて、
ソフトウェアの信頼性は、故障率()
ソフトウェアの信頼性は0から1の間の数値で表されます。プログラムのエラーやバグが除去されると、信頼性は向上します。[ 7 ]ソフトウェア信頼性成長モデル(SRGM)(ソフトウェア信頼性モデル一覧)には、対数、多項式、指数、べき乗、S字型など、多くのモデルが存在します。
信頼性テストの主な目的は、仕様を考慮した既知の固定手順を用いて、いかなる修正措置も講じることなく、所定の条件下でのソフトウェアの性能をテストすることです。
信頼性試験の二次的な目的は以下のとおりです。
目標設定に関するいくつかの制限事項は以下のとおりです。
コンピュータソフトウェアの応用はさまざまな分野に及んでおり、ソフトウェアは産業、商業、軍事システムの不可欠な部分となっています。安全性が重要なシステムにおける多くの応用例があるため、ソフトウェアの信頼性は現在、重要な研究分野となっています。ソフトウェアエンジニアリングは過去100年間で最も急速に発展している技術になりつつありますが、それらを評価するための完全な科学的かつ定量的な尺度は存在しません。ソフトウェア信頼性テストは、これらのソフトウェアエンジニアリング技術を評価するためのツールとして使用されています。[ 9 ]
ソフトウェア製品とソフトウェア開発プロセスのパフォーマンスを向上させるには、信頼性の徹底的な評価が必要です。ソフトウェアの信頼性テストは、ソフトウェア管理者や実務者にとって非常に役立つため重要です。[ 10 ]
ソフトウェアの信頼性をテストによって検証する:
ソフトウェアの信頼性テストには、機能テスト、負荷テスト、回帰テストが含まれます。[ 11 ]
機能テストは、ソフトウェアが提供する機能を確認するもので、以下の手順で実施されます。
機能テストの後に負荷テストが行われます。[ 11 ]
このテストは、最大ワークロード下でのソフトウェアのパフォーマンスを確認するために実施されます。どのソフトウェアも、ある一定のワークロードまでは良好なパフォーマンスを発揮しますが、それを超えるとソフトウェアの応答時間が低下し始めます。たとえば、Web サイトは、パフォーマンスの低下なしに同時にサポートできるユーザー数を確認するためにテストできます。このテストは主にデータベースとアプリケーション サーバーに役立ちます。負荷テストでは、ソフトウェアのパフォーマンス テストも必要となり、ワークロード下でソフトウェアがどれだけうまく機能するかを確認します。[ 11 ]
回帰テストは、以前のバグ修正によって新たなバグが導入されていないかを確認するために使用されます。回帰テストは、ソフトウェア機能の変更または更新のたびに実施されます。このテストは、ソフトウェアの長さと機能に応じて定期的に行われます。[ 11 ]
信頼性試験は、他の種類の試験に比べてコストがかかります。そのため、信頼性試験を実施する際には、適切な管理と計画が必要です。この計画には、実施する試験プロセス、試験環境に関するデータ、試験スケジュール、試験ポイントなどが含まれます。
テストケースを設計する際によく発生する問題には、以下のようなものがあります。
ソフトウェアの開発および設計中の研究は、製品の信頼性を向上させるのに役立ちます。信頼性テストは、基本的にソフトウェアの故障モードを排除するために実施されます。製品の寿命テストは、設計部分が完了した後、または少なくとも完全な設計が確定した後に必ず実施する必要があります。[ 12 ] 故障解析と設計の改善は、テストを通じて達成されます。
[ 12 ] このテストは、最初は頻繁に失敗すると想定されるソフトウェアの新しいプロトタイプをチェックするために使用されます。失敗の原因が検出され、欠陥を減らすための対策が講じられます。T をプロトタイプの累積合計時間とします。n(T) は開始から時間 T までの失敗の数です。n(T)/T のグラフは直線になります。このグラフはデュアン プロットと呼ばれます。他のすべてのテスト サイクル後にどれだけの信頼性が得られるかを把握し、それを修正することができます。
式1をn(T)について解くと、
ここで、Kはe^bです。式中のαの値がゼロの場合、所定の故障数に対して期待どおりに信頼性を向上させることはできません。αがゼロより大きい場合、累積時間Tが増加します。これは、故障数が試験期間に依存しないことを説明しています。
現行バージョンのソフトウェアに新機能が追加される場合、その操作に対するテストケースの作成方法は異なります。
ソフトウェアの新しいテストケースの数を計算するための定義済みのルールがあります。N がソフトウェアの新しいリリースで新しい操作が発生する確率、R が現在のリリースで使用されている操作が発生する確率、T が以前に使用されたすべてのテストケースの数である場合、
運用テスト法は、ソフトウェアの信頼性をテストするために用いられる手法です。この方法では、ソフトウェアが実際の運用環境でどのように動作するかを確認します。この評価方法における主な課題は、そのような運用環境を構築することです。このようなシミュレーションは、原子力産業や航空機産業など、一部の産業で実施されています。将来の信頼性を予測することも、信頼性評価の一部です。
ソフトウェアの信頼性をテストするための運用テストには、2つの手法が用いられます。
ソフトウェアの信頼性評価および予測において、信頼性成長モデルを使用します。ソフトウェアの運用中、障害に関するあらゆるデータは統計形式で保存され、信頼性成長モデルへの入力として使用されます。このデータを用いて、信頼性成長モデルはソフトウェアの信頼性を評価することができます。
信頼性成長モデルに関するデータは豊富にあり、故障過程を表すとされる確率モデルも数多く存在する。しかし、あらゆる状況に最適なモデルは存在しない。したがって、適切な条件に基づいてモデルを選択する必要がある。
この場合、ソフトウェアの信頼性は、以下のような仮定に基づいて推定されます。
{{cite web}}:欠落または空欄|url=(ヘルプ)