เป็นการดีหรือไม่ที่จะหลีกเลี่ยงคำเตือนและประกาศ?


20

โดยทั่วไปฉันทำงานกับคำเตือนและประกาศ PHP เนื่องจากฉันทำงานในหลายโครงการที่มีการผลิตจริงอยู่แล้ว ตอนนี้ถ้าฉันเปิดคำเตือนและประกาศบนเว็บไซต์ที่ใช้งานจริงเหล่านี้พวกเขาจะได้รับข้อมูลมากเกินไป

โครงการที่ฉันทำงานที่บ้านในท้องถิ่นฉันมักจะพยายามหลีกเลี่ยงคำเตือนและประกาศทั้งหมด บางครั้งไม่มีวิธีแก้ปัญหาที่ไม่มีการบอกกล่าวดังนั้นฉันแค่ต้องจัดการกับการสังเกตจนกว่าฉันจะตัดสินใจปิดพวกเขาทั้งหมด

ในท้ายที่สุดฉันไม่รู้ว่าฉันกำลังเสียเวลาพยายามกำจัดคำเตือนและประกาศทั้งหมดหรือว่าจริง ๆ แล้วฉันทำสิ่งนี้เพื่อประโยชน์ที่ดีกว่า

ดังนั้นคำถามของฉันมันเป็นแนวปฏิบัติที่ดีที่จะหลีกเลี่ยงคำเตือนและการแจ้งเตือนทั้งหมดหรือไม่จริงหรือไม่


6
"บางครั้งมีวิธีแก้ปัญหาไม่ต้องแจ้งให้ทราบล่วงหน้าไม่" จะได้รับในขณะที่ตั้งแต่ผมใช้ PHP แต่ผมจำไม่ได้ว่าการทำงานเป็นกรณีที่คุณสามารถหลีกเลี่ยงการแจ้งให้ทราบล่วงหน้า / คำเตือนหรืออย่างน้อยปราบมันในประเทศด้วย @
CodesInChaos

27
การโต้เถียงที่น่าเชื่อถือที่สุดที่ฉันเคยเห็นคือ "ข้อความเหล่านั้นมีอยู่สำหรับเหตุผล - การ จำกัด ตัวเองให้เพิกเฉยต่อคำเตือนทำให้เรามองข้ามปัญหาที่แท้จริงซึ่งอาจถูกหลีกเลี่ยง" กล่าวอีกนัยหนึ่งหากไม่มีคำเตือนหรือประกาศในระหว่างการดำเนินการตามปกติคำเตือนหรือประกาศใด ๆ เป็นสัญญาณของปัญหาที่อาจเกิดขึ้น หากทุกอย่างเป็นเพียงเสียงรบกวนคุณจะเริ่มสังเกตเห็นปัญหาหลังจาก SHTF เท่านั้น (และอาจเกิดขึ้นหลังจากที่ลูกค้าทำ)
Piskvor

12
การใช้ @ เพื่อระงับการแจ้งเตือนโดยทั่วไปถือว่าเป็นสิ่งที่ไม่ดี มันยิ่งแย่ไปกว่านั้นเพียงปิดการแจ้งเตือนทั้งหมดเพราะตอนนี้คุณซ่อนปัญหาที่อาจเกิดขึ้นแล้ว ใน 15 ปีของการเขียนโปรแกรม php ฉันยังไม่ได้เจอกรณีที่ฉันต้องระงับการแจ้งเตือนในรหัสที่ฉันควบคุม
Cerad

2
คุณเพียงแค่ปิดการแสดงประกาศเหล่านี้หรือคุณกำลังทำอยู่error_reporting(0);? ฉันมักจะใช้error_reporting(E_ALL);และความแตกต่างระหว่างการพัฒนาและการผลิตเทียบกับini_set('display_errors', 'on'); ini_set('display_errors', 'off');ฉันตั้งเป้าหมายที่จะแก้ไขคำเตือนและคำเตือนอยู่เสมอในขณะที่รหัสยังคงสดอยู่ในใจ ฉันมักจะบันทึกในระบบการผลิตของฉันเพื่อดูว่ามีคำเตือนและประกาศเพิ่มเติมซึ่งฉันอาจพลาด
MonkeyZeus

