I have been a great fan of pushing the degree of automation to a limit. And as stated in this blog post: and as a follow up of and OSGI Best practices: I now present the consistency and OSGi dependency checker 🙂
The setting is a multi modul maven project for a OSGI based application – with all the nice maven features turned on (reports (all kind off), scm, issue tracker, mailinglist, etc) – so to speak of a complete Software Development Environment.
The broken window principal says:
"Consider a building with a few broken windows. If the windows are not repaired, the tendency is for vandals to break a few more windows. Eventually, they may even break into the building, and if it's unoccupied, perhaps become squatters or light fires inside.Source: wikipedia
Or consider a sidewalk. Some litter accumulates. Soon, more litter accumulates. Eventually, people even start leaving bags of trash from take-out restaurants there or breaking into cars."
And to prevent the broken window principal I implemented a small tool doing some of this stuff:
- Checks what kind of dependencies are available between the OSGi Bundles
- Detects cycles (which is bad :-))
- Looks for unused imports and exports
As a result you get e.g. a report and a graph.
The second part of the tool is maybe even nicer 🙂 Beside all the good reports and tools you can use like findbugs, pmd, checkstyle, and others; sometimes I’m missing the very basic stuff. I implemented some consistency checks which can check for the following stuff, and verify the consistency of your project:
- Look if all needed Unittests are available
- Look for old unused code
- Look for old empty packages
- Test if the 80% code coverage mark is reached by the Unittest (and if methods are tested for sanity, failure, and success)
- Look for files which are not included in the binary build (they might be obsolete)
You could integrate those checks in the build systems or even force them on checkin like svnchecker does. Or you can use it to generate reports.
Ever heard of Ben fry? No? – You should 🙂 he did some great stuff with visualization. For example visualizing the pacman source code. Or a tool for visualizing the evolution of software projects in revisionist. He has some other great stuff on his homepage. Also interesting is the tool processing, which is also used in code_swarm. Some samples of his data visualization:
I’ve been working with OSGi for the past years – and I must admit I really like it. If you follow some best practices rules your applications are definitely going to perform better and look nicer. Therefor I remembered an presentation about best practices when using OSGi. I have almost nothing to add – See for yourself: OSGi Best Practices!
I like the OSGi platform, and I have been using it for quite a while. One of the most important things is to keep track of your dependencies (e.g. like preventing cycled dependencies). Auto-generated MANIFEST.MF files are most of the time not really optimized. Therefor I started writing some python code to check dependencies.
It reads in all the MANIFEST.MF files from the bundles and creates a dependency graph. It will look for unnecessary and unneeded imports and exports. Look for cyclus etc. It is written using the networkx library for python. Also useful is the zipfile extension in python 🙂 It can be used to extract the jar files of bundles.