<!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>Multi-faceted Practical Modeling Education for Software Engineering</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Suresh Kothari</string-name>
          <email>kothari@iastate.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jeremias Sauceda</string-name>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Electrical and Computer Engineering, Iowa State University</institution>
          ,
          <country country="US">USA</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>It is a challenge to teach modeling to undergraduates. Primarily, the di culty is of teaching abstract concepts because it is hard for students to digest and appreciate abstractions. This paper is about developing a curriculum in which students can experience how models enable one to: nd solutions, verify solutions, and be able to experiment with possible solutions. In this paper we present two modeling topics covered in an undergraduate course taught at Iowa State University (ISU). These topics are chosen for their practical importance. Our primary goal is to enable students to learn how to apply modeling to solve practical problems of large software and be familiar with state-of-the-art modeling tools used in industry. Model-based problem solving makes it easier for students to appreciate and learn modeling.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Models help us understand how complex things work. Engineers use mathematics
as a modeling tool to reason about complex systems. When Boeing designs a new
jet, they model the airplane in software, where they run millions of simulations
to understand how the shape of the fuselage, weight of the components, position
of the cockpit, and numerous other variables a ect lift and fuel e ciency.</p>
      <p>Models enable us to abstract and focus on essentials of a problem. The
abstraction becomes the basis for designing an e cient and sound solution to an
otherwise di cult problem. With modeling, we can nd a solution that works for
not just one but a large number of seemingly di erent problems. The following
two problems are seemingly very di erent but a common model works for both.</p>
      <p>Problem 1: John is 3 years older than Jill. Together their ages add up to
their mother's age. Their mother is 45 years old. How old are John and Jill?</p>
      <p>Problem 2: A water tank holds 3 gallons of water more than another water
tank. Together the two water tanks can hold 45 gallons of water. What is the
capacity of each water tank?</p>
      <p>The common model, a linear system of equations, suppresses irrelevant
details. In general, a good model captures the essential core of the problem. There
are other important points about models that make them useful and powerful.
Models suggest generalizations applicable to a large class of problems. In the
above example, the generalization is a linear system of equations with N
variables instead of just 2 variables. Models serve as the foundation for developing
e cient and accurate computational methods for solving complex problems. In
this paper, we discuss how to e ectively bring out these modeling highlights in
the context of software engineering.</p>
      <p>The software engineering program at ISU was started in consultation with
several companies. We interact with these companies and with companies that
use EnSoft's products and services. Industry is interested in Model-Based
Development (MBD) as a way to improve reliability of software and produce it
e ciently. Industry is not interested in modeling that works only for toy
problems. To be relevant to industry, modeling should be taught in the context of
large real-world software. One topic, Uni ed Modeling Language (UML), is of
great interest to industry. Since a number of textbooks already discuss UML at
length, this paper focuses on other MBD topics which are often not taught in
software engineering curricula but are of interest in industry.</p>
      <p>It is a challenge to teach modeling to undergraduates. Primarily, the di culty
is of teaching abstract concepts because it is hard for students to digest and
appreciate abstractions. Teaching models in a software engineering course is
especially di cult. Other engineering disciplines have well established modeling
techniques and tools. For example, the nite element modeling is well established
and routinely taught in mechanical engineering. Software engineering itself is a
relatively new and evolving discipline and the modeling of software is more so.</p>
      <p>We present a case study based on an elective course in our undergraduate
software engineering degree program at Iowa State University. After
introducing a few basic concepts, modeling is primarily taught by presenting a set of
problems. The problems are chosen so that the students can understand and
appreciate their importance in real-world software engineering but it is di cult for
students to solve the problems without applying modeling. Then modeling
techniques are introduced to solve the problems. We have not yet done a systematic
assessment, but we have received numerous positive comments from students,
impromptu as well as comments through course evaluation at the end of the
semester. Based on the feedback, we believe that this problem-based teaching
makes it easier for students to appreciate and learn modeling. We present two
representative examples of problem-based teaching of software modeling.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Multi-faceted and Practical Modeling</title>
      <p>While the goal remains the same, to improve reliability of software and produce
