Leandro Marques do Nascimento

Transcrição

Leandro Marques do Nascimento
Pós-Graduação em Ciência da Computação
Core Assets Development in Software Product
Lines - Towards a Practical Approach for the
Mobile Game Domain
by
Leandro Marques do Nascimento
M.Sc. Dissertation
Universidade Federal de Pernambuco
[email protected]
www.cin.ufpe.br/~posgraduacao
RECIFE, AUGUST/2008
UNIVERSIDADE FEDERAL DE PERNAMBUCO CENTRO DE INFORMÁTICA PÓS‐GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO LEANDRO MARQUES DO NASCIMENTO “CORE ASSETS DEVELOPMENT IN SOFTWARE PRODUCT LINES ‐ TOWARDS A PRACTICAL APPROACH FOR THE MOBILE GAME DOMAIN" ESTE TRABALHO FOI APRESENTADO À PÓSGRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO DO
CENTRO DE INFORMÁTICA DA UNIVERSIDADE
FEDERAL DE PERNAMBUCO COMO REQUISITO
FINAL PARA OBTENÇÃO DO TÍTULO DE MESTRE EM
CIÊNCIA DA COMPUTAÇÃO.
ORIENTADOR: SILVIO ROMERO DE LEMOS MEIRA
CO-ORIENTADOR: EDUARDO SANTANA DE ALMEIDA
RECIFE, AGOSTO/2008
Nascimento, Leandro Marques do
Cores assets development in software product
lines - towards a practical approach for the mobile
game domain / Leandro Marques do Nascimento. –
Recife: O Autor, 2008.
xiii, 128 folhas : il., fig.
Dissertação (mestrado) – Universidade Federal
de Pernambuco. CIn. Ciência da Computação, 2008.
Inclui bibliografia e glossário.
1. Ciência da computação.
software. I. Título.
004
CDD (22.ed.)
2. Engenharia de
MEI2008-096
“The journey of a thousand miles begins with a single step.”
Lao Tzu
A
cknowledgements
One of the most encouraging phrases I have listened from Silvio Meira says:
“Nothing beats hard work”. This phrase translates all my feeling at the right
moment I finished this work and I may have no words to describe my gratitude
to all the people that helped me during this journey. Unfortunately, someone
may be forgotten and, for those not listed here, I humbly ask for their apologies
and understanding that it was not caused intentionally, but due to tricks played
by memory.
Initially, I would like to warmly thank my family, specially my parents
and my lovely fiancée. Without their caress, attention and incentive, I would not
have reached this point.
Additionally, I would like to thank my friend and co-advisor Eduardo
Almeida for helping me out with all my questions and guiding me through this
work. He, in agreement with Silvio Meira, was the one who most encouraged me
to apply for the M.Sc. program at Federal University of Pernambuco.
Next, I would not forget to thank all the members of the Reuse in
Software Engineering (RiSE) group. From the beginning until the very ending of
this work, they have been very supportive, sharing their knowledge and
fomenting discussions that helped me a lot with all the content of this
dissertation.
This work was partially funded by Recife Center for Advanced Studies
and Systems – C.E.S.A.R, which offered me a great environment to work, learn
and practice my knowledge in software reuse area. Besides, this work has been
possible thanks to Meantime Mobile Creations, which provided me all the
artifacts used in the experimental study performed in this dissertation. Special
iv
thanks to Tarcísio Câmara, from Meantime Mobile Creations, who gave me
precious information about mobile games development in practice.
My personal gratitude to all the fellows at C.E.S.A.R, especially the
Motorola iDEN team. Working with them is an enjoyable everyday activity.
Moreover, I would like to thank some key researchers in the software
reuse area, Bill Frakes, Dirk Muthig and Jan Bosch, for spending a bit of their
time in Brazil to take a look at my work and contribute with valuable feedback.
During my final presentation of this work, I received valuable feedback
from the reviewers André Santos and Uirá Kulesza, and from my advisor Silvio
Meira. Thank you all for dedicating your attention to review this work and
providing great comments with interesting discussions.
Thanks to the old school friends for being so present and providing me
moments of joy and happiness. These moments have been so important to
renew my disposition to keep working. My parties, summers, jokes and talks
would not have been so funny without them.
And last but not least, I want to thank God for giving me strength and
illuminating my entire path to the end of this dissertation.
Leandro Marques do Nascimento
Recife, Pernambuco, Brazil
August 25, 2008
A
bstract
The most aimed objectives in software engineering are basically high
productivity, with high quality at low costs and one possible way for achieving
these objectives is establishing software reuse – the process of creating software
systems from existing software rather than building them from scratch. In this
context, one approach that can enable software reuse in practice is Software
Product Line (SPL) – a set of software-intensive systems sharing a common,
managed set of features that are developed from a common set of reusable core
assets in a prescribed way. A particular domain where the adoption of such
approach may bring relevant benefits is the mobile game domain mainly
because the games need to run in a big diversity of handsets and there is a big
number of games of the same type being developed with common features.
However, the characteristics of the mobile game domain usually create
barriers to apply SPL processes in practice, such as, restrictions of memory and
application size and different API implementations by different manufacturers.
In addition, the current SPL processes still lack of details on the phases related
to core assets implementation, making it difficult to properly handle the
mentioned characteristics of the domain in question.
Thus, this work aims at defining a practical approach for implementing
core assets in a SPL applied to the mobile game domain based on the good
practices from the state-of-the-art in the area. Moreover, in order to evaluate
the approach, an experimental study is performed using three platform-based
mobile games to build a SPL and, finally, a fourth game is derived from the SPL.
Keywords: software reuse, software product line, core assets
implementation, mobile game, experimental study.
R
esumo
Os mais almejados objetivos da engenharia de software são basicamente alta
produtividade, com alta qualidade a um baixo custo e uma possível forma de
atingi-los é estabelecer reuso de software – o processo de criar sistemas de software a partir de sistemas existentes ao invés de criar do início. Neste contexto,
uma abordagem que pode habilitar reuso na prática é Linha de Produto de Software (LPS) – um conjunto de sistemas de software que compartilham um conjunto comum e gerenciado de funcionalidades que satisfazem uma necessidade
específica de um domínio, e que são desenvolvidas a partir de um conjunto de
artefatos reusáveis. Um domínio em particular onde a adoção de tal abordagem
pode trazer benefícios é o domínio de jogos móveis principalmente porque os jogos precisam executar em diversos dispositivos e existe uma grande quantidade
de jogos do mesmo tipo sendo desenvolvidos com funcionalidades em comum.
Entretanto, as características do domínio de jogos móveis geralmente
criam barreiras para os processos de LPS na prática, tais como, restrições de
memória e de tamanho da aplicação e diferentes implementações de API feitas
por diferentes fabricantes. Além disso, os atuais processos de LPS ainda carecem de detalhes em fases relacionadas à implementação de artefatos reusáveis,
dificultando a administração apropriada das características mencionadas.
Dessa forma, este trabalho objetiva definir uma abordagem prática para
implementação de artefatos reusáveis em uma LPS para o domínio de jogos móveis com base nas boas práticas do estado da arte na área. Além disso, com a intenção de avaliar a abordagem, um estudo experimental foi executado com três
jogos de plataforma para construir a LPS e um quarto jogo foi derivado dela.
Palavras-chave: reuso de software, linha de produto de software,
implementação de artefatos reusáveis, jogos móveis, estudo experimental.
T
able of Contents
ACKNOWLEDGEMENTS ............................................................... III
RESUMO ......................................................................................... V
ABSTRACT .....................................................................................VI
TABLE OF CONTENTS .................................................................. VII
LIST OF FIGURES............................................................................X
LIST OF TABLES............................................................................ XI
LIST OF ACRONYMS .................................................................... XII
1. INTRODUCTION ..........................................................................1
1.1.
1.2.
1.3.
1.4.
1.5.
MOTIVATION ..............................................................................................3
PROBLEM STATEMENT................................................................................. 5
OVERVIEW OF THE PROPOSED SOLUTION .....................................................6
OUT OF SCOPE ............................................................................................ 7
ORGANIZATION OF THE DISSERTATION ........................................................8
2. SOFTWARE PRODUCT LINE CONCEPTS .................................... 9
2.1. SOFTWARE REUSE ..................................................................................... 10
2.2. SOFTWARE PRODUCT LINES (SPLS)........................................................... 12
2.2.1. What Software Product Lines are not............................................ 14
2.2.1.1. Fortuitous Small-Grained Reuse........................................... 14
2.2.1.2. Single System Development with Reuse ............................... 14
2.2.1.3. Just Component-Based Development................................... 15
2.2.1.4. Just a Reconfigurable Architecture ....................................... 15
2.2.1.5. Releases and Versions of Single Products............................. 15
2.2.1.6. Just a Set of Technical Standards.......................................... 16
2.3. BENEFITS OF SOFTWARE PRODUCT LINES .................................................. 16
2.3.1. Enhancement of Quality ................................................................ 16
2.3.2. Reduction of Maintenance Effort .................................................. 16
2.3.3. Reduction of Development Costs................................................... 17
2.3.4. Reduction of Time to Market......................................................... 17
2.3.5. Improving Cost Estimation............................................................ 18
2.3.6. Benefits for the Customers............................................................. 18
2.4. MATURITY AND EVOLUTION IN SOFTWARE PRODUCT LINES ........................ 19
viii
2.5. SUCCESSFUL CASES IN SOFTWARE PRODUCT LINES .................................... 21
2.5.1. Philips.............................................................................................22
2.5.2. Hewlett-Packard (HP) ...................................................................23
2.5.3. Boeing.............................................................................................24
2.5.4. Nokia ..............................................................................................24
2.6. CHAPTER SUMMARY ..................................................................................26
3. SOFTWARE PRODUCT LINE PROCESSES: A SURVEY...............27
3.1. COMPONENT-BASED DEVELOPMENT (CBD)...............................................28
3.1.1. Catalysis .........................................................................................28
3.1.2. UML Components..........................................................................29
3.2. DOMAIN ENGINEERING PROCESSES ........................................................... 31
3.3. SOFTWARE PRODUCT LINE PROCESSES ......................................................34
3.3.1. GenVoca and Object-Oriented Product Lines and Frameworks...35
3.3.2. Product Line Software Engineering (PuLSETM) ............................ 37
3.3.3. Family-Oriented Abstraction, Specification and Translation
(FAST) ............................................................................................39
3.3.4. The KobrA Approach .................................................................... 40
3.3.5. Component-Oriented Platform Architecting Method (CoPAM)...42
3.3.6. Software Product Lines by SEI ......................................................43
3.3.7. FORM’s Extension .........................................................................44
3.3.8. Product Line UML-Based Software Engineering (PLUS) ..............45
3.3.9. Software Product Line Engineering (SPLE) Framework ..............46
3.4. SUMMARY OF THE STUDY........................................................................... 47
3.5. CHAPTER SUMMARY ..................................................................................50
4. CORE ASSETS DEVELOPMENT IN SOFTWARE PRODUCT LINES
- TOWARDS A PRACTICAL APPROACH FOR THE MOBILE GAME
DOMAIN......................................................................................... 51
4.1. INTRODUCTION .........................................................................................52
4.2. CORE ASSETS DEVELOPMENT IN SOFTWARE PRODUCT LINES - TOWARDS A
PRACTICAL APPROACH FOR THE MOBILE GAME DOMAIN ............................54
4.2.1. Component Modeling ....................................................................59
4.2.2. Component Implementation .........................................................63
4.2.3. Component Testing........................................................................78
4.4. CHAPTER SUMMARY .................................................................................. 79
5. AN EXPERIMENTAL STUDY IN THE MOBILE GAME DOMAIN ....
..................................................................................................81
5.1. INTRODUCTION .........................................................................................82
5.2. THE EXPERIMENTAL STUDY ......................................................................84
5.2.1. The Definition ................................................................................84
5.2.1.1. Goal ........................................................................................84
5.2.1.2. Questions ...............................................................................85
5.2.1.3. Metrics ...................................................................................85
5.2.2. The Planning ..................................................................................87
5.2.3. The Project Used in the Study ...................................................... 90
5.2.4. The Instrumentation......................................................................92
5.2.5. The Operation ................................................................................92
5.2.6. The Analysis and Interpretation.................................................. 101
ix
5.2.7. Conclusions .................................................................................. 103
5.2.8. The Lessons Learned ................................................................... 104
5.3. CHAPTER SUMMARY ................................................................................ 105
6. CONCLUSIONS ........................................................................106
6.1.
6.2.
6.3.
6.4.
6.5.
RESEARCH CONTRIBUTIONS .................................................................... 107
RELATED WORK......................................................................................108
FUTURE WORK ....................................................................................... 110
ACADEMIC CONTRIBUTIONS ..................................................................... 111
CONCLUDING REMARKS ...........................................................................113
REFERENCES............................................................................... 114
L
ist of Figures
FIGURE 1.1. THE RISE FRAMEWORK FOR SOFTWARE REUSE. ......................................4
FIGURE 2.1. COSTS FOR DEVELOPING N KINDS OF SYSTEMS AS SINGLE SYSTEMS
COMPARED TO PRODUCT LINE ENGINEERING ....................................................... 17
FIGURE 2.2. TIME TO MARKET WITH AND WITHOUT PRODUCT LINE ENGINEERING. .... 18
FIGURE 2.3. MATURITY LEVELS FOR SOFTWARE PRODUCT LINES ............................... 19
FIGURE 3.1. CREATING INHERITANCE HIERARCHIES BY COMPOSING LAYERS..............36
FIGURE 3.2. REFINEMENTS HIERARCHIES AND FRAMEWORK INSTANCES ................... 37
FIGURE 3.3. PULSETM OVERVIEW...........................................................................38
FIGURE 3.4. KOMPONENT SPECIFICATION AND REALIZATION MODELS ....................... 41
FIGURE 3.5. PRODUCTS, METHODS AND FAMILIES ....................................................42
FIGURE 3.6. THREE ESSENTIAL ACTIVITIES ..............................................................44
FIGURE 3.7. DOMAIN ENGINEERING AND PRODUCT LINE PROCESSES TIMELINE. ........48
FIGURE 4.1. APPROACH OVERVIEW OF SPL DOMAIN IMPLEMENTATION STEP APPLIED
TO THE MOBILE DOMAIN. ................................................................................... 55
FIGURE 4.2. EXAMPLE OF THE DOMAIN ARCHITECTURE FOR THE MOBILE GAME
DOMAIN. ...........................................................................................................58
FIGURE 4.3. EXAMPLE OF INTERNAL COMPONENT DESIGN (STRUCTURAL MODEL) WITH
THE USE OF VARIANT STEREOTYPE. .....................................................................62
FIGURE 4.4. EXAMPLE OF COMPONENT INTERNAL DESIGN WITH ADDITIONAL
INFORMATION OF THE APPLICABLE CONDITIONAL COMPILATION TAGS ..................63
FIGURE 5.1. GQM HIERARCHICAL MODEL (BASILI ET AL., 1994)..............................83
FIGURE 5.2. SCREENSHOTS OF THE GAMES USED FOR THE EXPERIMENTAL STUDY. A)
MONGA. B) AMERICAN DAD – ROGER’S SCAPE. C) ZAAK..................................... 91
FIGURE 5.3. DOMAIN FEATURE MODEL. ...................................................................94
FIGURE 5.4. INTERNAL DESIGN OF THE ENEMY (AI) COMPONENT. ............................ 97
FIGURE 5.5. SMART ESCAPE APPLICATION FEATURE MODEL BASED ON THE DOMAIN
FEATURE MODEL..............................................................................................100
FIGURE 5.6. SMART ESCAPE’S MAIN GAME SCREEN.................................................100
FIGURE 6.1. ABSTRACTION LEVELS IN SOFTWARE PRODUCT LINES APPLIED TO MOBILE
GAME DOMAIN................................................................................................. 109
L
ist of Tables
TABLE 4.1. EXAMPLE OF PRODUCT PORTFOLIO WITH PRIORITIES AMONG FAMILIES OF
HANDSETS .........................................................................................................56
TABLE 4.2. EXAMPLE OF PRODUCT MAP ................................................................. 57
TABLE 4.3. EXAMPLE OF MAPPING OF HANDSET FAMILIES AND THEIR MAIN
CAPABILITIES IN THE PRODUCT MAP ....................................................................58
TABLE 4.4. EXAMPLE OF PRODUCT MAP WITH CONDITIONAL COMPILATION TAGS
ATTACHED ......................................................................................................... 61
TABLE 4.5. EXAMPLE OF MAPPING OF HANDSET FAMILIES, THEIR MAIN CAPABILITIES
AND THE RESPECTIVE CONDITIONAL COMPILATION TAGS ..................................... 61
TABLE 4.6. EXAMPLE
OF
COMPONENT
DOCUMENTATION
AFTER
ITS
IMPLEMENTATION.. ...........................................................................................78
TABLE 4.7. SUMMARY OF THE APPROACH FOR CORE ASSETS DEVELOPMENT IN A SPL
APPLIED TO THE MOBILE GAME DOMAIN ............................................................. 80
TABLE 5.1. PRODUCT PORTFOLIO WITH THREE MANUFACTURERS LISTED.................95
TABLE 5.2. PRODUCT MAP WITH CONDITIONAL COMPILATION TAGS ATTACHED. .......96
TABLE 5.3. GROUPS OF CONDITIONAL COMPILATIONS TAGS FOR THE FOUR
MANUFACTURERS DESCRIBED IN PRODUCT PORTFOLIO ........................................96
TABLE 5.4. BASIC DOMAIN ARCHITECTURE OVERVIEW ..........................................100
TABLE 5.5. COMPONENTS OVERVIEW. .................................................................. 101
TABLE 5.6. COMPONENT COMPLEXITY VALUES ..................................................... 101
TABLE 5.7. DOMAIN RESTRICTIONS MANAGEMENT VALUES ................................... 102
TABLE 5.8. TRACEABILITY VALUES ....................................................................... 103
L
ist of Acronyms
ADL – ARCHITECTURE DESCRIPTION LANGUAGE.....................................................39
AI – ARTIFICIAL INTELLIGENCE .............................................................................. 97
AML – APPLICATION MODELING LANGUAGE .......................................................... 40
AOP – ASPECT-ORIENTED PROGRAMMING ............................................................. 60
API – APPLICATION PROGRAMMING INTERFACE ........................................................ 5
CBD – COMPONENT-BASED DEVELOPMENT .............................................................. 1
CBSE – COMPONENT-BASED SOFTWARE ENGINEERING.............................................6
CDC – CONNECTED DEVICE CONFIGURATION .......................................................... 77
CLDC – CONNECTED LIMITED DEVICE CONFIGURATION..........................................64
COPAM – COMPONENT-ORIENTED PLATFORM ARCHITECTING METHOD .................42
DE – DOMAIN ENGINEERING ....................................................................................9
DLL – DYNAMIC LINK LIBRARIES............................................................................64
DSL – DOMAIN-SPECIFIC LANGUAGE ........................................................................ 1
DSSA – DOMAIN-SPECIFIC SOFTWARE ARCHITECTURE ...........................................38
FAST – FAMILY-ORIENTED ABSTRACTION, SPECIFICATION AND TRANSLATION .........39
FODA – FEATURE ORIENTED DOMAIN ANALYSIS ....................................................32
FORM – FEATURE-ORIENTED REUSE METHOD ...................................................... 31
GQM – GOAL QUESTION METRIC ...........................................................................82
GSM – GLOBAL SYSTEM FOR MOBILE COMMUNICATIONS ...........................................3
HTTP – HYPERTEXT TRANSFER PROTOCOL ..............................................................2
IRS – INERTIAL REFERENCE SYSTEM ...................................................................... 21
JAR – JAVA ARCHIVE .............................................................................................56
JME – JAVA MICRO EDITION....................................................................................3
JSE – JAVA STANDARD EDITION ............................................................................. 77
JSR – JAVA SPECIFICATION REQUEST .....................................................................53
KOBRA – KOMPONENTENBASIERTE ANWENDUNGSENTWICKLUNG .............................. 7
MIDP – MOBILE INFORMATION DEVICE PROFILE ....................................................56
OCL – OBJECT CONSTRAINT LANGUAGE..................................................................30
ODM – ORGANIZATION DOMAIN MODELING........................................................... 31
OFP – OPERATIONAL FLIGHT PROGRAM .................................................................24
OO – OBJECT ORIENTATION ...................................................................................35
OSGI – OPEN SERVICES GATEWAY INITIATIVE .........................................................33
PDA – PERSONAL DIGITAL ASSISTANT ....................................................................64
PLUS –PRODUCT LINE UML-BASED SOFTWARE ENGINEERING ................................45
PULSE – PRODUCT LINE SOFTWARE ENGINEERING ................................................... 7
RIDE – RISE PROCESS FOR DOMAIN ENGINEERING ................................................. 31
RISE – REUSE IN SOFTWARE ENGINEERING ..............................................................4
RSEB - REUSE-DRIVEN SOFTWARE ENGINEERING BUSINESS.................................... 31
xiii
RUP – RATIONAL UNIFIED PROCESS .......................................................................29
SEI – SOFTWARE ENGINEERING INSTITUTE ............................................................. 21
SPL – SOFTWARE PRODUCT LINE .............................................................................. 1
SPLE – SOFTWARE PRODUCT LINE ENGINEERING ...................................................46
UML – UNIFIED MODELING LANGUAGE..................................................................28
USDP – UNIFIED SOFTWARE DEVELOPMENT PROCESS ............................................45
XP – EXTREME PROGRAMMING ..............................................................................54
1
Introduction
“No great discovery was ever made without a bold
guess”
Isaac Newton (1642 – 1726)
English physicist and mathematician
One of the key factors for improving quality, productivity and consequently
reducing costs in software development is the adoption of software reuse – the
process of creating software systems from existing software rather than building
them from scratch (Krueger, 1992). Several research activities have been
performed in the software reuse area (Almeida et al., 2007a) involving different
aspects, such as: different techniques of programming, for example, generative
programming (Czarnecki & Eisenecker, 2000) and Domain-Specific Languages
(DSL) (Greenfield et al., 2004), which can make possible to automate code
generation; Component-Based Development (CBD) methods (Cheesman &
Daniels, 2001), (D'Souza & Wills, 2001), (Szyperski, 2002), which explore the
benefits of reusing software components; and reuse processes, considering a
systematic sequence of activities to enable the development for and with reuse
(Weiss & Lai, 1999), (Bayer et al., 1999), (Atkinson et al., 2000), (Clements &
Northrop, 2001), (Gomaa, 2005), (Pohl et al., 2005), (Almeida, 2007). Besides,
different efforts have been made to apply the concepts of this area in practice
with successful cases (SPL Hall of Fame, 2008), including big companies such
as Hewlett-Packard (HP), Bosch and Nokia.
An approach commonly cited in the software reuse area is Software
Product Line (SPL), which can be defined as “a set of software-intensive
Chapter 1 – Introduction
2
systems that share a common, managed set of features satisfying the specific
needs of a particular market segment or mission and that are developed from
a common set of core assets in a prescribed way” (Clements & Northrop, 2001).
In other words, a SPL allows new applications to be instantiated based on a set
of core assets, developed from the analysis of the commonalities and
variabilities of a specific domain or market segment.
Furthermore, a particular market segment that is in high-growth during
the last years is the mobile applications market, especially the mobile games.
According to iSuppli 1 , the prediction is that the worldwide mobile gaming
market will be worth $6.1 billion in 2010 – up from $1.8 billion in 2005.
However, this market involves much more complex challenges, mainly because
of the variety of handsets and manufacturers, many platform restrictions and
different hardware configurations. For example, a game produced by
Meantime 2 , called My Big Brother, had to be deployed for almost fifty devices
and the game had to support variations across those devices, such as: different
screen sizes, different ways of handling HTTP protocol and different keypad
configurations (Alves et al., 2005a). This scenario demands well defined
software processes to build applications compatible with as many handsets as
possible, considering the variabilities across handset platforms and possible
commonalities among various games in the same domain. Therefore, SPL can
be a suitable option in this case.
Different works have been published in the SPL area describing general
purpose processes applied to different contexts, from avionics (Sharp, 2000) to
consumer electronics (Ommering, 2002). However, considering the lack of
details of those processes in the core assets implementation phase, they can not
address properly the early mentioned restrictions of the mobile game domain.
Thus, the establishment of a SPL approach capable of handling those
restrictions is the main subject of this work. This chapter contextualizes the
focus of this work and starts by presenting its motivation with a clear definition
of the problem.
1
iSuppli Corporation: Applied Market Intelligence, available on http://www.isuppli.com/, accessed in
January, 2008.
2
Meantime Mobile creations, available on http://www.meantime.com.br, accessed in January, 2008.
Chapter 1 – Introduction
3
1.1. Motivation
Software reuse is generally regarded as the most important mechanism for
performing software development more efficiently (Krueger, 1992). The ideas
behind software reuse started to come up in the late 1960s, when McIlroy
(1968), motivated by the software crisis, wrote the so referenced paper on
software reuse entitled “Mass Produced Software Components”. Since that
time, many discussions took place, involving issues ranging from the possibility
of a software industrial revolution (Cox, 1990), in which programmers would
stop coding everything from scratch and begin assembling applications from
well-stocked catalogs of reusable software components, until silver bullets
(Moore, 2001) based on software reuse.
Several works have discussed the benefits of software reuse in terms of
improvements on productivity and software quality, and reduction on costs
(Lim, 1994), (Mili et al., 1995), (Basili et al., 1996), (Sametinger, 1997), (Frakes
& Succi, 2001), (Ezran et al., 2002), (Poulin, 2006). In addition, many
successful industrial cases of software reuse, specifically SPL (SPL Hall of Fame,
2008), involving, for example, Philips, Boeing, Nokia, Hewlett-Packard (HP),
General Motors, can indicate that those benefits are reachable.
On the other hand, one of the greatest motivations for this work is related
to the mobile domain. A picture of the mobile global market in 2008 reveals
that the number of mobile phones is about three billions, according to GSM
World 3 , and it is rapidly growing. This is only considering the GSM technology
and means that almost half the world population may possess a mobile phone.
Among these phones, Sun Microsystems 4 estimates that at least half a billion of
them are Java-enabled. This last data shows that Java Micro Edition (JME)
(Java ME, 2008) is the most ubiquitous platform present in the mobile phones.
Immersed in this huge Java mobile world are the mobile games, which can be
considered the fastest growing “new” games sector, considering the prediction
that mobile gaming will be worth $6.1 billion by the end of this decade. So,
bringing SPL approach into the mobile game domain can improve productivity
3
GSM World - the website of the GSM Association, available on http://www.gsmworld.com/, accessed
in January, 2008.
4
Sun Microsystems, available on http://www.sun.com/, accessed in January, 2008.
Chapter 1 – Introduction
4
and reduce costs in a promising area, possibly drawing attention of academia
and achieving good results in practice.
Besides those motivations, it is important to highlight that this work is
part of the Reuse in Software Engineering (RiSE) project 5 (Almeida et al.,
2004), whose goal is to develop a robust framework for software reuse in order
to enable the adoption of a reuse program. The proposed framework has two
layers, as shows Figure 1.1. The first layer (on the left side) is formed by good
practices related to software reuse. Non-technical aspects, such as education,
training,
incentives,
program
to
introduce
reuse,
and
organizational
management are considered. This layer constitutes a fundamental step before
the introduction of the framework in organizations. The second layer (on the
right side), is formed by important technical aspects related to software reuse,
such as processes, environment, and tools. This work is part of RiSE framework
in the second layer, specifically in the area of Software Reuse Process.
Figure 1.1. The RiSE framework for software reuse.
As can be seen in Figure 1.1, the RiSE project addresses reuse aspects not
included in the scope of this thesis, such as component search (Martins et al.,
2008), component testing (Silva et al., 2008), SPL architecture (Filho et al.,
2008) and SPL cost models (Nobrega et al., 2008), besides other aspects
covered by the project including reuse adoption strategies (Garcia et al., 2008a)
and assessment methods for software reuse capability (Garcia et al., 2008b).
5
The RiSE project in the web, available on http://www.rise.com.br, accessed in May, 2008.
Chapter 1 – Introduction
5
1.2. Problem Statement
As stated by (Ezran et al., 2002), a process can be understood as a collection of
related tasks leading to a product. Another point of view describes simply a
software process as a way of defining specifically who does what, when, and how
(Fayad, 1997). In addition, a process is important to define how an organization
is supposed to perform its activities, and how people work and interact, in order
to ensure efficiency, reproducibility, and homogeneity (Ezran et al., 2002).
Different works discuss the benefits and improvements of using a well-defined
software process (Basili et al., 1995), (McConnell, 1998).
Specifically in the SPL area, different processes have been established in
order to systematically define the set of activities, steps, roles, inputs and
outputs within a SPL and then make possible the practical application of SPL
principles (Chapter 3 provides detailed discussions about those SPL processes).
In general, the SPL process can be divided in two distinct phases: core assets
development (or domain engineering) and product development (or application
engineering). During the first phase, the domain is analyzed taking into
consideration the possible existent applications, a reference architecture (or
domain architecture) is designed with the commonalities and variabilities in
domain, and then the core assets are implemented. In the second phase, the
reference architecture is instantiated and the already developed artifacts are
reused to create new applications. Throughout these two phases, management is
necessary to ensure the correct creation and usage of core assets (Clements &
Northrop, 2001).
Generally observing the relevant works in SPL processes area, it was
noticed that there is still a lack of details in the steps related to core assets
implementation (or domain implementation), such as: how domain features can
be mapped on components and correspondingly on code; how variability can be
managed in code level; which guidelines should be used to apply variability
implementation techniques. The lack of details in domain implementation
phases can make SPL approach unaffordable especially when it is taken into
account the restrictions of mobile game domain, such as memory size,
processing power, different screen sizes and different API implementations.
Chapter 1 – Introduction
6
Because of these characteristics involving the mentioned domain, the adoption
of a SPL should be supported by as many details as possible at code level.
Therefore, the main goal of this work can be stated as:
This work defines a practical approach for implementing core
assets in software product lines applied to the mobile game
domain (Java Micro Edition). Furthermore, it details the steps of
domain implementation, describing a set of activities, inputs,
outputs, guidelines and roles. Moreover, the work is based on the
good practices from the state-of-the-art in the area.
1.3. Overview of the Proposed Solution
The practical approach for implementing core assets in software product lines
applied to the mobile game domain, mentioned in the last section, is based on
the following principles (in Chapter 4, the approach is discussed in details):
•
Component-Based Development. The approach presents the
characteristics of the Component-Based Software Engineering (CBSE)
process model (Pressman, 2005), since reusable assets are used to
develop applications.
•
Iterative and Incremental. The approach is iterative and incremental,
since it is important to divide the effort in iterations and increments in
order to more easily manage the activities.
•
Domain-Specific Driven. The approach proposed by this work is
particularly tailored to be used in the mobile game domain.
Besides these principles, the approach focuses on core assets
implementation and is composed of three phases: component modeling,
component implementation, and component testing. In summary, component
modeling phase specifies the components’ internal design considering the
families of devices; component implementation uses a set of guidelines to
implement the specified components considering scenarios of the mobile game
domain; and, finally, component testing aims at documenting domain test cases
Chapter 1 – Introduction
7
and application-specific test cases, describing some guidelines on how to test
components in the mobile domain.
1.4. Out of Scope
As the proposed approach of this work is part of a broader context, a set of
related aspects will be left out of its scope. The following issues are not directly
addressed by this work:
•
Domain Analysis. In the description of this work, the domain analysis
phase is not considered in details. The good practices from other
processes were taken for this work as they reasonably attend to the need
of documenting and designing domain features. Moreover, there is
another work at RiSE group aiming directly at the issues related to
domain analysis phase (Lisboa et al., 2007).
•
Domain Architecture. For the same reasons of domain analysis, the
domain architecture establishment is not detailed. The good practices
from PuLSE (Bayer et al., 1999) and KobrA (Atkinson et al., 2000)
processes (detailed in Chapter 3) attend the need of defining common
and variable points within the domain architecture.
•
Component Identification. Identifying components in domain
architecture involves many other issues that do not belong to the scope of
this work. There are relevant researches in this area such as: (Kang et al.,
1998), (Almeida, 2007) and (Kim & Chang, 2004). Using techniques for
automatically identifying components in domain architecture can aid
domain architect when there is no domain expert present or the
architecture reaches a high level of complexity.
•
Economics. Business aspects are an important instrument to aid
managers to start a software product line effort, since it can show the
return on investment in a specific domain. Nevertheless, it is not a trivial
issue. There is a specific work at RiSE group addressing economic aspects
of SPLs (Nobrega et al., 2008).
•
Product Derivation. Once the SPL architecture is defined and the core
assets are implemented, the next step is to derive products by reusing this
Chapter 1 – Introduction
8
infrastructure (Pohl et al., 2005). This work does not provide many
details about product derivation steps, mainly because, at this point,
some tools can be used to aid on automatically deploying new products
from the SPL by choosing the domain features, such as FLiP (Calheiros et
al., 2007).
1.5. Organization of the Dissertation
This document is organized as follows.
Chapter 2 presents a comprehensive history of software reuse with its
fundamentals and describes the basic concepts behind software product lines.
Examples of successful cases involving big companies which have adopted
software product lines are also provided.
Chapter 3 reviews nine relevant software product line processes and
mentions seven domain engineering processes, representing the state-of-the-art
in the area. The foundations, elements, and steps of the software product line
processes are also shown, depicting their strong and weak points.
Chapter 4 proposes a practical approach for implementing cores assets in
a software product line applied to the mobile game domain. The approach is
based on the good practices from other processes and on industrial experience,
taking into consideration the restrictions of the mobile domain, such as memory
size, processing power and limited application size.
Chapter 5 describes an experimental study in order to evaluate the
proposed approach. During the execution of the study, three different platformbased mobile games are analyzed and an initial software product line is
established using the proposed approach. In addition, a fourth game is derived
from this SPL.
Chapter 6 is the last chapter in this dissertation. It summarizes the
contributions of this work, presents the related work and shows the directions
for future work.
2
Software Product
Line Concepts
“Your theory is crazy, but it may not be crazy
enough to be true”
Niels Bohr (1885 – 1962)
Nobel Prize in Physics (1922), Danish theoretical physicist
A simple yet meaningful definition of software reuse is given by (Krueger, 1992):
“Software reuse is the process of creating software systems from existing
software rather than building software systems from scratch”. This definition
may seem easy to be implemented in practice, however software reuse has for
some times failed to become a standard software engineering practice (Krueger,
1992). Several approaches have been developed trying to make software reuse
feasible, such as: Component-Based Development (CBD) (D'Souza & Wills,
2001), (Cheesman & Daniels, 2001), (Almeida et al., 2007a), Domain
Engineering (DE) (Jacobson et al., 1997), (Villela, 2000), (Almeida, 2007b) and
Software Product Lines (SPLs) (Bayer et al., 1999), (Weiss & Lai, 1999),
(Clements & Northrop, 2001).
Among the cited approaches, software product lines have received
considerable adoption in the software industry and have proved to be a very
successful approach to intra-organizational software reuse (Bosch, 2002). In
this context, this chapter shows the basic concepts and ideas involved with
software product lines.
Chapter 2 – Software Product Line Concepts
10
In order to cover the basic software product line concepts, we briefly
discuss the concepts of software reuse and software components in Section 2.1.
Next, in Section 2.2, we present the definitions of a SPL and show examples of
what SPLs are not. The benefits of using the SPL approach are commented in
the Section 2.3. To help on understating the evolution path of an organization
which decides to adopt SPL, Section 2.4 describes the possible maturity levels
applied to a SPL, and, in the sequence, Section 2.5 brings four successful cases.
Finally, Section 2.6 presents a summary of this chapter.
2.1. Software Reuse
Software reuse has been a goal in software engineering since 1968 (McIlroy,
1968), when the term software engineering was first coined. McIlroy defended
the idea that software components, usually compared to routines, should be
available in families arranged according to precision, robustness, generality and
performance. These component libraries allow components to be widely
applicable to different machines and users.
Nowadays, the benefits of using software components are widely known
and constructing large systems from small pieces can reduce the development
time and improve the final product quality (Szyperski, 2002).
Many definitions for a software component can be found in the literature.
After almost thirty years of McIlroy’s definition, (Sametinger, 1997) defined:
“Reusable software components are self-contained, clearly identifiable
artifacts that describe and/or perform specific functions and have clear
interfaces, appropriate documentation and a defined reuse status.”
Another definition well accepted by academia is from (Aoyama et al.,
2001, pp. 7): “A software component is a software element that conforms to a
component model and can be independently deployed and composed without
modification according to a component standard”. For Aoyama et al., “A
component model defines specific interaction and composition standards. A
component model implementation is the dedicated set of executable software
elements required to support the execution of components that conform to the
model”. They also define the software component infrastructure as “a set of
interacting software components designed to ensure that a software system or
Chapter 2 – Software Product Line Concepts
11
subsystem constructed using those components and interfaces will satisfy
clearly defined performance specifications”.
One satisfactory definition is presented by (Szyperski, 2002, pp. 41): “A
software component is a unit of composition with contractually specified
interfaces and explicit context dependencies only. A software component can
be deployed independently and is subject to composition by third parties.”
Considering the mentioned definitions, in traditional software reuse, a
library of reusable components is developed. This approach requires the
establishment of a library of reusable components and of an approach for
indexing, locating, and distinguishing among similar components (Prieto-Diaz
& Freeman, 1987). Some problems with this approach include managing the
large number of components that such a reuse library is likely to contain and
distinguishing among similar though not identical components.
The reusable component library is composed by the building blocks used
to construct the new system. Components are considered to be largely atomic
and ideally unchanged when reused, although some adaptations may be
required. Depending on the development approach, the library could contain
functional or object-oriented components (Nascimento et al., 2006).
An example of this traditional reuse is a subroutine library, which
consists of a collection of reusable subroutines in a given application area—for
example, a mathematical subroutine library. Another example is an objectoriented toolkit, which consists of a set of related and reusable classes designed
to provide useful, general-purpose functionality.
Apart from certain specific domains, such as mathematical libraries, the
benefits of the traditional software reuse approach have been limited in general.
With this approach, overall reuse is relatively low, and the emphasis is on code
reuse.
Instead of reusing an individual component, it is much more
advantageous to reuse a whole design or subsystem, consisting of the
components and their interconnections (Gomaa, 2005). This means reuse of the
control structure of the application, including artifacts of requirements,
Chapter 2 – Software Product Line Concepts
12
architecture, code and tests. Thus, the reuse of such artifacts has much greater
potential than component reuse because it is large-grained reuse.
2.2. Software Product Lines (SPLs)
According to (Gomaa, 2005): “The most promising approach for architecture
reuse is to develop a product line architecture, which explicitly captures the
commonality and variability in the family of systems that constitutes the
product line”. Different terms are used to refer to a SPL, such as a software
product family, a family of systems, or an application domain. Parnas referred
to a collection of systems that share common characteristics as a family of
systems (Parnas, 1978). According to Parnas, it is worth considering the
development of a family of systems when there is more to be gained by
analyzing the systems collectively rather than separately — that is, when the
systems have more features in common than features that distinguish them.
Nowadays, a family of systems is referred to as a Software Product Line
(SPL). According to (Clements & Northrop, 2001, pp. 05): “A Software Product
Line is a set of software-intensive systems sharing a common, managed set of
features, that satisfy the specific needs of a particular market segment or
mission and that are developed from a common set of core assets in a
prescribed way”. This definition puts constraints on the way systems in a SPL
are developed, mainly because substantial production economies can be
achieved when the systems in a SPL are developed from a common set of assets
in a prescribed way, in spite of being developed separately from scratch. Then,
these production economies can make SPLs attractive.
Other important contribution about SPLs is described by (Pohl et al.,
2005), which bring up the domain of automobiles to clarify the concepts. They
say that, formerly, goods were handcrafted for individual customers. By and by,
the number of people who could afford to buy various types of products
increased leading to Ford’s invention of the production line in the domain of
automobiles, which enabled production for a mass market much cheaper than
individual product creation. However, the production line reduced the
possibilities for diversification.
Chapter 2 – Software Product Line Concepts
13
Roughly, both types of products, individual and mass produced ones, can
be identified in the software domain as well: they are denoted as individual
software and standard software. Generally, each type of these products has its
drawbacks. Individual software products are rather expensive, while standard
software products lack sufficient diversification.
Once the customers got used to standardized mass products, they started
to want some kind of customization. Not all people want the same kind of car for
any purpose. For example, there are cars used for travelling by a single person,
others for big families. There are some cars that are used by people living in
cities, others mainly in the countryside. Thus, industry was confronted with a
rising demand for individualized products. This was the beginning of mass
customization, which is the large-scale production of goods tailored to
individual customers’ needs (Davis, 1987).
Combined with the concept of mass customization, (Pohl et al., 2005)
introduced the concept of platforms. At the side of the customer, mass
customization means the ability to have an individualized product. At the side of
the organization, mass customization means higher technological investments
which leads to higher prices for the individualized products and/or to lower
profit margins. Both effects are undesirable. Thus many organizations,
especially in the car industry, started to introduce common platforms for their
different types of cars by planning beforehand which parts will be used in
different car types. In this context, a platform is any base of technologies on
which other technologies or processes are built (Pohl et al., 2005).
Combining the concepts of mass customization and common platforms,
allows us to reuse a common base of technology and, at the same time, to bring
out products in close accordance with customers’ wishes. This systematic
combination for the development of software-intensive systems and software
products is what can be called software product line engineering (Pohl et al.,
2005). In this dissertation, the term software product lines will be used, since it
is widely accepted by universities and industry.
Chapter 2 – Software Product Line Concepts
14
2.2.1. What Software Product Lines are not
For better understanding the definitions of software product lines, Clements &
Northrop enumerate some types of software reuse that should not be considered
as SPLs.
2.2.1.1.
Fortuitous Small-Grained Reuse
Past reuse agendas have focused on the reuse of relatively small pieces of code –
that is small-grained reuse. Organizations have built reuse libraries containing
algorithms, modules, objects, or components. Almost anything a software
developer writes goes into the library. Thus, other developers urged to use what
the library provides instead of creating their own versions. Unfortunately, it
often takes longer to locate these small pieces and integrate into the system than
it would take to build them from scratch. Many times, the documentation
involved with these small pieces does not explain how to generalize or adapt it
to other situations.
On the other hand, in a SPL approach, the reuse is planned, enabled, and
enforced – the opposite of opportunistic. All the assets are designed to be reused
and are optimized for use in more than a single system. The reuse in SPLs is
comprehensive and profitable.
2.2.1.2.
Single System Development with Reuse
A common situation in software engineering is when a team starts the
development of a new system and realizes that another system, very similar to
the one on development, had already been released. Then, the team borrows
what is possible from the previous effort, modifies it as necessary, adds
whatever it takes, and fields the new product. It has probably meant economic
advantage in comparison to the previous work, mainly because parts of another
system have been reused. However, this is ad hoc reuse.
There are two major differences between this approach and a software
product line approach: first, software product lines reuse assets that were
designed explicitly for reuse; and second, the product line is treated as a whole,
not as multiple products that are viewed and maintained separately.
Chapter 2 – Software Product Line Concepts
2.2.1.3.
15
Just Component-Based Development
Software product lines rely on a form of component-based development, but
much more is involved. The typical definition of component-based development
involves the selection of components from an in-house library or the
marketplace to build products. Although the products in software product lines
certainly are composed of components, these components are all specified by
the product line architecture. Moreover, the components are assembled in a
prescribed way, which includes exercising built-in variability mechanisms in the
components to put them in use in specific products.
2.2.1.4.
Just a Reconfigurable Architecture
Reference architectures and object-oriented frameworks are designed to be
reused in multiples systems and to be reconfigurable as necessary. A SPL
architecture is designed to support the variation needed by the products in the
product line, thus making it reconfigurable makes sense. But the product line
architecture is just one asset, even though an important one, in the product
line’s asset base.
Some authors also compare frameworks to software product lines
(Pasetti & Pree, 2000). In this specific case, we consider that frameworks can be
compared to SPLs if they explicitly model the commonality and variability
among the products involved.
2.2.1.5.
Releases and Versions of Single Products
Organizations routinely produce releases and versions of products. Each of
these new versions and releases is typically constructed using the architecture,
components, test plans, and other features of the prior releases. Considering
this context, a SPL product is different mainly because: first, it contains multiple
simultaneous products, all of which are going through their own cycles of
releases and versioning system; second, in a single-product context, once a
product is updated, there’s often no looking back, but in product lines an early
version of a product that is still considered to have market potential can easily
be kept as a viable member of the family.
Chapter 2 – Software Product Line Concepts
2.2.1.6.
16
Just a Set of Technical Standards
Many organizations set up technical standards to limit the choices their
software engineers can make regarding the kinds of sources of components to
incorporate the systems and different possible architecture forms, considering
different patterns in literature (Gamma et al., 1995). On the other hand, an
organization that undertakes a SPL effort may have such technical standards, in
which case the components and product line architecture will need to conform
to those standards. However, the standards are simply constraints that are
inputted to the SPL, no more.
2.3. Benefits of Software Product Lines
As we described what software product lines are and what they are not, it is also
important to discuss a little about which are the benefits of applying such
approach. These benefits are shown in the following subsections and involve
technical and non-technical aspects.
2.3.1. Enhancement of Quality
The artifacts in a SPL are reviewed and tested in many products. They have
worked properly in more than one type of product. The extensive quality
assurance across all the products in the SPL implies a significantly higher
chance of detecting faults and correcting them, thereby increasing the quality of
all products (Pohl et al., 2005).
2.3.2. Reduction of Maintenance Effort
Considering that during the establishment of a software product line, the
artifacts are supposed to have higher quality since they are being reused and
tested across different products, we can conclude that less maintenance effort is
spent within these artifacts. Additionally, if an artifact has to be changed
because of an eventual error, the changes can be propagated to all products in
which the artifact is being used. The techniques used in product line engineering
make a system better maintainable as stated in (Coplien, 1998).
Chapter 2 – Software Product Line Concepts
17
2.3.3. Reduction of Development Costs
Major changes in engineering practices are usually surrounded by economical
justification. An essential reason for introducing product line engineering is the
reduction of costs. When artifacts are reused in several systems, this implies a
cost reduction for each system. Obviously, before the artifacts can be reused,
they must be developed and this involves an up-front investment to create the
initial SPL infra-structure.
Different authors agree with empirical investigations which revealed that
only after approximately 3 systems deployed, the software product line becomes
worth compared to single system development (Weiss & Lai, 1999), (Clements &
Northrop, 2001). Figure 2.1 shows the accumulated costs needed to develop n
different systems. The solid line sketches the costs of developing the systems
independently, while the dashed line shows the costs for product line
engineering. The location at which both curves intersect marks the break-even
point. The strategy that is used to initiate a product line also influences the
break-even point significantly (McGregor et al., 2002).
Figure 2.1. Costs for developing n kinds of systems as single systems compared to
product line engineering (Weiss & Lai, 1999).
2.3.4. Reduction of Time to Market
One of the main advantages of SPL engineering compared to single system
development is the reduction of time to market. For single-product
development, we can assume it is roughly constant (Clements & Northrop,
Chapter 2 – Software Product Line Concepts
18
2001). For SPLs, the time to market indeed is initially higher, as the common
artifacts have to be built first. Yet, after having passed this initial difficulty, the
time to market is considerably reduced.
Figure 2.2. Time to market with and without product line engineering. (Pohl et al.,
2005).
2.3.5. Improving Cost Estimation
Once the core assets base used in a SPL is already built, it becomes easier for the
team involved to estimate the cost of new products. This happens mainly
because the team involved knows precisely what is needed to be done to
integrate the components in the base and what is needed to be implemented to
deploy a new functionality for a new product in the product line. Cost
estimations become as more precise as the product line reaches a higher level of
maturity.
2.3.6. Benefits for the Customers
Customers obtain products adapted to their needs and wishes. However, in the
past it did not work like that because users had to adapt their own way of
working to the software. It often happened that customers had to get used to a
different user interface and a different installation procedure with each new
product. This annoyed them, is some situations, in particular as it even
happened when replacing one version of a product by the next version. Then,
users started to request for improved software ergonomics. In this context,
software product lines can bring great benefits for the customers. Firstly
Chapter 2 – Software Product Line Concepts
19
because customers can purchase these products at a reasonable price as product
line engineering helps to reduce the production costs. Additionally, customers
get higher quality products since the reusable components and their
configurations have been tested in many products developed earlier.
Moreover, despite possessing individual features, the products of a
product line have a lot in common due to the reused artifacts in the platform.
Similar user interfaces and similar major functionality make it easy for the
customer to switch from one product to another. The customer does not have to
learn new ways of using another product derived from the same platform.
2.4. Maturity and Evolution in Software Product
Lines
Adopting a SPL approach is not an easy task. It may take years for an
organization to reach acceptable maturity in a given domain and be a good
candidate for applying such approach (Bosch, 2002). Figure 2.3 shows one
possible way to understand the maturity levels of a software product line
proposed by (Bosch, 2002).
Figure 2.3. Maturity levels for software product lines (Bosch, 2002).
Chapter 2 – Software Product Line Concepts
20
Starting from a situation in which each product or application is
developed independently, the main maturity development path consists of:
•
A standardized infrastructure: consists of the basic infrastructure based
on which new products are developed. This infrastructure is generally
composed of the operating system and the typical commercial
components on top of it, such as a database management system and a
graphical user interface. In addition, the organization may acquire some
domain-specific components from external sources. These components
are typically integrated through some proprietary glue code.
•
A platform: it usually includes a standardized infrastructure and, on top
of that, it captures all functionality that is common to all products or
applications. The common functionality that is not provided by the
infrastructure is implemented by the organization itself, but typically the
application development treats the platform as if it was an externally
bought infrastructure.
•
A software product line: once the benefits of exploiting the
commonalities among the products become more accepted within the
organization, there may be a consequent development in order to
increase the amount of functionality in the platform to the level where
functionality common to several, but not all, products become part of the
shared artifacts. Then, the stage of a software product line is reached.
•
A configurable product base: at this stage, the organization, rather than
developing a number of different products, moves towards developing
only one configurable product base that, either at the organization or at
the customer site, is configured into the product bought by the customer.
Two additional developments can be identified, i.e. product populations
and a program of product lines. A product population approach is chosen when
the organization decides to increase the scope in terms of the number of
products. The program of product lines is selected when the scope of the
product line is extended in terms of the supported features (Bosch, 2002).
21
Chapter 2 – Software Product Line Concepts
Understanding which is the current maturity level of an organization and
which are the next levels to evolve can help on the SPL adoption. It is also
important to mention that the SPL adoption will likely fail if the levels are
skipped, for example, if an organization is using a standardized infrastructure
and tries to implement a configurable product base. Problems may happen
because deep organizational changes are needed and also because there are
several
non-technical
aspects
involved,
such
as
organization
culture,
management commitment and funding, among others (Bosch, 2004).
2.5. Successful Cases in Software Product Lines
There are many successful cases of software product lines application. In order
to recognize distinguished members of a community in a field of endeavor, the
Software Engineering Institute (SEI, 2008) established the SPL hall of fame
(SPL Hall of Fame, 2008). Each Software Product Line Conference (SPLC)
culminates with a session in which members of the audience nominate systems
for induction into the SPL Hall of Fame. Those nominations feed discussions
about what constitutes excellence and success in product lines. The goal is to
improve SPL practice by identifying the best examples in the field. Nominations
are voted on at the next SPLC by the majority of those present. The following
subsections show four cases of successful SPL application which have drawn
attention of academia and have been nominated to the hall of fame. The
subsections are arbitrarily ordered.
In spite of those successful examples, one particular failure case in the
software reuse area that is commonly mentioned is the Ariane 5 case (Jezequel
& Meyer, 1997). On June 4, 1996, the maiden flight of the European Ariane 5
launcher crashed, about 40 seconds after takeoff. Media reports indicated that a
half-billion dollars was lost. The failure was caused by an error occurred in the
Inertial Reference System (IRS) before takeoff. The IRS was reused from the
former versions of Ariane. According to the inquiry board a main lesson learned
of this fact was that reuse without a precise, rigorous specification mechanisms
can be a risk of potentially disastrous proportions.
Chapter 2 – Software Product Line Concepts
22
2.5.1. Philips
Royal Philips Electronics of the Netherlands is one of the world’s biggest
electronics companies and the largest in Europe. Its products vary from
professional medical systems to lighting, consumer electronics, and domestic
appliances (Philips, 2008). Philips is one of the leading commercial European
researchers in the field of software product lines, with some successful
examples, such as the SPLs of consumer electronics (Ommering, 2000) and
medical imaging systems (Wijnstra, 2000).
In the field of consumer electronics, Philips’ portfolio includes audio–
video equipment, like TV-sets, radio receivers, CD and DVD players and
recorders, as well as set-top boxes (Philips, 2008). In this field, the customers
have high demands with respect to performance and due of the mass-market
nature, the cheapest memory and processor chips are used. Moreover, the
products have to be very reliable as they are offered in the mass market. Hence,
repairing them after delivery is very costly (Ommering et al., 2000).
In order to handle those specific characteristics of the early mentioned
field, the consumer electronics division has chosen to use a composition
paradigm in the production of the product lines. The methodology is named
Koala (Ommering, 2002). This means that the architecture has enough
flexibility to allow many different configurations of the same basic components.
The whole set of products is referred to as product populations, with many
differences and many commonalities. Components are combined to build more
complex components. Interfaces that do not match are connected through glue
code. Certain pieces of glue code are standard, and only need some parameters
to instantiate.
As a result to the Koala application, by 2002, all mid- and high-range TV
sets, and many other products as well, were produced in the population
(Ommering, 2004). Nowadays, there are 20 different software releases per year,
where each release serving 1-5 different product types. The product line
supports three different hardware platforms. As a good model to be followed,
the architecture did not need many adaptations after its first conception in
1996. This has proven that having a stable reference architecture is a major
advantage.
Chapter 2 – Software Product Line Concepts
23
On the other hand, in the field of medical imaging systems, Philips’
portfolio of medical systems includes products such as X-ray, ultrasonic or
computed tomography and services such as training, business consultancy, or
financial services (Philips, 2008). In order to handle with the increasing
complexity and diversity in this domain (Wijnstra, 2000), the medical systems
division has decided to employ a SPL approach. A medical middleware platform
serves as the basis for other software product lines in the company. Thus the
platform is a software product line in itself, which leads to additional variability
requirements for the platform. The component-based reference architecture
reuses existing software components that are transformed step by step into
domain artifacts. As a result, since 2001, the number of products that use the
common platform developed in the SPL has increased. By 2004, ten product
groups were based on the platform.
2.5.2. Hewlett-Packard (HP)
HP is one of the world’s leading IT companies with many different business
areas, reaching from consumer handheld devices to powerful supercomputer
installations (HP, 2008). One reason that most contributed for HP to reach this
position was the reuse program, initiated in the early 1980s (Griss, 1994),
(Griss, 1995), and the adoption of a SPL approach (Toft et al., 2000).
One important business area is the manufacturing of printing technology.
HP must maintain a wide range of different firmware used in several products
for printing, copying, scanning, and faxing. In the late 1990s, HP initiated the
Owen Firmware Cooperative to install a software product line approach. Several
product teams build a community to provide the product line in a cooperative
way. Every product team adopts ownership of newly produced or significantly
changed core assets, so everyone feels responsible for the quality of the
platform. A small platform team ensures the robustness of the core assets and
guides the product teams in using the core assets (Toft et al., 2000).
The software product line approach yields a reuse rate of about 70% for
new products. About 20% of the application assets are based on slightly
modified core assets and only 10% require writing new code. Owen products
Chapter 2 – Software Product Line Concepts
24
have been produced using 25% of the staff, in 33% of the time, and with 96%
fewer bugs than earlier products.
2.5.3. Boeing
The Boeing Company is one of the leading manufacturers of commercial
jetliners, military aircraft, satellites, missile defense, human space flight, and
launch systems (Boeing, 2008).
The Bold Stroke software product line was originally initiated in 1995 at
McDonnell-Douglas which, in the meantime, merged with the Boeing Company.
The purpose of the product line was to improve reuse potentials in the
Operational Flight Program (OFP) software across multiple fighter aircraft
platforms (Sharp, 2000). OFPs are mission-critical, distributed, real time
embedded applications supporting the avionics as well as the cockpit functions
for the pilot
The first step of introducing Bold Stroke included the definition of a
reference architecture and its proof of concept, including hardware, software,
standards, and practices. The main challenge when defining the reference
architecture was to harmonize the differences in the avionics subsystems,
mission computing hardware, and system requirements (Doerr & Sharp, 2000).
The success of the Bold Stroke software product line is based on the
reduction of dependencies between components and the dependency on
platform-specific hardware. The software design facilitates the modification of
components and maximizes the reuse in different OFPs (Doerr & Sharp, 2000).
The Bold Stroke software product line was flight tested successfully on several
different aircraft platforms hosted on different hardware configurations (Sharp,
2000).
2.5.4. Nokia
Nokia is the world leader in mobile communication, holding approximately 40%
of the global mobile phone market (Nokia, 2008) and the company believes that
software product line engineering has helped them to reach that position. Every
year, approximately 30 different phones are manufactured to be distributed in
more than 130 countries. This scenario is quite challenging considering the
Chapter 2 – Software Product Line Concepts
25
main diversity Nokia’s product line must support, for instance, it must cover six
different protocol standards, 58 different languages, phones with a variable
number of keys, a wide variety of functional features and capabilities, different
user interface designs, and many platforms and environments (Heie, 2002).
Moreover, these features must be configurable and pluggable.
To establish its product line, Nokia is organized in software lines, which
are groups of people developing a specific set of features for a wide range of
products. Constantly, a new release is created by one group for others to use.
The company has different software lines for different levels of software, such
as, Digital Signal Processing (DSP), architecture, user interface, etc. Each
software line can potentially deliver to all products. Each deliverable must be
tested in as many configurations as possible. A global data base of feature
dependencies is maintained to ensure all affected parties are up-to-date on
changes. In fact, there is a lot of complexity involved with Nokia’s product line
considering backward compatibility, new technologies, operator requirements,
bugs, cultural values and so on (Heie, 2002).
One component that may exemplify the diversity of Nokia’s product line
is the language component. It must support about 58 different languages,
including non-Latin languages, such as, Chinese, Arabic, Korean, Hebrew and
Thai. Some of these languages are written from right to left. To complicate this
further, T9 optional feature must be supported. T9 feature helps the user to type
texts using the phone keyboard by guessing the word being typed without the
need of spelling that word letter by letter and not causing the user to press the
keys many times. What is more, when setting the phone language, all texts in
display must be automatically changed. To implement this component, they had
to separate language knowledge from the code – abstractly speaking, separate
appearance from behavior. They used the Observer design pattern and created a
text database where the texts are defined. Doing it this way, the texts are
resolved during display updates. As the main result, whatever language is
chosen, the code does not change, thus adding a language is transparent (Heie,
2002).
The initial software architecture for Nokia’s product line addressed
variations in hardware, communication standards, and user interfaces. The
Chapter 2 – Software Product Line Concepts
26
current architecture is component based on the client-server style. It allows
separate service providers to be plugged in or taken out without restarting the
system. This architecture supports both local and remote message passing and
component management, task scheduling and event control. Not so many
details about Nokia’s product line are provided because it constitutes a great
competitive advantage, some results of Nokia’s product line experience can be
seen in SPL Hall of Fame (SPL Hall of Fame, 2008).
2.6. Chapter Summary
Software product line is a very successful approach to achieve software reuse
and, consequently, gains of productivity and quality and reduction of costs. This
chapter summarized the basic concepts about software reuse and software
product lines and presented the benefits of applying SPL approach. The chapter
also briefly introduced some levels of maturity in SPLs to help on the adoption
of such approach. At last, four successful cases of SPL application were shown
based on the SPL Hall of Fame.
Next chapter presents a survey on SPL processes, highlighting their way
to implement reusable assets, and discussing their strong and weak points.
These processes serve as a base for the approach proposed by this work.
3
Software Product
Line Processes: A
Survey
“I have no special talent. I am only passionately
curious”
Albert Einstein (1879 – 1955)
Nobel Prize in Physics (1921), German theoretical physicist
Although the reuse concept is not new (McIlroy, 1968), it is not a reality in
software factories yet, mainly because the practical application of software reuse
demands a systematic way of performing the organization’s activities (Morisio et
al., 2002). To face this problem, the adoption of a software reuse process is
recommended. It may help to clearly define the activities, responsibilities, roles,
artifacts, inputs and outputs of an entire organization, maintaining the focus on
the production of reusable artifacts in the end. There are several reuse processes
documented in literature since the early 1980s (Almeida et al., 2005). A
particular kind of such processes is concerned to handle issues about Software
Product Lines (SPLs), which has been revealed as a successful way of practicing
software reuse and achieving benefits such as productivity gains, cost reductions
and quality increases (SPL Hall of Fame, 2008).
The basic ideas about SPLs started to come up in 1992, when Batory &
O’Malley designed GenVoca (Batory & O’Malley, 1992), a method based on
generative programming which carries some aspects of SPL, such as an
extensible architecture. After that, two important publications came up with the
first SPL processes: PuLSETM (Bayer et al., 1999) and FAST (Weiss & Lai, 1999).
In this chapter, it will be introduced some of the most relevant SPL
processes found in literature from 1999 to 2007. In addition, it will be described
Chapter 3 – Software Product Line Processes: A Survey
28
important work published in the fields of Component-Based Development
(CBD) methods and Domain Engineering (DE) processes from the early 1980s
until 2007. Throughout the descriptions of these processes, their strong and
weak points are highlighted. At the end of this chapter, it might be possible to
understand better the state-of-the-art in the software reuse processes field.
This chapter is organized as follows: Section 3.1 describes three different
CBD methods; in sequence, Section 3.2 shows a summary of some important
domain engineering methods; SPL concepts and nine relevant processes are
explored in Section 3.3; Section 3.4 presents a summary of the study with a
timeline including all the processes and methods mentioned; and finally,
Section 3.5 brings a summary of the chapter.
3.1. Component-Based Development (CBD)
The problems of developing software using the concepts involved with software
reuse and software components can be reduced by applying component-based
development methods, such as Catalysis (D'Souza & Wills, 2001) and UML
Components (Cheesman & Daniels, 2001). The following subsections present
more details about each of these CBD methods.
3.1.1. Catalysis
Catalysis is a research initiative of University of Brighton in 2001, England, by
(D'Souza & Wills, 2001), which resulted in an integrated set of techniques to
build Object-Oriented Distributed Systems. According to the authors, Catalysis
is a component-based development method that covers all development phases
of a component, from its specification to its implementation.
This method is based on a set of principles for software development.
Among them, we can highlight: abstraction, precision, refinement, plugin components and some reuse laws.
The abstraction principle guides the developer to find essential aspects of
the system, avoiding irrelevant details for the context. The precision principle
aims to discover bugs and modeling inconsistencies. Successive refinements
between phase transactions help in obtaining more precise and reusable
artifacts. The plug-in components principle supports reusing components, with
Chapter 3 – Software Product Line Processes: A Survey
29
the objective of building others. And to complete, the main reuse law in
Catalysis is not reuse code without reusing its specification.
The software development method used in Catalysis is divided in three
phases: problem domain – elaborating “what” the system should do to solve
the problem; components specification – when the system behavior is
described; components internal design – when internal implementation
details of the components are specified. In this last phase, Catalysis lacks of
guidelines
on
how
to
apply
variability
implementation
techniques
(Anastasopoulos & Gacek, 2001) within the components internal design.
Furthermore, the application of Catalysis may become problematic because it
does not establish a clear sequence of steps and does not clarify which are the
inputs and outputs for each phase in the process.
3.1.2. UML Components
UML Components (Cheesman & Daniels, 2001) is CBD method based on UML
(OMG UML, 2007) extension, as the name itself, and was published in the same
year of Catalysis. UML Components makes use of UML extensions across its
phases. There are many different extension mechanisms for UML, but,
probably, the most used, according to (Cheesman & Daniels, 2001), are the
stereotypes, which can be attached to any element in UML diagrams.
There are six stereotypes of UML Components that can be added to
entities in a typical UML diagram: Type (<<type>>); Datatype (<<datatype>>);
Interface type (<<interface type>>); Component Specification (<<comp
spec>>); Offers (<<offers>>); and Core (<<core>>).
(Cheesman & Daniels, 2001) defined a workflow for component
development based on RUP (Jacobson et al., 1999). The workflow has the
following
activities:
Requirements,
Specification,
Provisioning,
Assembly, Test and Deployment. They correspond directly to RUP activities
except for the Specification activity, which is where the UML Components
concepts are applied. This activity is divided in three phases: Component
Identification,
Specification.
Component
Interaction,
and
Component
Chapter 3 – Software Product Line Processes: A Survey
30
In Component Identification phase, the steps to be followed are: identify
system interfaces and operations; create the business type model, which is like a
class diagram in a high-level of abstraction, including core types identification
(types that do not depend on any other); create initial component specification
and architecture; and specify component architecture. In the end of this phase,
initial component specifications are defined and organized into initial
component architecture. Existing systems and architectures are taken into
account. This phase should consider two kinds of contracts established between
entities and interfaces: usage and realization. The usage contract is the one
between a component object’s interface and its clients. The realization
contract is the contract between a component specification and its
implementation.
In the next phase, Component Interaction, the main goal is to discover
the business interfaces and operations and its respective signatures by analyzing
use cases and identifying the main interactions between the system and the
external user. Cheesman & Daniels suggest developing interaction models to aid
in operation identification, just as sequence diagrams in RUP.
This last phase, Component Specification, is focused on producing the
interface information model and building the component specification model
and architecture. If it is necessary to specify interfaces more precisely, based on
the operations discovery in the Component Interaction phase, then some
constraint language can be used, for example Object Constraint Language (OCL)
(OMG OCL, 2007). As result of this phase, interface specifications define usage
contracts and component specifications define realization contracts in the
component architecture.
Whenever Specification activity has been completed, including the three
phases described before, Provisioning and Assembly activities should start.
After the target platform is chosen, the developer can map specifications to
implementation, respecting each technology restriction. Areas where mappings
are required include parameter passing, error and exception handling
mechanisms, interface inheritance and interface support. This final activity does
not provide much more details as object oriented technologies do.
Chapter 3 – Software Product Line Processes: A Survey
31
UML Components is a quite simple method to develop components in a
single system environment. However, when it comes to matters of software
product lines, it does not address issues about how to structure an extensible
architecture considering variabilities and commonalities or how to combine
components in order to derive products. Furthermore, the method only
provides details on how to design and specify components, leaving the assembly
phase neglected.
3.2. Domain Engineering Processes
Domain Engineering (DE) can de defined as the activity of collecting,
organizing, and storing past experience in building systems or parts of
systems in a particular domain in the form of reusable assets, as well as
providing an adequate means for reusing these assets when building new
systems (Czarnecki & Eisenecker, 2000, pp. 20).
Different approaches are based on DE concepts. In the early 1980s and
1990s, a special effort has been put into the DE processes resulting in relevant
work such as: The Draco Approach (Neighbors, 1980); Organization Domain
Modeling (ODM) (Simos et al., 1996); Reuse-driven Software Engineering
Business (RSEB) (Jacobson et al., 1997) and FeatuRSEB (Griss et al., 1998);
Feature-Oriented Reuse Method (FORM) (Kang et al., 1998); Odyssey-DE
(Villela, 2000); RiSE process for Domain Engineering - RiDE (Almeida, 2007).
We are not going to provide detailed description about all these DE processes,
since the focus of this chapter is on software product line processes.
The Draco Approach (Neighbors, 1980) was considered the first domain
engineering approach, as it introduces the ideas of: Domain Analysis, DomainSpecific Languages (DSL), and Components as sets of transformations.
Neighbors’ work has made an important contribution to the domain engineering
field, presenting concepts such as generative programming, transformation
systems and components. However, his approach is very difficult to apply due to
the complexity of performing activities such as writing transformations and
using the Draco tool.
In 1996, Mark Simos (Simos et al., 1996) and his group developed the
Organization Domain Modeling (ODM) method. It consists in three main
Chapter 3 – Software Product Line Processes: A Survey
32
phases: Plan Domain, Model Domain, and Engineer Asset Base. Besides, it does
not present specific details on how to perform many of its activities, as the
author himself defines: “the method provides a general, high-level
guidance in tailoring the method for application within a particular project
or organization” (pp. 01). It means that ODM did not present concrete
techniques to perform tasks such as architecture and component modeling and
implementation.
Motivated by the problem of abstraction in ODM, Jacobson, Griss and
Jonsson created the Reuse-driven Software Engineering Business (RSEB)
(Jacobson et al., 1997). Similar to the Rational Unified Process (RUP) (Jacobson
et al., 1999), RSEB is also iterative and use-case centric. Key ideas in RSEB are:
the explicit focus on modeling variability and maintaining traceability links
connecting representation of variability throughout the models, i.e., variability
in use cases can be traced to variability in the analysis, design, and
implementation object models. Limitations of RSEB include essential domain
analysis techniques such as domain scoping and modeling, the lack of a
systematic way to achieve the asset development, and, also, the lack of feature
models to perform domain modeling considered a key aspect by the reuse
community (Kang et al., 1990).
Based on the limitations observed during the RSEB utilization, Griss et
al. developed FeatuRSEB (Griss et al., 1998), which is a result of integrating
FODAcom, an object-oriented adaptation of Feature Oriented Domain Analysis
- FODA (Kang et al., 1990), with RSEB. The effort made in FeatuRSEB process
still did not result in a systematic way to achieve the development of reusable
assets.
Concurrently with Griss et al.’s work (Griss et al., 1998), the FeatureOriented Reuse Method (FORM) (Kang et al., 1998), an extension of their
previous work (Kang et al., 1990), was being developed. It is focused on
capturing commonalities and differences of applications in a domain in terms of
features and using the analysis results to develop domain architectures and
components. The method consists of two major engineering processes: Domain
Engineering and Application Engineering. The first consists of activities for
analyzing systems in a domain and creating reference architectures and
Chapter 3 – Software Product Line Processes: A Survey
33
reusable components based on the analysis results. The second is concerned on
creating applications reusing the artifacts. The method defines few directions to
select the architectural model and develop the applications using the existing
components.
In 2000, Villela presented the Odyssey-Domain Engineering (DE)
process, focused on the integration between the reuse aspects and domain
understanding from DE’s approaches and the on the systematic sequence of
activities defined in the component-based development processes (Villela,
2000). The key aspect of Odyssey-DE is its integration with the Odyssey
environment and all reuse infra-structure available. Although the integration
aspect can be a strong point of Villela’s work, there is no indication that the
environment covers in details the core assets implementation phase,
considering
the
different
variability
implementation
techniques
(Anastasopoulos & Gacek, 2001).
And at last, in 2007, Almeida proposed in his Ph.D. thesis a process
called RiDE: The RiSE Process for Domain Engineering (Almeida, 2007). After
evaluating 15 different reuse processes, he structured a process joining together
the good practices of those processes in the three phases of the domain
engineering
activities:
domain
analysis,
domain
design
and
domain
implementation. Almeida’s biggest contributions remain on domain design
phase, where the SPL architecture is established based on similarity functions
according to feature model (Almeida et. al, 2007b). He also elaborated a way to
aid component identification within the SPL architecture. In the domain
implementation phase, Almeida used OSGi platform (OSGi, 2008) for
implementing core assets (Almeida et al., 2008). Sometimes, using OSGi
platform may difficult the implementation of core assets in particular domains,
such as the mobile applications domain, since the platform is not yet well
established in the mentioned domain and was only implemented by a very small
set of mobile handsets.
Chapter 3 – Software Product Line Processes: A Survey
34
3.3. Software Product Line Processes
Software product lines have achieved a broad recognition in the software
industry (SPL Hall of Fame, 2008). Many organizations either have adopted or
are considering to adopt the technology.
The idea is simple: develop an asset once and use it in several products or
systems; or, in the opposite way, extract an asset from similar systems to be part
of a core asset repository and then mount the SPL. Some authors, such as
(Pasetti & Pree, 2000), compare a product line to a framework, which can be
viewed as a basic structure to develop different software products. The benefits
of Product Lines are largely known in the area: reduction of time-to-market,
development costs and maintenance efforts; enhancement of quality; and largescale productivity gains (Pohl et al., 2005).
On the other hand, the adoption of a Software Product Line increases the
final cost of software products and, to handle this problem, several decisions
need to be made about the scope of product line artifacts, for example: the way
to organize for the development and evolution of these artifacts, the funding
model used to finance the development of shared components, the features that
are selected for implementation in shared components, as well as the amount of
architecture harmonization required (Bosch, 2004). Bosch presents a
framework to help selecting the best alternative for each decision based on a
three-stage adoption model, from the initial stage adoption to the most complex
applications of a SPL (Bosch, 2004). He defines decision dimensions based on
industrial experiences, which are: feature selection, architecture harmonization,
R&D organization, funding model, and shared component scoping. Each
dimension presents a number of alternatives and discusses the advantages and
disadvantages of each one.
There are some reasons which justify the big effort spent to define a
software process for specific software development tasks, such as: a well-defined
process can be observed and measured, and thus improved; a process can be
used to capture the best practices for dealing with a given problem. The
adoption of processes also allows a fast dissemination of effective work practices
(Rombach, 2000). These reasons remain true when discussing about software
product line processes.
Chapter 3 – Software Product Line Processes: A Survey
35
Until the late 1990s there were few available methods, guidelines or
processes to build software product lines. The following subsections present
nine relevant SPL approaches, highlighting the phases responsible for
implementing reusable assets. The subsections are organized in chronological
order.
3.3.1. GenVoca and Object-Oriented Product Lines and Frameworks
“GenVoca is a design methodology for building architecture-extensible
software - i.e. software that is extensible via component addition and
removal.” (Batory & O’Malley, 1992). GenVoca is a scalable outgrowth of an old
practitioner-ignored methodology of program construction called step-wise
refinement. These refinements are generally compared to components, so that
applications of enormous complexity can be expressed as a composition of a few
refinements rather than hundreds or thousands of small refinements, and it
defines the refinement granularity. Considering the time GenVoca was defined,
1992, its concepts of connecting components and constructing an extensible
architecture are relatively close to modern product line or component-based
development concepts.
In 2000, GenVoca concepts were reused in the context of object-oriented
paradigm (Batory et al., 2000). Then, the refinements (components) were
defined in terms of OO inheritance where a subclass adds new data members,
new methods, and/or overrides existing methods. As components are
composed, different layers can appear. Figure 3.1 illustrates this concept: layer
L1 encapsulates three classes. Each of these classes is a root of a subclassing
hierarchy. Layer L2 encapsulates three classes, two classes refine existing
classes of L1 while a third starts a new hierarchy. Layer L3 also encapsulates
three classes, two of which refine classes of L1 and L2. Finally, layer L4
encapsulates two classes, both of which refine existing classes.
Chapter 3 – Software Product Line Processes: A Survey
36
Figure 3.1. Creating inheritance hierarchies by composing layers. (Batory et al.,
2000)
In this context, a layer implements a feature that can be shared by many
applications of a product-line. Considering the definition of framework as a
collection of abstract classes that encapsulate common algorithms of a family of
applications (Johnson & Foote, 1988), Figure 3.1 defines the basic structure of a
framework at the top layers and at the bottom layers it defines a framework
instance, which provides the missing details.
The main idea of the work in question is to provide a mechanism of
making frameworks more flexible by using mixin-layers, which are blocks of
both frameworks and frameworks instances. Figure 3.2 shows a boundary
between abstract and concrete classes of the framework. If the boundary is
lowered or raised, the framework can become more or less specific. One
interesting mechanism mentioned to handle mixin-layers is parameterized
inheritance, where a class can get as parameter its super class.
The work does not provide many details of how to implement
parameterized inheritance. They used an extended version of Java just to
illustrate their ideas. The biggest contribution of the work is based on the
possibility of solving frameworks “overfeaturing” issues. The solution is
“effected by relaxing the boundary between a framework (the common part of
the product line) and its instantiations (the product-specific part).” (Batory et
al., 2000)
Chapter 3 – Software Product Line Processes: A Survey
37
Figure 3.2. Refinements hierarchies and framework instances. (Batory et al., 2000)
3.3.2. Product Line Software Engineering (PuLSETM)
PuLSEΤΜ (Product Line Software Engineering), published in 1999 (Bayer et al.,
1999), is a methodology with the purpose of enabling the conception and
deployment of software product lines within a large variety of enterprise
contexts. This is achieved via product-centric focus throughout the phases of
PuLSEΤΜ. A lot of work in the literature has focused on the organizational aspect
and context for setting up a reusable infrastructure (Bergey et al., 1998)
(Foreman, 1996), but PuLSEΤΜ has a more practical approach with technology
transfer activities among industrial customers.
The life cycle of a product line in PuLSEΤΜ is split into the following
phases: initialization, product line infrastructure construction, usage, and
evolution. These deployment phases are logical stages a product line goes
through. They describe the activities performed to set up and use the product
line. The process provides technical components for the different deployment
phases that contain the technical know how needed to operationalize the
Chapter 3 – Software Product Line Processes: A Survey
38
product line development. In the initialization phase, the other phases and the
technical components are tailored. Through this tailoring of the technical
components, a customized version of the construction, usage, and evolution
phases of PuLSEΤΜ is created.
The technical components are: customizing (BC), scoping (Eco),
modeling (CDA), architecting (DSSA), instantiating (I), and evolving and
management (EM). Customization of PuLSEΤΜ to the context where it will be
applied ensures that the process and products are appropriate. Scoping
component has its focus on product definitions, being aware to not define a
product line with too many features. Modeling and architecting define the
domain-specific
software
architecture.
Evolving
and
Management
are
concerned with configuration management issues over the time and how to
integrate misfits in the line. Figure 3.3 shows the PuLSEΤΜ structure overview.
Figure 3.3. PuLSEΤΜ Overview (Bayer et al., 1999).
Chapter 3 – Software Product Line Processes: A Survey
39
As well as other product line processes, PuLSEΤΜ focus on a domainspecific software architecture (DSSA), which can make possible the
development of new products just by changing or adding different features
considered by the variations points. The biggest problem is how to design this
architecture for different domains with appropriate details, as the lack of details
can make the whole process collapse. A possible solution can be to adopt a
specific Architecture Description Language (ADL), which is not the objective of
Bayer et al. They believe that the component PuLSEΤΜ - DSSA does not require
this kind of language, but it may not be true.
According to Atkinson et al. (Atkinson et al., 2000), PuLSEΤΜ has been
applied successfully in various contexts for different purposes. Among other
things, it has been helpful for introducing sound documentation and
development techniques into existing development practices. However, in
circumstances where there were no pre-existing processes or well-defined
products, the introduction of PuLSEΤΜ turned out to be problematic. In such
cases, the customization of PuLSEΤΜ was actually more concerned with the
introduction of basic software engineering processes than with the adaptation of
the product line ideas to existing processes.
3.3.3. Family-Oriented Abstraction, Specification and Translation
(FAST)
Still influenced by the Domain Engineering processes and based on industrial
experiences in software development, especially at Lucent Technologies and
Avaya Labs, David Weiss & Chi Lai presented the Family-Oriented Abstraction,
Specification and Translation (FAST) process (Weiss & Lai, 1999). Their goal is
to provide a systematic approach to analyze potential families and to develop
facilities and processes for generating family members. Because the process is
based on industrial experiences, mainly at Lucent Technologies, FAST defines
patterns for software production processes to balance the tradeoff between mass
production and careful and detailed engineering. FAST process is organized into
three sub-processes: Domain Qualification (DQ) – related to feasibility studies
of the family members, Domain Engineering – structuring reusable assets, and
Application Engineering – reusing the assets to generate new product family
members attending the customer requirements.
Chapter 3 – Software Product Line Processes: A Survey
40
As the process name says, FAST uses translation to transform the
application model into family members. The model is specified with an
Application Modeling Language (AML) and it is necessary to design a compiler
to read the model and generate the family members, which is not a trivial
activity.
3.3.4. The KobrA Approach
In
2000,
the
Komponentenbasierte
Anwendungsentwicklung
(KobrA)
approach was published by Atkinson et al. (Atkinson et al., 2000). As it was said
in the last section, when there is no pre-existing software process, the
introduction of PuLSEΤΜ turned out to be problematic because basic software
engineering process principles would be the focus, instead of software reuse
principles. In this context, KobrA approach represents a synthesis of several
advanced
software
engineering
technologies,
including
product
lines,
component-based development, frameworks, and process modeling. It attempts
to create a natural synergy between the component-based and product line
approaches to software development (Atkinson et al., 2000). Atkinson et al.
mentioned: “From a product line perspective, KobrA represents an objectoriented customization of the PuLSEΤΜ process”.
A fundamental tenet of KobrA is the strict distinction of products and
processes. The products of a KobrA project (e.g., models, documents, code
modules, test cases, etc.) are defined independently of, and prior to, the
processes by which they are created, and effectively represent the goals of these
processes. The transformation of an application into an executable form is
carried out in a distinct set of activities that are essentially orthogonal to the
framework and application engineering activities. The main purpose of the
framework engineering is “to create, and later maintain, a generic framework
that embodies all product variants that make up the family, including
information about their common and disjoint features” (Atkinson et al., 2000).
Besides, the main purpose of application engineering is “to instantiate this
framework to create particular variants in the product family, each tailored to
meet the specific needs of different customers, and later to maintain these
concrete variants” (Atkinson et al., 2000).
Chapter 3 – Software Product Line Processes: A Survey
41
In KobrA, a framework is the static representation of a set of
Komponents, shorthand for “KobrA component”, organized in the form of a
tree. Each Komponent is described at two levels of abstraction, as shown in
Figure 3.4: a specification, which defines the Komponent’s interface (visible
properties and behavior), and realization, which describes how the Komponent
fulfils the interface contract. Komponents’ implementation activities make use
of UML models and map them, through a series of well-defined refinement and
translation steps into an executable representation (Bunse & Atkinson, 1999).
Figure 3.4. Komponent specification and realization models (Atkinson et al., 2000).
The literature does not provide many industrial case studies using KobrA.
For this reason, the method does not have much evolution from the time it was
published to now. Considering this little evolution and that its main purpose is
to join together different software engineering concepts, the method still
presents weak points. For example, during the framework engineering activity,
it does not present guidelines to realize a given Komponent specification
considering the respective variability implementation techniques to be used
(Anastasopoulos & Gacek, 2001).
Chapter 3 – Software Product Line Processes: A Survey
42
3.3.5. Component-Oriented Platform Architecting Method (CoPAM)
At the same time of KobrA, mentioned in last section, (America et al., 2000)
created another important point of view concerning software product lines.
Component-Oriented Platform Architecting Method (CoPAM) is based on
several approaches described in the literature, such as PuLSEΤΜ, RUP, and on
the authors’ experience in the industry, enabling the development of product
family architectures. CoPAM also takes into account non-technical aspects like
business and organizational constraints.
America et al.’s work mentions the case of a diverse company like Philips
which develops several, widely different product families, ranging from
consumer electronics (TV, VCR, DVD, etc.) to professional systems (among
others for medical imaging, electronic component mounting, and digital video
communication). For each family, a specifically tuned family engineering
method is necessary, because the business and organization constraints differ.
Then, in order to share the know-how between the developers of these different
product families (lines) and their family engineering methods, CoPAM
organizes these family engineering methods into method family (despite its
name, CoPAM is a family of methods, not just a single method). According to
America et al., the most important point of organizing different methods into a
family is to deal explicitly with commonalities and differences among them.
Figure 3.5 illustrates how CoPAM is organized.
Figure 3.5. Products, methods and families (America et al., 2000).
Chapter 3 – Software Product Line Processes: A Survey
43
It is important to mention why CoPAM was not organized into a larger
family or population instead of different product families (Ommering, 2000).
America et al. affirm that such a large population only makes sense if the
products in the family have enough in common to make it profitable and
manageable by the organization.
CoPAM is divided in three sub processes: platform engineering, product
engineering and family engineering. The first sub process develops a platform,
which consists of a number of reusable components. The product engineering
process develops products using these platform components, adding new
components where necessary. Both processes get input from and provide
feedback to the family engineering sub process. This last is different from the
other kinds of sub processes because it deals with family development.
As CoPAM main purpose is to organize a family of different product line
methods, it does not provide details on how to mount a specific product line and
also does not provide details on assets implementation. These details should be
recovered from each specific method that is being used for each specific product
line.
3.3.6. Software Product Lines by SEI
In 2001, (Clements & Northrop, 2001) compiled several concepts of software
reuse and product lines, which are part of the Framework for Product Line
Practice, proposed by SEI. Clements & Northrop highlight management and
organizational issues concerning establishing a SPL processes, as (Czarnecki &
Eisenecker, 2000) mentioned to be necessary.
Clements & Northrop defend that product lines are based on three
essential activities: core asset development, product development and
management. The first activity goal is to establish a production capability for
products based on iterations. In this activity the product line scope is defined
with the existent constraints, styles, patterns and frameworks. Another output
of this activity, besides the scope, is the production plan used as input to
product development activity. This second activity consists basically in
transforming the reusable assets into real products. Supporting these two
activities, Management activity exists at both technical and organizational
Chapter 3 – Software Product Line Processes: A Survey
44
levels to ensure the success of the product line, taking into consideration
budgets, schedules, team effort, and all the managerial aspects. Figure 3.6
shows the structure of the three essential activities.
Figure 3.6. Three essential activities (Clements & Northrop, 2001).
SEI’s approach is based on taking the software engineering practice areas
and applying SPL concepts. Clements & Northrop explained these areas in
terms of aspects peculiar to product lines, the application to core asset
development and product development, specific practices and practice risks to
that area in question. They also describe technical and organizational
management practice areas. Some examples of the explained areas are:
architecture definition and evaluation, requirements engineering, software
system integration, testing, process definition, scoping, tool support, market
analysis, training, etc.
The framework defined by SEI involves different and important technical
and non-technical aspects of SPL practical areas. However, considering that a
real product line will not handle all these aspects, it becomes too generic, and
probably needs a big effort to be customized into organization. Furthermore,
few implementation details are provided.
3.3.7. FORM’s Extension
In order to support software product lines approach, Kang et al. (Kang et al.,
2002) present an evolution of their previous work FORM (Kang et al., 1998).
FORM’s product lines consist of the two basic processes used in others reuse
Chapter 3 – Software Product Line Processes: A Survey
45
process: Asset development, with the goal of producing reusable assets, and
Product Development, putting the assets together to develop new products.
The main difference of this extension compared to original FORM is the
concern in business aspects such as the Marketing and Product Plan (MPP).
The process still carries lack of details in conceptual architecture design,
architecture refinement and implementation activities.
3.3.8. Product Line UML-Based Software Engineering (PLUS)
One of the most recent work in software product lines area was published by
(Gomaa, 2005). As the name mentions, PLUS adds the capabilities of UMLbased methods to software product lines. Gomaa affirms that the objective of
PLUS is to explicitly model the commonality and variability in a software
product line. The method provides a set of concepts, techniques and notations
to extend UML-based design methods and processes for single systems to
handle product line engineering. In addition, PLUS is compatible with the
iterative and incremental (spiral) method defined in Unified Software
Development Process (USDP) (Jacobson et al., 1999).
As UML capabilities are mapped in PLUS, the Requirements, Analysis
and Design Modeling are applied in the context of SPL. In Requirements
Modeling, Gomaa provides mechanisms to structure a use case model for a SPL
considering variability management and to document the use cases
appropriately. Feature modeling with UML is also provided.
In the Analysis Modeling phase, PLUS brings ways to perform static
modeling (basic structure of classes) of the SPL considering commonality and
variability. It also handles dynamic interaction modeling (sequence or
collaboration diagrams), finite state machines and state charts and feature/class
dependency modeling for SPL.
Finally, for the Design Modeling activity, software architecture patterns
(categorized in structure, communication and architectural) and componentbased software design are proposed. After the three steps mentioned are
performed, the SPL architecture is adapted and tailored to derive a given
software application.
Chapter 3 – Software Product Line Processes: A Survey
46
PLUS is an innovative method to software product lines based on UML.
Gomaa provides three different case studies to help applying the method in a
practical and industrial context. However, he does not provide many details on
component implementation and product line testing, which are not less
important than the three general steps mentioned.
3.3.9. Software Product Line Engineering (SPLE) Framework
Also in 2005, in the same year of PLUS publication, the SPLE framework was
published (Pohl et al., 2005). Pohl et al. describe this framework as it
“incorporates the central concepts of traditional product line engineering,
namely the use of platforms and the ability to provide mass customization”.
They define a platform as a collection of reusable artifacts, in the software
context, and mass customization as the set of variabilities that can be applied to
different products in a product line.
The SPLE framework is divided in two phases: Domain Engineering,
responsible for establishing the reusable platform and thus for defining the
commonality and the variability of the product line; and Application
Engineering, is responsible for deriving product line applications from the
platform established in domain engineering. This differentiation between the
domain and application engineering processes is based on the proposal by
Weiss and Lai (Weiss & Lai, 1999). The entire framework is clearly exemplified
with a home automation case study.
The domain engineering process is composed of five key sub-processes:
product management, domain requirements engineering, domain design,
domain realization, and domain testing. In the same context, the application
engineering process is composed of the sub-processes application requirements
engineering, application design, application realization, and application testing.
Throughout the framework structure, Pohl et al. heavily explore the
concepts of variability in different contexts of the process and how to document
it in different types of artifacts, such as, requirements artifacts, design artifacts
and code (realization artifacts). The framework also brings clearly the
differences between product-line engineering and single-system engineering in
all the activities performed during the process’ phases.
Chapter 3 – Software Product Line Processes: A Survey
47
Specifically in domain realization phase, the framework approaches the
question of how to distribute variability over components and considers
different binding times for variability: before compilation, at compile time, at
link time, at load time and at run-time. For each mentioned time, well known
variability implementation techniques are cited, for example, aspect-oriented
programming, model-driven approaches, conditional compilation, among
others (Anastasopoulos & Gacek, 2001). Nevertheless, the framework still lacks
of guidelines for component realization and does not provide details on how to
apply those techniques in practice.
In addition, in the application realization phase, the framework affirms
that application-specific components are realized just as in single-system
engineering, emphasizing that, in many cases, domain interfaces can be reused
for application-specific components. In this case, an application-specific plug-in
component, for example, has to carry all interfaces that are determined by the
domain architecture for such a plug-in, and so the component’s internal
specification may become too complex.
3.4. Summary of the Study
Based on the mentioned processes and methods, it was proposed the timeline of
research on software reuse processes area, presented in Figure 3.7 taking as
base the timeline described in (Almeida et al., 2005). The milestones are shown
in the Figure marked with an “X”. Observing this Figure, it can noticed that the
tendency to develop reuse processes based on software product line practices,
started from 1999, instead of domain engineering practices, which dated from
early 1980s.
Chapter 3 – Software Product Line Processes: A Survey
48
Figure 3.7. Domain engineering and product line processes timeline.
The timeline of research started in 1980, when Neighbors (Neighbors,
1980) proposed the first domain engineering approach. We can consider the
Neighbor’s work as the first prototype based on transformation technology. The
DE processes evolution came out with UML issues in 1997 with Jacobson, Griss
and Jonsson’s work. They created the RSEB, the first use-case driven systematic
reuse process based on the UML notation.
Batory and O’Malley’s work, in 1992, GenVoca (Batory & O’Malley, 1992),
mentioned product lines but was more related to generative programming and
is not considered as a milestone. Product lines were, in fact, firstly mentioned in
PuLSE (Bayer et al., 1999). After PuLSE, SPLs were explored in (Weiss & Lai,
1999) and (Atkinson et al., 2000). In 2001, Clements & Northrop structured the
Software Engineering Institute’s SPL framework (Clements & Northrop, 2001)
with several concepts of software reuse and product lines. Gomaa in (Gomaa,
2005) proposed a new approach to design SPLs with UML. In the same year of
Gomaa’s work publication, Pohl et al. (Pohl et al., 2005) combined several
concepts and techniques for software product line engineering in a framework,
which brings a complete case study in the home automation domain.
Chapter 3 – Software Product Line Processes: A Survey
49
Taking all the mentioned SPL processes into consideration we can
conclude that:
•
The processes commonly split a SPL into two distinct phases: core assets
development and application engineering. Clements & Northrop also
mention a third phase responsible for managing the creation and usage of
the core assets (Clements & Northrop, 2001).
The first phase is
responsible for creating the reusable artifacts and the second reuses those
artifacts to create new applications in the domain being explored. The
core assets development phase is usually divided in three sub-phases:
domain analysis, which analyzes all the features of the domain; domain
modeling, which creates a reference architecture based on domain
features and models the components; and domain implementation,
which assembles the defined components.
•
All of them present some lack of details on the domain implementation
phase. It means that they do not provide guidelines for implementing
components and for using the variability implementation techniques
during component realization steps. There is no sound example
documentation to aid the developer in the processes relating the
components with their respective variability implementation techniques
in use.
•
Most of the processes present case studies, helping to introduce them in a
practical and industrial context. However, there are few case studies
showing some level of customization or adaptation of the processes
according to the reality of immature domains, such as, the mobile game
domain (Voget & Becker, 2002) in Java Micro Edition (JME) (Java ME,
2008), which carries restrictions that can make the application of a SPL
unfeasible. These restrictions are mainly related to the still unstable JME
platform and the big diversity of phones, bringing up many variation
points according to the phone manufacturer, for example, different
screen sizes, different API implementations and limited application size.
Chapter 3 – Software Product Line Processes: A Survey
50
3.5. Chapter Summary
This chapter presented the main concepts about software reuse processes,
covering from component-based development, describing basic assumptions of
three different CBD processes, to software product lines, mentioning aspects of
domain engineering and focusing on core assets implementation phases. It was
presented nine relevant SPL processes from 1992 to 2007. At last, a timeline
was defined in order to summarize the main topic of this chapter.
Based on the issues described in this chapter about software reuse
processes, especially about SPL processes, the next chapter presents a practical
approach for implementing core assets in a SPL focusing on the mobile game
domain, since such domain is still little explored in case studies involving SPLs.
4
“If
you
Core Assets Development in
Software Product Lines Towards a Practical Approach
for the Mobile Game Domain
can't
explain it simply, you don't
understand it well enough”
Albert Einstein (1879 – 1955)
Nobel Prize in Physics (1921), German theoretical physicist
There are many cases of successful software product lines in practice (SPL Hall
of Fame, 2008), as it was mentioned in Chapter 2. Several domains have been
explored using the SPL approach, for example, consumer electronics
(Ommering et al., 2000), printing machines (Toft et al., 2000) and avionics,
including commercial jetliners and even spaceships (Sharp, 2000). However,
one specific domain in which there are few examples of SPLs is the mobile game
domain, mainly because the majority of the SPL processes listed in Chapter 3 do
not address appropriately the restrictions related to that specific domain,
especially in the domain implementation phase.
In this context, this chapter presents a practical approach for
implementing core assets in a software product line applied to the mobile game
domain and is organized as follows: Section 4.1 introduces the mobile game
domain and some specific characteristics of game development. In sequence,
Section 4.2 presents the proposal to core assets implementation in the mobile
game domain. Finally, Section 4.3 presents a summary of this chapter.
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 52
Practical Approach for the Mobile Game Domain
4.1. Introduction
It is common to hear from different sources in media 1,2 that the game industry
outgrowth is overcoming the movie industry. In fact, the entertainment industry
has somehow shifted its attention to the games and this does not exclude mobile
games. But, despite what many people could think, mobile games do involve
some challenging aspects. For example, based on our industrial experience, a
typical mobile game can be hypothetically described like this: “our next project
will be an adventure game based on the Spiderman movie and must be
launched in three months from now, two weeks before the official movie
release. The game must run in 32 different phones from different
manufacturers, including Nokia, Motorola, Samsung, LG and Sony Ericsson
and must include 5 different languages: English, Portuguese, Spanish, French
and German. The game must use 3D capabilities and sound effects and the
final application size must not exceed 400 KB. The game must not take more
than 5 seconds during start up”. This small text exemplifies the problems and
restrictions of the mobile game domain, which can be summarized as:
•
Short schedules: this problem is usually related to every software
project, but, especially in mobile game projects, there is a rush because
mobile games have a much smaller market window compared to other
projects given the strong competition. As soon they enter the market,
they tend to be quickly replaced by other titles.
•
Big diversity of target handsets: the larger number of phones the
game can run, the bigger possibilities of download it has, and
consequently the bigger are the chances of success and profit for game
producers and operators. On the other hand, as the number of target
handsets grows, there is much more to be done to customize the
applications for all of them, because different variables must be taken
into consideration, for example: hardware restrictions – no camera,
no MP3 support, low storage capacity; processing power – it may
1
Microsoft targets blockbuster debut with 'Halo 3', available on: http://edition.cnn.com/2007/TECH/
09/24/halo3.launch.ap/index.html, accessed in January, 2008.
2
DFC Intelligence forecasts video game market to reach $57 billion in 2009, available on
http://www.dfcint.com/wp/?p=222, accessed in July, 2008.
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 53
Practical Approach for the Mobile Game Domain
cause the phone to take too long to start an application; main memory
available – which can obligate the game producer to remove some
features; and application size – mobile phones have a maximum size
for applications, and the smaller the size is, the better for the customer to
reduce costs with download.
•
Different API implementations: Java Micro Edition (JME) (Java
ME, 2008) is the most common platform for mobile phones and Sun
Microsystems is the main sponsor responsible for maintaining the
technology. Sun also sponsors the Java Community Process website 3 ,
which gathers a group of experts in Java technology to standardize the
Java Specification Requests (JSRs). A mobile phone must implement a
minimum set of JSRs to be JME compatible and may extend this set with
any other features. This scenario leads some manufacturers to produce
proprietary implementation for some phone features. As an example, the
sound API is implemented differently in Samsung, Nokia and Motorola
phones. This is another side effect of the big diversity of target handsets.
The characteristics of this challenging scenario can be handled with
software product line engineering practices. The main aspect where a SPL could
help is related to the fact that mobile game producers usually implement many
different games but in the same domain. For example, adventure platformbased side scrolling games. Applying a SPL process could help on performing
the domain analysis and structuring the reference architecture with its variation
points, but, in order to cover the restrictions of the domain mentioned, a SPL
process must provide as many details as possible in the domain implementation
phase. As we discussed in Chapter 3, the main references in the SPL processes
area lack of details in that phase, such as specific guidelines for variability
implementation and well defined inputs, outputs and roles. Moreover,
introducing SPL practices in the game domain requires adaptations, since the
classic software engineering techniques may not apply to that domain (Flynt &
Salem, 2005). There are different types of artifacts, activities, roles, inputs and
3
Java Community Process, available on http://jcp.org/en/home/index, accessed in May, 2008.
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 54
Practical Approach for the Mobile Game Domain
outputs involved during game development (Rucker, 2002). For example, the
typical requirements elicitation and use case modeling phases are differently
performed for games given the dynamic environment where the user can take
distinct actions while playing. In most times, use cases for games can be
dispensed, or better, substituted by a game design document describing game
rules and behaviors (Rucker, 2002). In addition, there are efforts in the industry
to establish a software process tailored for the game development (Flood, 2003)
merging good practices from the well known software processes eXtreme
Programming (XP) (Beck, 1999) and Rational Unified Process (RUP)
(Jacobson et al., 1999).
Taking all those points into consideration, the purpose of this chapter is
to describe a practical approach for implementing core assets in a SPL applied
to the mobile game domain, providing as many details as possible to make the
domain implementation phase feasible.
4.2. Core Assets Development in Software Product
Lines - Towards a Practical Approach for the
Mobile Game Domain
Based on the good practices from different domain engineering and SPL
processes described in Chapter 3, in conjunction with our industrial experience,
we structured an approach to cover the main aspects of the mobile game
domain, as shown in Figure 4.1.
The approach is focused on the domain implementation stage of a SPL,
abstracting the previous stages of domain analysis and design. The whole
process is iterative, although the Figure 4.1 does not show it clearly to avoid
complexity and misunderstandings.
In addition, the approach is divided in three phases: Component
Modeling (Section 4.2.1), Component Implementation (Section 4.2.2),
and Component Testing (Section 0).
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 55
Practical Approach for the Mobile Game Domain
Feature Model
Design
patterns
Legend:
Control
Components
detailed design
Product portfolio
Product map
Domain
architecture
Component
modeling
Domain
expert
Developers
Input
Product map
constraints
Guidelines
Component
implementation
Mechanism
Components
code
Domain
architect /
analyst
Product map
updated
Developers
Output
Tools
support
Applications used
as example to
integrate and test
components
Test Plan
Components
refined and
tested
Component
testing
Testers /
Developers
Component
Repository
Tools
support
Figure 4.1. Approach overview of SPL domain implementation stage applied to the
mobile domain.
It is expected from the former stages of domain analysis and domain
design four mandatory artifacts that are used as input for the domain
implementation and also throughout the three phases. These artifacts are
product portfolio, product map, domain architecture and domain feature
model. Each of them is detailed next. In order to properly apply the approach
proposed in this work, it is highly recommended that all the artifacts’
information is fully provided, following the given examples. Java Micro Edition
(Java ME, 2008) is adopted as the base technology for all examples, since it is
the most popular open platform implemented by current mobile phones. If any
other technology is chosen, those artifacts should be reviewed to reflect the
possible restrictions of the technology.
Product portfolio. It describes all the families of products. In this
approach, it is considered that the families of products are the target handsets in
which the game must run. Each family has a base member, which is used as a
reference for the entire family. Table 4.1 demonstrates an example of product
portfolio. The table groups handset families according to their manufacturers.
Notice that each line of the table contains one family represented by a base
member, which holds common characteristics for the entire family, such as
same processing power and memory size. Commonly, the same hardware
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 56
Practical Approach for the Mobile Game Domain
platform is used for all handsets in a family. The domain restrictions are
detailed in each line of the table in terms of, screen size (column “SCREEN”),
heap memory size (column “HEAP”) and application maximum size (column
“JAR”). All other information, such as MIDP version and comments about the
family, can further help in component modeling phase, specifically in the
component internal design. At the bottom of the table, a list is provided with the
priorities among the families of handsets, helping to decide which product
should be released first. This list is structured based on market needs and
specific project purposes. For example, the “NOKIA_1” family gets the first
priority amongst Nokia phones because it has a very restricted hardware
platform and, once an application is developed for it, it would be easier to port
the same application for other families that are not so restricted.
Table 4.1. Example of product portfolio with priorities among families of handsets.
Manufacturer #1: Motorola
FAMILY
BASE
MOTO_1
i830
MOTO_2
i850
COMPATIBILITY
SCREEN MIDP
HEAP
JAR
MP3
COMMENTS
i830; i265; i275; i560
130x130
2.0
1.1 Mb
4 Mb
Too low fps rate for 3D
games
i850; i870; i880
176x206
2.0
4 Mb
4 Mb
Phonebook access is
made using PIM API
Manufacturer #2: Nokia
FAMILY
BASE
NOKIA_1
3100
NOKIA_2
3220
FAMILY
BASE
SE_1
P900
SE_2
T618
COMPATIBILITY
SCREEN MIDP
HEAP
JAR
2355; 2650; 3100
128x128
1.0
200 kb
64 kb
2600; 2610; 3220; 6020;
6021; 6030; 6230
128x128
2.0
512 kb
128 kb
MP3
COMMENTS
Being shipped in Korea.
Applications must
include Korean
language.
Manufacturer #3: Sony Ericsson
PRIORITY MEMBER
COMPATIBILITY
SCREEN MIDP
HEAP
JAR
P800; P802; P900; P908;
P910;
208x320
1.0
512 kb
1 Mb
T610; T616; T618
128x127
1.0
256 kb
100 kb
MP3
BASE
COMMENTS
COMMENTS
Handsets not
recommended for 3D
applications
1
MOTO_2
i850
This family of handsets was very well sold in Europe and USA
2
MOTO_1
i830
Low end phones. Target: Nextel Brazil next trimester
3
NOKIA_1
3100
First priority amongst Nokia handsets
4
NOKIA_2
3220
5
SE_2
T618
First consult the client to verify the availability of handsets for tests
6
SE_1
P900
Reduced market for this handset family makes the priority low
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 57
Practical Approach for the Mobile Game Domain
Product map. It holds information about main capabilities of products,
including the restrictions inherent to the mobile domain. It also maps the
reference members of the families from product portfolio to the main
capabilities of products. Table 4.2 shows an example of a product map. It
describes the devices general capabilities considering their main configurations,
shown in the table as Variation Levels. It is important to not confuse the
handset capabilities to features, which are represented in the domain feature
model. Any comments about the devices capabilities can help on component
design and implementation. In addition, Table 4.3 shows an example of how to
map families of handsets to its main capabilities. Any comments provided in
this table about family-specific capabilities can be also helpful during
component design and implementation.
Table 4.2. Example of product map.
Capability
Screen Size
Key
Mapping
Sound
Variation
Level #1
130x130
176x206
240x320
Nokia
Motorola
SonyEricsson
Allocation
Mode
Player instance
Known
issues
Variation
Level #2
Comments
Actual size of 176x220, but available size of 176x206
Pre-allocate
At most 8 players at a time
On demand
Block
Player in a separated block
Thread
Sound player in a thread
Network
UDP problem
Memory
No Garbage
Collection
Memory is not deallocated
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 58
Practical Approach for the Mobile Game Domain
Table 4.3. Example of mapping of handset families and their main capabilities in
the product map.
Member
MOTO_1
Capability
Screen Size: 176x206
Keypad Motorola codes
Sound on demand
Comments
Key codes described in family’s properties file
If the allocated players number reach 6, they
must be closed before opening a new one
Player instance in block
No Garbage collection
Screen Size: 130x130
NOKIA_1
Keypad Motorola codes
Sound player preallocated
Player instance in thread
Problem with UDP
packages
This problem implies in reducing the number
of images for the application
Access to entire screen space by using
FullCanvas class
Key codes described in family’s properties file
The UDP protocol has problems. Try using
TCP socket
Domain architecture. Modeled in terms of UML (OMG UML, 2007),
the domain architecture is used to guide the development of new applications in
the target domain. It holds information about the initial structure of application
code and also describes the already identified components. The component
identification and architecture description are both given as input for this
approach. These components are going to be refined during the component
modeling and implementation phase. It is expected from the architecture to be
as clear as possible to allow each new application in the domain to add its
customized features. Figure 4.2 shows an example of the domain architecture.
Figure 4.2. Example of the domain architecture for the mobile game domain.
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 59
Practical Approach for the Mobile Game Domain
Domain feature model. Described in terms of visual models following
well accepted notation, such as FODA (Kang et al., 1990), this artifact shows the
relationships among domain features. The domain feature model can be used to
guide while refining product portfolio and product map throughout the
approach.
Also observing Figure 4.1, we can find five different roles:
•
Domain expert: person who knows the details about the domain being
explored. Usually, this person had already developed many different
projects in the domain.
•
Domain analyst: responsible for analyzing domain features and possibly
refining product portfolio and product map. In general, the domain
analyst is also the domain expert.
•
Domain architect: responsible for modeling components’ internal design
and choosing which variability mechanism is most appropriate for each
component to be developed.
•
Developer: person who actually implements components in the target
technology, in this case JME, based on components’ internal design.
•
Tester: responsible for testing each implemented component separately
and further the product resulting from the component integration and
architecture instantiation.
4.2.1. Component Modeling
The main goal of this phase is to obtain the component detailed design (or
component specification). For this purpose, the domain architect is the most
important role, responsible for analyzing the architecture and modeling the
already identified components. This work does not focus on component
identification, but it can be observed as an important research field as described
in (Almeida, 2007b), which considers the functional dependency among use
cases. Another important research field handles with automatic component
composition (White et al., 2008). As the average size of mobile games, in terms
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 60
Practical Approach for the Mobile Game Domain
of lines of code, tends to be smaller than other projects (Alves et al., 2005b),
such as desktop or console games, the components are easier to identify and the
architecture is not much complex. Thus, component identification and
composition activities can be performed only based on architect experience.
During component modeling, the architect must take into consideration
all information described in product portfolio and product map, because these
artifacts may bring up some restrictions that must be addressed in components’
internal design, such as, a family of handsets which have reduced memory size.
Furthermore, the domain feature model can be used to identify component
dependencies between each other. In order to reduce final component
complexity and increase maintainability, design patterns must be considered
(Gamma et al., 1995).
Before defining the internal component structure, the domain architect
must decide which implementation technique will be used to handle the
variation levels (or variation points) in product map (example in Table 4.2). One
of the most common implementation techniques applied to mobile domain is
conditional compilation (Alves et al., 2006). This technique can be easily
applied to cut off unnecessary code and reduce the final application size.
Although conditional compilation tags can reduce the code readability, there are
tools to perform refactoring steps (Alves et al., 2005b) helping the code to
remain readable. The use of conditional compilation tags does not exclude the
use of any other variability implementation technique, such as, inheritance,
delegation or aspect-oriented programming (AOP).
In order to add the conditional compilation tags for each respective
variation level, the example product map, shown in Table 4.2, and also the
mapping of handset families and their main capabilities, shown in Table 4.3, are
refined. The results are shown in Table 4.4 and Table 4.5, respectively. The
information in Table 4.5 can be used to automatically deploy new products from
product line.
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 61
Practical Approach for the Mobile Game Domain
Table 4.4. Example of product map with conditional compilation tags attached.
Capability
Screen Size
Key
Mapping
Sound
Variation
Level #1
130x130
Variation
Level #2
176x206
screen_176x206
240x320
Nokia
Motorola
SonyEricsson
Allocation
Mode
Pre-allocate
On demand
Block
Player instance
Known
issues
Conditional
Compilation Tag
screen_130x130
Thread
Network
UDP problem
Memory
No Garbage
Collection
Comments
Actual size of 176x220,
but available size of
176x206
screen_240x320
keys_nokia
keys_motorola
keys_sonyericsson
sound_mode_prealloc At most 8 players at a time
sound_mode_ondemand
Player in a separated block
sound_player_block
Sound player in a thread
sound_player_thread
known_issue_network
known_issue_memory
Memory is not deallocated
Table 4.5. Example of mapping of handset families, their main capabilities and the
respective conditional compilation tags.
Member
MOTO_1
NOKIA_1
Screen Size: 176x206
Conditional
Compilation Tag
screen_176x206
Keypad Motorola codes
keys_motorola
Sound on demand
sound_mode_ondemand
Player instance in block
sound_player_block
No Garbage collection
known_issue_memory
Screen Size: 130x130
screen_130x130
Keypad Motorola codes
keys_motorola
Capability
Sound player preallocated
Player instance in
thread
Problem with UDP
packages
Comments
Key codes described in family’s
properties file
If the allocated players number
reach 6, they must be closed
before opening a new one
This problem implies in reducing
the number of images for the
application
Access to entire screen space by
using FullCanvas class
Key codes described in family’s
properties file
sound_mode_prealloc
sound_player_thread
known_issue_network
The UDP protocol has problems.
Try using TCP socket.
To start performing the component specification, the KobrA approach
(Atkinson et al., 2000) is used as a reference and adapted. KobrA approach was
chosen to be adapted because it describes a component using two levels of
abstraction (internal and external point of views) and this makes it easier for
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 62
Practical Approach for the Mobile Game Domain
developers and component users (integrators) to understand the component
behavior. A KobrA component (called as Komponent to abbreviate) is based on
specification and realization models. Both models are composed by a general set
of UML models: specification – functional model, behavioral model, structural
model and decision model; realization – interaction model, execution model,
structural model and decision model (more detailed description of KobrA
approach is provided in Chapter 3).
In this approach, it is discouraged the use of textual models, such as the
decision model, and suggested only the use of a structural model. Doing it this
way may avoid misunderstandings problems with textual representations and
maintenance problems, if the textual model has to reflect the big number of
handset families. On the other hand, it is encouraged the use of the structural
model, which is the base for component implementation, combined with
<<variant>> stereotype to indicate a variant part of the component internal
design, as shown in Figure 4.3. The domain feature model is used to help on
identifying where the <<variant>> stereotype should be applied. Product
portfolio and product map help while designing components to make them
complaint to the game domain restrictions.
Figure 4.3. Example of internal component design (structural model) with the use
of variant stereotype.
Moreover, the components can contain any of the conditional
compilation tags listed in product map. In this situation, the component
internal design should be complemented with additional information that refers
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 63
Practical Approach for the Mobile Game Domain
to which tags are being used by any specific component, as Figure 4.4 shows. It
is perfectly acceptable that not all of the tags are known at the time the
component is being designed. Usually, the tags firstly identified are the ones
directly related to product map restrictions. After actually implementing the
component, its internal design information should be updated to reflect the last
version of code.
Figure 4.4. Example of component internal design with additional information of
the applicable conditional compilation tags.
In order to detail any information about the handset families and their
restrictions, the domain expert may be consulted. Developers may also help on
specifying components and their interfaces, if exist.
4.2.2. Component Implementation
Once the components’ internal design has been accomplished, the developers
are responsible for implementing these components using information from
components’ internal design (structural models), product portfolio descriptions,
product map constraints and domain feature model.
As the developers have participated in the Component Modeling phase,
they are supposed to be familiarized with internal component design and so can
initiate components implementation. The major concern at this point is to code
the domain restrictions and variability within the components specified using
the already known techniques for variability implementation in product lines
(Anastasopoulos
&
Gacek,
2001).
These
techniques
are:
conditional
compilation, aggregation / delegation, inheritance, dynamic class loading,
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 64
Practical Approach for the Mobile Game Domain
properties, parameterization, overloading, design patterns, function libraries
(utility classes), aspect-oriented programming (AOP), reflection and dynamic
link libraries (DLLs). Among these techniques, only two of them, reflection and
dynamic link libraries (DLLs), are not applicable to mobile domain because the
current versions of MIDP/CLDC 2.1/1.1 4 respectively, still do not support them.
In the sequence, for each applicable technique mentioned, guidelines and
good practices of programming are presented through example scenarios to
help developers during component implementation.
Conditional Compilation. It enables control over the code segments
to be included or excluded from a program compilation defined by pre
processing symbols. This technique is largely used in the mobile domain, mainly
because it takes out of the application scope all unnecessary code, leaving the
application as compact as possible to be deployed to different handsets with
completely different capabilities. The major weak point of this technique is
related to maintenance, since the code may become hard to read and also not be
compilable in some environments. To mitigate this issue, support tools can be
used to manage conditional compilation tags and then make it easier to build
applications in the environment they are being deployed. Conditional
compilation can become a powerful technique to be used when correctly
combined with others techniques and good programming practices. Throughout
the description of the other variability implementation techniques next,
conditional compilation will be also explored, showing how to combine this
technique with the others.
Example Scenario for Conditional Compilation. One common situation
where conditional compilation can be used is when it is needed to add an
optional feature to a specific product in the product line without increasing the
other products size. For example, if one specific customer needs to add its logo
on the first screen of the game, usually called “splash” screen. The code
responsible to instantiate the logo image and paint it on screen should be
4
The Mobile Information Device Profile (MIDP), when combined with the Connected Limited Device
Configuration (CLDC), is the Java runtime environment for today's most popular compact mobile
information devices, such as cell phones and mainstream PDAs.
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 65
Practical Approach for the Mobile Game Domain
embraced by conditional compilation tags, as shown in the following code
snippet. Doing it this way, will not cause the other products to have its final size
increased.
public class SplashScreen extends Canvas {
protected void paint(Graphics g) {
// ... Default painting
//#ifdef logo_x_customer
g.drawImage(ImageResource.getInstance().getCustomerXLogo(), 0, 0,
Graphics.TOP | Graphics.LEFT);
//#endif
// ...
}
}
class ImageResource {
// ... Singleton instantiation
//#ifdef logo_x_customer
private Image customerXLogo;
public Image getCustomerXLogo() {
if (this.customerXLogo == null) {
try {
this.customerXLogo= Image.createImage("/customer_x_logo.png");
} catch (IOException e) {
e.printStackTrace();
}
}
return this.customerXLogo;
}
//#endif
}
Aggregation/Delegation. Aggregation is an object oriented technique
which enables objects to virtually support any functionality by forwarding
requests they can normally not satisfy to so-called delegation objects which
provide the requested services. Delegation is explored by different design
patterns, but it is common to see Delegation with used with facade pattern.
Example Scenario for Aggregation/Delegation. This technique is usually
necessary when a given object has different functionalities and needs to delegate
some services to another object. For example, if it is needed to isolate the sound
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 66
Practical Approach for the Mobile Game Domain
component and delegate specific functionality to a sound controller and a player
controller. The suggested approach to use Aggregation/Delegation is to combine
it with conditional compilation tags and isolate these tags in delegated object,
embracing its whole method bodies. Try to maintain the tags only inside these
methods. Other methods that call the delegated one must not be embraced by
the tags to avoid spreading tags all over the code. The following code snippet
represents delegation technique combined with conditional compilation tags.
public class SoundFacade {
public void playSnd(String filename) {
// No tags in here
SoundCtrl.playSnd(filename);
}
public void preallocatePlayers(int initialNumberOfPlayers) {
// No tags in here
PlayerCtrl.preallocatePlayers(initialNumberOfPlayers);
}
}
class SoundCtrl {
static void playSnd(String filename) {
// Entire delegated method body embraced by tags
//#ifdef sound_player_block
//sound code 1
//#elif sound_player_thread
//sound code 2
//#endif
}
}
class PlayerCtrl {
static void preallocatePlayers(int initialNumberOfPlayers) {
// Entire delegated method body embraced by tags
//#ifdef sound_mode_prealloc
//sound code 1
//#endif
}
}
Inheritance. It is used to assign basic functionality to super classes and
extensions to subclasses. Inheritance should be used carefully in mobile domain
because the basic functionality present on super classes has to be really
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 67
Practical Approach for the Mobile Game Domain
applicable for all subclasses to avoid unused methods and consequent increase
of the final application size.
Example Scenario for Inheritance. Consider a game where projectiles are
shot in the direction of the player and they can make a straight or curve path,
according to the handset screen size in which the game will run. An abstract
super class Projetctile and two subclasses, FireBall and Missile, are defined. In
this typical situation, it is recommended that the entire subclasses’ bodies are
embraced by conditional compilation tags according to the target handset
screen size. The following code snippet represents inheritance technique
combined with conditional compilation tags.
class Player {
private int lifePercentage = 100;
public void damage(int damagePercentage) {
this.lifePercentage = this.lifePercentage - damagePercentage;
}
}
public abstract class Projectile {
public abstract void followPlayerAndDamage (Player player);
}
//#ifdef screen_130x130
class FireBall extends Projectile {
public void followPlayerAndDamage(Player player) {
// Code to follow player in a straight line path
player.damage(15);
}
}
//#endif
//#ifdef screen_176x206
class Missile extends Projectile {
public void followPlayerAndDamage(Player player) {
// Code to follow player in a curve path
player.damage(25);
}
}
//#endif
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 68
Practical Approach for the Mobile Game Domain
Dynamic Class Loading. This is an automatic function of Java
language and allows loading a class in memory only at the first time the class is
going to be used. The main objective of this function is to try to reduce the total
amount allocated. In a SPL, different classes can be loaded in memory according
to different functionalities of different products. In order to avoid unnecessary
classes loaded in memory, factory design pattern can be used to manage objects
in memory according to the specific product of the SPL. We do not recommend
the use of dynamic class loading for implementing variabilities in the mobile
game domain, since it does not save any resources in terms of application size. If
it is known that a specific class is not used in some products in the SPL, then the
class and the calls to it should be embraced by conditional compilation tags.
Thus, in the products that do not make use of that class, it would not even be
present.
Example Scenario for Dynamic Class Loading. One typical situation
where dynamic class loading is applied is when a method call of some specific
class is made inside an if block. If no other methods of that class had been
previously called, then the class has not been loaded into memory yet. For
example, in the following code snippet, the Sound3DManager class will only be
loaded into memory if the condition of isSound3DEnabled is true. Therefore, to
save application size resources, the if block must be replaced by conditional
compilation tags, as well as the Sound3DManager class should be embraced by
them.
public class GameControl {
private boolean isSound3DEnabled = false;
/**
* This method is constantly called to update game current state.
*/
public void updateGame(){
// Code to update all game states
// Replace 'if' by conditional compilation tag
if (this.isSound3DEnabled) {
Sound3DManager.getInstance().updateSound3DScene();
}
}
}
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 69
Practical Approach for the Mobile Game Domain
// Embrace entire class with conditional compilation tags
class Sound3DManager {
public static Sound3DManager getInstance() {
return INSTANCE; // Singleton instance
}
public void updateSound3DScene() {
// Code to update sound 3D scene
}
}
Properties. Properties files can be used as a powerful technique to
group all characteristics of a given device. For example, the set of conditional
compilation tags, the name of resources folder, the set of all handsets in that
specific family, all these information can be in a property file to be read during
application deployment or even at runtime to execute certain functions.
Example Scenario for Properties. A common example of use of
properties file is when the mobile application needs to be translated to different
languages. All application texts are stored in a properties file, each text
identified by an ID. For each different language needed, a different properties
file is created. At compilation time, a build script selects from different
properties files and creates the application archive (JAR file). It means that, for
each different language, there will be a different JAR file. The following code
snippet shows the basic structure of a properties file.
Properties-en-us.txt
SPLASH_TEXT = Welcome to this wonderful game
MENU_NEW_GAME = New Game
MENU_SETTINGS = Settings
MENU_EXIT = Exit Game
QUESTION_EXIT = Are you sure you want to exit the game?
Properties-pt-br.txt
SPLASH_TEXT = Bem-vindo a este jogo maravilhoso
MENU_NEW_GAME = Novo Jogo
MENU_SETTINGS = Configurações
MENU_EXIT = Sair do Jogo
QUESTION_EXIT = Você tem certeza que deseja sair do jogo?
Parameterization. The behavior of the method being called is
determined by the values of the parameters that are being set. Parameterization
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 70
Practical Approach for the Mobile Game Domain
should be used carefully, since it can generate code that represents OO antipatterns. Good programming practices say that if a method gets a large number
of parameters, then encapsulate it in an object and pass it as one unique
parameter. To not increase the complexity of the parameterized method, it
should delegate the correspondent functionality to a specific method and this
last is responsible for executing the requested functions.
Example Scenario for Parameterization. Given the diversity of mobile
phones, it is common to see mobile phones supporting different media file
types. One example where the parameterization can be a good solution is when
there is a method responsible for playing different types of sounds according to
the content type passed as parameter, as shown in the following code snippet.
As it was mentioned, in order to avoid complexity, the method checks the
parameter and then delegates the operation for each specific method. The body
of the delegated method should be embraced by conditional compilation tags to
cut off unnecessary code in handset families that do not support a specific type
of media file. In summary, the use of parameterization technique is
recommended to be combined with delegation and conditional compilation tags.
class SoundManager {
public void playSoundFile(int contentType, String file) {
switch (contentType) {
case CONTENT_TYPE_MIDI:
this.playMidi(file);
break;
case CONTENT_TYPE_MP3:
this.playMp3(file);
break;
}
}
private void playMidi(String file){
//#ifdef sound_mid_supported
/*method body*/
//#endif
}
private void playMp3(String file){
//#ifdef sound_mp3_supported
/*method body*/
//#endif
}
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 71
Practical Approach for the Mobile Game Domain
}
Overloading. It means reusing an existing name, but using it to operate
on different types. This name or symbol can be assigned to functions,
procedures or operators. Just as parameterized methods afore mentioned,
overloaded method bodies should be embraced by conditional compilation tags.
This technique must be used with care in order not to add unnecessary
functionalities to components.
Design Patterns. As it was already mentioned, some design patterns
may be used in conjunction with other techniques to manipulate variability at
code level, such as: factory, delegate, facade, among others.
Example Scenario for Design Patterns. Typically in the mobile game
domain, factory design pattern can be used with dynamic class loading to
provide lazy instantiation of resources in memory. Mobile games usually make
use of many images and frequently needs to load and unload image resources in
memory. The following code snippet shows an example of factory pattern with
lazy instantiation of image in memory. The dispose methods provide a way to
unload resources from memory.
public class ImageFactory {
private Image menuBackground;
private Image fireball;
public Image getMenuBackground() {
if (this.menuBackground == null) { // Lazy instantiation
// Instantiate image
}
return this.menuBackground;
}
public Image getFireball() {
if (this.fireball == null) { // Lazy instantiation
// Instantiate image
}
return this.fireball;
}
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 72
Practical Approach for the Mobile Game Domain
private void disposeInGameImages() {
this.fireball = null;
}
private void disposeMenuImages() {
this.menuBackground = null;
}
}
Function Libraries (Utility Classes). One of the most powerful ways
to apply software reuse is to maintain a library of methods/functions and/or
components, just as in (McIlroy, 1968). The library can contain mathematical
functions, network connections manager components, image processing
functions, among others. It can be properly applied to the mobile domain
context without restrictions. As it is possible that some products in the product
line do not use some of the methods, a suggestion for reusing such a library in
mobile domain is applying a tool to cut unused methods off the library during
the deployment process. An obfuscator tool, such as ProGuard 5 , usually
performs this operation as a side effect of the obfuscation process.
Example Scenario for Function Libraries (Utility Classes). Mounting a
function/method library in the mobile game domain is usually necessary when
the required functionalities are not present in the native API, for example,
Calendar class to manipulate dates or complementary String and Image
manipulation. This last example is shown in the following code snippet. Notice
that all methods are public and static and must be well documented to ease their
future reuse.
5
ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes
unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions.
Available on http://proguard.sourceforge.net/, accessed in November, 2007.
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 73
Practical Approach for the Mobile Game Domain
public class StringUtil {
/**
* Wraps text in lines that fit the screen.
*
* @param s String to be wrapped.
* @param font Font used to draw the String.
* @param maxLineSize Maximum number of horizontal pixels to draw
*
the given text.
* @return A String array where each position is a screen line
*
of text.
*/
public static String[] wrapText(String s, Font font,
int maxLineSize) { /* Method body */ }
}
public class ImageUtil { // Different package from StringUtil class
/**
* Creates an image in Gray Scale mode from the original image given
* as parameter.
*
* @param original An image to be converted.
* @return Image The desired image in a Gray Scale mode.
*/
public static Image toGrayScale(Image original) {/* Method body */}
}
Aspect-Oriented Programming (AOP). As it was already mentioned,
mobile games must adhere to strong portability requirements. Service carriers
typically demand that a single application be deployed in a dozen or more
platforms. Each platform generally has different kinds of variation, such as,
vendor-specific APIs and memory and display constraints. These specific kinds
of variation may sometimes be considerably fine-grained such that they
generally crosscut the game core and are tangled with other kinds of variation.
Aspect-Oriented languages support the modular definition of concerns that are
generally spread throughout the system and tangled with core features. These
are called crosscutting concerns and their separation promotes the construction
of a modular system, avoiding code tangling and scattering.
AspectJ (AspectJ, 2008) is the most widely used aspect-oriented
extension to Java. Programming with AspectJ involves both aspects and classes
to separate concerns. Concepts which are well defined with object-oriented
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 74
Practical Approach for the Mobile Game Domain
constructs are implemented in classes. Crosscutting concerns are usually
separated using units called aspects, which are integrated with classes through a
process called weaving. Thus, an AspectJ application is composed of both
classes and aspects. Therefore, each AspectJ aspect defines a functionality that
affects different parts of the system. Aspects may define pointcuts, advice and
inter-type declarations. Pointcuts describe join points, which are sets of points
of the program execution flow. Code to be executed at join points is declared as
advice. Inter-type declarations are structures that allow the introduction of
fields and methods into a class.
Applying AOP to mobile product lines can be an interesting approach to
reduce development efforts while porting mobile applications (Alves et al.,
2006). In an attempt to adopt AOP in mobile game projects, tools are being
defined to facilitate while automatically extracting aspects from different
versions of the same mobile game producing a product line (Calheiros et al.,
2007).
Example Scenario for AOP. There plenty examples to be used in order to
demonstrate a cross-cutting concern. The following code snippet shows a basic
example of this. Considering the context of a race game, as can be seen in the
GameControl class, two methods are defined to check the player collisions with
the walls and other cars (enemies). In the end of the two methods, there is a call
to another method responsible for vibrating the device if a collision occurs.
Observing the code, it can be seen that different concerns are tangled, for
instance, the one responsible for checking the collision with walls and the other
one responsible for vibration.
public class GameControl {
private PlayerCar playerCar = new PlayerCar();
public void updateGame(){
// Update player position
this.checkCollisionWithEnemies(
this.playerCar.getCurrentPosition());
this.checkCollisionWithEnemies(
this.playerCar.getCurrentPosition());
}
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 75
Practical Approach for the Mobile Game Domain
public void checkCollisionWithWall(float[] position3D){
boolean hit = false;
// Code for verifying collision with walls
//#ifdef NOKIA_2
if (hit) {
// Vibrate for 100 milliseconds
}
//#endif
}
public void checkCollisionWithEnemies(float[] position3D) {
boolean hit = false;
// Code for verifying collision with other enemies
//#ifdef NOKIA_2
if (hit) {
// Vibrate for 100 milliseconds
}
//#endif
}
}
This presented code snippet shows a typical scenario where AOP is
indicated: when different concerns are tangled. Moreover, it is important to
notice that the same code called in the two methods is embraced by conditional
compilation tags (#ifdef NOKIA_2). In this case, AOP can be even more
powerful to avoid spreading conditional compilation tags all over the code. The
following code snippet shows a possible solution using aspects.
public class GameControl {
private PlayerCar playerCar = new PlayerCar();
public void updateGame(){
// Update player position
this.checkCollisionWithEnemies(
this.playerCar.getCurrentPosition());
this.checkCollisionWithEnemies(
this.playerCar.getCurrentPosition());
}
public void checkCollisionWithWall(float[] position3D){
boolean hit = false;
// Code for verifying collision with walls
}
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 76
Practical Approach for the Mobile Game Domain
public void checkCollisionWithEnemies(float[] position3D) {
boolean hit = false;
// Code for verifying collision with other enemies
}
}
aspect VibrateDevice {
after(GameControl gc, boolean hit):
execution(void GameControl.checkCollisionWithWall(float[]))
&& this(gc) && args(hit){
gc.vibrate(hit);
}
after(GameControl gc, boolean hit):
execution(void GameControl.checkCollisionWithEnemies(float[]))
&& this(gc) && args(hit){
gc.vibrate(hit);
}
private void GameControl.vibrate(boolean hit) {
if (hit) {
// Vibrate for 100 milliseconds
}
}
}
Besides the described techniques, one approach that is commonly
mentioned in combination with reuse and SPL research fields is OSGi (Almeida
et al., 2008). The OSGi Service Platform provides the functions to change the
component composition dynamically on the device of a variety of networks,
without requiring restarts. To minimize the coupling, as well as make these
couplings managed, the OSGi technology provides a service-oriented
architecture that enables these components to dynamically discover each other
for collaboration. The components in OSGi platform are assembled in terms of
bundles and it would be handy to apply the variability implementation
techniques early described in conjunction with OSGi. However, the Java
Specification Request (JSR) 232 (JSR-232, 2008), which enables OSGi platform
for the mobile environment, has not got many adopters. This is mainly because,
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 77
Practical Approach for the Mobile Game Domain
to enable OSGi, deep changes would be necessary in the MIDlet 6 life cycle
manager to let two different JME applications share the same resources, such as
a shared component library. Moreover, OSGi needs at least a Connected Device
Configuration (CDC) to run and the majority of mobile phones only implement
Connected Limited Device Configuration (CLDC). For now, few JSR-232
capable handsets have been announced by the main manufacturers making the
usage of OSGi in the mobile applications environment not practical.
Based on component specification (structural model) as mentioned in the
last section, and also on the product portfolio and product map descriptions
considering the conditional compilation tags, the developers can implement the
reusable components (SPL core assets) following the guidelines described in
this section.
It is important to mention that this work is not focused on
providing a decision model to aid on choosing which variability implementation
technique is the more appropriate to be used in a given context. After
implementation, developers should update components documentation in
conjunction with internal design to reflect the information in product map and
portfolio. This documentation should provide the following information:
•
Groups of conditional compilation tags and the respective dependencies
among them: specifying which are the dependencies among the tags in
the components code may facilitate the deployment of new products and
the use of a tool to automate the deployment process.
•
Memory usage: an estimation of how much memory the components
consume can help to decide whether the final application can be suitable
for a given handset or not.
•
Total component size in JAR file: the components size may vary
according to the conditional compilation tags used in deployment
process. So, it is important to provide the information about how big is a
component in terms of which group of conditional compilation tags was
used to build it up.
6
Every JME application is defined by a MIDlet, It is the basic class that allows the Java Virtual Machine
to initiate a JME application. It is equivalent to the main method of a Java Standard Edition (JSE)
application
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 78
Practical Approach for the Mobile Game Domain
Table 4.6 shows an example of such component documentation. It may
be very useful during component maintenance and SPL expansion to deploy
new products based on the developed infra structure.
Table 4.6. Example of component documentation after its implementation.
Component
Sound
Applicable Conditional
Compilation Tags
sound_mode_prealloc
sound_mode_ondemand
sound_player_block
sound_player_thread
sound_3D
Dependencies
Estimated
Memory Usage
Estimated
Size in JAR
Minimum:
~55KB
issue_mem
sound_loop
Maximum:
~200KB
38KB
At the end of component implementation phase, it is important to
reevaluate the attributes described in product portfolio and product map to
verify if the components attend to those characteristics. Not less important is to
verify the components integration with the domain architecture. This
verifications can be done
4.2.3. Component Testing
Once the components have been implemented, they must be tested to ensure
they are working properly. The scope of these tests is much more related to unit
tests. Another appropriate way to ensure component quality can be a
certification process (Alvaro at al., 2007) or a component testing approach
(Silva et al., 2008). The main inputs for this phase are: the components code,
example applications used to integrate and test those components and a test
plan.
An example application can be either an instantiated product of the SPL
or a simple application developed to test component basic functionality. This
information about how a specific component is going to be tested should be
provided in test plan.
The test plan should be structured based on the information of product
portfolio and product map. It is suggested that the tests are focused on the base
members of the families, since it is not viable to test all the members of all
families. It is implicit that if a component is working well in the base member of
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 79
Practical Approach for the Mobile Game Domain
the family, it will work properly on the other members of that family. At least, it
is what is expected from the handset manufacturers when they produce
different handsets of the same family and usually with the same hardware
platform.
Depending on how test plan is made, it can be similar to a specific
product test plan, for example, testing specific functionality of a component in
Motorola handsets using specific steps. In summary, it means that specific
variabilities are supposed to be tested in test plans of specific products. In
addition, there should be a domain test plan, which is related to the domain
commonalities among different families of handsets and this test plan can be
used across the different families. This work does not focus on component
testing as different works have been exploring issues related to the subject. For
further investigation on component testing issues, there is one work at RiSE
group that aims directly on that (Silva et al., 2008).
4.3. Chapter Summary
In this chapter, it was described a practical approach for implementing core
assets in the mobile game domain. The approach is intended to supply the lack
of details in domain implementation phase of other SPL processes, detailed in
Chapter 3, and to cover the restrictions of the mobile game domain. These
restrictions are, for example, the short schedules of mobile game projects, the
big diversity of target handsets, which causes diverse problems involving
hardware restrictions, processing power, memory size and application size, and
the different API implementations. The approach is divided in three main
phases (Component Modeling, Component Implementation and Component
Testing) and clearly defines activities, inputs, outputs, and roles, as shown in
Table 4.7. Guidelines are provided throughout the Component Implementation
phase in order to ease the approach understanding and adoption.
Some related work could be identified in this research. As it was already
mentioned, Chapter 3 shows nine SPL processes and seven domain engineering
processes, all of them considered relevant to the software reuse field, but they
still need adaptations to be properly used in the mobile applications domain.
Chapter 4 – Core Assets Development in Software Product Lines - Towards a 80
Practical Approach for the Mobile Game Domain
Moreover, some related work specifically in the mobile game domain could be
identified, including an adaptation of a SPL process to the mobile domain,
refactoring tools and strategies to use aspect-oriented programming to structure
a product line. Related work is discussed with more details in Chapter 6.
Table 4.7. Summary of the approach for core assets development in a SPL applied
to the mobile game domain.
Phases
Component
Modeling
Component
Implementation
Activities
Inputs
Outputs
Specify
components’
internal design
Domain
architecture
(including
components
identification)
Domain feature
model
Components’
internal design
with possible
conditional
compilation tags
Refine product
map with
conditional
compilation tags
Product portfolio
and product map
Refined product
map
Code and
document
components
Domain
architecture
Domain feature
model
Components’
internal design
Components’
code and
documentation
associated
Developers
Refine
conditional
compilation tags
in product map, if
applicable
Product portfolio
and product map
Possibly refined
product map
Domain
architect
Domain test cases
and applicationspecific test cases
Testers with
possible
developers help
Test results
Testers
Specify test cases
Component
Testing
Execute test cases
Product portfolio
and product map
Components’
internal design
Components’
code and
documentation
associated
Example
Applications
Roles
Domain expert,
domain architect
and possibly
developers
In the next chapter, an experimental study is described in details in order
to evaluate the proposed approach.
5
“Progress
An Experimental
Study in the Mobile
Game Domain
comes
from
the
intelligent use of
experience”
Elbert Hubbard (1856 – 1915)
American writer and philosopher
The information technology revolution has meant, among other things, that
software has become a part of more and more products ranging from toasters to
space shuttles. It indicates that a vast amount of software has been and is being
developed. However, software development is not an easy task; it is a highly
creative activity (Glass & DeMarco, 2006) which demands the use of a software
process. According to (IEEE Std, 1990), a software process is “the application of
a systematic, disciplined, quantifiable approach to development, operation
and maintenance of software”. Considering the benefits of the use a software
process can bring, such as productivity gains and cost reductions (Rozum,
1993), organizations are continuously trying to improve their software process.
In this context, for a software company to achieve the necessary
improvements of its software process, it needs a systematic and disciplined
approach of working (Wohlin et al., 2000).
One problem that arises is that a process improvement is very hard to
evaluate without human involvement directly. In the case of products, it is
possible to build a prototype to evaluate it. However, for a process it is not
possible to build a prototype. It is possible to make simulations and compare
different processes, but it should be remembered that this is still an evaluation
based on a model. The real evaluation of a process or process improvement is to
Chapter 5 – An Experimental Study in the Mobile Game Domain
82
have people using it (Wohlin et al., 2000). Empirical studies are crucial to the
evaluation
of
processes
and
human-based
activities.
In
addition,
experimentation provides a systematic, disciplined, quantifiable and controlled
way of evaluating human-based activities (Wohlin et al., 2000). It has been used
in many fields, e.g., physics, medicine, manufacturing, however, in the software
engineering field, this idea started to be explored in the 1970s with the work of
Victor Robert Basili from University of Maryland (Boehm et al., 2005).
According to (Basili, 1996), like other disciplines, software engineering
requires the same high level approach for evolving the knowledge of the
discipline: the cycle of model building, experimentation and teaming, since we
cannot rely solely on observation followed by logical thought. It involves an
experimental component in order to test or disprove theories, to explore new
domains.
Therefore, this chapter presents an experimental study in order to
evaluate the approach proposed in Chapter 4 involving core assets
implementation in the mobile game domain. Before the actual description of the
experimental study, some definitions are introduced to clarify the whole
experiment.
5.1. Introduction
To execute an experimental study, (Wohlin et al., 2000) proposed a process that
should be followed, which is composed of five phases: definition, planning,
operation, analysis and interpretation, and optionally presentation
and package.
Conducting an experiment is a labor-intensive task. The purpose of the
definition phase is to define the goals of an experiment, helping on better
scoping the activities during the whole experiment. For defining the goals of the
experiment, the Goal Question Metric (GQM) (Basili et al., 1994) approach is
followed. The approach is based upon the assumption that for an organization
to measure in a purposeful way it must first specify the goals for itself and its
projects, then it must trace those goals to the data that are intended to define
those goals operationally, and finally provide a framework for interpreting the
data with respect to the stated goals. The result of the application of the GQM
Chapter 5 – An Experimental Study in the Mobile Game Domain
83
approach application is the specification of a measurement system targeting a
particular set of issues and a set of rules for the interpretation of the
measurement data. The resulting measurement model has three levels:
•
Conceptual level (Goal): a goal is defined for an object, for a variety of
reasons, with respect to various models of quality, from various points of
view, relative to a particular environment.
•
Operational level (Question): a set of questions is used to characterize
the way the assessment/achievement of a specific goal is going to be
performed based on some characterizing model.
•
Quantitative level (Metric): a set of data is associated with every
question in order to answer it in a quantitative way.
In summary, a GQM model is a hierarchical structure, as shown in Figure
5.1, starting with a goal (specifying purpose of measurement, object to be
measured, issue to be measured, and viewpoint from which the measure is
taken). The goal is refined into several questions and each question is then
refined into metrics.
Figure 5.1. GQM Hierarchical model (Basili et al., 1994).
After the definition of the experiment, the planning takes place. While
the definition determines the foundation for the experiment, i.e., why the
experiment is conducted, the planning prepares for how the experiment is
conducted. This phase involves activities such as context selection, hypotheses
formulation, dependent and independent variable selection and selection of
subjects.
After the experiment has been designed and planned, it must be carried
out in order to collect the data that should be analyzed and this is the
Chapter 5 – An Experimental Study in the Mobile Game Domain
84
operation phase of an experiment. After preparing the experimental
environment, the experiment is executed and, in this phase, it is when the
subjects are actually involved. At the end of this phase, measurements are
collected.
After collecting experimental data in the operation phase, it is necessary
to draw conclusions based on this data and so analysis and interpretation
phase takes place. The main goal of this phase is to analyze the data by
hypothesis testing.
Finally, an optional phase may be performed to help on presenting the
findings of the experiment. The presentation and package phase helps on
structuring reports of the experiment for improving understanding and
interpretation of possible readers.
5.2. The Experimental Study
Following the organization proposed by (Wohlin et al., 2000), we structured an
experimental study to evaluate the practical application of the approach
described in the last chapter in the mobile game domain. Sometimes the future
tense is used, symbolizing the precedence of the plan in relation to its execution.
5.2.1. The Definition
As afore mentioned, the definition phase of the experimental study uses the
GQM paradigm (Basili et al., 1994). The following subsections present the goals,
questions and metrics for the experiment.
5.2.1.1.
G1.
Goal
To evaluate the approach for core assets development in a SPL
applied to the mobile game domain in terms of efficiency and appropriate
management of domain restrictions, including traceability from domain
features to code level, from the point of view of practitioner in the context of
software product line projects.
Chapter 5 – An Experimental Study in the Mobile Game Domain
5.2.1.2.
85
Questions
Q1.
Does the approach generate components with low complexity?
Q2.
Does the approach manage the domain restrictions, such as
application size, different screen sizes and different API implementations?
Q3.
5.2.1.3.
M1.
Can the approach map domain features to code level?
Metrics
Component Complexity. A challenge in software engineering is
related to how to modularize a system in order to result in modules or
components that are well defined, testable and maintainable. During the 70s,
McCabe developed a mathematical technique (McCabe, 1976), providing a
quantitative basis for modularization and identifying software modules that will
be difficult to test or maintain. In this technique, the complexity is measured in
terms of the number of paths through a program, called cyclomatic complexity.
This measure is also useful to keep the size of the modules manageable and
allow the testing of all the independent paths. Therefore, the component
complexity metric will be defined in terms of cyclomatic complexity, which is
calculated from a connected graph of the module (or component):
CC(G) = E – N + p, where:
E = the number of edges of the graph
N = the number of nodes of the graph
P = the number of connected components
The properly interpretation of this metric, based on research performed
in the Software Engineering Institute (SEI, 1997), is based on four different
intervals for the values: 1 and 10, it is a simple program, without much risk;
between 11 and 20, it represents a more complex program, with moderate risk;
between 21 and 50 represent, it is a complex program, with high risk; and
greater than 50, which represents a program impossible to be tested and
presents a high risk.
We decided to use classic Object Orientation metrics to evaluate the
process because they are more well-established after years of experience with
case studies and experiments. Reuse-specific metrics, although more suited to
Chapter 5 – An Experimental Study in the Mobile Game Domain
86
this context, still needs more experimentation (Mascena et al., 2005). Moreover,
the mobile game domain has already reached a quite complex level in terms of
object oriented metrics given the diversity of handsets and increasing number of
different games. Then, the component complexity metrics can be appropriately
applicable for mobile games.
M2. Domain Restrictions Management. As it was already
mentioned, the mobile applications domain has specific characteristics different
from other domains, which may restrict the use of a SPL approach. In order to
make feasible the application of such approach, the restrictions related to
application size, different screen sizes and different API implementations, for
example, must be considered. In this context, three metrics related to
restrictions managements can be used:
NFA: %Product families which have the restriction of application size
mapped at code level.
NFS: %Product families which have the restriction of different screen
sizes mapped at code level.
NFI: %Product families which have the restriction of different API
implementations mapped at code level.
As these metrics have never been used before, there are no well known
values for them. The practical experience in projects in this direction at the
Recife Center for Advanced Studies and Systems (C.E.S.A.R) 1 and common
sense were used to define these values. Thus, a percentage above 50% for all
three metrics is considered as a good indicative that the approach can manage
the mobile applications restrictions.
M3. Traceability Level. One of the main concerns related to software
processes is the traceability among artifacts. In practice, however, some artifacts
may not be traceable. For example, a domain feature model presents five main
features, but these features may not be traced to the defined components and
also the variabilities of these features can not be traced to code level. In this
context, maintaining traceability between features and code artifacts in a high
1
Recife Center for Advanced Studies and System – C.E.S.A.R, available on http://www.cesar.org.br,
accessed in January, 2008.
Chapter 5 – An Experimental Study in the Mobile Game Domain
87
level can bring evidences that an appropriate level of details has been used in
the phases of the process related to artifacts implementation. In order to better
managing the traceability among artifacts and the appropriateness of process’
level of details in the phases related to artifacts implementation, two metrics are
defined:
TFComp:
%Features that can be mapped to components.
TFCode:
%Features that can be mapped to code (respective conditional
compilation tags).
Also based on practical experience, as mentioned in metric M2, an
acceptable value for the two metrics of traceability level is a value above 70%.
5.2.2. The Planning
After the definition of the experimental study, the planning is started. The
definition determines the foundations for the experiment, the reason for it,
while the planning prepares for how the experiment is conducted.
Context. The objective of the experimental study is to evaluate the SPL
approach in a mobile game project. This project will be conducted in a
university laboratory with the requirements defined by experienced staff based
on real-world projects. The study will be conducted as single object study which
is characterized as being a study which examines an object on a single team and
a single project (Basili et al., 1986).
Training. It is assumed that the subjects are already familiarized with
concepts related to software reuse, such as, variability, component-based
development, domain engineering and software product lines and, then, they
can understand the proposed approach by only reading it, without the necessity
of training.
Pilot Project. Before performing the study, a pilot project will be
conducted with the same structure defined in this planning. The pilot project
will be performed by a single subject, who is already familiarized with the
proposed approach. In this way, the pilot project will be a study based on
observation, aiming to detect problems and improve the proposed approach.
Chapter 5 – An Experimental Study in the Mobile Game Domain
88
Subjects. The subjects of the study will be requested to act as the roles
defined in the approach (domain expert, domain analyst, domain architect,
developer and tester). Nevertheless, during the project, one subject can have
more than one role depending of the context, e.g., domain analyst in the
beginning and domain architect in next the step.
Instrumentation. All the subjects will have access to the guidelines
provided by the proposed approach in order to better implementing the core
assets.
Criteria. Some criteria will be used in order to evaluate the benefits of
the approach and its appropriateness for the domain being explored. The
benefits will be evaluated quantitatively in terms of components complexity,
using McCabe cyclomatic complexity, domain restrictions management and
traceability, by observing product map and portfolio and its correspondence to
implemented code.
Null Hypotheses. These are the hypotheses that the experimenter
wants to reject with as high significance as possible. Therefore, according to the
selected criteria, the following hypotheses can be defined:
H0: μthe approach generates components with CC >= 21
H0: μNFA <= 50%
H0: μNFS <= 50%
H0: μNFI <= 50%
H0: μTFComp <= 70%
H0: μTFCode <= 70%
Alternative Hypotheses. These are the hypotheses in favor of which
the null hypotheses are rejected. Thus, the following hypotheses can be defined:
H1: μthe approach generates components with CC < 21
H1: μNFA > 50%
H1: μNFS > 50%
H1: μNFI > 50%
Chapter 5 – An Experimental Study in the Mobile Game Domain
89
H1: μTFComp > 70%
H1: μTFCode > 70%
Independent variables. The independent variable considered in this
experimental study is the expertise of the subjects in the mobile applications
domain. The expertise is measured in terms of the subjects experience in the
software reuse area and mobile domain through interviews.
Dependent variables. The dependent variables are the quality of the
components and product map/portfolio information, as well as the number of
product families. The components quality will be measured by their complexity
(McCabe cyclomatic complexity). The product map/portfolio quality will be
measured by the traceability level and the number of families will be measured
in terms of domain restrictions management.
Randomization. This technique can be used in the selection of the
subjects. Ideally, the subjects must be selected randomly from a set of
candidates (Wohlin et al., 2000). In this study, it was not necessary to
randomize the subjects, once the approach focus on people with expertise in the
mobile domain.
Blocking. Sometimes, there is a factor that probably has an effect on the
response, but the experimenter is not interested in that effect. If the effect on
the factor is known and controllable, is possible to use a design technique called
blocking. Blocking is used to systematically eliminate the undesired effect in the
comparison among the treatments. In this study, it was not identified the
necessity of dividing the subjects into blocks, since the study will evaluate just
one factor, which is the use of the approach.
Balancing. In some experiments, balancing is desirable because it
simplifies and strengthens the statistical analysis of the data. However, in this
study it is not necessary to divide the subjects, since there is only one group.
Internal Validity. The internal validity of the study is defined as the
capacity of a new study to repeat the behavior of the current study, with the
same subjects and objects with which it was executed (Wohlin et al., 2000). The
internal validity of this study is dependent of the number of target handsets,
Chapter 5 – An Experimental Study in the Mobile Game Domain
90
because the approach is not intended to specifically handle activities of porting
mobile applications to a big number of target handsets. To guarantee a good
internal validity, this study is supposed to handle at most 5 different families of
handsets with at most 5 target handsets arranged in each family. This is an
empirical number from practical experience to avoid the approach to be focused
only on applications porting.
External Validity. The external validity of the study measures its
capability to be affected by the generalization, i.e., the capability to repeat the
same study in other research groups (Wohlin et al., 2000). In this study, a
possible problem related to the external validity is the subjects’ motivation,
since some subjects can perform the study without responsibility or without a
real interest in programming, which is a heavy executed activity in an industrial
mobile game project. The external validity of the study is considered sufficient,
since the subjects are previously selected with experience in the mobile game
domain which implies they are motivated.
Construct Validity. The validation of the construction of the study
refers to the relation between the theory that is to be proved and the
instruments and subjects of the study (Wohlin et al., 2000). In this study, the
problem domain was previously chosen as the main focus of the proposed
approach considering the experience of the subjects involved. Therefore, this
choice avoids wrong interpretation of the impact of the approach.
Conclusion Validity. This validity is concerned with the relationship
between the treatment and the outcome, and determines the capability of the
study to generate conclusions (Wohlin et al., 2000). The conclusions of this
study will be drawn by the use of descriptive statistic.
5.2.3. The Project Used in the Study
In this study, three games of the same domain will be used, all of them from
Meantime 2 , a mobile game producer headquartered in Recife: Monga,
American Dad – Roger’s Scape and Zaak. Figure 5.2 shows a screenshot of each
game. Based on the features and consequently code from the early cited games,
2
Meantime Mobile creations, available on http://www.meantime.com.br, accessed in January, 2008.
Chapter 5 – An Experimental Study in the Mobile Game Domain
91
this experimental study aims to establish a SPL, using the approach described
by this work, and produce a fourth game from this SPL.
Figure 5.2. Screenshots of the games used for the experimental study. A) Monga.
B) American Dad – Roger’s Scape. C) Zaak.
The first game mentioned – Monga – is a platform based game where the
player is a gorilla, called Monga, who loves his audience and wants to catch
them. All the people fearing the gorilla start to run through the floors of the
building and the player’s objective is to conduct Monga to catch the audience.
During the running, the gorilla faces some obstacles in order to difficult the
audience catching. The player can use a shortcut, the elevator, to go directly to
any of the floors and try to catch the audience faster than only running.
In the second game cited – American Dad - Roger’s Scape – the player is
an alien walking around a simulated labyrinth and facing humans prepared to
catch and kill him. The main objective of the game is to find the correct keys
through the labyrinth and open the respective doors to find a way out to the
player’s original world. There are three different types of human enemies: the
first walks on a predefined path and do not chase the player; the second has the
same behavior of the first but if the player crosses its perception range, it starts
to chase the player until he gets out of its perception; the last one has no
predefined path and chases the player indefinitely once he enters in its
perception range. The player can attack enemies by squirting a liquid on the
floor which grabs the enemies making them immobile for few seconds.
The last game in the sequence – Zaak – is a platform based game where
the player is an apprentice wizard in charge of guiding little creatures (fairies)
Chapter 5 – An Experimental Study in the Mobile Game Domain
92
through a world full of obstacles to an exit and save them. The player can face
enemies that keep on walking around the level in a predefined path (patroller).
In this case the enemies do not chase the player as in American Dad. The player
can attack and destroy enemies by using magic cards. Through the levels, the
player can collect different items that help on guiding the fairies to the way out,
such as ropes and leverages.
The subjects involved in the project had full access to documentation and
code. However, not so many details of the games will be provided because of
matters of confidentiality.
5.2.4. The Instrumentation
Selection of Subjects. The subjects were selected by convenience
sampling (Wohlin et al., 2000) representing a non-random subset from the
universe of students of Software Engineering.
Data Validation. In this study, descriptive statistics will be used to
analyze the data set, since it may be used before carrying out hypotheses testing,
in order to better understand the nature of the data and to identify abnormal or
false data points (Wohlin et al., 2000).
Instrumentation. Before the experiment can be executed, all
experiment instruments must be ready. It includes the experiment objects,
guidelines, forms and tools. In this study, the instruments are: all the approach
documentation, including guidelines; and all artifacts used as input for the
study. These artifacts are related to the games mentioned in Section 5.2.3 (game
design document, architecture, code, executable and test cases). To protect the
Meantime’s proprietary assets, the subjects involved had to access a Non
Disclosure Agreement (NDA).
5.2.5. The Operation
Experimental Environment. This study was performed in the period
from December 2007 to April 2008, at Federal University of Pernambuco, and
partially at C.E.S.A.R, Pernambuco, Brazil.
Subjects. The subjects involved were: one M.Sc. student from Federal
University of Pernambuco, acting as domain expert, domain analyst, domain
Chapter 5 – An Experimental Study in the Mobile Game Domain
93
architect, developer and tester; and his co-advisor, Ph.D. in Computer Science
at Federal University of Pernambuco (UFPE) in 2007, acting as reuse consultant
and sometimes domain expert.
Summary of Generated Artifacts. Following the approach described
in Chapter 4 with its suggested sequence of steps and considering the expected
inputs (product portfolio, product map, domain feature model and domain
architecture), the main activities during the execution of experimental study
were:
•
To analyze the artifacts given as input for better understanding how the
components are going to be implemented considering the domain
restrictions and architecture structure.
•
To refine the product map in order to handle the domain restrictions by
adding conditional compilation tags to each correspondent variation
level.
•
To specify the components internal design taking into consideration the
conditional compilation tags described in the refined product map and
using <<variant>> stereotype to represent the variant parts of each
component.
•
To implement the components based on their internal design and
following the guidelines provided by the approach proposed. At the end
of this activity, the components documentation should provide the
following information in order to reflect the restrictions detailed in
product portfolio and product map: the groups of conditional
compilation tags that were applied to the component and the respective
dependencies between them; as well as one estimation of the components
memory usage; and the total component size in JAR file.
•
To test the components implemented by using an example application in
the domain, which can be a new product derived from SPL.
•
To instantiate a new product based on the core assets defined.
Chapter 5 – An Experimental Study in the Mobile Game Domain
94
As a result of the domain analysis phase previously executed, a feature
model was defined and given as input for the proper approach application,
basically capturing the common and variable characteristics among the three
games, as shown in Figure 5.3.
Figure 5.3. Domain feature model.
The common points are related to the features Audio, Menu and Player
Actions. All three games have audio effects and background music, the menu
structure of them is the same and the actions that the player can execute are
common. The variable points are related to Enemy and Scenario. Monga does
not involve enemies directly, but only moveable obstacles in the scenario and
the Runner audience. The other two games have two different types of enemies,
one for each game: the first type is the Chaser, which chases the player around
the scenario; the second type is the Patroller, which walks around the scenario
in a predefined path and only catches the player if it crosses the path.
Concerning Scenario feature, it can be observed two different types of scenario
for the three games: Plane (American Dad) and Platform (Monga and Zaak).
Besides domain feature model, product portfolio and product map are
also given as input for the approach. Product portfolio is intended to describe all
the handset families in details, highlighting each peculiarity of them. Table 5.1
Chapter 5 – An Experimental Study in the Mobile Game Domain
95
shows the product portfolio considering three big manufacturers in the mobile
phone industry.
Table 5.1. Product portfolio with three manufacturers listed.
Manufacturer #1: Motorola
FAMILY
BASE
MOTO_iDEN
i850
FAMILY
BASE
COMPATIBILITY
i850; i870; i880
SCREEN MIDP
176x206
2.0
HEAP
JAR
4 Mb
4 Mb
MP3
COMMENTS
Low performance with
3D applications.
Manufacturer #2: Nokia
COMPATIBILITY
SCREEN MIDP
HEAP
JAR
NOKIA_1
3220
2600; 2610; 3220;
6020; 6021; 6030
128x128
2.0
512 kb
128 kb
NOKIA_N
N73
N73, N76, N80, N83,
N95
240x320
2.0
No
Limit
No
Limit
MP3
COMMENTS
Big market in Korea.
Applications must
include Korean
language.
Symbian-based
phones. Hardware
acceleration for 3D
applications.
Manufacturer #3: Sony Ericsson
FAMILY
BASE
SE_1
P900
COMPATIBILITY
P800; P802; P900;
P908; P910
SCREEN MIDP
HEAP
JAR
208x320
512 kb
1 Mb
1.0
MP3
COMMENTS
PRIORITY
MEMBER
BASE
COMMENTS
1
MOTO_iDEN
i850
2
NOKIA_1
3220
3
NOKIA_N
N73
4
SE_1
P900
An early release is needed for this family requested by client
Mobile phones with many hardware restrictions get a higher priority
because it is easier to expand the application to a less restrict platform
than to shrink the application to a more restrict platform
High-end phones get a low priority because they have few hardware
constraints and there is no real need for code optimization
Small market
Moreover, product map describes the generic capabilities of the handsets
with the appropriate variation levels mapping each of them to the respective
families. As proposed in Chapter 4, product map should be refined by adding
conditional compilation tags and mapping them to each specific variation levels
specified. As a result of this refinement, Table 5.2 shows the product map with
the conditional compilation tags already attached. It is possible to use a feature
model to represent the product map just as shown in Figure 5.3, however,
structuring the product map in the way it is shown in Table 5.2 gives the
possibility of adding as more comments as necessary to make the handset
capabilities more clear. In the sequence, Table 5.3 shows the groups of
conditional compilation tags mapped to each product family.
Chapter 5 – An Experimental Study in the Mobile Game Domain
96
Table 5.2. Product map with conditional compilation tags attached.
Capability
Screen
Size
Key
Mapping
Sound
Known
issues
Variation
Level #1
Variation
Level #2
Conditional
Compilation tag
128x128
screen_128x128
176x206
screen_176x206
208x320
screen_208x320
240x320
Nokia
Motorola
Sony
Ericsson
Allocation
Mode
screen_240x320
keys_nokia
keys_motorola
Comments
Actual size of 176x220, but available
size of 176x206
FullCanvas access to entire screen
keys_sony
Pre-allocate
On demand
Block
Player
instance
Thread
Phonebook
sound_mode_prealloc At most 4 players at a time
sound_mode_ondemand
Player in a separated block
sound_player_block
sound_player_thread Sound player in a thread
known_issue_udm
When using UDM API, all the
contacts information must be fetched
at once during application start-up.
Table 5.3. Groups of conditional compilations tags for the four manufacturers
described in product portfolio.
Member
MOTO_iDEN
Tags composition
screen_176x206
keys_motorola
sound_mode_prealloc
sound_player_block
known_issue_udm
Comments
At most 4 players at a time
UDM API has been replaced by PIM API in new
handset models
screen_128x128
keys_nokia
NOKIA_1
sound_mode_ondemand
It does not allow background sound playback with
the MIDlet in pause state
sound_player_thread
screen_240x320
keys_nokia
NOKIA_N
sound_mode_ondemand
It does not allow background sound playback with
the MIDlet in pause state
sound_player_thread
SE_1
screen_208x320
keys_sony
sound_mode_prealloc
sound_player_thread
At most 8 players at a time. Specific API for sound.
After refining product map, it is time to specify the components internal
design to fit in domain architecture. It is important to highlight that, when
designing domain architecture, the architect must decide whether the classes
Chapter 5 – An Experimental Study in the Mobile Game Domain
97
involved are going to be attached to the new product in the product line by
copying and pasting the code or they are going to be added to the project packed
into a library (.jar file). The first option is usually indicated when there are
families of handsets with very restrict capabilities. The second option is
recommended because the architecture code will remain unchanged across the
SPL life cycle.
Four components have been specified, using variant stereotype: Sound,
Main Menu, Player and Enemy (AI). Figure 5.4 shows the internal design of the
Enemy (AI) component.
Figure 5.4. Internal design of the Enemy (AI) component.
At this point, the next steps involve developing the defined components
using a subset or a combination of the variability implementation techniques
(Anastasopoulos & Gacek, 2001) and following the guidelines proposed by the
approach. The code snippet in the sequence is an example involving the Main
Menu component mentioned. As can be seen in the domain feature model in
Figure 5.3, the Menu feature has an optional sub feature called Introduction,
which is basically an animation played before menu display. Note that the entire
Animation class in the code snippet is embraced by conditional compilation tags
and it will not even exist if the Introduction feature is not defined. The code
snippets tried to represent good programming practices following the principles
of high cohesion and low coupling, also avoiding to spread over the application
code several conditional compilation tags.
Chapter 5 – An Experimental Study in the Mobile Game Domain
98
//#ifdef animation_feature
class Animation {
void play(){
this.playShortAnim();
this.playLongAnim();
}
void playShortAnim(){
//#ifdef short_anim
//...
//endif
}
void playLongAnim(){
//#ifdef long_anim
//...
//endif
}
}
//#endif
Another example of combination of inheritance and conditional
compilation is shown in the following code snippet extracted from Enemy (AI)
component. Note that the entire subclass has to be embraced by conditional
compilation tags in order to reduce final application size.
public abstract class Enemy {
public abstract void doAction();
}
//#ifdef scr_130x130
class Patroller extends Enemy{
public void doAction () {
Behavior.patrol(0, 0, 20, 30);
// Patrols a square from 0, 0 to 20, 30
}
}
//#endif
//#if scr_240x320 | scr_176x206 | scr_208x320
class Chaser extends Enemy {
public void doAction () {
// Set x, y values
Behavior.pursuit(x, y);
// x and y are the current player position
}
}
//#endif
Chapter 5 – An Experimental Study in the Mobile Game Domain
99
With the components defined and implemented, the test team must use
an example application to test each component considering the families
described in product portfolio. Each component should be tested using a
representative member of the family as it would be very time consuming to test
the components using every handset in the family and the vendor must ensure
compatibility amongst all members of a family. In this study, the components
were tested within the fourth game derived from the SPL defined and worked
properly, attending to the desired functionality.
The last step is to perform a typical application engineering phase,
described in details by different authors (Clements & Northrop, 2001), (Pohl et
al., 2005), (Gomaa, 2005), in order to derive the fourth game. Based on all the
knowledge from the domain, i.e., the three games already developed, the feature
model, the domain restrictions and the previous experience with other games,
the fourth game was specified. The game was named Smart Escape. It is a
platform based game where the player needs to escape from the enemies
jumping on the horizontal platforms and collecting as more diamonds as
possible until he enters the exit door. The enemies have two predefined
behaviors: some of them only patrol a predefined path and others chase the
player when the player jumps on the platform they are currently walking on.
The chaser enemy stops chasing the player if he gets back to the base platform,
where he starts the level. The player is unable to attack the enemies. The game
finishes when all the doors of all levels are reached.
The Figure 5.5 shows which features were selected from the domain
feature model, presented in Figure 5.3, in order to derive the Smart Escape
game. In the sequence, Figure 5.6 shows the main game screen. Some artifacts
were reused from the other games, such as images and sound effects.
Chapter 5 – An Experimental Study in the Mobile Game Domain
100
Figure 5.5. Smart Escape application feature model based on the domain feature
model.
Figure 5.6. Smart Escape’s main game screen.
In summary, the basic domain architecture has been implemented with
6489 lines of non-commented source code distributed in 277 methods as shown
in Table 5.4. Besides, Table 5.5 shows an overview of the four components that
were developed.
Table 5.4. Basic domain architecture overview.
Class
All
Screen
GameScreen
GameControl
Lines of non-commented
source code
6489
554
120
193
Number of methods
277
12
8
18
Chapter 5 – An Experimental Study in the Mobile Game Domain
101
Table 5.5. Components overview.
Component
Sound
Main Menu
Player
Enemy (AI)
Lines of non-commented source code
372
661
383
417
5.2.6. The Analysis and Interpretation
After executing the operation phase, metrics could be collected based on the
project data and then analyzed and interpreted. However, before analysis and
interpretation, (Wohlin et al., 2000) suggest to execute a data set reduction in
order to remove abnormal or false data. As the data set is small in this project,
there was no need to execute the data set reduction. Therefore, based on the
collected metrics, the null hypotheses described in the early sections can be
analyzed.
Component Complexity. Table 5.6 summarizes the values for
component complexity (McCabe cyclomatic complexity) that were obtained
from the four components developed in the operation phase. The component
complexity mean (11.2) rejects the null hypothesis. It indicates that the
proposed approach aid on generating components with low complexity. Even
the highest complexity obtained (17.1) for the Enemy (AI) component presents
the value below the null hypothesis.
Table 5.6. Component complexity values.
Components
Sound
Main Menu
Player
Enemy (AI)
Mean
Null Hypothesis
Complexity
7.6
6.8
13.4
17.1
11.2
>=21
Domain Restrictions Management. Table 5.7 summarizes the values
for the metrics defined earlier in Section 5.2.1.3.
The NFA value was obtained by counting the number of families that have
the domain restriction of application size mapped at code level divided by the
total number of families, which is four. Three of the families are concerned with
Chapter 5 – An Experimental Study in the Mobile Game Domain
102
application size and have it implemented at code level: MOTO_iDEN, NOKIA_1
and SE_1. The NOKIA_N family does not have this restriction mapped at code
level because there is no jar limit. Thus, NFA = ¾ = 75%.
The NFS value was obtained by counting the number of families that have
the domain restriction of screen size mapped at code level divided by the total
number of families. All families are concerned with screen size and have it
implemented at code level. Thus, NFS = 100%.
The NFI value was obtained by counting the number of families that have
the domain restriction of different API implementations mapped at code level
divided by the total number of families. Three of the families are concerned with
different API implementations and have it implemented at code level:
NOKIA_1, NOKIA_N and SE_1. The first two mentioned families implements
the FullCanvas API, specific for Nokia handsets. The SE_1 family implements a
specific sound API. The MOTO_iDEN family is the only that does not
implement proprietary APIs. Thus, NFI = ¾ = 75%.
All three values related to domain restrictions (application size, different
screen sizes and different API implementations) reject the null hypotheses. It is
important to highlight that these values may not be much accurate. It may be
necessary to perform new studies for better calibrating these values considering
the specific characteristics of the domain in use. The hypotheses rejection
indicates that the proposed approach can handle the restrictions related to
mobile applications domain. However, the practical experience shows that if
there are many different families (we worked with four), these restrictions may
become harder to manage.
Table 5.7. Domain restrictions management values.
Metric
NFA
Null hypothesis (NFA)
NFS
Null hypothesis (NFS)
NFI
Null hypothesis (NFI)
Percentage
75
<= 50
100
<= 50
75
<= 50
Chapter 5 – An Experimental Study in the Mobile Game Domain
103
Traceability. Table 5.8 summarizes the values related to traceability
from features to components and from features to code.
The TFComp value was obtained by measuring the percentage of root
features that can be mapped to components. In this study, five root features can
be identified: Audio, Player, Menu, Enemy and Scenario. The first four features
can be directly mapped to the components Sound, Main Menu, Player and
Enemy (AI). It means that 4 out of 5 root features could be mapped to
components. Thus, TFComp = 80%.
In addition, the TFCode value was obtained by measuring the percentage of
leaf features that can be mapped to code. In this study, fifteen leaf features can
be identified: SoundEffect, BackgroundMusic, CollectItem, UseItem, Attack,
NewGame, Settings, Help, Introduction, Arena, Chaser, Pratroller, Runner,
Platform and Plane. Among these features, there are only two that were not
coded as components and then can not be mapped directly to code level:
Platform and Plane, mainly because they are strictly related to the target
product being deployed. Then, in order to make them components, it would be
needed a larger number of very similar games. In summary, it means that 13 out
of 15 leaf features could be mapped to code level. Thus, TFCode = 86.66%.
Both values (TFComp and TFCode) reject null hypotheses indicating that the
proposed approach can manage traceability within a mobile game SPL.
Table 5.8. Traceability values.
Metric
TFComp
Null hypothesis (TFComp)
TFCode
Null hypothesis (TFCode)
Percentage
80
<= 70
86.66
<= 70
5.2.7. Conclusions
Observing the results obtained in the last section, it can be noticed that all the
null hypotheses have been rejected. These results have shown that the approach
proposed can be suitable for the mobile domain, although some internal validity
threats for single experiments have been identified, such as, maturation, once
the study have been performed with a small group with a quite large experience
Chapter 5 – An Experimental Study in the Mobile Game Domain
104
in the mobile game domain. So, a new experiment in the same direction would
have difficulties to find such experienced staff.
In addition, comparing with other SPL processes mentioned in Chapter 3,
a higher level of details in the domain implementation step can help a lot on
generating low complexity components, handling domain restrictions, such as
the ones listed for the mobile game domain, and maintaining the artifacts
traceable from domain features to components code.
Moreover, considering the context of the mobile domain and its
peculiarities, it would be necessary to perform new studies to calibrate the value
of null hypothesis for the metrics related to domain restrictions management
and traceability.
5.2.8. The Lessons Learned
One of the strongest points to be highlighted in this study is related to the
facility of applying conditional compilation tags in code, mainly when the
product map explicitly maintains all information about handsets capabilities
and their respective tags. On the other hand, the use of these tags can become
problematic if the number of product families grows too much. However, when
combined with refactoring tools such as FLiP (Calheiros et al., 2007), which
handles with aspect oriented techniques, the approach described by this work
can become really useful even with a big number of product families, mainly
because those kind of tools works better if code is early organized, so improving
the refactoring quality.
Furthermore, as a lesson learned from this project, it can be mentioned
that it is unavoidable the use of a tool to manage all conditional compilation
tags, mainly when the number of product families becomes high. The tool would
take as input the groups of conditional compilation tags as described in product
map and then deploy different products according to different families. The tool
should also be responsible for managing the dependencies between tags of
different product families, and so it would help on faster deployments.
Chapter 5 – An Experimental Study in the Mobile Game Domain
105
5.3. Chapter Summary
This chapter presented an experimental study, following the organization
proposed by (Wohlin et al., 2000), in order to evaluate the approach described
in Chapter 4, which handles with core assets implementation in the mobile
game domain. The study has analyzed three different mobile games and
structured a software product line based on commonality and variability
analysis among these games, considering the specific characteristics of the
domain. The results of the study have shown that the approach can be suitable
for the mobile domain.
Next chapter presents the conclusions of this work and the directions for
future work.
6
Conclusions
“Science never solves a problem without creating
ten more”
George Bernard Shaw (1856 – 1950)
Nobel Prize in Literature (1925), Irish playwright
It has been about forty years since the term software engineering was first
coined in the late 1960s, and there software reuse principles were born. Through
all these years, many different approaches have been developed in order to
achieve the well known goals in the software world: high productivity, high
quality and low costs. These approaches include buzzwords such as componentbased development, domain engineering processes and software product lines
(SPL). As we mentioned in Chapter 2, software product lines are being explored
in different domains and contexts with many successful cases. Big companies,
such as Philips, Hewlett-Packard (HP), Boeing and Nokia, have proved their
successful experiences with software product lines in terms of market
leadership, constant growth in revenues and consequently great profits.
However, one particular market segment where the software product line
approach has not yet had many successful cases is the mobile game domain, in
spite of its high-growth in the last five years and the expectation of reaching the
mark of $6.1 billion in 2010. Industrial practitioners believe that mobile games
is the fastest growing “new” games sector. The main reason for this lack of
successful cases is related to the fact that the mobile game domain presents
specific characteristics, especially because of the big diversity of handsets and
the need of ubiquitous applications running in as many handsets as possible.
Chapter 6 – Conclusions
107
These characteristics can make the development and installation of a SPL
difficult.
Some efforts have been made to apply SPL approach to mobile game
domain. However, the current work in the SPL area, as we could see in Chapter
3, does not address properly the mentioned characteristics of the domain,
mainly in domain implementation phase.
In this work, we described a practical approach to develop core assets in a
SPL applied to the mobile game domain, providing details at code level, as
shown in Chapter 4, and then we performed an experimental study with three
mobile games following the mentioned approach, as can be seen in Chapter 5.
The results of the case study have shown that the approach can be suitable for
the mobile game domain.
6.1. Research Contributions
The main contributions of this work remain on the aspects related to: the
presentation of a specific survey on the state-of-the-art in software product line
processes; the definition of an approach to implement core assets in a software
product line applied to the mobile game domain; the execution of an
experimental study which evaluated positively the early mentioned approach.
•
A survey on the state-of-the-art in software product line
processes: complementing a survey by (Almeida, 2007), the Chapter 3
presents nine SPL processes, besides other seven relevant domain
engineering processes mentioned. The survey describes each process
taking into consideration mainly the aspects related to the domain
implementation phase.
•
The definition of an approach to implement core assets in a
software product line applied to the mobile game domain: in
order to address properly the restrictions of the mobile domain, for
example, memory size, application size and processing power, Chapter 4
focus on the description of a practical approach to implement core assets
in the mobile game domain. The approach presents three phases:
component modeling, component implementation and component
Chapter 6 – Conclusions
108
testing. To ease the practical application of the approach, inputs, outputs,
roles and guidelines are defined.
•
The execution of an experimental study: as a form of practical
evaluation of the approach proposed, an experimental study was
executed and presented positive results, showing that the proposed
approach can be feasible.
6.2. Related Work
All the work described in Chapter 3, including component-based development,
domain engineering and software product line processes, can be applied on
different contexts, however, in the particular case of the mobile domain,
adaptations in the processes should be done to make them address properly the
restrictions of that domain. It happens mainly because some of the processes
are too general or handle with technologies that are not well established in the
mobile domain, such as OSGi (OSGi, 2008).
In this context, some efforts were made in order to adapt a defined SPL
process to mobile game domain, such as the GoPhone Project (Muthig et al.,
2004), an adaptation of PuLSE (Bayer et al., 1999) and KobrA (Atkinson et al.,
2000). This project establishes a SPL using four target handsets with a reduced
set of features (four features are described: send message, show message, start
chat and view and save calendar entry), but it does not provide details on how
to implement variability at the code level and also does not consider common
restrictions in the mobile domain, such as screen size and different API
implementations according to different vendors.
In addition, other related works define approaches (Alves et al., 2005a),
(Alves et al., 2005b), (Alves et al., 2006), (Matos, 2008) and refactoring tools
for extracting product lines from different versions of the same product, for
instance, FLiP tool (Calheiros et al., 2007). As a common practice in the mobile
applications domain is to adapt an application for different handsets (porting),
FLiP is intended to analyze the code of those different versions of the same
application and then it generates a product line based on aspect-oriented
programming, mapping the cross-cutting concerns into aspects (Kiczales et al.,
1997). In the case of mobile game domain, for example, a cross-cutting concern
Chapter 6 – Conclusions
109
can be screen size, because this characteristic of a handset affects different parts
of the code at different levels. This kind of tool, which handles cross-cutting
concerns, can be extremely useful when the product line is defined by a single
product and different versions of it must be implemented to support different
families of handsets, as the Abstraction Level 1 shown in Figure 6.1..
Figure 6.1. Abstraction levels in software product lines applied to mobile game
domain.
However, not only is our approach intended to consider the different
versions of the same product as potential variabilities to be used in other
products, but it addresses the variability and commonality of different products
in the same domain at a higher level of abstraction, as Abstraction Level 2
shown in Figure 6.1..
In addition, our approach does not exclude the possibility of using a tool
like FLiP. As we said before, this kind of tool is based on code refactoring and
generates as output aspects in AspectJ syntax (AspectJ, 2008), which can
improve code maintainability, readability and cohesion and reduce coupling.
For better usage of the tool, it is highly recommended to provide as input a
quality code, improving chances of successful refactoring steps. In this context,
our approach can be used to provide such quality code, as we directly focus on
the domain implementation phase of a SPL, defining clear steps, inputs,
Chapter 6 – Conclusions
110
outputs, roles and guidelines. So, our proposal in this work and a tool like FLiP
can complement each other to implement a mobile game product line.
6.3. Future Work
Due to the time constraints imposed on a M.Sc. dissertation, this work can be
seen as an initial endeavor towards the full vision of a software product line
process tailored to the mobile game domain. Thus, the following issues should
be investigated as future work:
•
Application of the approach in an industrial context. We are
planning to apply the approach described in this work in an industrial
context and evaluate the benefits in a game development project
composed of 8 people, including 4 developers, 3 graphical designers and
1 game designer. The team has previous experience in 3D mobile games
and had already developed two different games in the same domain.
Then the approach is going to be applied to produce a third game, using
3D capabilities and reusing the artifacts already produced by the team.
The greatest motivation for this future work involves the establishment of
a SPL for mobile 3D games, which are becoming the most popular type of
game in mobile domain because of its delightful visual effects, and then
new games could be rapidly deployed with quality.
•
Tool support. During the execution of the experimental study, we
identified the need of a tool to manage the conditional compilation tags
in order to ease the deployment of new products. The tool would take as
input the set of possible conditional compilation tags for a specific family
of handsets and their respective dependencies and generate automatically
the different application builds. One possible future work can be the
development of such tool, and next, the use of it to reevaluate of the
approach described by this work adding a bigger number of target
handsets.
•
Automatic selection of variability implementation techniques.
Another possible future work can involve the adaptation of the domain
implementation step to allow automatic selection of the variability
implementation technique to be used. For example, if a given product
Chapter 6 – Conclusions
111
needs to be deployed for some target handsets and they are not much
restrictive considering their hardware capabilities, the inheritance and
parameterization techniques may be explored. On the other hand, if the
target
handsets
have
many
restrictions,
then
only
conditional
compilation should be explored. In order to make possible such
automatic variability technique selection, an extra effort has to be done to
adapt the domain implementation process, as well as it would be also
necessary to involve the use of a tool to allow the domain architect
selecting among the existent techniques and the correspondent biding
time for each feature in the domain.
•
Application engineering. The approach proposed by this work is
mainly focused on core assets implementation in order to establish the
basic structure of a SPL. In this context, extending the approach to
handle the details related to application engineering phase in a SPL can
be a possible future work.
•
Experimental Study. This dissertation presented the definition,
planning, operation, analysis and interpretation of an experimental
study. However, new studies in different contexts are still necessary,
including more subjects, qualitative analysis, in order to evaluate the
difficulty of applying the proposed approach, and other types of games,
such as 3D games. Those new studies would calibrate the proposed
approach and the experimental plan.
6.4. Academic Contributions
The knowledge developed during this work resulted in the following
publication:
•
(Nascimento et al., 2006) L. M. Nascimento, E. S. Almeida, S. R. L.
Meira, Component-Based Development in J2ME: A Framework
for Graphical Interface Development in Mobile Devices, 6th
Brazilian Workshop on Component-Based Development (WDBC'2006),
Recife, Brazil, December, 2006, pp. 88-95.
Chapter 6 – Conclusions
•
112
(Nascimento et al., 2008a) L. M. Nascimento, E. S. Almeida, S. R. L.
Meira, A Case Study in Software Product Lines - The Case of the
Mobile Game Domain, 34th IEEE EUROMICRO Conference on
Software Engineering and Advanced Applications (SEAA), ComponentBased Software Engineering (CBSE) Track, Parma, Italy, September,
2008.
Furthermore, the co-participations on the following publications
contributed for acquiring experience and knowledge in the software reuse area:
•
(Almeida et al., 2007a) E. S. Almeida, A. Alvaro, V. C. Garcia, J. C. C. P.
Mascena, V. A. A. Burégio, L. M. Nascimento, D. Lucrédio, S. R. L. Meira,
C.R.U.I.S.E: Component Reuse in Software Engineering,
C.E.S.A.R e-book, Available on http://cruise.cesar.org.br/, Brazil, 2007,
pp. 219.
•
(Almeida et al., 2007b) E. S. Almeida, A. Álvaro, V. C. Garcia, L. M.
Nascimento, S. R. L. Meira, D. Lucrédio, A Systematic Approach to
Design Domain-Specific Software Architectures, Journal of
Software (JSW), Vol. 02, No. 02, August, 2007, pp. 38-51.
•
(Almeida et al., 2007c) E. S. Almeida, A. Alvaro, V. C. Garcia, L. M.
Nascimento, D. Lucrédio, S. R. L. Meira, Designing Domain-Specific
Software Architecture: Towards a New Approach, 6th Working
IEEE/IFIP Conference on Software Architecture (WICSA), Mumbai,
India, January, 2007, pp. 30-33.
•
(Lisboa et al., 2008) L. B. Lisboa, L. M. Nascimento, E. S. Almeida, S. R.
L. Meira, A Case Study in Software Product Lines: An
Educational Experience, 21st
IEEE Conference on Software
Engineering Education and Training (CSEE&T '08), Charleston, South
Carolina, USA, April, 2008, pp. 155-162.
Besides these published papers, there are two papers in evaluation:
(Nascimento et al., 2008b) and (Nascimento et al., 2009).
Chapter 6 – Conclusions
113
6.5. Concluding Remarks
Software product lines have been revealed as a good form to achieve the so
desired software engineering tripod: high productivity, high quality and low
costs. Several successful cases of software product lines can be found in
different contexts and domains. However, few examples can be found in the
mobile game domain, mainly because of the domain restrictions, such as
reduced memory available, small processing power and limited application size.
This work contributed to establish a practical approach for core assets
implementation in the mobile game domain.
It is believed that the mobile applications domain is still in chaos. The
handsets are produced with many different operating systems, different screen
sizes,
different
memory
sizes,
different
processors,
proprietary
API
implementations, different implementations of the same API specification,
different keypads, many different optional features, such as camera, Bluetooth,
mp3 players, and so on. A couple of decades ago, the environment of personal
computers was exactly like that – a kind of chaos – and the evolution took place
in many directions of research, including hardware and software, enabling the
technology we can see nowadays. It is possible that the same thing happens to
the mobile domain, reducing the effort when developing software for the mobile
platform because there will be much less variabilities to be handled at code
level. Until that does not happen, approaches like the one described in this
dissertation will have to be used to make possible the so mentioned phrase:
“write once run everywhere”. We believe this work is a step forward in this long
journey involving the mobile domain.
References
“No man was ever wise by chance”
Lucius Annaeus Seneca (4 BC – AD 65)
Roman philosopher, statesman and dramatist
(Almeida et al., 2004) E. S. Almeida, A. Alvaro, D. Lucrédio, V. C. Garcia, S. R.
L. Meira, RiSE Project: Towards a Robust Framework for
Software Reuse, IEEE International Conference on Information
Reuse and Integration (IRI), Las Vegas, Nevada, USA, November,
2004, pp. 48-53.
(Almeida et al., 2005) E. S. Almeida, A. Alvaro, D. Lucrédio, V. C. Garcia, S. R.
L. Meira, A Survey on Software Reuse Processes, IEEE
Internacional Conference on Information Reuse and Integration (IRI),
Las Vegas, Nevada, USA, August, 2005, pp. 66-71.
(Almeida, 2007) E. S. Almeida, RiDE: The RiSE Process for Domain
Engineering, Ph.D. Thesis, Federal University of Pernambuco,
Informatics Center, Brazil, March, 2007, pp. 276.
(Almeida et al., 2007a) E. S. Almeida, A. Alvaro, V. C. Garcia, J. C. C. P.
Mascena, V. A. A. Burégio, L. M. Nascimento, D. Lucrédio, S. R. L.
Meira,
C.R.U.I.S.E:
Engineering,
Component
C.E.S.A.R
Reuse
e-book,
in
Software
Available
on
http://cruise.cesar.org.br/, Brazil, 2007, pp. 219.
(Almeida et al., 2007b) E. S. Almeida, A. Álvaro, V. C. Garcia, L. M. Nascimento,
S. R. L. Meira, D. Lucrédio, A Systematic Approach to Design
Domain-Specific Software Architectures, Journal of Software
(JSW), Vol. 02, No. 02, August, 2007, pp. 38-51.
References
115
(Almeida et al., 2007c) E. S. Almeida, A. Alvaro, V. C. Garcia, L. M. Nascimento,
D. Lucrédio, S. R. L. Meira, Designing Domain-Specific Software
Architecture: Towards a New Approach, 6th Working IEEE/IFIP
Conference on Software Architecture (WICSA), Mumbai, India,
January, 2007, pp. 30-33.
(Almeida et al., 2008) E. S. Almeida, E. C. R. Santos, A. Alvaro, V. C. Garcia, D.
Lucrédio, R. P. M. Fortes, S. R. L. Meira, Domain Implementation
in Software Product Lines Using OSGi, 7th International
Conference on Composition-Based Software Systems (ICCBSS),
Madrid, Spain, February, 2008, pp. 72-81.
(Alvaro et al., 2007) A. Alvaro, E. S. Almeida, S. R. L. Meira, Component
Quality
Assurance:
Certification
Process,
Towards
IEEE
a
Software
Internacional
Component
Conference
on
Information Reuse and Integration (IRI), Las Vegas, Nevada, USA,
August 2007, pp. 134-139.
(Alves et al., 2005a) V. Alves, I. Cardim, H. Vital, P. Sampaio, A. Damasceno, P.
Borba, G. Ramalho, Comparative Analysis of Porting Strategies
in J2ME Games, 21st IEEE International Conference on Software
Maintenance (ICSM’05), Budapest, Hungary, September, 2005, pp.
123-132.
(Alves et al., 2005b) V. Alves, P. Matos, L. Cole, P. Borba, G. Ramalho,
Extracting and Evolving Mobile Games Product Lines, 9th
International Software Product Line Conference (SPLC'05), Rennes,
France, September, 2005, pp. 70-81.
(Alves et al., 2006) V. Alves, A. Costa Neto, S. Soares, G. Santos, F. Calheiros, V.
Nepomuceno, D. Pires, J. Leal, P. Borba, From Conditional
Compilation to Aspects: A Case Study in Software Product
Lines
Migration,
Aspect-Oriented
Product
Line
Engineering
(AOPLE'06), Workshop of the 5th International Conference on
Generative Programming and Component Engineering (GPCE'06),
Portland, Oregon, USA, October, 2006, pp. 46-52.
References
116
(America et al., 2000) P. America, H. Obbink, R. V. Ommering, F. V. D. Linden,
CoPAM:
A
Component-Oriented
Platform
Architecting
Method Family for Product Family Engineering, 1st Software
Product Line Conference (SPLC1), Denver, Colorado, USA, August,
2000, pp. 15.
(Anastasopoulos & Gacek, 2001) M. Anastasopoulos, C. Gacek, Implementing
Product Line Variabilities, Symposium on Software Reusability
(SSR'01), Toronto, Ontario, Canada, May, 2001, pp. 109-117.
(Aoyama et al., 2001) M. Aoyama, G. T. Heineman, B. Councill. ComponentBased Software Engineering: Putting the Pieces Together,
Addison-Wesley, 2001, pp. 818.
(AspectJ, 2008) The AspectJ Project, Available on http://www.eclipse.org/
aspectj/, Accessed in January, 2008.
(Atkinson et al., 2000) C. Atkinson, J. Bayer, D. Muthig, Component-Based
Product Line Development: The KobrA Approach, 1st Software
Product Line Conference (SPLC1), Denver, Colorado, USA, August,
2000, pp.19.
(Basili et al., 1986) V. R. Basili, R. W. Selby, D. H. Hutchins, Experimentation
in
Software
Engineering, IEEE Transactions on Software
Engineering, Vol. 12, No. 07, July, 1986, pp. 733-743.
(Basili et al., 1994) V. R. Basili, G. Caldiera, H. D. Rombach, The Goal
Question Metric Approach, Encyclopedia of Software Engineering,
Vol. 02, September, 1994, pp. 528-532.
(Basili et al., 1995) V. R. Basili, M. Zelkowitz, F. McGARRY, J. Page, S. Waligora,
R. Pajerski, SEL’s Software Process Improvement Program,
IEEE Software, Vol. 12, No. 06, November, 1995, pp. 83-87.
(Basili, 1996) V. R. Basili, The Role of Experimentation in Software
Engineering: Past, Present, and Future, 18th International
Conference on Software Engineering (ICSE), Berlin, Germany, March,
1996, pp. 442-449.
References
117
(Basili et al., 1996) V. R. Basili, L. C. Briand, W. L. Melo, How reuse
influences
productivity
in
object-oriented
systems,
Communications of the ACM, Vol. 39, No. 10, October, 1996, pp. 104116.
(Batory & O’Malley, 1992) D. Batory, S. O’Malley, The Design and
Implementation of Hierarchical Software Systems with
Reusable
Components,
ACM
Transactions
on
Software
Engineering and Methodology (TOSEM), Vol. 01, No. 04, October,
1992, pp. 355-398.
(Batory et al., 2000) D. Batory, R. Cardone, Y. Smaragdakis, Object-oriented
frameworks and product lines, 1st Software Product Line
Conference (SPLC1), Denver, Colorado, USA, August, 2000, pp. 227248.
(Batory et al., 2002) D. Batory, C. Johnson, B. MacDonald, D. von Heeder,
Achieving extensibility through product-lines and domainspecific languages: a case study, ACM Transactions on Software
Engineering and Methodology (TOSEM), Vol. 11, No. 02, April, 2002,
pp. 191-214.
(Bayer et al., 1999) J. Bayer, O. Flege, P. Knauber, R. Laqua, D. Muthig, K.
Schmid, T. Widen, J. DeBaud, PuLSE: A Methodology to Develop
Software Product Lines, Symposium on Software Reusability
(SSR'99), Los Angeles, California, USA, May, 1999, pp. 122-131.
(Beck, 1999) K. Beck, Extreme Programming Explained: Embrace
Change, Addison-Wesley, 1999, pp. 224.
(Bergey et al., 1998) J. Bergey, DoD Product Line Practice Workshop
Report, Technical Report CMU/SEI-98-TR-07, Carnegie Mellon, May,
1998.
(Boehm et al., 2005) B. W. Boehm, H. D. Rombach, M. V. Zelkowitz,
Foundations of Empirical Software Engineering: The Legacy
of Victor R. Basili, Springer, 2005, pp. 431.
(Boeing,
2008)
The
Boeing
Company
Website,
http://www.boeing.com/, Accessed in January, 2008.
Available
on
References
118
(Bosch, 2002) J. Bosch, Maturity and Evolution in Software Product
Lines: Approaches, Artefacts and Organization, 2nd Software
Product Line Conference (SPLC2), San Diego, California, August, 2002,
pp. 257-271.
(Bosch, 2004) J. Bosch, On the Development of Software ProductFamily Components, 3rd Software Product Line Conference
(SPLC’04), Boston, Massachusetts, USA, August, 2004, pp. 146-164.
(Bunse & Atkinson, 1999) C. Bunse, C. Atkinson, The Normal Object Form:
Bridging the Gap from Models to Code, 2nd International
Conference on the Unified Modeling Language (UML'99), Fort Collins,
Colorado, USA, October, 1999, pp. 753.
(Calheiros et al., 2007) F. Calheiros, P. Borba, S. Soares, V. Nepomuceno, V.
Alves, Product line variability refactoring tool, 1st Workshop on
Refactoring Tools (WRT'07), in conjunction with the 21st European
Conference on Object-Oriented Programming (ECOOP'07), Berlin,
Germany, July, 2007, pp. 33-34.
(Cheesman & Daniels, 2001) J. Cheesman, J. Daniels, UML Components: A
Simple Process for Specifying Component-Based Software,
Addison-Wesley, 2001, pp. 208.
(Clements & Northrop, 2001) P. Clements, L. Northrop, Software Product
Lines: Practices and Patterns, Addison-Wesley, 2001, pp. 608.
(Coplien, 1998) J. Coplien, Multi-Paradigm Design for C++, AddisonWesley, 1998, pp. 304.
(Cox, 1990) B. J. Cox, Planning the Software Industrial Revolution, IEEE
Software, Vol. 07, No. 06, November, 1990, pp. 25-33.
(Czarnecki & Eisenecker, 2000) K. Czarnecki, U. W. Eisenecker, Generative
Programming: Methods, Tools, and Applications, AddisonWesley, 2000, pp. 832.
(Davis, 1987) S. M. Davis, Future Perfect, Addison-Wesley, 1987, pp. 272.
(Doerr & Sharp, 2000) B. S. Doerr, D. C. Sharp, Freeing Product Line
Architectures from Execution Dependencies, 1st Software
References
119
Product Line Conference (SPLC1), Denver, Colorado, USA, August,
2000, pp. 313–329.
(D'Souza & Wills, 2001) D. D'Souza, A. C. Wills, Objects, Components, and
Frameworks with UML - The Catalysis Approach, AddisonWesley, 2001. pp. 816.
(Ezran et al., 2002) M. Ezran, M. Morisio, C. Tully, Practical Software
Reuse, Springer, 2002, pp. 374.
(Fayad, 1997) M. E. Fayad, Software Development Process: A Necessary
Evil, Communications of the ACM, Vol. 40, No. 09, September, 1997,
pp. 101-103.
(Filho et al., 2008) E. D. S. Filho, R. O. Cavalcanti, D. F. S. Neiva, T. H. B.
Oliveira, L. B. Lisboa, E. S. Almeida, S. R. L. Meira, Evaluating
Domain Design Approaches Using Systematic Review, 2nd
European Conference on Software Architecture (ECSA), Lecture Notes
in Computer Science (LNCS), Springer Verlag, Cyprus, September,
2008.
(Flood, 2003) K. Flood, Game Unified Process (GUP), Gamedev Article,
2003,
Available
on
http://www.gamedev.net/reference/articles/
article1940.asp, Accessed in January, 2008.
(Flynt & Salem, 2005) J. P. Flynt, O. Salem, Software Engineering for
Game Developers, Course Technology PTR, 2005, pp. 904.
(Foreman, 1996) J. Foreman, Product Line Based Software Development
-
Significant
Results,
Future
Challenges,
8th
Software
Technology Conference (STC’96), Salt Lake City, Utah, April, 1996.
(Frakes & Succi, 2001) W. B. Frakes, G. Succi, An Industrial Study of
Reuse, Quality, and Productivity, Journal of System and Software
(JSS), Vol. 57, No. 02, June, 2001, pp. 99-106.
(Furtado, 2006) A. W. B. Furtado, SharpLudus: Improving Game
Development Experience through Software Factories and
Domain-Specific
Languages,
M.Sc.
Dissertation,
Federal
References
120
University of Pernambuco, Informatics Center, Brazil, April, 2006, pp.
137.
(Gamma et al., 1995) E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design
Patterns: Elements of Reusable Object-Oriented Software,
Addison-Wesley, 1995, pp. 395.
(Garcia et al., 2008a) V. C. Garcia, L. B. Lisboa, F. A. Durão, E. S. Almeida, S. R.
L.
Meira,
Approach
Lightweight
to
Technology
Facilitating
Reuse
Change
Adoption,
Management
2nd
Brazilian
Symposium on Software Components, Architectures, and Reuse
(SBCARS), Porto Alegre, Brazil, August, 2008.
(Garcia et al., 2008b) V. C. Garcia, L. B. Lisboa, S. R. L. Meira, E. S. Almeida, D.
Lucrédio, R. P. M. Fortes, Towards an Assessment Method for
Software Reuse Capability, 8th International Conference on
Quality Software (QSIC), Oxford, UK, August, 2008.
(Glass & DeMarco, 2006) B. Glass, T. Demarco, Software Creativity 2.0,
developer.* Books, 2006, pp. 484.
(Gomaa, 2005) H. Gomaa, Designing Software Product Lines with UML:
From Use Cases to Pattern-Based Software Architectures,
Addison-Wesley, 2005, pp. 701.
(Greenfield et al., 2004) J. Greenfield, K. Short, S. Cook, S. Kent, J. Crupi,
Software Factories: Assembling Applications with Patterns,
Models, Frameworks, and Tools, Wiley & Sons, 2004, pp. 500.
(Griss, 1994) M. L. Griss, Software Reuse Experience at HewlettPackard,
16th
IEEE
International
Conference
on
Software
Engineering (ICSE), Sorrento, Italy, May, 1994, pp. 270.
(Griss, 1995) M. L. Griss, Making Software Reuse Work at HewlettPackard, IEEE Software, Vol. 12, No. 01, January, 1995, pp. 105-107.
(Griss et al., 1998) M. L. Griss, J. Favaro, M. d' Alessandro, Integrating
Feature Modeling with the RSEB, 5th International Conference on
Software Reuse (ICSR), Victoria, Canada, June, 1998, pp. 76-85.
References
121
(Heie, 2002) A. Heie, Global Software Product Lines and Infinite
Diversity, Keynote speech in the 2nd Software Product Line
Conference (SPLC2), San Diego, California, August, 2002. Available on
http://www.sei.cmu.edu/SPLC2/keynote_slides/keynote_1.htm, Accessed in April 2008.
(HP,
2008)
The
Hewlett-Packard
Website,
Available
on
http://www.hp.com/, Accessed in January, 2008.
(IEEE
Std,
1990)
IEEE,
IEEE
Standard
Glossary
of
Software
Engineering Terminology, IEEE Std 610.12-1990, 1990.
(Jacobson et al., 1997) I. Jacobson, M. L. Griss, P. Jonsson, Making the Reuse
Business Work, IEEE Computer, Vol. 30, No. 10, October, 1997, pp.
36-42.
(Jacobson et al., 1999) I. Jacobson, G. Booch, J. Rumbaugh, The Unified
Software Development Process, Addison-Wesley, 1999, pp. 463.
(Java ME, 2008) Java ME - The Most Ubiquitous Application Platform
for Mobile Devices, Available on http://java.sun.com/javame/
index.jsp. Accessed in May, 2008.
(Jezequel & Meyer, 1997) J. M. Jezequel, B. Meyer, Design by Contract: The
Lessons of Ariane, IEEE Computer, Vol. 30, No. 01, January, 1997,
pp. 129-130.
(Johnson & Foote, 1988) R. Johnson, B. Foote, Designing Reusable Classes,
Journal of Object-Oriented Programming, Vol. 01, No. 02, June/July,
1988, pp. 22-35.
(JSR-232, 2008) JSR-232, Java Specification Request 232 - Mobile
Operational Management, Available on http://www.jcp.org/en/jsr/
detail?id=232, Accessed in January, 2008.
(Kang et al., 1990) K. C. Kang, S. G. Cohen, J. A. Hess, W. E. Novak, A. S.
Peterson,
Feature-Oriented
Domain
Analysis
(FODA)
Feasibility Study, Technical Report CMU/SEI-90-TR-021, Carnegie
Mellon, November, 1990.
References
122
(Kang et al., 1998) K. C. Kang, S. Kim, J. Lee, K. Kim, E. Shin, M. Huh, FORM:
A Feature-Oriented Reuse Method with domain-specific
reference architectures, Annals of Software Engineering Notes,
Vol. 05, No. 00, January, 1998, pp. 143-168.
(Kang et al., 2002) K. C. Kang, J. Lee, P. Donohoe, Feature-Oriented
Product Line Engineering, IEEE Software, Vol. 19, No. 04,
July/August, 2002, pp.58-65.
(Kiczales et al., 1997) G. Kiczales, J. Lamping, A. Mendhekar, C. Maeda, C.
Videira
Lopes,
Programming,
J.
M.
11th
Loingtier,
J.
Irwin,
Aspect-Oriented
European Conference on
Object-Oriented
Programming (ECOOP’97), Jyväskylä, Finland, June, 1997, pp. 220242.
(Kim & Chang, 2004) S. D. Kim, S. H. Chang, A Systematic Method to
Identify
Software
Components,
11th
Asia-Pacific
Software
Engineering Conference (APSEC’04), Seoul, South Korea, December,
2004, pp. 92-98.
(Krueger, 1992) C. W. Krueger, Software Reuse, ACM Computing Surveys,
Vol. 24, No. 02, June, 1992, pp. 131-183.
(Lim, 1994) W. C. Lim, Effects of Reuse on Quality, Productivity, and
Economics, IEEE Software, Vol. 11, No. 05, September, 1994, pp. 2330.
(Lisboa et al., 2007) L. B. Lisboa, V. C. Garcia, E. S. Almeida, S. R. L. Meira,
ToolDAy - A Process-Centered Domain Analysis Tool, 21st
Brazilian Symposium on Software Engineering (SBES), Tools Session,
João Pessoa, Brazil, October, 2007.
(Lisboa et al., 2008) L. B. Lisboa, L. M. Nascimento, E. S. Almeida, S. R. L.
Meira,
A
Case
Study
in
Software
Educational Experience, 21st
Product
Lines:
An
IEEE Conference on Software
Engineering Education and Training (CSEE&T '08), Charleston, South
Carolina, USA, April, 2008, pp. 155-162.
(Martins et al., 2008) A. C. Martins, V. C. Garcia, E. S. Almeida, S. R. L. Meira,
Enhancing Components Search in a Reuse Environment
References
Using
123
Discovered
Knowledge
Techniques,
2nd
Brazilian
Symposium on Software Components, Architectures, and Reuse
(SBCARS), Porto Alegre, Brazil, August, 2008.
(Mascena et al., 2005) J. C. C. P. Mascena, E. S. Almeida, S. R. L. Meira, A
Comparative Study on Software Reuse Metrics and Economic
Models from a Traceability Perspective, IEEE Internacional
Conference on Information Reuse and Integration (IRI), Las Vegas,
Nevada, USA, August, 2005, pp. 72-77.
(Matos, 2008) P. O. A. Matos Junior, Analysis of Techniques for
Implementing Software Product Lines Variabilities, M.Sc.
Dissertation, Federal University of Pernambuco, Informatics Center,
Brazil, August, 2008, pp. 121.
(McCabe, 1976) T. J. McCabe, A Complexity Measure, IEEE Transactions on
Software Engineering, Vol. 02, No. 04, December, 1976, pp. 308-320.
(McConnell, 1998) S. McConnell, The Power of Process, IEEE Computer,
Vol. 31, No. 05, May, 1998, pp. 100-102.
(McGregor et al., 2002) J. D. McGregor, S. Jarrad, L. M. Northrop, and K. Pohl,
Initiating Software Product Lines, IEEE Software, Vol. 19, No.
04, July 2002, pp. 24–27.
(McIlroy, 1968) M. D. McIlroy, Mass Produced Software Components,
NATO Software Engineering Conference Report, Garmisch, Germany,
October, 1968, pp. 79-85.
(Mernik et al., 2005) M. Mernik, J. Heering, A. M. Sloane, When and How to
Develop Domain-Specific Languages, ACM Computing Surveys,
Vol. 37, No. 04, December, 2005, pp. 316-344.
(Mili et al., 1995) H. Mili, F. Mili, A. Mili, Reusing Software: Issues and
Research Directions, IEEE Transactions on Software Engineering,
Vol. 21, No. 06, June, 1995, pp. 528-562.
(Moore, 2001) M. Moore, Software Reuse: Silver Bullet?, IEEE Software,
Vol. 18, No. 05, September/October, 2001, pp. 86.
References
124
(Morisio et al., 2002) M. Morisio, M. Ezran, C. Tully, Success and Failure
Factors in Software Reuse, IEEE Transactions on Software
Engineering, Vol. 28, No. 04, April, 2002, pp. 340-357.
(Muthig et al., 2004) D. Muthig, I. John, M. Anastasopoulos, T. Forster, J.
Doerr, K. Schmid, GoPhone - A software product line in the
mobile phone domain, Technical Report, 025.04/E. Kaiserslautern,
Fraunhofer IESE, 2004.
(Nascimento et al., 2006) L. M. Nascimento, E. S. Almeida, S. R. L. Meira,
Component-Based Development in J2ME: A Framework for
Graphical Interface Development in Mobile Devices, 6th
Brazilian
Workshop
on
Component-Based
Development
(WDBC'2006), Recife, Brazil, December, 2006, pp. 88-95.
(Nascimento et al., 2008a) L. M. Nascimento, E. S. Almeida, S. R. L. Meira, A
Case Study in Software Product Lines - The Case of the
Mobile Game Domain, 34th IEEE EUROMICRO Conference on
Software
Engineering
and
Advanced
Applications
(SEAA),
Component-Based Software Engineering (CBSE) Track, Parma, Italy,
September, 2008.
(Nascimento et al., 2008b) L. M. Nascimento, E. S. Almeida, S. R. L. Meira, A
Practical Approach for Core Assets Development in Software
Product Lines for the Mobile Game Domain and its Empirical
Validation, Software – Practice & Experience, Vol. 38, No. 12,
December, 2008, in evaluation.
(Nascimento et al., 2009) L. M. Nascimento, E. S. Almeida, S. R. L. Meira, Core
Assets Development in Software Product Lines - Towards a
Practical Approach for the Mobile Game Domain, 24th Annual
ACM Symposium on Applied Computing, Honolulu, Hawaii, USA,
March, 2009, in evaluation.
(Neighbors, 1980) J. M. Neighbors, Software Construction Using
Components,
Ph.D.
Thesis,
University
of
California,
Irvine,
Department of Information and Computer Science, USA, April, 1980,
pp.217.
References
125
(Nobrega et al., 2008) J. P. Nobrega, E. S. Almeida, S. R. L. Meira, InCoME:
Integrated Cost Model for Product Line Engineering, 34th IEEE
EUROMICRO Conference on Software Engineering and Advanced
Applications (SEAA), Component-Based Software Engineering (CBSE)
Track, Parma, Italy, September, 2008.
(Nokia, 2008) The Nokia Website, Available on http://www.nokia.com/,
Accessed in January, 2008.
(OMG UML, 2007) Object Management Group. OMG Unified Modelling
Language Specification, Available on http://www.uml.org/, Version
2.1.1, Accessed in September, 2007.
(OMG OCL, 2007) Object Management Group. OMG Object Constraint
Language (OCL), Available on http://www.omg.org/technology/
documents/modeling_spec_catalog.htm#OCL, Version 2.0, Accessed
in September, 2007.
(Ommering, 2000) R. V. Ommering, Beyond product families: Building a
product population, 3rd International Workshop on Software
Architectures for Product Families (IW-SAPF), Las Palmas de Gran
Canaria, Spain, March, 2000, pp. 187-198.
(Ommering et al., 2000) R. van Ommering, F. van der Linden, J. Kramer, and J.
Magee,
The
Koala
Component
Model
for
Consumer
Electronics Software, IEEE Computer, Vol. 33, No. 03, March,
2000, pp. 78–85.
(Ommering, 2002) R. van Ommering, Building Product Populations with
Software Components, 24th International Conference on Software
Engineering (ICSE), Orlando, Florida, USA, May, 2002, pp. 255–265.
(Ommering, 2004) R. van Ommering, Building Product Populations with
Software Components, Ph.D. Thesis, University of Groningen,
Netherlands, 2004.
(OSGi, 2008) OSGi Alliance, Available on http://www.osgi.org. Accessed in
February, 2008.
References
126
(Parnas, 1978) D. Parnas, Designing Software for Ease of Extension and
Contraction, 3rd International Conference on Software Engineering
(ICSE), Atlanta, Georgia, USA, May, 1978, pp. 264-277.
(Pasetti & Pree, 2000) A. Pasetti, W. Pree, Two Novel Concepts for
Systematic Product Line Development, 1st Software Product Line
Conference (SPLC1), Denver, Colorado, USA, August, 2000, pp. 249270.
(Philips, 2008) The Philips Website, Available on http://www.philips.com/,
Accessed in January, 2008.
(Pohl et al., 2005) K. Pohl, G. Bockle, F. van der Linden, Software Product
Line Engineering: Foundations, Principles and Techniques,
Springer, 2005, pp. 468.
(Poulin, 2006) J. S. Poulin, The Business Case for Software Reuse:
Reuse Metrics, Economic Models, Organizational Issues, and
Case Studies, Tutorial Notes, Torino, Italy, June, 2006.
(Pressman, 2005) R. S. Pressman, Software Engineering: A Practitioner’s
Approach, McGraw-Hill, 2005, pp. 880.
(Prieto-Diaz & Freeman, 1987) R. Prieto-Diaz, P. Freeman, Classifying
Software for Reusability, IEEE Software, Vol. 04, No. 01, January,
1987, pp. 06-16.
(Rombach, 2000) D. Rombach, Fraunhofer: The German Model for
Applied Research and Technology Transfer, 22nd International
Conference on Software Engineering (ICSE), Limerick, Ireland, May,
2000, pp. 25-34.
(Rozum, 1993) J. Rozum, Concepts on Measuring the Benefits of
Software Process Improvement, Technical Report CMU/SEI-93TR-009, Carnegie Mellon, June, 1993.
(Rucker, 2002) R. Rucker, Software Engineering and Computer Games,
Addison-Wesley, 2002, pp. 648.
(Sametinger, 1997) J. Sametinger, Software Engineering with Reusable
Components, Springer- Verlag, 1997, pp.275.
References
127
(SEI, 1997) Software Engineering Institute (SEI) / Carnegie Mellon,
Available
on
http://www.sei.cmu.edu/str/descriptions/
cyclomatic_body.html, Accessed in September, 2008.
(SEI, 2008) Software Engineering Institute (SEI) / Carnegie Mellon,
Available on http://www.sei.cmu.edu/, Accessed in January, 2008.
(Sharp,
2000)
D.
C.
Sharp,
Component
Based
Product
Line
Development of Avionics Software, 1st Software Product Line
Conference (SPLC1), Denver, Colorado, USA, August, 2000, pp. 353–
369.
(Silva et al., 2008) F. R. C. Silva, E. S. Almeida, S. R. L. Meira, Towards an
Effective Component Testing Approach Supported by a CASE
Tool,
2nd
Brazilian
Symposium
on
Software
Components,
Architectures, and Reuse (SBCARS), Porto Alegre, Brazil, August,
2008.
(Simos et al., 1996) M. Simos, D. Creps, C. Klingler, L. Levine, D. Allemang,
Organization Domain Modeling (ODM) Guideboo, Version 2.0,
Technical Report, June, 1996, pp. 509.
(SPL Hall of Fame, 2008) Software Product Line Hall of Fame, Available
on http://www.sei.cmu.edu/productlines/plp_hof.html, Accessed in
January, 2008.
(Szyperski, 2002) C. Szyperski, Component Software: Beyond ObjectOriented Programming, Addison-Wesley, 2002, pp. 588.
(Toft et al., 2000) P. Toft, D. Coleman, J. Ohta, A Cooperative Model for
Cross-Divisional
Product
Development
for
a
Software
Product Line, 1st Software Product Line Conference (SPLC1), Denver,
Colorado, USA, August, 2000, pp. 111-132.
(Villela, 2000) R. M. M. B. Villela, Search and Recovery of Components in
Software Reuse Environments (in portuguese), Ph.D. Thesis,
Federal University of Rio de Janeiro, December, 2000, pp. 264.
References
128
(Voget & Becker, 2002) S. Voget, M. Becker, Establishing a Software
Product Line in an Immature Domain, 2nd Software Product Line
Conference (SPLC2), San Diego, California, August, 2002, pp. 60-67.
(Weiss & Lai, 1999) D. M. Weiss, C. T. R. Lai, Software Product-Line
Engineering: A Family-Based Software Development Process,
Addison-Wesley, 1999, pp. 426.
(White et al., 2008) J. White, D. C. Schmidt, E. Wuchner, A. Nechypurenko,
Automatically Composing Reusable Software Components
for Mobile Devices, Journal of Brazilian Computer Society (JBCS),
Vol. 14, No. 01, March, 2008.
(Wijnstra, 2000) J. G. Wijnstra, Component Frameworks for a Medical
Imaging Product Family, 3rd International Workshop on Software
Architectures for Product Families (IW-SAPF), Las Palmas de Gran
Canaria, Spain, March, 2000, pp. 4-18.
(Wohlin et al., 2000) C. Wohlin, P. Runeson, M. Host, M. C. Ohlsson, B.
Regnell, A. Wesslén, Experimentation in Software Engineering:
An Introduction. Kluwer Academic Publishers, 2000, pp. 204.

Documentos relacionados

RiPLE-RE: A Requirements Engineering Process

RiPLE-RE: A Requirements Engineering Process There are a lot of people that directly or indirectly participated on the results of this work. Without all them, I could not go the entire Master path. My excuses for the ones I forgot, it does no...

Leia mais

RiPLE-TE: A Software Product Lines Testing

RiPLE-TE: A Software Product Lines Testing Pernambuco in partial fulfillment of the requirements for the degree of M.Sc. in Computer Science.

Leia mais

Bruno Cabral`s Bachelor Thesis

Bruno Cabral`s Bachelor Thesis specialized, with little to no customization, making very hard to find one that perfectly fit one’s needs. A different type of software systems development is Software Product Line Engineering – SP...

Leia mais

An Integrated Cost Model for Product Line

An Integrated Cost Model for Product Line In the text of this dissertation the term worthwhile is used many times to express a situation where an investment is indicated. Considering my master studies an investment itself, I would like to ...

Leia mais

Rodrigo Cavalcante Mendes

Rodrigo Cavalcante Mendes CIÊNCIA DA COMPUTAÇÃO DO CENTRO DE INFORMÁTICA DA UNIVERSIDADE FEDERAL DE PERNAMBUCO COMO REQUISITO PARCIAL PARA OBTENÇÃO DO GRAU DE MESTRE EM CIÊNCIA DA COMPUTAÇÃO.

Leia mais

“A Component Testing Approach Supported by a CASE Tool” by

“A Component Testing Approach Supported by a CASE Tool” by 4.7.5. Providing Information to Component Consumer Tester .............................. 57 4.7.6. Towards Supporting Component Consumer Tester ..................................... 62 4.7.7. Requi...

Leia mais