検証に実際のテストが含まれていないのはなぜですか?


8

このトピックについて多くを読んだ後--- 検証と検証ソフトウェアテストと品質保証に関するこのSoftware Testing Fundamentalsサイトなど --- NaikとTripathyによる理論と実践 ---まだわかりません。検証では、製品を適切に構築していることを証明し、検証では、適切な製品を構築していることを証明します。しかし、検証手法として言及されているのは静的手法(コードレビュー、要件チェックなど)だけです。あなたがそれをテストしない場合、それが正しく実装されているかどうかはどのように言えますか?検証は、製品が指定された要件を満たしていることを保証すると言われています。繰り返しになりますが、機能が何らかの形で機能するように指定されている場合、テストすることによってのみ機能すると言えます。

誰か私にこれを説明してもらえますか?


1
どこでこれを読んでいますか?通常、検証と検証は、製品の品質に関わるすべてを含む単一のアクティビティとして扱われます。静的技法と動的技法の両方がV&Vの一部です。
Thomas Owens

これをどこで読んでいるかを知らせてください。それはただの間違いです。たとえば、このリンクを参照してください。
Peter K.

たとえば、こちら:softwaretestingfundamentals.com/verification-vs-validation また、私が書いた本でも、検証は静的分析によってのみ行われ、動的検証(実際のテスト)
John V

1
@ user970696 お持ち -タイトルと著者を教えいただけませんか?また、あなたは「Wiki」について言及しています-これは何ですか?
gnat

1
@ user970696私は本を持っていませんが、ここからスライドを入手しています。彼らはあなたが話している区別をしているようには見えません。たとえば、スライドのCh3は「ダイナミックユニットテスト」について語っています。これは確かに検証であり、検証ではありません(システム全体が利用できないため)。
Peter K.12年

回答:


14

この質問はいくつかの論争を引き起こしたので、私の答えを私の背景から始めましょう:毎日のプロジェクト作業でV&Vにさらされることは別として、私は母校のソフトウェアエンジニアリング部門で数年間働いており、ソフトウェアエンジニアリングの講師をしています。これは、私が言ったことが正しいことを保証するものではありませんが、少なくとも、この回答に何らかの真実があるのではないかという疑いの利益が得られることを願っています。

あなたが信じているほど混乱していないことを確認させてください。あなたの質問であなたが述べたことは、それが誤解を招くのと同じくらい真実です。まず、あなたが正しく述べたことを指摘しておきます。

  • 検証=製品を正しく構築するvs検証=適切な製品を構築する
  • 静的手法は検証の一部です。主に、プログラムと要件から導出された正式な入力を受け取り、それらを相互に評価するためです。
  • 検証により、要件の正しい実装が保証されます(つまり、正しい方法で構築されていること)

次に、テストに関する混乱を片付けます。まず、多くのコメントが以前に述べたように、自動テスト(ユニット、統合など)によるコードの動的テストは、実際に検証の一部です。ただし、混乱のほとんどを引き起こすのは、検証中の人々がテストについても話し、それでも別の意味を持っているということです。検証では、通常、テストは意図された目的でアプリケーションを使用する人を含みます。最適なケースでは、これはお客様自身です。

ただし、検証と検証のテストで見つかった「エラー」[1]は根本的に異なります。

  • 検証テストエラー:これらは、何らかの形で要件に違反するエラーです。
  • 検証テストエラー:これらは、機能ではなく、作成した製品そのもののエラーであるため、要件内のエラーを明らかにします。

ほとんどの場合、さまざまなV&Vケースの具体的な例を見ると役立ちます。以下は、エラーの極端な例です。

  • 「f(x)はx + 1を返す必要がある」という低レベルの要件があり、「f」の実装は常に定数2を返す検証中にそれを見つけます。これは、eショッピングサイトを構築していて、彼が "f"を知らないか気にしていないためです。

  • 「システムは、最大80%のCPU負荷で1秒あたり1000リクエストを処理できる必要がある」という要件があります。繰り返しになりますが、検証はほとんどの静的手法と同じように困難を伴います。実際、これを確認する最も簡単な方法は、アプリケーションをリクエストでハンマー処理して動的にテストし、その間CPU負荷を監視することです。

  • 上記の「f」の要件をもう一度考えます。今回は「正しい」実装です。すべてのレビュー、静的分析、動的テストは成功を報告しますが、その後、顧客はソフトウェアをテストし、Webページのショッピングカートアイコンを見逃していることを伝えます。要件フェーズで行ったため、このエラーを見つけることができる検証の量はありません。

