{"id":6069,"date":"2018-10-08T16:33:02","date_gmt":"2018-10-08T14:33:02","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=6069"},"modified":"2023-01-20T15:20:32","modified_gmt":"2023-01-20T14:20:32","slug":"tworzenie-schematow-blokowych-i-pseudokodu-wspomagane-narzedziami","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/tworzenie-schematow-blokowych-i-pseudokodu-wspomagane-narzedziami\/","title":{"rendered":"Tworzenie schemat\u00f3w blokowych i pseudokodu wspomagane narz\u0119dziami"},"content":{"rendered":"\n<p>Je\u015bli przygotowujesz si\u0119 do egzaminu ISTQB z pewno\u015bci\u0105 trafisz na tematyk\u0119&nbsp;<strong>testowania opartego na strukturze<\/strong>. W du\u017cym uog\u00f3lnieniu opiera si\u0119 ono na testowaniu przep\u0142ywu sterowania i przep\u0142ywu danych.&nbsp;Przyk\u0142adowo, dla testowania przep\u0142ywu sterowania poziomu podstawowego sylabusa, tester b\u0119dzie sprawdza\u0142 instrukcje i decyzje, a dla poziomu zaawansowanego warunki, warunki w decyzjach, zmodyfikowane pokrycie warunk\u00f3w i decyzji, wielokrotne pokrycie warunk\u00f3w i decyzji, testowanie \u015bcie\u017cek i ga\u0142\u0119zi. Obydwie techniki wi\u0105\u017c\u0105 si\u0119 z projektowaniem i analiz\u0105 graf\u00f3w przep\u0142ywu, b\u0119dzie wi\u0119c wymagana przynajmniej podstawowa umiej\u0119tno\u015b\u0107 czytania kodu \u017ar\u00f3d\u0142owego i rozpisania go na schematy blokowe. Z pomoc\u0105 przyjdzie nam w\u00f3wczas&nbsp;<strong>code2flow<\/strong>.<\/p>\n\n\n\n<p>Na potrzeby wpisu skupimy si\u0119 na podstawowym testowaniu pokrycia instrukcji i decyzji, aby pokaza\u0107 mo\u017cliwo\u015bci aplikacji. W moim odczuciu sylabusy traktuj\u0105 ten temat 'po macoszemu\u2019, opisuj\u0105c go w kilku zdaniach bez odwo\u0142ywania si\u0119 do konkretnych przyk\u0142ad\u00f3w. Aby wi\u0119c zapozna\u0107 si\u0119 z wy\u017cej wymienionymi technikami, tester musi szuka\u0107 tej wiedzy na w\u0142asn\u0105 r\u0119k\u0119, czyli w ksi\u0105\u017ckach technicznych, prezentacjach, tutorialach. Moim celem jest pokaza\u0107, jak mo\u017cna u\u0142atwi\u0107 proces nauki tego zagadnienia przy u\u017cyciu narz\u0119dzia do generowania schemat\u00f3w blokowych. Ale najpierw s\u0142\u00f3w kilka o pseudokodzie i schematach blokowych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Pseudokod<\/strong><\/h3>\n\n\n\n<p>Pseudokod jest lu\u017anym zapisem imituj\u0105cym kod. Charakteryzuje si\u0119 tym, \u017ce nie odnosi si\u0119 bezpo\u015brednio do \u017cadnego j\u0119zyka programowania. S\u0142u\u017cy do opisania dzia\u0142ania danej funkcji lub ca\u0142ego programu. Dobrze sformatowany i opisany pseudokod umo\u017cliwia testerowi oprogramowania stworzenie schematu blokowego, dzi\u0119ki kt\u00f3remu \u0142atwe b\u0119dzie obliczenie takich metryk jak pokrycie instrukcji, pokrycie decyzji, czy nawet zmodyfikowanego pokrycia warunk\u00f3w i decyzji.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Schematy blokowe<\/strong><\/h3>\n\n\n\n<p>Schemat blokowy to nic innego jak wizualny zapis analizowanego fragmentu kodu\/-pseudokodu. Schemat blokowy sk\u0142ada si\u0119 z&nbsp;<strong>blok\u00f3w instrukcji<\/strong>&nbsp;\u2013 dla r\u00f3\u017cnych rodzaj\u00f3w instrukcji bloki maj\u0105 r\u00f3\u017cne kszta\u0142ty \u2013 oraz&nbsp;<strong>strza\u0142ek<\/strong>, kt\u00f3re okre\u015blaj\u0105 kolejno\u015b\u0107 wykonywania tych instrukcji. Sk\u0142ada si\u0119 z bloku pocz\u0105tkowego, bloku ko\u0144cowego, bloku wej\u015bcia \/ wyj\u015bcia, bloku operacji, procedury, decyzji oraz \u0142\u0105cznik\u00f3w i punkt\u00f3w koncentracji. W ramach poznawania schemat\u00f3w blokowych, tester oprogramowania powinien zna\u0107 bloki: pocz\u0105tkowe, ko\u0144cowe, operacji, decyzji oraz punkty koncentracji. Wymagana b\u0119dzie r\u00f3wnie\u017c znajomo\u015b\u0107 podstawowych instrukcji warunkowych oraz p\u0119tli. W\u015br\u00f3d nich najwa\u017cniejsza b\u0119d\u0105:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>If<\/li><li>If\u2026then<\/li><li>for<\/li><li>do\u2026while<\/li><li>while\u2026do<\/li><li>SWITCH-CASE<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Narz\u0119dzia do generowania schemat\u00f3w blokowych i pseudokodu<\/strong><\/h3>\n\n\n\n<p>Internet obfituje w gotowe rozwi\u0105zania, kt\u00f3re mog\u0105 u\u0142atwi\u0107 nam nauk\u0119 tworzenia schemat\u00f3w blokowych oraz czytania pseudokodu. Czynnikami, kt\u00f3re bra\u0142em pod uwag\u0119 podczas swoich poszukiwa\u0144 by\u0142y: mo\u017cliwo\u015b\u0107 darmowego wypr\u00f3bowania funkcji programu oraz (ewentualnie) \u0142atwo\u015b\u0107 w instalacji. Zar\u00f3wno popularny&nbsp;<strong>Lucidchart<\/strong>, jak i&nbsp;<strong>Flowgorithm<\/strong>&nbsp;nie przekona\u0142y mnie do siebie, w pierwszym przypadku wymagaj\u0105c wykupienia licencji bez mo\u017cliwo\u015bci pr\u00f3bnego wykorzystania funkcji, a w drugim wymagaj\u0105c instalacji oprogramowania na swoim komputerze. Idealnym rozwi\u0105zaniem okaza\u0142a si\u0119 by\u0107&nbsp;<strong>internetowa<\/strong>&nbsp;aplikacja&nbsp;<strong>code2flow<\/strong>. Mo\u017cna j\u0105 znale\u017a\u0107 pod linkiem:&nbsp;<a href=\"https:\/\/code2flow.com\/app\" rel=\"nofollow\" >code2flow<\/a>.<\/p>\n\n\n\n<p>Znacz\u0105c\u0105 zalet\u0105 przemawiaj\u0105c\u0105 za wybraniem w\u0142a\u015bnie tego narz\u0119dzia by\u0142 dla mnie fakt, \u017ce&nbsp;<strong>nie wymaga<\/strong>&nbsp;ona od nas zainstalowania \u017cadnego dodatkowego oprogramowania na komputerze (poza przegl\u0105dark\u0105 internetow\u0105).<\/p>\n\n\n\n<p>Aplikacja sk\u0142ada si\u0119 z dw\u00f3ch sekcji. Pierwsza jest\u00a0<strong>edytorem<\/strong>\u00a0umo\u017cliwiaj\u0105cym wprowadzenie\u00a0<strong>pseudokodu<\/strong>. Autor zadba\u0142 r\u00f3wnie\u017c o odpowiednie formatowanie tekstu oraz mo\u017cliwo\u015b\u0107 wpisywania\u00a0<strong>sk\u0142adni<\/strong>, dzi\u0119ki czemu edytor jeszcze bardziej przypomina\u00a0<a href=\"https:\/\/pl.wikipedia.org\/wiki\/Zintegrowane_%C5%9Brodowisko_programistyczne\" rel=\"nofollow\" >IDE<\/a><strong>.<\/strong><\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h4 class=\"wp-block-heading\"><strong>Mo\u017cliwo\u015bci aplikacji<\/strong><\/h4>\n\n\n\n<p>Mo\u017cliwo\u015bci edytora mog\u0105 kojarzy\u0107 si\u0119 z popularnym j\u0119zykiem znacznik\u00f3w&nbsp;<strong>Markdown<\/strong>. Dodatkowo, poza czystym tekstem edytor przyjmuje instrukcje:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Instrukcje warunk\u00f3w (<strong>if\/else if<\/strong>)<\/li><li>S\u0142owa kluczowe&nbsp;<strong>return<\/strong><\/li><li>Instrukcja&nbsp;<strong>switch\u2026case\u2026break<\/strong><\/li><li>P\u0119tle&nbsp;<strong>while\/for\/do<\/strong>&nbsp;i s\u0142owa kluczowe&nbsp;<strong>goto<\/strong><\/li><li>Funkcje<\/li><\/ul>\n\n\n\n<p>Umo\u017cliwia r\u00f3wnie\u017c komentowanie wybranych linii za pomoc\u0105 uko\u015bnik\u00f3w&nbsp;<strong>\/\/<\/strong>. Takie komentarze na schemacie blokowym konwertowane s\u0105 w \u2018chmurki\u2019 zawieraj\u0105ce komentowany tekst\/linie kodu.<\/p>\n\n\n\n<p>Przydatn\u0105 mo\u017cliwo\u015bci\u0105 aplikacji mo\u017ce okaza\u0107 si\u0119 pod\u015bwietlanie konkretnych linii kodu na wygenerowanym schemacie blokowym, dzi\u0119ki kt\u00f3remu nawet osoba bez przygotowania technicznego zobaczy kod i jego wywo\u0142ania w przyst\u0119pnej graficznej formie. U\u017cytkownik ma r\u00f3wnie\u017c mo\u017cliwo\u015b\u0107 dodatkowego dostosowania aspekt\u00f3w kosmetycznych utworzonego grafu w zak\u0142adce&nbsp;<strong>APPEARANCE&nbsp;<\/strong>oraz mo\u017cliwo\u015b\u0107 zapisu schematu do format\u00f3w:&nbsp;<strong>PDF<\/strong>,&nbsp;<strong>SVG<\/strong>,&nbsp;<strong>PNG<\/strong>&nbsp;w sekcji&nbsp;<strong>DOWNLOAD<\/strong>. Wi\u0119cej mo\u017cliwo\u015bci samego edytora opisane zosta\u0142o w sekcji&nbsp;<strong>HELP.&nbsp;<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/code2flow_edytor-Testing.jpg\"><img decoding=\"async\" width=\"448\" height=\"928\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/code2flow_edytor-Testing.jpg\" alt=\"code2flow edytor Testing - Tworzenie schemat\u00f3w blokowych i pseudokodu wspomagane narz\u0119dziami\" class=\"wp-image-18732\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/code2flow_edytor-Testing.jpg 448w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/code2flow_edytor-Testing-145x300.jpg 145w\" sizes=\"(max-width: 448px) 100vw, 448px\" \/><\/a><\/figure><\/div>\n<\/div>\n<\/div>\n\n\n\n<p>Druga sekcja jest stron\u0105 wy\u015bwietlaj\u0105c\u0105 wynik pseudokodu w formie schematu blokowego.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/code2flow_schemat_blokowy-Testing.jpg\"><img decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/code2flow_schemat_blokowy-Testing-1024x576.jpg\" alt=\"code2flow schemat blokowy Testing - Tworzenie schemat\u00f3w blokowych i pseudokodu wspomagane narz\u0119dziami\" class=\"wp-image-18734\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/code2flow_schemat_blokowy-Testing-1024x576.jpg 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/code2flow_schemat_blokowy-Testing-300x169.jpg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/code2flow_schemat_blokowy-Testing-768x432.jpg 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/code2flow_schemat_blokowy-Testing-1536x864.jpg 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/code2flow_schemat_blokowy-Testing-555x312.jpg 555w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/code2flow_schemat_blokowy-Testing.jpg 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Schematy blokowe zastosowane w przyk\u0142adach dalszej cz\u0119\u015bci wpisu s\u0105 wyeksportowane za pomoc\u0105 aplikacji&nbsp;<strong>code2flow<\/strong>. Aplikacja umo\u017cliwia r\u00f3wnie\u017c dostosowanie formatu wy\u015bwietlanego schematu blokowego oraz jego wydrukowanie. Co ciekawe, istnieje r\u00f3wnie\u017c wersja aplikacji, kt\u00f3ra integruje si\u0119 z&nbsp;<strong>Jir\u0105<\/strong>, oprogramowaniem do \u015bledzenia b\u0142\u0119d\u00f3w i zarz\u0105dzania projektami. Dla zainteresowanych wypr\u00f3bowaniem lub wdro\u017ceniem narz\u0119dzia do swojego projektu w narz\u0119dziu&nbsp;<strong>Jira,&nbsp;<\/strong>umieszczam&nbsp;<a href=\"https:\/\/marketplace.atlassian.com\/apps\/1211531\/code2flow-for-jira?hosting=server&amp;tab=overview\" rel=\"nofollow\" >link<\/a>&nbsp;do Atlassian Marketplace. Jak proces generowania schematu z pseudokodu wygl\u0105da w praktyce? Przyk\u0142ady przedstawi\u0119 poni\u017cej.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Testowanie pokrycia instrukcji<\/strong><\/h3>\n\n\n\n<p>Pokrycie instrukcji oblicza si\u0119 przez podzielenie liczby wykonywalnych instrukcji pokrytych przez (zaprojektowane lub wykonane) przypadki testowe, przez liczb\u0119 wszystkich wykonywalnych instrukcji w testowanym kodzie. Przep\u0142yw powinien przej\u015b\u0107 przez wszystkie bloki instrukcji pseudokodu najkr\u00f3tsz\u0105 drog\u0105.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Przyk\u0142ad 1<\/strong><\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nint a,b\nif (a &gt; 0) {\nprintf (&quot;a jest dodatnia&quot;);\n}\nif (b &gt; 0) {\nprintf (&quot;dodatnia&quot;);\n}\nend\n<\/pre><\/div>\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk1_testowanie_decyzji-Testing.png\"><img decoding=\"async\" width=\"714\" height=\"1024\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk1_testowanie_decyzji-Testing-714x1024.png\" alt=\"przyk1 testowanie instrukcji Testing - Tworzenie schemat\u00f3w blokowych i pseudokodu wspomagane narz\u0119dziami\" class=\"wp-image-18736\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk1_testowanie_decyzji-Testing-714x1024.png 714w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk1_testowanie_decyzji-Testing-209x300.png 209w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk1_testowanie_decyzji-Testing.png 744w\" sizes=\"(max-width: 714px) 100vw, 714px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Aby pokry\u0107 wszystkie instrukcje tego pseudokodu, wymagany b\u0119dzie&nbsp;<strong>jeden<\/strong>&nbsp;przypadek testowy. Przep\u0142yw oznaczono&nbsp;<strong>kolorem<\/strong>&nbsp;<strong>czerwonym.&nbsp;<\/strong>Dzi\u0119ki takiemu wizualnemu zapisowi widzimy wszystkie&nbsp;<strong>bloki instrukcji<\/strong>&nbsp;zawarte we fragmencie pseudokodu (<strong>niebieskie prostok\u0105ty<\/strong>).<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Przyk\u0142ad 2<\/strong><\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nint a, b, c, d;\nif (a &gt; 0) {\nprintf (&quot;a jest dodatnia&quot;);\nif (c==0) {\nprintf (&quot;c jest r\u00f3wne 0&quot;);\n}\n} else {\nprintf (&quot;a nie jest dodatnia&quot;);\n}\nif (b &gt; 0) {\nprintf (&quot;b jest dodatnia&quot;);\nif (d==0) {\nprintf (&quot;d jest r\u00f3wne 0&quot;);\n}\n} else {\nprintf (&quot;b nie jest dodatnia&quot;);\n}\nend\n<\/pre><\/div>\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk2_testowanie_instrukcji-Testing.png-765x1024-1.png\"><img decoding=\"async\" width=\"765\" height=\"1024\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk2_testowanie_instrukcji-Testing.png-765x1024-1.png\" alt=\"przyk2 testowanie instrukcji Testing.png - Tworzenie schemat\u00f3w blokowych i pseudokodu wspomagane narz\u0119dziami\" class=\"wp-image-18742\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk2_testowanie_instrukcji-Testing.png-765x1024-1.png 765w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk2_testowanie_instrukcji-Testing.png-765x1024-1-224x300.png 224w\" sizes=\"(max-width: 765px) 100vw, 765px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Aby w pe\u0142ni pokry\u0107 instrukcje w pseudokodzie, wymagane b\u0119d\u0105&nbsp;<strong>dwa<\/strong>&nbsp;przypadki testowe. Pierwszy przep\u0142yw oznaczono&nbsp;<strong>kolorem czerwonym<\/strong>&nbsp;i obejmuje on&nbsp;<strong>bloki instrukcji<\/strong>&nbsp;dla warunk\u00f3w<strong>&nbsp;True<\/strong>, drugi za\u015b&nbsp;<strong>kolorem niebieskim<\/strong>&nbsp;i obejmuje on&nbsp;<strong>bloki instrukcji<\/strong>&nbsp;dla warunk\u00f3w&nbsp;<strong>False<\/strong>.<\/p>\n\n\n\n<p><strong>Uwaga<\/strong>: Wyj\u0105tkiem tutaj s\u0105 warunki&nbsp;<strong>False<\/strong>&nbsp;dla&nbsp;<strong>(c==0)<\/strong>&nbsp;orac&nbsp;<strong>(d==0)<\/strong>, kt\u00f3re nie posiadaj\u0105&nbsp;<strong>blok\u00f3w instrukcji<\/strong>!<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Przyk\u0142ad 3<\/strong><\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nint x, a;\nwhile (x &amp;lt;=a) {\nprintf (&quot;x nie jest wi\u0119sze od a&quot;);\nx = x+1;\n}\nprintf (&quot;x jest wi\u0119sze od a&quot;);\nend\n<\/pre><\/div>\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk3_testowanie_instrukcji-Testing.png-1024x658-1.png\"><img decoding=\"async\" width=\"1024\" height=\"658\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk3_testowanie_instrukcji-Testing.png-1024x658-1.png\" alt=\"przyk3 testowanie instrukcji Testing.png - Tworzenie schemat\u00f3w blokowych i pseudokodu wspomagane narz\u0119dziami\" class=\"wp-image-18746\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk3_testowanie_instrukcji-Testing.png-1024x658-1.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk3_testowanie_instrukcji-Testing.png-1024x658-1-300x193.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk3_testowanie_instrukcji-Testing.png-1024x658-1-768x494.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Aby w pe\u0142ni pokry\u0107 instrukcje w pseudokodzie, wymagany b\u0119dzie&nbsp;<strong>jeden<\/strong>&nbsp;przypadek testowy.&nbsp;<strong>P\u0119tla<\/strong>&nbsp;wykonywana jest jednorazowo. Jej wykonanie pozwala w pe\u0142ni pokry\u0107 wszystkie bloki instrukcji za jednym przej\u015bciem (<strong>kolor czerwony<\/strong>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Testowanie pokrycia decyzji<\/strong><\/h3>\n\n\n\n<p>Pokrycie decyzji, spokrewnione z testowaniem ga\u0142\u0119zi, polega na zmierzeniu jaki odsetek wynik\u00f3w decyzji (np. wyniku prawda lub fa\u0142sz instrukcji if) zosta\u0142 przetestowany przez zestaw test\u00f3w. W technice testowania decyzji projektuje si\u0119 przypadki testowe tak, aby pokry\u0107 okre\u015blone wyniki decyzji. Jest wyliczane przez podzielenie liczby wynik\u00f3w decyzji pokrytych przez (zaprojektowane lub wykonane) przypadki testowe przez liczb\u0119 wszystkich wynik\u00f3w decyzji znajduj\u0105cych si\u0119 w testowanym kodzie.<\/p>\n\n\n\n<p>Testowanie decyzji jest jedn\u0105 z form testowania przep\u0142ywu sterowania, poniewa\u017c pod\u0105\u017ca za konkretnym przep\u0142ywem sterowania przez punkty decyzyjne. Pokrycie decyzji jest mocniejsze ni\u017c pokrycie instrukcji. 100% pokrycia decyzji gwarantuje 100% pokrycia instrukcji, ale nie odwrotnie. Wida\u0107 to wyra\u017anie w przyk\u0142adach poni\u017cej, gdzie podczas testowania decyzji brane s\u0105 pod uwag\u0119&nbsp;<strong>wszystkie bloki instrukcji<\/strong>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Przyk\u0142ad 1<\/strong><\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nint a,b;\nif (a &gt; 0) {\nprintf (&quot;a jest dodatnia&quot;);\n}\nif (b &gt; 0) {\nprintf (&quot;b jest dodatnia&quot;);\n}\nend\n<\/pre><\/div>\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk1_testowanie_decyzji-Testing.png\"><img decoding=\"async\" width=\"714\" height=\"1024\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk1_testowanie_decyzji-Testing-714x1024.png\" alt=\"przyk1 testowanie decyzji Testing - Tworzenie schemat\u00f3w blokowych i pseudokodu wspomagane narz\u0119dziami\" class=\"wp-image-18736\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk1_testowanie_decyzji-Testing-714x1024.png 714w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk1_testowanie_decyzji-Testing-209x300.png 209w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk1_testowanie_decyzji-Testing.png 744w\" sizes=\"(max-width: 714px) 100vw, 714px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Do pe\u0142nego pokrycia decyzji b\u0119d\u0105 wymagane&nbsp;<strong>dwa<\/strong>&nbsp;przypadki testowe. Pierwszy przypadek testowy pokrywa wszystkie&nbsp;<strong>bloki instrukcji<\/strong>&nbsp;(<strong>kolor<\/strong>&nbsp;<strong>czerwony<\/strong>) dla warunk\u00f3w&nbsp;<strong>True<\/strong>, a drugi przypadek testowy pokrywa warunki&nbsp;<strong>False<\/strong>&nbsp;dla decyzji (<strong>kolor<\/strong>&nbsp;<strong>niebieski<\/strong>).<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Przyk\u0142ad 2<\/strong><\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nint a, b, c, d;\nif (a &gt; 0) {\nprintf (&quot;a jest dodatnia&quot;);\nif (c==0) {\nprintf (&quot;c jest r\u00f3wne 0&quot;);\n}\n} else {\nprintf (&quot;a nie jest dodatnia&quot;);\n}\nif (b &gt; 0) {\nprintf (&quot;b jest dodatnia&quot;);\nif (d==0) {\nprintf (&quot;d jest r\u00f3wne 0&quot;);\n}\n} else {\nprintf (&quot;b nie jest dodatnia&quot;);\n}\nend\n<\/pre><\/div>\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk2_testowanie_decyzji-Testing.png.png\"><img decoding=\"async\" width=\"765\" height=\"1024\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk2_testowanie_decyzji-Testing.png-765x1024.png\" alt=\"przyk2 testowanie decyzji Testing.png - Tworzenie schemat\u00f3w blokowych i pseudokodu wspomagane narz\u0119dziami\" class=\"wp-image-18740\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk2_testowanie_decyzji-Testing.png-765x1024.png 765w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk2_testowanie_decyzji-Testing.png-224x300.png 224w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk2_testowanie_decyzji-Testing.png-768x1029.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk2_testowanie_decyzji-Testing.png-1147x1536.png 1147w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk2_testowanie_decyzji-Testing.png.png 1506w\" sizes=\"(max-width: 765px) 100vw, 765px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Do pe\u0142nego pokrycia decyzji b\u0119d\u0105 wymagane&nbsp;<strong>trzy<\/strong>&nbsp;przypadki testowe. Pierwszy przep\u0142yw (<strong>kolor czerwony<\/strong>) pokrywa wszystkie&nbsp;<strong>bloki instrukcji<\/strong>&nbsp;i warunki&nbsp;<strong>True&nbsp;<\/strong>dla decyzji. Drugi przep\u0142yw (<strong>kolor niebieski<\/strong>) pokrywa wszystkie&nbsp;<strong>bloki instrukcji<\/strong>&nbsp;dla warunku&nbsp;<strong>False<\/strong>, z wy\u0142\u0105czeniem warunku&nbsp;<strong>False&nbsp;<\/strong>dla instrukcji&nbsp;<strong>(c==0)<\/strong>&nbsp;i&nbsp;<strong>(d==0)<\/strong>, kt\u00f3re nie maj\u0105&nbsp;<strong>blok\u00f3w instrukcji<\/strong>. Trzeci przypadek testowy pokrywa wspomniane warunki&nbsp;<strong>False<\/strong>&nbsp;dla instrukcji&nbsp;<strong>(c==0)<\/strong>&nbsp;i&nbsp;<strong>(d==0)<\/strong>&nbsp;(<strong>kolor \u017c\u00f3\u0142ty<\/strong>).<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Przyk\u0142ad 3<\/strong><\/h4>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nint x, a;\nwhile (x &amp;lt;=a) {\nprintf (&quot;x nie jest wi\u0119sze od a&quot;);\nx = x+1;\n}\nprintf (&quot;x jest wi\u0119sze od a&quot;);\nend\n<\/pre><\/div>\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk3_testowanie_decyzji-Testing.png-1024x658-1.png\"><img decoding=\"async\" width=\"1024\" height=\"658\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk3_testowanie_decyzji-Testing.png-1024x658-1.png\" alt=\"przyk3 testowanie decyzji Testing.png - Tworzenie schemat\u00f3w blokowych i pseudokodu wspomagane narz\u0119dziami\" class=\"wp-image-18744\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk3_testowanie_decyzji-Testing.png-1024x658-1.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk3_testowanie_decyzji-Testing.png-1024x658-1-300x193.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/10\/przyk3_testowanie_decyzji-Testing.png-1024x658-1-768x494.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Podobnie jak w przypadku testowania&nbsp;<strong>instrukcji<\/strong>, przez&nbsp;<strong>p\u0119tle<\/strong>&nbsp;poruszamy si\u0119 jednokrotnie, a wi\u0119c dla wymienionego przypadku wymagany b\u0119dzie&nbsp;<strong>jeden<\/strong>&nbsp;przypadek testowy (<strong>kolor czerwony<\/strong>). W przypadku, kiedy p\u0119tla by\u0142aby zagnie\u017cd\u017cona w warunku wielokrotnego wyboru jak&nbsp;<strong>SWITCH-CASE<\/strong>, liczba przypadk\u00f3w testowych wymaganych do pokrycia decyzji wzro\u015bnie.<\/p>\n\n\n\n<p>Podsumowuj\u0105c, uwa\u017cam, \u017ce warto zainteresowa\u0107 si\u0119 aplikacj\u0105&nbsp;<strong>code2flow<\/strong>. Przyznaj\u0119, \u017ce celowo zostawiam pewien niedosyt, aby zach\u0119ci\u0107 Was do wypr\u00f3bowania dzia\u0142ania aplikacji w praktyce, poeksperymentowa\u0107 z zagnie\u017cd\u017caniem warunk\u00f3w i p\u0119tli. Jestem pewien, \u017ce w ten spos\u00f3b szybciej opanujecie tworzenie pseudokodu, czytanie schemat\u00f3w blokowych oraz obliczanie pokrycia kodu. Jednocze\u015bnie, opanowanie tego materia\u0142u mo\u017ce zapewni\u0107 wam zaliczenie podczas egzaminu ISTQB, czego Wam z tego miejsca \u017cycz\u0119.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>Chcesz lepiej zrozumie\u0107 aplikacje i systemy, kt\u00f3re testujesz? Do\u0142\u0105cz do ModernTester, poznaj najpotrzebniejsze narz\u0119dzia, frameworki oraz j\u0119zyki programowania i \u0107wicz na specjalnie przygotowanych \u015brodowiskach testowych:&nbsp;<a href=\"https:\/\/moderntester.sii.pl\/\" rel=\"nofollow\" >Platforma e-learningowa ModernTester<\/a><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;6069&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;14&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;4.7&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;4.7\\\/5 ( votes: 14)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Tworzenie schemat\u00f3w blokowych i pseudokodu wspomagane narz\u0119dziami&quot;,&quot;width&quot;:&quot;130.8&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 130.8px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            4.7\/5 ( votes: 14)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Je\u015bli przygotowujesz si\u0119 do egzaminu ISTQB z pewno\u015bci\u0105 trafisz na tematyk\u0119&nbsp;testowania opartego na strukturze. W du\u017cym uog\u00f3lnieniu opiera si\u0119 ono &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/tworzenie-schematow-blokowych-i-pseudokodu-wspomagane-narzedziami\/\">Continued<\/a><\/p>\n","protected":false},"author":177,"featured_media":6114,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":6,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1317],"tags":[668,666,407,664,671,667,672,663,670,669,466,662,661,665],"class_list":["post-6069","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testowanie","tag-code2flow","tag-generator","tag-istqb","tag-istqbfl","tag-pokrycie","tag-pseudokod","tag-schematy-blokowe","tag-sterowania-danych","tag-testowanie-decyzji","tag-testowanie-instrukcji","tag-testy","tag-testy-oparte-na-strukturze","tag-testy-strukturalne","tag-whitebox"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/09\/arrows-box-business-Testing.jpg","category_names":["Testowanie"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/6069"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/177"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=6069"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/6069\/revisions"}],"predecessor-version":[{"id":18834,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/6069\/revisions\/18834"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/6114"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=6069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=6069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=6069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}