ソフトウェアのテスト方法は欠陥のあるデータに依存していますか?


45

ソフトウェアエンジニアリングでは、バグを修正するコストが、バグが発見された後の開発で指数関数的に増加することはよく知られています。これは、Code Completeで公開され、他の多くの出版物で採用されているデータによってサポートされています。

ただし、このデータは存在しなかったことがわかります。Code Completeが引用したデータは、明らかにそのようなコスト/開発時間の相関関係を示しておらず、同様の公開された表は、いくつかの特殊なケースで相関関係を示しました。

これを裏付ける、または反論する独立したデータはありますか?

そして、もし本当なら(つまり、発見された最近のバグのためにこの指数関数的に高いコストをサポートするデータがない場合)、これはソフトウェア開発方法論にどのように影響しますか?


これは論理的に聞こえます。ほとんどの場合、後でバグが発見されると、データの破損も伴うためです。さらに、データの破損は、バグの修正プロセスの後半で発見された場合、企業に多大なコストをかけます。
EL Yusubov

8
@ElYusubov確かにそうです。しかし、常識は非常に欺くことができます。私たちの心は、実際には逆の場合でも、明らかな論理によって簡単にtrickされます。そのため、証拠に基づいたソフトウェアエンジニアリングが非常に重要です。
コンラッドルドルフ


2
記録(および私の回答で言及)について、私が見つけたこのことについての最も早い言及は、コード完了のかなり前です。1976年の(独立して)FaganとStephensonの研究は、私が見つけることができる最も早い言及です。Code Completeの最初の版は、ほぼ20年後の1993年まで公開されませんでした。1980年代のバリーベームの仕事がこのアイデアの人気を高めたと期待します-ベームの仕事は1980年代から2000年代後半までのソフトウェアエンジニアリングプロセスに非常に影響を与えました。
トーマスオーウェンズ

1
これを含め、ソフトウェア工学統計に関する記述が間違っていることは公理です。(後から見つけたバグは、一般により複雑なバグです。また、それらを修正することは、後期の修正で「コントロール」を配置することにより複雑になります。)
ダニエルRヒックス

回答:


25

ソフトウェアのテスト方法は欠陥のあるデータに依存していますか?

はい、明らかに。アジャイルチェンジオブチェンジカーブ調べると、 Kent BeckのXPに関する作業の一部(動機または正当化の一部であったかどうかはわかりません)は、「 Code Completeテーブルの背後にある指数関数的な曲線。そのため、少なくとも1つの方法論(テストファースト開発の普及に最も貢献した方法論)の作業は、少なくとも部分的には欠陥データに基づいています。

これを裏付ける、または反論する独立したデータはありますか?

はい、確かにあなたが見ることができる他のデータがあります-私が知っている最大の研究は、CMM評価プログラムの一部としてヒューズ航空機で行われた欠陥の分析です。そこからのレポートは、それらのフェーズ欠陥コストがどのように依存したかを示しています。ただし、そのレポートのデータには差異が含まれていないため、「このことはそれ以上のコスト」の結論を出すことに注意する必要があります。また、方法論とは無関係に、これらのデータの関連性を疑問視する1980年代から今日にかけてツールと手法に変更があったことに注意してください。

したがって、これらの数値を正当化するのにまだ問題があると仮定します。

これはソフトウェア開発方法論にどのように影響しますか?

検証できない数値に依存しているという事実は、逸話や経験に基づいて人々が進歩するのを止めませんでした:多くのマスター見習い取引が学習されるのと同じ方法です。中世にはエビデンスに基づいた石積みのジャーナルはなかったと思いますが、それでも大きくて印象的で長続きする建物が大量に建設され、ある程度の成功を収めました。それが意味するのは、私たちは主に「自分や出会った人々のために働いたもの」に基づいているということです。悪いことではありませんが、おそらく現在の技術時代の礎を提供する何百万人もの人々の分野を改善する最も効率的な方法ではありません。

いわゆる工学の分野では経験主義のより良い基盤がないことは残念だと思う。その基盤が整っている-臨床医学が証拠に基づいた実践によって変容したように見えるのと同じように。ただし、これはいくつかの大きな仮定に基づいています。

  • ほとんどのソフトウェアエンジニアリング慣行の専有的性質が、収集される有用で関連性のある十分なデータを妨げないこと。
  • これらのデータから得られた結論は一般に適用可能である(ソフトウェアエンジニアリングは熟練した専門職であるため、経験、能力、および嗜好の個人差がそのような適用性に影響を与える可能性がある)。
  • 「現場の」ソフトウェアエンジニアは、こうして得られた結果を利用することができ、やる気があります。そして
  • そもそもどのような質問をすることになっているかを実際に知っている。ここが明らかに最大のポイントです。ソフトウェアエンジニアリングの改善について話すとき、改善したいことは何ですか。測定は何ですか?その測定値を改善すると、実際に結果が改善されますか、それともシステムに影響しますか?例として、私の会社の経営者が、実際のプロジェクトコストと予測プロジェクトコストの比率を下げると決めたと仮定します。すべてのコスト見積もりにファッジファクターを掛け始めるだけで、その「目標」を達成できます。その後、すべての見積もりを間違えることが標準的な業界慣行になるべきでしょうか?

エビデンスに基づいたエンジニアリングに関する素晴らしいメタ回答。ありがとう。
コンラッドルドルフ

4
くそー、私はちょうどこれが馬の口からまっすぐに来ていることに気付いた。へへ。驚くばかり。
コンラッドルドルフ

1
「欠陥のあるデータ」の使用を「完全に間違っている、その逆が正しい」と解釈しているように感じますが、あなたの立場はそれ間違っているかもしれないと指摘するだけだと感じています。これは正しいです?
ダニエルB

3
@DanielB正しい。それが実際に間違っているという証拠を見せてください。それまでは、それが明らかに正しくないことだけを知っています。

1
@GrahamLeeあなたの主張がわかります(フレージングは​​少し不必要に攻撃的だったかもしれないと思うだけです)。好奇心から、ここでFaganの論文を見つけました。「...手直しが可能...その起源に近い...プロセスの後半で行われる場合の10〜100倍安い」と書かれています。ただし、このテキストの近くに引用はありません。
ダニエルB

8

私にとっては、「これがソフトウェア開発方法論にどのように影響するか」に対する答えは「あまりない」です。

開発者またはエンドユーザーのどちらに捕らわれても、ユーザーに捕らえられてから修正するのにもっとお金がかかるかどうかにかかわらず、システムでバグが見つかったという事実は残っています。開発者に捕まえられたら、うまくいけば簡単な修正になります。ユーザーが発見したバグにも同じ希望があります。

エンドユーザーがキャッチしたバグを修正するための実際の開発者の時間のコストに関係なく、コーダーが自分の仕事を吸うステレオタイプを維持する無形のコストがあります。ユーザーがバグを見つけた場合、それは開発者の責任です。そのため、エンドユーザーが発見した各バグは、システムに対するユーザーの信頼を低下させます。それは、購入したい家を巡回し、家の片隅の天井から水しぶきが見えるようなものです。それ自体は簡単な修正ですが、何が原因で、その根本原因が他にどのような影響を受けているのか疑問に思います。あなたの心の安らぎは何ですか?壁をスタッドに引き戻し、すべてを視覚的に検査して、汚れが修正された孤立したインシデントによるものであることを確認する必要があります。それが可能性があるかもしれないことを知っていても、あなたは家に非常に自信を持ちません。同様に、

これらの無形のコストは、バグが検出されるとすぐに回避されます。これは、TDDスタイルの方法論の目的であります。開発者またはパートナーのペアでタイピング中に検出されたバグ、コンパイル時に検出されたバグ、ユニット/統合テスト(TDDによって追加されたレイヤー)で検出されたバグは、ユーザーが知る必要のないバグです。プロジェクトマネージャーは決して謝る必要はありません。また、数秒後に残したいと思ったシステムの一部でギアを欠陥修正モードに切り替えるために、今何をしているのかを引き離す必要はありません。前。


3
興味深い答え。開発は反復的なプロセスであるか、改良と改善の両方であることをユーザーに理解してもらいます。私は非常に迅速に何かを与えることができ、問題を見つけたり改善が必要な場合は、それらの変更も非常に迅速に(数日または数週間ではなく、数分または数時間)変えることができます。システムは時間の経過とともに安定しますが、仕様プロセスと最初のビルドではなく、開発プロセスと最終結果に信頼を置きます。(もちろん、あなたが働いている環境に依存します-私は基幹業務アプリを書いているので、壊れた場合は修正されます)。
カークブロードハースト

残念ながら、元の証拠-製品がフィールド化されたときに見つかった要件エラーは、製品がフィールド化されたときに見つかった実装エラーよりもコストが高いということは、より良い検証ではなく、より良い検証の必要性を暗示しています。TDD-テストを使用して要件に対して製品を検証することは、単にこれらのバグを見つけることとは関係ありません。
ピートカーカム

6

私はこれを、私が見つけているもののほとんどが1970年代から1980年代初頭に由来しているという事実を前置きするつもりです。この間、シーケンシャルプロセスモデルは、反復および/または増分アプローチ(スパイラルモデルまたはアジャイル手法)よりもはるかに一般的でした。この作業の多くは、これらのシーケンシャルモデルに基づいています。ただし、関係が破壊されるとは思わないが、反復/増分アプローチの利点の1つは、機能(アプリケーションの垂直スライス全体)を迅速にリリースし、依存関係が注入されて各フェーズの複雑さになる前に問題を修正することですは高い。


私はちょうど私のコピー引き出さソフトウェア工学経済学を MEフェイガン(で彼は、「プログラム開発における誤差を低減する設計とコードの検査」を引用し、第4章では、このチャートの背後にあるデータへの参照を見つけたIEEEUMDからPDF)、EB Dalyの「ソフトウェアエンジニアリングの管理」、WE Stephensonの「Safeguard System Software Developmentで使用されるリソースの分析」(ACM)、および「いくつかのTRWプロジェクト」。

...修正または変更が行われるフェーズの関数としてのソフトウェアエラーの修正(または他のソフトウェアの変更)の相対的なコスト。計画と要件の段階でソフトウェア要件エラーが検出および修正された場合、その修正は要件仕様を更新する比較的簡単な問題です。同じエラーがメンテナンスフェーズまで修正されない場合、修正には、仕様、コード、ユーザーおよびメンテナンスマニュアル、およびトレーニング資料のはるかに多くのインベントリが含まれます。

さらに、後期修正には、はるかに正式な変更承認および管理プロセス、および修正を再検証するためのはるかに広範な活動が含まれます。これらの要因を組み合わせることで、大規模プロジェクトの保守フェーズでは、要件フェーズよりも通常100倍のコストでエラーを修正できます。

ボヘムはまた、2つの小規模で形式的なプロジェクトを検討し、コストの増加を発見しましたが、大規模なプロジェクトで100倍になったよりもはるかに重要ではありませんでした。グラフを見ると、システムが稼働した後の要件の欠陥を修正するために、要件フェーズよりも4倍の違いがあるように見えます。彼はこれを、プロジェクトを構成するアイテムのより小さなインベントリと、より単純で修正された実装をより速く実装する能力につながった減少した形式に起因した。

Software Engineering EconomicsのBoehmに基づくと、Code Completeの表はかなり肥大化しています(範囲の下限が高すぎることがよくあります)。フェーズ内で変更を行うコストは実際1です。ソフトウェアエンジニアリング経済学の図4-2から外挿すると、要件の変更は、アーキテクチャで1.5〜2.5倍、コーディングで2.5〜10、テストで4〜20、4〜メンテナンス中100。量は、プロジェクトのサイズと複雑さ、および使用されるプロセスの形式に依存します。


バリーベームの付録Eおよびリチャードターナーの「俊敏性と規律バランスをとる」には、変化のコストに関する経験的な調査結果に関する小さなセクションが含まれています。

冒頭の段落では、Kent BeckのExtreme Programming Explainedを引用し、Beckを引用しています。時間の経過とともに変化のコストがゆっくりと上昇した場合、可能な限り遅く決定が行われ、必要なものだけが実装されると書かれています。これは「フラットカーブ」と呼ばれ、エクストリームプログラミングを推進します。しかし、以前の文献で発見されたのは、5:1の変化を持つ小さなシステム(<5 KSLOC)と100:1の変化を持つ大きなシステムの「急カーブ」でした。

