What does the work resilience means to you? What are the characteristics of a resilient system? How is resiliency affecting a software system? How can we design and built resilient systems?
During June we had the honor and delight to participate to the 14th International Conference on Open Source Systems (OSS 2018). We presented our work, “Open Source Software Resilience Framework”, a preliminary study that aims to adapt the famous City Resilience Framework, created by Arup with the support of the Rockefeller Foundation, to the Open Source Software Engineering Domain.
(last updated: February 4th, 2018)
There are several ways to analyze software. Depending on the scope we may be interested in the quality of the code, the documentation, the developer’s team and its activity and so forth. Here are some free software metric tools that can get you started with software analysis.
Tools for Static Program Analysis
Static program analysis refers to the analysis of the source code of a software rather than an analysis on an execution level.
- PHPQA is a free, open source software project that supports a wide range of analyzers (e.g. phploc, pdeend, phpmetrics, etc.) for PHP. [demo]
- Checkstyle, Findbugs and PMD are free, open source software projects for Java, also available as plug-ins for the Eclipse and IntelliJIdea IDEs.
Didn’t find what you were looking for? You can try this exhaustive list of tools, grouped by programing language, maintained by Wikipedia.
Software Engineering Guidelines Compliance
- Better Code Hub checks your code base for compliance against 10 software engineering guidelines – and gives you immediate feedback on where to focus for quality improvements. The tool can be used free for open source and non-commercial use.
Community Activity Analysis
Big software projects are usually built from several developers. Those teams or communities – for Open Source projects – are usually organized using a control versioning system (svn, git. etc.). Those control versioning systems are storing valuable data about the activity of those teams / communities the analysis of which can lead to very interesting findings.
- GitsGtats – for projects using git-like environments (Github, Gitlab, etc.). [demo]
- StatSVN – for projects using SVN. [demo]
- Grimoire Lab – a very mature tool that can help with data gathering from several platforms (Github, Bugzilla, Slack channels, etc.), data analysis and visualization. [demo] NOTE: If you are interested in using Grimoire Lab for your own projects you can test the online service Cauldron.io (free for public projects on Github).
Happy new year everybody! In case you are looking for a couple of good resolutions to add to your 2016 list, here’s a bunch of geeky ones coming from software engineering research field 🙂
1. Keep your diff low
Diff (short for difficulty) is one of the Halstead complexity measures. It is used to measure the difficulty of the source code of a specific software system.
Moral: try to measure your difficulty level and keep it as low as possible. If you meet a difficult person, try to engage and understand how s/he thinks. It will help you identify you own difficulty level.
2. Keep your effort low
Effort is another Halstead complexity measure. As you probably already guessed it measures the effort one needs to understand the source code of a specific software system.
Moral: do you open up to people? Do you make it easy for them to understand how you think, where you come from? There is a fine line between mystery and perplexity. Make sure you balance them right.
3. Keep your LCOM low
LCOM (abrr. for Lack of cohesion of methods) is a Chidamber & Kemerer metric measuring the cohesion of a class. High levels of the LCOM increases complexity. Also, classes with low cohesion could probably be subdivided into two or more subclasses with increased cohesion.
Moral: the more things you engage with, the less cohesive you are. Try to focus on the things that really matter.