At Carnegie Mellon, our software engineering research is distinguished by our blend of formal analysis with engineering and economics. Our research interest in software engineering is principally of two kinds: developing improved models and techniques for the design and implementation of large complex software systems that must satisfy rich, often under-specified, requirements in their operating environments; and developing improved models and techniques for formal analysis of software components to ensure or determine specific formalizable properties. Our work is divided into four research thrusts: software architecture; self-healing systems; value-based design; and security, programming language design, and program analysis software engineering.
The program is designed around a set of core courses that introduces the fundamentals of software engineering, followed by a broader range of courses through which students can choose to focus their learning. Students could choose to augment their core with more computer science-oriented courses (., network and distributed systems security, next generation search systems), data science courses (., machine learning, data mining), end-user oriented courses (., user interface design and evaluation, ubiquitous computing and interaction), or advanced software engineering courses (., requirements engineering and specification, software environments).