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 แย่ที่สุด) ส่วน 'สรุป' จะแสดงรายละเอียดของแต่ละการให้คะแนน รวมถึงจำนวนไฟล์ การเลิกใช้งาน (ยอมรับการเปลี่ยนแปลง) และกลิ่นที่พบ

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

นอกจากนี้ รายการนี้ยังมีตัวกรองที่ช่วยให้คุณสามารถค้นหาตามชื่อชั้นเรียนได้อย่างรวดเร็ว
การคลิกที่ชื่อชั้นเรียนจะเปิดหน้ารายละเอียดพร้อมรหัสชั้นเรียนและตัวชี้วัด เช่น:
- บรรทัดโค้ด
- วิธีปริมาณ
- การปั่นที่คำนวณแล้ว
- ความซับซ้อนตามวิธีการ
- คะแนนความซับซ้อน (รวมต่อชั้นเรียน)
- จำนวนรายการซ้ำที่พบ
- จำนวนกลิ่น
บรรทัดโค้ดที่พบปัญหาจะถูกเน้น (ตามข้อมูลที่ Reek gem ให้ไว้)
หาก Flog ระบุปัญหาใดๆ คุณจะเห็นคะแนน คุณจะเห็นด้วยว่ารายงาน Flay ตรวจพบโค้ดที่ซ้ำกันหรือไม่

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

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

การรวมรายงาน SimpleCov สามารถเพิ่มมูลค่าและประโยชน์ให้กับหน้านี้ได้มากขึ้น แต่ไม่ว่าในกรณีใด รายงาน 'ความครอบคลุม' สามารถช่วยได้หากคุณต้องการรายงานง่ายๆ เพื่อตรวจสอบความครอบคลุมการทดสอบของโครงการของคุณ
สรุป
ในโพสต์นี้ เราได้ดูคุณประโยชน์ของ RubyCritic สำหรับแอปพลิเคชัน Ruby ของคุณโดยสังเขป ก่อนที่จะเจาะลึกถึงการขึ้นต่อกันภายใน:Reek, Flay และ Flog จากนั้นเราจึงศึกษาวิธีการอ่านและวิเคราะห์รายงานของ RubyCritic
ในขั้นตอนถัดไป ให้หาวิธีใช้ RubyCritic ในไปป์ไลน์ของคุณ
ขอให้มีความสุขกับการปรับโครงสร้างโค้ด!
ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว! ป>
เบรนา มอนเตโร
ผู้เขียนรับเชิญ Brena เป็นหัวหน้าฝ่ายเทคโนโลยีที่หลงใหลในการให้คำปรึกษาแก่นักพัฒนาหน้าใหม่และมีประสบการณ์ในการพัฒนาและเป็นผู้นำทีมที่มีประสิทธิภาพสูง เธอมีประสบการณ์ในการสร้าง API ที่ปรับขนาดได้และการผสานรวมระหว่างบริการคลาวด์ มีความกระตือรือร้นเกี่ยวกับสถาปัตยกรรมเชิงวิวัฒนาการ และเป็นเด็กฝึกงาน Extended Reality (XR)
บทความทั้งหมดโดย Brena Monteiro