<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Teaching Software Modeling and Design</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author role="corresp">
							<persName><forename type="first">Hassan</forename><surname>Gomaa</surname></persName>
							<email>hgomaa@gmu.edu</email>
							<affiliation key="aff0">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution">George Mason University</orgName>
								<address>
									<postCode>22030</postCode>
									<settlement>Fairfax</settlement>
									<region>VA</region>
									<country key="US">USA</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Teaching Software Modeling and Design</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">1ACE5AF78310FCD222B40860CB2EF283</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T01:16+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>software modeling</term>
					<term>software design</term>
					<term>UML</term>
					<term>requirements modeling</term>
					<term>use case modeling</term>
					<term>analysis modeling</term>
					<term>static modeling</term>
					<term>dynamic modeling</term>
					<term>design modeling</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><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></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>I. INTRODUCTION</head><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 <ref type="bibr" target="#b1">[2,</ref><ref type="bibr" target="#b3">[4]</ref><ref type="bibr" target="#b4">[5]</ref><ref type="bibr" target="#b5">[6]</ref><ref type="bibr" target="#b6">[7]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>II GRADUATE COURSES ON SOFTWARE MODELING AND DESIGN</head><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 <ref type="bibr" target="#b0">[1]</ref>.</p><p>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></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A. COURSE STRUCTURE AND EVOLUTION</head><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 <ref type="bibr" target="#b1">[2]</ref>. There was also an advanced real-time design version of the course, which was taught to PhD and advanced Masters students <ref type="bibr" target="#b2">[3]</ref>.</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) <ref type="bibr" target="#b3">[4]</ref>. 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 <ref type="bibr" target="#b5">[6]</ref> 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></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. TEAM PROJECTS</head><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></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>III ADVANCED GRADUATE COURSES ON SOFTWARE MODELING AND DESIGN</head><p>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 <ref type="bibr" target="#b2">[3]</ref> to a UML-based method for concurrent and real-time design <ref type="bibr" target="#b3">[4]</ref>. 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 <ref type="bibr" target="#b6">[7]</ref>.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 <ref type="bibr" target="#b4">[5]</ref> 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 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></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>IV INDUSTRIAL COURSES ON SOFTWARE MODELING AND DESIGN</head><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 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></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>V UNDERGRADUATE COURSE ON SOFTWARE MODELING AND DESIGN</head><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></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>VI LESSONS LEARNED</head><p>General lessons: a) Although giving a survey of different modeling and design methods is useful, teaching one method in detail is necessary for students to understand the intricacies of software design. b) 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. c) 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></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Graduate courses</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>VII CONCLUSIONS</head><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 <ref type="bibr" target="#b1">[2,</ref><ref type="bibr" target="#b3">[4]</ref><ref type="bibr" target="#b4">[5]</ref><ref type="bibr" target="#b5">[6]</ref><ref type="bibr" target="#b6">[7]</ref>.</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</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head></head><label></label><figDesc>d) It is essential to provide rubrics to students for each assignment. 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.</figDesc></figure>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><head>4</head><p>available on the George Mason University web site <ref type="bibr" target="#b7">[8]</ref>. The material includes course syllabus, sample course schedule, presentation slides for each lecture, and course assignments.</p></div>
			</div>

			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">A Five year Perspective on Software Engineering Graduate Programs at George Mason University</title>
		<author>
			<persName><forename type="first">P</forename><surname>Ammann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Gomaa</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Offutt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Rine</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Sanden</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings SEI Conference on Software Engineering Education</title>
				<meeting>SEI Conference on Software Engineering Education<address><addrLine>San Antonio, TX</addrLine></address></meeting>
		<imprint>
			<date type="published" when="1994-01">January 1994</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Software Design Methods for Concurrent and Real-Time Systems</title>
		<author>
			<persName><forename type="first">H</forename><surname>Gomaa</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="s">Addison-Wesley SEI Series in Software Engineering</title>
		<imprint>
			<date type="published" when="1993">1993. 2003</date>
			<publisher>Ltd. and Tsinghua Press</publisher>
		</imprint>
	</monogr>
	<note>Also translated into Chinese by Pearson Education Asia</note>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Courses on Software Design Methods for Real-Time Systems</title>
		<author>
			<persName><forename type="first">H</forename><surname>Gomaa</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings SEI Workshop on Real-Time Systems Education</title>
				<meeting>SEI Workshop on Real-Time Systems Education<address><addrLine>Daytona Beach</addrLine></address></meeting>
		<imprint>
			<date type="published" when="1996-04">April 1996</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Designing Concurrent, Distributed, and Real-Time Applications with UML</title>
		<author>
			<persName><forename type="first">H</forename><surname>Gomaa</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Addison-Wesley Object Technology Series</title>
				<imprint>
			<publisher>University of Aeronautics and Astronautics Press</publisher>
			<date type="published" when="2000">2000. 2004</date>
		</imprint>
	</monogr>
	<note>Also translated into Chinese by Beijing</note>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Designing Software Product Lines with UML: From Use Cases to Pattern-based Software Architectures</title>
		<author>
			<persName><forename type="first">H</forename><surname>Gomaa</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Addison-Wesley Object Technology Series</title>
				<imprint>
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<monogr>
		<title level="m" type="main">Software Modeling and Design: UML, Use Cases, Patterns, and Software Architectures</title>
		<author>
			<persName><forename type="first">H</forename><surname>Gomaa</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2011">2011. 2014</date>
			<publisher>Cambridge University Press</publisher>
		</imprint>
	</monogr>
	<note>Also translated into Chinese by China Machine Press</note>
</biblStruct>

<biblStruct xml:id="b6">
	<monogr>
		<title level="m" type="main">Real-Time Software Design for Embedded Systems</title>
		<author>
			<persName><forename type="first">H</forename><surname>Gomaa</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2016">2016</date>
			<publisher>Cambridge University Press</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<monogr>
		<title level="m" type="main">Teaching Material for Software Modeling Courses</title>
		<author>
			<persName><forename type="first">H</forename><surname>Gomaa</surname></persName>
		</author>
		<ptr target="http://mason.gmu.edu/~hgomaa/" />
		<imprint/>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
