私たちのスクラムマスターは、バグを技術的負債と呼んでいます。彼は正しいのですが、バグはアジャイルの世界では技術的な負債であると考えられていますか?
ここでの答えはかなり単純だと思います。技術的負債の主な特徴は、選択によって発生するものです。
特定の目的をより早く達成するために、後で問題が発生すると予想されるアーキテクチャ、設計、または実装の決定を行うことを選択します。
バグはコードに含めることを選択したものではありません。事実、技術的な負債ではありません。
もちろん、発見後に行われた選択について、あらゆる種類の興味深い(そしておそらくは有効な)議論をすることができますが、根本的に(特に質問の文脈では)いいえ、バグは技術的な負債ではありません。
追記として-技術的負債はそれ自体にバグをもたらすことを考えると、選択の性質について多くの仮定をはるかに超えているため、私はその主張に同意しません。たとえば、適切に記述され、適切に構造化された、テスト対象のコードを使用して、早期デリバリーのためのアーキテクチャの妥協を行うことができます。同様に、バグにつながらないが、おそらく多くのストレスと苦痛につながる展開プロセスを自動化しないことを選択できます。もちろん、借金がSOLID(または何でも)でないコードを記述したことである場合は、そうです...しかし、常にそうであるとは限りません。
はい。
技術的債務(設計債務またはコード債務とも呼ばれます)は、コードベース内のソフトウェアアーキテクチャおよびソフトウェア開発が不十分または発展している場合の最終的な結果を指すネオロジカルな比喩です。
出典: Wikipedia
技術的負債を、より良いワークフロー(たとえば、コーディングにジャンプする前にアーキテクチャを適切に実行する、TDDを実行するなど)、より良いコーディング方法などを使用することで回避できたものとして読みます.
追加のレビューまたはより正式な方法の使用により、ほとんどのバグを回避できたはずです。そもそもバグがないようにできる限りのことをしないことで、プロジェクトの即時/短期コストを下げることができますが、技術的負債は増えます。
BЈовићによる回答 を読んだ後、思ったほど簡単ではないかもしれません。
例 バグは技術的負債の一部ですか? 記事は、知っているが修正しないことにしたバグのみが技術的負債の一部であると主張しています。
別の例として、 技術的債務に関するクリストファーの考え は、バグを技術的債務の結果として認定しますが、その一部ではありません。そうは言っても、「新機能を実装するためのコスト」など、リストされた結果の多くは、バグの数に影響されます。
最後に、 技術債務のABCDE-Tモデル を作成するときに、6つの要因の1つとしてバグを含めましたが、それらは異なる方法で考慮されます。焦点はバグそのものではなく、バグの収集、優先順位付け、解決方法にあります。バグ自体は(前の例のように)技術的負債の結果として表示されますが、技術的負債の要因として表示されることはありません。
私はまだバグ-すべてのバグ-が技術的負債の一部であると答える傾向があります
最初の引数:
Jeff Atwoodの引用を読むと、ほとんどのバグは次のように分類されます。
迅速で汚い設計の選択のため、将来の開発で私たちがしなければならない追加の努力
ビジネスアプリケーションでは、ほとんどすべてのバグは、迅速で汚い設計の選択または悪い慣行のいずれかから発生します(テストの欠如、開発者が十分に知らない技術の使用、コミュニケーションの欠如、ドメインの理解の欠如など)。など)これは、「迅速でダーティなデザインをより良いデザインにリファクタリングすることにより」、より良い手法を採用することにより、企業はほとんどのバグを解決できることを意味します。
2番目の引数:
ある会社が別の会社に売却されるときに考慮に入れることが重要である会社の通常の負債と、プロジェクトが別の会社に売却されるか与えられるときに考慮に入れることも同様に重要である技術的な負債とを平行にすると別のチームにとっては、新しいチームは次のことを行うので、バグが技術的負債の一部であることが簡単にわかります。
新しい機能を作成する前に、これらのバグに対処する必要があります(Joel Testのポイント5:新しいコードを記述する前にバグを修正しますか?)
または、バグを維持し、技術的な負債をこのように維持/増加します。
ジェフ・アトウッドの記事 技術的負債の支払い は技術的負債とは何かについて非常に良い答えを与えます:
技術的負債には利息の支払いが伴います。これは、迅速で汚れた設計の選択のために、将来の開発で行わなければならない余分な労力の形でもたらされます。利息の支払いを続けるか、迅速で汚れたデザインをより良いデザインにリファクタリングして元金を支払うかを選択できます。元本の返済には費用がかかりますが、将来的には利息の支払いを減らすことで利益を得ます。
厳密に言えば、バグがソフトウェア開発の速度を落とさない限り(バグの変更、新機能の追加など)、バグは技術的負債の一部ではありません。それらはソフトウェアの欠陥です。
ただし、コストが高すぎてバグを修正できない場合、またはバグの回避を余儀なくされる場合(さらに技術的な負債が発生する場合)は、技術的な負債の一部になります。
バグは技術的な負債ではありません。技術的負債は、品質の欠如ではなく、質の低下です。そもそも、バグのあるソフトウェアは配信しないでください。ご存じのように、包括的なドキュメントのことよりも、機能するソフトウェア全体です。
技術的負債の最大の違反者は「一時的なバグ修正」であり、テストに合格してストーリーが受け入れられるものを知っています。自分で約束したものは後でリファクタリングしますが、絶対に行いません。これらの一時的な修正、パッチ、その他のものが蓄積されると、コードは不要なものになり、更新やテストが困難になり、一般に悪夢になりますが、それでも問題ありません。
この意見を支持するために、私は情報源であるウォードカニンガムに直行しました。これに関して、ウォードはケーパーズ・ジョーンズとしばらく前に良いインタビューをしました、それは一見の価値があります。
ワード・カニンガム&ケイパーズ・ジョーンズによるテクニカル・デット・ディベート
読む価値のある別の記事はマーティン・ファウラーによるものです
Martin Fowler on Technical Debt
マーティンの記事内で、OOPSLA92からのワードカニンガムによる技術的負債の最初の言及へのリンクを見つけてください。
上記の記事からの引用:
未熟なコードは正常に機能し、顧客に完全に受け入れられる可能性がありますが、過剰な量はプログラムをマスターできなくなり、プログラマーの極端な専門化につながり、最終的に柔軟性がなくなります製品。初回コードの出荷は借金をするようなものです。
結局のところ、技術的負債には一部の人々のバグが含まれるようになったかもしれませんが、それは問題ないと思います。それが本来の意図ではなかったと思います。
私の意見では、バグは技術的な負債の一部であると言っても、関係ありません...
明白な事実は、既存のバグがそれらを修正するか、または回避するために、将来的にmayを実行する必要がある追加の作業を表すということです。
技術的負債(ラベルが通常使用される)は、将来的にmayを実行する必要がある余分な作業も表しています...何らかの方法で。
ですから、既知の(または未知の)バグは技術的な負債であると言っても...そうでなくても...本当に定義の問題です。そしてauthoritative定義がないので1 「技術的負債」の問題は、全体の議論は無意味です。
ルイス・キャロルが書いたように:
「私が言葉を使うとき」とハンプティ・ダンプティは言った、むしろ軽蔑的な口調で、「それは私がそれを選択したことを意味するだけであり、多かれ少なかれではない。」。
それが実際に自然言語が機能する方法です。言葉は、人々が彼らが何を意味していると思うかを意味します。辞書の定義などは、単にdocument単語の使用方法であり、必ずしも正確なドキュメントではありません。スクラムマスターが既知のバグを技術的負債として参照したい場合、誰が彼が「間違っている」と言うべきですか?
1-Ward CumminghamやCaper Jonesなどの人を引用しても効果はありません。せいぜい、彼らがそのフレーズを使用(使用)したときの意味(または意味)を示しています。彼らはそのフレーズを「所有」していません。彼らは間違いなくこれらの問題についての権威ですが、これはまだ彼らの意見にすぎません。
厳密に言えば、あなたの質問に対する答えはノーです。
技術的負債はバグにつながる可能性があります(おそらくそうなるでしょう)が、すべてのバグが技術的負債の結果であると結論すると、2つの事実の間に解釈が入ります:バグがあると技術的負債がある(事実として結論付けることができると仮定)。
スクラムマスターが、バグは技術的な負債の結果であると「理論として」述べている場合、彼は手を抜いています。彼が繰り返し現れ続ける特定のバグについてこれを言っているなら、彼は正しいかもしれません-ここからコード品質を見ることができません;-)
彼はまた、技術的負債について彼に耳を貸さない人々、したがってすべてのバグを技術的負債としてラベル付けしているという不満を抱えているかもしれませんが、今は推測しています。