Diploma in Software Testing

Get advanced knowledge and specialized skills in software testing using this online software testing course.

This free Software Testing course covers the most important topics of software testing, from functional testing to black and white box testing. In this so-called Age of Apps, software testing is becoming an indispensable part of software development. This means there are great career opportunities for software testers. With this course, you will be able to enhance your résumé and become a professional software tester.

In This Free Course, You Will Learn How To

  • Identify ways of reducing bugs in your software program
  • Distinguish between the verification and validation process in software testing
  • Describe the pesticide effect in testing software
  • Outline what unit testing is and when it is performed
  • Identify the main approaches to designing a test case
  • Discuss the use of equivalence class testing
  • Define special value testing and pair-wise testing
  • Discuss White-box testing and its types of strategies
  • Outline the different types of condition coverage testing
  • Explain path coverage testing and creation of control-flow graphs
  • Discuss what Dataflow testing involves

Course Modules

MODULE 01

Introduction to Levels of Testing

In this module you will be introduced to software testing. You will learn about when testing begins in the software development life cycle. You will learn about the verification and validation processes of testing, about the different testing levels, and what the different levels test.

Learning Outcomes – Introduction to Levels of Testing

Introduction to Software Testing

Levels of Testing

Lesson Summary – Introduction to Levels of Testing

MODULE 02

Basic Concepts in Testing and Unit Testing

In this module you will learn about the pesticide effect for software testing. You will learn about the software development life cycle V model, its strengths and weaknesses. You will learn about the evolution of test automation, comparing the testing tools available. You will learn about the fault model and how it outlines the types of faults in the program. You will learn about test cases, and design and planning and strategies for test cases. Finally, you will learn about unit testing.

Learning Outcomes – Basic Concepts in Testing and Unit Testing

Basic Concepts in Testing – Part I

Basic Concepts in Testing – Part 2

Unit Testing

Lesson Summary – Basic Concepts in Testing and Unit Testing

MODULE 03

Equivalence and Special Value Testing

In this module you will be introduced to Equivalence class testing, you will learn how equivalence class testing works and is based on the input data. You will learn about equivalence classes been created for both invalid and valid data. You will learn about special value testing and about its two types General and Special risk. You will learn about boundary value analysis and how it works.

Learning Outcomes – Equivalence and Special Value Testing

Equivalence and BV Testing

Special Value Testing

Lesson Summary – Equivalence and Special Value Testing

MODULE 04

Combinatorial and White-Box Testing

In this module you will be introduced to Combinatorial testing. You will learn about different types of combinatorial testing strategies. You will learn about Decision table-based testing. You will learn about cause-effect graphing and how it can help you with decision tables. You will learn about pair-wise or all-pairs testing and how it works. You will learn about white-box testing and about several strategies for it. Finally, you will learn about white-box testing strategies.

Learning Outcomes – Combinatorial and White-Box Testing

Combinatorial Testing

Pairwise Testing

White-Box Testing

Lesson Summary – Combinatorial and White-Box Testing

MODULE 05

Diploma in Software Testing – First Assessment

You must score 80% or more to pass this assessment.

Diploma in Software Testing – First Assessment

MODULE 06

MC/DC Testing

In this module you will be introduced to coverage based testing. You will learn about the basic condition coverage testing. You will learn about other types of coverage based techniques. You will learn about which is the strongest and weakest coverage based techniques. You will learn about the Modified condition and decision coverage testing (MC/DC testing).

Learning Outcomes – MC/DC Testing

MC/DC Testing – Part 1

MC/DC Testing – Part 2

Lesson Summary – MC/DC Testing

MODULE 07

Path, Dataflow and Mutation Testing

In this module you will be introduced to path testing another coverage testing technique. You will learn about creating control flow graphs. You will learn about using Dataflow testing to test your variables in a program. You will learn about introducing faults into your program for mutation testing. You will learn about how mutation testing works, its drawbacks and terminology. You will be introduced to integration testing, what it is and different approaches to integration testing.

Learning Outcomes – Path, Dataflow and Mutation Testing

Path Testing

Dataflow and Mutation Testing

Mutation Testing

Lesson Summary – Path, Dataflow and Mutation Testing

MODULE  08

Introduction to Testing Levels

In this module you will be introduced to the testing levels above unit testing. You will learn about integration testing. You will learn about the different approaches for integration testing and how they work. You will learn about system testing and what its objective is. You will learn about different types of system performance testing. You will learn about what many of the performance tests, test the system on. You will learn about regression testing when it’s performed and why.

Learning Outcomes – Introduction to Testing Levels

