数千のエラー!


30

私は最近新しいプロジェクトに割り当てられました。まあ、実際には古いプロジェクトは、古典的なASPで書かれています。現在、アプリケーションの新しいバージョンは最新のASP.NETで記述されていますが、しばらくはRTMになるとは予想されていません(推定リリース日は2017年1月です)。破棄されました。
また、すべての顧客がすぐに新しいプログラムに切り替えるわけではないという感覚もあるので、このバージョンはおそらくしばらくは使用されるでしょう。

そして問題は、それがエラーだらけだということです。その一部は、Web標準がなかった前世紀にまでさかのぼり、QuirksモードやwidthheightCSSの代わりの属性、レイアウトに使用されるテーブル、フレームセットなどについてはあまり気にしませんが、これらすべてのエラーです!width="20px"すべての場所onchange="javascript:..."、、style="width:20"およびそれらが実際にcssを使用する場所でありstyle="width=20px"、一般的です。矛盾widthstyle属性が存在する多くの行は言うまでもありません。など。
その結果、WebアプリケーションはIEでのみ、互換モードでのみ実行されます。開発者がコードの妥当性を検討したことはないことは明らかです。出てきたものが自分の考えていたもののように見えた場合にのみ、そのように見えるはずです。

そして、私はそれを処理する方法がわかりません。コードで他のエラーを確認しながら、これらのエラーに目をつぶることは不可能だと思います。
もちろん、大部分の問題を回避するためにグローバルな検索と置換を行うことができますが、それは最初のコミットが何千もの変更された.aspファイルで構成されることを意味します。それをしてもいいですか?


21
「エラー」とは、あなたが好きではないコーディングスタイルを意味しますか?
ユアン

9
私が聞いたヒント:音楽の学生が練習する場所に行きます。防音室で15分を取得してみてください。15分間の画面。気分が良くなり、バグを修正してください!真剣に、目標が何であるかを経営陣に確認してください。このソフトウェアが必要な場合、コンピュータのアップグレードをすぐに停止し、古い破損したコンピュータの交換に問題を引き起こす可能性があります。
gnasher729

24
この質問は暴言のように聞こえます。数か月後に処分されるソフトウェアについて不満を言うのはなぜですか?
ドックブラウン

5
「クラシックASP」で書かれたコードがWebコーディングの最新のファッションとは異なる古典的なASPの標準(以前のような)に準拠していることは「エラー」ではありません。いずれにせよ来年までに 「開発者がコードの妥当性を検討したことがないことは明らかです」-OPが15年以上先の「有効に見える」コードを書くことができると考えた場合、その信念が単なる自然な楽観であるかどうかが時間でわかります(または無知)の若者。
アレフゼロ

19
「古いアプリケーションを破棄できるようになるまで、メンテナンスを行う必要があります。」どんなメンテナンス?具体的にご記入ください。このコードベースを維持するタスクがあり、他に何も言われていない場合は、1つのことを変更しないでください。それを維持するということは、そもそも壊れていると考えられない正しいものではなく、あなたがそれを機能させ続けることを意味します。
ステファンBranczyk

回答:


99

「エラー」という用語にいくつかのことを混同しているようです。

  • レガシーhtml属性
  • コーディングスタイル
  • バグを引き起こさないコーディングエラー
  • 報告されていないバグ
  • 現在の機能である間違い
  • 報告されたバグ
  • 修正するよう割り当てられた報告済みのバグ

置き換えられるレガシーアプリでは、これらのタイプのエラーの1つだけが問題になります。最後の1つ。

主に次の理由により、バグ修正中の機能について他の要素をリファクタリングするべきではない、とまで言います。

  • 現在の機能である間違い

コードから、どのように機能することが意図されていたが、決して機能しなかったのかを見ることができますが、すべてのユーザーは過去10年間、不定幅の要素に慣れており、修正してくれたことに感謝しません。

プラス面として、シニカルなJFDIを使用すると、バグを非常に迅速に焼き付けることができ、新しいバージョンのチームは古いバージョンの機能に追いつくことができません。

クロームプラグインのIE6エミュレーターをクライアントに推奨し、彼らが愛するマーキーの「機能」を使い続けることができるように、これは皮肉な喜びの苦笑いのような笑顔を与えます


28
今の過ち特徴喜び...、ああ- 」
FP

36
確かにあなたが触れるものに非常に慎重で、これはすぐに頭に浮かんだ:xkcd.com/1172
デニスJaheruddin

3
明確にしてください... JFDI ...
GER

