วิเคราะห์โค้ด Java ที่เราเขียนว่าดีหรือไม่ด้วย PMD

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

มันคือ???


PMD เป็นหนึ่งในเครื่องมือที่จัดอยู่ในประเภท static code analysis หน้าที่ของมันคือ Scan โค้ดของเราเพื่อหาว่ามีความเสี่ยงด้านใหนบ้าง บางครั้งเป็นสิ่งที่เราเผลอ พลาด copy เพลิน หรือไม่รู้ว่าเป็นความเสี่ยงเช่นอาจจะเกิด dead lock หรือ infinite loop เป็นต้น

วิธีการติดตั้ง


Eclipse
ส่วน PMD ให้ใช้วิธีนี้ลงแบบ update site ครับ
http://sourceforge.net/projects/pmd/files/pmd-eclipse/update-site/

IntelliJ
มีเป็นแบบ plugins ไว้ให้เลือกเลยครับ
IntelliJ PMD

NetBeans
ผมไม่ได้ลงไว้ในเครื่อง แต่มีเป็นแบบ plugin ครับ หาไม่ลำบาก

วิธีใช้งาน PMD บน Eclipse


  1. ผมสร้างคลาสขึ้นมาแล้วเขียนโปรแกรมบวกเลขดังนี้

    package com.magicalcyber.testbug;
    
    public class TestBug {
    
    	public int add(int x, int y){
    		int z = x + y;
    		return z;
    	}
    
    }
    
  2. คลิกขวาที่คลาสนี้แล้วเลือก PMD -> Check Code
    Run PMD
  3. คลาสแค่นี้ แต่มี Violations ถึง 10 ข้อ!!!
    PMD Perspective
    ที่หน้าต่าง Violations Outline จะเป็นตัวบอกว่าใช้ Rule อะไรในการตัดสิน และคำบรรยาย หาก double click แต่ละรายการก็จะพาไปที่คลาสนั้น เราก็มีหน้าที่ก็แก้ไขตามนั้น
    ส่วนหน้าต่าง Violations Overview ก็จะเป็นการสรุปทั้งหมดว่าแหกกฏข้อใหนบ้าง ซึ่งสามารถ filter ได้โดยคลิกที่ธงที่บอกระดับความรุนแรงได้
  4. เมื่อตรวจสอบเสร็จแล้วอยากเคลียร์ค่า ให้คลิกขวาที่โปรเจค -> PMD -> Clear Violations

สรุป


เราสามารถตรวจได้ทั้งโปรเจค แต่หากเป็นโปรเจคใหญ่อาจจะไม่สะดวก เราก็ตรวจเฉพาะ package หรือเฉพาะคลาส ของเราน่าจะง่ายกว่า
หรือหากเราต้องการตรวจสอบโค้ดให้คนอื่น เราสามารถ generate report แล้วเอาไปให้เขาดูได้โดยการคลิกขวาที่โปรเจค -> PMD -> Generate Reports
และอีกหลายๆ อย่างรอการค้นหาจากเราอยู่ครับ

คำถาม


กฏมันละเอียดเกินไป ทำตามจนครบไม่ไหวครับ ลดกฏได้หรือเปล่า
– ไปตั้งได้ที่ Perferences -> PMD

มี Tools คล้ายๆว กันชื่อ FindBugs มันดีกว่ากันหรือเปล่า จะใช้อันใหนดี
– ใช้คู่เลยก็ได้ครับ ปกติผมก็ใช้คู่กัน เพราะ FindBugs ไม่สามารถตรวจสอบ jsp ได้ซึ่ง PMD ทำได้ แต่ต้องใช้กำลังภายในซักหน่อยตาม document ที่เขียนไว้ “If you want to call the PMD API for checking JSP files, you should investigate the javadoc of PMD.”
อีกอย่างหนึ่งคือ FindBugs ตัวใหม่ (version 3) ต้องการ JDK7 ซึ่งหากโปรเจคคุณไม่ได้ใช้ คุณต้องหาดาวโหลด plugin version 2 แบบ zip มา install เอง ล่าสุดวันที่ผมเขียนบทความ รู้สึกว่ามี bug ไม่สามารถทำงานได้บน Eclipse Luna + JDK8

มีอย่างอื่นที่ผมต้องใช้อีกหรือเปล่า
– ตามไปดูใน http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis ได้เลย อย่างเช่นถ้าบริษัทนั้นมีการวาง coding standard ไว้เพื่อให้ทีมเขียนไปในทางเดียวกัน เขาจะใช้ Checkstyle เป็นตัวตรวจสอบครับ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s