Wednesday 26 November 2014

Personal Lean Six Sigma for Software Development

Software development is an inherently creative process and highly dependent on capabilities of individual software engineers, thus the most effective process improvement framework should be the synergy of:
  • Personal - Focus on optimizing individual performance, cover individual gaps and make use of individual strengths;
  • Lean - Focus on individual value stream and eliminating wastes in it;
  • Six Sigma - Focus on individual statistics and factual decision making.

VDM for Requirements Engineering

Requirements engineering is normally split into the following activities:
  1. Elicitation
  2. Analysis
  3. Specification
  4. Modelling
  5. Validation
  6. Management
VDM can be helpful in all of them:

Elicitation is not a well structured process itself, however VDM (or any other detailed) model can uncover very specific cases to clarify that otherwise may be unnoticed till late stages of testing.

Analysis is done in the course of creation of a precise mathematical model to the software to build.

Specification is what VDM was actually created for!

VDM-SL specification becomes an executable model in the Overture Tool. It can be further embedded into a prototype, e.g. a GUI based Jython application.

Validation of internal correctness is natural part of the modelling and specification. In addition, the executable model with an extended prototype as needed can serve as the basis for runnable and clickable validation with end users.

Surprisingly enough, being mathematically precise VDM method is an iterative one, or rather based on refinement. Thus in terms of requirements management, VDM accommodates for creation and maintenance of a series of more and more detailed (refined) models that suits well both linear and iterative software development lifecycles.

Tuesday 25 November 2014

Correct by Construction

Our take on correct-by-construction software development process is based on the following principles:
  1. Proactive risk management and defect prevention - address hard issues first and do it incrementally.
  2. Separate critical to quality sub-systems, define clear interfaces and apply the following process to them.
  3. Use precise formal notations for work products at every process step, e.g. VDM-SL for requirements.
  4. Have single source of truth, make use of work product generation, if practical.
  5. Verify work products at every process step using: 
    1. Peer review;
    2. Verification tools;
    3. Model based testing.
Early modeling, formalized review and verification of requirements allow identifying and fixing of most costly defects as close it their injection as possible, i.e. in the most effective way. 

Useful Software

We define usefulness of software as conformity to requirements that in turn have to capture user needs, expectations, and create satisfying usage experience.

Users need software to be correct - provide valid output for valid input.

Users expect software to be robust - provide advice on working around invalid input and seeking the valid output.

Obviously, requirements validation is critical in creating useful software, however frequently overlooked or sacrificed - functional prototypes are expensive and time consuming. Executable formal models, such as VDM-SL, provide a very pragmatic way to cover this gap as well as next one - model based testing of the final implementation.

Monday 24 November 2014

Why Metaphor Engineering

A lot has been said about the software crisis. Many see the excuse in Computer Science being too young, however the fact is that scientific software development methods are around for a long time. Next typical excuse is that formal methods are too academic, too difficult and time consuming.

Such reasoning misses the key point about modeling: Model is a simplified abstract view of a complex reality that captures properties of interest - not less, but not necessary more. In other words, not every programming task requires complete mathematical model and rigorous proof of its properties.

This is where lightweight formal methods have to play, we believe, outstanding role: They allow modeling and checking just enough with just reasonable effort. We ought to bring this message to software engineering masses and lead this approach to success!

We prefer Vienna Development Method (VDM) over others, because it is recognized as an international standard, is very close to modern functional programing languages and provides integrated development experience with the Overture Tool.

P.S. "Metaphor" stands for pronunciation of Meta-IV - the name of the original VDM specification language.

P.P.S. Mu at the logo of Metaphor Engineering is the Greek alphabet letter next to lambda - the symbol of functional programming.