เทคนิคที่ดีในการรักษารหัสสถานที่ของคุณคืออะไร?


21

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

ตัวอย่าง:

  1. รายงานข้อผิดพลาด: "การชนไม่ได้ทำงานที่มุมกำแพง"

    1. การแพร่พันธุ์ของบั๊กทำให้เกิดรูปหลายเหลี่ยมไม่ชนกัน
    2. รหัสการชนกันของข้อมูลนั้นเขียนขึ้นโดย dev ไม่พร้อมใช้งาน ดังนั้นการตรวจสอบจะเป็นดังนี้:

โครงสร้างของการไหล

ในระหว่างการสอบสวนโดยเฉพาะอย่างยิ่งเมื่อตรวจสอบรายการที่ไม่ใช่รหัสเช่น Google อาจมีเหตุผลหนึ่งที่คาดว่าจะทำให้รหัสของพวกเขาหลวม ( ฉันได้ดูเส้นทางรหัสนี้แล้วหรือฉันกำลังตรวจสอบเส้นทางรหัสใด ฟังก์ชั่นนี้ฯลฯ ) สิ่งเดียวกันก็เหมือนกันสำหรับการขัดจังหวะที่หลีกเลี่ยงไม่ได้ (บอส: ฉันต้องการ [รายงานแบบไม่มีจุดหมายที่มีความยาว] ตอนนี้ฯลฯ )

มันจะมีประโยชน์ที่จะมีทรัพยากรของเทคนิคหรือเครื่องมือสำหรับการให้วิธีการติดตามที่หนึ่งในรหัส


แก้ไข : ตัวอย่างข้างต้นมีความหมายว่าเป็นภาพประกอบที่มีศักยภาพไม่ใช่เป็นปัญหาจริงที่ต้องตอบรับ

อีกวิธีหนึ่งในการตอบคำถามนี้คือ:

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

คำตอบ:


14

อินเทอร์เฟซฟองอากาศพยายามที่จะแก้ปัญหานี้โดยการแสดงบิตของรหัสพร้อมกัน (คุณติดเบราว์เซอร์ของคุณสำหรับ Googling) มันดูน่าทึ่ง แต่ฉันไม่ได้ลองเลย แนวคิดรุ่นนี้เป็นการใช้งาน Visual Studio สำหรับ Visual Studio Ultimate


+1 เนื่องจากเป็นวิธีแก้ปัญหาที่ใช้งานได้จริงและพร้อมใช้งานแล้ว (มันก็ยอดเยี่ยมเหมือนกัน!)
Jess Telford

