The Codest
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Odvětví
    • Fintech a bankovnictví
    • E-commerce
    • Adtech
    • Healthtech
    • Výroba
    • Logistika
    • Automobilový průmysl
    • IOT
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
Šipka zpět ZPĚT
2016-08-19
Vývoj softwaru

BDD NA KOLEJÍCH

Michal Krezelewski

Dnešní programátoři používají při své každodenní práci stále více agilních postupů. Jejich přizpůsobení může být přínosné i pro projekty, které se řídí standardním životním cyklem vývoje softwaru. Automatické testování a TDD vnesly do naší práce více jistoty, usnadnily implementaci úprav stávajících funkcí a často nás vedly k lepšímu návrhu kódu. Nyní to však nestačí. Musíme přínosy testů posunout až na hranici možností a to BDD umožňuje. bDD staví na TDD a přidává k jeho postupům mnoho přidané hodnoty. Vnáší do projektu všudypřítomný jazyk, umožňuje lepší komunikaci mezi klientem a vývojáři. Nabízí mnoho pro projektové manažery a vedoucí, ale také značně usnadňuje život vývojářům. Dodržování zásad BDD nám dává jasné požadavky, testy jsou snáze pochopitelné a mohou sloužit jako dokumentace. BDD posouvá zaměření testovaných subjektů a dává nám jistotu, že testujeme to, co bychom testovat měli - chování.

Pokud používáte TDD, začít s BDD bude snadné - je to v podstatě soubor osvědčených postupů. BDD má sadu jednoduchých pravidel, která říkají, jak psát specifikace a co testovat. Specifikace se dělí na tři části: Given (nastavení podmínek testu), When (vyvolání akce na subjektu) a Then (tvrzení). Testy by měly mít popisné názvy a existující testovací rámce umožňují používat metody a aserce, které jsou podobné přirozenému jazyku - to vše dohromady dává nás testy, které jsou čitelné pro technické i netechnické uživatele. Při regresních testech se osvědčují dobré konvence pojmenování.

Součástí BDD je také sada pokynů pro testované subjekty. Na rozdíl od TDD přesouvá důraz z testování implementace na testování chování - a jeho použití vede k lepšímu návrhu a poskytuje větší flexibilitu při zavádění změn. Specifikace by měly být jako napsané a spustitelné požadavky klienta - ty vysokoúrovňové by měly fungovat jako akceptační testy. Cílem je psát testy tak, aby bylo nutné je měnit pouze při změně požadavků. Použití BDD nám dává jistotu, že testujeme to, co je skutečně třeba pokrýt, a je to pragmatičtější přístup než TDD.

Pokud chcete vidět BDD v akci, doporučujeme vám. Ruby. Je to výkonný a zábavný jazyk s vynikající sadou nástrojů pro BDD.

Okurka

Cucumber je nejoblíbenější framework pro BDD v jazyce Ruby. Zavádí speciální jazyk zvaný Gherkin, ve kterém budete psát své testy. Na rozdíl od RSpec jsou funkce popsané v Gherkinu prostým textem, ne kóda jako takový může - a měl by - být srozumitelný komukoli, především klientovi.

Funkce Cucumber vypadá takto (příklad převzat z wiki Cucumber):

 Funkce: Nějaký stručný, ale popisný text toho, co je požadováno.
    Textový popis obchodní hodnoty této funkce
    Obchodní pravidla, kterými se řídí rozsah funkce
    Jakékoli další informace, které usnadní pochopení funkce.

  Scénář: Určitá určitelná obchodní situace
    Vzhledem k nějaké předběžné podmínce
    A nějaká další předběžná podmínka
    Když nějaká akce aktéra
    A nějaká jiná akce
    A ještě jiná akce
    Pak je dosaženo nějakého testovatelného výsledku
    A stane se i něco dalšího, co můžeme zkontrolovat

  Scénář: Jiná situace
    ...

Funkce budou podrobně popsány později.

Použití Cucumber v Ruby on Rails

Instalace

První krok k použití okurky ve vašem projekt je jeho instalace. Stačí přidat tyto dva drahokamy do souboru Gemfile:

group :test do
  gem 'cucumber-rails', :require => false
  gem 'database_cleaner'
end

Svažte je spuštěním instalace svazkua vygenerujte skripty a adresáře Cucumberu pomocí následujícího příkazu:

kolejnice generate cucumber:install

Tím se vytvoří config/cucumber.yml, script/cucumber a funkce/ adresář, který bude obsahovat .feature a také definice kroků a podpůrné soubory. Chcete-li spustit své funkce, použijte nový příkaz rake:

hrábě na okurky

Funkce

