คำเตือนของคอมไพเลอร์


15

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

คุณจัดการกับคำเตือนที่ไม่สามารถแก้ไขได้อย่างไร คุณเขียนส่วนของรหัสอีกครั้งหรือเขียนใหม่ในวิธี "ยาวไม่แฮ็ค" หรือปิดใช้งานคำเตือนทั้งหมดด้วยกันไหม สิ่งที่ควรปฏิบัติที่ดีที่สุด

ถ้าคุณแก้ไขรหัสของคนอื่นและรหัสของเขามีคำเตือน?

นี่เป็นตัวอย่างที่ดี: jQuery มีคำเตือน JavaScript จำนวนมากเมื่อตรวจพบเบราว์เซอร์ระดับ Mozilla เหตุใดผู้พัฒนา jQ จึงไม่แก้ไข หากคุณมีส่วนร่วมกับ jQuery คุณจะแก้ไขหรือไม่


7
คุณสามารถยกตัวอย่างคำเตือนที่ไม่สามารถขยับได้หรือไม่?
หมายเหตุถึงตัวเอง - คิดชื่อ

1
คำเตือนตามคำนิยามคือคำเตือน ดังนั้นจึงไม่จำเป็นต้อง "แก้ไข" ดังนั้นคำเตือนที่ไม่สามารถแก้ไขได้คืออะไร
โกง

การใช้ประเภททั่วไปใน Java มักจะสร้างคำเตือน วิธีเดียวที่จะ "แก้ไข" คือการเพิ่ม @Suppress ซึ่งไม่สะอาดมาก IMO
Michael K

คำตอบ:


25

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

แก้ไขคำเตือนทันที (ซึ่งอาจรวมถึงการปิดใช้งานกฎแต่ละข้อถ้าคุณรู้สึกว่ามันไม่เกี่ยวข้องกับบริบทของคุณ)


8
นี้. ฉันได้รับการสืบทอดฐานรหัสด้วยชุดคำเตือนที่เหมาะสม ไม่มีของพวกเขาคือคำเตือนสำหรับสิ่งที่ฉันโดยเฉพาะอย่างยิ่งเกี่ยวกับการดูแล แต่สิ่งที่ฉันทำดูแลเกี่ยวกับความสามารถในการมองเห็นแบรนด์ใหม่ "0 ข้อผิดพลาด (s), 1 เตือน (s)" เมื่อฉันทำอะไรผิด
Carson63000

33

ความคิดเห็นของฉันคือคุณควรเข้มงวดกับตัวเอง คอมไพเลอร์ได้รับการเขียนโดยผู้เชี่ยวชาญทั้งหมดในภาษา หากพวกเขารายงานว่ามีบางอย่างที่ค่อนข้างสั้น (คิดว่ามีกลิ่นรหัส) ควรตรวจสอบรหัสนั้น

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


1
ฉันเห็นด้วยอย่างแน่นอน!
ชายดีบุก

5
ฉันเห็นด้วย. OP: คุณควรอ่านเกี่ยวกับ 'windows ที่แตก' ดังที่ได้ถูก decribed ใน Pragmatic Programmer
ไม่มีใคร


9

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

ฉันได้รับรหัสจากคนอื่นเป็นครั้งคราวซึ่งอาจทำให้เกิดคำเตือน การตรวจสอบแหล่งที่มาแสดงให้เห็นว่าพวกเขาไม่สนใจสิ่งที่เป็นแบบฝึกหัดการเขียนโปรแกรมที่ดีใน C ทำให้รหัสของพวกเขาบอบบาง

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


6

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


4

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

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

ถามเจ้านายของคุณและทำตาม


2

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

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


2

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

