Sonar
¸ÅÊö
Sonar ÊÇÒ»¸öÓÃÓÚ´úÂëÖÊÁ¿¹ÜÀíµÄ¿ª·Åƽ̨¡£Í¨¹ý²å¼þ»úÖÆ£¬Sonar ¿ÉÒÔ¼¯³É²»Í¬µÄ²âÊÔ¹¤¾ß£¬´úÂë·ÖÎö¹¤¾ß£¬ÒÔ¼°³ÖÐø¼¯³É¹¤¾ß¡£
Óë³ÖÐø¼¯³É¹¤¾ß£¨ÀýÈç Hudson/Jenkins µÈ£©²»Í¬£¬Sonar ²¢²»ÊǼòµ¥µØ°Ñ²»Í¬µÄ´úÂë¼ì²é¹¤¾ß½á¹û£¨ÀýÈç
FindBugs£¬PMD µÈ£©Ö±½ÓÏÔʾÔÚ Web Ò³ÃæÉÏ£¬¶øÊÇͨ¹ý²»Í¬µÄ²å¼þ¶ÔÕâЩ½á¹û½øÐÐÔÙ¼Ó¹¤´¦Àí£¬Í¨¹ýÁ¿»¯µÄ·½Ê½¶ÈÁ¿´úÂëÖÊÁ¿µÄ±ä»¯£¬´Ó¶ø¿ÉÒÔ·½±ãµØ¶Ô²»Í¬¹æÄ£ºÍÖÖÀàµÄ¹¤³Ì½øÐдúÂëÖÊÁ¿¹ÜÀí¡£
ÔÚ¶ÔÆäËû¹¤¾ßµÄÖ§³Ö·½Ã棬Sonar ²»½öÌṩÁË¶Ô IDE µÄÖ§³Ö£¬¿ÉÒÔÔÚ Eclipse ºÍ IntelliJ
IDEA ÕâЩ¹¤¾ßÀïÁª»ú²é¿´½á¹û£»Í¬Ê± Sonar »¹¶Ô´óÁ¿µÄ³ÖÐø¼¯³É¹¤¾ßÌṩÁ˽ӿÚÖ§³Ö£¬¿ÉÒԺܷ½±ãµØÔÚ³ÖÐø¼¯³ÉÖÐʹÓÃ
Sonar¡£
´ËÍ⣬Sonar µÄ²å¼þ»¹¿ÉÒÔ¶Ô Java ÒÔÍâµÄÆäËû±à³ÌÓïÑÔÌṩ֧³Ö£¬¶Ô¹ú¼Ê»¯ÒÔ¼°±¨¸æÎĵµ»¯Ò²ÓÐÁ¼ºÃµÄÖ§³Ö¡£
Sonar µÄ°²×°
Sonar ÊÇ Codehaus ÉÏÃæµÄÒ»¸ö¿ªÔ´ÏîÄ¿£¬Ê¹ÓõÄÊÇ LGPL V3 Èí¼þÐí¿É¡£ÎÒÃÇ¿ÉÒÔÔÚÆä¹Ù·½ÍøÕ¾ÉÏÏÂÔØÆäÔ´´úÂë¼°°²×°°ü¡£
ÆäÔ´´úÂëÐèҪʹÓ÷ֲ¼Ê½°æ±¾¿ØÖÆÈí¼þ Git ½øÐмì³ö£¨Check Out£©£¬ÃüÁîÐз½Ê½ÈçÏ£º
git clone git://github.com/SonarSource/sonar.git
±¾ÎÄÖ÷Òª½éÉÜ Sonar µÄʹÓ÷½·¨£¬Ö»ÐèÒªµ½ Sonar ÍøÕ¾ÏÂÔØ×î½üµÄ·¢Ðаü¼´¿É£¬±¾ÎÄд×÷ʱ×îеİ汾Ϊ
2.11¡£
ÏÂÔØ zip °üºó£¬Ö±½Ó½âѹµ½ÈÎÒâĿ¼£¬ÓÉÓÚ Sonar ×Ô´øÁË Jetty 6 µÄÓ¦Ó÷þÎñÆ÷»·¾³£¬ËùÒÔ²»ÐèÒª¶îÍâµÄ°²×°¾Í¿ÉÒÔʹÓã¬ÖµµÃÒ»ÌáµÄÊÇ
Sonar Ò²Ö§³Ö²¿ÊðÔÚ Apache Tomcat Ó¦Ó÷þÎñÆ÷ÖС£
ÔÚ windows »·¾³ÖУ¬Ö±½ÓÆô¶¯ Soanr µÄ bin Ŀ¼Ï windows-x86-64\StartSonar.bat
¼´¿É¡£
È»ºóÔÚä¯ÀÀÆ÷ÖзÃÎÊ£ºhttp://localhost:9000/
ͼ 1. Sonar ·ÃÎʽçÃæ

