Derek, our Technical Director, has been working in software development over the last 25 years and set up Objektum Solutions over 10 years ago. He reflects in our latest post about whether we have learnt from the past with regards to code generation...
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 project managers.
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.