<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>0717-5000</journal-id>
<journal-title><![CDATA[CLEI Electronic Journal]]></journal-title>
<abbrev-journal-title><![CDATA[CLEIej]]></abbrev-journal-title>
<issn>0717-5000</issn>
<publisher>
<publisher-name><![CDATA[Centro Latinoamericano de Estudios en Informática]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0717-50002013000100007</article-id>
<title-group>
<article-title xml:lang="en"><![CDATA[Managing SPL Variabilities in UAV Simulink Models with Pure: variants and Hephaestus]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Steiner]]></surname>
<given-names><![CDATA[Eduardo]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Masiero]]></surname>
<given-names><![CDATA[Paulo]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Bonifácio]]></surname>
<given-names><![CDATA[Rodrigo]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação]]></institution>
<addr-line><![CDATA[São Carlos ]]></addr-line>
<country>Brazil</country>
</aff>
<aff id="A02">
<institution><![CDATA[,Universidade de Brasília Instituto de Ciências Exatas Departamento de Ciência da Computação]]></institution>
<addr-line><![CDATA[Brasília ]]></addr-line>
<country>Brazil</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>04</month>
<year>2013</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>04</month>
<year>2013</year>
</pub-date>
<volume>16</volume>
<numero>1</numero>
<fpage>7</fpage>
<lpage>7</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.edu.uy/scielo.php?script=sci_arttext&amp;pid=S0717-50002013000100007&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.edu.uy/scielo.php?script=sci_abstract&amp;pid=S0717-50002013000100007&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.edu.uy/scielo.php?script=sci_pdf&amp;pid=S0717-50002013000100007&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="en"><p><![CDATA[Unmanned Aerial Vehicles (UAV) are vehicles that fly without a pilot and are able to execute different types of missions, such as surveillance, topographical data collection, and environment monitoring. This motivates some degree of variability in the controlling software of UAV - usually specified using Simulink models -, even though it is also possible to reuse software in this domain using systematic approaches such as Software Product Lines (SPLs). In this paper we present a catalog of patterns to represent variable features in Simulink and show how to construct a simple software product line for an UAV. We also show mechanisms and an infrastructure for configuring Simulink assets, using two tools to manage variabilities: Pure::variants and Hephaestus. These tools are also compared according to a set of characteristics.]]></p></abstract>
<abstract abstract-type="short" xml:lang="es"><p><![CDATA[Los vehículos aéreos no tripulados- Unmanned Aerial Vehicles (UAV) son vehículos que vuelan sin piloto y son capaces de ejecutar diferentes misiones. Esto motiva un grado de variabilidad en el software de control, aunque es posible reusar software en este dominio utilizando enfoques sistemáticos como el de Software Product Lines (SPLs). En este trabajo presentamos un catálogo de patrones para representar aspectos diferentes de Simulink y mostramos como construir una línea de producto de software para un UAV.]]></p></abstract>
<kwd-group>
<kwd lng="en"><![CDATA[Unmanned Aerial Vehicles]]></kwd>
<kwd lng="es"><![CDATA[Simulink Models]]></kwd>
<kwd lng="en"><![CDATA[Software Product Lines]]></kwd>
<kwd lng="en"><![CDATA[Pure variants]]></kwd>
<kwd lng="en"><![CDATA[Hephaestus]]></kwd>
<kwd lng="pt"><![CDATA[Linha de Produtos de Software]]></kwd>
<kwd lng="pt"><![CDATA[Veículos Aéreos Nao Tripulados]]></kwd>
<kwd lng="pt"><![CDATA[Simulink]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <div class="maketitle"> <b><font face="Verdana" size="4">Managing SPL Variabilities in UAV Simulink Models with Pure: variants and Hephaestus</font></b>    <div class="center">    <font face="Verdana" size="2"> <span class="cmbx-12">Eduardo Steiner and Paulo Masiero</span>     <br> <span class="cmr-12">Departamento de Sistemas de Computa&ccedil;&atilde;o,</span>     <br> <span class="cmr-12">Instituto de Ci&ecirc;ncias Matem&aacute;ticas e de Computa&ccedil;&atilde;o,</span>     <br> <span class="cmr-12">Universidade de S&atilde;o Paulo,</span>     <br> <span class="cmr-12">S&atilde;o Carlos, Brazil, PO Box 668, 13560-970</span>     <br> <span class="cmsy-10x-x-120">{</span><span class="cmti-12"><a  href="mailto:steiner@icmc.usp.br">steiner</a>, <a  href="mailto:masiero@icmc.usp.br">masiero</a></span><span  class="cmsy-10x-x-120">}</span><span class="cmti-12">@icmc.usp.br </span><br  class="and"> <span class="cmbx-12">Rodrigo Bonif&aacute;cio</span>     <br> <span class="cmr-12">Departamento de Ci&ecirc;ncia da Computa&ccedil;&atilde;o,</span>     <br> <span class="cmr-12">Instituto de Ci&ecirc;ncias Exatas,</span>     <br> <span class="cmr-12">Universidade de Bras&iacute;lia,</span>     ]]></body>
<body><![CDATA[<br> <span class="cmr-12">Bras&iacute;lia, Brazil, PO Box 4466, 70910-900</span>     <br> <span class="cmti-12"><a href="mailto:rbonifacio@cic.unb.br">rbonifacio@cic.unb.br</a></span>   </font>     <div class="minipage">     <div class="center">     <p><font face="Verdana" size="2"><span class="cmbx-10">Abstract</span></font></p> </div>     <p><font face="Verdana" size="2">Unmanned Aerial Vehicles (UAV) are vehicles that fly without a pilot and are able to execute different types of missions, such as surveillance, topographical data collection, and environment monitoring. This motivates some degree of variability in the controlling software of UAV &ndash; usually specified using Simulink models &ndash;, even though it is also possible to reuse software in this domain using systematic approaches such as <span class="cmti-10">Software Product Lines </span>(SPLs). In this paper we present a catalog of patterns to represent variable features in Simulink and show how to construct a simple software product line for an UAV. We also show mechanisms and an infrastructure for configuring Simulink assets, using two tools to manage variabilities: Pure::variants and Hephaestus. These tools are also compared according to a set of characteristics.&nbsp;</font></p>     <p><font face="Verdana" size="2">Spanish Abstract:&nbsp;</font></p>     <p><font face="Verdana" size="2">Los veh&iacute;culos a&eacute;reos no tripulados- Unmanned Aerial Vehicles (UAV) son veh&iacute;culos que vuelan sin piloto y son capaces de ejecutar diferentes misiones. Esto motiva un grado de variabilidad en el software de control, aunque es posible reusar software en este dominio utilizando enfoques sistem&aacute;ticos como el de Software Product Lines (SPLs). En este trabajo presentamos un cat&aacute;logo de patrones para representar aspectos diferentes de Simulink y mostramos como construir una l&iacute;nea de producto de software para un UAV. </font> </p> </div> </div> </div>     <p><font face="Verdana" size="2"><span class="cmbx-10">Keywords: </span>Unmanned Aerial Vehicles, Simulink Models, Software Product Lines, Pure::variants, Hephaestus.     <br> <br class="newline"> Portuguese Keywords: Linha de Produtos de Software, Ve&iacute;culos A&eacute;reos Nao Tripulados, Simulink     ]]></body>
<body><![CDATA[<br> </font> </p>     <p><font face="Verdana" size="2">Received 2012-07-09, Revised 2012-12-13, Accepted 2012-12-13 </font> </p>     <p><font face="Verdana" size="2"><span class="titlemark">1 </span> <a  id="x1-10001"></a>Introduction</font></p>     <p><font face="Verdana" size="2">The approach of software product line (SPL) is ideal for software domains where the objective is to develop a set of products that have common characteristics and variable parts. Using this approach it is possible to develop systems with much less time and effort compared to traditional development approaches (focusing on a single system). A software domain that has these characteristics is the one related to the control of Unmanned Aerial Vehicles (UAV), which includes an autopilot.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The Software Product Line (SPL) approach has been successfully used in the development of embedded systems. It looks for commonalities and variabilities within a family of products and maintains a set of core assets to leverage reuse. We have already explored the development of a SPL for UAVs using an approach called ProLiCES&nbsp;<span class="cite">(<a href="#Xbraga-1">1</a>)</span><a  name="1."></a>. In the implementation phase, contrarily to many other proposals in this domain, we have used a model-based approach that uses Simulink models to generate <span class="cmti-10">C </span>code.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Nevertheless, there are just a few works&nbsp;<span  class="cite">(<a href="#Xdziobek2008functional">2</a><a name="2."></a>,&nbsp;<a  href="#Xpolzer2009applying">3</a><a name="3."></a>)</span> that investigate how to model and manage variabilities in this environment. Thus, in this paper we show a catalog of patterns to model variabilities in Simulink and a simple SPL that has been developed to test our approach. Here we also explain how to manage configurability of SPL assets modeled in Simulink, considering two alternative product derivation tools tailored to manage variability in SPL Simulink models. This paper also shows how these tools have been used to configure variabilities of a Simulink model of a UAV. Furthermore, a comparison of the main features, benefits and drawbacks of each tool is presented.&nbsp;</font></p>     <p> <font face="Verdana" size="2">This paper is organized as follows: Section&nbsp;<a  href="#x1-20002">2</a> introduces some related work, considering SPLs for Unmanned Aerial Vehicles, modeling SPL variability in Simulink models, and tool support for modeling SPL variabilities in Simulink models. Section&nbsp;<a href="#x1-60003">3</a> presents one of the contributions of this paper, which is an extended approach for modeling SPL variabilities in Simulink models. Then, in Section&nbsp;<a  href="#x1-70004">4</a> we model the variabilities of Tiriba (a small-sized UAV) using our approach. In order to do that, we first customized two existing tools (Pure::Variants and Hephaestus) for product derivation, accordingly the requirements of our approach. Section&nbsp;<a href="#x1-80004.1">4.1</a> and Section&nbsp;<a  href="#x1-90004.2">4.2</a> detail the customization of such a tools. In Section&nbsp;<a  href="#x1-100005">5</a> we compare the use of Pure::Variants and Hephaestus to manage SPL variability and product derivation and, finally, Section&nbsp;<a href="#x1-110006">6</a> presents our conclusions and some future works directions. </font> </p>     <p><font face="Verdana" size="2"><span class="titlemark">2 </span> <a  id="x1-20002"></a>Related Work</font></p>     <p><font face="Verdana" size="2"><span class="titlemark">2.1 </span> <a  id="x1-30002.1"></a>Software Product Lines for Unmanned Aerial Vehicles</font></p>     <p><font face="Verdana" size="2">The Software Product Line (SPL) approach aims to develop a set or family of software products within a specific domain&nbsp;<span class="cite">(<a  href="#Xclements2001software">4</a><a name="4."></a>)</span>. Products of a family have a common part (a reusable architecture) and variable parts that satisfy different requirements. An important SPL concept is the one of a feature, which is a functional characteristic considered relevant for both customers and developers&nbsp;<span class="cite">(<a href="#Xczarnecki-book">5</a><a  name="5."></a>,&nbsp;<a href="#Xkang-foda">6</a><a name="6."></a>)</span>. Features might be mandatory, optional or alternative, and its structure and relationships are usually represented as feature diagrams.&nbsp;</font></p>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">Variability management is the activity responsible for defining, representing, exploring, implementing, and evolving the variabilities of an SPL. According to Pohl et al&nbsp;<span  class="cite">(<a href="#Xpohl2005software">7</a>)</span> this activity includes the following sub-activities: manage variable artifacts, support activities related to the definition of variabilities, support activities focused on resolving variability and collect, store and manage traceability information needed to accomplish those tasks.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Among the responsibilities of tools that support SPL variability management, it is also included that of generating specific products of the line. Generation of products can be accomplished using either positive or negative variability techniques. The derivation of products with negative variability starts with a template that contains the unification of all features of an SPL and changes them removing or disabling features that are not selected. Differently, in the positive approach, a specific asset relates fragments of artifacts with features of an SPL. During the product derivation, these fragments will be added or not to the product depending on the feature configuration.&nbsp;    <br> There are many cases of SPL developed with success in the domain of embedded systems. A large number of companies have used the approach to develop its products, such as Siemens, Nokia, Philips and HP&nbsp;<span class="cite">(<a  href="#Xclements2001software">4</a>,&nbsp;<a href="#Xpohl2005software">7</a><a  name="7."></a>)</span>. Unmanned Aerial Vehicles (UAV) is one of the different types of embedded systems that might be worthwhile to apply the SPL approach. UAV is an expression that refers to aircrafts that can fly without a pilot, or an aircraft structure and an embedded computer system which, combined with sensors, GPS, actuators and CPUs are able to fly without human intervention&nbsp;<span class="cite">(<a  href="#Xpastor2007uav">8</a><a name="8."></a>)</span>.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The UAVs have been originally designed for military applications, because they provide safe solutions at a relatively low cost for various types of missions, such as: surveillance, spying and blocking or interfering with radars. In addition to military applications these aircrafts are increasingly being used in civilian, commercial, and scientific applications such as meteorological measurements, topographic data collection, assessment of incidents of catastrophic proportions, agriculture monitoring, fishing, and environment.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Tiriba is a small-sized, electrically motorized UAV developed in partnership between the company AGX and the INCT-SEC (National Institute of Science and Technology for Critical Embedded Systems)&nbsp;<span class="cite">(<a href="#Xbranco2011tiriba">9</a><a  name="9"></a>,&nbsp;<a href="#Xinctsec">10</a><a name="10."></a>)</span>. Its design was created using an approach based on Simulink models from which <span  class="cmti-10">C </span>code is automatically generated. Simulink is an integrated development environment based on models for system&rsquo;s analysis, modeling and simulation developed by Mathworks&nbsp;<span class="cite">(<a href="#Xdabney2004mastering">11</a><a  name="11."></a>)</span>. It uses the infrastructure of MATLAB, which enables the modeling of linear dynamic systems, nonlinear, continuous or discrete in time. Using Simulink it is possible to design, simulate, test and generate code for many types of systems, including communication systems, control and signal processing, image and video.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Developers represent a system using Simulink models by means of blocks and the execution and communication among blocks use a synchronous time model. Simulink contains a library with various types of blocks, each one representing a different dynamic process. Besides modeling in blocks, which is called dataflow, Simulink allows interaction of its models with finite state machines (FSM) and with algorithms coded in MATLAB. </font> </p>     <p><font face="Verdana" size="2"><span class="titlemark">2.2 </span> <a  id="x1-40002.2"></a>Modeling SPL Variability in Simulink Models</font></p>     <p><font face="Verdana" size="2">A few authors have discussed in the literature how to model variabilities in Simulink. Nonetheless, the negative approach seems to be preferred due to the graphical nature of Simulink modeling. Polzer et al. combine model driven techniques with rapid application development to manage variability within a sensor network&nbsp;<span class="cite">(<a href="#Xpolzer2009applying">3</a>)</span>. Using their proposed approach, the configuration process not only selects sensors and actuators based on the specific features of an SPL instance, but also tailors the micro-controller behavior according to the resulting configuration. The micro-controller behavior is specified using Simulink models, while the component variability (or parameterization is this case) is specified using a different asset (a configuration file). Using a well established practice of the SPL approach, domain engineers specify the scope of the product line using feature models&nbsp;<span class="cite">(<a  href="#Xkang-foda">6</a>)</span>. Finally, the product derivation is supported by the <span class="cmti-10">pure::variants </span>tool and the Simulink connector (we discuss tool support for Simulink product lines in Section&nbsp;<a href="#x1-50002.3">2.3</a>).&nbsp;</font></p>     <p> <font face="Verdana" size="2">Botterweck et al. also present a product derivation process for SPL Simulink models&nbsp;<span class="cite">(<a  href="#Xbotterweck2010using">12</a><a name="12."></a>)</span>, which follows a negative and transformational style (see Section&nbsp;<a  href="#x1-30002.1">2.1</a>). In order to derive valid Simulink models, corresponding to the union of all selected features, it is necessary to use the variability mechanisms of Simulink blocks for each feature. Therefore, <span class="cmti-10">optional features </span>might be represented using <span class="cmti-10">enabler subsystems</span>&mdash; in the cases where the <span class="cmti-10">enabler </span>port is 0, the subsystem will be absent. <span class="cmti-10">Alternative features </span>might be represented using <span class="cmti-10">switch blocks</span>, which have three input gates. The output value of a switch block is either the value of the first or third gate, depending on both the configuration value of its condition and the value of the second gate. Finally, <span class="cmti-10">inclusive-or </span>features might be represented using <span class="cmti-10">integrator blocks</span>, which could implement different functions such as <span class="cmtt-10">minimum </span>and <span  class="cmtt-10">maximum</span>. In their work, the instantiation process comprises two phases: product derivation and pruning. During product derivation, all blocks not related to the selected features must be removed from the resulting Simulink model. During the pruning phase, all invalid lines (which are not connected to a source block, target block, or both) must be removed from the resulting Simulink model, as well as the remaining variability mechanisms. All transformations lead to a valid Simulink model including only the blocks related to the selected features and the required lines.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Moreover, some approaches have been proposed to represent SPL variability in the vehicle domain, for both the automotive industry&nbsp;<span class="cite">(<a  href="#Xweiland:automotiva2006">13</a><a name="13."></a>,&nbsp;<a  href="#Xleitner:2011">14</a><a name="14."></a>)</span> and UAV systems&nbsp;<span class="cite">(<a href="#Xfragal:cbsec2011">15</a><a  name="15."></a>)</span>. For instance, Fragal et al. describe an approach for mapping SPL features to UAV Simulink models, using a negative technique for product derivation&nbsp;<span class="cite">(<a href="#Xfragal:cbsec2011">15</a>)</span> that basically considers <span class="cmti-10">one-to-one </span>or <span  class="cmti-10">one-to-many </span>mappings between features and blocks. Here we go beyond this simple kind of mapping, allowing relationships between feature expressions using propositional logic and differente components of simulink models (such as blocks and final state machines). Our approach is also guided by a set of variability patterns described in Section&nbsp;<a href="#x1-60003">3</a>.&nbsp;</font></p>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">Nevertheless, we also follow a negative approach for product derivation, using two disctinct methods for relating the problem space (represented as feature models) and the solution space (here represented by Simulink models). In the first method (that we implement using Pure::variants) we have to instrument the underlying model with mechanisms to model the SPL features&mdash; this is an example of annotative based method&nbsp;<span class="cite">(<a href="#Xkastner:icse2008">16</a><a  name="16."></a>)</span>. In the second method (that we implement using Hephaestus) we relate feature expressions to model transformations. In this case, which is an example of a compositional method&nbsp;<span class="cite">(<a  href="#Xkastner:icse2008">16</a>)</span>, product derivation is fullfilled by applying the set of transformations that are related to the feature expressions satisfied by the product configuration. Both methos are respectively presented in Section&nbsp;<a href="#x1-80004.1">4.1</a> and Section&nbsp;<a href="#x1-90004.2">4.2</a>. </font> </p>     <p><font face="Verdana" size="2"><span class="titlemark">2.3 </span> <a  id="x1-50002.3"></a>Tool Support for Modeling SPL Variability in Simulink Models</font></p>     <p><font face="Verdana" size="2">There exist several tools for managing variability in SPLs, and Torres et al. present an assessment of some of these tools (Pure::variants, Hephaestus, GenArch, ColorIDE, and XVCL) in the context of SPL evolution&nbsp;<span class="cite">(<a  href="#Xtorres:fosd2010">17</a><a name="17."></a>)</span>. We decided to use Pure::variants and Hephaestus to implement the tool support for our approach, since our goal here is to investigate the use of annotative and compositional methods to manage SPL variability of UVA Simulink models. We decided to implement the annotative approach using Pure::variants because a Simulink connector was already available at the time we started this research. Our decision to use Hephaestus is that, differently from the other mentioned tools, it is primarily based on a compositional approach, where no explicit annotation is required in the underlying model. Moreover, the third author of this paper is the lead Hephaestus developer, reducing the risks to implement a Hephaestus Simulink integration.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Pure::variants is a widely used business tool for managing variabilities in product lines. Among the plugins of the tool, there is the Simulink connector, which uses an approach similar to that proposed by Dziobeck et al.<span class="cite">(<a  href="#Xdziobek2008functional">2</a>)</span>. The management of variability with Simulink connector uses the concept of &ldquo;point of change&rdquo;, which encapsulates the variability information of a particular functional variant. It uses a unique identifier and also: </font> </p> <ul class="itemize1">   <li class="itemize"><font face="Verdana" size="2">A variability parameter, which describes a configuration parameter in a Simulink model that can be configured to select a functional variant. </font> </li>   <li class="itemize"><font face="Verdana" size="2">Mechanisms of variability, which describe how functional variants are selected in different parts of Simulink models. They guarantee that after parameters of variability are configured, only the selected variants are executed. These variability mechanisms are implemented by a set of specific blocks of Pure::variants that are exported to Simulink. Examples of blocks used as mechanisms of variability are presented in Section&nbsp;<a href="#x1-40002.2">2.2</a>. </font>   </li>     </ul>     <p> <font face="Verdana" size="2">Most of the variability mechanism blocks need input signals to control their execution, thus serving for the selection of variability. The blocks responsible for these signs are called control blocks and usually control variabilities in the model using values defined by the variability parameter of their variation point. Pure::variants sets the value of the variability parameter used by the control blocks based on three main artifacts: features model, instance model (a valid configuration of features of the feature model) and variant model. The latter maps expressions of features from the feature model to values of the variability parameters, as depicted in Figure&nbsp;<a href="#f1">1</a>.&nbsp;</font></p>     <p> </p> <hr class="figure">     <div class="figure"><font face="Verdana" size="2"><a id="x1-50011"></a>    <br>   </font>     <div class="caption"><font face="Verdana" size="2"><a name="f1"  href="/img/revistas/cleiej/v16n1/1a07f1.png"> <span class="id">Figure&nbsp;1: </span><span class="content">Highlevel view of Pure::variants behavior</span></a></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">    ]]></body>
<body><![CDATA[<br> </font>     <p> <font face="Verdana" size="2">Hephaestus is a tool to generate artifacts of specific instances of SPLs. In its current version, it supports variability management of different types of assets, such as use case scenarios, source code and business processes&nbsp;<span class="cite">(<a href="#Xbonifacio2009hephaestus">18</a><a  name="18."></a>)</span>. Hephaestus contains a graphical interface that allows application engineers to select artifacts and models that are input to the process of product derivation. The tool evaluates the artifacts and models and then generates artifacts for specific instances of an SPL. Figure&nbsp;<a href="#x1-50022">2</a> shows a high level view of Hephaestus. The input artifacts and models are: features model, instance models, product line assets, and configuration knowledge. The instance model represents the configuration of the features of a product and the configuration knowledge maps feature expressions to transformations that to be performed on the SPL assets.&nbsp;</font></p> <hr class="figure">     <div class="figure"><font face="Verdana" size="2"><a id="x1-50022"><img  src="/img/revistas/cleiej/v16n1/1a07f2.png" alt="PIC"></a>    <br>   </font>     <div class="caption"><font face="Verdana" size="2"><span class="id">Figure&nbsp;2: </span><span  class="content">Highlevel view of Hephaestus behavior</span></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">Nowadays there are different representations of the configuration knowledge, the simplest of which basically maps a feature to a SPL asset. The process of deriving products used by Hephaestus starts evaluating each feature expression of the configuration knowledge from selected features of the instance model. All transformations associated to the feature expressions evaluated as true are applied to the SPL assets selected for the process; these transformations select or modify parts of the assets for the product that is being generated.&nbsp; </font>     <p> <font face="Verdana" size="2">Hephaestus has been recently extended as part of this work to allow for the generation of instances of SPL products in Simulink. The configuration knowledge defined in this extension associates with each feature expression of a set pairs, each comprised by a block identifier and a transformation to be applied to that block.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Two transformations have been implemented in Hephaesuts: <span class="cmtt-10">selectSimulink-Block</span>, which should be linked to the block identifiers that will be selected for the instance model and <span  class="cmtt-10">clearVariabilityMechanism</span> which should be associated to blocks that implement variability mechanisms (as we detail in the next section).&nbsp;</font></p>     <p> <font face="Verdana" size="2">First <span class="cmtt-10">selectSimulinkBlock </span>transformations are executed by introducing into the instance model all blocks that are related to the selected features, as well as the connections betweem each one of these blocks. After the evaluation of all <span class="cmtt-10">selectSimulinkBlock </span>transformations, the transformations of the <span class="cmtt-10">clearVariabilityMechanism</span> are executed. In the current status of Hephaestus this transformation removes the block marked as the variability mechanism associated to it, and reconnects the block connected to its entry in the block connected to its output. An example of how this transformation can be configured and applied is shown in Figure&nbsp;<a href="#x1-50033">3</a>: the switch block is associated to the processing <span class="cmtt-10">clearVariabilityMechanism</span>, and blocks A, Input Kind, and Out1 are associated with the transformations <span class="cmtt-10">selectSimulinkBlock</span> (having already been performed). In the figure, one can see step by step how Hephaestus applies the transformation <span class="cmtt-10">clearVariabilityMechanism</span>: the variability blocks are removed and the selected block connected to the input of the block used as variability mechanism is connected to its output block.&nbsp;</font></p> <hr class="figure">     <div class="figure"><font face="Verdana" size="2">    <br>   </font>     ]]></body>
<body><![CDATA[<div class="caption"><font face="Verdana" size="2"><a name="x1-50033"  href="/img/revistas/cleiej/v16n1/1a07f3.png"><span class="id">Figure&nbsp;3: </span><span class="content">Step by step of <span class="cmtt-10">clearVariabilityMechanism </span>transformation in a Simulink model</span></a></font></div> </div> <hr class="endfigure">     <p><font face="Verdana" size="2"><span class="titlemark">3 </span> <a  id="x1-60003"></a>An Extendend Approach for Modeling Variability in Simulink Models</font></p>     <p><font face="Verdana" size="2">In order to design an SPL Simulink model, it is necessary to use a few mechanisms to model variability in different parts of the model. The main reason for that is to avoid an invalid model and to adequately bear the model variability making possible to simulate and generate SPL product specific code.&nbsp;</font></p>     <p> <font face="Verdana" size="2">As mentioned in section <a href="#x1-40002.2">2.2</a>, Botterweck et al. <span class="cite">(<a href="#Xbotterweck2010using">12</a>)</span> introduced some mechanisms for that purpose. In their work, these mechanisms model variability of optional features and features with or-inclusive and or-exclusive relationships. In this section we extend the mechanisms proposed by Botterweck et al. showing two patterns to configure features with hierarchical or dependency relations in the dataflow part of Simulink models and two patterns to configure variability in MATLAB/Simulink finite state machines (FSM).&nbsp;</font></p>     <p> <font face="Verdana" size="2">A variability mechanism for features with dependency or hierarchical relation with its functional variants encapsulated in one or more <span class="cmti-10">enabler subsystems </span>is created using an <span class="cmti-10">AND comparator block</span>; which is used to determine whether the input on the <span class="cmti-10">enabler </span>port of the feature dependent (or child feature) <span class="cmti-10">enabler subsystem </span>will be enabled or disabled. The <span class="cmti-10">enabler subsystem </span>will be enabled only in the cases where both the activation value of the father and child features are true (thus the output of the <span  class="cmti-10">AND block </span>will also be true). If one of the activation values is false, the subsystem related to the child feature will be disabled. Figure <a href="#x1-60014">4</a> shows an example of this pattern, considering that the activation values of the features are determined by constant blocks.&nbsp;</font></p> <hr class="figure">     <div class="figure"><font face="Verdana" size="2">    <br>   </font>     <p><font face="Verdana" size="2"><a id="x1-60014"><img  src="/img/revistas/cleiej/v16n1/1a07f4.png" alt="PIC"></a>    <br> </font> </p>     <div class="caption"><font face="Verdana" size="2"><span class="id">Figure&nbsp;4: </span><span  class="content"><span class="cmtt-10">Enabler subsystem </span>and <span  class="cmtt-10">comparator AND </span>blocks used as variability mechanism for features with hierarchical or dependency relations</span></font></div> &nbsp;</div> <hr class="endfigure"><font face="Verdana" size="2">In the cases where the signals of dependent features are both used in the same subsystem of a model, it is possible to use a <span class="cmti-10">switch block </span>as a variability mechanism (<span class="cmti-10">Switch Pattern</span>). Figure <a href="#x1-60025">5</a> shows an example, where if both features are selected, the input of the control port of the <span  class="cmti-10">switch block </span>must be set to get the output of the block that uses the signals of the father and child features. Otherwise, the input of the control port must be set to get the output of the father&rsquo;s block.&nbsp; </font> <hr class="figure">     ]]></body>
<body><![CDATA[<div class="figure"> <font face="Verdana" size="2">     <br>   </font>     <div class="caption"><font face="Verdana" size="2"><a name="x1-60025"  href="/img/revistas/cleiej/v16n1/1a07f5.png"><span class="id">Figure&nbsp;5: </span><span class="content"><span class="cmtt-10">Switch </span>block used as variability mechanism for features with hierarchical or dependency relations and mixed signals</span></a></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">    <br> </font>     <p> <font face="Verdana" size="2">The interaction with FSMs is a common property of many Simulink models. Thereby, besides the variability in the dataflow part of the models (as explained before), an SPL Simulink model must also considers FSM variability. Variability in FSM can be accomplished by modeling a FSM for each variability within the scope of an <span class="cmtt-10">enabler subsystem</span>. Using this pattern, the application engineer can activate the desired FSM as well as deactivate the non desired ones. All <span class="cmtt-10">enabler subsystems </span>that comprise FSMs must be further modularized within other subsystems, together with an infrastructure to manage the inputs and outputs of the selected FSM as part of a product (or simulation). An example of such a subsystem is shown in Figure&nbsp;<a href="#x1-60036">6</a> (external interface). In the example, there are two mandatory inputs and two mandatory outputs. In other words, they are always used independently of the chosen FSM; there are also an optional input and an optional output that can be used or not, depending on the selected FSM.&nbsp;</font></p>     <p> </p> <hr class="figure">     <div class="figure"><font face="Verdana" size="2">    <br>   </font>     <div class="caption"><font face="Verdana" size="2"><a name="x1-60036"  href="/img/revistas/cleiej/v16n1/1a07f6.png"><span class="id">Figure&nbsp;6: </span><span class="content">Subsystem used as infrastructure to organize inputs and outputs of FSMs that implements SPL variabilities</span></a></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">    <br> </font>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">Figure <a href="#x1-60047">7</a> shows the details of the <span class="cmti-10">FSM selector </span>subsystem of Figure&nbsp;<a href="#x1-60036">6</a>, which has two FSMs, each one executing the behavior of a different variant. Besides the internal variability of each FSM, they also have variability in the configuration of the input and output gates: <span class="cmtt-10">FSM1 </span>has two inputs and three outputs whereas <span class="cmtt-10">FSM2 </span>has three inputs and two outputs. Note that both FSMs output their signals to the <span  class="cmtt-10">FSM selector</span>, and, for this reason, we have to use a <span class="cmti-10">switch block</span>. <!--l. 89--></font></p>     <p> </p> <hr class="figure">     <div class="figure"><font face="Verdana" size="2">    <br>   </font>     <div class="caption"><font face="Verdana" size="2"><a name="x1-60047"  href="/img/revistas/cleiej/v16n1/1a07f7.png"><span class="id">Figure&nbsp;7: </span><span class="content">Variability mechanism for FSM with different variabilities</span></a></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">    <br> </font>     <p> <font face="Verdana" size="2">A second approach to model variability in FSM consists of creating a conditional transition to variables that define variabilities. The MATLAB FSMs can have inputs from the dataflow part of a MATLAB/Simulink model. These inputs can be used as conditional variables to perform a transition to one of two states; they can be used as single boolean variables or in expressions involving logic operators. If there are specific states in the machine that implement behavior related to SPL variability, it is possible to create an alternative transition in the FSM so that it can obtain this states depending on the condition associated to the transition. In the cases where the condition is a variable with the value assigned to an FSM input from the dataflow part, the control of the selection variability will require little effort, and it would be possible to be represented as a <span class="cmti-10">constant block </span>(the same kind that is being used to enable or disable <span class="cmti-10">enabler subsystems </span>in the mechanisms described here).&nbsp;</font></p>     <p> <font face="Verdana" size="2">Figure&nbsp;<a href="#x1-60058">8</a> shows an example of a FSM with variabilities modeled following this approach. In this FSM there are two variants, one that considers only states <span  class="cmtt-10">low_peak </span>and <span  class="cmtt-10">high_peak </span>and other that considers only <span class="cmtt-10">low_peak </span>and <span class="cmtt-10">high_peak_counter</span>. If the machine is in the initial state and the variable <span class="cmtt-10">sine_wave_value </span>is greater than 10, it will change its state. The following state will depend on the boolean variable <span class="cmtt-10">counter</span>: if this variable is true, the state will be <span class="cmtt-10">high_peak_counter</span>, or <span  class="cmtt-10">high_peak</span> otherwise.&nbsp;</font></p>     <p> </p> <hr class="figure"><font face="Verdana" size="2"><img style="width: 495px; height: 360px;" alt=""  src="/img/revistas/cleiej/v16n1/1a07f8.png">    <br> </font>     ]]></body>
<body><![CDATA[<div class="figure">     <div class="caption"><font face="Verdana" size="2"><span class="id">Figure&nbsp;8: </span><span  class="content">FSM example having variability implemented based on conditionated transitions</span></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">    <br> </font>     <p> <font face="Verdana" size="2">Finally, Figure&nbsp;<a href="#x1-60058">8</a> shows the finite state machine block for the FSM of Figure&nbsp;<a  href="#x1-60069">9</a>. It is possible to see the inputs of the FSM from the <span class="cmtt-10">Sine Wave </span>block, the input port that controls the variability (<span class="cmtt-10">counter</span>) and the machine&rsquo;s outputs.&nbsp;</font></p>     <p> </p> <hr class="figure">     <div class="figure"><font face="Verdana" size="2"><img style="width: 480px; height: 209px;" alt=""  src="/img/revistas/cleiej/v16n1/1a07f9.png">&nbsp;<span class="id">    <br> Figure&nbsp;9: </span><span class="content">FSM block for the FSM of Figure <a href="#x1-60058">8</a></span></font></div> <hr class="endfigure">     <p><font face="Verdana" size="2"><span class="titlemark">4 </span> <a  id="x1-70004"></a>Modeling Variability of UAV Product Lines Using Simulink</font></p> <font face="Verdana" size="2">As explained in Section&nbsp;<a href="#x1-30002.1">2.1</a>, Tiriba is an electrically motorized UAV. Modeling its variability as an SPL Simulink model is the main motivation for our investigation. In this section we present some details about the architecture of Tiriba&nbsp;<span class="cite">(<a href="#Xbranco2011tiriba">9</a>)</span> (Figure&nbsp;<a href="#x1-700110">10</a> shows an abstract view of the Tiriba architecture). Note in Figure&nbsp;<a href="#x1-700110">10</a> that Tiriba comprises four processors, which are responsible for the flight control and mission execution. In addition, the source code of each processor is automatically generated from the corresponding Simulink subsystem models: </font> <ul class="itemize1">   <li class="itemize"><font face="Verdana" size="2"><span class="cmbx-10">Pressure subsystem: </span>this subsystem monitors the vertical and horizontal velocities of the vehicle and its altitude. </font> </li>   <li class="itemize"><font face="Verdana" size="2"><span class="cmbx-10">Inertial subsystem: </span>this subsystem determines the space position of the vehicle considering its longitude, latitude and altitude. </font> </li>   <li class="itemize"><font face="Verdana" size="2"><span class="cmbx-10">Navigation subsystem: </span>this subsystem controls the UAV mission and navigation. Based on the planned flight route the UAV current position, this subsystem computes the actions the vehicle must perform in order to achieve the flight mission. </font> </li>   <li class="itemize"><font face="Verdana" size="2"><span class="cmbx-10">Control subsystem: </span>based on the commands sent by the navigation subsystem, this subsystem must computer the suitable parameter values of the actuators, positioning the UAV to the right direction.</font></li>     </ul> <hr class="figure">     <div class="figure"><font face="Verdana" size="2">    ]]></body>
<body><![CDATA[<br>   </font>     <div class="caption"><font face="Verdana" size="2"><a name="x1-700110"  href="/img/revistas/cleiej/v16n1/1a07f10.png"><span class="id">Figure&nbsp;10: </span><span class="content">High level view of Tiriba</span></a></font></div> &nbsp;</div> <hr class="endfigure"><font face="Verdana" size="2">To address the variability space, in this work our domain engineering activity involved a deep study of the UAV domain, interviews with domain specialists, and the restructuring of the Tiriba Simulink model according to the observed variability. The configuration of this variability in the Tiriba Simulink model resulted in a small UAV SPL, represented by the feature model of Figure&nbsp;<a href="#x1-700211">11</a> . In summary, our variability space consists of six optional features (<span class="cmti-10">Photographic Camera</span>, <span  class="cmti-10">GeorefLog</span>, <span class="cmti-10">Parachute</span>, <span class="cmti-10">EntrySegmentSimulation</span>, <span  class="cmti-10">FailureHandler</span>, and <span class="cmti-10">FeatherThresholdHandler</span>) and one alternative feature <span class="cmti-10">Engine </span>that might be further configured as <span class="cmti-10">Combustion</span> <span class="cmti-10">Based Engine </span>or <span class="cmti-10">Electric Engine</span>, but not both of them. Two of the six optional features are related to the UAV payload (<span class="cmti-10">Photographic Camera </span>and <span  class="cmti-10">GeorefLog</span>), one optional feature (<span  class="cmti-10">Parachute</span>) aims to improve the lifetime of the UAVs, and the remaining three optional features relates to the goals of the missions.&nbsp; </font> <hr class="figure">     <div class="figure"><font face="Verdana" size="2">    <br>   </font>     <div class="caption"><font face="Verdana" size="2"><a name="x1-700211"  href="/img/revistas/cleiej/v16n1/1a07f11.png"><span class="id">Figure&nbsp;11: </span><span class="content">Feature model created based on the Tiriba Simulink model</span></a></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">In order to enable an automatic approach for product derivation, we restructured the Tiriba Simulink Model in the points where the optional and alternative features have some influence.&nbsp; </font>     <p> <font face="Verdana" size="2">For instance, consider the <span class="cmti-10">Photographic camera </span>and <span class="cmti-10">Georef log </span>optional features. The UAV camera subsystem won&rsquo;t be present if the <span class="cmti-10">Photographic camera </span>optional feature is not selected for a specific product&mdash; and configurations like this are only valid for missions that do no take pictures during the flight. Similarly, the facility of attaching GPS data to the pictures is only available in the cases where the <span class="cmti-10">Georef log </span>feature is selected. The changes needed by the Tiriba Simulink model to introduce support for the mentioned variability are as follows. First, the blocks related to both features were removed from the original, single product Simulink model. Then, the corresponding behavior was modeled as <span  class="cmti-10">enabler subsystems</span>. Finally, we introduced a three-port switch block as a variability mechanism. Using this switch, there are three possible configurations: the selection of both <span class="cmti-10">Photographic camera </span>and <span class="cmti-10">Georef log</span>, the selection of only <span class="cmti-10">Photographic</span> <span class="cmti-10">camera</span>, and the absence of both of these features. Figure&nbsp;<a href="#x1-700312">12</a> illustrates how we evolve the original model into the model supporting the SPL variability introduced by the <span  class="cmti-10">Photographic camera </span>and <span class="cmti-10">Georef log</span> features.&nbsp;</font></p>     <p> </p> <hr class="figure">     <div class="figure"><font face="Verdana" size="2">    <br>   </font>     <div class="caption"><font face="Verdana" size="2"><a name="x1-700312"  href="/img/revistas/cleiej/v16n1/1a07f12.png"><span class="id">Figure&nbsp;12: </span><span class="content">Tiriba Simulink model before and after restructuring it with mechanisms to comport variability of the features related to aircraft&rsquo;s payload</span></a></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">    ]]></body>
<body><![CDATA[<br> </font>     <p> <font face="Verdana" size="2">Regarding the <span class="cmti-10">Parachute </span>feature, the corresponding blocks in the original Simulink model were already specified as an independent subsystem. Therefore, to model the parachute variability, we only had to transform this subsystem into an <span class="cmti-10">enabler subsystem</span>, as discussed in Section&nbsp;<a href="#x1-40002.2">2.2</a>. Differently, the variability related to the optional features <span class="cmti-10">Entry segment simulation</span>, <span  class="cmti-10">Feather threshold handler</span>, and <span  class="cmti-10">Failure handler </span>was specified in the finite-state machine (FSM) that models the Tiriba mission controller unsing the mechanism of transitions conditioned to variables that define variability (as introduced in Section <a  href="#x1-60003">3</a>). When the feature is <span class="cmti-10">Entry segment simulation</span> selected, a simulation is performed whenever the UAV starts a new segment of the mission, in order to find out the better approach to transit between two mission segments. The second feature (<span class="cmti-10">Feather</span> <span class="cmti-10">threshold handler</span>), when selected, fix the UAV route whenever the vehicle deviates more than a certain limit from the planed mission route. Finally, when the <span  class="cmti-10">Failure handler </span>feature is selected, the UAV is able to return to specific positions where, for any reason, a picture was not captured during the mission.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Since the behavior of these features is specified in the mission controller FSM, we introduced alternative flows having boolean variables conditions, which allow us to enable or disable certain flows and states according to the selection or not of the aforementioned features (following the pattern introducted in the section <a href="#x1-60003">3</a> as illustrated by Figures <a href="#x1-60058">8</a> and <a href="#x1-60069">9</a>). For instance, the boolean value <span class="cmtt-10">SimEnable </span>is the conditional that enables (or disable) the behavior related to the <span class="cmti-10">Entry segment simulation </span>feature. Therefore, there is a boolean variable for each optional feature related to the mission controller, and the role of these variables is to decide which transitions of the FSM will take place. Figure&nbsp;<a href="#x1-700413">13</a> shows the input values that are assigned to these variables highlighted in red.&nbsp;</font></p> <hr class="figure">     <div class="figure"><font face="Verdana" size="2">    <br>   </font>     <div class="caption"><font face="Verdana" size="2"><a name="x1-700413"  href="/img/revistas/cleiej/v16n1/1a07f13.png"><span class="id">Figure&nbsp;13: </span><span class="content">Alternative transition conditioned to variables and input added to the FEM that controls the aircraft&rsquo;s mission</span></a></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">    <br> </font>     <p> <font face="Verdana" size="2">There are two valid engine configurations: <span  class="cmti-10">Combustion based engine </span>and <span  class="cmti-10">Electric engine</span>. The first leads to a better flight autonomy and higher power when compared to the electric engine, even though introducing complexity to the acceleration controller. This occurs because it is necessary a gradual process for both acceleration and deceleration, target to avoid accidents and the lost of the UAV which eventually occurs due to an engine stop. Another characteristic of combustion based engines is that they are constrained by a low speed limit, and the engine could also stop when the UAV flies at a speed bellow this limit. Electric engines are less restricted, and the acceleration and deceleration might be done abruptly. Moreover, the engine do not stop even when the UAV speed is zero. Therefore, although presenting less autonomy, electric engines are safer, make easier to design and integrate the controller into the UAV, and reduce the maintenance costs. Regarding the Tiriba Simulink model, the engine variability is scattered through two distinct areas: the behavior related to the engine configuration, so that it is possible to configure the maximum and minimal speeds of the UAV; and the behavior related to the acceleration and deceleration of the engine, which is only required by combustion based engines. </font> </p>     <p><font face="Verdana" size="2"><span class="titlemark">4.1 </span> <a  id="x1-80004.1"></a>Configuring Tiriba variabilities using Pure::variants</font></p> <font face="Verdana" size="2">We introduced six variation points to configure the Tiriba Simulink Model so that we could derive instances using Pure::variants. For the <span class="cmti-10">Parachute </span>feature, we introduced a boolean parameter and replaced a <span class="cmti-10">constant block </span>by a <span class="cmti-10">control block</span>, which is connected to the <span  class="cmti-10">enabler </span>of the parachute subsystem.&nbsp; </font>     <p> <font face="Verdana" size="2">As mentioned in the previous section, the engine configuration (combustion based or electric based) changes the behavior of two distinct areas (speed and acceleration controllers). For both of them, we introduced a <span class="cmti-10">switch </span>as variability mechanism. Then, we configured the control block of these switches with the same variation point, which might assume two distinct values: 0 indicating the selection of the <span  class="cmti-10">Electric engine </span>feature; and 1 indicating the selection of the <span class="cmti-10">Combustion based engine </span>feature.&nbsp;</font></p>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">The Figure <a href="#x1-800114">14</a> shows the model in the two areas related to the engine variability. The left side shows the configuration of the minimum speed parameters of each engine: the upper pink block conected to the switch configures the electric engine minimum speed (0) while the lower pink block configures the combustion minimum speed (0.2). The right side shows the aceleration control of each type of engine: the combustion related part (upper port of the switch) needs a Lever subsystem to smooth the desired aceleration level; on the other hand, the electric engine part doesn&rsquo;t need any block to smooth the desired aceleration; the seted engine aceleration level is the very same as the desired.&nbsp;</font></p> <hr class="figure">     <div class="figure"><font face="Verdana" size="2">    <br>   </font>     <div class="caption"><font face="Verdana" size="2"><a name="x1-800114"  href="/img/revistas/cleiej/v16n1/1a07f14.png"><span class="id">Figure&nbsp;14: </span><span class="content">Tiriba Simulink model areas related to the engine features and its configuration under Pure::variants tool</span></a></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">We also configured both <span class="cmti-10">Photographic camera </span>and <span class="cmti-10">Georef log </span>features using one variation point, whose parameter might assume the values 1 (indicating that none of the features were selected), 2 (indicating that only the <span class="cmti-10">Photographic camera </span>feature was selected), and 3 (indicating that both features were selected). We attach this variation point to three control blocks: one attachment to the <span class="cmti-10">switch block</span> used as variability mechanism; and two attachments to a <span  class="cmti-10">comparator </span>block that is connected to the <span class="cmti-10">enabler gates </span>of each subsystem that specifies the features <span class="cmti-10">Photographic camera </span>and <span class="cmti-10">Georef log </span>(see Figure&nbsp;<a href="#x1-800215">15</a>.&nbsp; </font>     <p> <font face="Verdana" size="2">The remaining variation points, which are related to the UAV mission behavior, might only assume values 0 or 1 (since they address the configuration of optional features). The difference here, when compared to the variation point of the <span class="cmti-10">Parachute </span>feature, is that these variation points arise in the finite-state machine (FSM) that specifies the UAV mission. Nevertheless, the conditional gates of Simulink FSMs only accept boolean values as input, while the variation points of Pure::variants are integers. To solve this problem, we implemented a simple integer to boolean converter&mdash; when the input value is 0, it returns <span class="cmti-10">false</span>; otherwise it returns <span class="cmti-10">true</span>.&nbsp;</font></p> <hr class="figure">     <div class="figure"><font face="Verdana" size="2">    <br>   </font>     <div class="caption"><font face="Verdana" size="2"><a name="x1-800215"  href="/img/revistas/cleiej/v16n1/1a07f15.png"><span class="id">Figure&nbsp;15: </span><span class="content">Configuration of payload related features into Tiriba&rsquo;s Simulink model following Pure::variants approach</span></a></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">It was created 6 variation points with the amount of 13 possible values for our Simulink UAV product line. Figure <a href="#x1-800316">16</a> shows the pure::variants feature model and instance model on it&rsquo;s left side and the variation model with every variation point possible value in its right side.&nbsp; </font> <hr class="figure">     <div class="figure"> <font face="Verdana" size="2">     <br>   </font>     ]]></body>
<body><![CDATA[<div class="caption"><font face="Verdana" size="2"><a name="x1-800316"  href="/img/revistas/cleiej/v16n1/1a07f16.png"><span class="id">Figure&nbsp;16: </span><span class="content">Pure::variants artifacts(feature model, instance model and variability model) used in the configuration of the Tiriba Simulink model with variabilities</span></a></font></div> </div> <hr class="endfigure">     <p><font face="Verdana" size="2"><span class="titlemark">4.2 </span> <a  id="x1-90004.2"></a>Configuring Tiriba variabilities using Hephaestus</font></p> <font face="Verdana" size="2">It was relatively easy to model Tiriba variability using Hephaestus. The transformations necessary to specify the configuration knowledge were: <span class="cmtt-10">selectSimulinkBlock </span>and <span class="cmtt-10">clearVariabilityBlock</span>. In what follows, we detail the configuration knowledge specification.&nbsp; </font>     <p> <font face="Verdana" size="2">Initially, we related all mandatory blocks to the <span  class="cmti-10">Tiriba feature</span>, which is the (mandatory) root feature of the Tiriba product line. This triggers the selection of all these mandatory blocks in the final product. We also introduced one feature expression <span class="cmti-10">Parachute </span>that selects all Simulink blocks related to this feature.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The restruction of the areas related to the <span  class="cmti-10">Photographic camera </span>and <span class="cmti-10">Georef log </span>features were very similar to the restruction shown in Figure <a href="#x1-700312">12</a>. Differently of the <span class="cmti-10">Parachute </span>feature, the configuration of this features were specified using three feature expressions, since there are three valid combinations of these features and, for each possibility, the variability is solved in a different way. For instance, when both features were enabled, blocks 12785, 12813, 12831, and 12817 must be selected (this blocks are respectively the photografic camera subsystem, georef log subsystem, signal mux and join block) to the final product, and the variability block of id 12822 (a switch block) must be correctly errased from the model. When the <span class="cmti-10">Photographic camera </span>is selected and the <span class="cmti-10">Georef log </span>feature is not, only blocks 1278 must be selected in the final product, and we must also clear the variability block 12822. Finally, when none of these features are selected, we just must clear the variability block whose identifier is 12822.&nbsp;</font></p>     <p> <font face="Verdana" size="2">The Figure <a href="#x1-900117">17</a> shows the configuration knowledge built for the <span class="cmti-10">Photographic camera </span>and <span class="cmti-10">Georef log </span>features. In the Figure is possible to see the feature expressions and its implications over the transformations. The only common configuration knowledge part over the three feature expressions is the configuration of the transformation <span class="cmtt-10">clearVariabilityBlock </span>for the to the variability block switch (id 12822).&nbsp;</font></p> <hr class="figure">     <div class="figure"><font face="Verdana" size="2">    <br>   </font>     <div class="caption"><font face="Verdana" size="2"><a name="x1-900117"  href="/img/revistas/cleiej/v16n1/1a07f17.png"><span class="id">Figure&nbsp;17: </span><span class="content">Configuration knowledge of Tiriba payload features</span></a></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">    <br> </font>     <p> <font face="Verdana" size="2">For each <span class="cmti-10">mission related feature </span>we created two feature expressions&mdash; one for the cases where the feature was selected and another for the cases where the feature was not selected. For instance, if the feature <span class="cmti-10">Entry segment</span> <span class="cmti-10">simulation </span>is selected, the product derivation selects the <span class="cmti-10">1 value constant block </span>that is connected to the corresponding gate of the FSM. Differently, if the feature <span  class="cmti-10">Entry segment simulation </span>is not selected, the corresponding <span class="cmti-10">0 value constant block </span>will be selected in the final product. Therefore it was necessary to add two feature expressions for each feature related to de mission, one case the feature is selected and one case it is not. It was also necessary to make use of a <span class="cmti-10">switch </span>block as variability mechanism block, which was associated to a <span class="cmtt-10">clearVariabilityBlock </span>in the configuration knowledge for each feature expression related to the mission. Figure <a href="#x1-900218">18</a> shows on its left side variability mechanisms blocks (as <span class="cmti-10">switch </span>blocks) to structure blocks used to assign values of different variability selections; on its right side it is shown the configuration knowledge of the feature <span class="cmti-10">Entry segment</span> <span class="cmti-10">simulation</span>: there are two expressions (for the case it is selected or not) the selection of one constant block (value 1 if it&rsquo;s selected or 0 if it&rsquo;s not) and in both cases the <span class="cmti-10">switch </span>variability mechanism block is cleared.&nbsp;</font></p> <hr class="figure">     ]]></body>
<body><![CDATA[<div class="figure"><font face="Verdana" size="2">    <br>   </font>     <div class="caption"><font face="Verdana" size="2"><a name="x1-900218"  href="/img/revistas/cleiej/v16n1/1a07f18.png"><span class="id">Figure&nbsp;18: </span><span class="content">Tiriba mission state flow block configured with variability mechanisms and configuration knowledge of feature <span class="cmti-10">Entry segment simulation</span></span></a></font></div> </div> <hr class="endfigure"><font face="Verdana" size="2">    <br> </font>     <p> <font face="Verdana" size="2">Finally, we specified one feature expression for each valid configuration of the <span class="cmti-10">Engine feature</span>. The Tiriba Simulink model parts related to the engine features were restructured to Hephaestus in a very similar way as it was in Pure::variants (see Figure <a href="#x1-800114">14</a>). Considering the configuration knowledge, basically it was added three blocks to the be selected (for two different Simulink areas) and two variability blocks to be cleared for the <span class="cmti-10">Combustion </span>feature expression. Similarly, in the <span class="cmti-10">Electric </span>feature case, one Simulink block is added when <span class="cmti-10">Electric </span>feature expression is evaluated as true, and the same two variability blocks must be cleared from the model. Since they are alternative features, Hephaestus guarantees that a valid configuration could not be specified using both features or none of them&mdash; and the configuration knowledge do not have to deal with these cases. </font> </p>     <p><font face="Verdana" size="2"><span class="titlemark">5 </span> <a  id="x1-100005"></a>Evaluation</font></p> <font face="Verdana" size="2">     <br> </font>     <p><font face="Verdana" size="2">In this section we present a comparison between the implementation of Tiriba variability using Pure::variants and Hephaestus. According to the product derivation process, we realized at leas one significant difference among the compared tools: using Pure::variants the complete set of valid product instances will comprise all blocks (including the blocks introduced to support variability) of the Tiriba product line, regardless of the fact that some features might not be selected. In this case, the product derivation occurs by means of changing the values assigned to the MATLAB workspace parametres of the control blocks. As explained in Section&nbsp;<a href="#x1-70004">4</a>, we use contro blocks to enable (or disable) blocks that are related to optional or alternative features, depending on the selection or not of the corresponding feature.&nbsp;</font></p>     <p> <font face="Verdana" size="2">In Hephaestus, the product derivation is built uppon a positive approach, in which the initial Simulink model for the product is empty. Than, after evaluating the proper transformations for a specific instance, new blocks are introduced and modified stepwise. After that, the product derivation connects the selected blocks according to the existing paths (or connections between blocks) of the Simulink product line model. Finally, the product derivation removes all variability mechanisms of the product, in such a way that the resulting model will comprise only the functional variant blocks that are related to the selected features of the SPL instance.&nbsp;</font></p>     <p> <font face="Verdana" size="2">It is important to notice that product derivation using Pure::variants leads to Simulink models that are unnecessarily complex, which in turns produces less efficient generated code&mdash; once the Simulink models serve as input for source code generation. Using Hephaestus, the derived instances comprise only the Simulink blocks that are related to the selected features. In this way, there is no dead code motivated by variability management, since the generated code considers only the blocks that are necessary for a specific product. Differently, using Pure::variants the generated code is almost the same for all derived instances, mainly because the Simulink models of the SPL instances allways comprise all blocks. The values assigned to the parameters control the instance&rsquo;s variabilities, enabling only the execution paths that are valid. Those values are generated from the SPL Simulink control blocks, whose values are specified by Pure::variants.&nbsp;</font></p>     ]]></body>
<body><![CDATA[<p> <font face="Verdana" size="2">This is the main advantage of Hephaestus. Since in the embbedded software domain there exist memory constraints, dead code is considered a design fault that should be avoided. So, using Pure::variants, product engineers have to either modify the product specific Simulink model, removing all blocks that are not related to the selected features; or eliminate dead code from the generated source code. In the first case, we could say that the product derivation is only partially automated. Besides that, since both alternatives are difficult to fully automate, they are time consuming and error-prone, particularly in the cases where the resulting Simulink model is complex.&nbsp;</font></p>     <p> <font face="Verdana" size="2">It is reasonably easy to define and evolve the configuration knowledge using both Pure::variants and Hephaestus. Nevertheless, specifying an Hephaestus configuration knowledge requires <span class="cmti-10">the extra, time consuming </span>task of finding the identifier of each Simulink block and refering to these identifiers as arguments to the Hephaestus transformations. Moreover, evolving the configuration knowledge in Pure::variants is more intuitive, since all variability is represented in the SPL Simulink model.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Product derivation in both Pure::variants and Hephaestus is effortless. In Pure::variants, after an instance model had been created, a product engineering just have to propagate the configuration using a single command. Similarly, using Hephaestus the product engineering only have to select the product derivation command to derive a product using the selected SPL Simulink model, instance model, and configuration knowledge.&nbsp;</font></p>     <p> <font face="Verdana" size="2">Table&nbsp;<a href="#x1-100011">1</a> summarizes our comparison, presenting the benefits and drawbacks of both tools.    <br> </font> </p>     <div class="table"> <hr class="float">     <div class="float">     <div class="pic-tabular"><font face="Verdana" size="2"><a id="x1-100011"><img  src="/img/revistas/cleiej/v16n1/1a07t1.png"></a></font></div>     <div class="caption"><font face="Verdana" size="2"><span class="id">Table&nbsp;1: </span><span  class="content">Evaluation summary</span></font></div> <font face="Verdana" size="2">     <br> </font> </div> <hr class="endfloat"> </div>     ]]></body>
<body><![CDATA[<p><font face="Verdana" size="2"><span class="titlemark">6 </span> <a  id="x1-110006"></a>Final Remarks</font></p>     <p><font face="Verdana" size="2">This paper discussed and presented two main results related to the development of software product lines based on Simulink modeling in the domain on UAV. The first and more important was the presentation of a catalog of mechanisms to represent several types of variabilities in Simulink. Then, we used these mechanisms to create, as a proof of concept, a small SPL for part of a real UAV called Tiriba in which we used these mechanisms.&nbsp;</font></p>     <p> <font face="Verdana" size="2">We also studied two tools to support variability and configuration management of SPL modeled using Simulink following a compositional approach and a instrumentation approach supported by, respectively, two tools: Hephaestus and Pure::variants. We discussed the characteristics and the advantages and disadvantages of these two tools. The model of the UAV Tiriba used as the basis for this work is a simplified version, but the proposal can be perfectly applied to the actual software, which could be done by the company that developed Tiriba.&nbsp;</font></p>     <p> <font face="Verdana" size="2">As future work, we intend to apply the knowledge acquired in this work on a real SPL for the family of UAV to which Tiriba belongs. The design of Tiriba is already being modified to develop a product line by Braga et al. <span class="cite">(<a  href="#Xbraga-2">19</a><a name="19."></a>)</span>; In this work, a model of 108 features was created, but it is still not enough for a LPS. This feature model is being extended to later be integrated into a feature model of an LPS based on Tiriba and at least two other UAVs. We are also investigating how an UAV can be certified using a SPL approach <span class="cite">(<a href="#Xbraga-1">1</a>)</span>.&nbsp;</font></p>     <p> </p>     <p><font face="Verdana" size="2"><a id="x1-120006"></a>References</font></p> <font face="Verdana" size="2"> <span class="biblabel"><span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#1." id="Xbraga-1">(1)</a>R.&nbsp;T.&nbsp;V. Braga, O.&nbsp;Trindade&nbsp;Jr, K.&nbsp;R. L. J.&nbsp;C. Branco, L.&nbsp;O. Neris, and J.&nbsp;LEE, &ldquo;Adapting a software product line engineering process for certifying safety critical embedded systems,&rdquo; in <span class="cmti-10">31st</span> <span  class="cmti-10">International Conference on Computer Safety, Reliability and Security, 2012, Magdeburg, LNCS 7512</span>, 2012, pp. 352&ndash;63. </font>     <div class="thebibliography">     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#2." id="Xdziobek2008functional">(2)</a>C.&nbsp;Dziobek, J.&nbsp;Loew, W.&nbsp;Przystas, and J.&nbsp;Weiland, &ldquo;Functional variants handling in simulink models,&rdquo; in <span class="cmti-10">MathWorks Virtual Automotive Conference, Stuttgart</span>, 2008. </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#3." id="Xpolzer2009applying">(3)</a>A.&nbsp;Polzer, S.&nbsp;Kowalewski, and G.&nbsp;Botterweck, &ldquo;Applying software product line techniques in model-based embedded systems engineering,&rdquo; in <span class="cmti-10">Model-Based Methodologies for Pervasive and</span> <span class="cmti-10">Embedded Software, 2009. MOMPES&rsquo;09. ICSE Workshop on</span>. IEEE, 2009, pp. 2&ndash;10. </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#4." id="Xclements2001software">(4)</a>P.&nbsp;Clements and L.&nbsp;Northrop, &ldquo;Software product lines: Patterns and practice,&rdquo; <span class="cmti-10">Addison Wesley</span>, 2001. </font> </p>     ]]></body>
<body><![CDATA[<!-- ref --><p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#5." id="Xczarnecki-book">(5)</a>K.&nbsp;Czarnecki and U.&nbsp;Eisenecker, <span class="cmti-10">Generative Programming: Methods, Tools, and Applications</span>. Boston, MA: Addison-Wesley, 2000.     </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#6." id="Xkang-foda">(6)</a>K.&nbsp;Kang, S.&nbsp;Cohen, J.&nbsp;Hess, W.&nbsp;Novak, and A.&nbsp;Peterson, &ldquo;Feature-oriented domain analysis (foda) feasibility study,&rdquo; Software Engineering Institute, Carnegie Mellon University, Tech. Rep. CMU/SEI-90-TR-021, 1990. [Online]. Available: http://www.sei.cmu.edu/library/abstracts/reports/90tr021.cfm </font> </p>     <!-- ref --><p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#7." id="Xpohl2005software">(7)</a>K.&nbsp;Pohl, G.&nbsp;B&ouml;ckle, and F.&nbsp;Van Der&nbsp;Linden, <span  class="cmti-10">Software product line engineering: foundations,</span> <span class="cmti-10">principles, and techniques</span>. Springer-Verlag New York Inc, 2005.     </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#8." id="Xpastor2007uav">(8)</a>E.&nbsp;Pastor, J.&nbsp;Lopez, and P.&nbsp;Royo, &ldquo;Uav payload and mission control hardware/software architecture,&rdquo; <span class="cmti-10">Aerospace and Electronic Systems Magazine, IEEE</span>, vol.&nbsp;22, no.&nbsp;6, pp. 3&ndash;8, 2007. </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#9" id="Xbranco2011tiriba">(9)</a>K.&nbsp;Branco, J.&nbsp;Pelizzoni, L.&nbsp;Neris, O.&nbsp;Trindade, F.&nbsp;Osorio, and D.&nbsp;Wolf, &ldquo;Tiriba&mdash; a new approach of uav based on model driven development and multiprocessors,&rdquo; in <span class="cmti-10">Robotics and Automation (ICRA),</span> <span class="cmti-10">2011 IEEE International Conference on</span>. IEEE, 2011, pp. 1&ndash;4. </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#10." id="Xinctsec">(10)</a>INCT-SEC, &ldquo;Instituto nacional de sistemas embarcados cr&iacute;ticos,&rdquo; 2008. (Online). Available: <a href="http://www.inct-sec.org">http://www.inct-sec.org</a> </font> </p>     <!-- ref --><p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#11." id="Xdabney2004mastering">(11)</a>J.&nbsp;Dabney and T.&nbsp;Harman, <span class="cmti-10">Mastering Simulink</span>. Pearson Prentice Hall, 2004.     </font> </p>     ]]></body>
<body><![CDATA[<p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#12." id="Xbotterweck2010using">(12)</a>G.&nbsp;Botterweck, A.&nbsp;Polzer, and S.&nbsp;Kowalewski, &ldquo;Using higher-order transformations to derive variability mechanism for embedded systems,&rdquo; <span class="cmti-10">Models in Software Engineering</span>, pp. 68&ndash;82, 2010. </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#13." id="Xweiland:automotiva2006">(13)</a>J.&nbsp;Weiland, &ldquo;Configuring variant-rich automotive software architecture models,&rdquo; in <span class="cmti-10">Automotive</span> <span  class="cmti-10">Electronics, 2006. The 2nd IEE Conference on</span>, march 2006, pp. 73 &ndash;80. </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#14." id="Xleitner:2011">(14)</a>A.&nbsp;Leitner, R.&nbsp;Mader, C.&nbsp;Kreiner, C.&nbsp;Steger, and R.&nbsp;Wei&szlig;, &ldquo;A development methodology for variant-rich automotive software architectures,&rdquo; <span class="cmti-10">Elektrotechnik und Informationstechnik</span>, vol. 128, pp. 222&ndash;227, 2011. </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#15." id="Xfragal:cbsec2011">(15)</a>V.&nbsp;H. Fragal, E.&nbsp;A.&nbsp;O. Junior, and I.&nbsp;M. Gimenes, &ldquo;Mapping software product line features to unmanned aerial vehicle models,&rdquo; in <span class="cmti-10">1st Brazilian Conference on Critical Embedded Systems</span>, 2011. </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#16." id="Xkastner:icse2008">(16)</a>C.&nbsp;K&auml;stner, S.&nbsp;Apel, and M.&nbsp;Kuhlemann, &ldquo;Granularity in software product lines,&rdquo; in <span class="cmti-10">Proceedings</span> <span  class="cmti-10">of the 30th international conference on Software engineering</span>, ser. ICSE &rsquo;08. New York, NY, USA: ACM, 2008, pp. 311&ndash;320. (Online). Available:<a  href="http://doi.acm.org/10.1145/1368088.1368131"> http://doi.acm.org/10.1145/1368088.1368131</a> </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#17." id="Xtorres:fosd2010">(17)</a>M.&nbsp;Torres, U.&nbsp;Kulesza, M.&nbsp;Sousa, T.&nbsp;Batista, L.&nbsp;Teixeira, P.&nbsp;Borba, E.&nbsp;Cirilo, C.&nbsp;Lucena, R.&nbsp;Braga, and P.&nbsp;Masiero, &ldquo;Assessment of product derivation tools in the evolution of software product lines: an empirical study,&rdquo; in <span  class="cmti-10">Proceedings of the 2nd International Workshop on Feature-Oriented</span> <span class="cmti-10">Software Development</span>, ser. FOSD &rsquo;10. New York, NY, USA: ACM, 2010, pp. 10&ndash;17. (Online). Available: <a  href="http://doi.acm.org/10.1145/1868688.1868691">http://doi.acm.org/10.1145/1868688.1868691</a> </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp;&nbsp;</span></span><a  href="#18." id="Xbonifacio2009hephaestus">(18)</a>R.&nbsp;Bonif&aacute;cio, L.&nbsp;Teixeira, and P.&nbsp;Borba, &ldquo;Hephaestus: A tool for managing product line variabilities,&rdquo; in <span class="cmti-10">Third Brazilian Simposium on Components, Architecture, and Software Reuse</span>, 2009, pp. 26&ndash;34. </font> </p>     <p><font face="Verdana" size="2"><span class="biblabel"> <span class="bibsp">&nbsp;&nbsp; </span></span><a href="#19." id="Xbraga-2">(19)</a>R.&nbsp;T.&nbsp;V. Braga, O.&nbsp;Branco, K. R. L. J. C. Trindade&nbsp;Jr, P.&nbsp;C. Masiero, L.&nbsp;O. Neris, and M.&nbsp;Becher, &ldquo;The prolices approach to develop product lines for safety-critical embedded systems and its application to the unmanned aerial vehicles domain,&rdquo; <span  class="cmti-10">CLEI Electronic Journal</span>, vol.&nbsp;15, pp. 1&ndash;13, 2012. </font> </p> </div>      ]]></body><back>
<ref-list>
<ref id="B1">
<label>(1)</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Braga]]></surname>
<given-names><![CDATA[R. T. V]]></given-names>
</name>
<name>
<surname><![CDATA[Trindade Jr]]></surname>
<given-names><![CDATA[O]]></given-names>
</name>
<name>
<surname><![CDATA[Branco]]></surname>
<given-names><![CDATA[K. R. L. J. C]]></given-names>
</name>
<name>
<surname><![CDATA[Neris]]></surname>
<given-names><![CDATA[L. O]]></given-names>
</name>
<name>
<surname><![CDATA[LEE]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Adapting a software product line engineering process for certifying safety critical embedded systems]]></article-title>
<source><![CDATA[]]></source>
<year></year>
<conf-name><![CDATA[31 International Conference on Computer Safety, Reliability and Security 2012]]></conf-name>
<conf-date>2012</conf-date>
<conf-loc>Magdeburg </conf-loc>
</nlm-citation>
</ref>
<ref id="B2">
<label>(2)</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Dziobek]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Loew]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Przystas]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
<name>
<surname><![CDATA[Weiland]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Functional variants handling in simulink models]]></article-title>
<source><![CDATA[MathWorks Virtual Automotive Conference]]></source>
<year>2008</year>
<publisher-loc><![CDATA[Stuttgart ]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B3">
<label>(3)</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Polzer]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Kowalewski]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Botterweck]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
</person-group>
<collab>IEEE</collab>
<source><![CDATA[MOMPES&#8217;09: ICSE Workshop on]]></source>
<year>2009</year>
<page-range>2-10</page-range></nlm-citation>
</ref>
<ref id="B4">
<label>(4)</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Clements]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
<name>
<surname><![CDATA[Northrop]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
</person-group>
<source><![CDATA[Software product lines: Patterns and practice]]></source>
<year>2001</year>
<publisher-name><![CDATA[Addison Wesley]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B5">
<label>(5)</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Czarnecki]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
<name>
<surname><![CDATA[Eisenecker]]></surname>
<given-names><![CDATA[U]]></given-names>
</name>
</person-group>
<source><![CDATA[Generative Programming: Methods, Tools, and Applications]]></source>
<year>2000</year>
<publisher-loc><![CDATA[Boston^eMA MA]]></publisher-loc>
<publisher-name><![CDATA[Addison-Wesley]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B6">
<label>(6)</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kang]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
<name>
<surname><![CDATA[Cohen]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Hess]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Novak]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
<name>
<surname><![CDATA[Peterson]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
</person-group>
<source><![CDATA[Feature-oriented domain analysis (foda) feasibility study]]></source>
<year>1990</year>
<publisher-name><![CDATA[Software Engineering Institute, Carnegie Mellon University]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B7">
<label>(7)</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Pohl]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
<name>
<surname><![CDATA[Böckle]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
<name>
<surname><![CDATA[Van Der Linden]]></surname>
<given-names><![CDATA[F]]></given-names>
</name>
</person-group>
<source><![CDATA[Software product line engineering: foundations, principles, and techniques]]></source>
<year>2005</year>
<publisher-loc><![CDATA[New York ]]></publisher-loc>
<publisher-name><![CDATA[Springer-Verlag]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B8">
<label>(8)</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Pastor]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Lopez]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Royo]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Uav payload and mission control hardware/software architecture]]></article-title>
<source><![CDATA[Aerospace and Electronic Systems Magazine, IEEE]]></source>
<year>2007</year>
<volume>22</volume>
<numero>6</numero>
<issue>6</issue>
<page-range>3-8</page-range></nlm-citation>
</ref>
<ref id="B9">
<label>(9)</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Branco]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
<name>
<surname><![CDATA[Pelizzoni]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Neris]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Trindade]]></surname>
<given-names><![CDATA[O]]></given-names>
</name>
<name>
<surname><![CDATA[Osorio]]></surname>
<given-names><![CDATA[F]]></given-names>
</name>
<name>
<surname><![CDATA[Wolf]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Tiriba- a new approach of uav based on model driven development and multiprocessors]]></article-title>
<collab>IEEE</collab>
<source><![CDATA[Robotics and Automation (ICRA)]]></source>
<year>2011</year>
<page-range>1-4</page-range></nlm-citation>
</ref>
<ref id="B10">
<label>(10)</label><nlm-citation citation-type="">
<collab>Instituto nacional de sistemas embarcados críticos</collab>
<source><![CDATA[]]></source>
<year>2008</year>
</nlm-citation>
</ref>
<ref id="B11">
<label>(11)</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Dabney]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Harman]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
</person-group>
<source><![CDATA[Mastering Simulink]]></source>
<year>2004</year>
<publisher-name><![CDATA[Pearson Prentice Hall]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B12">
<label>(12)</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Botterweck]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
<name>
<surname><![CDATA[Polzer]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Kowalewski]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Using higher-order transformations to derive variability mechanism for embedded systems]]></article-title>
<source><![CDATA[Models in Software Engineering]]></source>
<year>2010</year>
<page-range>68-82</page-range></nlm-citation>
</ref>
<ref id="B13">
<label>(13)</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Weiland]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Configuring variant-rich automotive software architecture models]]></article-title>
<source><![CDATA[]]></source>
<year></year>
<conf-name><![CDATA[2 Automotive Electronics]]></conf-name>
<conf-date>march 2006</conf-date>
<conf-loc> </conf-loc>
</nlm-citation>
</ref>
<ref id="B14">
<label>(15)</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Fragal]]></surname>
<given-names><![CDATA[V. H]]></given-names>
</name>
<name>
<surname><![CDATA[Junior]]></surname>
<given-names><![CDATA[E. A. O]]></given-names>
</name>
<name>
<surname><![CDATA[Gimenes]]></surname>
<given-names><![CDATA[I. M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Mapping software product line features to unmanned aerial vehicle models]]></article-title>
<source><![CDATA[]]></source>
<year></year>
<conf-name><![CDATA[1 Brazilian Conference on Critical Embedded Systems]]></conf-name>
<conf-date>2011</conf-date>
<conf-loc> </conf-loc>
</nlm-citation>
</ref>
<ref id="B15">
<label>(16)</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kästner]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Apel]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Kuhlemann]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Granularity in software product lines]]></article-title>
<source><![CDATA[Proceedings of the 30th international conference on Software engineering, ser. ICSE &#8217;08]]></source>
<year>2008</year>
<page-range>311-320</page-range><publisher-loc><![CDATA[New York^eNY NY]]></publisher-loc>
<publisher-name><![CDATA[ACM]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B16">
<label>(17)</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Torres]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Kulesza]]></surname>
<given-names><![CDATA[U]]></given-names>
</name>
<name>
<surname><![CDATA[Sousa]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Batista]]></surname>
<given-names><![CDATA[T]]></given-names>
</name>
<name>
<surname><![CDATA[Teixeira]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Borba]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
<name>
<surname><![CDATA[Cirilo]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Lucena]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Braga]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Masiero]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Assessment of product derivation tools in the evolution of software product lines: an empirical study]]></article-title>
<source><![CDATA[Proceedings of the 2nd International Workshop on Feature-Oriented Software Development, ser. FOSD &#8217;10]]></source>
<year>2010</year>
<page-range>10-17</page-range><publisher-loc><![CDATA[New York^eNY NY]]></publisher-loc>
<publisher-name><![CDATA[ACM]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B17">
<label>(18)</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Bonifácio]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[Teixeira]]></surname>
<given-names><![CDATA[L]]></given-names>
</name>
<name>
<surname><![CDATA[Borba]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Hephaestus: A tool for managing product line variabilities]]></article-title>
<source><![CDATA[]]></source>
<year></year>
<conf-name><![CDATA[Third Brazilian Simposium on Components, Architecture, and Software Reuse]]></conf-name>
<conf-date>2009</conf-date>
<conf-loc> </conf-loc>
</nlm-citation>
</ref>
<ref id="B18">
<label>(19)</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Braga]]></surname>
<given-names><![CDATA[R. T. V]]></given-names>
</name>
<name>
<surname><![CDATA[Branco]]></surname>
<given-names><![CDATA[O]]></given-names>
</name>
<name>
<surname><![CDATA[Trindade Jr]]></surname>
<given-names><![CDATA[K. R. L. J. C]]></given-names>
</name>
<name>
<surname><![CDATA[Masiero]]></surname>
<given-names><![CDATA[P. C]]></given-names>
</name>
<name>
<surname><![CDATA[Neris]]></surname>
<given-names><![CDATA[L. O]]></given-names>
</name>
<name>
<surname><![CDATA[Becher]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[The prolices approach to develop product lines for safety-critical embedded systems and its application to the unmanned aerial vehicles domain]]></article-title>
<source><![CDATA[CLEI Electronic Journal]]></source>
<year>2012</year>
<volume>15</volume>
<page-range>1-13</page-range></nlm-citation>
</ref>
</ref-list>
</back>
</article>
