web-dev-qa-db-ja.com

堅牢性と正確性の競争

Quality of Requirementsパラグラフで「Code Complete 2」を読むと、次のことがわかりました。

競合する属性間で許容できるトレードオフが指定されていますか(たとえば、堅牢性と正確性の間)?

(これは、要件の品質をチェックするための大きなチェックボックスリストのポイントです)

そのため、ウェブや学術書などで、堅牢性と正当性の定義をたくさん見つけました。

例えば:

「Object Oriented Software Construction、2nd Edition、Bertrand Meyer、Prentice-Hall、1997」の本では、

  • 正確性:システムの仕様、設計、および実装における[欠陥]からシステムが解放される度合い。
  • 堅牢性:無効な入力またはストレスの多い環境条件が存在してもシステムが機能し続ける度合い。

それにもかかわらず、これらの2つがなぜ、どのような状況で競合しているのかは明らかではありません。

私の質問は次のとおりですなぜこれらの2つの属性が競合しているのですか

17
overcomer

これら2つが競合する可能性のある状況は数多くあります。たとえば、堅牢性には、高負荷での回復力が含まれます。リクエストに対するおおよその(つまり、正しくない)レスポンスが正確な(正しい)レスポンスよりもはるかに速く計算できる場合、システムがおおよその結果を提供する必要があるか、それとも完全に失敗するかを知ることが重要です。

36
Kilian Foth

あなたが言ったように、これら2つは単なる例です。実際、そのような非機能的な要件はすべて、互いに競合する可能性があります。本「Building Evolutionary Architectures」には、これらの「-ilities」の約100の表が含まれています(これらはしばしば呼ばれることもあります)。

ソフトウェアアーキテクトがこれらの2つの間の潜在的な競合を検討することは、一種の演習です。基本的に、これらのどれがプロジェクトにとって重要であるかを決定し、これらの競合を追跡できます。

正確な例に戻り、ウィキペディアのrobustnessという用語の定義を見てみましょう。

コンピュータサイエンスでは、堅牢性とは、実行中のエラーに対処し、誤った入力に対処するコンピュータシステムの能力です[1] [2]。

定義からわかるように、堅牢性にはerrorsが含まれます。一方、あなたは正確さを持ちたい、それは基本的にエラーがないことを意味します。

競合をより明確にするために、単純な入力フィールドについて考えてみましょう。正確さの要件から、ユーザーによる誤った入力が拒否されるのが最も簡単です。ただし、堅牢性を確保するには、この入力を使用できる必要があります。これは完全に正しいとは限りません。

それをあなたの本にすべて持ち込むには:許容できるトレードオフは今何ですか?マグニチュードを含む電圧量をユーザーが入力できる科学アプリケーションを作成するとします。したがって、正しい入力は「10 kV」または「200 mV」のようなものになります。許容できるトレードオフには、「10kV」、「10kVolt」、または単に「10」などの入力を許可することや、正確さのためにこれらを有効な電圧値にマッピングすることが含まれます。これはまだトレードオフであり、「両方の利点」ではないことに注意してください。大文字と小文字を比較してください。「10 kV」と「10 KV」は問題ないかもしれませんが、「10 mV」と「10 MV」は問題があるかもしれません。現在はミリかメガかわからないため、正確さは疑問視されますが、一部の誤った入力が機能しないため、右上のケーシング/下部のケーシングを主張すると、堅牢性が失われます。

17
Frank

実用的な例は [〜#〜] xhtml [〜#〜][〜#〜] html [〜#〜] です。

  • ブラウザー(厳密モード)は、構文エラーのあるXHTMLを拒否します。これにより、誤った結果がユーザーに表示されないようになり、エラーを見つけるのに役立ちます。
  • ブラウザは、非常に明らかな問題がある場合でも、HTMLコードの解析を続行しようとします。これにより、コンテンツが少し破損している場合でも、ユーザーがページを表示できることがよくあります。

したがって、XHTMLは正確さを目的とし、HTMLは堅牢性を目的としています。現在、HTMLの方が人気が高いようですが、双方とも良い議論があります。

5
jpa