Integration Testing

System Testing

Regression Testing

Lesson Summary – Introduction to Testing Levels

MODULE 09

Testing Object-Orientated Programs

In this module you will be introduced to testing Object-Orientated programs. You will learn about how OO programming was supposed to make testing easier. You will learn about how some testing methods for Procedural programs will not work with OO programs. You will learn about how features of OO programming such as inheritance and Polymorphism will make you test your program differently. You will learn about the different integration testing strategies for testing your OO program.

Learning Outcomes – Testing Object-Orientated Programs

Testing Object-Oriented Programs – Part 1

Testing Object-Oriented Programs – Part 2

Lesson Summary – Testing Object-Orientated Programs

MODULE 10

Diploma in Software Testing – Second Assessment

You must score 80% or more to pass this assessment.

Diploma in Software Testing – Second Assessment

MODULE 11

Course assessment

Diploma in Software Testing – Final Assessment

Software Testing and Automation Specialization

WHAT YOU WILL LEARN

  • Distinguish between verification and validation describing the key differences between them.
  • Write automated functional tests for both front-end and back-end code
  • Measure the fault-finding effectiveness of a functional test suite using mutation testing.
  • Defend program correctness through the use of formal methods, specifically proof obligations and model checking.

SKILLS YOU WILL GAIN

  • Black-box Testing Techniques
  • White-box Testing Techniques
  • Unit Testing
  • Static Analysis
  • Testing Automation
  • Writing Test Plans
  • Writing Defect Reports
  • Understanding of Testing Theory
  • Writing Tests
  • Testing Vocabulary
  • Executing Tests
  • Software Testing

About this Specialization

This Specialization is intented for beginning to intermediate software developers seeking to develop knowledge and skill in implementing testing techniques and tools in the development of their projects. Through four courses, you will cover black-box and white-box testing, automated testing, web & mobile testing, and formal testing theory and techniques, which will prepare to you to plan and perform effective testing of your software.

Applied Learning Project

Learners will build test plans, test suites, and test analysis reports. Learners will develop properties and assertions in code to facilitate automated test generation. Learners will also create pre-conditions for methods to facilitate formal proofs of correctness.

There are 4 Courses in this Specialization

COURSE1

Introduction to Software Testing

After completing this course, you will have an understanding of the fundamental principles and processes of software testing. You will have actively created test cases and run them using an automated testing tool. You will being writing and recognizing good test cases, including input data and expected outcomes.

