CSCI 589 - Software Engineering for Embedded Systems
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 578 - Software Architecture
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 comprehension and 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, coupled with programming/implementation effort, 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, and most importantly, have fun!
CSCI 377 - Introduction to Software Engineering
Introduce principles, methods, techniques, and tools for multi-person construction of multi-version software systems.