web-dev-qa-db-ja.com

バグが5年以上前のものである場合、それは機能ですか?

詳細の追加を許可します。私は多くのコーダー、テスター、QAアナリスト、製品所有者などと一緒に制度的な場所で働いています。

私たちは10年以上にわたって(かなり機能的ではありますが)安っぽいソフトウェアを販売してきました。それは多くの機能を備えており、製品は競争力がありますが、そこにはいくつかの深刻なバグがあり、何千もの「ペーパーカット」-クライアントが慣れる必要のある小さな煩わしさがあります。

コンピュータが私たちの生活を楽にするのに役立たないなら、私たちはそれらを使うべきではないと私は固く信じているので、いくつかのことを見るのは私を苦しめます。私は同僚に自信を持っています。彼らは賢く、有能であり、それを行うことに重点が置かれている場合、改善することができます。

ただし、いくつかの古い機能に対して、それらを閉じたり忘れたりすることなくバグを報告するのは難しい場合があります。 「それは永遠にそのように機能しました」は典型的な答えです。また、QAがリグレッションを行うとき、彼らは正しくないと思われるものと同じくらい異なるものを探す傾向があります。したがって、古い問題の修正は、「以前よりもそのようになっていた」ため、バグとして記述できます。

私の若いコーダーは考えています:このおかしなことを書き直してください!営業やクライアントと接する機会があった人として、このアプローチに疑問の余地を残したいと思います。

あなたの意見や経験にも興味があります。リスク、費用対効果、およびその他の非技術的要素を考慮してみてください。

18
Job

あなたの痛みが分かります。

しかし、それがバグであるために何かを修正することは、十分な理由ではありません。

修正によって他のコードが破壊されないことを確認する必要があります(自分のコードだけでなく、そのコードを使用するクライアントコードも)。修正をプッシュしてすべての顧客システムを破壊すると、非常に不満を抱く顧客がいます。

古いシステムを置き換えるために新しいコードが書かれた有名な例がたくさんあります。ユーザーがそのバグに依存していたために、古いシステムのバグの機能を明示的に追加する必要があった場所(名前を付けるつもりはありませんが、Googleでググできると確信しています)。

回帰テストは基本的に、顧客が何を期待するかをテストするものです。回帰テストを削除する前に、誰かを傷つけないことを確認してください(これはほとんど不可能です)。バグを修正できる場合[〜#〜] and [〜#〜]これは回帰テストを中断しないので、実際の修正です。

14
Martin York

バグを定義します。「スペックは日付でソートされていると述べられていますが、トランザクション金額でソートされています」は必ずしもコードのバグではありません。それは文書化されていない変更かもしれません-いつかどこかで、誰かが並べ替え順序を変更するように求めましたが、仕様、要件、マニュアル(UIのボタンとラベルも)は一致するように変更されておらず、誰も気にしていませんでした。表示して「日付順」に戻すと混乱が生じます。UI、仕様、マニュアルなどを更新すると、基本的には時間の無駄になります。ただし、「壊れたウィンドウ理論」の例外はあります。 」

一部は明らかにバグです。このボタンをクリックすると爆破します。または、月曜日にこのボタンをクリックすると、爆破します。誰かが理由を理解するために時間を投資するようにあなたに命じない限り、あなたは調査に多くの努力を費やすことができます。そして、その理由がわかったら、それを変更できない可能性があります。それは、ユーザーや管理者にとってより重要なことを台無しにするからです。

「だらしない」-メモリリーク、明らかに自分のものと一致しない最適化、インデント、および命名規則が必要なコード-何もする必要がないときに、または自分の時間にemを修正するのは非常に魅力的です。 。ただし、これらの「修正」は、ソース管理の履歴を台無しにして、ほとんどまたはまったくメリットがありません。「モジュールをコンパイルすることは決してありません」 「そして、あなたが「修正」している「間違い」をしている人々を深刻に動揺させることができます。

上司と1対1でお勧めします。何があなたを悩ませているのかを説明してください-それはコーディングスタイルですか、ユーザーを困らせる必要があると確信していること、不正確な数値、不一致、または災害の発生を待っていますか?次に、方向性を尋ね、(これが鍵です)それを受け取ります。

3
Kate Gregory

バグを修正することを決定する際に考慮すべきいくつかのこと...決して包括的なものではありません。

  • 重要ですか(システムがクラッシュしますか)? ...明らかにこれらは修正されます
  • 顧客はよく不満を持っていますか?これは、コードで何かが壊れているなどのバグである可能性があります。または、機能がユーザーフレンドリーではない、または機能が異なると期待されているなどの要件バグである可能性があります。
  • ビジネスの観点からは、バグを修正したり、新しい機能を実装したりする方が有益ですか?
  • バグには大幅なアーキテクチャの変更が必要ですか、それとも他のサブシステムに大きく依存しているシステムの一部にありますか?これはテスト時間に劇的な影響を与え、バグの検証に必要なテストカバレッジを複雑にする可能性がありますか?それが本当に古い場合、コードのバグのあるセクションを変更することにより、システムで他に何が影響を受けるかを正確に理解するのが難しい場合があります。
  • バギーシステムのために潜在的な顧客を失っていますか
3
Pemdas

古いバグを修正したい場合は、既存の機能を壊さないように注意する必要があります。単体テストがある場合、これは簡単ですが、会社とソフトウェアの暗黙の年齢を考えると、それらは存在しません。副作用を最小限に抑えながらバグを適切にリファクタリングして修正する方法が説明されているため、Martin Fowlerによるリファクタリングの本を読むことをお勧めします。また、会社が定期的に古いバグを処理しても問題がないことを確認することをお勧めします。彼らはあなたが時間外にそれを残業させた場合にのみあなたにこれを許させるかもしれません。

また、バグが機能になった場合、つまり、何かを提供するためにクライアントによって実際に使用されている場合は、その動作が必要な場合に適切な置き換えを提供するようにしてください(または、バグではなく機能としてドキュメント化します)。

2
indyK1ng