การดีบัก: ทำความเข้าใจรายละเอียดเกี่ยวกับสาเหตุที่การแก้ไขบางอย่างทำงาน [ปิด]


12

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


1
คุณจะโน้มน้าวให้ทุกคนที่คุณแก้ไขข้อผิดพลาดได้อย่างไร?

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

คำตอบ:


32

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

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

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

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


15

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

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


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

6

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

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

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

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

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


4

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

มีปัญหาใหญ่อย่างน้อยสามประการคือ:

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

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

  3. ข้อผิดพลาดอาจไม่ได้รับการแก้ไขและมันจะกัดคุณอีกครั้งในอนาคตอันใกล้


2

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

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

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


0

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

ฉันคิดว่ามันเป็นเรื่องธรรมดามากในทุกวันนี้ นั่นเป็นเพราะ Google และ Stackoverflow คุณมีปัญหากับรหัสของคุณเพียงแค่ google หาวิธีแก้ไขแก้ไขไปยังปัญหาถัดไป

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