| Section | 1 |
|---|---|
| Instructor(s) | Almhana, Rafi (ralmhana) |
| Location | Crerar 011 |
| Meeting Times | Friday 2:30pm - 5:20pm |
| Fulfills | Specialization - Software Engineering (SE-2) Elective |
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.
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.
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.
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)
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)
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.
Must have completed MPCS 51036, 51040, 51042, 51046, 51100, CAPP 30122, MACS 30122, or have a Core Waiver for Programming.
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/
This class is scheduled at a time that conflicts with these other classes: