Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ยกระดับคุณภาพโค้ด Ruby ของคุณด้วย RubyCritic:การวิเคราะห์ด้วยภาพและการปรับปรุงอย่างต่อเนื่อง

RubyCritic จัดทำรายงานแบบภาพโดยเน้นกลิ่นโค้ด โครงสร้างโค้ด ความง่ายในการทดสอบ และความครอบคลุมของการทดสอบในแอปพลิเคชัน Ruby ของคุณ

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

บทความนี้จะกล่าวถึงคุณประโยชน์บางประการของ RubyCritic การขึ้นต่อกัน และวิธีการอ่านรายงานโค้ด

ไปกันเลย!

เหตุใดจึงเลือก RubyCritic สำหรับแอปพลิเคชัน Ruby on Rails ของคุณ

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

ประโยชน์บางประการที่ RubyCritic สามารถมอบให้กับโครงการและกระบวนการพัฒนาของคุณ ได้แก่:

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

เพื่อให้เข้าใจถึงวิธีการทำงานของ RubyCritic มาดูการพึ่งพาภายในที่ใช้ในการสร้างรายงาน

การพึ่งพาภายในใน RubyCritic

เมื่อคุณเพิ่ม RubyCritic ให้กับโปรเจ็กต์ของคุณ การขึ้นต่อกันบางอย่างจะรวมอยู่ด้วย

เรามาเน้นย้ำถึงการพึ่งพาที่ทำให้เวทมนตร์เกิดขึ้น:อัญมณี Reek, Flay และ Flog การขึ้นต่อกันเหล่านี้ทำให้ RubyCritic สามารถแสดงข้อมูลอันมีค่าเกี่ยวกับโค้ดของคุณ การทำความเข้าใจวิธีการทำงานยังทำให้ RubyCritic ใช้งานได้ง่ายขึ้น

Reek:ตรวจจับกลิ่นรหัสใน Ruby

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

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

ตัวอย่างเช่น คุณสามารถเขียน 00 ใหม่ได้อย่างง่ายดาย ข้อความโดยใช้เทคนิคเมตาโปรแกรมมิง อย่างไรก็ตาม วิธีแก้ไขนั้นขึ้นอยู่กับนักพัฒนาตามบริบทของโครงการ ในกรณีนี้ ไม่มีห้องสมุดใดที่สามารถระบุวิธีแก้ปัญหาที่ดีที่สุดได้

Reek ตรวจพบรายการกลิ่นมากมาย โดยจะตรวจสอบและระบุกลิ่นที่เป็นไปได้ใน:

  • ชั้นเรียน
  • คุณสมบัติ
  • วิธีการ
  • พารามิเตอร์
  • โมดูล
  • ตัววนซ้ำ
  • การดำเนินการของความหลากหลาย

ด้วยการค้นหากลิ่น คุณสามารถดำเนินการเพื่อทำให้โค้ดของคุณอ่านและบำรุงรักษาได้มากขึ้น

Reek อนุญาตให้กำหนดค่าแบบกำหนดเองเพื่อ:

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

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

มาดูตัวอย่างการทำงานของ Reek กัน ในโค้ดนี้ ข้อยกเว้นถูกกำหนดไว้เพียง 18 .

 

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

Reek จะระบุ 30 เป็น UncommunicativeVariableName และแสดงคำเตือน

 

Flay:ตรวจสอบการทำซ้ำรหัส Ruby

Flay ระบุความคล้ายคลึงกันของโค้ด Ruby ที่มีโครงสร้าง รวมถึง:

  • การตรวจจับความซ้ำซ้อนของโค้ดภายในโปรเจ็กต์
  • การตรวจสอบความแตกต่างในระดับโค้ดใดๆ
  • การสร้างคะแนนเพื่อวัดว่าโค้ดของคุณดีแค่ไหน (ยิ่งคะแนนต่ำ รหัสก็ยิ่งดี)

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

เราสามารถตรวจสอบวิธีการทำงานของ Flay ได้โดยการรันมันในซอร์สโค้ดของมันเอง:

 

Flay ระบุความคล้ายคลึงกันระหว่างสองสิ่งนี้:

 

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

Flog:ตรวจสอบความซับซ้อนของโค้ดของคุณใน Ruby

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

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

มาดูการทำงานของ Flog กัน! การเปลี่ยนแปลงเล็กน้อยอาจทำให้คะแนนของคุณเปลี่ยนแปลงได้

 
 

โปรดทราบว่าในส่วนแรกของโค้ด เรามี 45 ตรวจสอบว่าเพิ่มคะแนน 0.4 คะแนน

 
 

การพึ่งพา RubyCritic อื่นๆ

RubyCritic ยังใช้การขึ้นต่อกันของรันไทม์อื่นๆ เช่น:

  • 57 - นี่เป็นการยกระดับการดีบักแอปพลิเคชัน Ruby ช่วยให้คุณสามารถรันโปรแกรมทีละบรรทัด เพิ่มเบรกพอยต์ ประเมินและติดตามค่าขณะรันไทม์ หากคุณยังคงใช้ 60 สำหรับการดีบัก ถึงเวลาที่คุณจะได้รู้จักคุณสมบัติและคำสั่งของ Byebug แล้ว
  • 76 - linter สำหรับโค้ด Ruby ที่ช่วยให้คุณทำตามคำแนะนำสไตล์ที่ใช้โดยชุมชน Ruby หรือแม้แต่ใช้สไตล์โค้ดของคุณเอง การกำหนดมาตรฐานในทีมของคุณและหลีกเลี่ยงความขัดแย้งไร้สาระเกี่ยวกับช่องว่างและแท็บจะมีประโยชน์มาก
  • 80 - เครื่องมือตรวจสอบความครอบคลุมของโค้ดแอปพลิเคชัน Ruby คุณสามารถกำหนดค่าให้ทำงานควบคู่ไปกับการทดสอบของคุณได้ โดยจะให้ตัวชี้วัดเกี่ยวกับการครอบคลุมของโค้ด เพื่อให้คุณสามารถระบุสิ่งที่คุณต้องให้ความสนใจและที่ที่จะใช้เวลาของคุณเพื่อสร้างกรณีทดสอบที่ดีขึ้น

เจาะลึกรายการการขึ้นต่อกันของ RubyCritic

การใช้ RubyCritic สำหรับแอป Ruby on Rails ของคุณ

RubyCritic มีเอกสารที่ดีเพื่อช่วยให้คุณเริ่มต้นได้โดยไม่ต้องกำหนดค่ามากนัก ดังนั้น เราจะมุ่งเน้นไปที่การใช้ทรัพยากรเพื่อช่วยวิเคราะห์รายงาน

RubyCritic จัดทำรายงาน 'รหัส', 'กลิ่น' และ 'ความครอบคลุม' เราจะมาดูคุณสมบัติแต่ละอย่างตามลำดับกัน

ภาพรวมใน RubyCritic

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

ยกระดับคุณภาพโค้ด Ruby ของคุณด้วย RubyCritic:การวิเคราะห์ด้วยภาพและการปรับปรุงอย่างต่อเนื่อง

ในส่วน 'การเลิกใช้งานและความซับซ้อน' ที่นี่ คุณสามารถระบุคลาสที่มีความซับซ้อนมากที่สุดได้แล้ว ซึ่งน่าจะเป็นประเด็นแรกของความสนใจ

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

รายงานรหัส

รายงาน 'รหัส' จะแสดงคะแนนสำหรับแต่ละคลาส รวมถึงตัวบ่งชี้การเลิกใช้งาน ความซับซ้อน การทำซ้ำ และกลิ่น

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

ยกระดับคุณภาพโค้ด Ruby ของคุณด้วย RubyCritic:การวิเคราะห์ด้วยภาพและการปรับปรุงอย่างต่อเนื่อง

นอกจากนี้ รายการนี้ยังมีตัวกรองที่ช่วยให้คุณสามารถค้นหาตามชื่อชั้นเรียนได้อย่างรวดเร็ว

การคลิกที่ชื่อชั้นเรียนจะเปิดหน้ารายละเอียดพร้อมรหัสชั้นเรียนและตัวชี้วัด เช่น:

  • บรรทัดโค้ด
  • วิธีปริมาณ
  • การปั่นที่คำนวณแล้ว
  • ความซับซ้อนตามวิธีการ
  • คะแนนความซับซ้อน (รวมต่อชั้นเรียน)
  • จำนวนรายการซ้ำที่พบ
  • จำนวนกลิ่น

บรรทัดโค้ดที่พบปัญหาจะถูกเน้น (ตามข้อมูลที่ Reek gem ให้ไว้)

หาก Flog ระบุปัญหาใดๆ คุณจะเห็นคะแนน คุณจะเห็นด้วยว่ารายงาน Flay ตรวจพบโค้ดที่ซ้ำกันหรือไม่

ยกระดับคุณภาพโค้ด Ruby ของคุณด้วย RubyCritic:การวิเคราะห์ด้วยภาพและการปรับปรุงอย่างต่อเนื่อง

รายงานกลิ่น

หน้า 'กลิ่น' จะแสดงประเภทกลิ่น ตำแหน่งที่แน่นอนที่มีกลิ่น และสถานะการแก้ไข

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

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

ยกระดับคุณภาพโค้ด Ruby ของคุณด้วย RubyCritic:การวิเคราะห์ด้วยภาพและการปรับปรุงอย่างต่อเนื่อง

รายงานความครอบคลุม

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

คุณสามารถดูได้เพียงเปอร์เซ็นต์ของการครอบคลุมโค้ด — ไม่มีข้อมูลเพิ่มเติม

ยกระดับคุณภาพโค้ด Ruby ของคุณด้วย RubyCritic:การวิเคราะห์ด้วยภาพและการปรับปรุงอย่างต่อเนื่อง

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

สรุป

ในโพสต์นี้ เราได้ดูคุณประโยชน์ของ RubyCritic สำหรับแอปพลิเคชัน Ruby ของคุณโดยสังเขป ก่อนที่จะเจาะลึกถึงการขึ้นต่อกันภายใน:Reek, Flay และ Flog จากนั้นเราจึงศึกษาวิธีการอ่านและวิเคราะห์รายงานของ RubyCritic

ในขั้นตอนถัดไป ให้หาวิธีใช้ RubyCritic ในไปป์ไลน์ของคุณ

ขอให้มีความสุขกับการปรับโครงสร้างโค้ด!

ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว! ยกระดับคุณภาพโค้ด Ruby ของคุณด้วย RubyCritic:การวิเคราะห์ด้วยภาพและการปรับปรุงอย่างต่อเนื่อง

เบรนา มอนเตโร

ผู้เขียนรับเชิญ Brena เป็นหัวหน้าฝ่ายเทคโนโลยีที่หลงใหลในการให้คำปรึกษาแก่นักพัฒนาหน้าใหม่และมีประสบการณ์ในการพัฒนาและเป็นผู้นำทีมที่มีประสิทธิภาพสูง เธอมีประสบการณ์ในการสร้าง API ที่ปรับขนาดได้และการผสานรวมระหว่างบริการคลาวด์ มีความกระตือรือร้นเกี่ยวกับสถาปัตยกรรมเชิงวิวัฒนาการ และเป็นเด็กฝึกงาน Extended Reality (XR)

บทความทั้งหมดโดย Brena Monteiro