After completing this course, you will be able to… – Describe the difference between verification and validation. – Explain the goal of testing. – Use appropriate test terminology in communication; specifically: test fixture, logical test case, concrete test case, test script, test oracle, and fault. – Describe the motivations for white and black box testing. – Compare and contrast test-first and test-last development techniques. – Measure test adequacy using statement and branch coverage. – Reason about the causes and acceptability of and poor coverage – Assess the fault-finding effectiveness of a functional test suite using mutation testing. – Critique black-box and white-box testing, describing the benefits and use of each within the greater development effort. – Distinguish among the expected-value (true), heuristic, consistency (as used in A/B regression), and probability test oracles and select the one best-suited to the testing objective. – Craft unit and integration test cases to detect defects within code and automate these tests using JUnit. To achieve this, students will employ test doubles to support their tests, including stubs (for state verification) and mocks (for behavioral verification) (https://martinfowler.com/articles/mocksArentStubs.html). This course is primarily aimed at those learners interested in any of the following roles: Software Engineer, Software Engineer in Test, Test Automation Engineer, DevOps Engineer, Software Developer, Programmer, Computer Enthusiast. We expect that you should have an understanding of the Java programming language (or any similar object-oriented language and the ability to pick up Java syntax quickly) and some knowledge of the Software Development Lifecycle.

COURSE2

Black-box and White-box Testing

After completing this course, learners will have an understanding of a variety of black-box and white-box testing techniques. The learner will have put this understanding into practice, creating effective sets of test cases (called a test suite) to properly exercise software for defect finding. The learner will have examined requirements for testability, created an oracle for automated testing, assessed fault-finding effectiveness of test suites, and generated inputs using a variety of techniques.

After completing this course, you will be able to: – evaluate testability of requirements – define testable units within a program specification – apply black-box test input selection methods – specifically boundary-value analysis, fuzzing, and random selection – and select the method most-suited to achieve the given testing objective – assess the fault-finding effectiveness of a functional test suite using mutation testing – use category partitioning to develop automated functional tests (with Cucumber) based on a given software specification – create an expected-value oracle from a program description to use within the generated tests In order to do well in this course, you should have experience with an OOP language (like Java), have an IDE installed (e.g., Eclipse), and be familiar with testing terminology (see Intro to Software Testing course within this specialization). we also expect a familiarity with the Software Development Lifecycle and the context in which the testing stage sits. This course is primarily aimed at those learners interested in any of the following roles: Software Engineer, Software Engineer in Test, Test Automation Engineer, DevOps Engineer, Software Developer, Programmer, Computer Enthusiast.

COURSE3

Introduction to Automated Analysis

This course introduces state-of-the-art techniques for automated analysis. Automated analysis encompasses both approaches to automatically generate a very large number of tests to check whether programs meet requirements, and also means by which it is possible to *prove* that software meets requirements and that it is free from certain commonly-occurring defects, such as divide-by-zero, overflow/underflow, deadlock, race-condition freedom, buffer/array overflow, uncaught exceptions, and several other commonly-occurring bugs that can lead to program failures or security problems. The learner will become familiar with the fundamental theory and applications of such approaches, and apply a variety of automated analysis techniques on example programs.

After completing this course, a learner will be able to: – Understand the foundations of automated verification: randomization and symbolic representations – Distinguish the strengths and weaknesses of random testing, symbolic analysis, static analysis, and model checking – Use a variety of state-of-the-art static analysis and automated testing tools for automated verification – Create executable requirements as an oracle suitable for automated testing and symbolic analysis – Understand how the choice of oracle affects fault-finding for automated analysis strategies. – Use automated testing to achieve full mutation coverage – Create a test plan that utilizes both manually-written tests and automated tests towards maximizing rigor, minimizing effort and time, and minimizing test costs. This course is intended for learners interested in understanding the principles of automation and the application of tools for analysis and testing of software This knowledge would benefit several typical roles: Software Engineer, Software Engineer in Test, Test Automation Engineer, DevOps Engineer, Software Developer, Programmer, Computer Enthusiast. We expect that you have some familiarity with the Software development Life-Cycle, an understanding of the fundamentals of software testing, similar to what is covered in the Introduction to Software Testing and Black-box and White-Box Testing Courses. Familiarity with an object-oriented language such as Java or ability to pick-up Java syntax quickly to write and modify code, and willingness to use tools and IDEs are assumed.

COURSE4

Web and Mobile Testing with Selenium

Modern applications that we build invariably have touch-points with its users through web-based and mobile platforms. Users interact with the software through these interfaces and the experiences those interfaces provide have a strong influence on the perceived quality of the software.

The pace at which modern applications deploy new versions and features call for careful prioritization of testing effort and rapid execution through automation. Techniques and methods for testing of such applications will be the focus of this course. We will cover key concepts relevant to testing of web and mobile platforms, underlying techniques and the use of Selenium as a framework for automating testing of such applications. The learner will gain a solid foundation in web and mobile testing principles and the ability to use a testing framework to automate test execution.

Black-box and White-box Testing

About this Course

After completing this course, learners will have an understanding of a variety of black-box and white-box testing techniques. The learner will have put this understanding into practice, creating effective sets of test cases (called a test suite) to properly exercise software for defect finding. The learner will have examined requirements for testability, created an oracle for automated testing, assessed fault-finding effectiveness of test suites, and generated inputs using a variety of techniques.

After completing this course, you will be able to: – evaluate testability of requirements – define testable units within a program specification – apply black-box test input selection methods – specifically boundary-value analysis, fuzzing, and random selection – and select the method most-suited to achieve the given testing objective – assess the fault-finding effectiveness of a functional test suite using mutation testing – use category partitioning to develop automated functional tests (with Cucumber) based on a given software specification – create an expected-value oracle from a program description to use within the generated tests In order to do well in this course, you should have experience with an OOP language (like Java), have an IDE installed (e.g., Eclipse), and be familiar with testing terminology (see Intro to Software Testing course within this specialization). we also expect a familiarity with the Software Development Lifecycle and the context in which the testing stage sits. This course is primarily aimed at those learners interested in any of the following roles: Software Engineer, Software Engineer in Test, Test Automation Engineer, DevOps Engineer, Software Developer, Programmer, Computer Enthusiast.

WHAT YOU WILL LEARN

  • You will evaluate testability of requirements
  • You will define testable units within a program specification
  • You will select and apply black-box test input selection methods, including boundary-value analysis, fuzzing, and random selection
  • You will develop automated tests and test oracles for automated software verification.

SKILLS YOU WILL GAIN

  • Executing Tests
  • Software Testing
  • Writing Tests
  • Cucumber
  • Junit

Syllabus – What you will learn from this course

WEEK1

4 hours to complete

Module 1: Introduction

In this module, we will learn about the basics of testing adequacy, as well as the factors that influence testing effectiveness and how we quantify these metrics.

  • Introduction to Test Selection and Test Adequacy6m
  • What are Test Obligations?11m
  • Factors Influencing Test Effectiveness9m
  • Program Structure: Reachability and Observability8m
  • Mutation Testing Revisited5m
  • Program Structure and Fault Finding6m
  • Test Oracles9mOracles and Fault Finding8m

1 reading

Welcome to the course!5m

7 practice exercises

Introduction to Test Adequacy30mFactors Influencing Test Effectiveness30mProgram Structure: Reachability and Observability30mMutation Testing Revisited30mProgram Structure and Fault Finding30mTest Oracles14mOracles and Fault Finding30m

WEEK2

5 hours to complete

Module 2: Black and White-box Techniques

In this module, we will learn a variety of testing techniques that can be used in both white-box and black-box testing strategies.


5 hours to complete

Module 2: Black and White-box Techniques

In this module, we will learn a variety of testing techniques that can be used in both white-box and black-box testing strategies.

  • Partition Testing10m
  • Combinatorial Testing12m
  • Requirements Coverage7m
  • Introduction to White-Box Testing Techniques11m
  • Code Coverage Metrics: Terminology5m
  • Code Coverage Metrics: Statement Coverage4m
  • Code Coverage Metrics: Branch Coverage4m
  • Code Coverage Metrics: Decision Coverage3m
  • Code Coverage Metrics: MC/DC10m
  • MC/DC Example6m
  • Code Coverage Metrics: OMC/DC12m
  • Code Coverage Metrics: Boundary Value6m
  • Mutation Testing Strategies6m
  • Test Metrics and Test Suite Effectiveness9m

7 practice exercises

Partition Testing30mCombinatorial Testing30mRequirements Coverage30mCode Coverage Metrics: Statement Coverage30mCode Coverage Metrics: Branch Coverage30mCode Coverage Metrics: Decision Coverage30mCode Coverage Metrics: MC/DC30m

WEEK3

9 hours to complete

Module 3: Requirements-Based Testing

In this module, we focus on requirements-based testing. We review a set of requirements from a testing perspective and then move on to a more sophisticated way of writing requirements: structured requirements using the tool Cucumber.


9 hours to complete

Module 3: Requirements-Based Testing

In this module, we focus on requirements-based testing. We review a set of requirements from a testing perspective and then move on to a more sophisticated way of writing requirements: structured requirements using the tool Cucumber.

  • Writing Requirements for Testability3m
  • Bad Requirements for Testability2m
  • Writing Test Cases for Requirements3m
  • “Fixed” Requirements for Testability1m
  • Introduction to User Stories and Behavior-Driven Development8m
  • Cucumber and Gherkin: An Overview5m
  • Cucumber Demo5m
  • Cucumber and Gherkin: How Does It Work?9m
  • Regular Expressions 10112m
  • Regular Expressions and Testing with Cucumber3m

7 practice exercises

Writing Requirements for Testability30mBad Requirements for Testability30mWriting Test Cases for Requirements30mFixing Requirements for Testability30mAre These Requirements Testable?30mIntroduction to User Stories and Behavior-Driven Development30mRegular Expressions 10130m

WEEK4

7 hours to complete

Performing Black and White Box Testing with Cucumber

In this module, we go further in using the Cucumber toolset in order to implement a variety of testing strategies against two example projects.

  • Mapping User Stories: the Microwave Example7m
  • Installing Cucumber and Configuring Eclipse Project10m
  • Creating Gherkin Scenarios and Step Definitions11m
  • Using Lists10mUsing Data Tables19m
  • Working with Scenario Outlines and Examples6m
  • Cucumber and Code Coverage12m

Introduction to Automated Analysis

About this Course

This course introduces state-of-the-art techniques for automated analysis. Automated analysis encompasses both approaches to automatically generate a very large number of tests to check whether programs meet requirements, and also means by which it is possible to *prove* that software meets requirements and that it is free from certain commonly-occurring defects, such as divide-by-zero, overflow/underflow, deadlock, race-condition freedom, buffer/array overflow, uncaught exceptions, and several other commonly-occurring bugs that can lead to program failures or security problems. The learner will become familiar with the fundamental theory and applications of such approaches, and apply a variety of automated analysis techniques on example programs.

After completing this course, a learner will be able to: – Understand the foundations of automated verification: randomization and symbolic representations – Distinguish the strengths and weaknesses of random testing, symbolic analysis, static analysis, and model checking – Use a variety of state-of-the-art static analysis and automated testing tools for automated verification – Create executable requirements as an oracle suitable for automated testing and symbolic analysis – Understand how the choice of oracle affects fault-finding for automated analysis strategies. – Use automated testing to achieve full mutation coverage – Create a test plan that utilizes both manually-written tests and automated tests towards maximizing rigor, minimizing effort and time, and minimizing test costs. This course is intended for learners interested in understanding the principles of automation and the application of tools for analysis and testing of software This knowledge would benefit several typical roles: Software Engineer, Software Engineer in Test, Test Automation Engineer, DevOps Engineer, Software Developer, Programmer, Computer Enthusiast. We expect that you have some familiarity with the Software development Life-Cycle, an understanding of the fundamentals of software testing, similar to what is covered in the Introduction to Software Testing and Black-box and White-Box Testing Courses. Familiarity with an object-oriented language such as Java or ability to pick-up Java syntax quickly to write and modify code, and willingness to use tools and IDEs are assumed.

SKILLS YOU WILL GAIN

  • Software Testing
  • Formal Verification
  • Test Automation

Syllabus – What you will learn from this course

WEEK1

6 hours to complete

Introduction to Automated Analysis

In this module we will learn about a range of techniques for analysis of programs and methods to automate testing. Along the way we will learn how to specify properties of interest to check about a program and capture assumptions about the environment for effective testing. To reinforce some of the important concepts learned we will practice automated testing using effective tools on a concrete example.

8 videos

  • Introduction to Automated Analysis13m
  • Automated Analysis Techniques9m
  • Symbolic Representations12m
  • Property Specification8m
  • Environmental Specification and Assumptions6m
  • Parameterized Unit Testing using junit-quickcheck12m
  • Environmental Specifications in junit-quickcheck2m
  • (Optional) Installation of Eclipse and Gradle2m

1 reading

Overview and Syllabus10m

5 practice exercises

  • Introduction to Automated Analysis30m
  • Automated Analysis Techniques30m
  • Symbolic Representations30m
  • Property Specification30m
  • Environmental Specifications and Assumptions

WEEK2

6 hours to complete

Automated Test Generation

The focus of this module is to understand how various techniques can help us automate the generation of useful and numerous tests. We will examine ways to specify and use properties of the system and the environment to guide the generation of test data.

  • Overview of Automated Test Generation6m
  • Automated Test Generation using Random Testing14m
  • Automated Test Generation using Symbolic Execution15m
  • Automated Test Generation using Metaheuristic Search16m
  • Property-Based Testing for Real-Time Systems6m
  • Biasing Input Values in junit-quickcheck6m
  • Using Generators to Create Complex Inputs in junit-quickcheck9m
  • Explanation of Test Harness and Assignment for Microwave Example8m

4 practice exercises

  • Overview of Automated Test Generation7m
  • Automated Test Generation using Random Testing30m
  • Automated Test Generation Using Metaheuristic Search12m
  • Property-Based Testing for Real-Time Systems30m

WEEK3

Static Analysis

5 hours to complete

The goal of this module is to introduce the learner to the principles of statically analyzing programs, understand how analysis techniques work by looking at some example analyses, and some good practices to follow when designing programs to enable the tools to help us detect and avoid defects. The learner will gain an understanding of using static analysis tools by looking at one concrete tool.

5 videos

  • What is Static Analysis14m
  • Dataflow Analysis16m
  • Program Wellformedness Properties12m
  • Designing programs for analyzability9m
  • Static Analysis with Infer11m

1 reading

Analysis Exercise with Infer2h

3 practice exercises

  • What is static analysis?30m
  • Designing programs for analyzability30m
  • Summative Review30m

WEEK4

3 hours to complete

Effective Automated Verification

This module will examine how to use effective automation techniques for a variety of purposes such as performing effective regression testing, discovering security vulnerabilities and monitoring software at run-time for critical properties.

6 videos

  • Automating Regression Testing10m
  • Automating Security Testing Using Fuzz Testing14m
  • Runtime Monitoring7m
  • Where Automation Fails9m
  • Using Multiple Methods Effectively9m
  • The Evolution of Software Testing10m

2 readings

  • Fuzz Testing with AFL10m
  • Runtime Monitoring Tools10m

4 practice exercises

  • Automating Regression Testing30m
  • Automating Security Testing Using Fuzz Testing30m
  • Runtime Monitoring30m
  • Summative Review of Week 4 material