eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingpl. usenet o agileRe: pl. usenet o agile
  • 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.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: