SE PhD Curriculum
The purpose of completing graduate courses at Carnegie Mellon University is to attain a broad understanding of software engineering and closely related fields, a core set of research skills, and a deep understanding of topics that lead into the student’s thesis research. Our requirement is that students complete 84 university units, which is the equivalent of 7 standard 12-unit courses.
Our core research course, 17-808, provides an understanding of the Software Engineering field, including important ideas and the major research strategies in use. Certain courses are designated as ‘star’ courses because they provide a solid foundation in some area. By taking a star course in each of the four categories, students acquire breadth through exposure to fundamental knowledge, concepts, and skills in software engineering. Through the equivalent of two elective courses, students typically choose to gain more depth in the student’s particular area of research. Some students use electives to gain more breadth by specialized exposure to an area outside of the student’s core research area.
Software Engineering Research Course (17-808)
The Software Engineering Research Course requirement is fulfilled by taking the 12-unit course 17-808: Software Engineering Research, typically in their first semester in the software engineering Ph.D. program. This course is taught jointly by the software engineering faculty, and is designed to prepare Ph.D. students to do research in software engineering. It introduces important ideas across the breadth of software engineering and the major research strategies of the field. Students will become familiar with the structure of the field; they will learn the seminal ideas and developments that led to current research questions; they will learn to critique research papers to evaluate their claims and evidence; and they will also become familiar with the current software engineering research themes at CMU.
Four Area Star Courses
Each student must pass one star course from each of four categories:
- SYM: Symbolic mathematical modeling and analysis
- BEH: Human-focused empirical research
- ENG: Design and engineering of software systems
- SOC: The interaction of software with larger issues in society, business, or public policy.
These categories are chosen to ensure that students acquire breadth through exposure to fundamental knowledge, concepts, and skills in software engineering. Each category captures a particular set of knowledge and skills that every software engineering student should possess. At the same time, the choice of courses within the categories gives students the flexibility to customize their course selection to their individual needs.
Star courses are identified as especially appropriate to provide grounding in a topical area or set of research skills within Software Engineering. The criteria for a star course include:
- They provide a broad introduction to a topic or skills relevant to software engineering research, while being deep enough to be appropriate for Ph.D. study.
- They assume only an undergraduate background in the relevant area.
- They use multiple forms of evaluation, such as assignments, exams, projects, or term papers.
Star Course Categories and Approved Courses
The more detailed descriptions of the star course categories, together with the rationale for their selection and the currently-approved courses in each category, are as follows:
-
SYM: A course whose primary focus is on symbolic mathematical modeling and analysis techniques that are applicable to software artifacts. Students taking a SYM course should engage in symbolic research methods that might include discrete models, proofs, state space exploration, or other software-relevant mathematical topics. Symbolic mathematical techniques are useful in many areas of software engineering research, and more broadly, many students have found them helpful in writing careful definitions and precisely distinguishing among related concepts. The courses currently approved in this category are:
-
-
10-701 Machine Learning (Ph.D.-level)
-
11-727 Computational Semantics for NLP
-
15-811 Verifying Complex Systems
-
15-812 Programming Language Semantics
-
15-814 Type Systems for Programming Languages
-
17-819 Program Analysis
-
17-751 Models of Software Systems
-
80-610 Formal Logic
-
-
-
ENG: A course with a primary focus on software systems design and engineering. Courses in this category must include (A) significant engagement with software design, (B) consideration of software artifacts at a significant scale and complexity, and (C) exposure to the tradeoffs (such as cost/benefit) at the core of the engineering discipline. The courses currently approved in this category are:
-
-
05-830 Advanced User Interface Software
-
15-712 Advanced Operating Systems and Distributed Systems
-
15-821 Mobile and Pervasive Computing
- 15-829 Programmable Networks
-
16-867 Principles of Human-Robot Interaction
-
17-755 Architectures for Software Systems
-
17-752 Methods: Deciding What to Design
-
18-730 Introduction to Computer Security
-
18-732 Secure Software Systems
-
18-749 Building Reliable Distributed Systems
-
15-745 Optimizing Compilers for Modern Architectures
-
-
-
SOC: A course with a primary focus on how software interacts with larger issues in society, business, or public policy. This requirement is intended to create breadth in the curriculum, pushing students out of a focus on the software system itself (which is what ENG does) to take a course that views software from the perspective of another discipline. The courses currently approved in this category are:
-
-
05-820 Social Web
-
08-631/17-631 Information Security and Privacy
-
08-733/17-733 Privacy, Policy, Law and Technology
-
08-805/17-735 Privacy Engineering
-
18-734 Foundations of Privacy
-
19-758 Special Topics: Organizational Theory for Engineers
-
90-802 Information Security: Comparison of US and European Policies
-
90-880 Strategy and Management of Technological Innovation
-
95-782 Global eBusiness Strategy
-
-
-
BEH: A course that is primarily concerned with behavioral science research methods. The course must touch on one or more human-focused empirical research methods that may include case studies, interviews, surveys, human subjects experiments, or mining software repositories. These methods may involve working with subjects directly or inferring information about subjects based on artifacts they have left behind, as in mining software repository research. The course must require students to plan and prototype a sample project using at least one of these research methods in some depth. The courses currently approved in this category are:
-
-
05-899D Human Aspects of Software Development
-
05-821 Applied Research Methods - Qualitative WITH 05-822 Applied Research Methods
-
Quantitative (6-units each, therefore 2 must be taken)
-
08-803/17-803 Empirical Methods
-
08-734/17-734 Usable Privacy and Security
-
36-743 Statistical Methods for the Behavioral and Social Sciences
-
-
Process for Requesting Approval for New Star Courses
The faculty have selected an initial set of approved courses in each category. These are subject to review from time to time to ensure that, if the course content changes, it remains consistent with the purpose of that star.
SE Ph.D. students may request that the faculty approve an additional course in one of the star categories. In general, if the request is approved, the course will be added to the list for other students to take for star credit. When a request is student-initiated, it is the student's reponsibility to make a case supporting STAR status. Students should submit a request to the SE Ph.D. Program Director and the SE Ph.D. Program Administrator using the following template:
New Star Course Approval Request Form
Given sufficient information, requests received by the faculty should generally receive a response within 2 weeks, if the request is made during a regular academic semester. Star credit should generally be requested at least 2 weeks before the end of the semester before taking a course, and preferably 2 weeks before the beginning of the registration period. This ensures students can register for a course before it fills up, and avoid spending time on a course that is not in the end approved.
Courses will not, in general, be approved in two categories, but instead will be approved in the category that best fits the primary emphasis of the course (if any). If any exception to this principle is made, the student must choose which category to apply the course to, and find a different course with which to fulfill the other requirement.
Course curricula may evolve over time, due to the advancing state of knowledge, the changing background and needs of students, or the strengths that a new instructor brings to bear on a course. Therefore, the faculty may re-examine star courses from time to time in order to verify the the course continues to fulfill the requirements for a star. If it does not, star status may be withdrawn for future offerings of the course.
Twenty-Four Elective Units
Students must also take 24 university units worth of elective courses, at least 12 of which are from graduate courses offered by the School of Computer Science; the other 12 may be from graduate courses offered by the rest of the University. In general, elective graduate courses must be Ph.D. level (university course numbering 700 and above); exceptions to this rule may be made with a note from the student’s advisor to the SE Ph.D. Program Administrator.
There is no explicit breadth or depth requirement. Students may use electives to gain additional depth of knowledge in the student’s research area, e.g., to complement their directed research or to prepare them for choosing a thesis topic. Students may also use electives to gain additional breadth of knowledge in an area outside of the student’s research area.
We strongly advise students to choose electives in consultation with their advisors. The student and his or her advisor are both responsible for making sure that through these 24 elective units the student gains new knowledge, perhaps to fill gaps or to prepare for thesis research.
Students are free to take more than the required number of elective units. Following is a sample of past electives taken:
-
05-830 Advanced User Interface Software
-
05-899D Human Aspects of Software Development
-
15-816 Modal Logic
-
15-817 Introduction to Model Checking
-
15-819O Program Analysis
-
15-892 Foundations of Electronic Marketplaces
-
17-711 Socio-Technical Ecosystems
-
17-732 Emerging Programming Paradigms
-
17-762 Law of Computer Technology
-
17-807 Research Writing For Software Engineers
-
99-452 Language and Culture for Teaching