As a principle of project delivery, Agile has always been about achieving better outcomes
faster through the use of a dynamic, collaborative framework than traditional methodologies. Behaviour
Driven development (BDD) offers a modern agile software development approach which is seen as an
evolution of Test Driven Development (TDD) and Acceptance Test Driven Development (ATDD). It
introduces new methods and strategies that describes user behaviours by using an ubiquitous language
(Gherkin) which are shared understanding of requirements between everyone involved in the software
projects. This helps to improve communication and collaboration in the team lead to deliver higher
quality software. However, it is unclear to why BDD enforces better quality software than TDD and
ATDD to achieve the business goals and how to automatic step definitions from the features in Gherkin.
In this paper it is examined the use of BDD in Agile Testing and compared with TDD and ATDD. I
also conduct an example experiment to describe a domain-specific language and make acceptance test
cases can be executable using Behave framework.
7 trang |
Chia sẻ: Thục Anh | Ngày: 11/05/2022 | Lượt xem: 302 | Lượt tải: 0
Nội dung tài liệu BDD in agile testing: An experimental study, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
KỶ YẾU HỘI THẢO KHOA HỌC QUỐC GIA CITA 2020 “CNTT VÀ ỨNG DỤNG TRONG CÁC LĨNH VỰC”
BDD in Agile Testing: An Experimental Study
Le Thi Bich Tra
Vietnam-Korea University of Information and Communication Technology
The University of Da Nang
ltbtra@vku.udn.vn
Abstract. As a principle of project delivery, Agile has always been about achieving better outcomes
faster through the use of a dynamic, collaborative framework than traditional methodologies. Behaviour
Driven development (BDD) offers a modern agile software development approach which is seen as an
evolution of Test Driven Development (TDD) and Acceptance Test Driven Development (ATDD). It
introduces new methods and strategies that describes user behaviours by using an ubiquitous language
(Gherkin) which are shared understanding of requirements between everyone involved in the software
projects. This helps to improve communication and collaboration in the team lead to deliver higher
quality software. However, it is unclear to why BDD enforces better quality software than TDD and
ATDD to achieve the business goals and how to automatic step definitions from the features in Gherkin.
In this paper it is examined the use of BDD in Agile Testing and compared with TDD and ATDD. I
also conduct an example experiment to describe a domain-specific language and make acceptance test
cases can be executable using Behave framework.
Keywords: BDD, TDD, ATDD, Behave, Gherkin, Agile Testing.
1 Introduction
In recent years, many companies have adopted Agile methodologies for their software development
activity. The Agile concept which is defined in the Agile Manifesto and Twelve principles of Agile
Software [7]. Many software companies use these principles to deliver value and quality projects to
customers. In fact, VersionOne, the 14 annual State of Agile survey, a look into the global state of enterprise
Agile in 2020 [27], reported that 95% of organizations practice Agile development. The top benefits
realized by companies are reported such as: ability to manage changing priorities, project visibility,
business/IT alignment, delivery speed/time to market, team morale, increase team productivity.
In Agile approach, testing can begin at the start of the project with continuous integration between
development and testing. It involves testing as early as possible and often as code becomes available and
stable enough in the software development life cycle. The Test-First approach allows the team to focus on
and clarify the expressed needs through a discussion of how to test the resulting code. The approach brings
some benefits such as better design and code quality, faster time to market, up-to-date documentation, high
code coverage, etc, ... [12, 9].
TDD, ATDD and BDD are common approaches in Agile software development which use Test First
strategy test. TDD is more a development technique than a test technique. A developer may perform low
level testing using the TDD, while a tester or product owner performs high level testing using ATDD. BDD
can include both low level and high level tests. BDD use a simple domain specific language which is like
natural language constructs that can express the behaviour and the expected outcomes [6].
The remainder of this is structured as follows: Section 2 presents the overview of BDD workflow.
Section 3 explains why BDD has been adopted in Agile Testing compared with other TDD and ATDD
approaches. Section 4 presents a sample experiment using Selenium WebDriver with Behave framework
to demonstrate the code generation from scenarios apply BDD. Section 5 concludes and identifies future
work.
130
Le Thi Bich Tra
2 Behavior Driven Development
Behaviour Driven Development is a Test-First, Agile Testing practice, it was originally introduced by Dan
North in 2003 that focuses on the behavior of the application from a business user’s perspective using
concrete examples [16, 21]. BDD is a collaborative process that creates a shared understanding of
requirements between the business and the Agile Team [5].
Fig. 1. BDD workflow
As illustrated in Fig. 1, Agile team practicing BDD (the business analysts, developers, testers) come
together, define requirements to achieve their business goals through features which are broken into smaller
user stories from the perspective of the customer. Many teams write a short outline of the requirement in
user story with format like this:
As a
I want
So that
The template is guidance to help teams capture enough information in the story, so that the conversation
they have is valuable [20]. The feature can includes some scenarios with concrete examples of how we want
the software to behave [21, 25]. The Agile team then writes down these examples in a domain specific
language, such as Gherkin, created explicitly for writing behavior descriptions. This language follows a
specific syntax, which uses the Given, When, Then keywords to describe what should happen when in the
application. It is very similar to natural language, so that anyone can read and understand what it is testing.
Then, some automation tools are used to execute the created specifications for testing [12, 16, 21, 22].
Scenarios are serves as a specification and are automated, so it can be called “Executable Specifications”.
The Executable Specifications specify how the software should behave, they guide the developers in
building working software that focuses on features that really matter to the business, and the tester uses the
results of these tests as the starting point for manual and exploratory tests. As features are delivered, an up-
to-date living documentation is produced [21, 15]. BDD practitioners express high-level requirements in the
form of executable specifications. After Executable Specifications are implemented, at low-level specifications,
the code is written in the step definitions is illustrated as unit-tests to help design and verify the application
code. This approach of using unit tests to drive low-level design is a core TDD practice: describe the
expected behavior as a failing test, write just enough code to get the test to pass, then refactor to avoid
duplication and keep the code quality high. The application code to make the unit tests pass, repeat the
process until acceptance criteria pass.
3 Why adopting BDD in Agile Testing?
The 2015 edition of the Standish Group’s annual CHAOS Report found that 52% of projects were delivered
late, ran over budget, or failed to deliver features for customer’s satisfaction and 19% of projects were canceled
at some point during the development cycle [13]. There are many factors that may lead to the success or failure
131
KỶ YẾU HỘI THẢO KHOA HỌC QUỐC GIA CITA 2020 “CNTT VÀ ỨNG DỤNG TRONG CÁC LĨNH VỰC”
of a software project: unrealistic goals, inaccurate estimates of needed resources, badly defined system
requirements... One of the most common problem in software projects is lack of communication among
customers, developers, and users [11, 18]. Mostly, developers do not quite understand what needs to be done,
and the business people misunderstand what are the capacities of the developers and the implementation
difficulties of the software they ask for [21]. Due to this, there are many opportunities for information to get
lost in translation, be misunderstood, or just be ignored leading to business software failure. BDD was as a
solution to this poor communication problems. BDD is an enhancement of The Three Amigos (representing
the developer, the tester and the business) which involves constant collaboration and help teams overcome
misinterpreted requirements and delivery issues [10, 14, 23].
When adopting BDD it is important to focus on solving the problems of delivering the software customers
want and not only in testing automation techniques. BDD helps developers know what to test, where to
start and how to name their tests and why tests failed [21, 24]. The shift from TDD to BDD is subtle but
significant. Instead of thinking in terms of verification of a unit of code, we think in terms of a specification
of how that code should behave-what it should do. The word “test” was replaced by “should” in language
testing. This helped to make the test method names more meaningful and enabled developers to focus on
the behavior of the application or underlying business requirements [6].
In addition, one limitation with TDD is that if the developer misunderstands what the software is to do,
the unit tests will also include the same misunderstandings, giving passing results even though the software
is not working properly [7]. For developers, a key advantage of BDD is that they do not have to rewrite
tests each time they rewrite their code. That’s because BDD is not focused on the code but on the behavior
of the application. In TDD, the tests written are typically more difficult to interpret by stakeholders, as they
are highly technical and stakeholders may not have programming experience, un- like BDD, anyone
involved can understand and process the test cases by using non-programmatic and ubiquitous language.
In addition, communication is improved when compared to other ways of discussing requirements
specifications with customers.
BDD can be seen as an evolution of TDD and ATDD since it is an outside-in development approach
[24]. TDD is focused towards building correct software but not on building the software that the user wants,
developer focuses on covering low-level test as well as on the design of the interface and classes (unit level
mostly). On the other hand, ATDD focuses on helping developers build the right software by promoting
the collaborative construction of high-level acceptance tests (integration and acceptance testing). BDD
leverages ATDD along with other techniques around conversations, collaboration and automation to en-
sure that a team delivers what the business wants based on a common language where all stakeholders can
understand. ATDD and TDD are methodologies used within BDD at a higher level. The benefits of the
outside in development approach is that focusing on business value, encouraging well-designed code so
easier to understand code and avoiding waste [21].
4 Experimental and evaluation
Steps definitions in scenarios are automated by BDD tools such as JBehave for Java, SpecFlow for .NET
and Behave for Python, Cucumber for Ruby,...[3, 4, 1, 2]. Behave is one of the popular BDD frameworks
that is preferred by Python practitioner and best-suited for automated browser testing with Selenium [19, 8].
To demonstrate how to automatic step definitions in BDD, I have conducted a sample example with an
existing web system. The first stage is identifying identify acceptance criteria for user stories to deliver a login
feature. The domain- specific language uses natural English language constructs to define the outcomes from
the behavior in the feature. An expected behavior could be for the scenarios is expect whether login to the
demo website successfully. The login feature with acceptance criteria are written in Gherkin format (Given,
When and Then) can be seen in Figure 2. The scenario comprises basic three types of steps: [26, 12]
- Given steps describe the pre-conditions for the scenario and prepares the test
environments.
- When steps describe the actions under test.
- Then steps describe the post-conditions that should be satisfied if the system meets
the specification.
132
Le Thi Bich Tra
The Gherkin language also support Background allows to add some context to the scenarios. Scenario
Outlines makes it possible to run the same scenario with different values defined in an example table. This
is a simple but powerful way to expand test coverage without code duplication.
Figure 3 demonstrates how the Python code mapped to each above step defined
Fig. 2. Login feature example written in Gherkin
in the scenarios using Behave framework. Each step in the feature is mapped to an acceptance test written
in step implements. Five methods will be automatically generated from the scenario with their annotations,
where the header text will match the description of the steps. In Behave these methods are convention- ally
stored in a LoginSteps.py file within the test suite. Given -When -Then steps that only have to be
implemented once and reused in many scenarios even different features, this not only helps to save amount of
code but also contributes a lot of maintainability of the tests. The step parameters username and password are
used to parameterize the test steps which helps to save a lot of time to update code implementation as you only
need to update your feature files and your code will adapt on what you supplied between the double quotes.
Parameterization can help a team adopt reusable set of steps, and it inspires healthier discussion when
writing scenarios. The assert statement will raise a runtime-error if the condition in it results in False. The
example use Selenium WebDriver which is a well-known package for web browser automation. The Page
Objects Model (POM) design pattern helps to reusable code that can be shared across multiple test case and
reducing the amount of duplicated code. With POM, several changes in user interface can be easily solved
in only one place.
Behave framework provides some test hooks such as fixtures –startup and
133
KỶ YẾU HỘI THẢO KHOA HỌC QUỐC GIA CITA 2020 “CNTT VÀ ỨNG DỤNG TRONG CÁC LĨNH VỰC”
Fig. 3. Translating Test Steps in Login Feature File to Python Code
clean up function, just like in TDD. These test hooks for Gherkin tests can be defined in an environment.py
file which contains some pre-tests and post-tests instructions during the testing automation. These can be
test-data preparations (fixtures), initializing web drivers for UI Tests or kicking off a mock server for
component level testing [17]. Hooks can be associated with Features, Scenarios, Steps, Tags or the whole
test run. As Figure 3 shows, hook before scenario to run before each Scenario to specify browser for testing
and initialize web elements for each page by using Selenium.
Testing the above example will produce a report by Allure which is an open-
Fig. 4. Test hooks example in Behave
source framework designed to create test execution reports that are clear to everyone in the team. Allure
Report provides a nice big picture of which features have been covered, where defects are clustered, how
the time of execution takes and so on for the team as well.
In the example, writing scenarios from the beginning enforces quality-first and
134
Le Thi Bich Tra
Fig. 5. Report with Allure-behave
test-first mindsets. BDD automation can run scenarios to fail until the feature is implemented and causes tests
to pass. Given -When -Then steps can be reused between scenarios and the underlying implementation for
each step does not change.
5 Conclusion
This paper has described a detailed workflow for BDD and explained why adopting it. Because BDD has
encourages communication and coordination within the team, thus ensuring high quality right from the
beginning of the project so that it is more effective than TDD and ATDD approach. I also evaluate some
benefits when generating automatic step definitions from scenarios in Behave. In the future, I am planning
to write more focused and concise unit tests on low-level in BDD style. In addition, applying Mocking
function, by isolating dependencies, the tests run more quickly, more reliably and avoiding undesired side
effects during testing.
References
1. Behave, https://behave.readthedocs.io/en/latest/
2. Cucumber, https://docs.cucumber.io/
3. JBehave, https://jbehave.org/
4. SpecFlow, https://specow.org
5. Agile, S.: Advanced topic - Behavior-Driven Development (Last accessed 20 September 2020),
https://www.scaledagileframework.com/ behavior-driven-development/
6. Ahonen, A., et al.: Unit and integration testing of java: Jvm behavior-driven development testing frameworks
vs. junit (2017)
7. Black, R., Coleman, G., Walsh, M., Cornanguer, B., Forgacs, I., Kakkonen, K., Sabak, J., Black, R.: Agile
testing foundations: An istqb foundation level agile tester guide. pp. 78–84. BCS (2017)
8. Bose, S.: https://www.browserstack.com/guide/top-python-testing-frameworks (Last accessed 20 September
2020), https://www.browserstack.com/guide/ top-python-testing-frameworks
9. Buchan, J., Li, L., MacDonell, S.G.: Causal factors, benefits and challenges of test- driven development:
Practitioner perceptions. In: 2011 18th Asia-Pacific Software Engineering Conference. pp. 405–413. IEEE
(2011)
10. Bussenot, R., Leblanc, H., Percebois, C.: Orchestration of domain specific test languages with a behavior driven
development approach. In: 2018 13th Annual Conference on System of Systems Engineering (SoSE). pp. 431–
437. IEEE (2018)
11. Charette, R.N.: Why software fails [software failure]. IEEE spectrum 42(9), 42–49 (2005)
12. Farcic, V., Garcia, A.: Test-Driven Java Development: Invoke TDD principles for end-to-end application
development. Packt Publishing Ltd (2018)
13. International, S.G.: The chaos report. United States of America (2015)
14. Kudryashov, K.: The beginner’s guide to bdd. Dan North Q & A. https://inviqa. com/blog/bdd-guide (2015)
15. Nicieja, K.: 3 Ways How Specification By Example and Gherkin Improve Col- laboration (Last accessed 20
September 2020), https://dzone.com/articles/ 3-ways-specification-by-example-with-gherkin-reduc
16. North, D.: Introducing BDD (Last accessed 20 September 2020), http:// dannorth.net/introducing-bdd/
135
KỶ YẾU HỘI THẢO KHOA HỌC QUỐC GIA CITA 2020 “CNTT VÀ ỨNG DỤNG TRONG CÁC LĨNH VỰC”
17. Oropesa, K.: Behave Test Hooks - The Setup() and Teardown() Equivalent
18. Outsource2india: 10 Reasons that lead to software project failure (Last accessed 20 September 2020),
https://www.outsource2india.com/software/SoftwareProjectFailure.asp
19. Panda, A.: Python BDD Framework Comparision (Last accessed
20. 20 September 2020), https://automationpanda.com/2019/04/02/ python-bdd-framework-comparison/
21. Rose, S.: User stories and BDD (part 1)- the origins and evolution of the user story (Last accessed 20 September
2020), https://cucumber.io/blog/bdd/ user-stories-are-not-the-same-as-features/
22. Smart, J.F.: BDD in Action, vol. 12. Manning Publications New York (2014)
23. Smartbear: TDD vs BDD vs ATDD - What’s the Right choice (Last accessed 20 September 2020),
https://bitbar.com/blog/ tdd-vs-bdd-vs-atdd-whats-the-right-choice-for-you/
24. Software, S.: Who does what (Last accessed 20 September 2020), https:// cucumber.io/docs/bdd/who-does-
what/
25. Solis, C., Wang, X.: A study of the characteristics of behaviour driven development. In: 2011 37th
EUROMICRO Conference on Software Engineering and Advanced Applications. pp. 383–387. IEEE (2011)
26. SpecFlow: Getting Started with Behavior Driven Development (Last accessed 20 September 2020),
https://specflow.org/bdd/
27. Storer, T., Bob, R.: Behave nicely! Automatic generation of code for behaviour driven development test suites.
In: 2019 19th International Working Conference on Source Code Analysis and Manipulation (SCAM). pp. 228–
237. IEEE (2019)
28. VersionOne: 14th annual state of agile report. pp. 8–10 (2020), https:// stateofagile.com/
136
Các file đính kèm theo tài liệu này:
- bdd_in_agile_testing_an_experimental_study.pdf