5
@GER "Just [expletive] Do It"は、通常の標準やテストなどを避け、保守可能で読みやすい方法で行われているかどうかを気にせずに修正を行うことを意味します。
Nzall

3
アグリーに似ていますが、もっとそうです
Ewan

40

あなたが尋ねるのは技術的な質問ではなく、ここの誰も答えられません。

メンテナンスモードでソフトウェアに取り組んでおり、時代遅れのテクノロジーと多数の欠陥や矛盾を観察しています。何をすべきかを尋ねます。たとえば、ブラウザ間で互換性を持たせるために努力を拡張する必要がありますか?それを現代の基準に沿ったものにするべきですか?アプリ全体で構文の矛盾を修正する必要がありますか?事は、これらはビジネス上の決定です。マネージャーまたは製品の所有者に、どのような問題を解決してもらい、どのような優先事項であるかを尋ねてください。アプリを書き直すプロジェクトがすでに進行しているので、管理者はおそらくあなたが観察する問題をすでに認識しています。

アプリが数か月以内に完全に置き換えられる場合、特定の重大な問題を修正し、残りの混乱はそのままにしておくことを望んでいる可能性あります。しかし、私たちは知りません。

コードベース全体で検索と置換の抜本的な操作を実行して、数千のファイルを変更できるかどうかを尋ねます。もちろんできます。問題は、あなたがそうすべきかどうかです。このような抜本的な変更には、破損を確実に防ぐための広範なテストが必要になる可能性があります。利益が時間とリスクのコストを上回るかどうかは、やはりビジネス上の決定です。


1
これはビジネス上の決定ですが、答えるのは明らかなので、マネージャーに尋ねる必要はありません。必要なければ、彼は混乱を片付けるべきではありません。(+1)
usr

14

アプリケーションが18から24週間で置き換えられる場合(上記の6から8週間に予想される遅延を追加する)、かなりの量の作業を投資することでビジネスにどのような価値を追加するかを自問する必要があります。古いバージョン。

確かに、今後数年間アプリケーションをサポートすることにこだわる場合、技術的な負債を取り除くことは長期的には価値があります。しかし、とにかくすべてがダンプされる場合、なぜ気にしますか?他のすべてのハック修正に加えて、別のハック修正を追加するだけで、新しいバージョンがリリースされるまで待ちきれない問題を修復し、1日で呼び出すことができます。

また、アプリケーションがまだ残っている短い存続期間にアプリケーションに対して何ができるかを自問することもできます。あなたが本当に退屈していて、単にあなたの時間とは何の関係もないなら、あなたはそれを大々的に見直し、あなたが言及したスタイルの問題をすべて取り除くことができます、これは最初に修正するよりも多くのものを壊す可能性が非常に高いです。最終的には十分な時間を与えられれば、これらの新しい問題を取り除くことができるかもしれませんが、その時間はありません。


11
s/weeks/years/
CodesInChaos

9
昨年私は、実際にはすべての履歴を保持し、無限に成長するいくつかの最近の値をキャッシュするテーブルに相当するパフォーマンスバグを修正していました。コードの適切な場所に、本質的に「これは定期的にクリアする必要がありますが、2007年末までにシステムを廃棄する予定であるため重要ではない」というコメントがありました。一時的なソリューションほど長生きするものはありません。
ペティス

@Peterisまあ、一時的な税金。しかし、ええ。
ジェイ

前回このようなアプリケーションで作業したとき、それは一時的なものにもなりました。制御するように設計されたハードウェアは廃棄され、交換品が製造され、交換品を制御するための新しいソフトウェアが開発されました。これは6か月後に利用可能になります。残念ながら、交換用のハードウェアに欠陥があり、すべての予算が障害の修正に費やされたため、交換用の制御システムには何も残っていませんでした。数年後、プロジェクト全体が廃棄されました。知る限り、システム全体は5年後も古いハードウェアとソフトウェアの両方で動作します。
ジュール

幸いなことに、最悪の問題(SQLインジェクション攻撃、数百万行でインデックスない SQLテーブル、元の開発者が承認を確認するのを忘れていたページなど)を修正する許可を得ました。
ジュール

3

大きな変更を加えない理由:

1つ:コードは数か月で廃止されます。5か月かけてシステムを修正し、そのシステムを1か月後に破棄するのは、会社にとっては本当に価値があることでしょうか?警告:システムが消滅する予定がある場合、システムが消滅することはほとんどありません。交換システムはほとんどの場合遅く、何らかの理由でアップグレードできないユーザーなどがいます。しかし、これは複雑な問題です。

