Current Courses

CSCI 578 – Software Architectures (instructors: Nenad Medvidović and Chris Mattmann)

Software architecture has become increasingly important in the last 15 years in the software engineering community. At the heart of every well-engineered software system is its software architecture. Software architecture deals with the high level building blocks that represent an underlying software system. These building blocks are the components (units of computation in a system), the connectors (models of the interactions between software components), and the configurations (arrangements of software components and connectors, and the rules that guide their composition). Software architectures that are found particularly useful for families of systems are often codified into architectural styles.

This course will afford the student a complete treatment of software architecture, its foundation, principles, and elements, including those described above. The class is centered around reading assignments, and homework that will test understanding of the course material. A class project will require the student to leverage the architectural techniques learned during the course (e.g., architectural recovery, architectural styles, domain specific software architectures) to design and implement a real-world software system.

In addition to foundations, and practical experience with software architectures, the class will also introduce the student to the state-of-the-art in software architecture research, future trends and state-of-the-practice. Students are expected to attend class regularly, and participate (as directed) in all class discussions.

CSCI 568 – Requirements Engineering (instructor: George Edwards)

The course will expose students to, both, the current state of the art in requirements engineering and a systematic method for engineering high-quality requirements. The course introduces fundamental concepts and principles including the aim and scope of requirements engineering, the products and processes involved, requirements qualities to aim at and flaws to avoid, and the critical role of requirements engineering in system and software engineering. The course then focuses on system modeling in the specific context of engineering requirements. It presents a multi-view modeling framework that integrates complementary techniques for modeling the system-as-is and the system-to-be.

Multiple homework assignments will complement the classroom instruction and self-study by enabling students to build models and specifications involved in the book’s exercises and case studies, as well as real-world systems, helping students discover the latest RE technology solutions. A larger team project involving the most advanced topics covered as well as a challenging real-world problem will cap off the class.

Prior Courses

CSCI 589 – Software Engineering for Embedded Systems (instructor: Nenad Medvidović)

Over the past decade, the world of computing has moved from large, static, desk-top machines to small, mobile, palm-top, and embedded devices. The methods, techniques, and tools for developing software systems that were successfully applied in the former scenario are not as readily applicable in the latter. Software systems running on networks of mobile, embedded devices must necessarily exhibit properties that are not always required of more traditional systems: near-optimal performance, robustness, distribution, dynamism, mobility.

This class will examine the key properties of software systems in the embedded, resource constrained, mobile, and highly distributed world. The class will assess the applicability of mainstream software engineering methods and techniques (e.g., object-orientation, component-based development, software architecture) to this domain. While not the primary focus of the class, enabling advances in other areas (e.g., embedded, real-time operating systems, wireless networking, the Internet) will be studied from a software application development perspective. A class project will give students hands-on experience with building software development infrastructure and/or applications in this important domain.

CSCI 499 – Modeling Software-Intensive Systems (instructor: Nenad Medvidović)

Modeling is a critical activity in the development of software systems. It spans all development activities, from an early problem definition all the way through the system’s deployment and operation. The most common software development activity—programming—is nothing more than modeling a system in an executable, high‐level programming language. The objective of this course is to expose students to a wide range of software modeling problems, notations, techniques, and tools.

CSCI 377 – Introduction to Software Engineering (instructor: Nenad Medvidović)

Introduce principles, methods, techniques, and tools for multi-person construction of multi-version software systems.