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
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:
- 08-622 Introduction to Network Science
- 10-701 Machine Learning (Ph.D.-level)
- 15-812 Programming Language Semantics
- 15-814 Type Systems for Programming Languages
- 15-819O 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
- 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-731 Information Security and Privacy
- 08-733 Privacy, Policy, Law and Technology
- 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:
- 17-703 Empirical Methods for Socio-Technical Research
- 05-899D Human Aspects of Software Development
- 08-734 Usable Privacy and Security
- 05-821 Applied Research Methods Qualitative WITH 05-822 Applied Research Methods Quantitative (6-units each, therefore 2 must be taken)
- 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:
- Your name
- Name and number of the course
- Course description or URL to course description
- Which star requirement you want this course to satisfy
- An indication of approval by your advisor.
- Evidence, including quotes from the course description and syllabus with supporting links, to demonstrate that the course:
- Matches the topic and fulfills the particular requirements of the star course category you have requested. Star courses should have some degree of breadth but are not expected to provide comprehensive coverage of a star category.
- Assumes an undergraduate background in the relevant area - no more and no less
- Uses multiple forms of evaluation (e.g. assignments, exams, projects, papers, …)
- Is appropriate for Ph.D. study in terms of depth and engagement with research. For example, if a course is primarily designed for master's students, a justification should be given that the course is also an appropriate preparation for Ph.D. study. Sometimes a course that is missing engagement with research may be adapted for Ph.D. students through additional or replacement assignments that lead PhD students deeper into relevant research topics
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 Great Readings in Software Engineering
- 17-807 Research Writing For Software Engineers
- 17-993 Word/Wright: The Right Rite of Writing
- 99-452 Language and Culture for Teaching
Credit for Prior Courses Taken at Carnegie Mellon
Students who have taken Ph.D.-level courses at Carnegie Mellon prior to entering the Software Engineering Ph.D. Program may request credit for up to two courses.
If a master’s-level course was previously taken, and a Ph.D.-level version of the course is routinely offered, credit may be given under this policy if the student completes a supplementary project that exposes the student to software engineering research in the area of the course. The project must be supervised by a Carnegie Mellon faculty member with expertise in the course area, and should be roughly equivalent to a final project in a typical Ph.D.-level course.
An integral part of ISR’s software engineering research program is ongoing interaction with industrial-strength software development in a real (not just realistic) setting. Students are expected to have prior industrial experience, or are expected to acquire such experience, typically through internships, while in the program.
The purpose of the practicum, therefore, is to ground academic study in practice by reflecting on direct experience in software development and analyzing the experience in a scientific style. Each student will complete one practicum, which is expected to take effort comparable to a 12-unit course. A practicum may take one of the following forms:
- An issue-focused reflection and analysis of a software engineering practical experience of the author
- An empirical study of (some aspect of) the software development process
A practicum of the first type should be potentially publishable as an experience report, but it is not merely a report of the author’s experience. Rather, it is a critical reflection on that experience, focused on a well-defined issue or related set of issues. The practicum should be grounded in experience and careful observation, and possibly data as well. At the same time, it should draw out substantive lessons that might be applied to other similar situations. As an informed reflection, it should be framed in the fundamental concepts of the software engineering literature, which might explain or contradict the student’s practical experience. It is not always necessary to have sufficient data for statistical validity, but in all cases the narrative should be clear about the strength of the evidence.
The second category of practicum is in the form of a scientific paper, potentially publishable at a peer-reviewed conference or workshop in the area of empirical software engineering.
Practicum Presentation, Writing, and Evaluation
The student must present the practicum orally to the Carnegie Mellon Software Engineering community, for example in the Software Research Seminar (SSSG).
In addition, the student must produce a self-contained report, written for an audience of entering software engineering PhD students or advanced undergraduates. The target length for the report is about 10-15 pages in a normal technical report format. The report should be written in a scientific style: it should have clear definitions, careful distinctions between observations and interpretation, and appropriate comparisons to the scientific literature.
The practicum report must be approved by two faculty members. Any faculty in the Institute for Software Research are eligible; other faculty may be approved by the SE Ph.D. Program Director.
As with any report on practical experience, practicum papers may be sensitive. Practicum reports must be available to members of the Carnegie Mellon Software Engineering Community without restriction; however, they need not be public beyond the scope of that community. It is the student’s responsibility to ensure compliance with any NDAs the student may have signed. As with other papers, it is acceptable to shield the identity of individuals and organizations, as well as details of data about the experience (for example, by removing units from graphs).
Prior practicum reports are available on the password-protected internal SE Ph.D. Program web page, along with informal pragmatic advice on writing the practicum document.
The ability to teach is an important skill for all scientists, not only for those who plan to teach after completing their degrees. Teaching skills include the ability to communicate technical material ranging from elementary to advanced, and to communicate technical material to audiences ranging from general to specialized. Thus, we expect students to develop and exercise teaching skills as part of their graduate education.
Students have ample opportunities to present advanced material while working on research projects, by participating in research seminars and by giving practice conference talks. To gain experience in presenting material at an introductory or intermediate level, we require that all graduate students help teach two courses. The norm is for students to teach one course focused on introductory material in computer science or software engineering, and one course focused on mastery of material (typically an advanced undergraduate or master’s course). Teaching assistants typically spend 15-20 hours per week.
Students can identify teaching opportunities by talking with the TA coordinator (currently David Garlan) or by speaking with the instructor of a course they are interested in assisting with. In either case the TA coordinator must approve the course in advance for credit towards the teaching requirement. In order to receive credit for the teaching requirement, the student must also obtain a filled out teaching assistant evaluation form from the course instructor, and provide the SE Ph.D. Program Administrator with a copy of the evaluation. Students are encouraged to teach more than twice. At the semiannual student review meeting the faculty give special recognition to those who do an outstanding job as a TA and to those who teach beyond the required load. The School of Computer Science and the CMU Eberly Center offer teaching workshops which we encourage students to take advantage of.
Written and Oral Communication Skills
To be a well-rounded software engineer, each student should have not just basic knowledge, but also the abilities
- To communicate technical ideas clearly in writing
- To communicate technical ideas clearly orally
We also expect students to be able to program, but there is no formal checkpoint to certify programming skills. It is left up to the advisor and student to make sure the student has the necessary skills.
To satisfy the writing proficiency requirement, each student must write a scholarly document, as either its sole author or its primary author (if coauthored), that is at least the quality of a Carnegie Mellon technical report. This document must be a scholarly paper with references to the literature that could be submitted for peer review. It may be a technical report, a paper published at or in preparation for a conference or journal, a document written to satisfy a course requirement (e.g. a course project report), or a comprehensive survey paper (e.g. suitable for submission to ACM Computing Surveys).
Annotated bibliographies, user manuals, and reference manuals do not qualify because they do not require the same kind of explication, organization, and summarization skills needed to write a conferenceor journal-like publication. The paper may not be a practicum document, the thesis proposal, or the thesis. The writing requirement is evaluated by at least two SCS tenure/research faculty members and one SCS Ph.D. graduate student. One of the reviewers must be a faculty member of ISR, and none of them should be a co-author of the paper being reviewed. These evaluators must read the document and provide written feedback using the Writing Evaluation Form. If the initial draft is not satisfactory, the student must revise the document until the evaluators are willing to give their final approval by signing the form. The student then gives these three (or more) signed forms to the SE Ph.D. Program Administrator, who keeps copies in the student’s file and indicates in the student’s records that the requirement has been satisfied.
Students are responsible for asking the appropriate faculty members and Ph.D. student to help them with satisfying their writing requirement.
We expect students to be able to satisfy this requirement within their first three years, and prior to their thesis proposal.
Ph.D. students are welcome to enroll in the undergraduate communications course, required of undergraduate computer science majors, to enhance their writing skills; however, taking it is not sufficient in itself to satisfy the written communication skills requirement.
All SE Ph.D. students are expected to practice their speaking skills by presenting 2 times per year in the weekly ISR Software Research Seminar. At the student evaluation meeting held each semester, the faculty make a judgment to pass students who have demonstrated high speaking proficiency through the presentation(s) they have given. We expect a standard of proficiency typical of good presentations at an academic conference, or of a respected instructor giving course lectures.
Students who have passed the proficiency requirement still benefit from honing their speaking skills, and thus remain subject to the presentation expectations described above. All students are expected to regularly attend and participate actively in the Software Research Seminar (rare exceptions, e.g. for course conflicts, must be approved by the advisor and SE Ph.D. Program Director).