<!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>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Hassan Gomaa Department of Computer Science George Mason University Fairfax VA 22030</institution>
          ,
          <country country="US">USA</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>This paper describes my experience with teaching courses on software modeling and design to undergraduate and graduate (Masters and PhD) students, in addition to in-depth short courses to industry. The undergraduate course is an introductory software engineering course, which includes lectures on software modeling and design. The Masters course is a detailed course on software modeling and design. The PhD and advanced Masters courses are advanced courses on software modeling and design in the areas of software product line engineering and real-time design. The in-depth industrial courses are courses that cover essentially the same material in overview (1 or 2 day) or more detailed (4 day) formats.</p>
      </abstract>
      <kwd-group>
        <kwd>software modeling</kwd>
        <kwd>software design</kwd>
        <kwd>UML</kwd>
        <kwd>requirements modeling</kwd>
        <kwd>use case modeling</kwd>
        <kwd>analysis modeling</kwd>
        <kwd>static modeling</kwd>
        <kwd>dynamic modeling</kwd>
        <kwd>design modeling</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>This paper describes my experience with teaching courses
on software modeling and design to undergraduate and
graduate (Masters and PhD) students, in addition to
indepth short courses to industry. It briefly describes the
contents of each course, how the teaching of each course
has evolved, the teaching approach of “learning by
doing”, and lessons learned.</p>
      <p>
        My teaching in this area started with a Masters level
course in software modeling and design, followed later by
advanced specialized graduate software modeling courses
in the areas of software product line engineering and
realtime design. In parallel, I also taught several industrial
courses in these areas. Most recently, I have taught an
undergraduate course in software engineering, which
includes introductory lectures on software modeling and
design. Teaching these courses also led me to write books
on software modeling and design [
        <xref ref-type="bibr" rid="ref2 ref4 ref5 ref6 ref7">2, 4-7</xref>
        ].
      </p>
    </sec>
    <sec id="sec-2">
      <title>II GRADUATE COURSES ON SOFTWARE MODELING AND DESIGN</title>
      <p>
        The first courses I taught on software modeling and
design were to graduate students in the Masters of
Software Engineering program at the Wang Institute in
1986-87, and to graduate students in the Masters and
graduate certificate programs in Software Engineering at
George Mason University from Fall 1987 onwards [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
The programs at Mason have a mix of full-time and
parttime students. Because of the large number of part-time
students, all graduate courses are taught as evening
courses, meeting for a three hour class once a week.
      </p>
      <sec id="sec-2-1">
        <title>A. COURSE STRUCTURE AND EVOLUTION</title>
        <p>
          Although the courses on software requirements and
design pre-dated UML, they followed a software
modeling approach based on Structured Analysis and
Structured Design, with the design modeling emphasizing
the design of concurrent systems [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ]. There was also an
advanced real-time design version of the course, which
was taught to PhD and advanced Masters students [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ].
        </p>
        <p>An early decision on course structure was for the
course to cover important design concepts, provide an
overview of various design methods, and follow this by
focusing on one design method in particular. The goal is
for students to understand typical design issues that arise
in designing a software system, and to work in teams to
get experience of applying the design method to a
realworld problem.</p>
        <p>
          From 2000 onwards, the courses were changed to be
based on the Unified Modeling Language (UML) [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ]. The
UML-based course taught requirements modeling
focusing on use case modeling, analysis modeling
consisting of both static and dynamic modeling, and
design modeling with emphasis on the design of
concurrent and distributed systems. From 2011 onwards,
the course was changed again to be a more general
software modeling and design course [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] using the UML 2
notation, with a common approach for the requirements
modeling and analysis modeling sections of the course.
This is followed by design modeling, which addressed the
design of different types of software architectures, such as
client/server software architectures and service-oriented
architectures by first considering the design patterns that
these architectures are based on.
        </p>
        <p>The UML-based software modeling and design method
taught in each course starts with requirements modeling
and progresses through to detailed design in Pseudocode.
The lectures are supplemented with detailed case studies
of applying the modeling method.</p>
      </sec>
      <sec id="sec-2-2">
        <title>B. TEAM PROJECTS</title>
        <p>The goal of the team project is to encourage students to
“learn by doing”. Throughout the semester, students work
in teams on a hands-on design exercise, in which they
apply the design method to a real-world problem, such as
a supermarket check-out system or an inner-city traffic
management system. Students use a commercially
available UML modeling tool for documenting their
analysis models (with static models using class diagrams,
dynamic interaction models using sequence diagrams, and
finite state machine models using statecharts) and design
models (both static and dynamic).</p>
        <p>Student teams also have two tutorials with the course
instructor during the semester, which replace regular
lectures, during which each team meets separately with
the instructor. The first tutorial is to review the team’s
draft analysis model and the second to review the team’s
draft design models. The instructor provides each team
with feedback, which they can use to revise the model
before submitting the revised version for grading. Most
students find these tutorials very useful. In addition,
students have the option of resubmitting the analysis
model, after it has been graded, to address the comments
made by the instructor, before submitting the design
model.</p>
        <p>III ADVANCED GRADUATE COURSES ON</p>
        <p>
          SOFTWARE MODELING AND DESIGN
I also teach two PhD and advanced Masters courses on
software modeling and design in the areas of software
product line engineering and real-time design. Courses on
real-time modeling and design have also progressed from
the pre-UML modeling approaches [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] to a UML-based
method for concurrent and real-time design [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ]. The
course focuses on design concepts for real-time systems,
such as concurrent tasks, priority based scheduling,
realtime scheduling algorithms such as rate monotonic
scheduling, distributed control with concurrent state
machines, subsystem and component design. This course
has been revised recently to follow the revised material
provided in [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ].The course follows the same overall
structure as the introductory graduate class described in
Section 2, thus covering the design method in
considerable detail and having a team project on the
design of a real-world real-time problem.
        </p>
        <p>
          The second advanced course is on software product
line (SPL) design [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] with UML. This course covers SPL
concepts and addresses feature modeling in considerable
detail as the key modeling approach for differentiating
between commonality and variability among the SPL
members of a software family. The relationship between
use cases and features are covered. The steps in analysis
and design modeling also address commonality/variability
analysis and how variable and optional features are
realized in analysis and design. The course follows the
2
same overall structure as the introductory graduate course
of covering the SPL design method in considerable detail
and concurrently running a team project in which students
work on applying the design method to a SPL problem.
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>IV INDUSTRIAL COURSES ON SOFTWARE MODELING AND DESIGN</title>
      <p>The industrial courses are courses that cover essentially
the same material as the graduate courses but use a
different course structure. Courses are either overview (1
or 2 day) courses or more detailed (4 day) intensive
courses. The longer courses include time for industrial
students to work on a design problem. I have taught three
different industrial courses, on Software Modeling and
Design, Real-Time Software Modeling and Design, and
SPL Modeling and Design. All three courses use the
UML notation.</p>
      <p>The overview courses are lecture oriented. The longer
courses have problem sessions built into the schedule for
students to work in small teams on a design problem. In
some courses, students also work in the evenings on the
design problem</p>
      <p>It is definitely the case that students on the four-day
courses learn a lot more about software modeling and
design, particularly through applying what they have
learned to a design real-world problem.</p>
      <p>V UNDERGRADUATE COURSE ON SOFTWARE</p>
    </sec>
    <sec id="sec-4">
      <title>MODELING AND DESIGN</title>
      <p>In the past five years, I have also developed an
undergraduate software engineering course that features
software modeling and design concepts. The course
follows an iterative software life cycle model, so that
introductory modeling concepts can be covered in the
requirements and design parts of the course. Use case
modeling is used for the requirements phase. Simple
analysis and design modeling is used for the design phase.
Software testing covers different testing approaches but
also covers model-based testing based on use cases, which
are used for integration and system testing.</p>
      <p>Students also work in teams on the different phases of
solving a real-world problem starting with developing use
case models, a simple class diagram with entity classes,
and sequence diagrams for object interactions. The
software architecture is described in terms of components
with provided and required interfaces. Since students
have no knowledge of concurrency or user interface
design, the design assignment for the student project is for
a sequential server, such as a hotel reservation server. The
user interface is simulated by creating a file with a
sequence of inputs that represent online user inputs for
making hotel reservations, checking in and checking out.
Students carry out integration testing to test object
interactions and use case based system testing to test the
complete system using the simulated user interface.</p>
      <p>The undergraduate course is the most challenging for
teaching modeling concepts. Most students come to the
software engineering course having previously only taken
computer science courses in object-oriented programming
and data structures. Some students have difficulties with
understanding the more abstract modeling concepts.
However, developing a simple hotel reservation system
starting with use cases and progressing through to an
implemented working system is an interesting experience
for many students.</p>
    </sec>
    <sec id="sec-5">
      <title>VI LESSONS LEARNED</title>
      <sec id="sec-5-1">
        <title>General lessons: a) b) c)</title>
      </sec>
      <sec id="sec-5-2">
        <title>Although giving a survey of different modeling</title>
        <p>and design methods is useful, teaching one
method in detail is necessary for students to
understand the intricacies of software design.
Having a real-world project to work on,
“learning by doing”, is important for reinforcing
what students learn. This applies to both
undergraduate and graduate students.</p>
        <p>From a teaching perspective, a big challenge is to
