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

Unleash the power of ChatGPT in your C# applications with NGpt - C# OpenAI GPT client

Meet NGpt - OpenAI GPT C# client library that will make your conversations with ChatGPT a breeze! Have you ever been struggling building your own smart AI application in C#? Well, now you can use ChatGpt inside your application! Introducing NGpt, the powerful .NET library that lets you integrate ChatGPT seamlessly into your C# applications. No more nigts spent on building your own AI solitions, no more convoluted logic and building complex business rules - just pure AI bliss. In this blog post, we'll dive into the wonderful world of NGpt and show you how easy it is to use. You might even find a few laughs along the way. The Magic of NGpt NGpt is a transient fault-tolerant .NET 6 OpenAI client that simplifies ChatGPT integration for C# developers. It's like your friendly neighborhood Spider-Man - always there to help you out when you need it most. With just your OpenAI API key, you can start coding AI applications in C# faster than you can say "Peter Parker." Let&

How to call webAPI service in Xamarin?

In the last few weeks I worked on the web service written in ASP.NET Core. I had a plan to connect the Xamarin application to this web service. Today I'll show you how you can connect your Xamarin app to web service located anywhere in the cloud. First we need to have a web service deployed, which is our server-side part of the system. I describe how to create a web service in ASP.NET COre in my previous post: . Today I'll demonstrate how it works from client perspective, in our case it's Xamarin.Forms application but web application or desktop application can use exactly the same code. This is the great benefit of using C# language - we can use the same code on multiple platforms. OK, I bet you're interested in the code. Let's jump to the code. This is the final version of the client class that I can use to save and retrieve data from web service: The class design is straightforward. It has 2 public methods which encapsulate 2 functionalities: adding s