-
Data: 2018-11-20 23:26:49
Temat: Re: Niezmienniki pętli
Od: q...@t...no1 (Queequeg) szukaj wiadomości tego autora
[ pokaż wszystkie 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
Następne wpisy z tego wątku
- 20.11.18 23:27 g...@g...com
- 21.11.18 08:16 Maciej Sobczak
- 21.11.18 11:12 Queequeg
- 21.11.18 11:36 fir
- 21.11.18 15:54 AK
- 21.11.18 16:07 AK
- 21.11.18 20:32 g...@g...com
- 21.11.18 20:35 g...@g...com
- 21.11.18 22:10 Queequeg
- 21.11.18 22:28 Maciej Sobczak
- 21.11.18 22:48 Maciej Sobczak
- 21.11.18 23:04 g...@g...com
- 22.11.18 11:31 Maciej Sobczak
- 22.11.18 15:22 fir
- 22.11.18 16:08 AK
Najnowsze wątki z tej grupy
- Alg. kompresji LZW
- 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??
Najnowsze wątki
- 2025-02-10 Spalił się spaliniak
- 2025-02-10 zarowka wifi - z sensowna apka lub lepiej albo lokalnie lub przez web. I zeby harmonogram miala
- 2025-02-10 Chrzanów => Programista NodeJS <=
- 2025-02-10 Kraków => DevOps Engineer (Junior or Regular level) <=
- 2025-02-10 Dlaczego takie preferencje banków?
- 2025-02-10 Białystok => iOS Developer (Swift) <=
- 2025-02-10 Mińsk Mazowiecki => Team Lead / Tribe Lead FrontEnd <=
- 2025-02-10 Białystok => System Architect (Java background) <=
- 2025-02-10 Współczesne mierniki zniekształceń nieliniowych THD audio, produkują jakieś?
- 2025-02-10 Szczecin => Senior Field Sales (system ERP) <=
- 2025-02-10 Gliwice => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2025-02-10 Chrzanów => Specjalista ds. public relations <=
- 2025-02-10 Chrzanów => NodeJS Developer <=
- 2025-02-10 Warszawa => JavaScript / Node / Fullstack Developer <=
- 2025-02-10 Gliwice => Ekspert IT (obszar systemów sieciowych) <=