eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingNiezmienniki pętliRe: Niezmienniki pętli
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!ne
    ws.chmurka.net!.POSTED.pi.v.chmurka.net!not-for-mail
    From: q...@t...no1 (Queequeg)
    Newsgroups: pl.comp.programming
    Subject: Re: Niezmienniki pętli
    Date: Tue, 20 Nov 2018 22:26:49 +0000 (UTC)
    Organization: news.chmurka.net
    Message-ID: <b...@t...no1>
    References: <8...@g...com>
    <7...@g...com>
    <d...@g...com>
    <psp6q7$97o$1@node2.news.atman.pl>
    <6...@g...com>
    <pss4d0$14n$1@node2.news.atman.pl>
    <9...@t...no1>
    <7...@g...com>
    NNTP-Posting-Host: pi.v.chmurka.net
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    Injection-Date: Tue, 20 Nov 2018 22:26:49 +0000 (UTC)
    Injection-Info: news.chmurka.net; posting-account="gof";
    posting-host="pi.v.chmurka.net:172.24.44.20"; logging-data="22347";
    mail-complaints-to="abuse-news.(at).chmurka.net"
    User-Agent: tin/2.4.2-20171224 ("Lochhead") (UNIX) (Linux/4.4.50-v7+ (armv7l))
    Cancel-Lock: sha1:BLLRArixCSqE9TDtT7poxysqNu0=
    Xref: news-archive.icm.edu.pl pl.comp.programming:212956
    [ ukryj nagłówki ]

    Maciej Sobczak <s...@g...com> wrote:

    >> > To następna obserwacja: jeśl wpływa to na runtime release należy to
    >> > odrzucić. Wszelakie checkery asercyjne, za wyjątkiem programowania
    >> > defensywanego, nie mogą istnieć w kodzie produkcyjnym.
    >>
    >> Nigdy nie rozumiałem sensu tego rozumowania
    >
    > Sens jest również taki, że (jak na ironię!) w systemach krytycznych nie
    > da się spełnić kryterium 100% pokrycia kodu testami czegoś, co ma
    > asserta. Tzn. jeśli w kodzie jest assert, który *z założenia* ma się
    > nigdy nie wykonać, to jest to tzw. dead code i ma go nie być. Bo jeśli
    > jest, to nie da się go przetestować. Albo inaczej: nie da się wykazać
    > testami, że coś się nigdy nie wykona, więc nie da się zdobyć w ten
    > sposób pewności, że się nie wykona. A jeśli osiągniemy tą pewność innymi
    > metodami (np. formalnymi), to asserta dynamicznego może wtedy w ogóle
    > nie być.

    To prawda. Ja (na szczęście -- bo odpowiedzialność jest ogromna) nigdy nie
    pisałem systemów krytycznych, ani nigdy u SQA nie robiło u nas tego typu
    testów (choć oczywiście to, co mówisz, ma sens).

    > Zupełnie niezależnie od tego, w pewnych środowiskach walnięcie assertem
    > jest bez sensu, bo i tak nie ma do kogo przekazać sterowania. Assert w
    > rozruszniku serca jest bez sensu, nie tylko technicznie, ale też
    > filozoficznie.

    To znów bardzo specyficzne zastosowanie i podejrzewam, że programowanie
    rozrusznika serca rządzi się swoimi regułami (raz, że jest to typowy układ
    embedded bez możliwości wyrzucenia błędu -- bo jak, w pulsie pacjenta
    zakodować linię kodu? -- a dwa, że jest to system krytyczny, w którym
    nieprawidłowa praca programu może powodować chorobę lub śmierć).
    Podejrzewam że pisząc oprogramowanie na rozruszniki serca stosuje się
    jakąś formę MISRA lub odpowiednik i że są tam jakieś sprzętowe failsafe'y,
    które uniemożliwiają przejście programowi w stan, który będzie zagrażał
    życiu lub zdrowiu. Tak to sobie przynajmniej wyobrażam.

    Z drugiej strony spotkałem się z systemem ładowania baterii (Li-Po), w
    którym zamiast dedykowanego kontrolera wyłączanie ładowarki było robione
    software'owo. Wszystko działało... do momentu, aż w systemie pojawił się
    błąd i zasilanie baterii nie było wyłączane po zakończeniu (nie wiem też
    co by było, gdyby urządzenie się zawiesiło).

    > To nie jest tylko kwestia szybkości działania, to może być też kwestia
    > sensowności istnienia samego asserta.

    Tak... czasem nie ma możliwości zaraportowania błędu i jest pytanie typu
    "ok, pojawił się błąd, ale co teraz?". Tylko właśnie -- co wtedy? Jeśli
    mogę sobie na to pozwolić i na danej platformie ma to sens, to staram się
    to w jakiś sposób zaraportować. Jeśli sensu ani możliwości nie ma, to
    pozostaje przestawienie wyjść w niegroźny stan i kontrolowany restart...
    i jeśli błąd nadal występuje, to tak w nieskończoność.

    Tak czy inaczej, jeśli system umożliwia jakieś zaraportowanie błędu lub ma
    możliwość interakcji z użytkownikiem, to używam tego. Zdarzało się, że
    tego typu asserty wyskakiwały na produkcji (choć teoretycznie kod był
    przetestowany przez SQA i teoretycznie nie powinny wyskoczyć). Dużo
    bardziej wolę dostać raport o błędzie wraz z tym, co wypluł program i co
    pozwala mi zdiagnozować błąd, niż pozwolić programowi działać dalej w
    stanie, w którym nie powinien się znaleźć. Nawet jeśli nie ma możliwości
    zaraportowania, to dużo bardziej wolę, jak program się zatrzymuje, a błąd
    jest jawny, niż jak błąd jest ukrywany i po jakimś czasie coś działa, ale
    nie tak jak powinno.

    Oczywiście nie pisząc oprogramowania na rozruszniki itd. systemy mogę
    sobie na to pozwolić -- awaria programu nie ma w tym przypadku skutków
    zdrowotnych (choć może mieć finansowe wynikające z braku możliwości
    używania programu).

    --
    https://www.youtube.com/watch?v=9lSzL1DqQn0

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: