เคล็ดลับสำหรับการแก้ไขข้อบกพร่องด้วยข้อมูลน้อยมาก? [ปิด]


11

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

ทั้งหมดนี้ฉันสามารถจัดการกับเวลาส่วนใหญ่ไม่มีปัญหา

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

โดยพื้นฐานแล้วมันจะลดลงถึงสิ่งนี้:

  • ฐานรหัสขนาดใหญ่และซับซ้อนฉันไม่คุ้นเคย 100%
  • หลายสิ่งหลายอย่างอาจผิดพลาดได้
  • ข้อมูลน้อยมากเกี่ยวกับวิธีการที่บั๊กมา

ใครบ้างมีเคล็ดลับกลโกงคำแนะนำและอื่น ๆ เกี่ยวกับวิธีการแก้ไขข้อบกพร่องของประเภทนี้หรือไม่?


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

ในฐานะที่เป็นส่วนประกอบ [อ่านโพสต์ "การแก้ไขข้อบกพร่องทางจิต" ในบล็อกของ Raymond Chen] ( goo.gl/2KIH )!
Wizard79

รหัสมีขนาดใหญ่เท่าใด สิบ KLOC หรือ 50 MLOC
Basile Starynkevitch

คำตอบ:


11

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

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

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


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

1
การดูไฟล์บันทึกสามารถช่วยได้เล็กน้อย
pramodc84

11

การเริ่มต้นที่ดีอาจเป็นหนังสือเล่มนี้

ข้อความแสดงแทน

ฉันใช้คำจำกัดความด้านล่างเนื่องจากดูเหมือนว่านักพัฒนาจะไม่สนับสนุนอีกต่อไป

รหัสดั้งเดิมคือซอร์สโค้ดที่เกี่ยวข้องกับการไม่รองรับอีกต่อไป


ส่วนที่น่าเศร้าคือมันไม่ได้เป็นรหัสดั้งเดิม ฉันค่อนข้างแน่ใจว่าสิ่งที่ฉันกำลังทำอยู่ส่วนใหญ่เริ่มต้นเมื่อต้นปี
Tarka

3
@Slokun - คำจำกัดความของ "รหัสมรดก" ในหนังสือไม่เหมือนกับคำนิยามดั้งเดิมทั้งหมด มันเป็นหนังสือที่ดีมาก
Austin Salonen

4

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

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

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


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

@BlairHippo: จากประสบการณ์ของฉันมันเป็น แต่นั่นคือราคาที่คุณจ่ายด้วยโค้ดเบสที่เขาอธิบาย มันช่างน่าหดหู่พอ ๆ กับการทำงานใน codebase เพื่อเริ่มต้น ...
Austin Salonen

การบันทึกเป็นเรื่องยาก การเพิ่มการบันทึกข้อยกเว้นอัตโนมัติเป็นเรื่องเล็กน้อยและคุ้มค่ากับความพยายาม (น้อยที่สุด) นับพันครั้ง หรืออย่างน้อยก็อยู่ใน Delphi ไม่แน่ใจว่ามีวิธีแก้ปัญหาใดสำหรับภาษาอื่น แต่ไม่ควรยากเกินไปสำหรับภาษาใด ๆ ที่มีการจัดการข้อยกเว้นที่เหมาะสม
Mason Wheeler

1

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

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


0

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

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

วนซ้ำจนกว่าคุณจะเข้าใจรหัสฐาน

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

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