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