MPCS 56540 Software Quality Assurance (Spring 2026)

Section 1
Instructor(s) Almhana, Rafi (ralmhana)
Location Crerar 011
Meeting Times Friday 2:30pm - 5:20pm
Fulfills Specialization - Software Engineering (SE-2) Elective

Syllabus

Course Overview [WATCH VIDEO]

Course Description

Software quality doesn’t happen by accident—it’s engineered through disciplined processes, measurable standards, and intentional testing. This course prepares students to design, execute, and automate quality practices used by modern software teams.

Students learn how quality is defined and measured, how development models (e.g., Agile and Waterfall) influence QA strategy, and how to build an effective Software Quality Assurance (SQA) approach across the software development lifecycle. The course emphasizes hands-on skills: writing test plans and test cases, implementing unit tests, applying mocks/stubs/spies, managing defects and prioritization, and building automated UI tests for web applications using tools such as Selenium or Playwright. Students also learn how to evaluate risk, apply quality metrics, and incorporate performance testing concepts to ensure systems remain reliable under load. A course project ties everything together into a portfolio-ready set of QA deliverables.

Who Should Take This Course

Ideal for students who want practical, career-relevant skills in testing, automation, and quality processes used in real engineering teams—especially those interested in software engineering roles.

Learning Outcomes

By the end of this course, students will be able to:

Quality Foundations

  • Define software quality and explain how it is assessed using standards and metrics.

  • List and explain key stages of the software development lifecycle and their impact on quality.

  • Compare software development models (e.g., Waterfall vs. Agile) and their implications for QA planning.

Test Design, Planning, and Strategy

  • Identify major testing approaches (unit, integration, system, acceptance, regression, exploratory).

  • Create a test plan for a software module that includes scope, risks, test types, and coverage goals.

  • Write clear, effective test cases using black-box and white-box techniques.

  • Build a testing strategy that balances risk, cost, time, and quality goals.

Implementation and Automation

  • Explain the purpose of unit testing and how it supports quality and maintainability.

  • Write unit tests for simple functions/modules in a chosen language/framework.

  • Use stubs, mocks, and spies to isolate behavior and test edge cases.

  • Create automated UI test scripts for core workflows using Selenium or Playwright.

  • Automate a basic test workflow using a CI-oriented approach (as appropriate to the course environment).

Quality Operations and Continuous Improvement

  • Develop a defect management and triage approach that prioritizes issues by severity, priority, and impact.

  • Use quality metrics (e.g., defect trends, coverage indicators, reliability signals) to evaluate progress.

  • Explain performance testing fundamentals and identify scenarios where performance testing is required.

  • Critique a project’s adherence to quality standards and recommend practical improvements.

Course Topics (High-Level)

  • Software engineering foundations and the “quality mindset”

  • Quality standards, quality attributes, and SQA roles/responsibilities

  • SQA planning and quality gates

  • Quality metrics, measurement, and continuous improvement

  • Testing fundamentals: test plans, test cases, and coverage thinking

  • White-box and black-box testing techniques

  • Testing across phases: unit → integration → system → acceptance → regression

  • Risk analysis and risk-based testing strategy

  • Formal technical reviews (peer reviews, inspections)

  • Unit testing practices: stubs, mocks, and spies

  • Test automation concepts and tools

  • UI testing automation using Selenium or Playwright

  • Defect management, triage, severity vs. priority, and reporting

  • Performance testing fundamentals (load concepts, bottlenecks, performance risks, and test scenario design)

Tools & Technologies

Students may use a subset of the following depending on project scope and platform:

  • Planning & defect tracking: Jira, Trello (or equivalents)

  • Testing & automation frameworks: Selenium, Playwright, Mocha/Jest, JUnit, PyTest (as applicable)

  • CI/workflow tooling: Jenkins or GitHub Actions (as appropriate)

  • Documentation & diagrams: draw.io (and structured QA templates)

What You’ll Build 

By the end of the term, students will produce a QA artifact set that mirrors real industry deliverables—test plan, prioritized test suite (unit + UI), defect reports with triage rationale, and a lightweight metrics-based quality assessment.

Course Prerequisites

Must have completed MPCS 51036, 51040, 51042, 51046, 51100, CAPP 30122, MACS 30122, or have a Core Waiver for Programming.

Other Prerequisites

Students should know at least one common programming language, such as JavaScript, Python, Java, or C++. Familiarity with software development tools such as version control is expected.

This course requires competency in Unix and Linux. If you attended the MPCS Unix Bootcamp you covered the required material. If you did not, please review the UChicago CS Student Resource Guide here: https://uchicago-cs.github.io/student-resource-guide/.

Course request information for non-MPCS students: https://masters.cs.uchicago.edu/student-resources/non-mpcs-student-course-requests/

Overlapping Classes

This class is scheduled at a time that conflicts with these other classes:

  • MPCS 52040-1 -- Distributed Systems

Eligible Programs

MS in Computational Analysis in Public Policy (Year 2) MA in Computational Social Science (Year 2) Bx/MS in Computer Science (Option 2: Professionally-oriented - CS Majors) Bx/MS in Computer Science (Option 3: Profesionally-oriented - Non-CS Majors) Masters Program in Computer Science