Enterprise business application product line as a model driven software factory Vinay Kulkarni Tata Research Development and Design Centre, Pune, INDIA +91 20 56086301 vinay.vkulkarni@tcs.com Sreedhar Reddy Tata Research Development and Design Centre, Pune, INDIA +91 20 56086302 sreedhar.reddy@tcs.com ABSTRACT Enterprise business applications are critical to the smooth operation of modern businesses. They need to perform and scale up to the ever-increasing demands of modern businesses on IT, and are implemented using distributed architectures. These applications tend to have a long life during which they need to quickly respond to changing business rules, business processes and technology platforms. No two businesses are exactly alike even in the same business domain. This calls for an enterprise business application to be specialized for the needs of a specific business. Product line architectures that organize systems into well-defined core and variable parts have been proposed to address this need. Traditional code based development approaches do not provide the right kind of abstractions to support product lines. We propose a model driven development approach that enables a system to be specified in terms of composable units along the required dimensions of variations of a product line. Such a platform-independent specification can be retargeted to technology platforms of choice using model-based code generators. We propose a software factory for an enterprise business application product line wherein a set of purpose-specific tools generated from their specifications support a purpose- specific development process. We describe our experience in building and using such a software factory. Categories and Subject Descriptors D.2 [Software Engineering]: D 2.9 Management, D 2.10 Design and D 2.13 Reusable software. General Terms Management, Design, Languages. Keywords Software factories, product lines, model driven development, separation of concerns, aspect oriented programming 1. INTRODUCTION Modern businesses rely on enterprise business applications for their existence and smooth operation. During their lifetime, enterprise business applications need to quickly respond to changes in business rules, business processes and technology platforms. To have a better handle on scale-up and performance issues, modern enterprise applications are typically implemented as distributed systems. Faced with the task of developing large and complex applications, industrial practice uses a combination of non-formal notations and methods for implementation. Different notations are used to specify the properties of different aspects of an application and these specifications are transformed into their corresponding implementations through the steps of a development process. The development process relies heavily on manual verification to ensure the different pieces integrate into a consistent whole. This is an expensive and error-prone process demanding large teams with broad-ranging expertise in business domain, architecture and technology platforms such as presentation managers, programming languages, databases, middleware etc. Model-driven development approach addresses this problem by providing a set of modeling notations for specifying different layers of a system namely user interface, application functionality and database in a platform independent manner [8]. A set of code generators then transforms these models into platform-specific implementations. Models, being at a higher level of abstraction, are easier to understand and verify for properties of interest. Model based code generation incorporating proven design and architectural patterns results in significant gains in productivity and uniformly high quality. This approach can be used to retarget product lines to multiple technology platforms. No two businesses are exactly alike even in the same business domain. This calls for an enterprise business application to be specialized for the needs of a specific business. Product line architectures that organize systems into well-defined core and variable parts have been proposed to address this need the central idea being products within a product-line are differentiated by features [5, 2]. Producing a specific product variant can be seen as a stepwise refinement process wherein a common abstract model is refined to inject product-specific factors [1]. Feature commonalities can be captured as reusable patterns from which specific variants can be instantiated through suitable Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Conference’04, Month 1–2, 2004, City, State, Country. Copyright 2004 ACM 1-58113-000-0/00/0004…$5.00.