このセクションでは、メリーランド大学の経験に基づいたソフトウェアエンジニアリングセンター(国立科学財団主催)を引用しています。彼らは利用可能な文献の検索を実行し、結果は100:1の比率を確認する傾向があり、一部の結果は70:1から125:1の範囲を示していることがわかりました。残念ながら、これらは通常「前もって設計された大きな」プロジェクトであり、順番に管理されていました。

Extreme Programmingを使用して実行される「小さな商用Javaプロジェクト」のサンプルがあります。各ストーリーについて、エラーの修正、新しいデザイン、およびリファクタリングの労力が追跡されました。データは、システムが開発されるにつれて(より多くのユーザーストーリーが実装される)、平均的な努力が重要な割合で増加する傾向があることを示しています。リファクタリングの努力は約5%増加し、努力の修正に向けた努力は約4%増加します。

私が学んでいるのは、システムの複雑さが必要な労力に大きな役割を果たすということです。システムに垂直スライスを構築することにより、複雑さを山に追加するのではなくゆっくりと追加することで、曲線の速度を遅くします。非常に複雑な要件、非常に複雑なアーキテクチャ、非常に複雑な実装などの複雑な要件を処理するのではなく、非常に簡単に開始して追加します。

これは修正コストにどのような影響がありますか?結局のところ、おそらくそれほど多くはありません。ただし、(技術的負債の管理を通じて)複雑さをより細かく制御できるという利点があります。さらに、頻繁にアジャイルに関連付けられる成果物は、プロジェクトがより早く終了する可能性があることを意味します-「システム」を配信するのではなく、ビジネスニーズが満たされるか、新しいシステム(したがって新しいプロジェクト)が大幅に変更されるまで、作品が配信されますが必要です。


Stephen KanのSoftware Quality Engineeringメトリックとモデルには、第6章にフェーズ欠陥除去の費用対効果に関するセクションがあります。

彼は、Faganの1976年の論文(Software Engineering Economicsでも引用)を引用して、高レベルの設計(システムアーキテクチャ)、低レベルの設計(詳細設計)、および実装が10から100倍安くなることを述べていますコンポーネントおよびシステムレベルのテスト中に行われる作業よりも。

彼はまた、1982年と1984年のFreedmanとWeinbergによる大規模システムについての2つの出版物を引用しています。1つ目は「ウォークスルー、検査、技術レビューのハンドブック」で、2つ目は「レビュー、ウォークスルー、検査」です。開発サイクルの早い段階でレビューを適用すると、テストフェーズに到達するエラーの数を10分の1に減らすことができます。欠陥の数を減らすと、テストコストが50〜80%削減されます。私は研究をより詳細に読む必要がありますが、コストには欠陥の発見と修正も含まれているようです。

Remusによる1983年の調査「検査/レビューの観点からの統合ソフトウェア検証」では、カリフォルニアのIBMのサンタテレサ研究所のデータを使用して、さまざまなフェーズ、具体的には設計/コード検査、テスト、およびメンテナンスで欠陥を除去するコストを調査しました。引用された結果は、1:20:82のコスト比を示しています。つまり、設計またはコード検査で見つかった欠陥の変更コストは1です。同じ欠陥がテストに逃げた場合、20倍のコストがかかります。IBMのミネソタ州ロチェスター施設からのサンプルデータを使用して、KanはAS / 400プロジェクトの欠陥除去コストが類似していることを発見しました。 1:13:92に。しかし、彼はコストの増加は欠陥を見つけるのが難しくなったためかもしれないと指摘しています。

Gilbの1993年(「ソフトウェア検査」)および1999年(「ソフトウェアエンジニアリング仕様と品質管理プロセスの最適化」)のソフトウェア検査に関する出版物は、他の研究を裏付けるために言及されています。


追加情報は、欠陥修復コストの増加に関するConstruxのページに記載されている場合があります。Code Completeの著者であるSteve McConnellがConstruxで設立され、働いていることに注意してください。


私は最近に耳を傾け話、本物のソフトウェアエンジニアによって与えられ、グレンVanderburgで2010年に彼の与えられた同じ話でローンスタールビー会議でスコットランドのRuby会議Erubycon 2011年、2012年のQConサンフランシスコ、とオライリーソフトウェアアーキテクチャ会議2015年。Lone Star Ruby Conferenceだけを聞いたことがありますが、彼のアイデアが洗練されたため、話は時間とともに進化しました。

