<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>ArchFeature: A Modeling Environment Integrating Features into Product Line Architecture</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Gharib Gharibi</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Yongjie Zheng</string-name>
          <email>yzheng@umkc.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>School of Computing and Engineering, University of Missouri-Kansas City</institution>
          ,
          <addr-line>Kansas City</addr-line>
          ,
          <country country="US">USA</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>An important task in product line architecture (PLA) modeling is developing the involved variation points and maintaining their conformance to product line features. However, existing modeling tools and approaches still require manual management of variation points and manual maintenance of feature-PLA relations, which is expensive and error prone. In this paper, we introduce a new PLA modeling environment named ArchFeature. It can automatically manage variation points in the PLA model, create and maintain feature-PLA relations, and derive new architectural instances. The key idea of ArchFeature is to develop the product line features and PLA side-by-side in the same environment, and integrate their specifications in a single model. The goal is to reduce the modeling effort and increase the quality of the PLA models.</p>
      </abstract>
      <kwd-group>
        <kwd>variability modeling</kwd>
        <kwd>software product line architecture</kwd>
        <kwd>extensible architecture description languages</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        A key success factor of a modeling tool for product line architectures (PLAs) [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] lies
in its ability to easily express and manage the variability [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] of a product line [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. The
variability is modeled in the PLA as variation points governed by guard conditions that
identify related product line features [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Each feature is an end-user visible
characteristic distinguishing the products of a product line.
      </p>
      <p>
        While many approaches and tools for modeling the PLA exist [
        <xref ref-type="bibr" rid="ref5 ref6 ref7">5-7</xref>
        ], two main
challenges remain. First, variation points need to be manually managed in the PLA.
Specifically, developers have to manually specify the guard condition of each variation point
and enter the names of the related features. This can cause significant overhead in the
PLA development and prevent developers from focusing on application-specific
design. Often, a variation point is related to multiple features and has child elements that
are related to other features. It is tedious, time consuming, and error prone to manually
manage such variation points. Second, it is difficult to manually maintain the
conformance between a product line feature and its design (i.e. variation points) in the PLA.
Product line features and PLA are commonly developed and evolve as two independent
models using different tools. As the product line evolves, the two models can drift away
and become inconsistent. For instance, a feature can translate to multiple scattered
variation points in the PLA. If this feature is removed, the developer needs to manually
inspect the entire PLA model to identify the related variation points and remove them.
This process can introduce inconsistencies and create a conceptual discrepancy between
the product line features and architecture in terms of the defined variability.
      </p>
      <p>
        In this paper, we present a novel PLA modeling approach and a tool called
ArchFeature. The goal is to reduce the modeling effort and increase the quality of the PLA
models. ArchFeature supports side-by-side development and evolution of product line
features and PLA in a modeling environment. It provides a number of automated
functions, including (1) managing variation points in the PLA, (2) creating, maintaining,
and visualizing the feature-PLA relations, and (3) deriving new architectural instances.
The essence of ArchFeature lies in its modeling approach, which integrates the
specifications of features, PLA, and their relations in a single model. It is based on an
extension of an existing architecture description language (ADL) called xADL [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. Overall,
ArchFeature has the following benefits:
 Reducing the time and effort required to develop and maintain the PLA models.
      </p>
      <p>ArchFeature completely encapsulates the management of variation points in the PLA
from the developer. Given an architectural change made for a product line feature,
ArchFeature can automatically update the related variation points and their guard
conditions. This also increases the quality of the PLA model in terms of variability
definition.
 Bridging the abstraction gap between the product line features and PLA.
ArchFeature integrates the development of features and PLA in the same environment and
defines them in a single model. In addition, it can automatically maintain
featurearchitecture conformance in the evolution of the product line.
2</p>
    </sec>
    <sec id="sec-2">
      <title>The Modeling Approach</title>
      <p>The underlying modeling approach of ArchFeature is based on an extension that we
made to an existing XML-based ADL called xADL. Specifically, we developed new
language constructs (e.g., feature) to integrate the specifications of features and
featurePLA relations into the PLA model.</p>
      <p>
        Fig. 1 illustrates an overview of ArchFeature interface (Fig. 1. B) and the PLA model
(Fig. 1. A). The PLA model includes the specifications of a product line feature (i.e.
Game) and one of its related variation points (i.e. Component PlayGame). Our
definition of features is based on feature models [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. However, we developed new elements
to support the automated functions of ArchFeature. For example, the featureColor
element specifies a color to be used in the visualization function, which highlights all the
PLA elements related to a feature. The archElements element (Lines 5-8) includes links
to all the elements related to the feature (e.g., Component PlayGame). archElements is
important to automate the operations of creating and maintaining feature-PLA relations.
Another important element is the type element, which depicts the way a feature may
vary. It can be Optional, Alternative, or OptionalAlternative. In case of Alternative and
OptionalAlternative features, the variants element is used to identify the feature’s
variants. Note that ArchFeature does not address the feature relations (e.g., mutual
dependency). This is partially because the focus of our work is modeling the PLA. In addition,
many existing approaches have specifically addressed the feature relations [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
      </p>
      <p>To the right of Figure 1. A is an example of a component’s specification (i.e.
Component PlayGame). It is based on the original version of xADL. A variation point (Lines
2-11) is embedded to indicate that this is an optional component. It includes a guard
condition (Lines 3-10) defined as a Boolean expression with an equality operator. The
symbol element represents the name of the related product line feature (i.e. Game). The
value element indicates when the component should be included. It can be true, false,
or the name of a variant in case of alternative features. If a component is related to
multiple features, the guard conditions of all the features are connected via Boolean
operators. Guard conditions of all variation points in the PLA are automatically created
and managed in ArchFeature as further explained in the following section.
3</p>
    </sec>
    <sec id="sec-3">
      <title>ArchFeature</title>
      <p>ArchFeature is a modeling environment that is based on the integrated modeling
approach introduced in Section 2. It aims to address the challenges of manual
development of variation points and maintenance of feature-architecture conformance in
modeling PLAs. Fig. 1. B illustrates the interface of ArchFeature. It consists of a feature list
and a PLA graphical editor. The feature list enables creating and managing product line
features. The PLA editor supports creating, visualizing, and managing PLAs. The
figure shows a PLA of a chat application and its features that were developed in
ArchFeature. The PLA and features are both defined in the same model (shown in Fig. 1. A).
Based on this model, ArchFeature enables the following operations.
Automatic Variability Management. Unlike other tools that require manual
development of variation points, ArchFeature fully automates this process and encapsulates it
from the user. In particular, when a feature is selected, a guard condition referring to
that feature is set in the background. When a new architectural element is created, a
variation point with the guard condition will be automatically integrated in the
element’s specification. To support variation points related to multiple features, Boolean
operators (e.g., OR) are used to connect multiple guard conditions corresponding to
different features. Moreover, ArchFeature can automatically manage variation points
of hierarchical elements. It ensures that the guard condition of a parent element covers
all the guard conditions of its child elements. Thus, the parent element will always be
included when any of its child elements is included.</p>
      <p>Mapping Features to PLA. ArchFeature automatically manages the feature-PLA
relations in the PLA model. This includes:
 Creating the feature-PLA relations. ArchFeature supports both automatic and
manual ways to relate a feature to PLA elements. The automatic way is useful to map a
feature to new architectural elements. The developer can select a feature from the
feature list and then enter the editor to modify the PLA. All the new developed
architectural elements will be automatically mapped to the selected feature. The
manual way is useful for mapping a feature to existing PLA elements. The developer can
select a feature and then right click an existing PLA element and select “Add to
Current Feature”. In both ways, the PLA model will be automatically updated.
 Visualizing feature-PLA relations. This function helps developers to understand how
and where a certain feature is designed in the PLA. Selecting a feature will highlight,
with a feature-specific color, all of its related elements in the PLA. The color can be
changed by right clicking the feature and selecting “Change Color”. In Fig. 1. B, the
Game feature is selected. Correspondingly, all the related elements (e.g., Component
PlayGame) in the PLA are highlighted in red. Without this function, developers need
to manually inspect the entire PLA to identify feature related elements.
 Maintaining feature-PLA conformance. ArchFeature can automatically update
features and architecture to maintain their conformance when evolutionary changes
occur. For example, if a feature is removed, all of its related elements in the PLA will
be automatically removed. Thus, the product line features and PLA are kept
up-todate and automatically synchronized.</p>
      <p>Deriving New Architectural Instances. ArchFeature includes a tool, called Selector,
which can automatically derive new architectural instances from the PLA. Based on the
integrated modeling approach, it can automatically list all of the product line features
and their values. Then, the developer can configure the PLA by simply changing the
features’ values and run the application. The result is a new architectural model
describing a single product. The new correctly-derived models further prove the
applicability and efficiency of ArchFeature in automatically managing and maintaining the
PLA and its defined variability.</p>
    </sec>
    <sec id="sec-4">
      <title>Implementation</title>
      <p>
        We implemented and integrated ArchFeature in ArchStudio [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], an open-source
Eclipse toolset used for developing architecture-based software systems. ArchStudio
includes a number of tools such as Archipelago, ArchEdit, and ArchLight that can be
used to visualize, model, and analyze software architectures. We reused and extended
some of these tools in our implementation. First, we extended xADL and developed
new language elements to define and integrate features and their relations in the PLA.
Second, we extended Archipelago and focused on implementing the functions
presented in Section 3. Third, we reused a prototype of a product derivation tool that
existed in ArchStudio to build our Selector tool. The original prototype required manual
preparation and configuration of the PLA’s variation points to derive new architectural
instances. We re-built this tool and fully automated the derivation process.
5
      </p>
    </sec>
    <sec id="sec-5">
      <title>User Experience</title>
      <p>To assess the applicability and effectiveness of ArchFeature, we released it to academic
and industrial users. The academic users included the students of two classes that we
taught at our school. They were given assignments and projects to develop the PLA of
an open-source system of their choice. Some examples are Apache Giraph, Scaffold
Hunter, and Sweet Home 3D. Students reported that using ArchFeature was easy and
straightforward. With a basic knowledge of Eclipse, they were able to model a new
PLA without any prior experience of ArchStudio. The automated functions of
ArchFeature made it straightforward to model the PLA without worrying about modeling
the variation points or maintaining their conformance with the product line features.</p>
      <p>
        The industrial users included a software architect and a software
engineer from Cerner Corporation [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. They used ArchFeature to develop a full-featured
architecture for Apache Solr 4.2.0 [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. Solr is a Java-based open-source system that
has approximately 181K SLOC and has been through more than ten years of
development. A number of features have been added to it over time. However, an explicit
architecture that distinguishes the elements related to different features did not exist
before this case study. The architecture model of Solr developed in this case study
includes one hundred and eighty three components, twenty eight features, and two
hundred and twenty four feature-PLA relations in total. There were twenty seven core
components representing the kernel functions of Solr, and the rest are variation points
corresponding to twenty eight features. Out of the twenty eight features, fourteen were
optional features, eleven were alternative features, and three were optional-alternative
features. The total number of feature variants contained in the alternative features was
one hundred and forty three. A main issue that was reported is the lack of additional
feature types. In particular, an OR feature is needed to allow more than one variant to
be selected. This can be addressed by modifying xADL’s schema as discussed in
Section 2, and it is made our future work. The PLA developed in this case study is available
on the ArchFeature website listed in Section 7.
      </p>
    </sec>
    <sec id="sec-6">
      <title>Related Work</title>
      <p>
        Ménage [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] is one of the early tools focusing on PLA modeling. The variation point
definition shown in Fig. 1 is based on the design of Ménage. A primary limitation of
Ménage is that all the variation points and guard conditions in the PLA have to be
manually created. Additionally, it offers limited support for relating features to the PLA and
cannot visually distinguish elements related to different features.
      </p>
      <p>
        Feature template [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] advocates superimposition of all variants in a single model
called model template that refers to features through annotations. Similar to
ArchFeature, Feature template defines Boolean formulas over the feature names and uses them
during the derivation process. Unlike ArchFeature, Feature template does not support
automatic creation of variation points or visualization of feature-PLA relations.
      </p>
      <p>
        FeatureMapper [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] is a tool that supports mapping features from a feature model to
solution artifacts expressed in EMF/Ecore-based languages (e.g. UML2). Both
FeatureMapper and ArchFeature can automatically relate a feature to elements in the solution
space. Both support visualization of the feature-PLA relations, and both can derive a
model instance based on features configuration. A main difference between them is
how variability is defined in the target model. FeatureMapper saves variability
information and the feature-PLA relations in a separate mapping file, which can create a
conceptual gap between the artifacts as they evolve over time.
      </p>
      <p>
        Gears [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] is a product line framework emphasizing automatic derivation of
productspecific artifacts. It includes a product configurator, a feature model, and a set of
reusable artifacts containing defined variation points. The product configurator
automatically customizes each reusable artifact based on a feature portfolio, and derives artifacts
from each stage of the development life-cycle that belong to a product instance.
However, Gears does not support integrated modeling of features and PLA.
      </p>
      <p>
        EASEL [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] is another tool that supports PLA modeling based on an extension of
xADL. EASEL separates variable architecture elements of a PLA into a number of
change sets. Each change set only contains the architecture elements that implement a
specific feature. A main issue of EASEL is that it makes a PLA model less
understandable as the definition of an architecture element is spread into multiple change sets.
      </p>
      <p>
        There are tools that focus on mapping the product line features directly to source
code, such as FeatureIDE [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] and CIDE [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. In contrast, ArchFeature focuses on PLA
modeling and feature-architecture mapping. The PLA addresses the product line’s
complexity and diversity at a higher abstraction level than source code. Therefore, it should
play a central role in the development of software product lines.
7
      </p>
    </sec>
    <sec id="sec-7">
      <title>Tool Availability</title>
      <p>A video demo of ArchFeature is available at: https://youtu.be/FEFGmaDruWo. More
information on ArchFeature are available at: http://info.umkc.edu/sail/archfeature/.
Acknowledgments. We thank Varun Narisetty for his help in implementing
ArchFeature. We also thank Adam Carter and Jeffrey Lanning for their help with the case study.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Bosch</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <article-title>Design and Use of Software Architectures: Adopting and Evolving a Product-Line Approach</article-title>
          .
          <year>2000</year>
          , Reading, Massachusetts: ACM Press,
          <string-name>
            <surname>Addison-Wesley Professional</surname>
          </string-name>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Sinnema</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          , et al.
          <article-title>COVAMOF: A Framework for Modeling Variability in Software Product Families</article-title>
          .
          <source>in Third International Software Product Lines Conference (SPLC</source>
          <year>2004</year>
          ).
          <year>2004</year>
          . Boston, MA, USA: Springer Berlin / Heidelberg.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Pohl</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Böckle</surname>
          </string-name>
          , and
          <string-name>
            <surname>F.J. van der Linden</surname>
          </string-name>
          ,
          <source>Software Product Line Engineering: Foundations, Principles and Techniques</source>
          . 1 ed.
          <year>2005</year>
          , New York, New York: Springer. 468.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Czarnecki</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          and
          <string-name>
            <given-names>U.</given-names>
            <surname>Eisenecker</surname>
          </string-name>
          , Generative Programming: Methods, Tools, and
          <string-name>
            <surname>Applications</surname>
          </string-name>
          .
          <year>2000</year>
          , Reading, Massachusetts: Addison-Wesley Professional.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Groher</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Weinreich</surname>
          </string-name>
          .
          <article-title>Integrating Variability Management and Software Architecture</article-title>
          .
          <source>in Software Architecture (WICSA) and European Conference on Software Architecture (ECSA)</source>
          ,
          <year>2012</year>
          Joint Working IEEE/IFIP Conference on.
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Ommering</surname>
          </string-name>
          , R.v., et al.,
          <source>The Koala Component Model for Consumer Electronics Software. IEEE Computer</source>
          ,
          <year>2000</year>
          .
          <volume>33</volume>
          (
          <issue>3</issue>
          ): p.
          <fpage>78</fpage>
          -
          <lpage>85</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Hendrickson</surname>
            ,
            <given-names>S.A.</given-names>
          </string-name>
          and
          <string-name>
            <given-names>A. van der</given-names>
            <surname>Hoek</surname>
          </string-name>
          .
          <article-title>Modeling Product Line Architectures through Change Sets and Relationships</article-title>
          .
          <source>in 29th International Conference on Software Engineering (ICSE</source>
          <year>2007</year>
          ).
          <year>2007</year>
          . Minneapolis, MN.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Dashofy</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>A. van der Hoek,</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Taylor</surname>
          </string-name>
          ,
          <article-title>A Comprehensive Approach for the Development of Modular Software Architecture Description Languages</article-title>
          .
          <source>In ACM Transactions on Software Engineering and Methodology</source>
          , to appear. ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Kang</surname>
            ,
            <given-names>K.C.</given-names>
          </string-name>
          , et al.,
          <string-name>
            <surname>Feature-Oriented Domain Analysis (FODA) Feasibility Study</surname>
          </string-name>
          .
          <year>1990</year>
          , Software Engineering Institute.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Thüm</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          , et al.,
          <article-title>FeatureIDE: An extensible framework for feature-oriented software development</article-title>
          .
          <source>Science of Computer Programming</source>
          ,
          <year>2014</year>
          .
          <volume>79</volume>
          (
          <issue>0</issue>
          ): p.
          <fpage>70</fpage>
          -
          <lpage>85</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11. University of California Irvine,
          <string-name>
            <given-names>I.f.S.R.</given-names>
            <surname>ArchStudio</surname>
          </string-name>
          . Available from: http://www.isr.uci.edu/projects/archstudio/.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <given-names>Cerner</given-names>
            <surname>Corporation</surname>
          </string-name>
          . Available from: http://www.cerner.com/.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Apache</surname>
            <given-names>Software Foundation. Apache</given-names>
          </string-name>
          <string-name>
            <surname>Solr</surname>
          </string-name>
          . Available from: http://lucene.apache.org/solr/.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Garg</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , et al.
          <article-title>An Environment for Managing Evolving Product Line Architectures</article-title>
          .
          <source>in IEEE International Conference on Software Maintenance (ICSM</source>
          <year>2003</year>
          ).
          <year>2003</year>
          . Amsterdam, The Netherlands.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Czarnecki</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Antkiewicz</surname>
          </string-name>
          ,
          <article-title>Mapping features to models: a template approach based on superimposed variants</article-title>
          ,
          <source>in Proceedings of the 4th international conference on Generative Programming and Component Engineering</source>
          .
          <year>2005</year>
          , Springer-Verlag: Tallinn, Estonia. p.
          <fpage>422</fpage>
          -
          <lpage>437</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Heidenreich</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Kopcsek</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Wende</surname>
          </string-name>
          ,
          <article-title>FeatureMapper: mapping features to models</article-title>
          ,
          <source>in Companion of the 30th international conference on Software engineering</source>
          .
          <year>2008</year>
          , ACM: Leipzig, Germany. p.
          <fpage>943</fpage>
          -
          <lpage>944</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Krueger</surname>
            ,
            <given-names>C.W.</given-names>
          </string-name>
          ,
          <source>The BigLever Software Gears Unified Software Product Line Engineering Framework</source>
          ,
          <source>in Proceedings of the 2008 12th International Software Product Line Conference</source>
          .
          <year>2008</year>
          , IEEE Computer Society. p.
          <fpage>353</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Kästner</surname>
            , C.,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Apel</surname>
            , and
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Kuhlemann</surname>
          </string-name>
          ,
          <article-title>Granularity in software product lines</article-title>
          ,
          <source>in Proceedings of the 30th international conference on Software engineering</source>
          .
          <year>2008</year>
          , ACM: Leipzig, Germany. p.
          <fpage>311</fpage>
          -
          <lpage>320</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>