ÕâÑù¾Í³É¹¦°²×°²¢Æô¶¯ÁË Sonar£¬µ«ÆäÖÐûÓа²×°²å¼þ£¬ÐèÒªÓû§ÏÂÔØ²¢°²×°×Ô¼ºËùÐèÒªµÄ²å¼þ¡£±¾½ÚÒÔ
Quality Index Plugin ΪÀý£¬½éÉÜÈçºÎÏÂÔØ¼°°²×° Sonar ²å¼þ¡£
Ê×ÏÈ·ÃÎÊ Sonar Ö÷Ò³ÖÐ Dashboard > Sonar > Documentation
> Sonar Plugin Library ·¾¶
ͼ 2. Sonar ²å¼þµÄÏÂÔØ

½øÈë Quality Index ²å¼þ£¬µã»÷ÏÂÔØÂ·¾¶
ͼ 3. Quality Index Plugin ÏÂÔØ

È»ºó½«ÏÂÔØµÄ sonar-quality-index-plugin-1.1.3.jar Îļþ·Åµ½ sonar-2.11\extensions\plugins
·¾¶Ï¡£ÖØÆô Sonar£¬¸Ã²å¼þ¾ÍÔÚ Sonar µÄƽ̨ÉÏÔËÐв¢¿ªÊ¼¹¤×÷¡£
Êý¾Ý¿âÉèÖÃ
Sonar ĬÈÏʹÓõÄÊÇ Derby Êý¾Ý¿â£¬µ«Õâ¸öÊý¾Ý¿âÒ»°ãÓÃÓÚÆÀ¹À°æ±¾»òÕß²âÊÔÓÃ;¡£ÉÌÓü°¶ÔÊý¾Ý¿âÒªÇó½Ï¸ßʱ£¬½¨ÒéʹÓÃÆäËûÊý¾Ý¿â¡£Sonar
¿ÉÒÔÖ§³Ö´ó¶àÊýÖ÷Á÷¹ØÏµÐÍÊý¾Ý¿â£¨ÀýÈç Microsoft SQL Server, MySQL, Oracle,
PostgreSQL µÈ£©
±¾ÎÄÒÔ MySQL ΪÀý˵Ã÷ÈçºÎ¸ü¸Ä Sonar µÄÊý¾Ý¿âÉèÖãº
1.ÔÚ MySQL Öд´½¨ sonar Óû§
CREATE
USER sonar IDENTIFIED BY 'sonar';
GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'localhost'
\
IDENTIFIED BY 'sonar' WITH GRANT OPTION; |
2.½« MySQL µÄÇý¶¯Îļþ£¨Èç mysql-connector-java-5.1.13.jar£©¿½±´µ½
sonar-2.11\extensions\jdbc-driver\mysql Ŀ¼
3.ÐÞ¸Ä sonar-2.11\conf\sonar.properties
Îļþ£¬Óà # ×¢ÊÍÔÀ´ Derby µÄÅäÖÃÏ²¢´ò¿ª MySQL Êý¾Ý¿âµÄÅäÖÃÏî:
#
Comment the following lines to deactivate
the default embedded
database.
#sonar.jdbc.url: jdbc:derby://localhost:1527
/sonar;create=true
#sonar.jdbc.driverClassName: org.apache.
derby.
jdbc.ClientDriver
#sonar.jdbc.validationQuery: values(1)
#----- MySQL 5.x/6.x
# Comment the embedded database and uncomment
the following
#properties to use MySQL. The validation query
is optional.
sonar.jdbc.url: \
jdbc:mysql://localhost:3306/sonar?useUnicode=
true&characterEncoding=utf8
sonar.jdbc.driverClassName: com.mysql.
jdbc.Driver
#sonar.jdbc.validationQuery: select 1 |
4.ÖØÆô Sonar¡£
ʹÓà Sonar ½øÐдúÂëÖÊÁ¿¹ÜÀí
ΪÁ˲»Éæ¼°´úÂëµÄ°æÈ¨ÎÊÌâ¼°·½±ã¶ÁÕßÊÔÑ飬±¾½ÚÒÔ¿ªÔ´ÏîÄ¿ Mojo ΪÀý£¬ËµÃ÷ÈçºÎʹÓà Sonar ¶ÔÔ´´úÂë½øÐÐÖÊÁ¿¹ÜÀí£¬ÔÚ²»Éæ¼°±àÒëµÄÇé¿öÏ£¬±¾Îľ¡Á¿Ê¹ÓÃ
Sonar µÄ Nemo ÑÝʾ¹¦ÄÜ¡£
Ê×ÏÈ£¬ÐèÒª´Ó Mojo Ê×Ò³ÉÏÏÂÔØÔ´´úÂ루±¾ÎÄʹÓà TortoiseSVN ¹¤¾ß£©£¬ÈçͼËùʾ£¬Mojo
ÏîÄ¿°üÀ¨ÁËÐí¶à¹¤³Ì¡£
ͼ 4. Mojo ¹¤³ÌÎļþ¼Ð

ÆäÖеÄÿ¸ö¹¤³Ì¶¼ÊÇÒ»¸ö Maven ÏîÄ¿£¬ÈçͼËùʾ£º
ͼ 5. Maven ¹¤³ÌÎļþ

±àÒëÃüÁîÈçÏ£º
±àÒë³É¹¦ºó£¬ÔÙʹÓÃÈçÏÂÃüÁ
Maven ²å¼þ»á×Ô¶¯°ÑËùÐèÊý¾Ý£¨Èçµ¥Ôª²âÊÔ½á¹û¡¢¾²Ì¬¼ì²â½á¹ûµÈ£©ÉÏ´«µ½ Sonar ·þÎñÆ÷ÉÏ£¬ÐèҪ˵Ã÷µÄÊÇ£¬¹ØÓÚ
Sonar µÄÅäÖò¢²»ÔÚÿ¸ö¹¤³ÌµÄ pom.xml ÎļþÀ¶øÊÇÔÚ Maven µÄÅäÖÃÎļþ settings.xml
ÎļþÀ¾ßÌåÅäÖÃÈçÏ£º
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.jdbc.url>
jdbc:mysql://localhost:3306/sonar?useUnicode
=true&characterEncoding=utf8
</sonar.jdbc.url>
<sonar.jdbc.driver>com.mysql.jdbc.Driver
</sonar.jdbc.driver>
<sonar.jdbc.username>sonar</sonar.jdbc.username>
<sonar.jdbc.password>sonar</sonar.jdbc.password>
<sonar.host.url>http://localhost:9000
</sonar.host.url>
</properties>
</profile> |
½« Soanr ËùÐèÒªµÄÊý¾ÝÉÏ´«µ½ Sonar ·þÎñÆ÷ÉÏÖ®ºó£¬Sonar °²×°µÄ²å¼þ»á¶ÔÕâЩÊý¾Ý½øÐзÖÎöºÍ´¦Àí£¬²¢ÒÔ¸÷ÖÖ·½Ê½ÏÔʾ¸øÓû§£¬´Ó¶øÊ¹Óû§·½±ãµØ¶Ô´úÂëÖÊÁ¿µÄ¼à²âºÍ¹ÜÀí¡£
ÀýÈç Radiator ²å¼þ¿ÉÒÔ¸ù¾ÝÏîÄ¿µÄ¹æÄ£½øÐÐÅÅÐò£¬²¢Óò»Í¬ÑÝʾÏÔʾ´úÂëÖÊÁ¿£º
ͼ 6. Radiator ²å¼þµÄÏÔʾ

