W dzisiejszym wpisie omawiam najbardziej znany przypadek błędu systemu safety-critical z branży medycznej prowadzący do ciężkich obrażeń i śmierci pacjentów. Został on wnikliwie przeanalizowany teraz służy jako case study w różnego rodzaju materiałach o systemach safety. Therac-25 to urządzenie do radioterapii stosowane w latach 80-tych w jedenastu szpitalach w USA i Kanadzie. W latach 1985-87 odnotowano sześć przypadków podania pacjentowi stukrotnie większej dawki promieniowania niż ustawiona przez ...
Strona głównaUżytkownik
ucgosupl | użytkownik
Dzisiaj opowieść o kolejnym znanym bugu, który miał ogromne konsekwencje. Podobnie jak w przypadku Therac-25, analiza katastrofy rakiety Ariane 5 przyczyniła się do poprawy procesów wytwarzania systemów safety-critical. We wtorek 4 czerwca 1996 roku odbył się dziewiczy lot Ariane 5 – nowej rakiety Europejskiej Agencji Kosmicznej, która była rozwijana przez ostatnie 10 lat, a budżet projektu wynosił 7 mld $. Rakieta miała wynieść na orbitę okołoziemską zespół sond do badania magnetosfery. Niestety pół ...
Wprowadzenie do Test Driven Development - wszystkie wpisyDlaczego zainteresowałem się TDD?Na czym polega TDDPiramida testów – do czego służą poszczególne poziomyZalety TDDWymówki, aby nie pisać unit testówJak pisać dobre unit testyMocki – radzenie sobie z zależnościami w testachMiary jakości unit testówAntywzorce unit testówKiedy nie stosować TDD W tym artykule odpowiemy sobie na pytanie jakie rodzaje testów powinniśmy wykonywać i w jakich proporcjach. Pomoże nam w tym piramida testów, czyli prosta graf...
Sztuka programowania 2301 dni, 11 godzin, 6 minut temu 73 źrodło rozwiń
Ostatnio na portalu embedded.com zaczęła pojawiać się seria artykułów omawiających 10 najczęstszych problemów w projektach embedded napisana przez Jacka Gannsle. Pierwszym omówionym zagadnieniem były złudne oszczędności (link tutaj). Czytając artykuł zgadzałem się praktycznie z każdym słowem, bo sam obserwuję to samo praktycznie od początku kariery zawodowej. Z resztą nie jest to coś specyficznego tylko dla systemów embedded, czy branży IT, Krótkowzroczne podejście do oszczędności jest chyba ogólnoświat...
O code review napisano już całkiem sporo. W internecie można znaleźć dokładne opisy jak powinny wyglądać, jakie dają efekty, czy ile kodu sprawdzać na raz. Dlatego nie będę dokładnie analizować tych aspektów. Zamiast tego krótko opiszę najważniejsze korzyści i kilka przydatnych technik na podstawie własnych doświadczeń. Z code review korzystałem już w wielu projektach i zawsze miało to pozytywny wpływ na jakość kodu. Moim zdaniem code review powinno być elementem każdego poważnego projektu. Jakie są n...
Sztuka programowania 2369 dni, 6 godzin, 40 minut temu 124 źrodło rozwiń
Ostatnio czytałem książkę „Mit przedsiębiorczości”, która mówi, że każda firma od samego początku powinna mieć jasno określoną strukturę i dobrze zdefiniowane procesy. Skłoniło mnie to do refleksji jaki wpływ takie procesy mają na mnie jako pracownika. Jakie są zalety i wady pracy dla wielkiej korporacji oraz małego startupu. I jaki poziom strukturyzacji jest najlepszy dla mnie. Nie skupiam się tutaj na aspektach finansowych, czy multisportach, a jedynie na konsekwencjach strukturyzacji i jej wpływie na ...
Pisząc unit testy chcielibyśmy wiedzieć, czy robimy to wystarczająco dobrze i czy dodajemy w ten sposób wartość do projektu. Informacja ta jest potrzebna programistom, aby mogli doskonalić swój warsztat i ułatwiać pracę zespołowi. Korzystają z niej również managerowie planując zadania, skład zespołu itp. Najczęściej wykorzystywaną metryką jest tutaj test coverage, jednak niesie ona jedynie ograniczoną informację. Ważne są również miary empiryczne, które ciężko przedstawić w formie liczbowej. Na począt...
Sztuka programowania 2420 dni, 8 godzin, 31 minut temu 94 źrodło rozwiń
W zeszłym tygodniu cały świat mówił o Elonie Musku i o SpaceX, a wszystko za sprawą startu rakiety Falcon Heavy, który odbył się 6 lutego 2018. Największe wrażenie na wszystkich wywarło synchroniczne lądowanie dwóch bocznych rakiet. Przy okazji – wiecie, że SpaceX wcale nie wykonało takiego lądowania jako pierwsze? New Shepard firmy Blue Origin należącej do Jeffa Bezosa było wcześniej, tylko widocznie mają gorszy marketing. Dzięki studiowaniu automatyki mogłem od razu docenić kunszt inżynierów projektują...
W dzisiejszym artykule omawiam tajemną sztukę estymowania czasu. Wiele osób ma do siebie pretensje, że nie potrafi poprawnie przewidzieć wymaganego czasu na zadanie i projekt. Prawdopodobnie zapominają oni jakie jest znaczenie słowa estymata. Aby rozjaśnić temat wychodzę od statystyki i pewnych faktów o estymatorach, a następnie formułuję wnioski dotyczące estymowania czasu. Nie należy tego traktować jako żadne tezy naukowe, tylko zwykłe dostrzeżenie analogii. W dalszej części te pseudonaukowe rozważani...
W praktykach Extreme Programming (XP) możemy przeczytać, że tydzień pracy programisty powinien wynosić 40 godzin. Możliwe są sporadyczne nadgodziny (kilka razy w roku), ale nigdy nie powinny występować przez dwa tygodnie pod rząd. Praktyka ta nosi nazwę Sustainable Pace, czyli zrównoważone tempo. Zgodnie z XP zespół powinien pracować w stałym tempie, które jest w stanie utrzymywać w nieskończoność. Nadgodziny są symptomem poważniejszych problemów z projektem i to nimi należy się zająć. Może się wydawać,...
W dniach 14-15 listopada byłem na konferencji code::dive we Wrocławiu. Jest ona głównie poświęcona C++, ale dodatkowymi tematami miały być Rust, Go, Embedded, IoT, Security, czy Python. Wstęp jest darmowy, ale liczba miejsc jest ograniczona. Swoje zgłoszenie wysłałem dosyć późno i byłem pewny, że się nie załapie. Jednak w ostatniej chwili zwolniły się jakieś miejsca i dostałem swoją wejściówkę. Mogłem więc wybrać ciekawsze pozycje w agendzie i wyruszyć w drogę. Konferencja trwała 2 dni, każdego dnia m...
W internecie można spotkać głosy, że programiści nie wykonują odpowiedzialnych zadań i nie ma żadnych regulacji, których muszą przestrzegać. Bo co złego może się stać, jeśli strona nie będzie działać, albo komputer wywali bluescreena. W końcu świat się od tego nie zawali. Być może jest to prawdą w 99% projektów programistycznych. Jednak tam, gdzie na szali jest ludzkie życie, bardzo restrykcyjne regulacje obowiązują już od dawna. Wiem o czym mówię, ponieważ przez ostatnie dwa lata pracowałem przy systemi...
Sztuka programowania 2592 dni, 7 godzin, 37 minut temu 127 źrodło rozwiń
Testowanie kodu, który nie wykorzystuje zewnętrznych zależności jest stosunkowo proste. W większości przypadków testowany moduł współpracuje jednak z innymi elementami systemu. Stawia to przed testami dwa wyzwania – po pierwsze powinny poprawnie działać, a po drugie sprawdzać poprawność tej współpracy. Nie jest to zadanie proste, a zewnętrzne zależności są jednym z głównych czynników utrudniających testowanie. Aby radzić sobie z zależnościami posługujemy się mockami, czyli dublerami zastępującymi zal...
Sztuka programowania 2632 dni, 11 godzin, 59 minut temu 139 źrodło rozwiń
W ostatnim wpisie przybliżyłem zestaw dobrych praktyk w pisaniu unit testów. Dzisiaj będę kontynuować ten temat z trochę innej perspektywy i opowiem o antywzorcach. Dzięki charakterystycznym nazwom, piętnującym konkretne złe praktyki, antywzorce zostają w pamięci i mamy je przed oczami pisząc podejrzany kod. Podejście do testów Pierwsza grupa wzorców nie wiąże się z pisaniem konkretnych testów, tylko raczej z nastawieniem, jakie nam towarzyszy podczas pisania i wynikającymi z tego zachowaniami.Obywatel...
Sztuka programowania 2647 dni, 13 godzin, 12 minut temu 293 źrodło rozwiń
Często unit testy nie są przez programistów traktowane jak prawdziwy kod. Są dla nich jedynie narzędziem do osiągnięcia określonego celu – sprawdzenia poprawności implementacji. Przez to testy stają się trudne w utrzymaniu albo wykonują się zbyt długo. Przez co uniemożliwiają pracę zgodnie z TDD i nie mają wartości dokumentacyjnej. Istnieją jednak proste zasady tłumaczące, jak powinny wyglądać dobrze napisane testy. Pisząc kod powinniśmy trzymać się zasad SOLID, czyli kod powinien być solidny, a dodat...
Sztuka programowania 2649 dni, 11 godzin, 46 minut temu 161 źrodło rozwiń
W poprzednich częściach cyklu skupiałem się na korzyściach płynących z TDD. Jeżeli ta metoda wejdzie nam w krew, te korzyści zachęcą nas, abyśmy pisali w ten sposób zawsze i wszędzie. Motywują nas do tego również eksperci mówiący, że każda linia kodu powinna być przetestowana. Okazuje się jednak, że nie zawsze testowanie wszystkiego na siłę jest dobrym rozwiązaniem. W tym artykule opiszę sytuacje, kiedy nie opłaca się używać TDD. Programując czasem natrafiamy na problemy, co do których nie mamy z góry...
Sztuka programowania 2653 dni, 14 godzin, 6 minut temu 190 źrodło rozwiń
Próbując wprowadzić TDD w projekcie najczęściej spotkamy się z oporem. Argumenty przeciwko tej technice ze strony developerów i osób decyzyjnych, które nie miały z nią do czynienia często się powtarzają. Postanowiłem więc w tym wpisie zebrać te argumenty i je omówić. Krytyka TDD ze strony osób mających doświadczenie w temacie zwykle przybiera inną formę i jest to temat na osobny wpis. Brak czasu to podstawowy argument przeciwko pisaniu testów. Jest bardzo często używany przez managerów oraz przez niek...
Sztuka programowania 2657 dni, 13 godzin, 58 minut temu 239 źrodło rozwiń
Przestawienie się na Test Driven Development z pisania metodą tradycyjną nie jest łatwym zadaniem. Szczególnie na początku musimy walczyć ze starymi nawykami, a kiedy napotykamy trudności, naturalnym rozwiązaniem jest stosowanie metod, które znamy i rozumiemy. Poza tym początkowo TDD może nam się wydawać nieintuicyjne, a wkład pracy wydaje się większy. Jak to zwykle bywa w takich przypadkach, kluczem jest wytrwałość. Każda umiejętność wymaga czasu, aby ją dobrze opanować. Kiedy już nam się to uda, zauważ...
Sztuka programowania 2661 dni, 11 godzin, 59 minut temu 93 źrodło rozwiń
W poprzedniej części cyklu o TDD opisałem dlaczego sposób wytwarzania oprogramowania, który praktykowałem na początku się nie sprawdzał i co mnie skłoniło do zainteresowania się Test Driven Development. Dzisiaj opiszę jak wygląda praca zgodnie z TDD. Jak to często bywa w przypadku praktyk zwinnych zasady teoretyczne są dosyć proste, a kluczem do sukcesu jest dyscyplina. Na początku musimy sobie wyjaśnić jedną bardzo ważną kwestię. TDD to nie synonim do pisania testów jednostkowych. Owszem, unit testy ...
Sztuka programowania 2668 dni, 13 godzin, 56 minut temu 144 źrodło rozwiń
Kiedy uczyłem się programować, pisałem metodą code and fix. Czyli najpierw pisałem jakiś fragment kodu – mogła to być jedna funkcja, moduł albo nawet cały program. Następnie uruchamiałem go i ręcznie sprawdzałem czy działa, przechodziłem kod debuggerem sprawdzając wartości zmiennych i przepływ sterowania. Następnie poprawiałem znalezione błędy, dodawałem funkcjonalności i znowu sprawdzałem. Na pewno każdy programista zaczynał w ten sposób. W miarę jak moje umiejętności rosły i pisałem trudniejsze progra...
Sztuka programowania 2672 dni, 11 godzin, 24 minuty temu 198 źrodło rozwiń