Training Course | Modern Testing

Reflecting the realities of modern software development, this course is will bring you up-to-speed on emerging testing practices

Modern Testing is for Software Engineers who want to confidently develop systems knowing that they meet the needs of customers whether that’s features, performance, or security.

Course Information

Duration: 2 Days

Location: Virtual | Classroom

Skill Level: Intermediate

Learning Outcomes

Course delegates will complete the course having gained confidence in developing systems that they know meet the need of modern security standards.

  • Appreciate the multiple dimensions of testing
  • Learn the fundamentals of modern testing methods
  • Be able to use a variety of testing frameworks
  • Build a solid foundation for becoming a coder and tester

Course Outline

Designed to reflect the realities of modern software development - including working in small cross functional teams, deploying to the cloud and supporting a diverse range of users. Both functional and non-functional testing is covered in depth, as are emerging methods like property and mutation testing.

Hugely interesting course and eye opening to understand all the vulnerabilities that exist. Even though we have security reps within the company this would make you think there is a need for specially trained staff whose sole focus is that.

Course Attendee


Delegates will complete training in the following modules.

1. Introduction to Testing
  • The evolution of the testers role
  • Developing the mindset for testing
  • Escalating costs when discovering bugs
  • The pyramid view of different kinds of test
  • Functional vs. non-functional testing
  • Black vs. white vs. grey test modalities
  • Why automation is essential but limited
  • Do testers also need to be coders?
  • Can coders ever be good testers?
2. The Agile Perspective on Testers
  • It's not about breaking things
  • Making a positive impact on quality
  • Testing is everyones responsibility
  • The concept of the 'T' shaped engineer
  • Facilitating rather than gatekeeping
  • Motivating rather than demoralizing
  • Advantages of 'pair testing' with coders
  • Using Acceptance Test Driven Development
  • The need to address 'escape defects'
  • Different forms of technical debt
  • Focusing on the bugs that matter
  • Embedding testing into workflows
3. Core Concepts of Functional Testing
  • Picking test cases via Equivalence Partitioning
  • Using Boundary Value Analysis to find edge cases
  • Discovering core test cases using Decision Tables
  • Deriving test cases from State Transition Diagrams
  • Extracting tests from scenarios in Use Case Reports
  • Statement and decision coverge in White Box Testing
4. Automating Test Cases
  • Do you really care if it fails?
  • Decoupling the UI to facilitiate testing
  • Readability is everything in testing code
  • Coding principles that don't translate
  • Using Gherkin as a universal language
  • Partitioning tests to remove coupling
  • Isolating tests for parallel execution
  • Creating an efficient CI/CD pipeline
5. Testing for Usability
  • It is not possible to automate empathy
  • Why we need to perform Exploratory Testing
  • How to target an Exploratory Testing Session
  • Taxi cab testing vs. testing single features
  • Organising exploratory test sessions
  • Writing a Test Charter for the event
  • Picking a team and assigning key roles
  • Ways to ensure effective reporting
6. Accessibility and i18N Testing
  • Most software has poor accessibility
  • Issues faced by visually impaired users
  • Motivations to ensure apps are accessible
  • Extra issues due to Internationalization
  • Defining test cases to prove accessibility
  • Screen Readers on browsers and mobile devices
  • Using Pa11y to highlight accessibility blackspots
  • Using specialist testers to verify accessibility
7. Property Based Testing
  • Why PBT eveolved within the FP community
  • Characteristics of pure functions within FP
  • Generalizing test cases into properties
  • Creating generators and shrinking rules
  • Performing PBT on the JVM with ScalaCheck
  • Performing PBT in the CLR with FsCheck
  • Performing PBT in Python with Hypothesis
8. Mutation Testing
  • How altering your code validates your tests
  • Why mutation tells you more than code coverage
  • Comparing Property Based and Mutation Testing
  • Types of changes that create mutant programs
  • Measuring how well your tests find mutants
  • Performing mutations in Python with Cosmic Ray
  • Mutation tools available for the JVM and CLR
9. Performance and Stress Testing
  • Common myths surrounding performance testing
  • Does your test environment replicate production?
  • Defining what peformance means within your system
  • Crafting appropriate and realistic benchmarks
  • Using JMeter for performance / stress testing
  • Using Gattling for continuous load testing
  • Abstracting Gattling and JMeter via Taurus
  • Running distributed load tests via Locust
10. Tools for Testing Distributed Systems
  • Simplifying your setup using Docker
  • Automating the browser via Selenium
  • Exploring RESTful APIs using Postman
  • Using Neuman to integrate Postman into CI
  • Mocking RESTful servcies with WireMock
  • Isolating REST Controllers in Spring Boot
  • Isolating Components in Angular and React
  • Using REST-assured to simplify complex tests
  • Test libraries specific to reactive streams
  • Integrating the above libraries with Cucumber
  • Testing serverless applications in AWS Lambda
11. Contract Testing and Distributed Systems
  • Contracts between providers and suppliers
  • Defining contracts as sets of interactions
  • Avoiding contracts turning into functional tests
  • Using the Pact tool to perform contract testing
  • Automating Pact tests using the Broker utility
12. Resiliency Testing
  • The need to ensure continuous quality of service
  • High availability and the 'five nines' guarantee
  • Using Goblin for resiliency testing in cloud apps
  • Chaos engineering at Netflix and the Simian Army
  • Ensuring resiliance objectives are clearly defined
  • Distinguishing between SLAs, SLOs and SLIs


The course can be tailored to any modern OO language (Java, C# etc) but the delegates should come armed with a good understanding of writing code in a high-level language such as Java, TypeScript, Kotlin, C#, etc. Delegates should also have a firm understanding of Engineering Principles.

Further Learning

Looking to continue on your learning path? The following courses are ideal as follow-on courses to Modern Testing.

Need help?

Email Us
email hidden; JavaScript is required

Or send us a quick message

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.