Przejdź do głównej zawartości

Specflow czyli BDD w praktyce

Dzisiaj pokażę w praktyce w jaki sposób zbieram wymagania korzystając z narzędzia Specflow.
Na początku przypomnę nasze historie użtkownika.
Potem skonfigurujemy dodatek Specflow Visual Studio.
Na końcu pokażę jak wygląda język Gherkin i zaimplementujemy pierwszą historię użytkownika US1.

Oto lista funkcjonalności, które będę implementował w aplikacji Perfect Life:

US1: Jako użytkownik aplikacji mobilnej chcę ekran logowania aby mieć możliwość zapisywania swoich postępów
US2: Jako użytkownik aplikacji mobilnej chcę mieć kalkulator wskaźnika BMI aby móc mierzyć poziom swojej kondycji
US3: Jako użytkownik aplikacji mobilnej chcę widzieć wykresy aby móc wizualnie interpretować swoje postępy
US4: Jako użytkownik aplikacji mobilnej chcę mieć możliwość rozwiązania quizu, żeby zbadać wskaźnik Body Age
US5: Jako użytkownik aplikacji mobilnej chcę pobierać pliki PDF aby mieć dostęp do planów dietetycznych
US6: Jako administrator aplikacji chcę zapisywać dane telemetryczne aby móc analizować zmianę liczby użytkowników
US7: Jako użytkownik aplikacji mobilnej chcę mieć możliwość analizy własnego zdjęcia, aby móc obiektywnie sprawdzić na ile lat wyglądam

Zakładam, że korzystamy Visual Studio 2017. Oto instrukcja obsługi krok po kroku, która zaprowadzi nas do tego czym jest BDD(Behaviour Driven Design):

1) Instalujemy odpowiedni plugin, który możemy pobrać ze strony:
https://marketplace.visualstudio.com/items?itemName=TechTalkSpecFlowTeam.SpecFlowforVisualStudio2015

Plugin nazywa się Specflow i został stworzony przez firmę Techtalk. Obserwuję ten produkt od kilku lat i za każdym razem kiedy pojawia się nowa wersja Visual Studio (2012, 2013, 2015, 2017) to Techtalk wydaje kolejną edycję swojego pluginu. Dodać należy, że Specflow jest oficjalną implementacją standardu Cucumber dla języka C#. Oznacza to, że możemy korzystać z języka Gherkin do tworzenia scenariuszy testowych. Co więcej nasze scenariusze będą wyglądały tak samo w Specflow jak w innych implementacjach dla języka PHP, albo Javy. Zatem łatwo przenieść scenariusze do innych projektów.

2) Tworzymy nowy projekt testowy w Visual Studio.
3) Do projektu dodajemy nowy plik z rozszerzeniem .feature. Oczywiście plugin Specflow zasugeruje nam odpowiedni plik.
Dzięki rozszerzeniu specflow w Visual Studio mamy dostęp do nowych rodzajów plików. Ważne: Jeśli nie zainstalujemy dodatku Specflow, to nie będzie ich tutaj.



4) Tworzymy scenariusz testowy wewnątrz właśnie utworzonego pliku.
Zwykle scenariusze piszę w języku angielskim, ale tym razem wykorzystam język polski na potrzeby projektu Perfect Life.
Już jakiś czas temu odkryłem, że we frameworku Behat (implementacja standardu Cucumber dla języka PHP) istnieje możliwość tworzenia scenariuszy w językach innych niż angielski(w tym język polski). Przykładowo aby aktywować język polski wystarczy dodać na górze pliku ze scenariuszem linijkę:
# language: pl
. Jako że dodałem tę linijkę to podświetlanie składni w Visual Studio działa wyśmienicie. Oto rezultat:



Póki co mamy dwa scenariusze. Za chwile powiem do czego się nam ode przydadzą.

5) Tworzymy kroki testowe w języku C#. Ogromna zaleta BDD - możemy zamienić naszą dokumentację opracowaną w języku Gherkin na wykonywalne testy.
My nie będziemy dziś tego robić, bo interesuje nas jedynie dokumentacja. Warto jednak wiedzieć, że możemy zautomatyzować nasze testy za pomocą np. biblioteki webdriver i podłączyć je do naszych scenariuszy.
Kilka lat temu czytałem bloga mojego kolegi Jacka Norberta, który specjalizuje się w tematyce testów automatycznych. Znalazłem tam jedno kluczowe zdanie, które moim zdaniem jest kwintesencją koncepcji BDD. Brzmiało ono mniej więcej tak: "Główną korzyścią ze stosowania Acceptance Test Driven development(lub BDD) nie jest to, że zyskujemy działające testy, ale to, że zastosowana koncepcja poprawia komunikację w zespole programistycznym oraz komunikację z klientem". Miałem szczęście, że przeczytałem to zdanie kilka lat temu. Dzięki temu wiem na czym to wszystko polega i mogę skupić się bardziej na zbieraniu wymagań niż na implementacji samych testów w języku C#, czy PHP.


