###Build
Dependencies (and the rest of the build process) are managed by Maven. To build:
- Install Maven.
- Clone repository. Navigate a command prompt to the folder.
- Run
mvn clean install
, which will build and install all three projects.
Useful Maven Commands:
- Run
mvn clean install
from parent directory to do a full build. - Run
mvn eclipse:eclipse
to build an Eclipse project for one of the modules. - Run
mvn eclipse:eclipse -DdownloadSources=true -DdownloadJavadocs=true
to build an Eclipse project with javadocs and sources linked. - Run
mvn clean compile assembly:single
in one of the module folders to build a jar with dependencies included source - Run
mvn test jacoco:report
from parent directory to run tests and generate a jacoco coverage report. - Run
mvn findbugs:findbugs
from parent directory to generate xml findbugs reports
###Test The primary component in our project that we are interested in testing is the spreadsheet analyzer. We wrote several unit tests for this component. We supplemented these tests with Randoop, a constraint-based test generation package, to increase test coverage and generate regression tests for this module. Our original tests were pretty thorough, so the generated tests only increased our coverage by a little bit.
Here is a screenshot of the Randoop configuration process.
We used jacoco and coveralls to measure and report on test coverage. The reports are available at this link here: .
###Analysis We configured our build process to run FindBugs on our code. This was easily achieved by using the Findbugs maven plugin and adding it to our pom. We also created a custom FindBugs detector that makes warnings if non-trivial methods lack comments - the longer the method, the more severe the bug.
If any "high" severity bugs with a bug rank of 15 or lower are detected, the build fails:
Additionally, we wrote a small script that will fail the build if test coverage isn't high enough, specifically, if any class has more than 100 total uncovered statements, although this is a tunable parameter.
##Previous Milestones##
###Build### Travis CI Initially we configured our build to run on Travis CI
Jenkins
Since Travis CI did not meet the project requirements, we created a Jenkins server running on a local vagrant machine. Here is a screenshot of the web interface:
As indicated above, Maven manages our dependencies and the Jenkins server uses Maven to run the build process using. Here is a screenshot of a successful build notification.
Because we are running this locally, that is, without a public ip address, we could not setup a git hook. However, we set up a Git poll that simply pings the GitHub repository every 15 minutes (this is adjustable) and makes a build if there are changes
We created a slave vm (also using vagrant) that the master connects to via SSH to setup and execute tasks:
Here is a screenshot of the log when "slave 3" picked up a build job:
Our Jenkins config file and the config file for our job are found under jenkins/
.