Có phải là thực hành tốt để tránh cảnh báo và thông báo?


20

Nói chung, tôi đã làm việc với các cảnh báo và thông báo về PHP, vì tôi làm việc trong rất nhiều dự án đã được sản xuất trực tiếp. Bây giờ, nếu tôi bật các cảnh báo và thông báo trên các trang web sản xuất trực tiếp này, chúng sẽ bị quá tải với chúng.

Các dự án mà tôi làm việc ở nhà, ở địa phương, tôi thường cố gắng làm việc TẤT CẢ các cảnh báo và thông báo. Đôi khi, không có giải pháp nào cho việc không có thông báo, vì vậy tôi chỉ phải đối phó với việc xem thông báo cho đến khi tôi quyết định tắt chúng hoàn toàn.

Cuối cùng, tôi không biết liệu tôi có lãng phí thời gian của mình để cố gắng loại bỏ tất cả các cảnh báo và thông báo hay thực sự tôi đang làm điều này vì lợi ích lớn hơn.

Do đó, câu hỏi của tôi, đó là thực hành tốt để tránh cảnh báo và thông báo hoàn toàn, hoặc nó thực sự không quan trọng?


6
"Đôi khi, không có giải pháp nào cho việc không có thông báo" Đã một thời gian kể từ khi tôi sử dụng PHP, nhưng tôi không nhớ là đã gặp phải trường hợp bạn có thể tránh thông báo / cảnh báo hoặc ít nhất là ngăn chặn nó cục bộ@ .
CodeInChaos

27
Lập luận thuyết phục nhất mà tôi thấy là "những thông điệp đó tồn tại vì một lý do - điều hòa bản thân để bỏ qua một loạt các cảnh báo khiến chúng ta bỏ qua các vấn đề thực tế có thể đã được ngăn chặn." Nói cách khác, nếu không có cảnh báo hoặc thông báo trong các hoạt động bình thường , bất kỳ cảnh báo hoặc thông báo nào là dấu hiệu của sự cố tiềm ẩn; nếu mọi thứ chỉ là tiếng ồn, bạn sẽ bắt đầu nhận thấy sự cố chỉ sau SHTF (và có thể sau khi khách hàng làm).
Piskvor

12
Sử dụng @ để ngăn chặn các thông báo, trong khi phổ biến, thường được coi là một điều xấu. Điều tồi tệ hơn là đơn giản là tắt tất cả các thông báo bởi vì bây giờ bạn đã ẩn một vấn đề tiềm ẩn. Trong 15 năm lập trình php tôi vẫn chưa gặp trường hợp nào tôi phải loại bỏ một thông báo trong mã mà tôi kiểm soát.
Cerad

2
Bạn chỉ đơn giản là tắt màn hình của những thông báo này hay bạn đang làm error_reporting(0);? Tôi luôn luôn sử dụng error_reporting(E_ALL);và sự khác biệt duy nhất giữa phát triển và sản xuất là ini_set('display_errors', 'on');so với ini_set('display_errors', 'off');. Tôi luôn hướng đến việc sửa các thông báo và cảnh báo trong khi mã vẫn còn mới trong tâm trí tôi. Tôi thường xuyên ghi nhật ký trên hệ thống sản xuất của mình để xem có cảnh báo và thông báo bổ sung nào mà tôi có thể đã bỏ lỡ hay không.
MonkeyZeus

1
Tôi rất đồng ý với những gì @Cerad nói @. Sau nhiều năm và nhiều năm lập trình PHP, tôi đã không sử dụng toán tử đó. Không chỉ một lần. Không bao giờ. Nó không chỉ che giấu các vấn đề tiềm ẩn, nó còn có tác động về hiệu suất: đằng sau hậu trường, PHP tắt báo cáo lỗi trước khi gọi mã -> gọi mã -> đặt lại giá trị ban đầu. Các bước này rất tốn kém nếu bạn có hàng chục hoặc hàng trăm @mã trong mã của mình.
Radu Murzea

Câu trả lời:


26

nếu tôi bật các cảnh báo và thông báo trên các trang web sản xuất trực tiếp này, chúng sẽ bị quá tải với chúng.

