1 |
[pt] INVESTIGANDO O RELACIONAMENTO ENTRE DEPENDÊNCIA DE CARACTERÍSTICAS E PROPAGAÇÃO DE MUDANÇAS / [en] ON THE RELATIONSHIP BETWEEN FEATURE DEPENDENCIES AND CHANGE PROPAGATIONBRUNO BARBIERI DE PONTES CAFEO 21 July 2016 (has links)
[pt] Características são abstrações-chave para o desenvolvimento e
manutenção de linhas de produto de software. Um desafio encarado na
manutenção de linhas de produto de software é o entendimento das
dependências que existem entre características. No código-fonte, uma
dependência entre características ocorre sempre que um elemento de programa
dentro dos limites de implementação de uma característica depende de
elementos externos a esta característica. Exemplos são atributos ou métodos
definidos na implementação de uma característica, mas utilizados no código
responsável pela implementação de outra característica. A medida que
desenvolvedores modificam o código-fonte associado com uma característica,
eles devem garantir que outras características são consistentemente atualizadas
com as novas mudanças – as chamadas propagações de mudanças. No
entanto, a apropriada propagação de mudanças não é uma tarefa trivial,
pois características geralmente não são modularizadas no código-fonte.
Dessa forma, dado uma mudança em uma determinada característica, é
desafiador revelar quais (partes de) outras características também devem
ser alteradas. Propagação de mudanças se torna, portanto, um aspecto
central e não-trivial da manutenção de linhas de produto de software.
Desenvolvedores podem negligenciar partes importantes de código que
deveriam ser revisadas ou alteradas, portanto não propagando mudanças
de forma completa. Por outro lado, desenvolvedores também podem analisar
de forma desnecessária partes de código que não são relevantes para a
tarefa de manutenção de características, portanto aumentando o esforço de
manutenção ou até propagando mudanças de forma indevida. A criação de
um bom modelo mental da estrutura das dependências de características se
torna essencial para ganhar compreensão sobre o complexo relacionamento de
características com o objetivo de propagar mudanças de forma apropriada.
Infelizmente, não existe entendimento no estado-da-arte sobre propriedades
estruturais de dependências de características que afetam a propagação
de mudanças. Este entendimento ainda não é possível, pois: (i) não existe
meios de caracterização e quantificação para propriedades estruturais de
dependências de características, e (ii) não existem investigações empíricas
sobre a influência dessas propriedades na propagação de mudanças. Nesse
contexto, esta tese apresenta três contribuições para superar os problemas
acima mencionados. Primeiro, foi desenvolvido um estudo para entender a
propagação de mudanças na presença de dependência de características em
várias linhas de produto industriais. Segundo, é proposto um arcabouço
de medidas com o propósito de quantificar propriedades estruturais de
dependências de características. Nesse contexto, também foi desenvolvido
um estudo revelando que métricas convencionais tipicamente aplicadas em
trabalhos de linha de produto, tais como a métrica de acoplamento, não
são indicadores efetivos da propagação de mudanças em linhas de produto
de software. As métricas propostas nesta tese superaram consistentemente
as métricas convencionais estudadas. Terceiro, esta tese propõe um método
para auxiliar a propagação de mudanças encarando informações sobre a
organização de dependência de características encarando-as como um problema
de agrupamento. Foi avaliado se a organização de informações proposta nesta
tese tem potencial para auxiliar desenvolvedores a propagar mudanças em
linhas de produto de software. / [en] Features are the key abstraction to develop and maintain software
product lines. A challenge faced in the maintenance of product lines is the
understanding of the dependencies that exist between features. In the source
code, a feature dependency occurs whenever program elements within the
boundaries of a feature s implementation depend on elements external to that
feature. Examples are either attributes or methods defined in the realisation
of a feature, but used in the code realising other features. As developers
modify the source code associated with a feature, they must ensure that other
features are consistently updated with the new changes – the so-called change
propagation. However, appropriate change propagation is far from being trivial
as features are often not modularised in the source code. In this way, given a
change in a certain feature, it is challenging to reveal which (part of) other
features should also change. Change propagation becomes, therefore, a central
and non-trivial aspect of software product-line maintenance. Developers may
overlook important parts of the code that should be revised or changed, thus
not fully propagating changes. Conversely, they may also unnecessarily analyse
parts that are not relevant to the feature-maintenance task at hand, thereby
increasing the maintenance effort or even mis-propagating changes. The
creation of a good mental model based on the structure of feature dependencies
becomes essential for gaining insight into the intricate relationship between
features in order to properly propagate changes. Unfortunately, there is no
understanding in the state of the art about structural properties of feature
dependencies that affect change propagation. This understanding is not yet
possible as: (i) there is no conceptual characterisation and quantification means
for structural properties of feature dependency, and (ii) there is no empirical
investigation on the influence of these properties on change propagation.
In this context, this thesis presents three contributions to overcome the
aforementioned problems. First, we develop a study to understand change
propagation in presence of feature dependencies in several industry-strength
product lines. Second, we propose a measurement framework intended to
quantify structural properties of feature dependencies. We also develop a
study revealing that conventional metrics typically used in previous research,
such as coupling metrics, are not effective indicators of change propagation
in software product lines. Our proposed metrics consistently outperformed
conventional metrics. Third, we also propose a method to support change
propagation by facing the organisation of feature dependency information as
a clustering problem. We evaluate if our proposed organisation has potential
to help developers to propagate changes in software product lines.
|
Page generated in 0.0392 seconds