Nazwa przedmiotu:
Diagnostyka oraz niezawodność systemów komputerowych
Koordynator przedmiotu:
Rajmund Kożuszek
Status przedmiotu:
Fakultatywny dowolnego wyboru
Poziom kształcenia:
Studia II stopnia
Program:
Informatyka
Grupa przedmiotów:
Przedmioty techniczne - zaawansowane
Kod przedmiotu:
DSK
Semestr nominalny:
4 / rok ak. 2021/2022
Liczba punktów ECTS:
4
Liczba godzin pracy studenta związanych z osiągnięciem efektów uczenia się:
1. liczba godzin kontaktowych – 47 godz., w tym obecność na wykładach 30 godz., obecność na spotkaniach projektowych 15 godz., obecność na konsultacjach 2 godz. 2. praca własna studenta – 55 godz., w tym przygotowanie do sprawdzianów 15 godz., realizacja projektu 40 godz.(opracowanie założeń oraz metodyki, przeprowadzenie eksperymentów, przygotowanie dokumentacji) Łączny nakład pracy studenta wynosi 102 godz., co odpowiada 4 pkt. ECTS.
Liczba punktów ECTS na zajęciach wymagających bezpośredniego udziału nauczycieli akademickich:
1,84 pkt. ECTS, co odpowiada 47 godz. kontaktowym
Język prowadzenia zajęć:
polski
Liczba punktów ECTS, którą student uzyskuje w ramach zajęć o charakterze praktycznym:
2,16 pkt. ECTS, co odpowiada 15 godz. spotkań projektowych plus 40 godz. realizacji projektu, w tym również poznanie metod ze wskazanej literatury
Formy zajęć i ich wymiar w semestrze:
  • Wykład30h
  • Ćwiczenia0h
  • Laboratorium0h
  • Projekt15h
  • Lekcje komputerowe0h
