SonarQube ทดแทนสำหรับ Checkstyle, PMD, FindBugs หรือไม่


105

เรากำลังทำงานกับโครงการเว็บตั้งแต่เริ่มต้นและกำลังดูเครื่องมือวิเคราะห์โค้ดแบบคงที่ต่อไปนี้

  • อนุสัญญา (Checkstyle)
  • การปฏิบัติที่ไม่ดี (PMD)
  • จุดบกพร่องที่อาจเกิดขึ้น (FindBugs)

โครงการสร้างขึ้นบน Maven แทนที่จะใช้เครื่องมือหลายอย่างตามวัตถุประสงค์ฉันกำลังมองหาโซลูชันที่ยืดหยุ่นเพียงตัวเดียวและพบกับ SonarQube

เป็นความจริงหรือไม่ที่เราสามารถบรรลุผลลัพธ์จาก Checkstyle, PMD และ Findbugs ด้วย SonarQube

คำตอบ:


100

Sonar จะเรียกใช้ CheckStyle, FindBugs และ PMD ตลอดจน "ปลั๊กอิน" อื่น ๆ เช่น Cobertura (การครอบคลุมโค้ด) โดยค่าเริ่มต้นสำหรับโปรเจ็กต์ Java อย่างไรก็ตามมูลค่าเพิ่มหลักคือการจัดเก็บประวัติไว้ในฐานข้อมูล จากนั้นคุณสามารถดูแนวโน้ม คุณกำลังปรับปรุงฐานรหัสหรือคุณกำลังทำในทางตรงกันข้าม? มีเพียงเครื่องมือที่มีหน่วยความจำเท่านั้นที่จะบอกคุณได้

คุณควรเรียกใช้ Sonar ในระบบ CI ของคุณเพื่อให้แม้แต่สิ่งที่ต้องใช้เวลาในการดำเนินการ (เช่น CPD - copy paste detector) ก็สามารถทำงานได้ และคุณจะมีประวัติของคุณ ในขณะที่ปลั๊กอิน Eclipse คุณจะตรวจพบการละเมิดได้เร็วกว่าซึ่งเป็นสิ่งที่ดีแต่คุณจะถูกล่อลวงให้เรียกใช้บ่อยน้อยลงหากเริ่มใช้งานนานเกินไปหรือเรียกใช้ "ปลั๊กอินที่มีคุณภาพ" น้อยลง (เช่นข้าม CPD หรือ การข้ามการวิเคราะห์ความครอบคลุมของรหัส) และคุณจะไม่มีประวัติ

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


ฉันเห็นด้วยกับผลประโยชน์เหล่านี้ในบริบทของโครงการในพื้นที่สีน้ำตาล โครงการ Greenfield ที่มีนโยบายเป็นศูนย์ไม่จำเป็นต้องมีหน่วยความจำนั้น เพียงรักษาฐานรหัสของคุณให้สะอาด 100% ตลอดเวลา
Christian Hujer

48

Sonar ใช้เครื่องมือ 3 ตัวนี้เป็นปลั๊กอินและรวบรวมข้อมูลจากทั้งสามตัวที่ให้ค่าเพิ่มเติมโดยการแสดงกราฟและอื่น ๆ จากเครื่องมือเหล่านี้ ดังนั้นพวกมันจึงเสริมกับโซนาร์


1
ใช่โซนาร์ใช้ทั้งสาม
frappuccino

27
ในขณะที่สิ่งนี้เป็นจริงจนถึงเวอร์ชัน 3.x แต่ Sonar 4.x กำลังย้ายออกจากการใช้ PMD และ CheckStyle เป็นอย่างน้อยเพื่อสนับสนุนเครื่องวิเคราะห์ปลาหมึกภายในของตัวเองเนื่องจากทำให้พวกเขามีอิสระมากขึ้นในการขยายชุดกฎและแก้ไขปัญหาที่ได้รับ ทำให้โครงการเหล่านี้เกิดขึ้นชั่วขณะ ตัวอย่างเช่นพวกเขาเลิกใช้กฎ PMD ไปแล้วมากกว่า 150 กฎและในที่สุดก็จะลบออกทั้งหมด
haylem

1
โพสต์ที่น่าสนใจเกี่ยวกับเหตุผลที่พวกเขาเลิกใช้กฎเหล่านั้น: sonarqube.org/… .
Jhack

33

ใช่และไม่. นอกจากคำตอบอื่น ๆ

ขณะนี้ SonarQube อยู่ระหว่างการเลิกใช้ PMD, Checkstyle และ Findbugs และใช้เทคโนโลยีของตนเองเพื่อวิเคราะห์โค้ด Java (เรียกว่าSonarJava ) พวกเขาทำเพราะไม่ต้องการเสียเวลาไปกับการแก้ไขอัปเกรด (หรือรอ) ไลบรารีเหล่านั้น (เช่น Java 8) ซึ่งตัวอย่างเช่นใช้ไลบรารีที่ล้าสมัย

พวกเขายังมีชุดใหม่ของปลั๊กอินสำหรับ IDE ส่วนบุคคลของคุณเรียกว่าSonarLint


8

Sonar นั้นยอดเยี่ยม แต่ถ้าคุณต้องการใช้เครื่องมือที่กล่าวถึงแยกกันและยังมีกราฟที่ดีคุณสามารถใช้Analysis Collector Pluginเป็นส่วนหนึ่งของงานสร้าง Jenkins CI ของคุณ ข้อดีเล็กน้อยของสิ่งนี้คือคุณสามารถตรวจสอบการกำหนดค่า PMD / Findbugs / Checkstyle ใน SCM ของคุณและรวมเข้ากับ Maven build ของคุณแทนที่จะใช้เซิร์ฟเวอร์ Sonar แยกต่างหาก


5

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

คุณสามารถดูได้ที่นี่: http://nemo.sonarsource.org/


3

ฉันจะยังคงใช้เครื่องมือเหล่านี้นอกเหนือจากโซนาร์เพราะอาจทำให้การสร้างมาเวนล้มเหลวเมื่อมีคนละเมิดกฎ โดยที่โซนาร์สามารถย้อนหลังได้มากกว่า


3

... ไม่กี่ปีต่อมา: ไม่ไม่ใช่! SonarQube คิดว่าจะสามารถครอบคลุมกฎทั้งหมดด้วยเครื่องวิเคราะห์ของตัวเอง แต่ก็ยังมีกฎจาก PMD หรือ CheckStyle ที่ SonarQube ไม่ครอบคลุม ดูตัวอย่าง: PMD ReturnFromFinallyBlock


ดูเหมือนว่าจะหายไป PMD Violation: ใช้ Explicit Scoping แทนระดับไพรเวตของแพ็คเกจเริ่มต้น?
user7294900

ไม่ กฎระเบียบที่มีชื่อที่แตกต่างกัน แต่พวกเขามีอยู่: งบกระโดดไม่ควรเกิดขึ้นใน "ในที่สุด" บล็อกและการมองเห็นตัวแปรสมาชิกควรมีการระบุ
Petr Bodnár

2

อย่างน้อยตั้งแต่ SonarQube 6.3+ ดูเหมือนว่า Findbugs (ในขณะนี้) ไม่ได้รับการสนับสนุนเป็นปลั๊กอินอีกต่อไป Sonarsource กำลังดำเนินการแทนที่ Findbugs-rules ด้วย Java-plugin ของตัวเอง

พวกเขายังมีรายการสถานะการแทนที่ของแต่ละกฎที่นี่: http://dist.sonarsource.com/reports/coverage/findbugs.html

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