<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Podstawy_testowania</id>
	<title>Podstawy testowania - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Podstawy_testowania"/>
	<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Podstawy_testowania&amp;action=history"/>
	<updated>2026-05-02T18:59:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://training-course-material.com/index.php?title=Podstawy_testowania&amp;diff=12073&amp;oldid=prev</id>
		<title>91.121.208.99 at 19:24, 17 July 2013</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Podstawy_testowania&amp;diff=12073&amp;oldid=prev"/>
		<updated>2013-07-17T19:24:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Cat|Testing}}&lt;br /&gt;
{{Testing Links}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobleprog&amp;quot; headingmark=&amp;quot;⌘&amp;quot; incmark=&amp;quot;…&amp;quot; scaled=&amp;quot;false&amp;quot; font=&amp;quot;Trebuchet MS&amp;quot; &amp;gt;&lt;br /&gt;
;title: Podstawy testowania oprogramowania&lt;br /&gt;
;author: Leszek Albrzykowski (NobleProg Ltd)&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Omawiane zagadnienia ⌘==&lt;br /&gt;
* Definicja błędu&lt;br /&gt;
* Powody wystąpienia błędów&lt;br /&gt;
* Czym jest test&lt;br /&gt;
* Testy jako badanie hipotez&lt;br /&gt;
* Kategorie omawianych testów&lt;br /&gt;
* Testy w procesie wytwarzania oprogramowania&lt;br /&gt;
* Rola testów w metodykach zwinnych&lt;br /&gt;
&lt;br /&gt;
== Definicja błędu ⌘==&lt;br /&gt;
W jaki sposób możemy zdefiniować błąd?&lt;br /&gt;
=== Brak funkcjonalności ⌘===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Brak funkcjonalność oprogramowania opisanej w specyfikacji&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
=== Nie działająca prawidłowo funkcjonalność ⌘===&lt;br /&gt;
* Brak funkcjonalność oprogramowania opisanej w specyfikacji&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Funkcjonalność oprogramowanie działająca niezgodnie ze specyfikacją&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
=== Funkcjonalność spoza specyfikacji ⌘===&lt;br /&gt;
* Brak funkcjonalność oprogramowania opisanej w specyfikacji&lt;br /&gt;
* Funkcjonalność oprogramowanie działająca niezgodnie ze specyfikacją&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Funkcjonalność oprogramowania nieujęta w specyfikacji&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
=== Przykłady błędów ⌘===&lt;br /&gt;
Przykłady błędów na przykładzie systemu klasy CRM&lt;br /&gt;
==== Brak funkcjonalności ⌘====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Brak funkcjonalność oprogramowania opisanej w specyfikacji&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Według specyfikacji administratorzy systemu powinni mieć możliwość filtrowania klientów, którym wystawiona została faktura pro forma.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wersja dostarczona przez wytwórcę oprogramowania nie posiada tej funkcjonalności.&lt;br /&gt;
==== Nie działająca prawidłowo funkcjonalność ⌘====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Funkcjonalność oprogramowanie działająca niezgodnie ze specyfikacją&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Według specyfikacji administratorzy systemu powinni mieć możliwość filtrowania klientów, którym wystawiona została faktura pro forma.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pomimo ustawienia odpowiednich filtrów, oprogramowanie traktuje faktury pro forma tak jak zwykłe faktury.&lt;br /&gt;
==== Funkcjonalność spoza specyfikacji ⌘====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Funkcjonalność oprogramowania nieujęta w specyfikacji&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Według specyfikacji administratorzy systemu powinni mieć możliwość filtrowania klientów, którym wystawiona została faktura pro forma.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Panel administracyjny zawiera listę dodatkowych filtrów (jak data wystawienia faktury) o których nie było mowy w specyfikacji.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Czy klient ponosi koszt wdrożenia tej funkcjonalności?&lt;br /&gt;
* Czy panel administracyjny nie jest zbyt skomplikowany?&lt;br /&gt;
* Czy dodatkowa funkcjonalność nie jest dodana automatycznie przez narzędzie/framework z jakiego korzysta dostawca oprogramowania i omyłkowo nieusunięta?&lt;br /&gt;
== Powody wystąpienia błędu ⌘==&lt;br /&gt;
=== Niewdrożenie funkcjonalności ⌘===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Funkcjonalność ujęta w specyfikacji nie została wdrożona&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
=== Niepoprawne wdrożenie funkcjonalności ⌘===&lt;br /&gt;
* Funkcjonalność nie została wdrożona&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Funkcjonalność została wdrożona niepoprawnie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
=== Róźnice pomiędzy środowiskiem testowy a produkcyjnym ⌘===&lt;br /&gt;
* Funkcjonalność nie została wdrożona&lt;br /&gt;
* Funkcjonalność została wdrożona niepoprawnie&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Funkcjonalność była testowana w innym środowisku niż docelowe&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
=== Problemy z integracją ⌘===&lt;br /&gt;
* Funkcjonalność nie została wdrożona&lt;br /&gt;
* Funkcjonalność została wdrożona niepoprawnie&lt;br /&gt;
* Funkcjonalność była testowana w innym środowisku niż docelowe&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Funkcjonalność nie uwzględniała integracji z innymi modułami (konflikt funkcjonalności)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
=== Pozostałe czynniki ⌘===&lt;br /&gt;
* Funkcjonalność nie została wdrożona&lt;br /&gt;
* Funkcjonalność została wdrożona niepoprawnie&lt;br /&gt;
* Funkcjonalność była testowana w innym środowisku niż docelowe&lt;br /&gt;
* Funkcjonalność nie uwzględniała integracji z innymi modułami (konflikt funkcjonalności)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Pozostałe czynniki&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Czym jest test ⌘==&lt;br /&gt;
=== Hipoteza ⌘===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hipoteza&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Według Słownika Języka Polskiego [1] to:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;przypuszczenie wysunięte dla objaśnienia jakiegoś zjawiska, wymagające sprawdzenia&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kazimierza Ajdukiewicz [2]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;bierzemy pod uwagę jakąś […] rację, co do której nie wiemy jeszcze czy jest prawdziwa, fałszywa i podajemy ją procedurze sprawdzenia&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Test jako sprawdzanie hipotezy ⌘===&lt;br /&gt;
Test, jest więc procedurą sprawdzania hipotezy&lt;br /&gt;
=== Przykład hipotezy ⌘===&lt;br /&gt;
Hipoteza 1: Moduł kalkulujący VAT prawidłowo wylicza stawkę podatku dla zadanej kwoty&lt;br /&gt;
&lt;br /&gt;
=== Test jako funkcja ⌘===&lt;br /&gt;
Jeśli za &amp;#039;&amp;#039;H&amp;#039;&amp;#039; przyjmiemy zbiór hipotez a za &amp;#039;&amp;#039;W&amp;#039;&amp;#039; zbiór złożony z elementów &amp;#039;&amp;#039;prawda&amp;#039;&amp;#039;, &amp;#039;&amp;#039;nieprawda&amp;#039;&amp;#039;,&lt;br /&gt;
to test możemy opisać jako funkcję, która danej hipotezie przypisuje wartość &amp;#039;&amp;#039;prawda&amp;#039;&amp;#039; lub &amp;#039;&amp;#039;nieprawda&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;i tylko jedną z tych wartości&amp;#039;&amp;#039;&amp;#039;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;T(H) \to W&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Przykład oceny hipotezy ⌘===&lt;br /&gt;
Dla hipotezy związanej z modułem kalkulatora VAT jako test może posłużyć poniższy przykład:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 float result = Calculator.calculateVat(1.000);&lt;br /&gt;
 assertEquals(result, 1.230);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Funkcja &amp;#039;&amp;#039;assertEquals()&amp;#039;&amp;#039; porównuje dwa argumenty i zwaraca wartość &amp;#039;&amp;#039;true&amp;#039;&amp;#039; lub &amp;#039;&amp;#039;false&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Kategorie omawianych testów ⌘==&lt;br /&gt;
W zależności od kontekstu testy możemy pogrupować w następujące zbiory:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ze względu na perspektywę testu (znajomości testowanego zagadnienia):&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Testy białej skrzynki&lt;br /&gt;
* Testy czarnej skrzynki&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ze względu na podmiot przeprowadzający testy:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Testy manualne&lt;br /&gt;
* Testy automatyczne&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ze względu na powód/poziom/perspektywę testowania:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Testy jednostkowe&lt;br /&gt;
* Testy funkcjonalne&lt;br /&gt;
* Testy regresyjne&lt;br /&gt;
* Testy behawioralne&lt;br /&gt;
=== Ze względu na perspektywę testu - testy białej skrzynki ⌘===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testy białej skrzynki&amp;#039;&amp;#039;&amp;#039; - Testy wykonywane z tej perspektywy &amp;#039;&amp;#039;&amp;#039;zakładają znajomość szczegółów implementacji funkcjonalności&amp;#039;&amp;#039;&amp;#039; (np. kodu źródłowego) - &amp;#039;&amp;#039;&amp;#039;perspektywa wewnętrzna systemu&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Ze względu na perspektywę testu - testy czarnej skrzynki ⌘===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Testy białej skrzynki - Testy wykonywane z tej perspektywy zakładają znajomość szczegółow implementacji funkcjonalności (np. kodu źródłowego) - perspektywa wewnętrzna systemu.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testy czarnej skrzynki&amp;#039;&amp;#039;&amp;#039; - Testy wykonywane z tej perspektywy &amp;#039;&amp;#039;&amp;#039;nie zakładają znajomości szczegółów implementacji funkcjonalności&amp;#039;&amp;#039;&amp;#039; (np. kodu źródłowego) - &amp;#039;&amp;#039;&amp;#039;perspektywa zewnętrzna systemu&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
=== Ze względu na podmiot przeprowadzający testy - testy manualne ⌘===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testy manualne&amp;#039;&amp;#039;&amp;#039; - Wykonywane przez człowieka&lt;br /&gt;
&lt;br /&gt;
=== Ze względu na podmiot przeprowadzający testy - testy automatyczne ⌘===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Testy manualne - Wykonywane przez człowieka&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testy automatyczne&amp;#039;&amp;#039;&amp;#039; - Wykonywane przez oprogramowanie&lt;br /&gt;
=== Ze względu na powód/poziom/perspektywę testowania - testy jednostkowe ⌘===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testy jednostkowe&amp;#039;&amp;#039;&amp;#039; - Sprawdzające poprawność na poziomie &amp;#039;&amp;#039;jednostek&amp;#039;&amp;#039; oprogramowania: metod, funkcji etc.&lt;br /&gt;
=== Ze względu na powód/poziom/perspektywę testowania - testy funkcjonalne ⌘===&lt;br /&gt;
* Testy jednostkowe - Sprawdzające poprawność na poziomie &amp;#039;&amp;#039;jednostek&amp;#039;&amp;#039; oprogramowania: metod, funkcji etc.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testy funkcjonalne&amp;#039;&amp;#039;&amp;#039; - Sprawdzenie działania aplikacji zgodnie ze specyfikacją&lt;br /&gt;
=== Ze względu na powód/poziom/perspektywę testowania - testy regresyjne ⌘===&lt;br /&gt;
* Testy jednostkowe - Sprawdzające poprawność na poziomie &amp;#039;&amp;#039;jednostek&amp;#039;&amp;#039; oprogramowania: metod, funkcji etc.&lt;br /&gt;
* Testy funkcjonalne - Sprawdzenie działania aplikacji zgodnie ze specyfikacją&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testy regresyjne&amp;#039;&amp;#039;&amp;#039; - Sprawdzające czy nowe funkcjonalności nie wpłynęły negatywnie na funkcjonalności wcześniej wdrożone&lt;br /&gt;
=== Ze względu na powód/poziom/perspektywę testowania - testy behawioralne ⌘===&lt;br /&gt;
* Testy jednostkowe - Sprawdzające poprawność na poziomie &amp;#039;&amp;#039;jednostek&amp;#039;&amp;#039; oprogramowania: metod, funkcji etc.&lt;br /&gt;
* Testy funkcjonalne - Sprawdzenie działania aplikacji zgodnie ze specyfikacją&lt;br /&gt;
* Testy regresyjne - Sprawdzające czy nowe funkcjonalności nie wpłynęły negatywnie na funkcjonalności wcześniej wdrożone&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testy behawioralne&amp;#039;&amp;#039;&amp;#039; - Sprawdzające funckjonalność programu z perspektywy eksperta dziedziny. Testy te są połączeniem testów TDD oraz DDD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testy w procesie wytwarzania oprogramowania ⌘==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Możemy wyróżnić dwa główne trendy zwizane z chronologią wykonywania testów w procesie wytwarzania oprogramowania:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Testy wykonywane są po wdrożeniu funkcjonalności&lt;br /&gt;
* Testy tworzone są i uruchamiane przed wdrożeniem funkcjonalności, następnie implementowana jest funkcjonalność &amp;quot;pokrywająca&amp;quot; testy a na końcu testy uruchamiane są ponownie&lt;br /&gt;
&lt;br /&gt;
=== Testy w procesie wytwarzania oprogramowania - tworzenie testów po wdrożeniu funkcjonalności ⌘===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testy wykonywane są po wdrożeniu funkcjonalności&amp;#039;&amp;#039;&amp;#039; - Podejście ze starszym rodowodem i wciąż wielokrotnie stosowane.&lt;br /&gt;
&lt;br /&gt;
=== Testy w procesie wytwarzania oprogramowania - tworzenie testów przed wdrożeniu funkcjonalności ⌘===&lt;br /&gt;
* Testy wykonywane są po wdrożeniu funkcjonalności - Podejście ze starszym rodowodem i wciąż wielokrotnie stosowane.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testy tworzone są i uruchamiane przed wdrożeniem funkcjonalności, następnie implementowana jest funkcjonalność &amp;quot;pokrywająca&amp;quot; testy a na końcu testy uruchamiane są ponownie&amp;#039;&amp;#039;&amp;#039; - To podejście znane jest pod nazwą &amp;#039;&amp;#039;&amp;#039;Test Driven Development (TDD)&amp;#039;&amp;#039;&amp;#039; i zyskujące coraz większą popularność na przestzreni ostatnich lat.&lt;br /&gt;
&lt;br /&gt;
== Zalety testowania oprogramowania ⌘==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zalety testowania oprogramowania - wykluczenie znaczącej ilości błędów ⌘===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Wykluczenie znaczącej ilości błędów&amp;#039;&amp;#039;&amp;#039; - Testowanie oprogramowania na podstawie przygotowanych scenariuszy oraz automatyzacja testów znacząco wpływa na ilość zmniejszenia błędów oprogramowania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zalety testowania oprogramowania - szybsza diagnoza błędów ⌘===&lt;br /&gt;
* Wykluczenie znaczącej ilości błędów - Testowanie oprogramowania na podstawie przygotowanych scenariuszy oraz automatyzacja testów znacząco wpływa na ilość zmniejszenia błędów oprogramowania&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Szybsza diagnoza błędów&amp;#039;&amp;#039;&amp;#039; - Podobnie jak w pierweszym przypadku. Automatyczne testy, przeprowadzane przez maszynę a nie człowieka pozwalają na znacznie szybsze &amp;#039;&amp;#039;wychwycenie punktów&amp;#039;&amp;#039; w oprogramowania , które nie działają prawidłowo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zalety testowania oprogramowania - zwiększenie pewności ⌘===&lt;br /&gt;
* Wykluczenie znaczącej ilości błędów - Testowanie oprogramowania na podstawie przygotowanych scenariuszy oraz automatyzacja testów znacząco wpływa na ilość zmniejszenia błędów oprogramowania&lt;br /&gt;
* Szybsza diagnoza błędów - Podobnie jak w pierweszym przypadku. Automatyczne testy, przeprowadzane przez maszynę a nie człowieka pozwalają na znacznie szybsze &amp;#039;&amp;#039;wychwycenie punktów&amp;#039;&amp;#039; w oprogramowania , które nie działają prawidłowo&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Zwiększenie pewności&amp;#039;&amp;#039;&amp;#039; - Zarówno z perspektywy programisty jak i dostawcy oprogramiowania, testowany regularnie kod wpływa na pewność o jego niezawodności&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zalety testowania oprogramowania - łatwiejszy rozwój i integracja ⌘===&lt;br /&gt;
* Wykluczenie znaczącej ilości błędów - Testowanie oprogramowania na podstawie przygotowanych scenariuszy oraz automatyzacja testów znacząco wpływa na ilość zmniejszenia błędów oprogramowania&lt;br /&gt;
* Szybsza diagnoza błędów - Podobnie jak w pierweszym przypadku. Automatyczne testy, przeprowadzane przez maszynę a nie człowieka pozwalają na znacznie szybsze &amp;#039;&amp;#039;wychwycenie punktów&amp;#039;&amp;#039; w oprogramowania , które nie działają prawidłowo&lt;br /&gt;
* Zwiększenie pewności - Zarówno z perspektywy programisty jak i dostawcy oprogramiowania, testowany regularnie kod wpływa na pewność o jego niezawodności&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Łatwiejszy rozwój i integracja&amp;#039;&amp;#039;&amp;#039; - Testowany kod jest łatwiejszy w procesie utrzymania, rozwoju i integracji&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zalety testowania oprogramowania - obniżenie kosztów ⌘===&lt;br /&gt;
* Wykluczenie znaczącej ilości błędów - Testowanie oprogramowania na podstawie przygotowanych scenariuszy oraz automatyzacja testów znacząco wpływa na ilość zmniejszenia błędów oprogramowania&lt;br /&gt;
* Szybsza diagnoza błędów - Podobnie jak w pierwszym przypadku. Automatyczne testy, przeprowadzane przez maszynę a nie człowieka pozwalają na znacznie szybsze &amp;#039;&amp;#039;wychwycenie punktów&amp;#039;&amp;#039; w oprogramowania , które nie działają prawidłowo&lt;br /&gt;
* Zwiększenie pewności - Zarówno z perspektywy programisty jak i dostawcy oprogramiowania, testowany regularnie kod wpływa na pewność o jego niezawodności&lt;br /&gt;
* Łatwiejszy rozwój i integracja - Testowany kod jest łatwiejszy w procesie utrzymania, rozwoju i integracji&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Obniżenie kosztów&amp;#039;&amp;#039;&amp;#039; - Pomimo początkowych wyższych nakładów finansowych na tworzenie oprogramowania (czas poświęcony na przygotowanie testów) opartego o testy w dalszej perspektywie zazwyczaj znacznie obniża koszty utrzymania, rozwoju i integracji&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zalety testowania oprogramowania - testy jako dokumentacja ⌘===&lt;br /&gt;
* Wykluczenie znaczącej ilości błędów - Testowanie oprogramowania na podstawie przygotowanych scenariuszy oraz automatyzacja testów znacząco wpływa na ilość zmniejszenia błędów oprogramowania&lt;br /&gt;
* Szybsza diagnoza błędów - Podobnie jak w pierwszym przypadku. Automatyczne testy, przeprowadzane przez maszynę a nie człowieka pozwalają na znacznie szybsze &amp;#039;&amp;#039;wychwycenie punktów&amp;#039;&amp;#039; w oprogramowania , które nie działają prawidłowo&lt;br /&gt;
* Zwiększenie pewności - Zarówno z perspektywy programisty jak i dostawcy oprogramiowania, testowany regularnie kod wpływa na pewność o jego niezawodności&lt;br /&gt;
* Łatwiejszy rozwój i integracja - Testowany kod jest łatwiejszy w procesie utrzymania, rozwoju i integracji&lt;br /&gt;
* Obniżenie kosztów - Pomimo początkowych wyższych nakładów finansowych na tworzenie oprogramowania (czas poświęcony na przygotowanie testów) opartego o testy w dalszej perspektywie zazwyczaj znacznie obniża koszty utrzymania, rozwoju i integracji&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testy jako dokumentacja&amp;#039;&amp;#039;&amp;#039; - Zarówno testy czarnej jak i białej skrzynki stanowią znaczące dopełnienie dokumentacji anie kiedy jeden z jej najistotniejszych elementów&lt;br /&gt;
&lt;br /&gt;
=== Zalety testowania oprogramowania - testy jako zrozumienie logiki wdrażanego systemu przed implementacją ⌘===&lt;br /&gt;
* Wykluczenie znaczącej ilości błędów - Testowanie oprogramowania na podstawie przygotowanych scenariuszy oraz automatyzacja testów znacząco wpływa na ilość zmniejszenia błędów oprogramowania&lt;br /&gt;
* Szybsza diagnoza błędów - Podobnie jak w pierwszym przypadku. Automatyczne testy, przeprowadzane przez maszynę a nie człowieka pozwalają na znacznie szybsze &amp;#039;&amp;#039;wychwycenie punktów&amp;#039;&amp;#039; w oprogramowania , które nie działają prawidłowo&lt;br /&gt;
* Zwiększenie pewności - Zarówno z perspektywy programisty jak i dostawcy oprogramiowania, testowany regularnie kod wpływa na pewność o jego niezawodności&lt;br /&gt;
* Łatwiejszy rozwój i integracja - Testowany kod jest łatwiejszy w procesie utrzymania, rozwoju i integracji&lt;br /&gt;
* Obniżenie kosztów - Pomimo początkowych wyższych nakładów finansowych na tworzenie oprogramowania (czas poświęcony na przygotowanie testów) opartego o testy w dalszej perspektywie zazwyczaj znacznie obniża koszty utrzymania, rozwoju i integracji&lt;br /&gt;
* Testy jako dokumentacja - Zarówno testy czarnej jak i białej skrzynki stanowią znaczące dopełnienie dokumentacji a niekiedy jeden z jej najistotniejszych elementów&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testy jako zrozumienie logiki wdrażanego systemu przed implementacją&amp;#039;&amp;#039;&amp;#039; - W procesie wytwarzania oprogramowania opartym o TDD, przed implementacją, tworzone są testy i już na tym etapie planowana jest (weryfikowana) docelowa logika aplikacji co ułatwia zrozumienie problemów przez zespół programistów oraz umożliwia uniknięcie problemów związanych z implementacją funkcjonalności niezgodnych ze specyfikacją&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Trudna droga w kierunku bezbłędnie działającego oprogramowania  ⌘==&lt;br /&gt;
=== Problem z niezawodonścią - czy możemy stworzyć produkt doskonały? ⌘===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nigdy nie można mieć pewności o tym, że dostarczony produkt będzie działał niezawodnie!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Za cel warto postawić sobie tworzenie oprogramowania niezawodnego choć de facto nasze działania będą jedynie minimalizować szansę wystpienia błedów.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Problem z niezawodonścią - wystąpienie błędu to funkcja wielu zmiennych ⌘===&lt;br /&gt;
Zazwyczaj wystąpienie błędu spowodowane jest wieloma czynnikami, których nie spodziewaliśmy się na początku.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Przykładem może być katastrofa promu Columbia, gdzie na tragiczny finał lotu wpłyneły takie czynniki jak problemy z czujnikami, oderwanie się pianki ochronnej na zewnątrz promu i w końcu uszkodzenie jego struktury.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jeśli potrafilibyśmy określić więc funkcję określającą powody wystąpienia błędów, żylibyśmy w świecie doskonałych urządzeń a tak nie jest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Poniżej znajduje się metoda testująca poprawności adresu e-mail:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 public static boolean validate(string email) {&lt;br /&gt;
    pattern = Pattern.compile(&lt;br /&gt;
        &amp;quot;Some proper regular expression here&amp;quot;&lt;br /&gt;
    );&lt;br /&gt;
    matcher = pattern.matcher(email);&lt;br /&gt;
    return matcher.matches();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Czy faktycznie mamy pewność, że wprowadzone adresy e-mail są poprawne jeśli założymy, że wyrażenie regularne jest sformułowane prawidłowo?&lt;br /&gt;
&lt;br /&gt;
=== Odpowiedni zespół ⌘===&lt;br /&gt;
Niezwykle ważnym aspektem w procesie wytwarzania oprogramowania jest zespół i jego wiedza. Niejednokrotnie decyzja o tworzeniu testów do oprogramowania wiąże się z koniecznością utworzenie nowego, dedykowanego w tym kierunku działu firmy. Ponadto do kosztu wdrożenia projektu konieczne jest doliczenie czasu na przygotowanie i uruchamianie testów.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Niezrozumienie dziedziny problemu ⌘===&lt;br /&gt;
Stworzenie testów nie wykluczy problemów z niezrozumieniem dziedziny problemu i błędną specyfikacją. Istnieje więc możliwość, że przygotowane testy, sprawdzać będą funkcjonalność niezgodną z wymaganiami klienta.&lt;br /&gt;
&lt;br /&gt;
== Przypisy ⌘==&lt;br /&gt;
# http://sjp.pl/hipoteza&lt;br /&gt;
# Polski filozof i logik, reprezentant szkoły lwowsko-warszawskiej&lt;/div&gt;</summary>
		<author><name>91.121.208.99</name></author>
	</entry>
</feed>