ソフトウェアテストの概要(Ammann&Offutt)は、p.32で5レベルのテスト成熟度モデルについて言及しています。
レベルテストとデバッグの間に違いはありません。
レベル1テストの目的は、ソフトウェアが機能することを示すことです。
レベル2テストの目的は、ソフトウェアが機能しないことを示すことです。
レベルテストの目的は、具体的なことを証明することではなく、ソフトウェアを使用するリスクを減らすことです。
レベル4テストは、すべてのITプロフェッショナルがより高品質のソフトウェアを開発するのに役立つ精神的な規律です。
詳細についてはあまり触れませんが。デバッグとテストの違いは何ですか?
テストは、コードの欠陥を見つけるか、別の角度から調べて、プログラムが想定どおりに動作することを適切なレベル(100%になることはありません)に証明することを目的としています。手動でも自動でも可能で、ユニット、統合、システム/受け入れ、ストレス、負荷、浸漬などのテストなど、さまざまな種類があります。
デバッグは、プログラムから特定のバグを見つけて削除するプロセスです。すべてのバグが異なるため、これは常に手動の1回限りのプロセスです。
私の推測では、作者は、レベル0では、テスト計画や何もせずに、手動テストのみが臨時の方法で実行され、テスト担当者がテスト対象の機能を実際に徹底的にテストし、テストを確実に繰り返されます。
デバッグは、複雑で構造化されていない信頼性の低い手動の段階的なプロセスです。デバッグを介してテストすることで、再現できないシナリオを作成するため、回帰テストには役立ちません。この例では、0以外のすべてのレベルでデバッグが除外されています。
デバッグとは、既知の問題と未知の問題をコードを系統的に調査することで修正する試みです。デバッグしているときは、通常、コード全体に集中しておらず、ほとんどの場合、実際のコードではバックエンドで作業しています。
テストは、デバッグ可能なコードをさまざまな方法で使用して問題を作成する試みです。ほとんどの場合、ユーザー空間で行われます。そこでは、エンドユーザーがコードを実行するときにコードを実行し、コードを壊そうとします。
簡単に言えば、「バグ」は、プログラムが実行時に本来の動作をしないときに発生したと言われています。つまり、期待される出力や結果を生成しません。このバグの原因を見つけ、動作を修正する方法を見つけ、コードまたは構成に変更を加えて問題を修正する試みは、デバッグと呼ばれます。
テストでは、プログラムまたはコードがさまざまな条件下で正しく確実に機能することを確認します。コードを「テスト」するには、入力、標準の正しい入力、意図的に間違った入力、境界値、環境(OS、構成ファイル)を変更します。基本的に、テストプロセスでバグを発見し、最終的には「デバッグ」しようとすることができます。お役に立てば幸いです。
ありません。あなたがそれを正しく行う場合:
ヒット 'em高、ヒット' em低 :
回帰テストとSaff Squeeze
スリーリバーズ研究所ケントベック
要約:欠陥を効果的に分離するには、システムレベルのテストから始め、欠陥を実証する可能な限り最小のテストが得られるまで段階的にインラインとプルーニングを行います。
テストは、クライアントにリリースする前に享受できる特権です。
バグは、クライアントにリリースした後に耐える悪夢です。
他の人たちは、テストとデバッグの違いについて述べています。
commonの部分を強調したいと思います。テスターが欠陥を見つけたら、それを分離する必要があります。 デバッグは問題を特定するための手法の1つ であり、実行時にアプリケーションの状態とそのコードを分析することで根本原因を特定します。実際、デバッグは Oxford Dictionaries によって「-識別のプロセスとコンピュータのハードウェアまたはソフトウェアからのエラーの削除」として定義されています。
テスターであろうと開発者であろうと、誰が欠陥を特定する(または特にデバッグする)かは二次的な質問です。
バグは目に見えるエラーです。デバッグは、テストケースの設計後に開始されるプロセスです。デバッグプロセスでは、エラーの原因を見つけて削除する必要があるため、テストよりも困難なタスクです。そのため、デバッグによってユーザーが不満を感じることがあります。
リストしたテスト成熟度モデルは、開発チームの考え方の説明です。
このリストが意味するのは、明確に言うまでもなく、心理の変化がテストの実施方法にどのように影響するかです。
開発チームが次のレベルに進むと、テストの範囲が広がります。
レベル0では、チームは必要ないと考えているため、テストは行われません。
レベル1では、基本機能の公称範囲を提供するためにテストが行われます。
レベル2では、テストはレベル1のすべてを含むように拡張され、破壊的テスト(ソースコードやバイナリを含む、開発者がアクセスできるすべての情報にアクセスでき、バグである可能性のあるものを見つけようとする専用テストチーム)が追加されます。ユーザー役割からトリガー)
レベル3では、レベル1〜2のすべてに加えて、非機能ベースのテスト/非正確性ベースのテスト(パフォーマンス特性など)が追加されます。
レベル4では、ソフトウェアテストの目標は、顧客に対応するITスタッフを含むすべての人がよく理解しています。したがって、ITスタッフはどのシナリオをテストするかについてフィードバックを提供でき、レベル4のリスク範囲を改善できます。
(免責事項:教科書にアクセスできないため、用語が正しくない場合があります。)
日常的で実用的な言葉で言えば、私はそれを完全に思いますコンテキストによって異なります。
中規模から大規模のチームで、高/非常に高水準(銀行、軍事、大規模、高予算、またはビジネスクリティカルシステムなど)に取り組んでいる場合、私は明確に思います「デバッグ」は「テストの結果」であるべきです、そしてそれらは明らかに非常に異なるものです。理想的には、テストは(ステージング環境での)デバッグにつながり、本番環境ではゼロに近いものが必要です。
テストの対象範囲は広く、規則的で非常に形式化されています-デバッグは特定の障害を修正する必要がある場合に時々発生する特定のプロセスですが、これは明白ではなく、システムの機能と結果の出力の詳細な調査が必要です。
ここで私の心の中でテストは不可欠なものですが、デバッグは、障害への解決策が不透明な場合にのみ必要な特定のツールです。
大規模なチームやシステムのTDDの明らかなユーティリティは完全に理解できます。また、複雑な(多くの場合「バックエンド」)システムや、出力と比較してコードの複雑さの割合が高い場合は、明らかに意味があります。次に、「テスト」は、いつ、なぜ失敗が発生するかを通知する現実的な可能性を秘めています。多くの複雑な作業を行い、結果として明確に測定可能な出力が得られるシステムは、一般に容易にテスト可能であるため、テストはデバッグとは異なります。これらの場合、テストは、期待と実際の出力の一致を確認または確認解除する手順に基づく正式な方法を強く意味します。テストは常に行われ、デバッグの必要性について時々通知されます。
これがユビキタスな真実であるならばそれは素晴らしいでしょう、もし私の開発サイクルが明確に定義されたバイナリ出力(赤、緑)によって区切られているなら私はそれが好きです...
私の場合(確かに特定です-中小規模の資金不足のウェブベースのデータ中心の企業管理システムで98%ソロで作業しています)私は本当にTDDがどのようにできるかわかりませんまたは、「デバッグ」と「テスト」は事実上同じです。
主に「テスト」という用語の使用は、TDDの方法論を示唆/密接に関連しています。
私はこれが完全に、完全に非Zeitgeistである「非信者を排除する、排除する、排除する」ことを知っています。しかし、私のコンテキストについて考えると、漠然とさえも気にせず、実用的な帽子をかぶってさえいます。最も想像力に富んだ状況で、TDDがクライアントにより多くのお金の価値を提供するのにどのように役立つかを見てください。
むしろ、「テスト」は正式なコードベースのプロセスであるという一般的な仮定に強く同意しません。
私の基本的な異論(私のparticular* context *に適用可能)は...
確実に機能するコードを記述できない場合-hellは、確実に機能するコードをtestはおそらく標準以下のコードだと言った。
(== --- ==)思考についてについてさえ気にするほど十分に私を熱狂させた例や議論を見たことがない=)単一のテストを作成する、私は今、笑えるほど実体のないテストコードを作成している可能性があります。「リポジトリがName == XのUserエンティティを返しますか?そして唯一-それ?」、しかしおそらく私がこのストリーミングを書いている私にはより多くの実用性があります、多分-the-internet-really-is-just-pure-foolish-spouting-self-gratifying-wildly-under-informed-blood-boilinglyignorant-無駄な愚かなゴミですが、私はここで悪魔の支持者を演じる必要性を感じています。 (誰かが私に光を見せて私を変えてくれることを望んでいるようなものです、多分これは私のクライアントにお金のより良い価値を与えることになるでしょう?).
間違いなく「デバッグ」は「テスト」と同じ場合があります。これはつまり、私の日常生活の中で、少なくとも3分の1の時間をシステムのローカルバージョンでさまざまなブラウザーで遊んで、必死にさまざまな風変わりなことを試し、仕事を中断して調査していることを意味します。それが失敗した理由とそれらを修正しました。
私はTDDマントラの「red/green/refactor」の明らかな実用性に100%同意しますが、私(低予算、solo dev RIAランドで作業)では、誰かが私にできることを教えてくれることを本当に愛していますたぶん、logicallyそして極めて重要realistically追加の値を取得します詳細を記述して(欠陥の可能性があるようにテストコード)実際の人間の相互作用に本質的に結びついている私の努力の完全な(そして本質的に唯一の)出力と実際に相互作用することからするよりも。
私にとって開発者が「テスト」について話すとき、それは一般的にTDDを意味します。
私はテストがあるかのようにコーディングしようとしますが、このすべてのテストに焦点を当てた開発によって奨励されたすべてのパターン/プラクティスおよびトレンドは素晴らしくて美しいと思いますが、私の小さな世界では、「テスト」はより多くのコードを書くのではなく、実際に現実の世界をテストすると、現実に近い方法で出力が出力されます。これは実質的にデバッグと同じです。つまり、ここでのアクティブな変更は、出力中心の自動化されていない「テスト」による直接的な結果である「デバッグ」です。これは、「テスト」を自動化された形式的なものとして、また「デバッグ」を人間的でその場しのぎの、または非構造化されたものとして一般に認められている見方とは対照的です。
目標が本当にお金/努力の価値であり、Webベースの対話型アプリケーションを作成している場合、努力の出力はWebページであり、非常に本質的に人間の入力に対する反応-なので、 "テスト」は、実際の人間との対話を通じて、これらのWebページをテストすることで実現できます。この相互作用が予期しない、または望ましくない出力につながると、「デバッグ」が発生します。デバッグは、プログラムの状態をリアルタイムで検査するという考え方にも密接に関連しています。テストは一般的に自動化に関連付けられていますが、これは不運な関連であることが多いと思います。
目標が本当に努力に値するものであり、自動テストが効率的で非常に有益である一方で、デバッグがそのテストの単なる出力であるか、自動テストの不十分な代用である場合、なぜ世界で2番目にアクセス数の多いWebサイトなのか(Facebook )目立たないほど明白な(ユーザーには明らかですが、テストチームやテストコードには明らかにありません)バグに悩まされることがよくありますか?
多分それは彼らが安心できる青信号に集中していて、彼らの仕事の出力を実際に使うことを忘れているからでしょうか?
あまりにも多くの開発者が、テストはコードを使用して行うものであり、デバッグはIDEでアイコンを赤に変えて理由がわからないため、時々行うものだと思いますか?それらに関連付けられた不幸な価値判断があり、これは一般に、期待と成果のギャップを埋めるために焦点を当てるべきことの実際の現実を曖昧にします。