eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingpoprawność algorytmu › Re: poprawność algorytmu
  • X-Received: by 10.140.81.229 with SMTP id f92mr336276qgd.28.1427468437934; Fri, 27
    Mar 2015 08:00:37 -0700 (PDT)
    X-Received: by 10.140.81.229 with SMTP id f92mr336276qgd.28.1427468437934; Fri, 27
    Mar 2015 08:00:37 -0700 (PDT)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net
    !eu.feeder.erje.net!news.roellig-ltd.de!open-news-network.org!cyclone03.ams2.hi
    ghwinds-media.com!news.highwinds-media.com!voer-me.highwinds-media.com!lightspe
    ed.eweka.nl!lightspeed.eweka.nl!z20no502841igj.0!news-out.google.com!q90ni531qg
    d.1!nntp.google.com!h3no5192583qgf.1!postnews.google.com!glegroupsg2000goo.goog
    legroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Fri, 27 Mar 2015 08:00:37 -0700 (PDT)
    In-Reply-To: <5...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=153.19.246.96;
    posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
    NNTP-Posting-Host: 153.19.246.96
    References: <4...@g...com>
    <d...@g...com>
    <meti4e$osd$1@srv.chmurka.net>
    <f...@g...com>
    <mevfpd$gpa$1@srv.chmurka.net>
    <e...@g...com>
    <mf1tnf$d48$1@srv.chmurka.net>
    <5...@g...com>
    <4...@g...com>
    <5...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <9...@g...com>
    Subject: Re: poprawność algorytmu
    From: g...@g...com
    Injection-Date: Fri, 27 Mar 2015 15:00:37 +0000
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    X-Received-Body-CRC: 1993700322
    X-Received-Bytes: 5471
    Xref: news-archive.icm.edu.pl pl.comp.programming:207682
    [ ukryj nagłówki ]

    W dniu piątek, 27 marca 2015 15:12:10 UTC+1 użytkownik Maciej Sobczak napisał:

    > > Nie wiem, dlaczego programów napisanych w C++
    > > miałoby się nie dać uruchomić z zamiarem sprawdzenia, jak się zachowuje
    > > w określonych okolicznościach.
    >
    > Da się. Ale nie da się stwierdzić, czy te sprawdzone okoliczności wyczerpują
    możliwe stany i zachowania sprawdzanego programu, adekwatnie do wszystkich możliwich
    sposobów przyszłego użycia.

    Da się z łatwością stwierdzić, że zazwyczaj nie wyczerpują.

    > Przykładowo, da się napisać test, który "sprawdza" funkcję sortującą i zapewne ktoś
    taki test napisał w Javie dla funkcji napisanej dekadę temu. Dało się to napisać i
    uruchomić.
    >
    > Ale rzeczona funkcja nadal była zje-banana, co raczej rzuca cień i rysę na taką
    metodę.

    Mnie się zdaje, że to w ogólności jest "cieńka" metoda. Tym bardziej,
    że wielu ideologów pisania testów mówią, że "im więcej, tym lepiej"
    i że "testy nie muszą być elegancko napisane" -- problem jest taki,
    że testy również potrafią czynić pewne założenia, które nie są kluczowe
    z perspektywy projektu, a których zmiana w projekcie sprawi, że słita
    testowa stanie się bezużyteczna.

    > > I przy okazji kilka ciekawostek, które ostatnio przebiegły twittera:
    > >
    > > "What if you could write a test for a problem and have your compiler
    automatically return a correct implementation?":
    >
    > Fajne. Zwłaszcza jak ktoś napisze zły test. Będzie miał wtedy złą implementację
    pasującą idealnie do tego złego testu.
    >
    > Spuszczamy to z wodą.

    A co jeśli ktoś napisze zły test i złą implementację? Taki sam klops.
    Jednak artykuł w gruncie rzeczy nie opisywał tego, o czym mówił
    ten nagłówek, tylko po prostu pewną odmianę programowania
    deklaratywnego opartą o microsoftowy system.

    > Podobnie jak automaty, który generują testy z implementacji. To jest taka sama
    ściema. Implementacja i test to są dwa *niezależne* artefakty, które się uzupełniają
    właśnie dzięki temu, że są niezależne. Jak ktoś generuje jedno z drugiego, to równie
    dobrze mógłby jednego w ogóle nie robić.
    > Np. umówmy się, że wtedy nie robimy testów. To bardzo popularna metoda jest.

    Tzn. generowanie testów z implementacji rzeczywiście brzmi idiotycznie.
    Jednak w drugą stronę to nie całkiem zachodzi. Jeżeli mamy system, który
    na podstawie testów potrafi wygenerować sensowną implementację, to szacun.

    > > Na tym chyba polega istotowa różnica między dowodem a testowaniem,
    > > że dowód wyczerpuje wszystkie możliwości, a testowanie nie.
    > > "Kompletne testowanie" byłoby właśnie -- po prostu -- dowodem.
    >
    > Dokładnie. Stąd właśnie bierze się potencjalny zysk z użycia dowodów, które w
    porównaniu do kompletnych testów mogą być tańsze. Bo to, że dowody mogą być droższe
    od niekompletnych testów, to jest argument dla Dilberta.

    Ja jednak będę trwał na stanowisku, że testy są z założenia niekompletne,
    bo obejmują pewne przypadki jednostkowe. I testy jako takie mają pewną
    wartość. Podobnie jak program QuickCheck.

    I owszem, zgodzę się, że fajniej jest mieć dowody poprawności, kiedy
    tylko się da (choć nie wiem, czy akurat w logice Hoare'a), ale jedno
    nie wyklucza drugiego. Tak jak fajnie np. w podręczniku do matematyki
    mieć nie tylko definicje, twierdzenia i dowody, ale również przykłady.

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: