SlideShare a Scribd company logo
BDD & JBehave
Robert Kaszubowski
Agenda
● Czym jest BDD
● Czym jest JBehave
● Praca z JBehave
● Podsumowanie
Agenda
● Czym jest BDD
● Czym jest JBehave
● Praca z JBehave
● Podsumowanie
Zaczerpnięte z http://www.slideshare.net/wakaleo/bdd-in-action-principles-practices-and-realworld-application
Zaczerpnięte z http://www.slideshare.net/wakaleo/bdd-in-action-principles-practices-and-realworld-application
BDD
● Behaviour Driven Development
● Dan North
● Zwinne metodyki
● TDD + DDD = BDD
● Tworzenie oprogramowania przez opisywanie jego zachowania, z
perspektywy jego udziałowców.
BDD kładzie nacisk na:
● Zrozumienie potrzeb klienta
● Poznanie jego języka
● Poznanie sposobu, w jaki opisuje jak oprogramowanie ma się
zachowywać
3 zasady BDD
I. Enough is enough
● Analiza i projektowanie tyle ile naprawdę trzeba
● Nie specyfikujemy od razy całego zakresu projektu
● Robimy tyle ile trzeba
„Nadgorliwość gorsza jest od faszyzmu” :)
3 zasady BDD
II. Deliver stakeholder value
● Wszystko co robimy ma nieść za sobą realną wartość biznesową
● Jeśli robimy coś co tej wartości nie przynosi, warto zająć się czymś
innym
● Jeżeli funkcjonalność pojawia się w projekcie, to znaczy, że jest ona
wartościowa
3 zasady BDD
III. It's all behaviour
● Potrzeba mówienia „wszechobecnym językiem”
● Wszyscy uczestnicy projektu powinni odwoływać się i myśleć o
systemie w ten sam sposób
● Dzięki temu zmniejszana jest bariera komunikacyjna między
„nietechnicznymi” klientami, a „technicznymi” programistami
● Wymagania definiujemy w formie historyjek użytkownika
Podsumowując
● liczy się przede wszystkim zachowanie
● minimalizacja formalizmów, maksymalizacja zrozumienia
● naturalny język zrozumiały dla każdego
● nazwy metod testowych powinny być zdaniami
● łatwiejsze czytanie kodu i interpretacja testów
● kod stanowi dokumentację
Historyjki użytkownika
● Historyjka jest spisanym wymaganiem klienta
Każda historyjka składa się z kilku części:
● tytułu,
● narracji,
● kryteriów akceptacji
W narracji powinniśmy zawrzeć:
● Opis funkcjonalności
● Korzyści jakie płyną z danej funkcjonalności
● Osobę (rolę), która będzie czerpać te korzyści
Przykład:
Zakładanie nowego konta użytkownika w systemie xxx.
Jako użytkownik.
Chcę założyć nowe konto w systemie xxx.
Aby móc korzystać z systemu.
Historyjki ciąg dalszy
● Kryteria akceptacji określają moment, w którym historyjka jest
kompletna. Spisywane są w postaci scenariuszy, których pozytywne
przejście gwarantuje osiągnięcie celu.
Zwykle scenariusze składają się z trzech bloków:
● Given – określający kontekst
● When – określający zdarzenie
● Then – określający rezultat
Przykład historyjki (BDD)
Scenariusz: Wypłata środków z konta. (Tytuł)
Zakładając, że na koncie jest odpowiednia ilość środków (Given)
Oraz, że karta jest poprawna (Given)
Oraz, że w kasecie są pieniądze (Given)
Jeżeli klient zażąda wypłaty gotówki (When)
Wtedy konto zostanie obciążone (Then)
Oraz pieniądze zostaną wypłacone (Then)
Oraz karta zostanie zwrócona klientowi (Then)
Kluczowa sprawa
● Kluczem do sukcesu jest spowodowanie, by kryteria akceptacji
poszczególnych historyjek były wykonywalne, dzięki temu da się je
zautomatyzować.
Agenda
● Czym jest BDD
● Czym jest JBehave
● Praca z JBehave
● Podsumowanie
JBehave
Wykorzystuje słowa kluczowe:
● SCENARIO
● GIVEN
● WHEN
● THEN
● AND
● NARRATIVE
● EXAMPLES
Oraz annotacje:
● @GIVEN
● @WHEN
● @THEN
● @ALIAS
● @ALLIASES
● @PENDING
● Framework dla BDD wykorzystujący podobny format jak ten opisujący
historyjki użytkownika.
Bez BDD
public void login(String username,String password) {
driver.get("http://www.dummy.website.com");
driver.findElement(By.name("username")).sendKeys(username);
driver.findElement(By.name("password")).sendKeys(password);
driver.findElement(By.name("update")).click();
}
@Test
public void testLoginWorksForCorrectCredentials() {
login("bob","password");
assertTrue(driver.getPageSource().contains("Welcome"));
}
@Test
public void testLoginFailsForWrongPassword() {
login("bob","messerschmidt");
assertFalse(driver.getPageSource().contains("Welcome"));
}
Agenda
● Czym jest BDD
● Czym jest JBehave
● Praca z JBehave
● Podsumowanie
1. Napisz historyjki
Scenario: Test the login works with valid credentials
Given the login page
When the user logs in with username: bob and password: password
Then the word: Welcome should be on the page
Scenario: Test login fails with wrong password
Given the login page
When the user logs in with username: bob and password: blah
Then the word: Invalid should be on the page
2. Zmapuj historyjki do Javy
@Given("the login page")
public void gotoLoginPage() {
driver.get("http://www.dummy.website.com");
}
@When("the user logs in with username: $username and password:
$password")
public void login(String username, String password) {
driver.findElement(By.name("username")).sendKeys(username);
driver.findElement(By.name("password")).sendKeys(password);
driver.findElement(By.name("update")).click();
}
@Then("the word: $matchWord should be on the page")
public void findWordInPage(@Named("matchWord") String matchWord){
assertThat(driver.getPageSource(),containsString(matchWord));
}
Data Tables i DDT
Scenario: Test login with valid and invalid data
Given the login page
When the user logs in with <username> and <password>
Then the <matchWord> should be on the page
Examples:
|username |password |matchWord |
|bob |password |Welcome |
|bob |blah |Invalid |
… … ...
3. Skonfiguruj narzędzie
● Embedder – klasa pełniąca punkt wejściowy konfiguracji JBehave
● Z Embeddera korzystają Embeddable – klasy uruchamiające
historyjki
● JBehave dostarcza implementacji JUnit Runnera
● http://jbehave.org/reference/stable/developing-
stories.html#configuring
4. Uruchom testy
● Można uruchamiać je jako testy Junit
● Maven, Ant
● Można uruchamiać historyjki lokalne jak i zdalne
4. Uruchom testy
public class TraderStoryRunner {
@Test
public void runClasspathLoadedStoriesAsJUnit() {
// Embedder defines the configuration and candidate steps
Embedder embedder = new TraderEmbedder();
List<String> storyPaths = ... // use StoryFinder to look up paths
embedder.runStoriesAsPaths(storyPaths);
}
@Test
public void runURLLoadedStoriesAsJUnit() {
// Embedder defines the configuration and candidate steps
Embedder embedder = new URLTraderEmbedder();
List<String> storyPaths = ... // use StoryFinder to look up paths
embedder.runStoriesAsPaths(storyPaths);
}
}
● TradeEmbedder / URLTradeEmbedder – definiują konfigurację używając
wczytywania z classpath i zasobu URL
4. Uruchom testy
public class YourStory extends JUnitStory/Stories {
@org.testng.annotations.Test
public void run() throws Throwable {
super.run();
}
}
5. Obejrzyj raport
Obecnie wspierane formaty raportów:
● ConsoleOutput
● IdeOnlyConsoleOutput
● TxtOutput
● HtmlOutput
● HtmlTemplateOutput
● XmlOutput
● PostStoryStatisticCollector
● DelegatingStoryReporter
● Klasa StoryReportBuilder pozwala na konfigurowanie raportowania w kilku
formatach na raz: CONSOLE, TXT, HTML, HTML_TEMPLATE oraz XML.
5. Obejrzyj raport
5. Obejrzyj raport
Agenda
● Czym jest BDD
● Czym jest JBehave
● Praca z JBehave
● Podsumowanie
Inne narzędzia do BDD
Dla Javy:
● Cucumber JVM
● Concordion
● EasyB
● JDave
● Inne:
● Jasmine (JavaScript)
● Behat (PHP)
● MSpec
JBehave vs Cucumber
Podobne:
● Czysta Java
● Wsparcie dla Junit
● Szybkie
● Łatwe w użyciu
Wady/Zalety Cucumber:
● wspiera features
● większa możliwość konfiguracji
raportów (ładny konsolowy output,
dodatkowe formaty)
● nie wspiera równoległych testy w
JUnit
● słaba dokumentacja
Wady/Zalety JBehave:
● bardzo dobra dokumentacja
● całkiem dobre formatowanie
HTML dla raportów
● wspiera równoległe testy w JUnit
● wspiera tylko stories a nie
features
J behave presentation
J behave presentation
J behave presentation
J behave presentation
J behave presentation
J behave presentation

More Related Content

Similar to J behave presentation

Gherkin - jak zostać poetą w IT
Gherkin - jak zostać poetą w ITGherkin - jak zostać poetą w IT
Gherkin - jak zostać poetą w IT
The Software House
 
Wydajny frontend 2024 - nowości optymalizacyjne
Wydajny frontend 2024 - nowości optymalizacyjneWydajny frontend 2024 - nowości optymalizacyjne
Wydajny frontend 2024 - nowości optymalizacyjne
Bartłomiej Miś
 
[Quality Meetup] Przemek Podsiadlik - Scenariusze BDD != testy automatyczne
[Quality Meetup] Przemek Podsiadlik - Scenariusze BDD != testy automatyczne[Quality Meetup] Przemek Podsiadlik - Scenariusze BDD != testy automatyczne
[Quality Meetup] Przemek Podsiadlik - Scenariusze BDD != testy automatyczne
Future Processing
 
Szkolenie zarządzanie projektami wersja
Szkolenie zarządzanie projektami wersjaSzkolenie zarządzanie projektami wersja
Szkolenie zarządzanie projektami wersja
Roman Morawski-Jagram
 
Wydajny frontend 2023
Wydajny frontend 2023Wydajny frontend 2023
Wydajny frontend 2023
Bartłomiej Miś
 
[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)
Piotr Pelczar
 
Równoległy rozwój Aplikacji Webowych | Codesushi
Równoległy rozwój Aplikacji Webowych | CodesushiRównoległy rozwój Aplikacji Webowych | Codesushi
Równoległy rozwój Aplikacji Webowych | Codesushi
Krzysztof (Chris) Ozog
 
AngularJS szkolenie wewnętrzne (into)
AngularJS szkolenie wewnętrzne (into)AngularJS szkolenie wewnętrzne (into)
AngularJS szkolenie wewnętrzne (into)Marcin Baran
 
Bee Talents - Jak pracujemy (2018)
Bee Talents - Jak pracujemy (2018)Bee Talents - Jak pracujemy (2018)
Bee Talents - Jak pracujemy (2018)
Marta Kamińska-Królak
 
DBR77 AI produkcji .pptx
DBR77 AI produkcji .pptxDBR77 AI produkcji .pptx
DBR77 AI produkcji .pptx
Piotr Wiśniewski
 

Similar to J behave presentation (10)

Gherkin - jak zostać poetą w IT
Gherkin - jak zostać poetą w ITGherkin - jak zostać poetą w IT
Gherkin - jak zostać poetą w IT
 
Wydajny frontend 2024 - nowości optymalizacyjne
Wydajny frontend 2024 - nowości optymalizacyjneWydajny frontend 2024 - nowości optymalizacyjne
Wydajny frontend 2024 - nowości optymalizacyjne
 
[Quality Meetup] Przemek Podsiadlik - Scenariusze BDD != testy automatyczne
[Quality Meetup] Przemek Podsiadlik - Scenariusze BDD != testy automatyczne[Quality Meetup] Przemek Podsiadlik - Scenariusze BDD != testy automatyczne
[Quality Meetup] Przemek Podsiadlik - Scenariusze BDD != testy automatyczne
 
Szkolenie zarządzanie projektami wersja
Szkolenie zarządzanie projektami wersjaSzkolenie zarządzanie projektami wersja
Szkolenie zarządzanie projektami wersja
 
Wydajny frontend 2023
Wydajny frontend 2023Wydajny frontend 2023
Wydajny frontend 2023
 
[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)[BDD] Introduction to Behat (PL)
[BDD] Introduction to Behat (PL)
 
Równoległy rozwój Aplikacji Webowych | Codesushi
Równoległy rozwój Aplikacji Webowych | CodesushiRównoległy rozwój Aplikacji Webowych | Codesushi
Równoległy rozwój Aplikacji Webowych | Codesushi
 
AngularJS szkolenie wewnętrzne (into)
AngularJS szkolenie wewnętrzne (into)AngularJS szkolenie wewnętrzne (into)
AngularJS szkolenie wewnętrzne (into)
 
Bee Talents - Jak pracujemy (2018)
Bee Talents - Jak pracujemy (2018)Bee Talents - Jak pracujemy (2018)
Bee Talents - Jak pracujemy (2018)
 
DBR77 AI produkcji .pptx
DBR77 AI produkcji .pptxDBR77 AI produkcji .pptx
DBR77 AI produkcji .pptx
 

J behave presentation

  • 1. BDD & JBehave Robert Kaszubowski
  • 2. Agenda ● Czym jest BDD ● Czym jest JBehave ● Praca z JBehave ● Podsumowanie
  • 3. Agenda ● Czym jest BDD ● Czym jest JBehave ● Praca z JBehave ● Podsumowanie
  • 6. BDD ● Behaviour Driven Development ● Dan North ● Zwinne metodyki ● TDD + DDD = BDD ● Tworzenie oprogramowania przez opisywanie jego zachowania, z perspektywy jego udziałowców.
  • 7. BDD kładzie nacisk na: ● Zrozumienie potrzeb klienta ● Poznanie jego języka ● Poznanie sposobu, w jaki opisuje jak oprogramowanie ma się zachowywać
  • 8. 3 zasady BDD I. Enough is enough ● Analiza i projektowanie tyle ile naprawdę trzeba ● Nie specyfikujemy od razy całego zakresu projektu ● Robimy tyle ile trzeba „Nadgorliwość gorsza jest od faszyzmu” :)
  • 9. 3 zasady BDD II. Deliver stakeholder value ● Wszystko co robimy ma nieść za sobą realną wartość biznesową ● Jeśli robimy coś co tej wartości nie przynosi, warto zająć się czymś innym ● Jeżeli funkcjonalność pojawia się w projekcie, to znaczy, że jest ona wartościowa
  • 10. 3 zasady BDD III. It's all behaviour ● Potrzeba mówienia „wszechobecnym językiem” ● Wszyscy uczestnicy projektu powinni odwoływać się i myśleć o systemie w ten sam sposób ● Dzięki temu zmniejszana jest bariera komunikacyjna między „nietechnicznymi” klientami, a „technicznymi” programistami ● Wymagania definiujemy w formie historyjek użytkownika
  • 11. Podsumowując ● liczy się przede wszystkim zachowanie ● minimalizacja formalizmów, maksymalizacja zrozumienia ● naturalny język zrozumiały dla każdego ● nazwy metod testowych powinny być zdaniami ● łatwiejsze czytanie kodu i interpretacja testów ● kod stanowi dokumentację
  • 12. Historyjki użytkownika ● Historyjka jest spisanym wymaganiem klienta Każda historyjka składa się z kilku części: ● tytułu, ● narracji, ● kryteriów akceptacji
  • 13. W narracji powinniśmy zawrzeć: ● Opis funkcjonalności ● Korzyści jakie płyną z danej funkcjonalności ● Osobę (rolę), która będzie czerpać te korzyści Przykład: Zakładanie nowego konta użytkownika w systemie xxx. Jako użytkownik. Chcę założyć nowe konto w systemie xxx. Aby móc korzystać z systemu.
  • 14. Historyjki ciąg dalszy ● Kryteria akceptacji określają moment, w którym historyjka jest kompletna. Spisywane są w postaci scenariuszy, których pozytywne przejście gwarantuje osiągnięcie celu. Zwykle scenariusze składają się z trzech bloków: ● Given – określający kontekst ● When – określający zdarzenie ● Then – określający rezultat
  • 15. Przykład historyjki (BDD) Scenariusz: Wypłata środków z konta. (Tytuł) Zakładając, że na koncie jest odpowiednia ilość środków (Given) Oraz, że karta jest poprawna (Given) Oraz, że w kasecie są pieniądze (Given) Jeżeli klient zażąda wypłaty gotówki (When) Wtedy konto zostanie obciążone (Then) Oraz pieniądze zostaną wypłacone (Then) Oraz karta zostanie zwrócona klientowi (Then)
  • 16. Kluczowa sprawa ● Kluczem do sukcesu jest spowodowanie, by kryteria akceptacji poszczególnych historyjek były wykonywalne, dzięki temu da się je zautomatyzować.
  • 17. Agenda ● Czym jest BDD ● Czym jest JBehave ● Praca z JBehave ● Podsumowanie
  • 18. JBehave Wykorzystuje słowa kluczowe: ● SCENARIO ● GIVEN ● WHEN ● THEN ● AND ● NARRATIVE ● EXAMPLES Oraz annotacje: ● @GIVEN ● @WHEN ● @THEN ● @ALIAS ● @ALLIASES ● @PENDING ● Framework dla BDD wykorzystujący podobny format jak ten opisujący historyjki użytkownika.
  • 19. Bez BDD public void login(String username,String password) { driver.get("http://www.dummy.website.com"); driver.findElement(By.name("username")).sendKeys(username); driver.findElement(By.name("password")).sendKeys(password); driver.findElement(By.name("update")).click(); } @Test public void testLoginWorksForCorrectCredentials() { login("bob","password"); assertTrue(driver.getPageSource().contains("Welcome")); } @Test public void testLoginFailsForWrongPassword() { login("bob","messerschmidt"); assertFalse(driver.getPageSource().contains("Welcome")); }
  • 20. Agenda ● Czym jest BDD ● Czym jest JBehave ● Praca z JBehave ● Podsumowanie
  • 21. 1. Napisz historyjki Scenario: Test the login works with valid credentials Given the login page When the user logs in with username: bob and password: password Then the word: Welcome should be on the page Scenario: Test login fails with wrong password Given the login page When the user logs in with username: bob and password: blah Then the word: Invalid should be on the page
  • 22. 2. Zmapuj historyjki do Javy @Given("the login page") public void gotoLoginPage() { driver.get("http://www.dummy.website.com"); } @When("the user logs in with username: $username and password: $password") public void login(String username, String password) { driver.findElement(By.name("username")).sendKeys(username); driver.findElement(By.name("password")).sendKeys(password); driver.findElement(By.name("update")).click(); } @Then("the word: $matchWord should be on the page") public void findWordInPage(@Named("matchWord") String matchWord){ assertThat(driver.getPageSource(),containsString(matchWord)); }
  • 23. Data Tables i DDT Scenario: Test login with valid and invalid data Given the login page When the user logs in with <username> and <password> Then the <matchWord> should be on the page Examples: |username |password |matchWord | |bob |password |Welcome | |bob |blah |Invalid | … … ...
  • 24. 3. Skonfiguruj narzędzie ● Embedder – klasa pełniąca punkt wejściowy konfiguracji JBehave ● Z Embeddera korzystają Embeddable – klasy uruchamiające historyjki ● JBehave dostarcza implementacji JUnit Runnera ● http://jbehave.org/reference/stable/developing- stories.html#configuring
  • 25. 4. Uruchom testy ● Można uruchamiać je jako testy Junit ● Maven, Ant ● Można uruchamiać historyjki lokalne jak i zdalne
  • 26. 4. Uruchom testy public class TraderStoryRunner { @Test public void runClasspathLoadedStoriesAsJUnit() { // Embedder defines the configuration and candidate steps Embedder embedder = new TraderEmbedder(); List<String> storyPaths = ... // use StoryFinder to look up paths embedder.runStoriesAsPaths(storyPaths); } @Test public void runURLLoadedStoriesAsJUnit() { // Embedder defines the configuration and candidate steps Embedder embedder = new URLTraderEmbedder(); List<String> storyPaths = ... // use StoryFinder to look up paths embedder.runStoriesAsPaths(storyPaths); } } ● TradeEmbedder / URLTradeEmbedder – definiują konfigurację używając wczytywania z classpath i zasobu URL
  • 27. 4. Uruchom testy public class YourStory extends JUnitStory/Stories { @org.testng.annotations.Test public void run() throws Throwable { super.run(); } }
  • 28. 5. Obejrzyj raport Obecnie wspierane formaty raportów: ● ConsoleOutput ● IdeOnlyConsoleOutput ● TxtOutput ● HtmlOutput ● HtmlTemplateOutput ● XmlOutput ● PostStoryStatisticCollector ● DelegatingStoryReporter ● Klasa StoryReportBuilder pozwala na konfigurowanie raportowania w kilku formatach na raz: CONSOLE, TXT, HTML, HTML_TEMPLATE oraz XML.
  • 31. Agenda ● Czym jest BDD ● Czym jest JBehave ● Praca z JBehave ● Podsumowanie
  • 32. Inne narzędzia do BDD Dla Javy: ● Cucumber JVM ● Concordion ● EasyB ● JDave ● Inne: ● Jasmine (JavaScript) ● Behat (PHP) ● MSpec
  • 33. JBehave vs Cucumber Podobne: ● Czysta Java ● Wsparcie dla Junit ● Szybkie ● Łatwe w użyciu Wady/Zalety Cucumber: ● wspiera features ● większa możliwość konfiguracji raportów (ładny konsolowy output, dodatkowe formaty) ● nie wspiera równoległych testy w JUnit ● słaba dokumentacja Wady/Zalety JBehave: ● bardzo dobra dokumentacja ● całkiem dobre formatowanie HTML dla raportów ● wspiera równoległe testy w JUnit ● wspiera tylko stories a nie features