Faster, better and cheaper is the expected result of any given hour in any given business case.  Now that many organizations have adopted continuous integration in practice, it is now for testers to get aligned to continuous integration development practices. Continuous integration (CI) is a practice in agile methodologies where all developer workspaces are merged with a shared mainline several times a day.

Continuous integration quality control aims to improve the quality of software, and to reduce the time taken to deliver it, by replacing the regular practice of following quality control processes after completing all development.

Continuous integration and its evolution

Continuous integration (CI) was first named and proposed as part of extreme programming (XP). Its main aim is to prevent integration problems, referred to as “integration hell” in early descriptions of XP.

CI was originally intended to be used in combination with automated unit tests written through the practices of test-driven development. Initially this was conceived of as running all unit tests and verifying they all passed before committing to the mainline. Later elaborations of the concept introduced build servers, which automatically run the unit tests periodically or even after every commit and report the results to the developers.

Test Driven Development (TDD) to Behavior Driven Testing (BDT)

A agile in general, is the software development practise to develop the software iteratively.  This is achieved by adding new code at each iteration, but also by refactoring existing code written during previous iterations. This refactoring can be safely achieved only with a strong test system, able to check that the whole software product doesn’t break when new code is added, or when existing ones are modified. Hence, two separate, but strongly connected systems are created:

  • The software product that are provided to users
  • Its test harness that help build it incrementally

Test Driven Development (TDD) is the best known practice to create this test harness, enabling to create incremental software. TDD is a design technique that drives the development process through testing. In essence you follow three simple steps repeatedly:

  • Write a test for the next bit of functionality you want to add.
  • Write the functional code until the test passes.
  • Refactor both new and old code to make it well structured.

Behavior-driven Development (BDD)evolved to address (TDD) practice issues. BDD really isn’t all that different to TDD. What BDD adds is a clear emphasis on what it takes to make TDD succeed.

BDD starts by identifying business outcomes, and then drills down into the feature set that will achieve those outcomes. Each feature is captured as a “story”, which defines the scope of the feature along with its acceptance criteria.

Behavior-driven Testing(BDT) is a testing approach which evolved from BDD.

  1. Develop test scenarios that covers product behavior as in BDD feature pattern
  2. Execute test scenarios with manual/automated scripts

Exploratory testing

Cem Kaner, who coined the term in 1983, now defines exploratory testing as “a style of software testing that emphasizes the personal freedom and responsibility of the individual tester to continually optimize the quality of his/her work by treating test-related learning, test design, test execution, and test result interpretation as mutually supportive activities that run in parallel throughout the project

The balancing act: CI, BDT and Exploratory Testing

Balancing Exploratory Testing with scripted behavior driven testing is the way to go.

Though BDT, TDD and BDD help in testing the business outcomes and unit conditions as early as possible in development life cycle, exploratory testing will help in going out of box and catching the interface related testing gaps which we would have missed in TDD, BDD and BDT test script.

  • Scripted behavior driven testing – Prepare test scenarios using BDT approach and integrating with UI automation tools for testing inline web & native application.
  • Exploratory testing – Reach out of box by executing exploratory testing to ensure test complete.