ต้องบอกว่าบางครั้งคอมไพเลอร์สามารถมีคำเตือนที่ไม่สมเหตุสมผลและไม่สามารถแก้ไขได้ง่าย ฉันเผชิญกับสถานการณ์นี้ทุกวันในที่ทำงานกับ TI CodeComposer ซึ่งเป็นสภาพแวดล้อมการพัฒนาสำหรับ TI DSP ฉันมีรหัส C ++ ที่คอมไพล์โดยไม่มีคำเตือนภายใต้ Visual Studio แต่สิ่งใดที่ส่งผลให้มีคำเตือนแปลก ๆ ใน CodeComposer เพียงเพราะการสนับสนุน TI สำหรับมาตรฐาน C ++ นั้นดีกว่า โชคดีที่ CodeComposer ช่วยให้คุณปิดการใช้งานคำเตือนเฉพาะรายซึ่งเป็นสิ่งที่เราต้องทำเมื่อไม่มีวิธีแก้ไขรหัสที่สร้างคำเตือน


1

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

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

ดังนั้นในเกือบทุกกรณีกำจัดแฮ็ก เมื่อแฮ็คมีเหตุผลจริง ๆ เพิ่มความคิดเห็นบอก PyLint มันโอเค


1

ประโยชน์ของความเข้มงวดบางอย่างไม่ได้ระบุไว้อย่างชัดเจนในคำตอบอื่น ๆ :

  1. เมื่อคำเตือนที่แก้ไขได้อย่างง่ายดายทั้งหมดได้รับการแก้ไขคำเตือนที่สำคัญ / เกี่ยวข้องที่เหลือมีแนวโน้มที่จะปรากฏขึ้น
  2. หากพบคำเตือนที่เกี่ยวข้องและจัดการกับตรงเวลา (ก่อนการเปิดตัว), ข้อผิดพลาดสามารถหลีกเลี่ยงได้จึงนำไปสู่ความพึงพอใจของผู้ใช้ปลายทางที่ดีขึ้น
  3. การแก้ไขคำเตือนมักจะนำไปสู่การบำรุงรักษาและรหัสที่ง่ายขึ้น (เช่นการกำจัดเงื่อนไขที่เป็นจริงเสมอ)
  4. เมื่อจำนวนการเตือนใกล้ถึง 0 มันเป็นเรื่องง่ายที่จะเห็นด้วยกับนโยบายการเตือนเป็นศูนย์ในทีมซึ่งเป็นเรื่องง่ายมากที่จะทำให้เป็นอัตโนมัติในระบบ CI
  5. เมื่อแก้ไขคำเตือนของคอมไพเลอร์ความเข้าใจของโค้ดโปรแกรมจะลึกซึ้งยิ่งขึ้นซึ่งอาจนำไปสู่ข้อมูลเชิงลึกที่เป็นประโยชน์เกี่ยวกับการใช้งาน (เช่นค้นหาข้อบกพร่องอื่น ๆ หรือรับแนวคิดวิธีพัฒนาโค้ดเพิ่มเติม)
  6. บิวด์จะทำงานได้เร็วขึ้นสร้างรายวันได้มากขึ้น IDE / คอมไพเลอร์มีปัญหาในการจัดการและรายงานน้อยลงดังนั้นการรวบรวมจึงทำได้เร็วขึ้น (นี่จะเกี่ยวข้องเฉพาะในบริบทของคำเตือนนับพันเท่านั้น)

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


-1

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

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

จากมุมมองทางสังคมวิทยาโปรแกรมที่มีข้อความเตือนจำนวนมากคือWindows ที่ใช้งานไม่ได้


1
ไม่เป็นความจริงคำเตือนของคอมไพเลอร์จำนวนมากเกี่ยวกับสิ่งที่คอมไพเลอร์เข้าใจ 100% และไม่อยู่ในสถานะใด ๆ ของฟลักซ์ (เข้าใจก่อนหน้านี้เข้าใจในตอนนี้จะเข้าใจในอนาคต) แต่เป็นประสบการณ์ของนักเขียนคอมไพเลอร์ เขียนบ่อยครั้งไม่ถูกต้อง คุณกำลังตอบคำถามอายุ 3 ปีขึ้นไปอย่างไม่ถูกต้อง ...
jmoreno
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.