-
Data: 2015-03-27 21:25:35
Temat: Re: poprawność algorytmu
Od: Andrzej Jarzabek <a...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 27/03/2015 10:06, Maciej Sobczak wrote:
>>
>> No więc pomijając płacenie itd., to jest bardzo istotne kryterium,
>> bo jeśli formalny zapis nawet nie tylko samego dowodu, ale również
>> kryterium poprawności, które zostało dowiedzione, jest
>> niezrozumiałe dla osób, które rozmieją, kiedy program jest
>> rzeczywiście poprawny, to cały dowód poprawności jest OKDR.
>
> Zgadza się. Ale z drugiej strony, skąd osoby, które rozumieją, kiedy
> program jest rzeczywiście poprawny, mają pewność, że on faktycznie
> jest poprawny, skoro nie potrafią wyspecyfikować tego kryterium?
> Kierują się przeczuciem?
Ale może właśnie potrafią wyspecyfikować, ale niekoniecznie w języku
formalnym.
Albo nawet, co jest też częste, nie potrafią co prawda wystarczająco
precyzyjnie wyspecyfikować, ale programista potrafi dojść do tego
poprzez zadawanie pytań, zrozumienie celu jaki ma realizować program i
posługiwanie się przykładami.
> Tak jak przeczuciem kierowali się ludzie, którzy dekadę temu napisali
> algorytm sortowania w Javie?
No więc właśnie algorytm sortowania to taki wdzięczny temat dla metdo
formalnych - formalne wyspecyfikowanie kryterium posortowanej sekwencji
nie stanowi problemu i nie wymaga żadnej wiedzy domenowej. Mało też
prawdopodobne, że to kryterium ulegnie zmianie w przewidywalnej
przyszłości. Niestety w praktyce zwykle miewa się do czynienia z
bardziej skomplikowanymi przypadkami.
> Zgadzam się, że to jest problem. Metody formalne są ciałem obcym w
> branży, bo nie pasują do dotychczas przyjętych wzorów pracy.
Bo się nie nadają do realizacji tych zaań, które zazwyczaj się realizuje.
>>> Zainteresowanie dowodzeniem rośnie właśnie dlatego, że jest
>>> tańsze. Może być nawet dużo tańsze.
>>
>> Stąd gdzie ja stoję, tego zainteresowania nie widać.
>
> Najwyraźniej nie ma takiej potrzeby.
Zależy jak to rozumieć. Potrzeba niezawodności owszem, jest, ale nie za
wszelką cenę. Konsensus jest taki, że metody formalne albo w ogóle nie
nadają się do zastosowania większości problemów, albo są nieopłacalne.
Jeśli konsensus się myli, to byłoby bardzo duże zainteresowanie tym, jak
by to zrobić w praktyce tak, żeby się opłacało. Tyle że na razie udaje
się to jedynie w specyficznych niszach.
Jeśli uważasz, że dałoby się stosować te metody w ogólnym przypadku, to
np. ja byłbym bardzo zainteresowany - jak?
>> Nie wątpię, że nieskończenie lepiej ode mnie znasz się na metodach
>> formalnych, ale w tej kwestii nie masz pojęcia o czym mówisz.
>
> Może tak być. Ale zadam dwa pytania kontrolne:
>
> 1. Czy ktoś poniósł kiedyś osobiste konsekwencje (np. poszedł do
> pierdla) za zrobienie błędu w programie użytym w branży finansowej?
> 2. Czy ktoś odniósł kiedyś osobiste korzyści (np. dostał wysoką
> premię) za szybkie wdrożenie systemu na rynek, wyprzedzając tym
> konkurencję?
Ale właściwie co to ma do rzeczy? Firma nie ponosi straty jeśli
pracownik nie idzie do pierdla? Jak ktoś dostaje albo nie dostaje premii
to znaczy że są albo nie ma testów?
Zamiast odpowiadać na non sequitury, odniosę się do tego, o czym
pisałeś: owszem, firmy ponoszą straty finansowe i utratę reputacji na
wskutek błędnie działającego oprogramowania, owszem, jeśli firma straci
pieniądze przez takie błędy w swoim oprogramowaniu, np. wysyłając
niekorzystne dla siebie zlecenia na giełdę, to nie da się ich odzyskać
przez "reklamacje", owszem, oprogramowanie się testuje.
>> No to teraz całkowicie bez szydery i na poważnie spytam, jakie są
>> praktyczne możliwości. Mam powiedzmy program w C++, kilkaset
>> tysięcy linii kodu, korzysta z boosta, wątków, libc, bazy danych,
>> MOM-a itd. - co można zrobić żeby udowodnuć jego poprawność i ile
>> to będzie kosztowało?
>
> Nie da się. Dla równowagi zauważmy jednak, że przetestować tego też
> się nie da, zresztą dokładnie z tych samych powodów (uwaga logiczna:
> z tezy że się nie da konsekwentnie wynika też teza, że się tego nie
> robi; można co najwyżej udawać że się robi pomijając milcząco tą
> drobną niedogodność, że się nie da i tak właśnie działa większa część
> branży, patrz też niżej).
Da się, bo sukces testowania to nie jest 100% wyeliminowanie szansy
błędu, tylko redukcja ryzyka strat w takim stopniu, żeby opłacało się to
firmie.
O ile trudno jest zmierzyć dokładnie o ile ryzyko jest redukowane przez
testy i ile dokładnie opłaca się w te testy inwestoować, o tyle
(przynajmniej kiedy nie stosuje się metod formalnych) jest oczywistą
oczywistością, że jakiekolwiek testowanie jest lepsze od braku
testowania w ogóle.
> Na poważnie - nie stosuje się metod formalnych a posteriori w
> odniesieniu do kodu, który nie był pisany z myślą o takich metodach.
> Problem stopu, Goedel, i podobne teoretyczne przeszkody. Natomiast da
> się napisać (i to udowodnić) poprawny program, jeśli się go pisze z
> myślą o takich metodach.
Jak konkretnie by to wyglądało w przypadku takiego programu, jaki opisałem?
> Różnica między dowodami i testami jest taka, że niekompletnego dowodu
> nie da się zrobić, bo od razu widać, że jest niekompletny - natomiast
> bez najmniejszego problemu można zrobić niekompletne testy, bo
> najczęściej nie widać, jak bardzo one są niekompletne. Testy są po
> prostu wygodniejsze zarówno dla tych, którzy je robią, jak i dla
> tych, którzy je akceptują i to tłumaczy ich "silną pozycję rynkową".
Ale niekompletne testy są też użyteczne, w sensie takim, że realnie
redukują ryzyko - w przeciwieństwie do niekompletnego dowodu, który jest
czystym marnotrawstwem.
Następne wpisy z tego wątku
- 28.03.15 05:04 M.M.
- 28.03.15 09:40 Maciej Sobczak
- 28.03.15 09:45 g...@g...com
- 28.03.15 10:10 Maciej Sobczak
- 28.03.15 10:47 g...@g...com
- 28.03.15 10:54 M.M.
- 28.03.15 11:46 M.M.
- 28.03.15 11:54 Andrzej Jarzabek
- 28.03.15 13:08 Andrzej Jarzabek
- 28.03.15 18:22 Maciej Sobczak
- 28.03.15 19:38 Roman W
- 28.03.15 19:43 Roman W
- 28.03.15 19:50 A.L.
- 28.03.15 19:51 A.L.
- 28.03.15 21:16 Andrzej Jarzabek
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- 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
Najnowsze wątki
- 2025-01-06 Jeździ, skręca, hamuje
- 2025-01-06 Białystok => System Architect (Java background) <=
- 2025-01-06 Gliwice => Specjalista ds. public relations <=
- 2025-01-06 Białystok => Solution Architect (Java background) <=
- 2025-01-06 Zielona GĂłra => Konsultant WdroĹźeniowy Comarch XL/Optima (KsiÄgowoĹ
- 2025-01-06 Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- 2025-01-06 Ostrów Wielkopolski => Area Sales Manager OZE <=
- 2025-01-06 Do IO i innych elektrooszolomow, tu macie prawdziwe smrody
- 2025-01-06 Białystok => Full Stack .Net Engineer <=
- 2025-01-06 Kraków => Business Development Manager - Network and Network Security
- 2025-01-06 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-01-06 Warszawa => Spedytor Międzynarodowy <=
- 2025-01-06 Lublin => Programista Delphi <=
- 2025-01-06 Gdańsk => Specjalista ds. Sprzedaży <=
- 2025-01-06 śnieg