Collecting requirements for a project is a complicated process. If you don’t do it right, you can waste both money and time. Customers who start working with software development company often have problems with specifying their needs. To avoid communication failure when getting on a project – no matter if you are a customer or a contractor – learn how to use Gherkin to collect the requirements!

Requirements Engineering Analysis

Defining the business problem – this is the first step of the Requirements Engineering Analysis. In this task, we should not focus on the details but rather think about the problem globally. Here is an example of a well-posed problem:

“It is becoming increasingly difficult to find qualified specialists for the ICT sector”

The second step is to create a solution to this problem. It can be a service, a product or even a process. Following on, the example of a solution to the problem posed earlier could be:

“Creating SkillHunt.io application – a recruitment platform allowing its users to get a high reward for referring a job to his or her friend”

At this stage, the details are needless. If we evaluate the idea, conduct market research and it turns out that our solution has a business justification, we can start collecting the requirements. To make sure they fulfill their function, we should check if they meet the 3 main criteria. They need to be:

  • Explicit and unambiguous
  • Understandable for all the stakeholders,
  • Up-to-date and documented.

To make the process of collecting requirements easier and to meet all the presented criteria, we can use the Gherkin language. It is a natural language which can be useful both to business analysts collecting the requirements and to developers creating the scenarios for functional tests.

Speak Gherkin fluently

The record of requirements in Gherkin is unambiguous, explicit, and – what’s most important – easy to understand for all the parties involved. Because of that, the discussion about the requirements is actually possible.

Just like every other language, Gherkin has its syntax. It has some specific structure, some keywords have to appear. Here is how it looks:

Feature: Logout from application
Scenario: 
   Given I am logged in
   When I click “log out” button
   Then I am informed about successful logout
   And I am redirected to login page

The requirements collected in Gherkin are saved to a .feature file. Thanks to that, the developers can easily use these files for writing automated tests in BDD (Behavior-driven development) using Cucumber.

When we want to create a new requirements description, we need to define the Feature which gives us the name of a new functionality. Then, we go ahead with writing the Scenario. It’s worth to mention that one file can contain more than one scenario. Each scenario consists of three main steps: Given, When, and Then. The description following the word Given sets the preconditions, When defines the actions that take place at the particular functionality and Then describes the expected outcome of the action. In the example presented above, there is one more keyword: And which continues the method that it follows. Therefore, when listed after When, it would continue this section and define another action. Gherkin knows one more keyword: But – but, to be honest, in my whole career as a Project Manager, I have never found a situation when it could be applied.

Becoming fluent

Take a look at the example in which the user is logged in in each of the scenarios:

Feature: Select profile
Background: 
   Given I am logged in 

Scenario: First profile select 
   Given I go to application after logging
   When I am asked which profile I would like to choose from my list
   And I select profile from list 
   Then I see dashboard for this profile

Scenario: Next profile select
   Given I am on dashboard
   And I have selected profile
   When I select  from dropdown with list
   Then I see dashboard for this 

Moreover, if we want to discuss the requirements and, in the future, test more than one scenario, it is worth to use some examples – using the Example function. Collecting data in this form is often the most unambiguous. To use Example, we need to put the variable inside angle brackets <> and put the tables below the scenario. We need to remember that if we use examples, our scenarios should be named Scenario Outline. The following example should make it clear:

Feature: Login to application
Background:
   Given I am a registered user
   And my account is activated

Scenario Outline: Successful login
   Given I am on login page
   When I fill "login" with 
   And I fill "password" with       
   And I click "Login" button
   Then I am redirected to page with profile select

Examples: 
   | login  | correct-password |
   | Lukasz | Gh3rk1n          |
   | Arek   | Cucumb3r         |

Scenario Outline: Unsuccessful login
   Given I am on login page
   When I fill "login" with 
   And I fill "password" with       
   And click "Login" button
   Then I am informed about unsuccessful login

Examples: 
   | login    | incorrect-password |
   | Lukasz   | Gherkin            |
   | Arek     | Cucumber           |

Scenario: Unauthorized entry
   Given I am not logged in
   When I try to go Dashboard page
   Then I am redirected to login page

Of course, in agile projects, the requirements are changing. It is necessary to apply changes in the .feature files and therefore – the on-going changes in application tests. This way we can keep our documentation up-to-date. Completing the tasks in compliance with the scenarios results in delivering up and running elements that perfectly fit with the principles of the Agile management.

Web Application Development Services