警告や通知を避けるのは良い習慣ですか?


20

私は一般的にPHPの警告と通知に取り組んでいます。PHPが既に実稼働している多くのプロジェクトに取り組んでいるからです。これらのライブ制作Webサイトで警告と通知をオンにすると、それらは過負荷になります。

私が自宅や地元で取り組んでいるプロジェクトでは、通常、すべての警告と通知を排除しようとします。時々、通知がないという解決策がないので、それらを完全にオフにすることを決定するまで、通知を見て対処する必要があります。

結局、すべての警告と通知を取り除こうとして時間を無駄にしているのか、それとも実際にもっと良いことをしているのかはわかりません。

したがって、私の質問は、警告と通知を完全に回避することをお勧めしますか、それとも本当に重要ではありませんか?


6
「時々、通知がないという解決策はありません。」PHPを使用してからしばらく経ちましたが、通知/警告を回避したり、少なくともローカルでそれを抑制し@たりすることはできません。
CodesInChaos

27
私が見た中で最も説得力のある議論は、「これらのメッセージは理由のために存在します-警告の洪水を無視するように自分自身を調整すると、回避されたかもしれない実際の問題を見落とすことになります」です。つまり、通常の操作中に警告や通知がない場合、警告や通知は潜在的な問題の兆候です。すべてがただのノイズである場合、SHTFの後でのみ(そしておそらく顧客の後に)トラブルに気づき始めるでしょう。
-Piskvor

12
@を使用して通知を抑制することは一般的ですが、一般に悪いことと見なされます。潜在的な問題を隠しているため、すべての通知を単純にオフにするのはさらに悪いことです。15年間のphpプログラミングでは、私が制御するコードで通知を抑制しなければならないケースにまだ出会っていません。
セラド

2
これらの通知の表示を単にオフにしているのerror_reporting(0);ですか、それともやっていますか?私は常に使用error_reporting(E_ALL);し、開発と本番の唯一の違いはini_set('display_errors', 'on');vs ini_set('display_errors', 'off');です。コードがまだ新鮮なうちに、通知と警告を修正することを常に目指しています。実稼働システムで頻繁にログにアクセスして、見逃したかもしれない追加の警告や通知があるかどうかを確認します。
MonkeyZeus

1
@Ceradが言ったことに非常に同意し@ます。長年にわたるPHPプログラミングの後、私はその演算子を使用していません。一度も。決して。潜在的な問題を隠すだけでなく、パフォーマンスへの影響もあります。PHPは、コードを呼び出す前にエラー報告をオフにします->コードを呼び出します->元の値に戻します。@コードに数十または数百がある場合、これらの手順は高価です。
ラドゥムゼア

回答:


26

これらのライブのプロダクションWebサイトで警告と通知をオンにすると、それらは過負荷になります。

開発、テスト、およびQAで常に最大限の警告をオンにする必要がありますが、実稼働ではありません。実際、ドッグフーディングアプリケーション、つまり自分で使用するアプリケーションの場合は、本番環境でも有効にする必要があります。

基本的に、それらを見た人が何かをする立場にある場合にそれらをオンにします(開発とテストの開発者は自分で修正でき、QAのテスターはバグを提出でき、開発者がまた、ユーザーは、その後、彼はまた、生産にそれを修正することができます)が、ありません見ている人は彼ら(でも、どのようにプログラムを知らない生産のユーザー、)について何もできないときにそれらを回します。

理想的には、警告をエラーとして扱うことを有効にすることもできますが、それは最初に何もない場合にのみ機能します;-)しかし、これを目標として念頭に置いてください!ファイルごとにオン/オフを切り替えることができる場合は、すべての新しいファイルに対してオンにし、すべての警告のないファイルに対してオンにし、一度オンにたら再びオフにしないでください

それでは、過負荷についてどうすればよいでしょうか?

すべての警告と通知のリストを作成し、次の規則を順守します。

  1. 決して、決して新しい警告をリストに追加しないでください。すべての新しいコード、すべての編集、すべての変更、すべてのパッチ、すべてのコミット、新しい警告を導入してはならず、それらを修正するだけです。
  2. コードに触れるたびに、そのコードのすべての警告を修正します。(ボーイスカウトのルール:キャンプ場は常にあなたが見つけたよりも良い状態に置いてください。)そうすれば、重要でないコードは警告でいっぱいになりますが、重要なコードは時間の経過とともにきれいになります。「コードの一部」は、関数、クラス、ファイルの場合があります。このルールを緩和して、少なくとも1つの警告を修正することもできます。重要なのは、見つけたときに修正することです。