1
ฉันเป็นอย่างมากเห็นด้วยกับสิ่ง @Cerad @กล่าวเกี่ยวกับ หลังจากหลายปีของการเขียนโปรแกรม PHP ฉันไม่ได้ใช้โอเปอเรเตอร์นั้น ไม่ใช่ครั้งเดียว ไม่เคย ไม่เพียง แต่ซ่อนปัญหาที่อาจเกิดขึ้นเท่านั้น แต่ยังมีผลกระทบต่อประสิทธิภาพการทำงานด้วย: เบื้องหลังการทำงาน, PHP ปิดการรายงานข้อผิดพลาดก่อนเรียกรหัส -> เรียกรหัส -> ตั้งค่ากลับเป็นค่าดั้งเดิม ขั้นตอนเหล่านี้มีราคาแพงหากคุณมีรหัสหลายสิบหรือหลายร้อย@รหัส
Radu Murzea

คำตอบ:


26

หากฉันเปิดคำเตือนและประกาศบนเว็บไซต์ที่ใช้งานจริงเหล่านี้พวกเขาจะได้รับข้อมูลมากเกินไป

คุณควรเปิดคำเตือนให้อยู่ในระดับสูงสุดในการพัฒนาทดสอบและควบคุมคุณภาพ แต่ไม่ใช่ในการผลิต ที่จริงแล้วหากเป็นแอพพลิเคชั่น dogfooding เช่นแอปพลิเคชันที่คุณใช้ด้วยตัวเอง

โดยพื้นฐาน: ให้พวกเขาเปิดในกรณีที่บุคคลที่เห็นพวกเขาอยู่ในตำแหน่งที่จะทำอะไรกับพวกเขา (นักพัฒนาในการพัฒนาและการทดสอบสามารถแก้ไขได้ด้วยตนเองผู้ทดสอบใน QA สามารถยื่นข้อบกพร่องและหากนักพัฒนาเป็น ด้วยผู้ใช้จากนั้นเขาสามารถแก้ไขได้ในระหว่างการผลิต) แต่อย่าเปิดใช้งานเมื่อผู้ที่เห็นไม่สามารถทำอะไรกับพวกเขาได้ (ผู้ใช้ในการผลิตที่ไม่รู้วิธีการเขียนโปรแกรม)

เป็นการดีที่คุณจะต้องการเปิดใช้งานการเตือนเป็นข้อผิดพลาด แต่จะใช้งานได้หากไม่มีใครเริ่มต้นด้วย ;-) แต่ให้คำนึงถึงสิ่งนี้เป็นเป้าหมาย! หากเป็นไปได้ที่จะเปิด / ปิดนี้แบบต่อไฟล์ให้เปิดไฟล์ใหม่ทั้งหมดแล้วเปิดใหม่สำหรับไฟล์ที่ไม่มีคำเตือนและไม่ควรปิดอีกครั้งเมื่อเปิด

ดังนั้นจะทำอย่างไรเกี่ยวกับการโอเวอร์โหลด?

