Many authors consider that product family development, instead of one-off
development, is a decisive step towards the systematic software reuse and
economy of scope. We are aligned with this movement and propose a new process to
build software product lines, named EDD (Exemplar Driven Development), which
takes advantage of the similarity between family products to make them by
The first EDD activity is to build a specific product of a family. Next, this
exemplar is flexibilized to satisfy the remaining products requirements. That
is, an analogy relation is defined in a formal way to derive products
automatically from the exemplar. Finally, the family products are obtained
parametrizing the exemplar flexibilization.
Among EDD contributions should be mentioned the following:
- Facing the development and maintenance of a product family with an iterative
strategy. An exemplar which satisfies the family fixed requirements is built as
soon as possible. Flexibilization layers, which implement family variable
requirements, are added to the exemplar in successive development cycles.
- Family fixed requirements are usually more stable than variable requirements.
EDD separates the fixed requirements implementation (located in the exemplar)
from the variable requirements implementation (located in the modules which make
the exemplar flexible).
- Building a product family is usually decided when repetitive work is detected
in the development of specific products in the same domain or when business
opportunities are expected if a successful product is extended. EDD recognizes
this situation and tries to take advantage of it by reusing the exemplar
We are exploring different ways to flexibilize an exemplar by applying the most
common techniques of code generalization (inheritance, genericity, code
templates…). Unfortunately, we have found that these techniques suffer
limitations which hinder flexibilizations with important qualities like
modularity, non-invasiveness, applicability to any software product… In order to
avoid these limitations, the thesis proposes a new language called EFL (Exemplar
Flexibilization Language) which is implemented as a Ruby library.
At the moment, to demonstrate the capacities of EDD and EFL we have developed:
1. Several examples taken from the generative programming literature (see
chapters 4, 5 and 6 of ), including:
a. A tool that interprets documentation embedded in SQL and turns it into
external documentation in HTML (example proposed in the chapter 6 of ).
b. A generator that receives abstract definitions for file formats and
produces Java libraries to read the files (example proposed in the chapter 9
c. The “trash recycler” problem proposed in .
d.The “dictionary” example proposed in the chapter 1 of .
2.A generative model that produces stored procedures in Transact SQL to load a
Data Wharehouse (see section 6.3 in ).
3.The m2unit tool that generates Modula-2 test cases from embedded code (see
section 6.4 in ).
4.A Data Acquisition SPL for the Astrophysics Institute of the Canary
5.A generative model that produces, from abstract specifications, change
notifications written in PL/SQL for Oracle databases .
The theoretical basis of EDD and EFL, and a wide variety of examples can be
 Heradio Gil, R. Metodología de desarrollo de software basada en el paradigma
generativo. Realización mediante la transformación de ejemplares. Ph. D.
Thesis, Departamento de Ingeniería de Software y Sistemas Informáticos de la
UNED, España, April 2004
 Herrington, J. Code Generation in Action. Manning, 2003.
 Eckel, B. Thinking in Patterns. Revision 0.9, 5-20-2003.
 Cleaveland, J. C. Program Generators with XML and Java. Prentice Hall, 2001.
 López Ruiz, J. C. Análisis de la metodología "Exemplar Driven Development"
y de la herramienta de transformaciones "Exemplar Flexibilization Language".
Construcción de una línea de productos para sistemas de adquisición de datos en
astronomía. Oct. 2007.
 Coz Fernández, J. R. Adaptación de EDD para incrementar la productividad del
desarrollo en PL/SQL en un escenario de notificación de cambios en bases de
datos. Oct. 2007.