เครื่องมือหรือเทคนิคใดที่มีประโยชน์สำหรับการอธิบายรหัสฐานที่ไม่คุ้นเคย [ปิด]


9

เมื่อตรวจสอบรหัสที่ไม่คุ้นเคยด้วยตนเอง (เพื่อตรวจสอบหรือแก้ไข) ฉันดูเหมือนมีสามตัวเลือก

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

เมื่อฉันได้อ่านพอของรหัสที่จะมีความเข้าใจที่มั่นคงเป็นธรรมของสิ่งที่มันทำฉันมักจะสะท้อนให้เห็นว่าผมเคยอ่าน 80% หรือมากกว่าของ codebase ในขณะที่รหัสพื้นฐานคือ 20% หรือน้อยกว่า ฉันเสียเวลาไปมาก

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


2
โดยไม่เข้าใจร้อยละ 80% คุณไม่สามารถเข้าใจว่าทำไม 20% จึงเป็นส่วนพื้นฐาน
ratchet freak

@ ratchetfreak ฉันจะไม่พูดแบบนั้นแน่นอน เครื่องมือสามารถแยกรหัสที่มักถูกเรียกเช่น หรือเรียกใช้สแต็กระดับลึกจำนวนมากเท่านั้น
Drew Dormann

คำตอบ:


8

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

  • VisualStudio สามารถสร้างแผนภาพคลาส UML ของฐานรหัสโดยอัตโนมัติ อย่างน้อยที่สุดมันจะแสดงลำดับชั้นของชั้นเรียนให้คุณ
  • Doxygen มีประโยชน์อย่างมาก แม้ว่ารหัสไม่มีความคิดเห็นสไตล์ doxygen แต่ doxygen ยังสามารถสร้างเอกสารที่สามารถอ่านได้ไดอะแกรมคลาสและกราฟการโทรซึ่งจะมีประโยชน์มากสำหรับการค้นหาเส้นทางรอบฐานรหัสที่ไม่คุ้นเคย

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

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


2
ขอบคุณ @Dima Doxygen นั้นยอดเยี่ยมในการจัดการบางอย่าง (ฉันไม่ต้องการคัดท้ายคำตอบโดยการวางชื่อเครื่องมือหนึ่งที่ฉันรู้) รุ่งโรจน์ในองค์ประกอบ "ปฏิสัมพันธ์ของมนุษย์" ระดับหัวเช่นกัน :)
Drew Dormann

3

นี่เป็นวิธีที่รุนแรงกว่า เทคนิคนี้อาจมีประโยชน์สำหรับโครงการที่มีหลายคลาสที่ไม่ได้จัดเป็นเนมสเปซที่มีความหมาย

เป้าหมายของการฝึกนี้คือการค้นพบความสัมพันธ์ในชั้นเรียน ทำโคลนโครงการทิ้งไว้แล้วลองใส่ชั้นเรียนบางส่วนในเนมสเปซ เพื่อประหยัดเวลาในการพยายามซ้ำให้ใช้เครื่องมือประมวลผลไฟล์ Regex เพื่อทำการเปลี่ยนแปลงนี้โดยอัตโนมัติ

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

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


นั่นฉลาด ปกติคุณจะทำอย่างนั้นสำหรับหลาย ๆ คลาสหรือคุณเก็บไว้เมื่อคุณเจอคลาสเฉพาะที่ไม่ชัดเจนสำหรับคุณ?
Drew Dormann

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