Modern QA for Beginners

  • 2 Days
  • Beginner
  • Virtual | Classroom
  • £ On Request

A comprehensive 2-day introduction to modern QA techniques and best practices in an agile world

Book For My Team


This is an introductory workshop for IT staff intending to work as testers on an Agile software project. It is designed to relect 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.

What you will learn

By the end of the delivery delegates will have received a comprehensive introduction to modern testing and recognise which avenues to pursue for further development. In addition to prospective testers the workshop can be used to give developers and business analysts a deeper appreciation of the complexities of modern QA.

  • Understand the role of QA in an Agile team
  • 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 tester


Introduction to QA

  • 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?

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

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

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

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

Accessibility and I11N 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

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

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

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

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

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

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

Security Testing

  • Adopting the mindset of an attacker
  • Common attacks defined by the OWASP top ten
  • Examining your network with Nmap, Wireshark etc..
  • Performing Threat Modeling to determine weaknesses
  • Introducing mitigations and verifying their efficacy


Delegates should have some experience of working in a software team, familiarity with the basic principles of Agile Development and the ability to write basic procedural programs using conditionals and iteration.

Ryan Adams

Used to make software for learning as a developer, now helping software makers learn.

Follow Ryan
Andrew Paul

Was a teacher, then a lecturer and now a trainer at Instil. Has been completed the circle.

Follow Andrew
For a breakdown of what to expect in our training, check out our training overview page.
Deloitte logo
Atlassian logo
Workday logo
BMW logo
Amex logo
McAfee logo
PWC logo