Wymagania wstępne:
Znajomość organizacji i architektury systemów komputerowych, znajomość programowania
Limit liczby studentów:
30
Cel przedmiotu:
Poznanie zagrożeń poprawnej pracy systemów komputerowych oraz metod ich eliminacji, w tym techniki unikania, tolerowania i predykcji błędów/awarii. Uwzględnienie wymagań niezawodnościowych w procesie projektowania systemów jak również dobór metod weryfikacji i oceny spełnienia tych wymagań.
Treści kształcenia:
Wykład: Podstawowe koncepcje i definicje. Klasyfikacja i statystyki błędów w sprzęcie i oprogramowaniu (trwałe, przemijające, okresowe). Cechy wiarygodności systemów komputerowych: diagnozowalność, bezpieczeństwo, dostępność, wydajność, odpowiedzialność i niezawodność. Problemy wiarygodności w kontekście typowych zastosowań (systemy i urządzenia przemysłowe, bankowe, medyczne, samochodowe, itd.). Testowanie systemów komputerowych. Modele błędów (funkcjonalne, strukturalne, fizyczne, statyczne, dynamiczne). Testowanie sprzętowe i programowe. Generacja pobudzeń, analiza wyników (analizator sygnatur, kompakcja). Algorytmy testowania podstawowych bloków funkcjonalnych komputerów (pamięci RAM i flash, procesory, bloki arytmetyczne, itp.), metody deterministyczne i pseudoprzypadkowe. Układy łatwotestowalne (DFT, ścieżka testująca, ścieżka cykliczna i krawędziowa, IEEE 1149, P1500, itp.) oraz samotestujące się (techniki BIST). Przegląd mechanizmów ułatwiających testowanie w komercyjnych układach VLSI, SoC i komputerach. Problem efektywności testowania. Testowanie programów. Koncepcje testowania oprogramowania (testowanie funkcjonalne, strukturalne i pseudoprzypadkowe, techniki BIT i TDD). Modele niezawodnościowe bazujące na monitorowaniu procesu testowania: modele skończone (JM, GO, Schneidewinda, S-shape G-O itp.) i nieskończone. Miary dokładności modeli. Pośrednia analiza niezawodności poprzez miary złożoności programów i miary pokrycia testów. Metody porównawcze (Mills, Cai) oraz techniki wstrzykiwania błędów (mutacja programów). Przykłady wyników oraz analiz dla wybranych rzeczywistych projektów. Architektura i oprogramowanie systemów odpornych na błędy. Techniki oparte na redundancji układowej (aktywna, bierna, hybrydowa), informacji, algorytmicznej, czasowej i programowej. Redundancja masowa i częściowa. Problem tolerowania katastrof. Systemy samosprawdzalne, samonaprawialne oraz rekonfigurowalne (fail-stop, fail-silent, fail-bounded). Programowanie wielowersyjne i alternatywne. Techniki oparte na głosowaniu (problem bizantyjski, głosowanie akceptacyjne, optymalne itp.). Programy z wbudowanymi mechanizmami detekcji błędów (asercje). Programowa obsługa błędów (odtwarzanie wsteczne i omijanie błędów - backward, forward error recovery). Punkty kontrolne (checkpoints) i ich rozkład w programach (efekt domina). Techniki kopiowania i odtwarzania informacji (pełne, inkrementalne, różnicowe, kopiowanie migawkowe, rozdzielone, dwufazowe, archiwizacja). Zintegrowane tolerowanie błędów sprzętu i oprogramowania (np. RB/1/1, NSCP/2/2, NVP1/1). Tolerowanie błędów w systemach komercyjnych: serwery typu RAS, systemy klastrowe, rozproszone i zwirtualizowane, niezawodne centra danych (w tym tablice RAID, pamięci wirtualne), systemy wbudowane (dla przemysłu samochodowego, telekomunikacji, badań kosmicznych, medycyny itp.). Diagnostyka i obsługa błędów. Lokalizacja i identyfikacja błędów, rejestracja i analiza błędów, problem integracji z technikami DFT, HBIST i SBIST. Diagnostyka i serwis zdalny. Monitorowanie bieżącej pracy systemu (programowe i sprzętowe, technika SMART, logi zdarzeniowe systemowe i aplikacyjne, logi wydajnościowe, monitorowanie energetyczne). Monitorowanie procesu wytwarzania i utrzymania systemów - repozytoria systemowe (np. Jira, Bugzila, SVC, Github) i ich wykorzystanie w poprawie wiarygodności systemów, ścieżki obsługi błędów. Analizy statystyczne, czasowe i tekstowe repozytoriów. Analiza profili operacyjnych, predykcja awarii oraz procedury prewencyjne (error scrubbing, software rejuvenation), techniki symulacji błędów. Projektowanie systemów bezpiecznych. Analiza sytuacji i zdarzeń krytycznych (drzewa błędów). Mechanizmy sprzętowe zapewniające bezpieczne zachowanie się systemu. Podsumowanie. Kierunki rozwoju dziedziny wiarygodności (aspekty techniczne, prawne itp.) Projekt: Projekt obejmuje zadania dotyczące wybranych zagadnień z zakresu wykładu w celu pogłębienia zdobytej wiedzy i jej praktycznego zastosowania. Ponadto udostępniane będą specjalizowane narzędzia wspomagające analizę wiarygodności systemów itp. Akceptowane są również propozycje studentów np. skorelowanie projektu z innymi projektami realizowanymi przez studenta w ramach pracowni problemowej lub dyplomowej. Możliwe jest wykorzystanie wyników prac badawczych prowadzonych w Instytucie w zakresie rozpatrywanej tematyki i rozwijanie wybranych wątków np. dotyczących analizy logów zdarzeniowych czy też repozytoriów programowych.
Metody oceny:
Zaliczenie odbywa się na podstawie 2 kolokwiów oraz zaliczenia projektu. Za oba kolokwia można uzyskać łącznie maksymalnie K = 80 pkt. a za projekt P = 40 pkt. Warunkiem zaliczenia jest uzyskanie K>40 oaz P>20.
Egzamin:
nie
Literatura:
1. J. Sosnowski, Testowanie i niezawodność systemów komputerowych, Akademicka Oficyna Wydawnicza, EXIT 2005 (od 2018 dostępne elektronicznie dla PW w iBuku) 2. Preston de Guise, Data Protection ensuring Data Availability, CRC 2017 3. J. Knight, Fundamentals of dependable computing for software engineers, CRC 2012 4 Materiały dodatkowe oraz kopie slajdów opracowane przez wykładowcę 5. Literatura uzupełniająca – wskazane artykuły dostępne poprzez E-bazy Biblioteki Głównej lub udostępniane przez prowadzącego
Witryna www przedmiotu:
https://usosweb.usos.pw.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazPrzedmiot&prz_kod=103A-INxxx-MSP-DSK
Uwagi:
(-)

Efekty uczenia się