Wróćmy na chwilę do naszych scenariuszy: Jeden mówi o próbie logowania zakończonej sukcesem, a drugi o tym jak aplikacja powinna zadziałać kiedy użytkownik spróbuje zalogować się do aplikacji korzystając z nieprawidłowych danych. Zastanawiasz się w jaki sposób je teraz wykorzystamy?
Otóż w następnych dwóch tygodniach zaimplementuję te funkcjonalności tak aby teoretycznie mój klient mógł wziąć te scenariusze i zgodnie z nimi wykonać testy akceptacyjne. Dzięki temu, że ja jako programista mam dostęp do tych scenariuszy, wiem kiedy mogę stwierdzić, że funkcjonalność jest skończona a kiedy nie. Generalnie skutki wdrożenia koncepcji BDD w projektach informatycznych są takie, że zespół programistyczny pracuje wydajniej bo wie czego klient będzie od niego oczekiwał. I teraz bardzo ważna rzecz: Scenariusze powinny być uzgodnione z klientem przed każdym sprintem(Najlepiej dodajmy je do naszego dokumentu Definition of Ready). Dzięki temu programiści zaoszczędzą mnóstwo czasu ponieważ nie będą zmuszeni zbierać wymagań w trakcie sprintu. W efekcie zwiększa się ilość pracy jaką jesteśmy w stanie wykonać w trakcie sprintu. Ostatecznym skutkiem będzie to, że klient będzie bardziej zadowolony ponieważ będziemy mogli uzyskać produkt wyższej jakości w krótszym czasie. Tak to działa. Naprawdę warto.

Tak więc jutro zaczynamy sprint numer 1.
Czekajcie na więcej...

Komentarze

  1. Świetne podejście! Dziki temu wpisowi poznałem nowe narzędzie i będę z niecierpliwością czekał na kolejne wpisy z tej serii :-)

    OdpowiedzUsuń

Prześlij komentarz

Popularne posty z tego bloga

Aplikacja 'Perfect Life' - planowanie funkcjonalności

W poprzednim wpisie przedstawiłem budowę historii użytkownika(ang. User Story). Dzisiaj korzystając z tego narzędzia zaplanujemy kilka funkcjonalności. Czas na zaplanowanie funkcjonalności aplikacji mobilnej Perfect Life. Aplikacja jest tworzona w oparciu o technologię Xamarin.Forms. Póki co jednak abstrahując od rozwiązań technologicznych skupimy się na funkcjonalnościach. Dobre planowanie swojej pracy to podstawa sukcesu każdego projektu programistycznego. US1: Jako użytkownik aplikacji mobilnej chcę ekran logowania aby mieć możliwość zapisywania swoich postępów US2: Jako użytkownik aplikacji mobilnej chcę mieć kalkulator wskaźnika BMI aby móc mierzyć poziom swojej kondycji US3: Jako użytkownik aplikacji mobilnej chcę widzieć wykresy aby móc wizualnie interpretować swoje postępy US4: Jako użytkownik aplikacji mobilnej chcę mieć możliwość rozwiązania quizu, żeby zbadać wskaźnik Body Age US5: Jako użytkownik aplikacji mobilnej chcę pobierać pliki PDF aby mieć dostęp do planó...

Dziś Premiera Visual Studio 2017

Dzisiaj ważny dzień dla programistów .NET. Premiera środowiska programistycznego Visual Studio 2017. Relację na żywo można oglądać tutaj: https://launch.visualstudio.com/ Jutro będzie dzień warsztatów, w których możemy wziąć udział online. Nowe VS możemy pobrać ze strony: https://www.visualstudio.com/ Co ciekawe pobierając VS teraz otrzymasz 60 dni darmowego dostępu do Xamarin University. To ważne jeśli chcesz się nauczyć tworzyć aplikacje mobilne. Co nowego? Lepsza integracja z VSTS Live unit testing - zwróćmy uwagę na ikony po lewej stronie: Dodatkowe ikony: Wyszukiwanie metod po fragmencie nazwy. Code suggestions, czyli podpowiedzi na temat najlepszych praktyk w trakcie pisania kodu. Możemy zdefiniować własne sugestie dot. kodu i dodac własne konfiguracje edytora kodu: Dodatkowo pojawiły się dodatkowe ikony, dzięki którym łatwo się zorientować gdzie kończy się klasa, a gdzie namespace. Wygląda to nieźle. Inne usprawnienia o których mówił Scott Hanselman...

ASP.NET Core MVC - wdrożenie na Linuxie krok po kroku

Dzisiaj skupimy się na wdrożeniu aplikacji ASP.NET Core MVC. Po przeczytaniu tego artykułu będziesz potrafił uruchomić swoją pierwszą aplikację ASP.NET Core na maszynie wirtualnej z systemem Ubuntu 14. Załóżmy, że mamy nasza aplikację gotową i chcemy ją uruchomić. Jak najłatwiej to zrobić? Podczas debugowania możemy roboczo wykorzystać Visual Studio do uruchomienia aplikacji na IIS Express. Jednak w warunkach produkcyjnych kiedy chcemy wdrożyć aplikację na systemie Linux, musimy poszukać innego rozwiązania. Dlaczego? Bo Linux nie będzie obsługiwał ani visual Studio ani IIS Express, ponadto jeśli korzystamy z Continuous Deployment, to chcemy wdrożenie robić z poziomu konsoli. Jak pisałem w poprzednich postach, wraz z nadejściem ASP.NET Core MVC, mamy możliwość wdrażania aplikacji napisanych w C# na platformie Linux. To niezwykle istotne, bo przynosi ogromne korzyści, choćby dlatego, że ceny hostingu są kilka razy niższe dla maszyn z Linuxem niż z Windowsem. 1) Framework-depen...