Bạn phải luôn luôn có các cảnh báo được bật ở mức đầy đủ nhất trong phát triển, thử nghiệm và QA, nhưng không phải trong sản xuất. Trên thực tế, nếu đó là một ứng dụng dogfooding, tức là một ứng dụng mà bạn sử dụng cho chính mình, thì bạn cũng nên bật chúng trong sản xuất.

Về cơ bản: có bật chúng trong những trường hợp người nhìn thấy chúng ở vị trí để làm gì đó với chúng không (nhà phát triển trong thử nghiệm và phát triển có thể tự khắc phục chúng, người kiểm tra trong QA có thể báo lỗi và nếu nhà phát triển là cũng là người dùng, sau đó anh ta cũng có thể sửa nó trong sản xuất), nhưng không bật chúng khi người thấy không thể làm gì được họ (người dùng trong sản xuất, thậm chí không biết cách lập trình).

Lý tưởng nhất, bạn cũng sẽ muốn bật cảnh báo là lỗi, nhưng điều đó chỉ hiệu quả nếu không có gì để bắt đầu ;-) Nhưng hãy ghi nhớ điều này như một mục tiêu! Nếu có thể bật / tắt tính năng này trên cơ sở mỗi tệp, hãy bật nó cho tất cả các tệp mới và bật nó cho tất cả các tệp không có cảnh báo và không bao giờ tắt lại sau khi bật.

Vậy, phải làm gì về tình trạng quá tải?

Bạn lập danh sách mọi cảnh báo và thông báo, sau đó tuân thủ các quy tắc sau:

  1. Không bao giờ, trong mọi trường hợp, trong mọi trường hợp, thêm một cảnh báo mới vào danh sách. Mỗi đoạn mã mới, mọi chỉnh sửa, mọi thay đổi, mọi bản vá, mọi cam kết không được đưa ra các cảnh báo mới, nó chỉ có thể sửa chúng.
  2. Mỗi khi bạn chạm vào một đoạn mã, sửa bất kỳ và tất cả các cảnh báo trong đoạn mã đó. (Quy tắc Boyscout: luôn luôn rời khỏi khu cắm trại trong tình trạng tốt hơn bạn đã tìm thấy.) Bằng cách đó, mã không quan trọng có thể chứa đầy các cảnh báo, nhưng mã quan trọng sẽ sạch hơn theo thời gian. "Đoạn mã" có thể là một hàm, một lớp, một tệp. Bạn cũng có thể thư giãn quy tắc này để nói để khắc phục ít nhất một cảnh báo. Vấn đề là: sửa chúng khi bạn tìm thấy chúng.

Lưu ý: cả hai đều yêu cầu bạn phải có một số loại cơ sở dữ liệu nhật ký và cơ chế lọc nhật ký. Cũng lưu ý rằng "cơ sở dữ liệu nhật ký" và "cơ chế lọc nhật ký" có thể chỉ là một tệp văn bản và grep.

Đây là bit quan trọng. Nếu không có cơ sở dữ liệu, bạn sẽ không biết khi nào bạn thêm cảnh báo mới và không có bộ lọc, bạn vẫn gặp vấn đề quá tải.

Lưu ý # 2: điều này không chỉ hoạt động để cảnh báo, nó cũng hoạt động cho trình kiểm tra kiểu, số liệu phức tạp, độ bao phủ mã, công cụ phân tích tĩnh, v.v. Về cơ bản:

  1. Đừng thêm vấn đề mới.
  2. Khắc phục sự cố cũ khi bạn vấp phải chúng.

Điều này cho phép bạn dễ dàng ưu tiên: mã được chỉnh sửa thường xuyên và do đó cần phải dễ đọc và duy trì, sẽ trở nên tốt hơn theo thời gian. Mã không được chạm thường xuyên, sẽ không tốt hơn, nhưng không sao, vì dù sao cũng không ai cần phải xem nó. , ít nhất nó sẽ không trở nên tồi tệ hơn.