คุณทำรายการคำเตือนและการแจ้งเตือนทุกครั้งจากนั้นปฏิบัติตามกฎต่อไปนี้:

  1. ไม่เคยไม่เคยเพิ่มคำเตือนใหม่ในรายการ โค้ดใหม่ทุกชิ้นทุกการเปลี่ยนแปลงทุกการเปลี่ยนแปลงแพทช์ทุกครั้งการคอมมิทต้องไม่แนะนำคำเตือนใหม่มันอาจแก้ไขได้เท่านั้น
  2. ทุกครั้งที่คุณสัมผัสชิ้นส่วนของรหัสแก้ไขคำเตือนใด ๆ และทั้งหมดในส่วนของรหัสนั้น (กฎ Boyscout: ออกจากที่ตั้งแคมป์เสมอในสภาพที่ดีกว่าที่คุณพบ) วิธีนั้นรหัสที่ไม่สำคัญสามารถอยู่เต็มไปด้วยคำเตือน แต่รหัสที่สำคัญจะได้รับการทำความสะอาดตลอดเวลา "ส่วนของรหัส" อาจเป็นฟังก์ชันคลาสไฟล์ คุณอาจผ่อนคลายกฎนี้เพื่อพูดเพื่อแก้ไขคำเตือนอย่างน้อยหนึ่งคำ ประเด็นคือแก้ไขตามที่คุณหา

หมายเหตุ: ทั้งสองข้อต้องการให้คุณมีฐานข้อมูลบันทึกและกลไกการกรองบันทึก ยังทราบว่า "บันทึกฐานข้อมูล" และ "เข้าสู่ระบบการกรองกลไก" grepก็อาจเป็นไฟล์ข้อความและ

นี่เป็นบิตที่สำคัญ หากไม่มีฐานข้อมูลคุณจะไม่ทราบว่าเมื่อคุณเพิ่มคำเตือนใหม่และหากไม่มีตัวกรองคุณยังคงมีปัญหาโอเวอร์โหลด

หมายเหตุ # 2: สิ่งนี้ไม่เพียงทำงานได้กับคำเตือนเท่านั้น แต่ยังใช้งานได้กับตัวตรวจสอบรูปแบบตัวชี้วัดความซับซ้อนการครอบคลุมโค้ดเครื่องมือวิเคราะห์แบบคงที่และอื่น ๆ โดยทั่วไป:

  1. อย่าเพิ่มปัญหาใหม่
  2. แก้ไขปัญหาเก่าในขณะที่คุณสะดุด

สิ่งนี้จะช่วยให้คุณสามารถจัดลำดับความสำคัญได้อย่างง่ายดาย: รหัสที่แก้ไขบ่อยครั้งและจำเป็นต้องอ่านและดูแลง่ายจะดีขึ้นเมื่อเวลาผ่านไป รหัสที่ไม่ได้สัมผัสบ่อยครั้งจะไม่ดีขึ้น แต่ก็โอเคเพราะไม่มีใครต้องการดูมัน และอย่างน้อยมันก็จะไม่แย่ลง

แน่นอนไม่มีอะไรหยุดคุณจากการจัดสรรเวลาโดยเฉพาะเพื่อที่จะไม่ทำอะไรเลยนอกจากตามล่าและฆ่าคำเตือน บ่อยครั้งที่สิ่งนี้ไม่ได้คุ้มค่าทางเศรษฐกิจและเป็นหน้าที่ของคุณในฐานะวิศวกรที่ต้องคำนึงถึงเรื่องนี้ "วิศวกรคือคนที่สามารถสร้างด้วยดอลลาร์สิ่งที่คนโง่สามารถสร้างได้ด้วยสองคน"


3
อีกเหตุผลหนึ่งที่จะปิดคำเตือนและข้อผิดพลาดที่เข้าถึงผู้ใช้ที่ไม่มีการกรอง: เนื่องจากข้อมูลเป็นคำเตือนสำหรับผู้พัฒนาระบบอาจรั่วข้อมูลที่ละเอียดอ่อน (ชื่อไฟล์ชื่อของเซิร์ฟเวอร์อื่น ๆ ที่เกี่ยวข้องโครงสร้างของการสืบค้น SQL ที่ใช้ ... )
Hagen von Eitzen

คำเตือนในการผลิตควรไปที่บันทึกไม่ใช่กับผู้ใช้! ข้อผิดพลาดควรไปที่บันทึกไม่ใช่ผู้ใช้ เว็บไซต์ที่ไม่ดักจับข้อผิดพลาดบันทึกและแสดงหน้าข้อผิดพลาดที่ผู้ใช้เหมาะสมแทนไม่พร้อมใช้งาน PHP ทำให้การทำสิ่งนี้ง่ายมาก แต่คุณควรทำอย่างถูกต้อง
ฮอบส์