注:これらの両方では、何らかのログデータベースとログフィルタリングメカニズムを設定する必要があります。「ログデータベース」と「メカニズムをフィルタリングログ」は単なるテキストファイルである可能性があることにも注意し、grep

これは重要なビットです。データベースがなければ、いつ新しい警告を追加したかわかりませんし、フィルタリングがなければ、オーバーロードの問題がまだあります。

注#2:これは警告に対してのみ機能するのではなく、スタイルチェッカー、複雑さのメトリック、コードカバレッジ、静的分析ツールなどにも機能します。基本的に:

  1. 新しい問題を追加しないでください。
  2. あなたがそれらに出くわしたときに古い問題を修正してください。

これにより、簡単に優先順位を付けることができます。頻繁に編集されるため、読み取りと保守が容易である必要があるコードは、時間の経過とともに改善されます。頻繁に触れないコードは改善されませんが、それでも大丈夫です、とにかく誰もそれを見る必要がないからです。そして、少なくとも悪化することはありません。

もちろん、警告を追い詰めて殺す以外に何もしないために時間を割り当てることを妨げるものは何もありません。これは頻繁に起こりますが、これは経済的に実行可能ではなく、それを念頭に置いておくことがエンジニアとしてのあなたの仕事です。「エンジニアとは、1ドルで構築できる人、2人で愚か者が構築できるものです。」


3
フィルターなしでユーザーに到達する警告とエラーをオフにする別のポイント:開発者にとって警告と同様に有益な情報であるため、機密情報(ファイルの名前、関連する他のサーバーの名前、使用されるSQLクエリの構造、... )
ハーゲンフォンアイゼン

本番環境での警告は、ユーザーではなくログに送信する必要があります!エラーは、ユーザーではなくログに記録する必要があります。エラーをトラップせず、ログを記録せず、代わりにユーザーに適したエラーページを提供するWebサイトは、実稼働準備ができていません。PHPを使用すると、この間違いを非常に簡単に実行できますが、それでも正しく実行する必要があります。
ホッブズ

49

コードから警告や通知が出ている場合は、間違いなく修正してください。私の経験から、95%で良性かもしれませんが、5%は追跡に費やす無数の時間につながる本当の問題を強調しています。

何らかの理由で使用する必要のあるサードパーティのコードからのものである場合、通常はあまり選択肢がありません。

レガシコードベースが本当に大きい場合、レガシコードをサードパーティとして扱うことができますが、新しいコードには警告がないことを要求できますが、これは別の質問です。


8
私はJava / eclipseで作業していますが、これは明らかにPHPとは異なりますが、通常は1)コンパイルされたが明らかな間違いを犯したか、2)今は問題ないが将来的には悪いもののいずれかによって警告が発生します
corsiKa

1
@corsiKa あなたのコメントをPHP 翻訳していましたが、変更する必要があるのは1語だけであることに気付きました。
wizzwizz4

3
もちろん、これらの警告は、あなたのご注文についてStyleCopからある場合を除き、using文...
ダン・パントリー

12

重要です。警告は、テストを中断したり、しばらくの間野生に表示されたりすることはありませんが、迫り来るバグの症状である可能性があります。私は現在、主にC#/ C ++で開発しており、コードベースから警告を取り除き、警告を排除するための戦略を定義しています。幸いなことに、ロケット科学ではありません=)。

使用している言語に警告をエラーとして処理する機能があり、警告レベルが可変である場合、次のようにします。

  1. 警告が表示されないように、警告レベルを十分に下げてください。最も低い警告レベルにあり、それでも警告が表示される場合は、修正を試みてください。それらを修正できない場合は、今のところ完了しましたが、うまくいけば修正できます。すばらしいです。
  2. これで警告が表示されないため(おそらく低警告レベルで)、スイッチを切り替えて、すべての警告をエラーとして扱います。
  3. 警告レベルを上げて、すべての新しい警告を修正してください。できない場合は、警告レベルを下げますが、警告をエラーとして扱うことをオフにしないでください。

私はこれが私のコードから警告を出すだけでなく、それらを排除することを発見しました

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