ご覧のとおり、「テスト」は、より正確に定義されていない場合でも、検証と検証の両方の一部であり、実際、「テスト」は両方に対して実行する必要があります。

[1]ここでは、「エラー」を口語的に使用して、エラー、失敗、間違い、障害などの区別を避けています。


本当に良かった!映画館に行くとき、私は本当に明確にするでしょう:ユーザーによるUATテストは別として、ブラックボックスまたはテストケースベースのテストの両方が検証プロセスの一部です。私はここにいますか?
John V

ただし、ISO 12207:2008には検証のための静的なテクニックのみが記載されていることを追加する必要があります:/
John V

残念ながら、多くの(ほとんどの)開発者は要件に対応していません。そのため、検証と検証の違いについて混乱します。そのため、V&Vは同じですが、さらに広まっていますが、Testing == QAです。
mattnz 2012

@フランク:まあ、私が言及したISOでは、検証が検証の一部として行われることを具体的に述べています(7.2.5.3.2.1および..2)。どうしてそんなに多くの論争があるのですか:(
John V

1
@ user970696:もちろん、これらのセクションではユーザーのニーズに対するテストについて明示的に言及しています。私が言及した2つのセクション(暗黙的に:7.2.4.3.2.3および7.2.4.3.2.4)は、状態The code implements proper event sequence, consistent interfaces, correct data and control flow, completeness, appropriate allocation timing and sizing budgets, and error definition, isolation, and recovery.The software components and units of each software item have been completely and correctly integrated into the software item--- テストせずにこれらのいずれかをどのように実行しますか?
Peter K.

0

実際、検証は製品を正しく構築していることを証明し、検証は正しい製品を構築していることを証明します。

したがって

  • 検証はプロセスの証明です...必要な標準と手順に従っていること、通常は静的分析とコードレビューによってチェックされます。
  • 検証は結果として得られる製品の証明です...コードは必要なことを行い、通常は動的分析とテストによってチェックされ、指定された入力が指定された出力になることを示します

私は通常ウィキペディアを引用しませんが、この場合は役に立ちます...

2つのプロセスの詳細な説明は、ISO 12207ソフトウェアライフサイクルプロセスにあります(他の回答の1つは、制御されていないコピーへのリンクを投稿します)。

7.2.4.3.2検証タスク

  • 要件の確認
  • 設計検証
  • コード検証
  • 統合検証
  • 文書検証

7.2.5.3.2検証タスク

  • テスト要件、ケース、仕様を準備する
  • テストを実施する

さて、最初の質問では、検証にテストが含まれていない理由を尋ねました。そして、他の回答の一部にもかかわらず、高い評判のP.SEメンバーで、私はそれがポイントではないことをあなたにそれを置く検証活動が、の検証活動。

一部の回答は、コードまたは統合を検証するためにテストする必要あること示唆しています。いいえ-その活動はモジュール化とインターフェースなどを証明することであり、実行ではありません。

Utimatelyは、どのようなこの議論が示すことは多くの混乱が何であるかにようがあるということです検証、何で検証が、これは、灰色の領域である境界によって助け、そして異なる規格に多少異なって定義されていません。

重要なのは、V&Vの両方の部分をカバーする必要があるということです。意味的にそうである限り、VであるかVであるかは問題ではありません。VとVだけです。


ありがとう、でも今は本当に困惑しています。質問へのコメントは、検証がテスト段階であることを示しています、あなたは反対を言います。
John V

今、私は2つの反対票を獲得しています...私の答えが間違っていると人々が考える理由を知りたいと思いますか?
Andrew

まあコメントで述べたように私見、検証は実際のテストですが、別名は最終製品のユーザーの受け入れに関するものです。
John V

その要約には絶対に同意しません。実際、それは明らかに間違っています。検証はテストとは何の関係もありません
Andrew

まあ、コメントで提供されたリンクを見てください。そのcomomは私が言った方法だけを受け入れたように見えますが、私も異なる意見を読みました。しかし、大学のテキストを読むと、たとえば、次のようなものがあります。検証アプローチは、製品の障害またはエラーを同一化しようとします。」
John V
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.