49

หากคำเตือนและการแจ้งเตือนมาจากรหัสของคุณให้แก้ไขอย่างแน่นอนที่สุด จากประสบการณ์ของฉันใน 95% อาจเป็นพิษเป็นภัย แต่ 5% เน้นปัญหาจริงที่อาจนำไปสู่การไล่ล่าชั่วโมงที่นับไม่ถ้วน

หากพวกเขามาจากรหัสของบุคคลที่สามที่คุณต้องใช้ด้วยเหตุผลใดข้อหนึ่งโดยทั่วไปคุณไม่มีทางเลือกมากนัก

เป็นคำถามที่แตกต่างกันหากรหัสฐานเดิมของคุณมีขนาดใหญ่มากคุณสามารถใช้รหัสเดิมเป็นบุคคลที่สามได้ แต่ต้องการรหัสใหม่โดยไม่มีการเตือน


8
ฉันทำงานใน Java / eclipse ซึ่งแตกต่างจาก php อย่างเห็นได้ชัด แต่ฉันมักจะพบว่าคำเตือนถูกยกขึ้นโดยทั้ง 1) สิ่งที่คอมไพล์ แต่ฉันทำผิดชัดเจนหรือ 2) บางสิ่งที่ดีตอนนี้ แต่จะแย่ลงบนท้องถนน
corsiKa

1
@corsiKa ฉันได้รับการแปลความคิดเห็นของคุณ PHP แต่ฉันรู้ว่าเพียงหนึ่งคำที่จำเป็นต้องมีการเปลี่ยนแปลง
wizzwizz4

3
แน่นอนว่าคำเตือนเหล่านี้มาจาก StyleCop เกี่ยวกับคำสั่งซื้อของคุณusing...
Dan Pantry

12

มันเป็นเรื่องสำคัญ คำเตือนอาจไม่ทำลายการทดสอบของคุณหรือแม้แต่ปรากฏขึ้นในป่าชั่วขณะหนึ่ง - แต่อาจเป็นอาการของบั๊กที่ปรากฏ ฉันกำลังพัฒนาเป็นหลักใน C # / C ++ และมีกลยุทธ์ที่กำหนดไว้เพื่อกำจัดและป้องกันการเตือนออกจากฐานรหัสของเรา โชคดีที่มันไม่ใช่วิทยาศาสตร์จรวด =)

หากภาษาที่คุณทำงานมีความสามารถในการจัดการกับคำเตือนเป็นข้อผิดพลาดและมีระดับการเตือนตัวแปรฉันจะทำสิ่งต่อไปนี้:

  1. ลดระดับคำเตือนลงให้มากพอเพื่อให้คุณไม่ได้รับคำเตือนใด ๆ หากคุณอยู่ในระดับต่ำสุดของการเตือนและคุณยังคงได้รับคำเตือนลองแก้ไขมัน หากคุณไม่สามารถแก้ไขได้แสดงว่าคุณทำเสร็จแล้ว แต่หวังว่าคุณจะสามารถแก้ไขได้ ยิ่งใหญ่
  2. เนื่องจากคุณไม่มีคำเตือน (ในระดับต่ำสุดที่เป็นไปได้) ให้พลิกสวิตช์และถือว่าคำเตือนทั้งหมดเป็นข้อผิดพลาด
  3. ลองเปลี่ยนระดับคำเตือนขึ้นและแก้ไขคำเตือนใหม่ทั้งหมด หากไม่สามารถทำได้ให้เปลี่ยนระดับการเตือนกลับลง แต่อย่าปิดการใช้งานการเตือนว่าเป็นข้อผิดพลาด

ผมพบว่างานนี้ไม่เพียง แต่คำเตือนจากรหัสของฉัน - มันช่วยให้พวกเขาออก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.