When I started my software career, it was common place to develop code in low level assembler languages such as Z80, 6502, 68000 etc. We had little or no design methods, development tools or strict processes to follow. Ensuring we met even what requirements we did have, was difficult and code reviewing was a labour intensive task that often resulting in a “ticking the box” exercise?
I remember working for a company that introduced Ada83 for the first time and being involved with the compiler vendors, helping to pick the bugs
out by looking at the assembler being generated. I remember people
saying “I don’t trust this code generation” way of doing things; that seems so long ago nowadays we trust the compiler put in front of us.
As software systems become even more complex, there is an increasing need to find alternative development techniques compared to the traditional
low level methods and high level programming languages we have become
used to. This is necessary to ensure we maintain quality, adhere to
requirements, increase productivity and do not increase the workload of
Model Driven Development
Model Driven Development (MDD) is the next step of abstraction in writing software applications which are traditionally written in programming
languages such as Ada, C++ and Java. If we look back in the history of
software development, we will find that each higher level of
abstraction adopted has offered improved productivity and
ease-of-writing complex applications i.e. moving from assembler to
high-level programming languages.
MDD focuses on creating models, or abstractions, more closely related to domain concepts rather than computing (or algorithmic) concepts.
Typically models are constructed to a certain level of detail, and then
code is crafted (even sometimes by hand!). With the introduction of the
Unified Modelling Language (UML), MDD
has become very popular today within many industry sections such as
Telecommunications, Finance, Defence etc. and there are now a wide
variety of practitioners, supporting tools and processes.
- The advantages of MDD include:
- Improved communication of the design(including to the customer)
- Increased understanding of design elements
- Enhancing the consistency between design and code
- Traceability within the software design
- Increased productivity through efficiency
Code can be generated from the models, ranging from system skeletons to complete, deployable products. However, I am experiencing déjà-vu. Once again I can hear people say “I don’t trust this code generation”. I wonder if in ten years we will simple trust the code generators put in front of us.
I have been working with UML for the last 10 years and in the subject of code generation and reverse engineering intensively for the last 5 years, and I’m looking forward
to writing my next post and sharing my experience in developing reverse
and roundtrip engineering tools.