Venderburgは、この履歴データのすべてが、プロジェクトが段階を経るのではなく、時間の経過とともに欠陥を修正するコストを実際に示していることを示唆しています。前述の論文や書籍で検討されたプロジェクトの多くは、フェーズと時間が一緒に移動する連続した「ウォーターフォール」プロジェクトでした。ただし、反復プロジェクトおよび増分プロジェクトでも同様のパターンが発生します。1つの反復で欠陥が挿入された場合、その反復で修正するのは比較的安価です。ただし、反復が進むと、多くのことが起こります。ソフトウェアがより複雑になり、特定のモジュールやコードの一部での作業に関するマイナーな詳細の一部が忘れられ、要件が変更されます。これらはすべて、欠陥を修正するコストを増加させます。

これはおそらく現実に近いと思います。ウォーターフォールプロジェクトでは、アップストリームの問題により修正が必要なアーティファクトの量が原因で、コストが増加します。反復および増分プロジェクトでは、ソフトウェアの複雑さが増すため、コストが増加します。


@AndresF。これらの引用を追跡する際に私が発見した問題の1つは、ボサビットがリンクした本で「干し草の山の針」の問題として説明したことです。本を引用することは非常に難読化されます-引用を読みに行くときにまだ印​​刷されていても、引用する著者の主張を裏付ける小さなナゲットを探して読むために数百ページあります。

3

その単純なロジック。

仕様でエラーが検出されました。

Case : Error found while reviewing UseCase/Function spec.
Actions:
        Rewrite paragraph in error.

Case : Error found during unit test.
Actions:
        Fix code.
        (Possibly) rewrite paragraph in spec.
        rerun unit test.

Case : Error found in integration test.
        Fix code.
        (possibly) rewrite paragraph in spec.
        rerun unit test.
        build new release.
        rerun integration test for whole system.

Case : Error found in UAT
        Fix code.
        (possibly) rewrite paragraph in spec.
        rerun unit test.
        build new release.
        rerun integration test for whole system.
        deploy release to UAT.
        rerun UAT tests.


Case : Error found in production
        Fix code.
        (possibly) rewrite paragraph in spec.
        rerun unit test.
        Build release.
        rerun integration test for whole system.
        deploy release to UAT.
        rerun UAT tests.
        deploy release to production.

後でわかるように、エラーが検出されると、より多くの人が関与し、より多くの作業をやり直す必要があります。また、「通常」の環境では、UATに達するとペーパーワークと官僚主義が指数関数的に増加します。

これにはすべて、実動ソフトウェアのエラー(営業の損失、注文過剰、顧客のハッキングなど)によってビジネスに生じる可能性のあるコストは含まれていません。

実稼働環境でバグが発生したことのない自明でないシステムを作成した人はいないと思いますが、バグを早期に発見するためにできることは、長期的には時間と労力を節約できます。仕様のレビュー、コードのレビュー、広範なユニットテスト、さまざまなコーダーを使用したテストの記述などはすべて、バグを早期に発見する実証済みの方法です。


2
これは、仕様で検出されたエラー、つまり最初に導入されたエラーなど、1つのケースのみを対象としています。しかし、開発のすべての段階でエラーを導入することができ(展開後のバグ修正を含む)、それらのエラーの修正はシステムの小さな部分に影響を与える可能性があるため、かなり簡単になります。
コンラッドルドルフ

2
ただし、問題はバグ修正に予期しない副作用が生じる可能性があるため、修正がSIT UATなどのやり直しに固執しているコンポーネントの特定のサブセットのみに影響することを完全に保証できない限り、紙の証跡はどれほど小さくても同じように負担が大きい変化する。
ジェームズアンダーソン

2
遅く発見された場合、バグの修正は常により高価になることをこれが示しているとはまだ確信していません。バグは導入後の時間が経つにつれて修正するのにより高価になると主張します。すなわち、遅れて導入され、すぐに発見され、修正されたバグは、非常に早期に導入され、早期に発見されたバグよりも安価です(ただし、最初のケースよりも長い遅延があります)。少なくとも、これがどのように機能するか想像できます。
コンラッドルドルフ

