15-313 Foundations of Software Engineering


Course Level: Undergraduate

Frequency Offered: Generally offered every fall semester - confirm course offerings for upcoming semesters by accessing the university Schedule of Classes.

Course Relevance (who should take this course?): Any students that expect to write code in large scale and collaborative software projects. Students who are interested in taking on more responsibilities in a software team, including interests toward software project management. Students interested in the larger picture and tradeoffs involved in software engineering in practice.

Key Topics:Background Knowledge:Learning Resources:
  • Practical skills for software engineers in real-world projects and teams.
  • Making real-world tradeoff decisions regarding:
    • risk
    • quality
    • cost
  • Includes process consideration for software development:
    • requirements documentation
    • elicitation and evaluation
  • designing for qualities such as
    • security
    • robustness
    • scalability
  • quality assurance
  • time and team management
  • economics of software development

Solid technical foundation of software construction from 15-214 or equivalent (solid programming skills, unit testing, and object-oriented analysis and design, design patterns, and frameworks).

  • Various readings provided (see course web page)
  • Canvas
  • Piazza
  • Class slides
Course Goals/Objectives:Assessment Structure: 

Students will learn to:

  • Understand software engineering as a human activity and business concern.
  • Elicit, describe, and evaluate a system's requirements.
  • Apply measurements and metrics to make deliberate judgements about process, quality assurance, and other decisions in the development process.
  • Design a software system and evaluate a design with regard to various quality attributes, including security, scalability, robustness, and usability.
  • Develop and justify a quality-assurance strategy for a software project, including making decisions about when and how to use testing, inspection, static and dynamic analysis, and formal methods.
  • Plan the process and manage a software project, including deciding how much upfront design to perform, agile practices, monitoring risk, understanding team dynamics, open source software.
  • Assignments: 50%
  • Midterm: 15%
  • Final: 20%
  • Participation: 10%
  • Quizzes: 5%
  • Prerequisites Required: 15214 or equivalent experience
  • Minimum Grades in Prereqs:
    D in 15214
  • Corequisites: None
  • Prerequisite for: 15-210
  • Anti-requisites: None
  • Cross-Listed: None
  • Substitutes: 15211 for 15214
  • Related Courses: Builds on 15-214 (Principles of Software Construction), provides a good foundation for 15-413 (Software Engineering Practicum) and 17-413 (Software Engineering Reflection)
  • Reservations: Some reservations are for Undergraduates in Electrical and Computer Engineering; Some reservations are for Undergraduates in Computer Science
Most Recent Syllabus: 
Special Permission Required: No
(if yes, please see Notes)
Units: 12
Course Website:
Department Website:
College Website:
Sample class notes:
Slides: https://www.cs.cmu.edu/~ckaestne/15313/2016
Sample Assignment:
Sample Lecture Recording:
Typically no recorded lectures
 Back to Course Profile List