-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!news.chmurka.net!.POSTED!not-for-mail
From: Andrzej Jarzabek <a...@g...com>
Newsgroups: pl.comp.programming
Subject: Re: pl. usenet o agile
Date: Tue, 23 Jul 2013 01:16:02 +0100
Organization: news.chmurka.net
Lines: 68
Message-ID: <kski07$nqj$1@somewhere.invalid>
References: <kroiv1$p67$1@speranza.aioe.org>
<4...@4...com>
<51e5880e$0$1222$65785112@news.neostrada.pl>
<ks5dga$ei6$1@somewhere.invalid>
<51e84c47$0$1265$65785112@news.neostrada.pl>
<ks9sck$h0l$1@somewhere.invalid>
<3...@4...com>
<ksan9m$aue$1@node2.news.atman.pl>
<51e908d1$0$1467$65785112@news.neostrada.pl>
<ksb20l$9hd$1@node1.news.atman.pl>
<51e90fe1$0$1221$65785112@news.neostrada.pl>
<ksb5kv$p53$1@node2.news.atman.pl>
<m...@4...com>
<ksbguk$pgj$1@node1.news.atman.pl>
<a...@n...plus.net>
<ksdj68$2la$1@node2.news.atman.pl> <kskajk$d3h$3@node2.news.atman.pl>
NNTP-Posting-Host: 0543b90f.skybroadband.com
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: somewhere.invalid 1374538568 24403 5.67.185.15 (23 Jul 2013 00:16:08 GMT)
X-Complaints-To: abuse-news.(at).chmurka.net
NNTP-Posting-Date: Tue, 23 Jul 2013 00:16:08 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130620
Thunderbird/17.0.7
In-Reply-To: <kskajk$d3h$3@node2.news.atman.pl>
X-Authenticated-User: ajarzabek
Xref: news-archive.icm.edu.pl pl.comp.programming:204168
[ ukryj nagłówki ]On 22/07/2013 23:09, Edek wrote:
> Szarym od mżawki świtem Sat, 20 Jul 2013 10:53:26 +0200, Sebastian Biały
> wyrzucił pustą ćwiartkę i oznajmił:
>
>> Ale już taki test:
>>
>> assert( parseDouble( "1.0" == 1.0 ) );
>> assert( parseDouble( "1E0" == 1.0 ) );
>> expect_throw( parseDouble( "1e0" ) );
>> expect_throw( parseDouble( "1,0" ) );
>>
>> ... ślicznie dokumentuje.
>
> Obawiam się, że nie zrozumiałęś przykładu. Unit testy tylko pokazują,
> że dla *tych wybranych przypadków* działa. Jest wiele przypadków
> kodu gdzie to wystarcza, ale jest też wiele przypadków, gdzie
> albo nie ma skończonej liczby przypadków (czyli też unitów), albo
> nic się w ten sposób nie dokumentuje - bo to trochę tak jakby zamiast
> książki z przykładami mieć same przykłady.
Edek myli weryfikację z dokumentacją. Test, owszem, weryfikuje
szczególne przypadki, ale dobrze napisany dokumentować może ogólne
reguły które te przypadki reprezentują.
Dokumentacyjną rolę w testach pełni przede wszystkim nazwa testu, ale
też cały jej zapis:
test parseDouble parses decimal integer representation {
int integer = 83;
string representation = "83";
assert that parseDouble(representation) equals (double)integer;
}
Chcąc się dowiedzieć co robi parseDouble i dla jakich przypadków daje
jakie wyniki, i korzystając z unit testów jako dokumentacji, jełop
wyczyta z powyższego tylko informację, że dla wejścia "83" daje liczbę
równą (double)83, ale inteligentny czytelnik wyczyta więcej.
I zanim się ktoś czepnie - jeszcze raz, owszem, ten test nie _dowodzi_,
że funkcja parsuje reprezentacjee jakichkolwiek liczb całkowitych innych
niż 83, ale to dokumentuje. Komentarz w kodzie, dokument w Wordzie czy
schemat w Enterprise Architect w ogóle nie dowodzą czegokolwiek jeśli
chodzi o dokumentowany kod, a dokumentować mogą.
> I nie, unit testy w praktyce ani nie są pewne ani też praktycznie
> nigdy nie pokrywają wszystkich przypadków. Pokrycie 100% linii bywa
> górną granicą,
Raczej ciężko, żeby unit testy pokrywały więcej niż 100% linii.
> a często nawet nie. Unit testy pisze się głównie
> dla szybkiego wyłapania oczywistych regresji.
Jest to jeden z powodów. Rola dokumentacyjna jest również istotna. Co
prawda tę samą treść możnazapisać w komentarzu czy w Wordzie, ale zaleta
dokumentacji w unit testach jest taka, że komentarze czy dokumenty mogą
z czasem rozjechać się z rzeczywistością - nie tylko z powodu regresji,
ale mogą przede wszystkim stać się nieaktualne. Sensownei dobrane unit
testy z wysokim prawdopodobieństwem zaczną w danej sytuacji failować, co
zasygnalizuje problem i pozwoli programiście stwierdzić czy ma do
czynienia z regresją czy z dezaktualizacją - i w zależności od przypadku
poprawić testowany kod lub test.
W reżimie TDD unit testy pełnią też dodatkowe role - choćby pomagają
utrzymać wysoką jakość kodu. Na przykład fakt, że do jakiegoś kawałka
kodu ciężko napisać unit test często sygnalizuje problemy z projektem -
np. zawierająca ten kod funkcja próbuje robić kilka różnych rzeczy, ma
niejawne zależności itd.
Następne wpisy z tego wątku
- 23.07.13 02:22 Andrzej Jarzabek
- 23.07.13 07:33 Roman W
- 23.07.13 07:39 Andrzej Jarzabek
- 23.07.13 07:40 Paweł Kierski
- 23.07.13 07:57 Paweł Kierski
- 23.07.13 08:13 Adam Klobukowski
- 23.07.13 09:26 Andrzej Jarzabek
- 23.07.13 10:30 Adam Klobukowski
- 23.07.13 11:40 Edek
- 23.07.13 11:41 Andrzej Jarzabek
- 23.07.13 12:28 slawek
- 23.07.13 13:14 slawek
- 23.07.13 13:16 Edek
- 23.07.13 14:35 Andrzej Jarzabek
- 23.07.13 21:21 Sebastian Biały
Najnowsze wątki z tej grupy
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
Najnowsze wątki
- 2024-11-02 piszę list do św Mikołaja
- 2024-11-01 karta SIM nie działa w konkretnym smartfonie.
- 2024-11-01 Mamy WZROST! O 50% wzrosła ilość kredytów gotówkowych
- 2024-11-01 Warszawa => Expert Recruiter 360 <=
- 2024-11-01 Warszawa => Technical Leader (Java Background) <=
- 2024-11-01 Warszawa => Account Manager - Usługi rekrutacyjne <=
- 2024-11-01 Warszawa => Head of International Freight Forwarding Department <=
- 2024-11-01 Warszawa => Programista Dynamics 365 CRM <=
- 2024-11-01 Warszawa => Dynamics 365 CRM Developer <=
- 2024-11-01 Warszawa => Junior Rekruter <=
- 2024-11-01 Chrzanów => Specjalista ds. PR Produktowego <=
- 2024-11-01 Białystok => Full Stack web developer (obszar .Net Core, Angular6+) <
- 2024-11-01 Łódź => Frontend Engineer (Three.js) <=
- 2024-11-01 Warszawa => Junior Rekruter <=
- 2024-11-01 Gdańsk => Programista Full Stack .Net <=