@KonradRudolph詳しく説明してもらえますか?この投稿は私の理解でもあり、時間は重要なのにフェーズは重要ではない理由はわかりません。私にとって、プロジェクトの時間の尺度は現在のフェーズです(場合によっては、すべてのフェーズを実行するためのタイムボックス化された反復)。詳細設計の3日目と300日目に行われた作業の違いはわかりません-詳細設計作業製品は他の作業製品の作成には使用されていないため、詳細設計に挿入された欠陥は1か所にのみ存在しますそこで変更が必要です。日々の経過がどうなのかわかりません。
トーマスオーエンズ

3
@Thomas私はただ仮説を立てています。しかし、時間は重要です。なぜなら、高度に専門化され、他に直接または間接に依存するものがない限り、導入されるコードまたは仕様機能のほとんどは時間が経つにつれてより多くのコンポーネントに影響を与えるからです。そのため、導入されたフェーズに関係なく、長い間存在するバグは、システムの多くの部分に影響を与える可能性があり、その削除では、そのプロセスによって他のコンポーネントが破損しないことを確認する必要があります。
コンラッドルドルフ

2

これは、リスク管理と経済に関するものであり、これまでもそうであったと信じています。欠陥の数を減らすコストと、将来の欠陥の影響の現在価値とはどのくらいですか。Angry Birdsで黄色い鳥の軌道がわずかに外れていることは、トマホークの巡航ミサイルが外れている軌道と同じではありません。どちらのプロジェクトのソフトウェア開発者も、その表に基づいて決定を下すことはできません。この点で、何も変わりません。

私がこれがうまくいくと思うのは、フィードバックによるものです。フィールドでの高価なバグにより、企業は品質プロセスを厳しくしますが、フィールドからの苦情は企業を緩和させません。そのため、時間の経過とともに、ソフトウェア開発会社は、彼らのために働く何かを中心に収束または振動する傾向があります(+/-)。Code Completeは初期値に影響を与えたり、企業を何らかの形で引っ張ったりする場合があります。誰も気付かないような欠陥の除去に多大な労力を費やしている企業は、おそらく、より最適化されたアプローチを持つ競合他社にビジネスを失うことになるでしょう。一方、バグのある製品をリリースする会社も廃業します。

クイック検索からのいくつかの関連論文(完全な論文を読んで、より多くの研究を行い、あなた自身の意見を形成してください):

ソフトウェア品質コスト調査の体系的文献レビュー(2011)

「このようにコミュニティは研究領域の構造をしっかりと理解していますが、経験的検証が欠けていることがよくあります。 、それは定量的データに強く依存して新しい調査結果を生成します。したがって、品質コストデータを収集する新しいアプローチ、およびそのようなデータを利用可能にするための産業界と研究間の強力な協力が必要です。

ソフトウェア品質のコストの評価(1998)

「最後に、ソフトウェア品質の総コストを削減するために適合ポリシーを調整できるように、ソフトウェア適合および不適合コストを監視することが重要であることがわかりました。」

ソフトウェアの欠陥の費用行動(2004)

要約...「現在の研究では、欠陥およびそれらを修正する(または修正しないままにする)費用がソフトウェアの最終コストに影響する方法に関する知識を更新しようとしています」...「修正されていない欠陥は指数関数的にコストが高くなります未解決の各フェーズで」

テストカバレッジと検証後の欠陥:複数のケーススタディ(2009)

「また、テストカバレッジはテストカバレッジとともに指数関数的に増加しますが、フィールドの問題の減少はテストカバレッジとともに直線的に増加します。

ソフトウェアテストプロセスとビジネスバリューのギャップを埋める:ケーススタディ(2009)


0

私は単にチェックしていないので、質問の最初の部分に答えることはできません。しかし、私はあなたの2番目の質問に対する答えを定式化することができ、おそらく最初の質問に対する可能な答えを示唆します。

言うまでもなく、開発ツールの使用が本質的に難しいことを除けば、バグ修正のコストで最も重要な要因は、製品の本質的な複雑さと、ユーザーがその製品をどれだけ理解できるかということです。

コードに少し焦点を合わせて、コードは通常、コードの本質的な複雑さ(完全に真実ではない可能性があり、独自の議論に値する可能性がある)に対処できる開発者によって書かれ、維持されるという仮定の下で、メンテナンス、そしてバグの修正における決定的な重要性は、メンテナー上記のコードを理解する能力です。

