SWENG 500: Advanced Software Studio

This is intended to be a capstone course for the Masters of Software Engineering program providing students training in the complete software development life cycle.  Students in groups or individually develop a significant software product from requirements to code using a development process, tools and technologies of their choice.

SWENG 537: Software Systems Design

This course provides students with the ability to master principles of good object-oriented analysis and design. The students learn UML, a visual modeling language for creating analysis and design models; Unified Process,  a methodology for managing the activities during software development lifecycle; and analysis and design patterns for building the software design model.

SWENG 580: Advanced Software Engineering

The course introduces initiatives, techniques and strategies that characterize the efforts made in both academia and industry to transition the software engineering discipline from an ad hoc, random-behavior, random-result “alchemy” into an established profession using repeatable practices with predictable results.

SWENG 585: Pattern-Oriented Design

Developing any software is hard, developing reusable software is even harder. Most designs solve a specific problem, but are not general enough to address future problems and requirements. This course introduces the participants to design patterns; when properly employed, these patterns have the capability to include distinct elements that can cater to future changes and extensions of the designed system.

SWENG 587: Software Architecture

A software architecture is an abstract view of a software system distinct from the details of how such a system is implemented. A robust architecture is key to developing software systems that meet quality expectations (such as performance, scalability, availability, maintainability, etc.) of their stakeholders. This course introduces basic concepts of software architecture, architectural design principles and patterns. Students also learn how to document and evaluate software architectures, and reuse architectural assets through software product lines.

SWENG 588: Program Understanding

It is a general observation that software engineers learn about software design, programming languages, paradigms, patterns and tools, and are expected to produce high quality designs and code, often without ever having seen good examples. This approach is akin to teaching students the syntax of the English language and writing techniques and then expecting them to become expert writers without ever having read great literary works.

The course in Program Understanding seeks to educate graduate software engineering students beyond their understanding of code syntax and best construction practices with analytical evaluation of “great works” of software code. This approach includes manual code reading, the use of visualization techniques, and automated approaches to assessment of design and code quality.