Tất nhiên, không có gì ngăn bạn phân bổ thời gian cụ thể để không làm gì ngoài việc săn lùng và tiêu diệt các cảnh báo. Thông thường, điều này không hiệu quả về mặt kinh tế và công việc của bạn là một kỹ sư phải ghi nhớ điều đó. "Một kỹ sư là một người có thể xây dựng bằng một đô la, điều mà bất kỳ kẻ ngốc nào cũng có thể xây dựng với hai người."


3
Một điểm khác tại sao để tắt cảnh báo và lỗi tiếp cận người dùng chưa được lọc: Theo thông báo là cảnh báo cho nhà phát triển, nó có thể rò rỉ thông tin nhạy cảm (tên tệp, tên của các máy chủ liên quan khác, cấu trúc truy vấn sql được sử dụng, ... )
Hagen von Eitzen

Cảnh báo trong sản xuất nên đi đến nhật ký, không cho người dùng! Lỗi nên vào nhật ký, không cho người dùng. Một trang web không mắc lỗi, ghi nhật ký và cung cấp trang lỗi phù hợp với người dùng thay vì không sẵn sàng sản xuất. PHP làm cho nó rất dễ làm điều này sai, nhưng bạn vẫn nên làm điều đó đúng.
hobbs

49

Nếu các cảnh báo và thông báo đến từ mã của bạn, chắc chắn sẽ sửa nó. Từ kinh nghiệm của tôi, trong 95% nó có thể là lành tính, nhưng 5% nêu bật một vấn đề thực sự có thể dẫn đến vô số thời gian theo đuổi.

Nếu chúng đến từ mã của bên thứ ba mà bạn phải sử dụng vì lý do này hay lý do khác, bạn thường không có nhiều sự lựa chọn.

Đó là một câu hỏi khác nếu cơ sở mã di sản của bạn thực sự lớn, thì bạn có thể coi mã kế thừa là bên thứ ba, nhưng yêu cầu mã mới không có cảnh báo.


8
Tôi làm việc trong Java / nhật thực, khác với php rõ ràng, nhưng tôi thường thấy cảnh báo được đưa ra bởi 1) thứ gì đó biên dịch nhưng tôi đã mắc một lỗi rõ ràng hoặc 2) một cái gì đó hiện đang ổn nhưng sẽ rất tệ
corsiKa

1
@corsiKa Tôi đã dịch nhận xét của bạn sang PHP nhưng tôi nhận ra rằng chỉ cần thay đổi một từ.
wizzwizz4

3
Tất nhiên, trừ khi, những cảnh báo này là của StyleCop về thứ tự usingphát biểu của bạn ...
Dan Pantry

12

Nó quan trọng. Một cảnh báo có thể không phá vỡ các bài kiểm tra của bạn hoặc thậm chí xuất hiện trong tự nhiên trong một thời gian - nhưng nó có thể là một triệu chứng của một lỗi xuất hiện. Tôi hiện đang phát triển chủ yếu trong C # / C ++ và có một chiến lược được xác định để loại bỏ và tránh cảnh báo ra khỏi cơ sở mã của chúng tôi. May mắn thay, đó không phải là khoa học tên lửa =).

Nếu ngôn ngữ mà bạn làm việc có khả năng coi các cảnh báo là lỗi và có các mức cảnh báo khác nhau, tôi sẽ làm như sau:

  1. Giảm mức cảnh báo xuống đủ xa để bạn không nhận được bất kỳ cảnh báo nào. Nếu bạn ở mức cảnh báo thấp nhất và bạn vẫn nhận được cảnh báo - hãy thử khắc phục chúng. Nếu bạn không thể sửa chúng, thì bây giờ bạn đã hoàn thành, nhưng hy vọng bạn có thể sửa chúng. Tuyệt quá.
  2. Vì hiện tại bạn không có cảnh báo (ở mức cảnh báo thấp rất có thể), hãy lật công tắc và coi tất cả các cảnh báo là lỗi.
  3. Cố gắng tăng mức cảnh báo lên và sửa tất cả các cảnh báo mới. Nếu bạn không thể, hãy giảm mức cảnh báo xuống, nhưng đừng tắt cảnh báo là lỗi.

Tôi thấy rằng điều này không chỉ làm việc cảnh báo ra khỏi mã của tôi - nó giúp họ tránh xa .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.