Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Coś przystępnego o BDD

Chciałbym poczytać coś w miarę łopatologicznego o BDD. Czytałem troszkę, ale chcę mieć pewność, że tak naprawdę wiem, jak to działa, a nie, że wydaje mi się, że działa.

Możecie coś polecić?
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Coś przystępnego o BDD

a co to jest BDD? Czy to to?
BDD is a second-generation, outside-in, pull-based, multiple-stakeholder, multiple-scale, high-automation, agile methodology. It describes a cycle of interactions with well-defined outputs, resulting in the delivery of working, tested software that matters.

czy to nie jakieś kolejne pospolite ruszenie? Co wyróżnia BDD od innych? Bo z DDD chyba nie ma to nic wspólnego...
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Coś przystępnego o BDD

Tak, o to chodzi. Tylko co to właściwie znaczy?

Projektujemy nasze oprogramowanie najpierw określając zachowanie jakiego oczekujemy i cały czas testujemy, czy to co powstaje spełnia nasze oczekiwania. Rozszerzamy TDD przez użycie elementów DDD, czyli np. wzorca Factory, Repository, Entity, następnie wydzielamy w projekcie miejsca dla Domain, gdzie trzymamy wszystkie te entities i całą logikę biznesową i wszystkie obiekty repozytoriów. W unit testach tworzymy przykłady, mockujemy je i wstrzykujemy do testowanych obiektów.

Niestety, takie rozumienie BDD mnie nie satysfakcjonuje.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Coś przystępnego o BDD

Borysław Bobulski:
Tak, o to chodzi. Tylko co to właściwie znaczy?

Projektujemy nasze oprogramowanie najpierw określając zachowanie jakiego oczekujemy i cały czas testujemy, czy to co powstaje spełnia nasze oczekiwania. Rozszerzamy TDD przez użycie elementów DDD, czyli np. wzorca Factory, Repository, Entity, następnie wydzielamy w projekcie miejsca dla Domain, gdzie trzymamy wszystkie te entities i całą logikę biznesową i wszystkie obiekty repozytoriów. W unit testach tworzymy przykłady, mockujemy je i wstrzykujemy do testowanych obiektów.

Niestety, takie rozumienie BDD mnie nie satysfakcjonuje.

bo o czyj "bechawior" tu chodzi programisty czy zamawiającego ???:)
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Coś przystępnego o BDD

Zamawiający oczekuje konkretnych zachowań, więc temu mają służyć testy - sprawdzaniu, czy sprostaliśmy zachowaniom zamawiającego
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Coś przystępnego o BDD

Borysław Bobulski:
Zamawiający oczekuje konkretnych zachowań, więc temu mają służyć testy - sprawdzaniu, czy sprostaliśmy zachowaniom zamawiającego

ok ale, co to znaczy "zachowywać się"? Zwraca oczekiwane dane czy reaguje zmianą koloru na dotknięcie? Bo w tym pierwszym przypadku jakoś tego nie widzę...
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Coś przystępnego o BDD

Wszelkiego rodzaju xDD będąc związane z ruchem Agile zakładają ścisłą kooperację pomiędzy klientem i programistą. Dlatego BDD dotyczy zarówno klienta jak i programisty.

W BDD chodzi bardziej o testy funkcjonalne a w TDD bardziej o testy jednostkowe. Zresztą, samo TDD jako takie jest bardziej techniczną wersją BDD.

Zaś zachowanie, o którym rozmawiamy, jest określone w acceptance criteria. Jeśli system spełnia wszystkie acceptance criteria, to zachowuje się poprawnie, jeśli nie spełnia choć jednego - system nie jest w porządku.

Tworzymy pewne szablony, aby opisać w nich acceptance criteria. Te szablony opierają się na zasadzie: G/W/T lub A/A/A (Given When Then lub Arrange Act Assert). Wszelkie inaczej napisane testy w zasadzie będą skutkowały tym, że czytający je nie będą wiedzieć:
1) o co chodzi w teście
2) jakie dane są używane do testów
3) co jest testowane
4) jaki skutek został stwierdzony

Wszystkie nazwy metod testujących powinny zaczynać się od should i określać już w nazwie co powinno się stać.

Dla przykładu takie story w scenariuszu według schematy G/W/T :

TITLE: Klient chce wybrać gotówkę
GIVEN (kto jest bohaterem i jak się zaczyna historia, jakim wydarzeniem): Ja, jako klient podchodzę do bankomatu,
WHEN (czego bohater chce i w jakich okolicznościach): chcę wybrać gotówkę z bankomatu,
THEN (co skutkuje, dzięki czemu): dzięki czemu nie muszę czekać w kolejce w banku //opisujemy korzyść jaka zachodzi dla nas

Szablon taki pozwala podzielić story na trzy części i zautomatyzować je w teście.

Przykład dla A/A/A:
TITLE: Przyjmujący zamówienie wysyła e-mail o zamówieniu do sprzedawcy
ARRANGE (zrób coś takiego...): Przygotuj dane wejściowe do maila
ACT (ponieważ zachowanie takie ...): Ponieważ wysłanie maila z zamówieniem
ASSERT (powinno skutkować tak...): Powinno skutkować otrzymaniem od sprzedawcy e-maila (Assert if seller has received email)

Jak widać GWT i AAA są bardzo do siebie podobne. When i Act opisują zachowanie. Given i Arrange - określają początek historii i dane wejściowe, Assert określa wynik testu, Then opisuje osiągnięte korzyści.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Coś przystępnego o BDD

Borysław Bobulski:
Zaś zachowanie, o którym rozmawiamy, jest określone w acceptance criteria. Jeśli system spełnia wszystkie acceptance criteria, to zachowuje się poprawnie, jeśli nie spełnia choć jednego - system nie jest w porządku.

ok, a czy nie jest tak, że opisane scenariuszami przypadki użycia nie są wystarczającym testem akceptacyjnym? Robię tak od lat i działa, pytam bo jakoś mi to wygląda na ponowne odkrywanie koła...
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Coś przystępnego o BDD

Use case (jakaś akcja - tworzone przez projektantów i architektów systemowych) i user case (scenariusz uwzględniający zrobienie jakiejś akcji, uwzględniający motywacje, środowisko, warunki dla użytkownika - tworzone na potrzeby specjalistów od kontaktów z końcowym klientem) to dane, które należałoby porównać z wynikami działania programu, jeśli mielibyśmy się przekonać, że program działa tak jak powinien.

Same w sobie nie mają na celu automatycznego testowania oprogramowania, które napisali programiści. Do tego służy BDD. Do sprawdzenia poprawności oprogramowania. Gdy używamy BDD nie potrzeba człowieka. Wyeliminowanie czynnika ludzkiego zaoszczędza czas i w sumie gwarantuje większą niezawodność testów.
Maciej Aniserowicz

Maciej Aniserowicz software
developer/architect

Temat: Coś przystępnego o BDD

Na NDC 2011 było kilka sesji o BDD, mogę polecić. http://ndc2011.no/agenda.aspx
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: Coś przystępnego o BDD

Borysław Bobulski:
Use case (jakaś akcja - tworzone przez projektantów i architektów systemowych) i user case (scenariusz uwzględniający zrobienie jakiejś akcji, uwzględniający motywacje, środowisko, warunki dla użytkownika - tworzone na potrzeby specjalistów od kontaktów z końcowym klientem) to dane, które należałoby porównać z wynikami działania programu, jeśli mielibyśmy się przekonać, że program działa tak jak powinien.

no to mamy:
Use Case - akcja dialogu z systemem, np. wystawienie dokumentu faktury
User Case - proces sprzedaży, w którym wystawienie faktury jest jednym z etapów, dla całości tworzy kontekst - to się nazywa model procesu biznesowego z opisem jego wartości dodanej
Same w sobie nie mają na celu automatycznego testowania oprogramowania, które napisali programiści. Do tego służy BDD.

automatyczne testowanie nie, sadzam ludzi, mają wykonać swoja pracę i jak i m się uda to jest dobrze

Do sprawdzenia poprawności oprogramowania. Gdy używamy BDD nie potrzeba człowieka. Wyeliminowanie czynnika ludzkiego zaoszczędza czas i w sumie gwarantuje większą niezawodność testów.

Z tym się zgadzam w 100%, ja w projektach analitycznych eliminuje człowieka gdzie to tylko możliwe :)
Borysław B.

Borysław B. Mgr inżynier
informatyki,
właściciel Matrix
Reliability

Temat: Coś przystępnego o BDD

Maciej Aniserowicz:
Na NDC 2011 było kilka sesji o BDD, mogę polecić. http://ndc2011.no/agenda.aspx

Dzięki za te filmy :)

Następna dyskusja:

Coś z nieco innej beczki...




Wyślij zaproszenie do