Northeastern University

Software Testing for Engineers Part 2

Northeastern University

Software Testing for Engineers Part 2

Omar Badreldin

Instructor: Omar Badreldin

Gain insight into a topic and learn the fundamentals.
2 weeks to complete
at 10 hours a week
Flexible schedule
Learn at your own pace
Gain insight into a topic and learn the fundamentals.
2 weeks to complete
at 10 hours a week
Flexible schedule
Learn at your own pace

See how employees at top companies are mastering in-demand skills

 logos of Petrobras, TATA, Danone, Capgemini, P&G and L'Oreal

There are 7 modules in this course

In this module, you will learn about the Category-Partition Method, a systematic approach to automatically generating comprehensive test cases and test data for functional testing. You'll learn to tackle one of testing's fundamental challenges: selecting an appropriate subset from the practically infinite input space that most programs accept, including both valid and invalid inputs. Through a structured six-step process, you'll learn to identify independently testable features (typically individual methods or functions), decompose parameters into meaningful categories that capture different aspects worth testing, partition those categories into interesting choices, including boundary values and edge cases, and identify constraints that eliminate impossible or meaningless combinations. You'll discover how to produce language-independent test case specifications (test frames) that can later be instantiated into concrete test cases for multiple programming languages and platforms—enabling you to begin testing activities even before development starts. By the end of this module, you will learn an important method to automatically generate both test data and test cases.

What's included

1 video17 readings1 assignment

In this module, you will learn about Syntax-Based Testing, a powerful approach to systematically generating comprehensive test cases by formally defining input specifications using grammars. You'll learn to tackle one of testing's most sophisticated challenges: creating both valid and strategically invalid test inputs from complex, structured data spaces that traditional testing methods struggle to cover systematically. Through Backus-Naur Form (BNF) grammars and mutation operators, you'll learn to formalize any program input as a set of production rules, generate ground strings that represent valid test cases directly from these grammatical specifications, apply mutation operators to create both valid variants and intentionally invalid test cases. You'll discover how to extend these techniques beyond simple inputs to structured documents like XML and HTML, database queries, and API specifications. By the end of this module, you will master what is widely considered as the "gold standard" of testing effectiveness: mutation testing, which provides unparalleled rigor in evaluating both your test suite quality and your software's robustness against edge cases and malformed inputs.

What's included

1 video14 readings1 assignment

In this module, you will learn about Integration Testing, a critical phase that bridges the gap between unit testing and full system validation by systematically verifying that individually tested components work together as intended. You'll learn to tackle one of software engineering's most complex challenges: integrating modules that may be developed by different teams, on different timelines, and with varying levels of documentation—circumstances that make testing particularly difficult for large, distributed software systems. Through test scaffolding techniques including stubs and drivers, you'll learn to facilitate testing even when dependent components are unavailable, apply strategic integration approaches including Big Bang, Top-Down, Bottom-Up, and Sandwich strategies to methodically combine software modules based on your system's architecture and development constraints, implement regression testing to ensure new changes don't break existing functionality, and leverage mock objects to isolate components and control test conditions with precision. You'll discover how to adapt these integration strategies to diverse architectural patterns including two-tier client-server systems, three-tier architectures, and complex multi-layered applications—enabling you to design integration test plans that catch interface discrepancies, data exchange faults, and system-level defects before they reach production. By the end of this module, you will understand how to balance the trade-offs between different integration approaches, recognize when to prioritize critical components through risk-driven testing, and apply modern mocking frameworks like Mockito to create maintainable, automated integration tests that support continuous development and deployment practices.

What's included

1 video15 readings1 assignment

In this module, you will learn about State Space Exploration, a rigorous testing methodology that systematically examines all possible states and transitions a system can take during execution to verify correctness and uncover critical structural flaws. You'll learn to tackle one of the most challenging aspects of testing concurrent and reactive systems: understanding and validating behavior across potentially infinite combinations of states, process interactions, and timing scenarios that traditional testing approaches cannot comprehensively address. Through reachability graphs and exploration algorithms, you'll learn to model systems as state machines where each node represents a unique configuration of processes, variables, and message queues. You'll also learn to identify and analyze reachable versus theoretically possible states to understand the true behavior space of your system. We'll discuss how to detect fundamental structural problems including deadlocks (where all processes halt waiting for each other), unspecified receptions (where processes receive unexpected messages), and queue overflows (where communication buffers exceed capacity). Lastly, you'll learn how to apply depth-first and breadth-first exploration strategies to navigate complex state spaces efficiently. You'll discover how these techniques extend to real-world scenarios including mutual exclusion protocols, concurrent process synchronization, and safety-critical systems where proving that certain dangerous states are unreachable is essential. This will enable you to provide mathematical guarantees about system behavior that testing alone cannot achieve. By the end of this module, you will understand the state explosion problem (where adding variables or processes causes exponential growth in possible states), and recognize when state space exploration is feasible versus when approximation techniques are necessary.

What's included

17 readings1 assignment1 app item

As software systems grow more complex and internet-facing, two dimensions of quality that can no longer be treated as afterthoughts are performance and security. In this module, you will explore testing practices that address both. On the performance side, you will examine how engineers define and measure runtime metrics—throughput, response time, memory utilization—and how structured testing phases (planning, execution, and analysis) help identify whether a system meets its performance requirements under realistic and peak-load conditions. You will also work with Apache JMeter, an industry-standard open-source tool for simulating concurrent user loads on web applications. Shifting to security, the module introduces the foundational principles of security testing—confidentiality, integrity, authentication, authorization, availability, non-repudiation, and resilience—and surveys the major categories of security testing tools, from static and dynamic analysis (SAST/DAST) to runtime protection (RASP). Together, these topics equip you to evaluate software not just for functional correctness, but for the systemic qualities that determine whether it can be trusted in production environments.

What's included

10 readings1 assignment

In this module, you will learn about Usability Testing, a critical discipline that evaluates how effectively users can interact with software interfaces to accomplish their goals while identifying design deficiencies that could frustrate users or impede task completion. You'll learn to address one of software engineering's most human-centered challenges: ensuring that technically sound systems are also intuitive, learnable, and satisfying to use—recognizing that even perfectly functional software fails if users cannot navigate it successfully. Through three distinct evaluation approaches, you'll learn to conduct passive testing methods that unobtrusively gather real-world usage data through system logs, user-reported problems, and surveys to understand how systems perform under actual conditions. You'll learn how to apply active testing techniques, including videotaped observation sessions and controlled experiments where you directly engage with representative users to uncover interaction problems and measure usability metrics. You'll leverage predictive evaluation methods like heuristic evaluation and cognitive walkthroughs that allow expert reviewers to identify potential problems early in the design process before expensive user testing begins. You'll discover how to apply Nielsen's ten usability heuristics to systematically identify interface violations. You'll learn how to design and conduct traditional scientific experiments with proper control of independent and dependent variables, walk through interfaces from users' cognitive perspectives to evaluate learnability, and use structured evaluation protocols to generate actionable recommendations for interface improvements. By the end of this module, you will understand how to select appropriate evaluation methods based on development stage and available resources. You'll also learn how to balance the trade-offs between time-intensive but insight-rich active methods versus efficient predictive techniques. Lastly, you'll learn to recognize that usability testing is not a one-time activity but a continuous process that spans from early prototypes through post-release refinement—ultimately ensuring that your software serves users effectively rather than creating barriers to their success.

What's included

27 readings1 assignment1 app item

Throughout this course, you have built a strong foundation in testing methods, coverage criteria, and quality assurance strategies. In this final module, you will bring it all together by exploring what it means to truly put testing first. You will examine how traditional and agile approaches define correctness differently, and why that distinction matters for the way teams plan and execute testing across a project lifecycle. From test-driven development and continuous integration to the challenges of testing legacy and untestable systems, this module challenges you to think critically about not just how to test, but when, why, and at what cost. You will also apply your knowledge to real-world case studies—including the Boeing 737 MAX failures—to evaluate how gaps in testing strategy can have serious, even catastrophic, consequences. By the end of this module, you will be equipped to advocate for a culture of quality in your own engineering practice.

What's included

14 readings1 assignment

Instructor

Omar Badreldin
Northeastern University
0 Courses0 learners

Offered by

Why people choose Coursera for their career

Felipe M.

Learner since 2018
"To be able to take courses at my own pace and rhythm has been an amazing experience. I can learn whenever it fits my schedule and mood."

Jennifer J.

Learner since 2020
"I directly applied the concepts and skills I learned from my courses to an exciting new project at work."

Larry W.

Learner since 2021
"When I need courses on topics that my university doesn't offer, Coursera is one of the best places to go."

Chaitanya A.

"Learning isn't just about being better at your job: it's so much more than that. Coursera allows me to learn without limits."
Coursera Plus

Open new doors with Coursera Plus

Unlimited access to 10,000+ world-class courses, hands-on projects, and job-ready certificate programs - all included in your subscription

Advance your career with an online degree

Earn a degree from world-class universities - 100% online

Join over 3,400 global companies that choose Coursera for Business

Upskill your employees to excel in the digital economy

Frequently asked questions