Sonar ²å¼þµÄÅäÖÃ
Ç°ÃæÒѾÌáµ½£¬Sonar µÄÖ÷ÒªÌØÉ«ÊǶԲ»Í¬¹¤¾ß²úÉúµÄ¼ì²é½á¹û½øÐÐÔÙ¼Ó¹¤´¦Àí£¬Sonar »¹ÏòÓû§ÌṩÁ˶ÔÊý¾Ý½øÐиöÐÔ»¯´¦ÀíµÄ·½·¨¡£
±¾½ÚÒÔ Technical Debt ²å¼þΪÀý˵Ã÷ÈçºÎͨ¹ýÉèÖòÎÊýÓ°Ïì×îºóµÄ±¨¸æ½á¹û¡£Ê×ÏÈÁ˽âÒ»ÏÂÕâ¸ö²å¼þÖеġ°¼¼ÊõÕ®Îñ¡±µÄ¸ÅÄÕâ¸ö¸ÅÄî×îÔçÊÇÔÚ
1992 ÄêÓÉ Ward Cunningham ÔÚËûµÄÂÛÎÄ¡°The WyCash Portfolio
Management System¡±ÖÐÌá³öµÄ£¬Ö®ºó±»Èí¼þ¹¤³Ì½ç½ÓÊܲ¢Íƹ㣬¡¶Öع¹¡·µÄ×÷Õß Martin
Fowler Ò²ÔÚÆä ÍøÕ¾É϶Լ¼ÊõÕ®ÎñÓÐËù½éÉÜ¡£ÆäʵÔÀí¿ÉÒÔÀí½âΪ¡°³öÀ´»ìÔçÍíÒª»¹µÄ¡±£¬µ±Ç°²»¹æ·¶µÄ´úÂ룬»á¶ÔÒÔºó²úÆ·Ð޸ĵijɱ¾Ôì³ÉÓ°Ïì¡£
Soanr µÄ Technical Debt ²å¼þÌṩÁËĬÈϵļÆË㹫ʽ£¬Í¨¹ý¶ÔÆäÖеÄÈ¨ÖØ²ÎÊý½øÐÐÅäÖ㬿ÉÒÔÊÊÓ¦²»Í¬¹«Ë¾ºÍÏîÄ¿¶Ô¼¼ÊõÕ®ÎñµÄ¼ÆËã¡£
ͼ 7. Technical Debt ¼ÆË㹫ʽ

ÒÔÉϵĸ÷ÏîÊý¾ÝÖ¸±ê£¬¿ÉÒÔ¸ù¾Ý×Ô¼º¹«Ë¾ºÍÏîÄ¿µÄ²»Í¬Çé¿ö½øÐÐÉèÖã¬ÈçͼËùʾ£º
ͼ 8. Sonar ÅäÖýçÃæ

ÀýÈçĬÈϲÎÊýÏÂͬһ¸öÏîÄ¿µÄ¼¼ÊõÕ®ÎñÖ¸±êÈçÏ£º
ͼ 9. ĬÈϲÎÊýÏ Technical Debt ½á¹û

ÐÞ¸ÄÁ˲ÎÊýºóµÄ½á¹ûΪ£º
ͼ 10. ÅäÖòÎÊýºó Technical Debt ½á¹û

¿É¼û½« Average time to cover complexity of one (in hours)
´Ó 0.2 ÐÞ¸ÄΪ 0.01 ºó£¬Coverage µÄÈ¨ÖØ±äСÁË£¬´Ó¶ø´ïµ½ºöÂÔµ¥Ôª²âÊÔ¸²¸ÇÂʵÄ×÷Óᣲ»Í¬µÄ¹«Ë¾ºÍÏîÄ¿¿ÉÒÔ¸ù¾ÝÐèÒªµ÷Õû¸÷×ԵIJÎÊý£¬²ÎÊýµÄµ÷ÓźͲßÂÔ²»ÔÚ±¾ÎĵÄÌÖÂÛ·¶Î§Ö®ÄÚ¡£
ͨ¹ýÒÔÉϵÄʾÀý¿ÉÒÔ¿´³ö£¬Sonar ʹÓò»Í¬ÀàÐ͵Äͼ±íÏÔʾ¸øÓû§´úÂëÖÊÁ¿µÄ½á¹û£¬²¢ÇÒÕâЩͼ±í²»ÊǼòµ¥µØ¶Ôµ¥Ôª²âÊÔ¸²¸ÇÂÊ»òÕß¾²Ì¬¼ì²â¹¤¾ßµÄ½á¹û½øÐÐÏÔʾ£¬¶øÊǸù¾ÝÈí¼þ¹¤³ÌÀíÂÛ½øÐÐÁ˶þ´Î¼Ó¹¤ºóµÄ½á¹û£¬¸ü¼Ó¿ÆÑ§ºÍÖ±¹Û¡£
½áÊøÓï
Sonar Ϊ´úÂëµÄÖÊÁ¿¹ÜÀíÌṩÁËÒ»¸öƽ̨£¬¶Ô´«Í³µÄ´úÂ뾲̬¼ì²âÈç PMD¡¢FindBugs µÈ¹¤¾ß½øÐÐÕûºÏ£¬¿ÉÒÔ˵ÊÇĿǰ×îÇ¿´óµÄ´úÂëÖÊÁ¿¹ÜÀí¹¤¾ßÖ®Ò»¡£
|