หนึ่งในสิ่งที่ฉันคิดค้นในหัวของฉันปีที่ผ่านมาเพียงเพื่อหาว่ามันมีอยู่แล้ว :( +1
phresnel

ดูเหมือนจะคล้ายกับสิ่งที่คุณสามารถทำได้ใน Squeak และ Smalltalks อื่น ๆ ที่คุณเปิดหน้าต่างเรียกดูโค้ดใหม่และคุณสามารถนำทางไปยังวิธีการ / ชั้นเรียนที่คุณต้องการ
Rudolf Olah

มันยอดเยี่ยมมาก ... ฉันได้สร้างแอพของเล่นเล็ก ๆ ที่ให้ภาพการท่องอินเทอร์เน็ตของคุณในลักษณะที่คล้ายกัน ไม่เคยคิดที่จะใช้สิ่งนั้นกับการสร้างภาพโค้ด
Michael Brown

12

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


ใช่แล้ว คำตอบที่ดีที่สุดโดยไกล
Patrick Hughes

10

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


1
ในทางปฏิบัติมาก ฉันไม่คิดว่าจะใช้การควบคุมแหล่งที่มาด้วยวิธีนี้
Jess Telford

ตัวแก้ไขและดีบักใด
John Gaines Jr.

ตัวแก้จุดบกพร่อง MIMI ของ Vim และ Green Hill
Karl Bielefeldt

ใน Visual Studio เป็น CTRL + - เพื่อย้อนกลับและ CTRL + = เพื่อไปข้างหน้า
VitalyB

Eclipse สามารถแสดงนิยามของสัญลักษณ์ปัจจุบันภายใต้เคอร์เซอร์ในแผงแยกต่างหาก

3

หลายวิธีที่ฉันติดตาม:

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

1

ฉันใช้วิธีแก้ปัญหาง่าย ๆ - อย่าปิดอะไรจนกว่าฉันจะทำงานเสร็จ นั่นหมายความว่าโดยปกติแล้วหนึ่งใน 50 หรือเปิดหน้าต่างแท็บ / นั้นมีบางอย่างในนั้นที่จะเตือนฉันสิ่งที่ฉันคิดเมื่อฉันกลับไปที่มัน


ปัญหาของวิธีนี้มีแนวโน้มว่าคุณจะติดตามความคิด / การวิจัยหลายสาขาพร้อมกันได้อย่างไร
Jess Telford

1
ฉันไม่พบว่าเป็นปัญหา - พวกเขาทั้งหมดเปิดในแบบเดียวกันมากและไม่สำคัญว่าสาขาไหนที่ฉันจะกลับไป สิ่งนี้ทำงานได้ดีกว่าสำหรับเว็บเบราว์เซอร์มากกว่า IDE แต่อาจเป็นเพราะ codebase ปัจจุบันของฉันไม่ได้จัดแนวความคิดอย่างแท้จริง
Tom Clarkson

1

รับเครื่องมือ / นักพัฒนาตัวจริงที่แท้จริงนำคุณไปสู่สิ่งใด Vi, Emacs คราสหรืออะไรก็ตาม (ทางเลือกที่มีขนาดใหญ่เป็น arguements เหนือซึ่งเป็นที่ดีที่สุด แต่ thats ปัญหาอื่น) และเรียนรู้ที่จะใช้มันอย่างถูกต้อง ไม่ชอบมากเกินไปใช้มันเหมือน Notepad ที่มี highlighing ไวยากรณ์ เรียนรู้การใช้ปุ่มลัดและไม่ต้องพึ่งพาเมาส์สำหรับการกระทำทั่วไป (ช้าเกินไป) หน้าจอขนาดใหญ่ (ขั้นต่ำ 1920x1200) เป็นประโยชน์

เครื่องมือ dev ของฉันมีชื่อ (ชื่อช้ากว่า แต่มีประโยชน์ช่วยให้ทนทาน) และบุ๊กมาร์กที่ไม่มีชื่อ (ด่วนเพื่อแทรกและลบ) ส่งต่อการเรียกดูและการอ้างอิงและค้นหาทั้งหมดในที่เดียวบันทึกสิ่งที่ต้องทำและพัฒนา (ส่วนตัวและกลุ่ม) บรรทัดเฉพาะของซอร์สโค้ด มันทำทุกภาษาภายใต้ดวงอาทิตย์โดยไม่ต้องติดตั้งปลั๊กอินอื่น

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


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

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

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

@Jess: เครื่องหมายไม่จำเป็นต้องเป็นบัฟเฟอร์ในเครื่อง เครื่องหมายที่ใช้ตัวอักษรพิมพ์ใหญ่เป็นสากล
เดฟเคอร์บี

@DaveKirby Awesome - ฉันรักการเรียนรู้สิ่งใหม่เกี่ยวกับ vim: D
Jess Telford

1

ด้วย Visual Studio ในเซสชันการดีบักคุณสามารถใช้หน้าต่าง 'Call Stack' (คุณสามารถเปิดใช้งานในDebug / Windows / Call Stackหรือด้วยทางลัดCtrl+Alt+c) เพื่อติดตามการไหลของรหัส


1
เหมือนกับใน debuggers ส่วนใหญ่ คำถามนั้นมีมากขึ้นเมื่อใช้งานการเรียกดูรหัสของคุณด้วยตนเองรวมถึงการวิจัยนอกฐานรหัสของคุณ
Jess Telford

1

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


0

ฉันใช้โหมด orgสำหรับ emacs ซึ่งเป็นเครื่องมือในการสรุป ด้วยฉันสามารถเขียนโครงร่างที่เลียนแบบ call stack ของรหัสและรวมลิงค์โดยตรงไปยังซอร์สโค้ดเอง (ผ่าน org-store-link) คุณสามารถรวมข้อความอธิบายลิงก์ไปยังหน้าเว็บอื่น ๆ (เช่นเมื่อคุณ google เพื่อหาหมายเลขมายากล)

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

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