Aspects of Software Development
- Current Business Environment and Drivers
- The On Demand Business: As businesses are expected to be more adaptable and flexible, so too are the IT systems that enable them.
- Business Relevance:
- There is a strong focus on IT departments to deliver business value.
- Software must be business relevant.
- Miscommunication between business and IT people can lead to projects that, successful from an IT-delivery viewpoint, are deemed business failures.
- Cost Control:
- The days of IT being invested in on the strength of its promises are long gone.
- IT departments now operate under strong budget constraints and are expected to demonstrate value for money.
- Increasing Complexity:
- Software systems continue to increase in scale and complexity to meet business needs.
- Techniques that work well for small-scale development do not necessarily scale to enterprise-wide initiatives.
- Skills Availability:
- The sophistication of today’s IT platforms means that specialists’ knowledge is required to deliver software.
- Many organizations struggle to find sufficient skilled professionals to support their development.
- In addition, projects often depend on key individuals and suffer significantly if those individuals leave a project or organization.
- Changing Middle-ware Environment:
- Today’s applications are deployed to a huge variety of middleware platforms, and the rate of change in platform technology is showing no sign of slowing up.
- Businesses want to take advantage of advances in middleware but do not want to repeatedly rewrite their applications.
- A Model-Driven Approach to Software Development
- Model-driven development is a style of software development where the primary software artifacts are models from which code and other artifacts are generated.
- A model is a description of a system from a particular perspective, omitting irrelevant detail so that the characteristics of interest are seen more clearly.
- Software models are typically expressed in the Unified Modeling Language (UML).
- UML is a language for specifying, visualizing, and documenting software systems.
- UML provides a visual notation and underlying semantics for software models.
- UML also has a standard machine-readable serialization format, thereby enabling automation.
- Software models hide technical implementation details so that a system can be designed using concepts from the application domain.
- Model-Driven Development of Complex Software
- Despite significant advances in programming languages and supporting integrated development environments (IDEs), developing these complex software systems using current code-centric technologies requires herculean effort.
- A significant factor behind the difficulty of developing complex software is the wide conceptual gap between the problem and the implementation domains of discourse.
- Bridging the gap using approaches that require extensive handcrafting of implementations gives rise to accidental complexities that make the development of complex software difficult and costly.
- The term Model-Driven Engineering (MDE) is typically used to describe software development approaches in which abstract models of software systems are created and systematically transformed to concrete implementations.
- Advances in hardware and network technologies have paved the way for the development of increasingly pervasive software-based systems of systems that collaborate to provide essential services to society. Software in these systems is often required to:
- (1) Operate in distributed and embedded computing environments consisting of diverse devices (personal computers, specialized sensors and actuators),
- (2) Communicate using a variety of interaction paradigms (e.g., SOAP messaging, media streaming),
- (3) Dynamically adapt to changes in operating environments
- (4) Behave in a dependable manner
- Model Driven Engineering (MDE) primarily concerns with reducing the gap between problem and software implementation domains through the use of technologies that support systematic transformation of problem-level abstractions to software implementations.
- The complexity of bridging the gap is tackled through the use of models that describe complex systems at multiple levels of abstraction and from a variety of perspectives, and through automated support for transforming and analyzing models.
- A problem-implementation gap exists when a developer implements software solutions to problems using abstractions that are at a lower level than those used to express the problem.