Northeastern University

Software Testing for Engineers Part 2

Northeastern University

Software Testing for Engineers Part 2

Omar Badreldin

位教师:Omar Badreldin

包含在 Coursera Plus

深入了解一个主题并学习基础知识。
2 周 完成
在 10 小时 一周
灵活的计划
自行安排学习进度
深入了解一个主题并学习基础知识。
2 周 完成
在 10 小时 一周
灵活的计划
自行安排学习进度

了解顶级公司的员工如何掌握热门技能

Petrobras, TATA, Danone, Capgemini, P&G 和 L'Oreal 的徽标

该课程共有7个模块

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.

涵盖的内容

1个视频17篇阅读材料1个作业

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.

涵盖的内容

1个视频14篇阅读材料1个作业

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.

涵盖的内容

1个视频15篇阅读材料1个作业

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.

涵盖的内容

17篇阅读材料1个作业1个应用程序项目

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.

涵盖的内容

10篇阅读材料1个作业

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.

涵盖的内容

27篇阅读材料1个作业1个应用程序项目

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.

涵盖的内容

14篇阅读材料1个作业

位教师

Omar Badreldin
Northeastern University
2 门课程33 名学生

提供方

人们为什么选择 Coursera 来帮助自己实现职业发展

Felipe M.

自 2018开始学习的学生
''能够按照自己的速度和节奏学习课程是一次很棒的经历。只要符合自己的时间表和心情,我就可以学习。'

Jennifer J.

自 2020开始学习的学生
''我直接将从课程中学到的概念和技能应用到一个令人兴奋的新工作项目中。'

Larry W.

自 2021开始学习的学生
''如果我的大学不提供我需要的主题课程,Coursera 便是最好的去处之一。'

Chaitanya A.

''学习不仅仅是在工作中做的更好:它远不止于此。Coursera 让我无限制地学习。'
Coursera Plus

通过 Coursera Plus 开启新生涯

无限制访问 10,000+ 世界一流的课程、实践项目和就业就绪证书课程 - 所有这些都包含在您的订阅中

通过在线学位推动您的职业生涯

获取世界一流大学的学位 - 100% 在线

加入超过 3400 家选择 Coursera for Business 的全球公司

提升员工的技能,使其在数字经济中脱颖而出

常见问题