it e ciently, modeling is a multi-faceted activity with di erent types of use cases.
Modeling can bene t varied software engineering tasks including:
{ Gathering requirements
{ Estimating time and cost for software evolution and maintenance projects
{ Designing to meet real-time performance and resource constraints
{ Generating software from speci cations
{ Analyzing software nd defects, validate, and verify
{ Generating test cases to meet coverage requirements
{ Enabling e cient communication between clients, developers, managers, and
QA personnel</p>
      <p>In this paper we present two use cases of incorporating model-based
development in a software engineering curriculum: (a)generating software from its
model, and (b) model-based software analysis. We advocate these use cases
because of their practical importance and two very di erent facets they represent
of model-based software engineering.</p>
      <p>
        Modeling paradigms di er depending on the use-cases. For example, The
Constructive Cost Model (COCOMO) [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] is an algorithmic software cost
estimation model developed by Barry W. Boehm. The model uses a basic regression
formula with parameters that are derived from historical project data and
current as well as future project characteristics. Our examples include: Simulink
models and graphical models of program artifacts and their relationships.
      </p>
      <p>One important modeling consideration is domain-speci city. The prime
motivation is to make programming easy and reliable for a speci c domain of
applications. A good model is an abstraction that is close to the semantic core of the
problem - it could be an equation, a graph or something else. A model should
not be just a notation (syntax) it should enable e cient semantic processing.
Semantic processing implies the ability to: nd solutions, verify solutions, and be
able to experiment with possible solutions. A domain is a class of problems that
share a common semantic core. A generic abstraction may not be close enough
to the core semantics of the domain and that necessitate the need for a domain
speci c language (DSL). Excel-type spreadsheet is a good example of a widely
used domain speci c programming environment.</p>
      <p>
        We discuss Simulink models as domain-speci c programming environment.
Simulink is a mature modeling environment widely used in industry but rarely
presented to software engineering students. Simulink has an underlying
domainspeci c language (DSL) and a graphical programming interface. Simulink is used
speci cally to develop embedded control systems software in aerospace,
automotive and other companies. These companies are required to produce highly
reliable software because of the safety-critical nature of their applications. The role
of Simulink has shifted from a prototyping tool to a software production tool. In
this process, the Simulink models have grown reaching 100K-block models. The
number of lines of generated C code per Simulink block varies from one to about
hundred lines. Developing and maintaining large Simulink models intrinsically
requires software engineering principles and practices. The domain experts, the
control systems engineers, are not typically familiar with software engineering
practices to make e ective use of version control systems to facilitate team work
for developing large models. Companies need interdisciplinary teams of control
and software engineers. A software engineer can play an e ective role in such
teams if he or she is familiar with the nuances of Simulink models.
Our second use-case brings out domain-speci city in a di erent way. We use
Atlas, a generic program analysis platform from EnSoft. It o ers query-based
programming interface to write domain-speci c analysis programs. We use this
platform to teach students the idea of building domain-speci c analysis models.
This is possible because the analysis platform o ers a query language. Generic
program relationships are pre-computed by the platform and those relationships
can be accessed through the query language to build domain-speci c analysis
scripts, for example, analysis scripts to detect malware in Android apps.
Students learn and apply domain-speci c knowledge of Android Manifest [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] and
semantics of Android APIs [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ] to write domain-speci c analysis scripts.
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>Modeling Tools</title>
      <p>
        Our case study involves two modeling tools: Simulink from MathWorks [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] and
Atlas from EnSoft [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Simulink was selected because it is a widely used tool
for modeling safety-critical control software. Atlas tool was selected because
of its interactive analysis capability and query-based programming interface to
write analysis scripts. These capabilities make it much easier to perform analysis
experiments.
      </p>
      <sec id="sec-3-1">
        <title>Simulink - Domain-speci c Graphical Programming</title>
        <p>
          Executable models are created graphically using Simulink. Simulink CoderTM
(formerly Real-Time Workshop R ) generates and executes C and C++ code
from Simulink models [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]. Simulink is typically used with other tools such as
SimDi 4 Team [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] for di erencing and merging Simulink models, and Reactis [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]
for testing and validating Simulink models.
        </p>
        <p>There are two major classes of elements in Simulink: blocks and lines. Blocks
are used to generate, modify, combine, output, and display signals. Lines are used
to transfer signals from one block to another.</p>
        <p>Blocks have zero to several input terminals and zero to several output
terminals. Unused input terminals are indicated by a small open triangle. Unused
output terminals are indicated by a small triangular point.</p>
        <p>Lines transmit signals in the direction indicated by the arrow. Lines must
always transmit signals from the output terminal of one block to the input
terminal of another block. One exception to this is that a line can branch o of
another line. This sends the original signal to each of two (or more) destination
blocks. Lines can never inject a signal into another line; lines must be combined
through the use of a block such as a summing junction. A signal can be either
a scalar signal or a vector signal. The lines used to transmit scalar and vector
signals are identical. The type of signal carried by a line is determined by the
blocks on either end of the line.</p>
        <p>Building a Simulink model is accomplished through a series of steps:
1. The necessary blocks are gathered from the Library Browser and placed in
the model window.
2. The parameters of the blocks are then modi ed to correspond with the
system we are modeling.
3. Finally, the blocks are connected with lines to complete the model.</p>
        <p>
          Simulink models can be executed through an Interpreter. The user can go to
the Simulation menu and click on Start. With more complicated systems, the
user can see the progress of the simulation by observing its running time in the
lower box of the model window. Videos and Examples of Simulink are available
at [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ].
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>Atlas Graphical Modeling Platform for Program Analysis</title>
        <p>Atlas is an analysis and visualization platform to build and study graphical
models of software. It is available as an Eclipse plug-in. It has a graphical query
language for constructing and analyzing graphical models of software. The queries
can be executed through Scala Interpreter or they can be embedded in a program
analysis script written in Java or Scala.</p>
        <p>The Atlas platform builds a database of relationships between program
artifacts. The user issues queries against this database and the results are shown
as graphical models. The queries are composable. The result of a query can be
stored in a variable which can be passed as input to another query. The
Atlas platform has built-in graph algorithms that can be used through queries to
transform and traverse graph models.</p>
        <p>
          In Atlas, the program analysis is decoupled from its use for modeling a
particular class of applications. The advantage is that domain-speci c models can
be built easily. Currently, ISU and EnSoft have a joint research project funded
by the DARPA APAC program to build a Security Toolbox for detecting
malware in Android apps. The toolbox is being developed as a set of analysis scripts
that incorporate domain knowledge of Android. Our case study was focused on
operating systems so that students could use their domain knowledge to build
models for XINU [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] and Linux 2.6.31 kernels. Videos and Examples of Atlas are
available at [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ].
4
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Case Study: Examples of Teaching Modeling</title>
      <p>
        The two examples are drawn from a course taught as an elective for the
undergraduate Software Engineering program at ISU. The third example covered
in the course, model-based testing, is not included here. We use the chapter
on model-based testing from the book [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] and the tool Spec Explorer [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] from
Microsoft Research.
      </p>
      <p>We strive to teach modeling as a problem solving skill. We rst pose a problem
and let the students make an attempt to solve the problem. We tell students to
think of a model to solve the problem. Then, we teach a modeling concept
relevant to the problem and build a model using one of the tools we have brie y
described. To reinforce the modeling concept and the use of the tool, we give
another similar but a bit more challenging problem as a modeling homework. To
stay within page limits of the paper, the examples are not the complete exercises
that students go through. The examples are meant to bring out how modeling
can be taught through concrete problems that students can nd interesting and
challenging. The problems are speci cally chosen so that students can appreciate
the value of modeling to solve non-trivial problems.</p>
      <sec id="sec-4-1">
        <title>Example I: Programming with Simulink Models</title>
        <p>To demonstrate how Simulink can be used to investigate a real-world system,
we ask students to create a simpli ed, rst-order model of the motion of a car.
If we assume the car to be travelling on a at road, then the horizontal forces
on the car can be represented by:
{ v is the horizontal velocity of the car (units of m=s).
{ F is the force created by the car's engine to propel it forward (units of N ).
{ b is the damping coe cient for the car, dependent on wind resistance, wheel
friction, etc. (units of N s=m) We have assumed the damping force to be
proportional to the car's velocity.</p>
        <p>{ M is the mass of the car (units of kg).</p>
        <p>Writing Newton's Second Law for the horizontal direction thus gives:</p>
        <p>To be able to successfully simulate the system, we specify an applied input,
F . Let us assume the car is initially at rest, and that the engine applies a step
input of F = 400N at t = 0. This is approximately equivalent to the car's driver
quickly pushing down and holding the gas pedal in a steady position starting
from a stoplight.</p>
        <p>Note that the Simulation A does not appear to show the velocity approaching
a steady-state value, as we would expect for the rst-order response to a step
input. This result is due to the settling time of the system being greater than the
10 seconds the simulation was run. To observe the system reaching steady-state,
we click Simulation, Parameters in the model window, and change the Stop
Time to 150 seconds. Now, re-run the simulation and note the di erence in the
velocity graph Output B in Figure 2.
After engaging students in working with a couple of di erent Simulink
models, we get into a broader discussion of following points:
{ Why domain speci city is important?
{ Graphical programming
{ Quick prototyping and simulation
{ Unifying programming and design
{ Simulink models vs. C programming</p>
      </sec>
      <sec id="sec-4-2">
        <title>Example II: Reasoning about Operating System Code by</title>
      </sec>
      <sec id="sec-4-3">
        <title>Constructing Models</title>
        <p>We present the device driver code (dswrite()) shown in Figure 3 from the Xinu
operating system. It includes a getbuf() call to allocate memory but no freebuf()
call to deallocate memory. We ask the students to check if it is a memory leak.
Students quickly go to dskenq() because the pointer to the allocated memory
is passed to it as a parameter. Soon they nd that they have to examine many
functions. After examining a few functions they hit a barrier because the pointer
to the memory is assigned to a global variable. Now they do not know which
functions to examine because the global variable can be accessed by any function.
It is time to introduce modeling to solve this problem.</p>
        <p>We build a graphical model for solving the memory leak problem. The goal
is to create a model to nd all relevant functions and their call relationships.
Note that constructing a call graph of dswrite is not enough. A function that
is not called directly or through a call chain can access the global variable that
contains the address of the allocated memory and deallocate the memory. It can
also happen that after getting the memory address the pointer may be passed
through a call chain eventually to a function that calls freebuf to deallocate
memory. So, our rst model is the reverse call graph (rcg) of getbuf and freebuf.
This model gives a conservatively relevant subset of functions and their call
relationships.</p>
        <p>We can build a better model by incorporating another constraint. We note
that the memory was allocated for a structure of type dreq. The rcg can have
many functions that do not read or write to variables of type dreq, and hence
these functions are not relevant to our memory leak problem. They should not
be included in the model. Our re ned model can be an induced subgraph of the
rcg that includes only the functions that read or write to variables of type dreq.
It is easy to build this re ned model using a sequence of Atlas queries as follows:
1. #m1 = rcg(getbuf, freebuf) - rcg is stored in a variable #m1
2. #temp = ref(dreq) - temp captures the functions that read or write dreq
3. #m2 = #m1 intersection #temp - #m2 is the refined model
4. show(#m2) - the model is shown graphically
By executing the above sequence of four queries, Atlas produces a graphical
model shown in Figure 3.</p>
        <p>A quick review of the model brings out a couple of important points. First,
there is a call chain from dswrite to freebuf which means that at least on
some execution paths the memory is deallocated. This model cannot tell us if
the memory is deallocated on all execution paths, we need a di erent model
to check that. The dsinter calls freebuf but not getbuf. That freebuf call can
potentially account for missing deallocations on some of the paths. In fact, that
happens to be the case in this example. We then get into other models that
can facilitate such validations. We have done a project in class where students
have used models to validate the Linux kernel 2.6.31 for a safe synchronization
property which involves analysis quite similar to checking memory leaks. The
models used for the Linux kernel validation were originally developed by two
graduate students as a part of PhD research. At the end of the project the
students write a report classifying all instances memory allocations according
to the results of their analysis and for a few selected instances they provide a
detailed description of: the analysis they performed, the relevance of the tool in
performing the analysis, and the learning outcome.</p>
        <p>
          We have developed a new teaching module to show how models suggest
generalizations applicable to a large class of problems. This module de nes a
notion of 2-event models and shows its broad applicability to a large class of
problems. We show that the model is applicable for analyzing memory leaks,
mismatches of mutex locks and unlocks, and interestingly to detecting malware
in Android apps. The applicability to detect Android malware is a research
project funded by DARPA APAC program [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. This teaching module poses
malware detection problems. The module teaches strategies to characterize and
analyze malware through graph models. The goal is to extract graphical models
of program relationships and show that it corresponds to a model of malware.
        </p>
        <p>
          The Figure 4 shows a model of malware and its correspondence to a model
extracted from the software. In this model, images captured by camera are rst
passed as exception objects, then as asynchronous messages using Android APIs,
and nally leaked to a suspicious URL. The software model is extracted using a
sequence of Atlas queries.
Three thematic groups of paper submissions were discussed in the Educators
Symposium of the MODELS conference in 2008 [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]. There are also a number of
other papers written about teaching model-based software development [17{20].
This paper presents a di erent theme that emphasizes multi-faceted practical
modeling.
        </p>
        <p>
          Pareto in [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ] discussed a course in which educators give students two
existing domain speci c languages using Microsoft DSL toolkit. While Pareto
focused on graphical domain-speci c languages, and the translations from
graphical languages to embedded target platforms. We focus on Simulink which can
be thought of as a graphical domain-speci c language.
        </p>
        <p>
          Kramer in [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ] has called abstraction the "key skill " in computing. Roberts
in [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ] refers to two aspects: removing unnecessary details and the process of
generalizing concepts and nding patterns. Our case study present concrete
examples of problem solving that include these aspects.
6
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Conclusions</title>
      <p>This paper advocates that modeling be taught as problem solving exercises so
that students can get over the hump of abstraction and nd modeling interesting
and useful. We present a case study that includes two very di erent facets of
modeling. We believe rightly taught modeling can transcend software engineering
and help students learn how to think clearly. While we have not done a formal
assessment of e ectiveness of our approach to teach model-based software
engineering, we have received many student comments through course and instructor
evaluation forms indicating that they found the topics thought provoking and
useful.</p>
    </sec>
    <sec id="sec-6">
      <title>Acknowledgment</title>
      <p>This work was partly supported by MathWorks curriculum development grant
and a DARPA research grant under agreement number FA8750-12-2-0126. We
thank the reviewers for careful reviews and many good suggestions.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>1. COCOMO model. http://en.wikipedia.org/wiki/COCOMO</mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>2. Simulink. http://www.mathworks.com/products/simulink/</mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>3. Atlas. http://www.ensoftcorp.com/atlas/</mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Spec</given-names>
            <surname>Explorer</surname>
          </string-name>
          . http://research.microsoft.com/projects/specexplorer/
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>Simulink</given-names>
            <surname>Coder</surname>
          </string-name>
          . http://www.mathworks.com/products/simulink-coder/
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>6. SimDi 4 Team. http://www.ensoftcorp.com/simdiff/</mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>7. Reactis http://www.reactive-systems.com/papers/bcsf.pdf</mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <article-title>Simulink examples and videos</article-title>
          . http://www.mathworks.com/products/simulink/ examples.html
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>9. XINU. http://en.wikipedia.org/wiki/XNU</mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <article-title>Atlas examples and videos</article-title>
          . http://www.ensoftcorp.com/atlas/
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>11. spec#. http://research.microsoft.com/en-us/projects/specsharp/</mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Asml</surname>
          </string-name>
          . http://research.microsoft.com/en-us/projects/asml/
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>DARPA APAC</surname>
          </string-name>
          <article-title>Program</article-title>
          . http://www.darpa.mil/Our_Work/I2O/Programs/ Automated_Program_
          <article-title>Analysis_for_Cybersecurity_(APAC)</article-title>
          .aspx
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Page</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Johnston</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rollison</surname>
            ,
            <given-names>B.: How</given-names>
          </string-name>
          <string-name>
            <surname>We Test Software at Microsoft R . O'Reilly</surname>
          </string-name>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15. Google Talk:
          <source>Automated Model-Based Testing of Web Applications</source>
          . http://www. youtube.com/watch?v=6LdsIVvxISU
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Smialek</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Promoting software modeling through active education</article-title>
          .
          <source>In: In Proceedings of the Educators Symposium at the 11th International Conference</source>
          ,
          <string-name>
            <surname>MODELS</surname>
          </string-name>
          <year>2008</year>
          .
          <article-title>(</article-title>
          <year>2008</year>
          )
          <fpage>7</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Gokhale</surname>
            ,
            <given-names>A.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gray</surname>
          </string-name>
          , J.:
          <article-title>Advancing model driven development education via collaborative research</article-title>
          . In: Educators' Symposium,
          <string-name>
            <surname>Citeseer</surname>
          </string-name>
          (
          <year>2005</year>
          )
          <fpage>41</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Cowling</surname>
            ,
            <given-names>A.J.:</given-names>
          </string-name>
          <article-title>Modelling: a neglected feature in the software engineering curriculum</article-title>
          .
          <source>In: Software Engineering Education and Training</source>
          ,
          <year>2003</year>
          .(CSEE&amp;T
          <year>2003</year>
          ).
          <source>Proceedings. 16th Conference on, IEEE</source>
          (
          <year>2003</year>
          )
          <volume>206</volume>
          {
          <fpage>215</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Pareto</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Teaching domain speci c modeling</article-title>
          .
          <source>In: Symposium at MODELS</source>
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <article-title>Experiences of teaching model-driven engineering in a software design course</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Kramer</surname>
          </string-name>
          , J.:
          <article-title>Is abstraction the key to computing?</article-title>
          <source>Communications of the ACM</source>
          <volume>50</volume>
          (
          <issue>4</issue>
          ) (
          <year>2007</year>
          )
          <volume>36</volume>
          {
          <fpage>42</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Roberts</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Abstract thinking: a predictor of modelling ability? (</article-title>
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>23. Android Manifest:. http://developer.android.com/guide/topics/manifest/ manifest-intro.html</mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Android</surname>
            <given-names>API</given-names>
          </string-name>
          :. http://developer.android.com/guide/topics/manifest/ uses-sdk-element.html
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>