残念ながら、ほとんどが不十分または不適切に使用されている実績のあるソフトウェアエンジニアリングツールを使用することで、コードを理解する能力が大幅に向上します。適切なレベルの抽象化、モジュール性、モジュールの結合性の強化、およびモジュールの結合の削減は、適切な使用が必要な複雑さに対処するための重要なツールです。インターフェイスへのコーディング、または、OOPでは、構成に対する継承の過剰使用を回避し、機能ごとにパッケージ化することは、コーディングで十分に注意を払わないことが多いテクニックの一部です。

業界の競争の現実は、ソフトウェアを開発するための品質向上方法の採用にマイナスの力を与え、継続的な成功の尺度としてソフトウェアの本質的な品質を低く保つと信じています。

その結果、業界では、ソフトウェアは大きくなるほどバグ修正コストの影響を受ける傾向があると思います。このような製品では、システムが成長するにつれてシステムの理解が難しくなるため、バグを修正するのは時間の経過とともに難しくなります。各機能によってもたらされる懸念は、他の懸念と過度に結びついているため、理解しにくくなっています。または、適切なレベルの抽象化が採用されなかったため、メンテナーがシステムの適切なモデルとその理由を定式化することが困難になりました。ドキュメントの欠如は確かに助けにはなりません。

例外があります。優れた開発者が支持する堅実な実践がなければ、Googleはそのペースで機能していないと思います。他の人も同じ状況にある可能性があります。しかし、ソフトウェアの大部分については、データCode Completeの主張を実際に確認したとしても驚かないでしょう。


負の評価でも答えを待っています。私は最近、大手銀行のオンラインバンキングツールを管理している候補者にインタビューしました。カジュアルチャットでは、コピーペーストの再利用やその他の見苦しい構造のため、使用しないことを提案しました。以前の仕事では、リーマン、MS、UBSなどの銀行向けの分析ツールを作成する会社の開発者でしたが、ドメインの専門家として行動する必要がありました。特定の慣行に同意しなくても、全体的なメッセージは次のとおりです。業界は真実です。
ミハイダニラ

-1

別の答え!今回は、「ソフトウェアの奇形は欠陥のあるデータに依存している」というタイトルの質問に対処するためのものです。

本当の答えは「データがありません」です。ソフトウェアプロジェクトにはデータの大きな信頼できるボディがないため、欠陥、市場投入までの時間などがあります。

このようなデータを収集しようとする試みはすべて、資金不足、統計的に欠陥がある、または特定のプロジェクトに特有であるため、一般的な結論を導き出すことはできません。

さらに、ソフトウェア開発プロセスは、厳密な測定には主観的で滑りやすいため、これまでにないだろうと思います。そのようなデータを収集するのに最適な組織(大規模なソフトウェアハウスとシステムインテグレーター)は、パフォーマンスから収集された数値が非常に恥ずかしいものであることを心から知っています。

ソフトウェアプロジェクトのコストと成功に関する数値を公開している唯一の組織
は政府部門であり、そうしなければならないからです。

結論として、すべてのソフトウェア研究は必然的に純粋に主観的なものになります。客観的な結論の根拠となる実際のデータがないためです。


1
いや、これは買わない。まず第一に、そこにあるあなたはそれが不備の権利ということかもしれないが、データ。しかし、これには、一般的な解雇ではなく、各データセットに対する個別の批判が必要です。そして、私はデータが決して存在しないという主張、および「主観的すぎる」などの理由について深く疑っています。それは本質的に想像力の欠如から議論です。ここで信頼できる統計情報を収集するのは簡単だとは思わないが、完全に実行可能であると私は主張する。他の分野では、より複雑なシステムの分析に成功しています。
コンラッドルドルフ

@Konrad-「欠陥カウント」のような基本的で単純なものを取り、いくつかのショップはユニットテストの失敗をカウントします、いくつかのショップはUATまで欠陥の追跡を開始しません、いくつかのショップはコードの欠陥のみを追跡します欠陥追跡プロセスの展開スクリプト。背景色が間違っていると、欠陥としてカウントされますか?一部のプロジェクトはそれを欠陥として追跡し、他のプロジェクトはそれを無視します。
ジェームズアンダーソン

これらはすべて偏狭な、つまり解決可能な問題です。可能性に根本的な制約を課すのではなく、解決を要する困難を追加するだけです。
コンラッドルドルフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.