Pages

Showing posts with label Reverse engineering. Show all posts
Showing posts with label Reverse engineering. Show all posts

Sunday, January 8, 2012

Success factors to apply Model-Driven Engineering

"In some day, Business analyst would set with a customer, drawing UML shapes that describing customer's business… once they covers all areas, BA presses a "button", burns a DVD, prints an invoice and says goodbye!"; this is a dream for many software houses to automatically transform UML based requirements into a running software, this is known as Model-driven engineering or Forward Engineering.

MDE is defined in Wikipedia as :"a software development methodology which focuses on creating and exploiting domain models (that is, abstract representations of the knowledge and activities that govern a particular application domain), rather than on the computing (or algorithmic) concepts. The MDE approach is meant to increase productivity by maximizing compatibility between systems (via reuse of standardized models), simplifying the process of design (via models of recurring design patterns in the application domain), and promoting communication between individuals and teams working on the system (via a standardization of the terminology and the best practices used in the application domain)."

I've used Reverse Engineering several times with legacy and un-documented systems in order to fix, "extend" or integrate with. The need of reverse engineering was very clear; to deal with the system, you need to know about it. But using MDE is different; while  software designer is drawing UML shapes, he actually Doing development, but in different language!

So, in MDE the focus is meant to business and only business, all technical staff like data access, logging, security and other are handled out of UML shapes.The magical "button" mentioned in the dream above is nothing more than a translation; it translates UML notation to a source code. That’s it, compile source code and you'll get your software!

Fine, the concept is clear, how we could implement it? And where to start?

Before telling how to implement, I have to explain common software components and modules which every software must have:

  1. Security.

  2. Data access.

  3. Logging.

  4. User interface.

  5. Workflow.

These modules are exists in each information-based software and it's re-implemented often. Fortunately , there are many ready, out-of-the-box libraries and subsystems that can be used inside systems - despite licensing issues. By clever incorporating these libraries and sub-systems into your generating template you'd generate a complete and running software.

Factor #1: Framework


The idea is based on the fact that most of information-based software are consists of business entities which are holding the information persisted by a data access layer managed by a workflow and protected by a security sub-system. The differences between the information system in organization A and organization B are business entities and workflows. This leads us to ask why not to reuse other components in both organizations? This is the first and most success factor.

By creating an Application-Template that have all common structures and components as a template will minimize the effort needed to build the software, this is exactly what called application framework.

Factor #2: Flexibility


The application framework must be built with the ability to load business entities and workflows dynamically in the run-time this is essential due to the fact that framework on a side and business entities and workflows on the other side will be developed and compiled separately.

This can be done by conducting the plug-in architecture in your framework.

Factor #3: Transformation


By using the appropriate tools to transform UML notations to a specific code "plug-ins" that is compliant with the pre-built framework, you'll have a system that covers your customer's requirements. The power of these tools that it can reads a standard UML and then generates the appropriate plug-ins and code that exactly represents business entities and workflows defined in UML.

Finally, by applying MDE in a software house will give many benefits to the company and to the customer in the same time, benefits are -but not limited to-:

  1. Developers will not worry about Security, Logging, Navigation, Workflow and many other functionalities, its already there of-the-shelf .

  2. The easy of doing change on the workflow and business entities.

  3. Quality Engineers would focus on testing the business requirements only, and this surly will minimize the number of test cases for each product.

  4. Shorter time to deliver a project, this known as Time to market (TTM) so more chances to defeat competitor and gain extra market share in an industry.

  5. Minimize the total cost of ownership (TCO) which will increase the profit and add more pricing flexibility.

To get started; check out the following links which contains examples for applying MDE:

  1. http://www.modelingsoft.com/PRODUCTS/SculptureToolkit.aspx

  2. http://www.andromda.org/docs/index.html