2:多くの変更、特に大量検索と置換を行うと、バグが発生します。バグを持ち込むことはないでしょう。S&Rを実行し、「width = 200」を「width:200px」に変更したとします。ASPページにC#またはVBコードがありますか?200に設定している「width」という名前の変数がある場合は、それを壊しただけだからです。(またはそのことについて、S&RをASPページに制限すると思いましたか?)または、「width:200」を「width:200px」に変更した場合、「width:200mm」というコードに1つの場所があるとどうなりますか「?現在、「width:200pxmm」と表示されています。さて、あなたはそれらについて考えたとしましょう。無効な幅の指定がある場所があり、それがもちろん無視されていて、今では非常にうまくレイアウトされているとしたらどうでしょう。あなたは「修正」200pxは実際には間違った幅であり、その値が無視されたために機能したため、幅と200pxでレイアウトされます... マスS&Rは非常に危険です。なぜなら、あなたが変更するすべての場所をほとんど確実に研究していないからです。何をテストすればよいかわからないでしょう。

3:「明らかに」間違っているコードは、実際にはユーザーが望むものである可能性があります。私は明らかに間違っていて非常識な振る舞いを要求する多くの要件仕様を見てきました...そしてユーザーに戻って本当に欲しいものを尋ねると、彼らは本当にこの非常識な振る舞いを望んでいることがわかりました彼らのビジネスがどのように機能するか、または政府の規制がそれを必要とするか、何でも。

振る舞いが実際に間違っていても、ユーザーがそれを期待するようになった可能性があり、彼らは定期的にそれを回避します。例:私は、販売が一般に利用可能であることを日付から特定する場所があるシステムに取り組んでいます。両方の日付は実際にその日から始まった真夜中だったので、「7月30日まで」と言うと、7月29日の終わり、つまり7月30日の終わりではなく、7月30日12時01分前に終了しました。ある時点でこれを修正しましたが、そのスクリーンを使用する権限を持つ人が半ダース未満だったため、それを行うことができました。何百人ものユーザーがいて、すべてのユーザーが本当に期限を過ぎた日を与えなければならないと今までにわかっていたなら、私の「修正」


0

もちろん、大部分の問題を回避するためにグローバルな検索と置換を行うことができますが、それは最初のコミットが何千もの変更された.aspファイルで構成されることを意味します。それをしてもいいですか?

なぜだかわかりません。コミットする必要があり、概念的に一つのこと、私は、なぜグローバル検索理由を見ていないから置き換えるstyle="width=20"style="width: 20px"概念的に言えば、「一つのこと」としてカウントされません。そして、それはあなたが他のものを修正して、あなたが気を取られて保存します、より良い睡眠を助ける、と考えている場合ではない泥は何もアップし、なぜか?


12
何故なの?なぜなら、大規模なレガシーコードベースで徹底的な検索と置換を行うには、何も破綻しないことを確認するために、その後の広範なテストが必要だからです。
ジャックB

-2

あなたの問題は優先順位を設定しています:どの問題がショートッパー(生産中)ですか?時限爆弾はどれですか?そして、どれがもっと長く残ることができますか(それは機能し、何年もの間そうしているので、並べ替えさえするので)?

あなたの状況で私がすることは、私が見たい問題クラスのリストを作成することです。例えば、交換style="width=(\d+)"style="width: \1px"(おそらく正規表現使用して置き換える/グローバル検索を整流することができ-地雷が100%でない場合は申し訳ありません)が一つのクラスになり、そして一つだけの発生がありますならば、それは可能。各カテゴリごとに、優先度(これを行うのがどれだけ緊急か)と作業の見積もり(このカテゴリを実行するのにどれくらい時間がかかりますか)を示します。

メンテナンスタスクもこのリストに表示されます。今、あなたは自分自身だけにでも何らかの管理を適用し始めており、あなたの手が空いていて何もすることができないとき、または行うべき仕事についてマネージャーと交渉する必要があるとき(またはリクエストするとき)に使用するツールがあります彼が気付いていないかもしれない何かに割り当てられる時間)。(この種の事前対策は、正しく行われた場合、プロモーションに気付くのに役立ちます。)

あなたはプログラミングを楽しんでいると思います。ある程度完璧な性格を持っているからです。しかし、商業環境では、完璧は善の敵であることを認識する必要があります(そして、善はお金をもたらしますが、完璧は必ずしももっと多くの仕事のために顕著に多くをもたらすとは限りません)。最初に必要なことを実行し、次に必要なことを実行します。はい、これはあなたの穀物に終わりがないかもしれません。にやにや笑い、そしておそらくあなたの完璧主義を行使し、正気を保つために趣味を得る;-)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.