Hammurapi Java Code Review Tool
Agenda Hammurapi configuration and setup – Setting up environment variables – Setting up database – Running database server and Jboss
Running code review through tool Writing custom rules
2 Company Confidential
Introduction Hammurapi is an open source Java code review tool Components of Hammurapi Toolset Mesapotamia, Hammurapi Rules, Hammurapi, Java Inspectors
Other components with bundle HSQL DB, JBoss
It comes with LGPL (lesser general public license) – http://www.gnu.org/licenses/why-not-lgpl.html – The choice of license makes a big difference: using the Lesser GPL permits use of the library in proprietary programs; using the ordinary GPL for a library makes it available only for free programs. – *** Please check whether this licensing suites you or not***
3 Company Confidential
How does it work Mesopotamia parses source files and stores parsed information in the database. Parsed files are represented by Scan object Hammurapi retrieves Scan from the database and iterates over its Source units and Language elements. Each object is passed to inspectors' inspect() method with compatible parameters Inspectors inspect language elements and source units and can post Violations, Warnings or Metrics Violations, Warnings and Metrics posted by inspectors are collected by Hammurapi and stored to the database Hammurapi Web application is used to render review results 4 Company Confidential
How does it work- continued… HSQL DB 2. Stores parsed information in to DB (Scan Objects)
1. Parses the source
SRC
Mesapotamia
4. Iterates over source units and language
(Scan Objects, Violations, Warnings & Metrics are stored here) Hammurapi
3. Get scan objects from DB
elements
8. Render review results
7. Store violations, warnings, Metrics in to the DB
Jboss
5. Each Object is passed to Inspector
6. Post violations, warnings, Metrics
Inspector
inspect(XYZ xyz)
5 Company Confidential
(Running Hammurapi web application)
Download
Download Hammurapi bundle from :http://www.hammurapi.biz/dropbox/hammurapi-bundle-5.3 (For latest stable release you can go to http://www.hammurapi.biz and play around ) Extract downloaded zip file in a directory (for examplec:\hammurapi ) Set environment variable MESOPOTAMIA_HOME to
c:\hammurapi (HOW? Click here)
If you don’t have Ant already installed, also download Ant from :-http://ant.apache.org/bindownload.cgi Add its bin folder path (example c:\ant\bin) to path environment variable Set environment variable JAVA_HOME to JDK folder 6 Company Confidential
Configure databse
Hammurapi bundle comes with hsql databse to keep its review results Create a folder named db in c:\hammurapi Inside c:\hammurapi\db folder create following three files:##-------runManager.bat---------## start javaw -Xmx800m -classpath ..\lib\hsqldb.jar org.hsqldb.util.DatabaseManagerSwing --driver org.hsqldb.jdbcDriver --url jdbc:hsqldb:hsql://localhost --user mesopotamia ##-------runServer.bat---------## start java -Xmx512m -classpath ..\lib\hsqldb.jar org.hsqldb.Server %1 %2 %3 %4 %5 %6 %7 %8 %9 ##-------server.properties----## server.database.0=file:data/Mesopotamia server.silent=true
7 Company Confidential
Initialize database Start hsql databse:- Open commandline and go to directory c:\hammurapi\db and then type following command runServer.bat
Intialize the databse:- Go to c:\hammurapi and type following command java -cp lib\hgcommons.jar;lib\hsqldb.jar;lib\mesopotamia.jar;lib\hgee.jar org.mesopotamia.util.InitDatabase
To load Java Module:- Type following command:java -cp lib\hgcommons.jar;lib\hsqldb.jar;lib\mesopotamia.jar;lib\mesopotamiajava.jar org.mesopotamia.lang.java.util.InitDatabase
( To browse the database structure start runManager.bat in db folder )
( Whenever you want to shutdown the server:- Execute SHUTDOWN command to politely bring the server down)
8 Company Confidential
Set path of source code to be reviewed Go to directory c:\hammurapi and open file build.xml Change the value of review.src to full path of you source folder to be reviewed. (by default it is set to test) For example you can set value as c:\myproject\src. Now second line of build.xml will looklike :<property name="review.src" value="c:/myproject/src"/>
9 Company Confidential
Start the Jboss JBoss also comes bundled with hammurapi bundle Make sure you are not running any other service on port 8080 because Jboss will use it. (You can change it if you want and know how to do it ) Go to c:\hammurapi\jboss\bin Type following command to start the Jboss run
10 Company Confidential
Review the code Go to c:\hammurapi Type following command ant
To see the reports type following in browser:http://localhost:8080/hammurapi
11 Company Confidential
Where is more information Quick Start Guide is here:-
http://www.hammurapi.biz/hammurapi-biz/ef/xmenu/system/analysis
User Guide can be downloaded from here:-
http://www.hammurapi.biz/hammurapi-biz/system/fileactions/get/76
12 Company Confidential
Some theory This tool uses rule engine to review the code It comes bundled with commonly used rules New rules can be implemented and configured Adding your new rules requires Java coding only You can validate whether code is adhering to design guidelines or framework standards Only tool that can be used through any Java IDE and also without IDE Every time you run review a new version of review result is published so you can compare from previous review how many violations are closed
Advance
13 Company Confidential
Thank You
Advance Topic
Write your own rules Don’t write stringObj.equals(“abc”) Use “abc”.equals(stringObj) All the method calls are sent to respective inspectors. We will write an Inspector who will be notified on method calls. This inspector will check whether method called is equals() Then it will check whether its argument is StringContstant i.e “abc” If yes then post a volilation. That’s all 16 Company Confidential
Your own custom Inspector class package com.birlasoft.customrules.blrules; import biz.hammurapi.review.Inspector; import org.mesopotamia.SourceUnit; import org.mesopotamia.lang.java.MethodCall; import org.mesopotamia.lang.java.StringConstant; import biz.hammurapi.review.Violation; public class StringComparisionInspector extends Inspector { public void inspect(MethodCall methodCall) { String methodName=methodCall.getName(); if (methodName.equals("equals") && methodCall.getArguments().size()==1 && methodCall.getArguments().get(0) instanceof StringConstant) { post(new Violation(methodCall)); } } }
17 Company Confidential
Inspector configuration File Birlasoft custom inspectors <description>Hammurapi inspectors for Birlasoft Framework biz.hammurapi.rules.KnowledgeMaximizingSet StringComparisionInspector <description>Inspector under development <severity>3
bundled Inspector 18 Company Confidential
Use your custom rule Put custom rule class after compilation in class path or inside c:\hammurapi\lib as a jar file Put your inspector.xml in the directory where build.xml is there (c:\hammurapi) Run the review as mentioned previously
19 Company Confidential
customrule.jar
Inspectors.xml
How to create environment variable From start menu go to settings>>control panel Click “system”>>Click “Advance” tab>>click “Environment Variables” button
Go back
20 Company Confidential
Setting JAVA_HOME Click on New button for user variables You will get following dialog box to add a variable
Go back
21 Company Confidential
Getting report offline Download wget for windows ( http://users.ugent.be/~bpuype/wget/#download)
You need
wget.exe Put wget.exe in a folder and navigate to that folder from a command line (go to c:\wget for example) Now type following command:wget -mrkE http://localhost:8080/hammurapi/report.jsp?ID=XX
Here XX is your report ID in hammurapi report for example 15 You will have all the files in a folder inside wget folder you created.
22 Company Confidential