make sure that the lectures “are in sync” with the
project, so that the lectures are taught before the
concepts are needed for the project.</p>
      </sec>
      <sec id="sec-5-3">
        <title>Graduate courses:</title>
        <p>a)
b)</p>
        <p>Students who appreciate the modeling courses most
are typically part-time graduate students who work
in industry or full-time graduate students who have
previously worked in industry. Many of these
students have worked on large scale software
development projects and understand that software
modeling is a valuable skill for software
development.</p>
        <p>Graduate students are capable of working on team
projects much more independently than
undergraduate students who need much more help.
Undergraduate courses:
a) Undergraduates tend to find it more difficult to
appreciate software modeling concepts, although
working on a software project helps them
understand how these concepts can be used in
practice.
b) Keeping lectures in sync with the project is a
particular challenge for undergraduate projects,
since they span requirements through
implementation. It also means that project
grading needs a quicker turnaround so that
students can benefit from the comments in time
for the next phase of the project.
c) As undergraduate students are less mature than
graduate students, they need to have each
concept explained very clearly, emphasized more
than once, and reinforced with examples.
d) It is essential to provide rubrics to students for
each assignment.</p>
        <p>Industrial courses:
a) The industrial courses are typically attended by
employees who need to understand software
modeling and design for the projects they are
working on and so are the most motivated to
learn.
b) Students get the most benefit from the intensive
4-day course, since they apply what they have
learned by solving design exercises. </p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>VII CONCLUSIONS</title>
      <p>
        This paper has described my experience with teaching
courses on software modeling and design to
undergraduate and graduate (Masters and PhD) students,
in addition to in-depth short courses to industry. It has
briefly described the contents of each course, how the
teaching of each course has evolved, the teaching
approach of “learning by doing”, and lessons learned.
Teaching these courses also led me to write books on
software modeling and design [
        <xref ref-type="bibr" rid="ref2 ref4 ref5 ref6 ref7">2, 4-7</xref>
        ].
      </p>
      <p>Although I developed all these courses, they have been
taught by full-time and adjunct software engineering
faculty at George Mason on a regular basis. For new
course instructors, I provide all the course material to
them and mentor them over the semester on a regular
basis.</p>
      <p>
        Teaching material for the courses on Software
Modeling and Design and Real-Time Software Design are
available on the George Mason University web site [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
The material includes course syllabus, sample course
schedule, presentation slides for each lecture, and course
assignments.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>P.</given-names>
            <surname>Ammann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Offutt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Rine</surname>
          </string-name>
          and
          <string-name>
            <given-names>B.</given-names>
            <surname>Sanden</surname>
          </string-name>
          , “
          <article-title>A Five year Perspective on Software Engineering Graduate Programs</article-title>
          at George Mason University”,
          <source>Proceedings SEI Conference on Software Engineering Education</source>
          , San Antonio, TX,
          <year>January 1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , “
          <article-title>Software Design Methods for Concurrent and Real-Time Systems”</article-title>
          ,
          <source>Addison-Wesley SEI Series in Software Engineering, ISBN 0-201-52577-1</source>
          ,
          <year>1993</year>
          . (
          <article-title>Also translated into Chinese by Pearson Education Asia Ltd</article-title>
          . and Tsinghua Press,
          <year>2003</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , “
          <article-title>Courses on Software Design Methods for RealTime Systems”</article-title>
          ,
          <source>Proceedings SEI Workshop on Real-Time Systems Education”</source>
          , Daytona Beach,
          <year>April 1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , “
          <article-title>Designing Concurrent, Distributed, and RealTime Applications with UML”</article-title>
          ,
          <source>Addison-Wesley Object Technology Series, ISBN: 0-201-65793-7</source>
          ,
          <year>2000</year>
          . (Also translated into Chinese by Beijing University of Aeronautics and Astronautics Press,
          <year>2004</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , “
          <article-title>Designing Software Product Lines with UML: From Use Cases to Pattern-based Software Architectures”</article-title>
          ,
          <source>Addison-Wesley Object Technology Series, ISBN: 0-201- 77595-6</source>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , “
          <source>Software Modeling and Design: UML</source>
          ,
          <string-name>
            <surname>Use</surname>
            <given-names>Cases</given-names>
          </string-name>
          , Patterns, and Software Architectures”, Cambridge University Press, ISBN:
          <volume>9780521764148</volume>
          ,
          <year>2011</year>
          . (
          <article-title>Also translated into Chinese by China</article-title>
          Machine Press,
          <year>2014</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , “
          <article-title>Real-Time Software Design for Embedded Systems”</article-title>
          , Cambridge University Press, ISBN:
          <volume>9781107041097</volume>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , “
          <article-title>Teaching Material for Software Modeling Courses”</article-title>
          , http://mason.gmu.edu/~hgomaa/
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>