Inżynieria oprogramowania Faza implmentacji wykład 7
Charakterystyka fazy implementacji Faza określenia wymagań: CO system ma robić? Faza analizy: JAK system ma działać? Faza projektowania: JAK system ma być zaimplementowany? Faza implementacji Wynikiem fazy analizy jest gotowy system Rola fazy implementacji maleje dzięki systemom typu RAD i automatycznym generatorom kodu (parsery, itp)
Niezawodność oprogramowania Istotne zawsze, kluczowe w zastosowaniach krytycznych. Metody zwiększania niezawodności Tolerancja występujących błędów Unikanie błędów Unikanie niebezpiecznych technik (wątki, skoki, wskaźniki, przerwania,... ) Stosowanie zasady ograniczonego dostępu (reguły zakresu, hermetyzacja, podział pamięci)
Niezawodność oprogramowania (cd) Metody zwiększania niezawodności Unikanie błędów (cd) Stosowanie języków z mocnym typowaniem statycznym Stosowanie języków o wyższym poziomie abstrakcji Stosowanie precyzyjnych interfejsów między modułami Poświęcanie uwagi sytuacjom granicznym Używanie gotowych, przetestowanych komponentów Minimalizowanie odstępu między modelem logicznym a implementacyjnym
Niebezpieczne techniki Instrukcja skoku Duże liczby stałoprzecinkowe Liczby zmiennoprzecinkowe [zmiennopozycyjne] Mechanizmy wołania parametrów procedur i funkcji Brak przejrzystości procedur (efekty uboczne ) Złożone wyrażenia bez onawiasowania
Niebezpieczne techniki (cd) Rekurencja Referencje i wskaźniki + arytmetyka wskaźników Dynamiczna alokacja pamięci (dynamiczne struktury danych oraz programowanie funkcyjne) Przerwania (wyjątki) i zdarzenia Obliczenia równoległe wątki Dzielenie zasobów między wieloma procesami
Zasada ograniczonego dostępu Wszystko co może być ukryte, powinno być zakryte Prywatne pola Listy eksportowe Listy importowe
Typy i typowanie Największy praktyczny sukces informatyki teoretycznej Wyrafinowane typy danych Zasada deklarowania zmiennych Statyczne weryfikowanie typów Eliminuje około 80% błędów semantycznych
Tolerancja błędów Wykryj błąd Wyjdź z błędu w sposób kontrolowany Spróbuj naprawić błąd Poinformuj o błędzie Techniki: Dynamiczne weryfikowanie typów sprawdzanie zgodności typów w trakcie wykonywania programu. Asercje, zgodność zakresu indeksów, itp Porównanie wykonań różnych wersji modułu Real-Time
Transakcje Transakcja to ciąg operacji (na bazie danych), które powinny być wykonane łącznie i niepodzielne Możliwe etapy wykonania transakcji Odczyt wartości zmiennej x Zapis wartości zmiennej x Wycofanie się z transakcji Zatwierdzenie transakcji Transakcje realizują atomowość złożonych operacji. Zapewniają spójność baz i poprawność obliczeń procesów wykonywanych współbieżnie.
Transakcje a bezpieczeństwo Diagram użycia system bankowy 1. Klient wkłada do ATM kartę i dokonuje autoryzacji 2. Klient określa kwotę wypłaty 3. Konto klienta jest sprawdzane 4. Konto jest pomniejszane o kwotę wypłaty 5. Wysyłane jest polecenie do kasy 6. Kasjerka odlicza kwotę od stanu kasy 7. Kasjerka wypłaca klientowi pieniądze Problem: Co się stanie, jeśli po akcji (4) nastąpi awaria zasilania?
Postulaty ACID Każda transakcja powinna spełniać: A Atomowość (atomicity) w ramach jednej transakcji się albo wszystkie operacje, albo żadna. C Spójność (consistency) transakcja zachowuje spójność bazy I Izolacja (isolation) poprawonść działania transakcji nie zależy od, ani nie ma wpływu na działanie innych transakcji D Trwałość (durability) poprawne zkończenie transakcji powoduje trwałe zapisanie jej wyników. Zdarzenia losowe (awarie) nie mogą tego odwrócić.
Transakcje w SQL Brak obsługi transkacji dyskwalifikuje system zarządzania BD BEGIN TRANSACTION początek traansakcji SELECT, INSERT, UPDATE, DELETE, CREATE rozpoczynają transakcję, jeśli nie została jeszcze rozpoczęta COMMIT albo ROLLBACK (ABORT) koniec transakcji
Zamki i zakleszczanie Zamek (ang.: lock) metoda ograniczania dostępu do danych Zamek typu X zawłaszczanie dostępu do danych na wyłączność, pozostałe procesy nia mają żadnego dostępu Zamek typu S zawłaszczanie możliwości modyfikowania danych, pozostałe procesy mogą dane odczytywać Protokół 2PL (two-phase locking) 1. Zakładanie zamków nie ma zwalniania 2. Zwalnianie zamków nie ma zakładania
Zamki i zakleszczanie Zakleszczenie (ang.: deadlock) wzajemne blokowanie dostępu procesów do potrzebnych im wzajemnie zasobów. Rodzaje zakleszczeń 1. pełen zakleszczenie wszystkich procesów 2. częściowy (ang.: livelock) zakleszczenie części procesów, niektóre działają
Metody walki z zakleszczaniem Unikanie techniki gwarantujące brak zakleszczeń Wstępne żadanie wszystkich zasobów ogranicza współbieżność Czekasz? Umieraj! (wait-die) Zasób zajęty? Zabij transakcję i zacznij ją od nowa. Wykrywanie i rozrywanie pętli zakleszczeń Wykrywanie trudny problem złożoność grafu oczekiwania (wait-for graph) jest rzędu n 2 dla n procesów Rozerwanie wymaga wyboru ofiary (np. czas oczekiwania, priorytet, pracochłonność)
Stemple czasowe Każda transakcja dostaje unikalny stempel w momencie startu. Zmiany wartości zmiennych wykonywane są na kopiach. Każdy obiekt przechowuje dwa stemple: transakcji, która ostatnio modyfikowała obiekt i transkacji, która ostatnio odczytała obiekt W momencie zapisu sprawdza się stemple na danych. Dla aktualizowanych obiektów nadpisujemy, jeśli nikt inny nie nadpisał wartości w międzyczasie. Jeśli nadpisał restart Dla odczytywanych obiektów jeśli nikt inny nie nadpisał wartości w międzyczasie, to O.K. Jeśli nadpisał restart
Ziarnistość transakcji Możliwe poziomy ziarnistości Baza danych Relacja Rekord Element rekordu Atrybut Fizyczna strona pamięci Grube ziarna = duży poziom bezpieczeństwa, mała efektywność Małe ziarna = duża efektywność, niski poziom bezpieczeństwa
Odtwarzanie systemu po awarii Back-up Przegrywanie danych na inne nośniki w bankach co 30 Log (dziennik) Rejestracja wszystkich operacji na danych, łącznie z numerami transakcji Recovery Odtwarzanie stanu bazy na podstawie backupu i logu
Odtwarzanie systemu po awarii (cd) Rollback Wycofywanie operacji w bazie na podstawie logu Checkpoint Wykorzystywane do odrabiania Replication Fizyczne powielanie informacji w celu zwiekszenia niezawodności i reaktywności systemu
Środowiska implementacyjne języki proceduralne Ciągle popularne moduł = aplikacja grupa funkcji = funkcja systemu struktury danych = składy danych aplikacji Niewielkie możliwości kontroli dostępu do danych
Środowiska implementacyjne języki obiektowe Wygodne do implementowania obiektowych projektów Początkowo dominowały hybrydy obiektowe rozszerzenia języka proceduralnego Rośnie rola języków zaprojektowanych obiektowo: Smalltalk, java, Eiffel, VisualAge, C#
Środowiska implementacyjne relacyjne BD Dominujące środowiska manipulowania dużymi zbiorami danych. Zalety: wielodostęp zróżnicowane prawa dostępu wysoka niezawodność (ograniczona) rozszerzalność możlowość rozpraszania danych abstrakcyjne języki dostępu (SQL, ODBC, JDBC)
Środowiska implementacyjne obiektowe BD Próbują skompensować wady relacyjnych systemów BD: prymitywny model pojęciowy mała efektywność w pewnych aplikacjach (kaskadowe łączenie) ograniczenia typów danych brak hermetyzacji wieksza pracochłonność kodowania brak powszechnej akceptacji skutkuje tworzeniem hybryd (Oracle 8)
Środowiska implementacyjne programów użytkowych Na przykład: Microsoft Office: proceduralny język Visual Basic rozbudowana biblioteka obiektów mikrodefinicje debugger dystrybucja aplikacji wykonywalnych obsługa standardów DLL, DDE, OLE, ODBC dialogowe projektowanie interfejsu użytkownika
Narzędzia CASE w implementacji Niektóre implementacje CASE (lower) dostarczają generatory kodu; Skrypty tworzące relacje w bazie danych definicje struktur danych nagłówki procedur i funkcji definicje klas nagłówki metod Niektóre dostarczają interfejs do narzędzi RAD
Rezultaty fazy projektowania Poprawiony dokument opisujący wymagania Poprawiony model analityczny Poprawiony projekt teraz dokumentacja techniczna Kod Raport z testowania modułów Baza danych Projekt fizycznej struktury systemu Harmonogram fazy testowania
Przykłady referatów i pytań egzaminacyjnych Omów znaczenie niezawodności oprogramowania Omów podobieństwa i różnice między unikaniem, a tolerancją błędów Wyjaśnij powody uznania wątków za niebezpieczną technikę programistyczną Omów znaczenie mocnej kontroli typów Wymień typowe środowiska implementacyjne