Podívejme se blíže na funkce. Funkce je něco, co vaše aplikace má nebo dělá - například pravidelně zasílá newsletter nebo umožňuje uživateli veřejně sdílet své fotografie. Jedna funkce se skládá z více scénářů, které popisují, jak tato funkce funguje v různých kontextech.

Abychom si ukázali základní použití Cucumberu v systému Rails, napíšeme funkci od začátku. Tato ukázková funkce bude první, kterou napíšeme v aplikaci, kterou si ukážeme v příští druhé části tohoto článku. Tato aplikace umožní uživateli vytvářet položky a obchody (obchody prodávají položky) a následně vytvářet nákupní seznamy.

V nejjednodušší verzi aplikace po sestavení nákupního seznamu ukáže, ve kterých obchodech jsou položky, které uživatel chce, nejlevnější.

Nejprve vytvořte nový soubor s názvem create_item.feature v funkce/ adresář. V horní části adresáře .feature je soubor Funkce klíčové slovo, po kterém následuje jeho krátký popis. Například:

Funkce: Vytváření položek

Na následujících řádcích můžete napsat obchodní cíl, který bude tuto funkci implementovat. Protože Cucumber ignoruje text napsaný před prvním Scénářem, není nutné nic psát, ale rozhodně je to dobrý nápad.

   Snadné vytváření nákupních seznamů s položkami prodávanými v okolních obchodech
   Jako uživatel
   Chci přidat položky do systému

V úryvku výše vidíte poměrně oblíbený vzor, kterým můžete popsat obchodní cíle. Skládá se ze tří částí: proč je daná funkce nutná, kdo ji chce a jaká je. Tento formát samozřejmě dodržovat nemusíte, ale nezapomeňte do popisu zahrnout odpovědi na tyto tři otázky.

Scénáře

Dále napíšeme několik scénářů. Každý scénář začíná klíčovým slovem "Scenario" a obsahuje více kroků.

    Scénář: vytvoření jedinečné položky
      Vzhledem k tomu, že existuje položka "Mléko"
      Když přejdu na hlavní stránku
      A vytvořím položku "Chléb"
      Pak se mi v seznamu položek zobrazí "Chléb". 

Pokud tedy někdo vytvořil položku s názvem Mléko, pak je možné vytvořit položku Chléb, která se objeví v seznamu položek. Neměli bychom testovat vytvoření záznamu v databázi, protože tato skutečnost nemá pro zákazníka žádnou skutečnou hodnotu.

Kroky scénáře používají tři hlavní klíčová slova:

  • Vzhledem k tomu, že, pro doplnění kontextu scénáře
  • Když, pro popis akcí
  • Pak, pro popis výsledků

Je důležité si uvědomit, že Cucumber ignoruje krok klíčového slova, kterým začíná, a porovnává pouze pozdější část. Kroky tedy můžete začínat slovem "A" všude tam, kde vám to přijde přirozené. Jediným pravidlem pro výběr správného klíčového slova je, že Scénář musí být snadno pochopitelný.

Definice kroků

Spuštění nástroje Cucumber nyní poskytne tento výstup:

[...]
Funkce: Vytváření položek
  Snadné vytváření nákupních seznamů s položkami prodávanými v okolních obchodech
  Jako uživatel
  Chci přidat položky do systému

  Scénář: vytvoření jedinečné položky # features/create_item.feature:6
    Vzhledem k tomu, že existuje položka "Mléko" # features/create_item.feature:7
      Nedefinovaný krok: (Cucumber::Undefined): "existuje položka "Milk"" (Cucumber::Undefined)
[...]

Je to proto, že Cucumber neví, co máme na mysli, když řekneme "existuje položka Milk". Chcete-li svým krokům přidat nějaký význam, musíte je definovat v dokumentu step_definitions adresář.

Doporučeným způsobem, jak uspořádat definice kroků, je rozdělit je podle domén. Například většina kroků, které jsme vytvořili, patří do domény Položky. Měli bychom tedy vytvořit soubor s názvem step_definitions/item_steps.rb a umístěte do něj následující kód:

Zadáno "existuje položka "$name"" do |name|
  Fabricate :item, name: name
end

Když "Vytvářím položku "$name"" do |name|
  v rámci "#new_item" do
    fill_in "Name", with: name
    klik_na "Vytvořit"
  konec
konec

potom "V seznamu položek vidím "$name"" do |name|
  v rámci ".items" do
    expect(page).to have_content name
  end
end

Definice kroků obvykle vycházejí z Capybary. Pokud Capybaru neznáte, určitě se podívejte na odkazy na konci tohoto článku.

Existuje ještě jeden krok, který je třeba definovat a který se do kroků položky nevejde. Mohli byste ho zařadit do main_page_steps.rb:

Když "přejdu na hlavní stránku", udělám
  visit root_path
konec

Závěr

Jedná se o velmi jednoduchý příběh pro velmi jednoduchou funkci. Jeho účelem bylo demonstrovat základní koncepty BDD, jak jsou používány v Cucumberu. Psaní dobrých příběhů však vyžaduje trochu víc. Jako vývojář budete muset zcela změnit své myšlení - zapomenout na implementaci a místo toho se zaměřit na obchodní cíle. Cucumber tento přechod usnadňuje díky chytrému používání příběhů v prostém textu.

Zdroje, inspirace a zajímavé čtení:

  • https://github.com/cucumber/cucumber/wiki/Cucumber-Backgrounder
  • https://github.com/jnicklas/capybara
  • https://blog.engineyard.com/2009/15-expert-tips-for-using-cucumber
  • http://blog.codeship.com/cucumber-best-practices/
  • http://www.elabs.se/blog/15-you-re-cuking-it-wrong
  • https://github.com/strongqa/howitzer/wiki/Cucumber-Best-Practices

Související články

Ilustrace zdravotnické aplikace pro chytré telefony s ikonou srdce a rostoucím zdravotním grafem, označená logem The Codest, která představuje digitální zdraví a řešení HealthTech.
Vývoj softwaru

Softwarové vybavení pro zdravotnictví: a případy použití

Nástroje, na které se dnes zdravotnické organizace spoléhají, se v ničem nepodobají papírovým kartám z doby před desítkami let. zdravotnický software dnes podporuje zdravotnické systémy, péči o pacienty a moderní poskytování zdravotní péče v klinických a...

NEJKRÁSNĚJŠÍ
Abstraktní ilustrace klesajícího sloupcového grafu se stoupající šipkou a zlatou mincí symbolizující efektivitu nákladů nebo úspory. V levém horním rohu se zobrazuje logo The Codest se sloganem "In Code We Trust" na světle šedém pozadí.
Vývoj softwaru

Jak rozšířit tým vývojářů bez ztráty kvality produktu

Zvětšujete svůj vývojový tým? Zjistěte, jak růst, aniž byste museli obětovat kvalitu produktu. Tento průvodce se zabývá příznaky, že je čas na škálování, strukturou týmu, najímáním zaměstnanců, vedením a nástroji - a také tím, jak může The Codest...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

Vytváření webových aplikací odolných vůči budoucnosti: postřehy týmu odborníků The Codest

Zjistěte, jak společnost The Codest vyniká při vytváření škálovatelných, interaktivních webových aplikací pomocí nejmodernějších technologií, které poskytují bezproblémové uživatelské prostředí na všech platformách. Zjistěte, jak naše odborné znalosti podporují digitální transformaci a obchodní...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

10 nejlepších lotyšských společností zabývajících se vývojem softwaru

V našem nejnovějším článku se dozvíte o nejlepších lotyšských společnostech zabývajících se vývojem softwaru a jejich inovativních řešeních. Zjistěte, jak mohou tito technologičtí lídři pomoci pozvednout vaše podnikání.

thecodest
Podniková a škálovací řešení

Základy vývoje softwaru v jazyce Java: A Guide to Outsourcing Successfully

Prozkoumejte tuto základní příručku o úspěšném vývoji softwaru outsourcing Java, abyste zvýšili efektivitu, získali přístup k odborným znalostem a dosáhli úspěchu projektu s The Codest.

thecodest

Přihlaste se k odběru naší znalostní databáze a získejte aktuální informace o odborných znalostech z oblasti IT.

    O nás

    The Codest - Mezinárodní společnost zabývající se vývojem softwaru s technologickými centry v Polsku.

    Spojené království - ústředí

    • Kancelář 303B, 182-184 High Street North E6 2JA
      Londýn, Anglie

    Polsko - Místní technologická centra

    • Kancelářský park Fabryczna, Aleja
      Pokoju 18, 31-564 Krakov
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polsko

      The Codest

    • Home
    • O nás
    • Služby
    • Case Studies
    • Vědět jak
    • Kariéra
    • Slovník

      Služby

    • To Advisory
    • Vývoj softwaru
    • Vývoj backendu
    • Vývoj frontendů
    • Staff Augmentation
    • Vývojáři backendu
    • Cloudoví inženýři
    • Datoví inženýři
    • Další
    • Inženýři QA

      Zdroje

    • Fakta a mýty o spolupráci s externím partnerem pro vývoj softwaru
    • Z USA do Evropy: Proč se americké startupy rozhodly přesídlit do Evropy?
    • Srovnání technických vývojových center v zahraničí: Tech Offshore Evropa (Polsko), ASEAN (Filipíny), Eurasie (Turecko)
    • Jaké jsou hlavní výzvy CTO a CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2026 by The Codest. Všechna práva vyhrazena.

    cs_CZCzech
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech