Author(s):
Bragança, Alexandre Manuel Tavares
Date: 2008
Persistent ID: http://hdl.handle.net/1822/8137
Origin: RepositóriUM - Universidade do Minho
Description
Tese de Doutoramento em Sistemas de Informação - Engenharia de Programação e dos Sistemas Informáticos Two recent approaches in software engineering are capturing the attention of the academic
community as well as the industry: model driven engineering and software product lines. The
software product line approach to software development is being put into practice from several
years and the results seen very promising. However, the resources required to implement this
approach are very significant and, as such, a wide adoption of the software product line approach is
still not a reality. This is in some sort a result of the heavy methods that such an approach requires.
These methods usually require the use of high level abstractions to capture domain knowledge
which is commonly represented using models. These abstractions are usually far from the
abstractions used to implement the software solutions. Also, the processes are more complex than
the ones commonly used for developing single software systems, since they imply a domain
engineering approach to develop reusable assets as well as an application engineering approach to
develop final applications in the domain.
Model driven engineering approaches promise to promote the use of models as assets of
development to the same level as code. Models should be treated as first class entities in software
development, similarly to what happens with code. To achieve this goal, some technologies have
been proposed, such as, metamodeling frameworks and model transformation languages. These
technologies have the potential to support the automation of many software development tasks of
heavy methods, particularly those that rely significantly on modeling activities and that use models
as a source for producing software. This is the case for the majority of the software product line
development methods.
This thesis is about supporting the development of software product lines by adopting a model
driven engineering approach. For that, we start by analyzing major domain engineering and product
line methods. We identify and discuss fundamental concepts for product line development.
Resulting from that, a set of common and crucial activities for software product line development
are identified and contextualized in a variant of software product line development that we call
domain-specific platform approach. This thesis presents methodological approaches and techniques
to support the referred activities using several kinds of models and a model driven engineering
approach. We particularly show how concepts, such as commonality and variability, can be
modeled at different levels of abstraction during the development activities. We present approaches
on how to relate concepts that are present at different levels of abstraction or from different
perspectives of the system. The approaches presented in this thesis are essentially focused on
computation independent models since these are the kind of models that have less support at the
moment. This results from their nature of being computation independent and, therefore, more
difficult to relate to the computation concepts that are used in models that support the
implementation of the software system being developed. Consequently, the proposals presented in
this thesis are essentially related to the following kinds of models: use cases; feature; entity;
activity; component; and class.
This thesis contributes to the foundations of the novel model driven approach to software
product line development. The approaches presented in this thesis, when applied, enable the
automation of previously manual based tasks, such as: feature modeling; the creation of the first
logical architecture of a software product line; and multi-stage domain specific modeling.
The approaches presented in this thesis are illustrated through demonstration cases. These
demonstration cases reflect experimentations of our approaches using problems described on other
publications in the field or result from our own experience in applying the approaches in the
context of projects developed at a software development company. We also discuss how the
methodological approaches and techniques can be realized by using metamodeling frameworks and
model transformation languages, particularly EMF and QVT. Duas recentes aproximações no campo da engenharia de software estão a capturar a atenção da
comunidade académica e da indústria: a engenharia de software baseada em modelos e as linhas de
produtos de software. O modelo de desenvolvimento de software baseado em linhas de produtos é
já adoptado na indústria há alguns anos e os resultados são bastante prometedores. No entanto, os
recursos necessários para a implementação deste modelo de desenvolvimento de software são
bastante significativos e, portanto, a adopção em larga escala desta abordagem ainda não é uma
realidade. Isto resulta, certamente, dos métodos pesados que são necessários para essa abordagem.
Estes métodos normalmente requerem o uso de abstracções de alto nível que permitem capturar
conhecimento do domínio que é, vulgarmente, representado através de modelos. Estas abstrações
encontram-se muitas vezes bastante distantes das abstrações usadas nas implementações das
soluções de software. Para além disso, os processos são mais complexos que os vulgarmente
usados no desenvolvimento de sistemas de software singulares (por oposição a linhas de produtos),
uma vez que estes implicam dois sub-processos: engenharia de domínio para desenvolver
artefactos reutlizáveis e engenharia de aplicações para desenvolver as aplicações finais do
domínio.
A engenhria de software baseada em modelos promete promover a utilização de modelos como
artefactos de desenvolvimento em igualdade com o código. Os modelos passam a ser tratados como
entidades de primeira classe no desenvolvimento de software, à semelhança do código. Para se
atingir este objectivo foram propostas algumas tecnologias, tais como, ferramentas de
meta-modelação e linguagens de transformação de modelos. Estas tecnologias têm características
que potenciam a automação de muitas tarefas de desenvolvimento de software usadas em métodos
mais pesados, particularmente aqueles que dependem signifcativamente de actividades de
modelação e que usam modelos como fonte para a produção de software. Este é o caso da maioria
dos métodos de desenvolvimento de linhas de produtos de software.
O tema desta tese é o desenvolvimento de linhas de produtos de software através da adopção
de uma aproximação baseada em modelos (model driven). Nesse contexto, começa-se por analisar
diversos métodos relevantes de engenharia de domínio e desenvolvimento de linhas de produtos de
software. Identificam-se e analisam-se conceitos fundamentais para o desenvolvimento de linha de
produtos de software. Em resultado dessa análise, um conjunto de actividades comuns e cruciais
para o desenvolvimento de linhas de produtos de software são identificadas e contextualizadas
numa especialização do processo típico de desenvolvimento de linhas de produtos de software que
designamos por aproximação ao desenvolvimento de linhas de produtos de software baseada em
plataformas especificas de domínio. Esta tese apresenta aproximações metodológicas e técnicas
para suportar as referidas actividades usando diversos tipos de modelos e uma proposta para a
engenharia de linhas de produtos de software baseada em modelos. Em particular, mostra-se como
conceitos, tais como as características comuns ou variáveis dos sistemas, podem ser modeladas em
diferentes níveis de abstração e em diferentes perspectivas nas diversas actividades de
desenvolvimento de software. As propostas apresentadas nesta tese são essencialmente focalizadas
em modelos independentes da computação, uma vez que este tipo de modelos são os menos
suportados actualmente pelos métodos de desenvolvimento de software. Isto resulta da sua
natureza, ou seja, de representarem conceitos que não são directamente suportados pelos sistemas
computacionais actuais e, como tal, é mais difícil relacionar estes conceitos com os conceitos
usados na implementação das soluções de software. Em consequência, as propostas apresentadas
nesta tese estão essencialmente relacionadas com os seguintes tipos de modelos: diagramas de casos de utilização; diagramas de características; diagrams de entidades; diagramas de actividades;
diagramas de componentes e diagramas de classes.
Esta tese contribui para as bases de uma nova aproximação ao desenvolvimento de linhas de
produtos de software baseada em modelos. As propostas apresentadas nesta tese, quando aplicadas,
permitem a automação de tarefas de desenvolvimento de linhas de produtos de software que são, no
presente, fundamentalmente manuais, tais como: a modelação de características de linhas de
produtos; a criação de arquitecturas lógicas de linhas de produtos; a modelação especifica de
domínio em multíplas etapas ou sítios.
As propostas apresentadas nesta tese são ilustradas através de casos de estudo. Estes casos de
estudo refletem os resultados de experiências na implementação das referidas propostas usando
problemas descritos noutras publicações do mesmo campo científico ou resultam da própria
experiência do autor deste documento na aplicação das propostas no contexto de projectos
desenvolvidos numa empresa de desenvolvimento de soluções informáticas. Esta tese também descreve como as metodologias e técnicas propostas podem ser implementadas através de ferramentas de meta-modelação e linguagens de transformação de modelos tais como o EMF e o QVT.