The first edition of the QA and Automation course in Hack Bulgaria
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


The first edition of the QA and Automation course in Hack Bulgaria

In this course students will learn the basic theory behind software quality assurance and test automation. More importantly they will learn how to think like testers and analyze a given problem from various angles, often without complete information available.

The theory lessons include exerices like writing a bug report or writing test cases and test plans, sometimes in hypothetical environments, sometimes using real software when possible.

In order to gain the maximum benefit of this course please clone this repo and write down your answers to the exercises, links to bug reports and test plans. These can be later shown to prospect employers.

Course Program

3x - Java 101 Refresh course

Please see Lesson 00.

Lesson 1 - QA Fundamentals

This is an introduction to software testing in general. The industry uses the terms testing, quality assurance and quality engineering more or less as synonyms but there is a difference behind them and we will explain that before going further. We will briefly cover the following topics using practical examples and exercises.

  • Definition of testing, QA and QE
  • Why we need testing
  • How do we know when to stop
  • Tester vs. developer
  • The psychology of testing
  • Different types of testing
  • Testing techniques

Lesson 2 - Software Development Lifecycle

Introduction to software development lifecycle and how it relates to testing activities.

  • Waterfall model
  • Agile models
  • QA's involvement in both

Lesson 3 - Bug Tracking

"If it's not in Bugzilla it's not a bug!"

  • Generic definition
  • How to write a good bug report
  • Practicing writing and analyzing bug reports

Lesson 4 - Test Case Management

“If it is not in the TCMS then we don't test it!”

  • What is test management
  • Generic definitions of
  • Test Case
  • Test Plan
  • Test Run aka Test Execution
  • IEEE test plan structure
  • Positive and negative tests
  • Practice with Nitrate TCMS

2x - Introduction to Linux

This is a practical refresher lesson for Linux in Bulgarian.

Homework reading - Filesystems in Linux

Other information about Linux can be found at:

Lesson 5 - Testing Fedora 24 Changes

This is a practice only lesson. Students will be testing new features proposed for the upcoming Fedora 24 release.

Lesson 6 - Unit Testing and Continuous Integration

Unit testing and CI are traditionally developer oriented activities but QA is increasingly starting to take part in both of them.

  • What is unit testing
  • Fakes, stubs, mocks and doubles
  • Introduction to JUnit
  • Continuous Integration and code coverage

Lesson 7 - Writing JUnit tests for Apache Commons

This is a practive only lesson. Students will be writing JUnit tests for popular Apache Commons components and inspecting changes in code coverage.

Lesson 8 - Integration Testing with Selenium

Selenium is a popular test automation framework for web based applications. In this lesson we learn about how test cases and software need to be written in order to be automated and explore the Selenium IDE.

  • Theory of test automation
  • What is automatable software
  • Introduction to Selenium

Lesson 9 - Writing Selenium tests for Mozilla Add-ons website Pt.1

This is a practice only lesson. Students will be writing automated Selenium tests for

Lesson 10 - Writing Selenium tests for Mozilla Add-ons website Pt.2

This is continuation of the previous practice only lesson.

Lesson 11 - Introduction to performance testing

Introduction to performance testing targeted mostly towards discussions and understanding what performance testing is. The lesson explores several examples of basic performace testing and includes a practical exercise.

  • Short theory with examples
  • Designing performance test strategy for GitHub

Lesson 12 - How to find 1000 bugs in 30 minutes

In every suffiently large software system even the smallest change can affect multiple components and lead to a big number of bugs. The lesson explores several examples of such bugs and gives the students the background to start finding bugs by the hundreds.

  • Introduction to mass scale exploratory testing
  • Let's find at least 100 bugs in Fedora 24

Summary - What I've learned in this course. What next ?

Before the end of the last lesson we go back to reflect on what we've learned during this course and what to do next in order to boost our careers in QA.