Techniki zabezpieczania kodu sprawdzanie modeli. Temat VI

Podobne dokumenty
Praktyczne metody weryfikacji

Model-checking programów w Javie

Logika Temporalna i Automaty Czasowe

Praktyczne metody weryfikacji

UML w Visual Studio. Michał Ciećwierz

Logika Temporalna i Automaty Czasowe

WERYFIKACJA WSPOMAGANA KOMPUTEROWO. Sławomir Lasota Uniwersytet Warszawski 2009/1020

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Formalna weryfikacja oprogramowania w lotnictwie

Programowanie obiektowe - 1.

Logika Temporalna i Automaty Czasowe

Rodzaje Code slicing w weryfikacji Narzędzia Literatura. Code slicing. Bartłomiej Wołowiec. 16 lutego 2011

Podstawy Programowania Obiektowego

Translacja wprowadzenie

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Bezpieczeństwo systemów komputerowych

Projektowanie oprogramowania. Wykład Weryfikacja i Zatwierdzanie Inżynieria Oprogramowania Kazimierz Michalik

Języki i metodyka programowania

Wprowadzenie do programowania współbieżnego

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Programowanie Komponentowe WebAPI

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Historia modeli programowania

Podstawy Informatyki Języki programowania c.d.

Wykład 8. Testowanie w JEE 5.0 (1) Autor: Zofia Kruczkiewicz. Zofia Kruczkiewicz

Wykład I. Wprowadzenie do baz danych

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Podstawy i języki programowania

Testowanie oprogramowania. Testowanie oprogramowania 1/34

Modelowanie i Programowanie Obiektowe

Wykład 8: klasy cz. 4

Systemy Czasu Rzeczywistego. dr inż. Piotr Szwed C3, pok

Komputery przemysłowe i systemy wbudowane

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi

Modelowanie. Wykład 1: Wprowadzenie do Modelowania i języka UML. Anna Kulig

Języki i techniki programowania Ćwiczenia 2

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

Techniki zabezpieczania kodu analiza przepływu informacji. Temat V

Język programowania. Andrzej Bobyk

PyPy's Approach to Virtual Machine Construction

Tworzenie przypadków testowych

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Informatyka. Michał Rad

zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np.

ECDL Podstawy programowania Sylabus - wersja 1.0

Java jako język programowania

Pixy - analiza statyczna skryptów PHP

OSGi Agata Hejmej

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

1 Podstawy c++ w pigułce.

Co to jest jest oprogramowanie? 8. Co to jest inżynieria oprogramowania? 9. Jaka jest różnica pomiędzy inżynierią oprogramowania a informatyką?

ZASADY PROGRAMOWANIA KOMPUTERÓW

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.

Projektowanie baz danych za pomocą narzędzi CASE

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

Zagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)

Metody Kompilacji Wykład 1 Wstęp

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Programowanie Obiektowe Ćwiczenie 4

WERYFIKACJA WSPOMAGANA KOMPUTEROWO

Lab 9 Podstawy Programowania

Wstęp do programowania 2

KOTLIN. Język programowania dla Androida

Usługa: Audyt kodu źródłowego

Multimedia JAVA. Historia

Excel - użycie dodatku Solver

Przesyłania danych przez protokół TCP/IP

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Diagramy ERD. Model struktury danych jest najczęściej tworzony z wykorzystaniem diagramów pojęciowych (konceptualnych). Najpopularniejszym

Programowanie komputerów

Sławomir Kulesza. Projektowanie automatów asynchronicznych

Java EE produkcja oprogramowania

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Modelowanie procesów współbieżnych

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

Metoda Tablic Semantycznych

Etapy życia oprogramowania

3URJUDPRZDQLHZVSyáELH*QHZVWS

Diagramy czynności Na podstawie UML 2.0 Tutorial

Język Java część 2 (przykładowa aplikacja)

Zapisywanie algorytmów w języku programowania

Języki formalne i automaty Ćwiczenia 7

Transkrypt:

Techniki zabezpieczania kodu sprawdzanie modeli Temat VI

Podstawowa idea Skończony model oprogramowania + Formuła logiki temporalnej (LTL, CTL, µ-rachunek...) Czy w systemie nie ma dead-locku? Czy wysłany pakiet w końcu zostanie odebrany? Ślad potencjalnego błędu lub OK (2/32)

Własności temporalne Własności bezpieczeństwa: niezmienniki, deadlocki osiagalność itp. sprawdzenie na skończonych śladach Własności żywotności sprawiedliwość responsywność itp. sprawdzenie na nieskończonych śladach (3/32)

Zastosowanie Bład w Pentium Intela był katastrofa, która wprowadziła sprawdzanie modeli do przemysłu tworzenia sprzętu Intel, IBM, Motorola, itp. zatrudniaja obecnie setki ekspertów od sprawdzania modeli Co wprowadzi sprawdzanie modeli do przemysłu wytwórstwa oprogramowania? (4/32)

Możliwe podejścia do stanu Stan jawny Stan symboliczny (5/32)

Stan jawny Idea: stany tworzone w locie, analiza ruchów do przodu, odwiedzone stany zapisane w tablicy haszujacej. (6/32)

Stan jawny Własności: pamięciożerność, sprawdza się przy znajdowaniu błędów współbieżności, krótkie ścieżki wykonania sa lepsze, ale długie też można obsługiwać możliwa obsługa tworzenia obiektów/watków Zwykle używane do analizy oprogramowania (7/32)

Stan symboliczny Idea: w każdej chwili operacje wynonywane na zbiorach stanów zwykle analiza wstecz, relacja przejścia zakodowana zwykle jako (pewien wariant) BDD (binary decision diagram) lub problem spełnialności (8/32)

Stan symboliczny Własności: jest w stanie obsługiwać bardzo duże przestrzenie stanów, niezbyt dobra dla systemów asynchronicznych nie radzi sobie dobrze z długimi ścieżkami wykonania najlepiej działa ze statyczna relacja tranzycji, więc słabo daje sobie radę z dynamicznym tworzeniem obiektów/watków. Zwykle używane do analizy sprzętu (9/32)

Problemy zwiazane ze sprawdzaniem modeli konstruowanie modeli opisywanie własności eksplozja liczby stanów interpretacja wyników (10/32)

Problemy z konstruowaniem modeli Przepaść semantyczna: Języki programowania: metody, dziedziczenie, dynamiczna alokacja, wyjatki, itp. Język modeli: automaty skończone (11/32)

Problemy z konstruowaniem modeli Analiza stosowalna do małych jednostek kodu (eksplozja stanów) Niejasne granice między jednostkami: referencje wypływaja poza jednostkę, zewnętrzne komponenty moga zmieniać stan obiektów z jednoski, powszechna obecność call-backów (np. w kodzie GUI), pracochłonne definiowanie punktów interakcji (12/32)

Problemy z opisywaniem własności Między otwarciem a zamknięciem okna przycisk X może być przyciśnięty najwyżej dwa razy odpowiednia formuła LTL: []((open /\ <>close) -> ((!pushx /\!close) U (close \/ ((pushx /\!close) U (close \/ ((!pushx /\!close) U (close \/ ((pushx /\!close) U (close \/ (!pushx U close)))))))))) (13/32)

Problemy z opisywaniem własności Własności specyfikuje się w terminach modelu, a nie kodu źródłowego Obiekty maja różne identyfikatory w trakcie życia (14/32)

Tłumaczenie półautomatyczne Tłumaczenie i abstrakcja oparte o tablice system Feaver Gerarda Holzmanna specyfikacja fragmentów kodu w C i sposobu ich translacji do języka abstrakcyjnego (Promela w SPINie) reszta translacji automatyczna znaleziono 75 błędów w systemie PathStar firmy Lucent http://cm.bell-labs.com/cm/cs/who/gerard/ Zalety: można użyć ponownie po zmianie programu działa dobrze dla programów o długim czasie tworzenia i lokalnych zmianach (15/32)

Tłumaczenie w pełni automatyczne Zaleta udział człowieka niepotrzebny Wada ograniczone możliwości systemu docelowego Przykłady: Java PathFinder http://ase.arc.nasa.gov/havelund/jpf.html Java Promela (Spin) JCAT http://www.dai-arc.polito.it/dai-arc/auto/tools/tool6.shtml Java Promela (lub dspin) Bandera http://www.cis.ksu.edu/santos/bandera/ bajtkod Javy Promela, SMV or dspin (16/32)

Problemy z eksplozja stanów Dołożenie równoległej jednostki (zwykle obiektu) powoduje pomnożenie przestrzeni stanów przez rozmiar proporcjonalny do tej jednostki. Negacja formuły powoduje wykładniczy przeskok Pomaga prawo Moore a (wzrost mocy komputerów)...ale problem ze skalowalnościa zostaje. (17/32)

Przykładowa technika redukcji stanów Redukcje częściowo-porzadkowe w JPF Wykorzystanie stałych zbiorów (ang. persistent sets) Wynajdywanie tranzycji, które sa globalnie niezależne Wymaga analizy statycznej przed sprawdzeniem modelu, aby określić niezależność (analiza aliasów) (18/32)

Problemy z interpretacja wyników długie ślady błędów, przepaść semantyczna, sprytne kodowania, wielokrotne optymalizacje i transformacje abstrakcja powoduje powstawanie nadmiarowych śladów (19/32)

Abstrakcja Sprawdzanie modeli zwykle nie działa na prawdziwych programach Sprawdzanie modeli zwykle działa na systemach skończeniestanowych Abstrakcja rozwiazuje dwa problemy: pozwala sprawdzać coś, na czym sprawdzaczka nie może bezpośrednio działać obcina przestrzeń stanów do rozsadnych rozmiarów (20/32)

Abstrakcja Trzy rodzaje abstrakcji: przybliżenia z góry do systemu dodane sa nowe zachowania przybliżenia z dołu po abstrakcji mamy mniej zachowań abstrakcje precyzyjne w zabstrahowanym i oryginalnym programie sa te same zachowania (21/32)

Przybliżanie z dołu Usuwamy części programu, które uważamy za nie majace zwiazku ze sprawdzana własnościa ograniczenie wartości do 0..10 zamiast całego int rozmiar kolejki 3 zamiast nieograniczonego itp. Poczatkowo najpopularniejsza forma sprawdzania modeli Zwykle wykonywana ręcznie bez gwarancji, że usuwane sa tylko dobre zachowania Możliwa do uzyskania abstrakcja precyzyjna Przekroje programu jako przykład zautomatyzowanego przybliżania od dołu (ang. program slicing) (22/32)

Przybliżanie z góry Odwzorowywanie zbiorów stanów konkretnego programu w pojedyncze stany programu abstrakcyjnego Mniejsza liczba stanu, ale więcej możliwych tranzycji, a więc i zachowań W rzadkich wypadkach może prowadzić do precyzyjnej abstrakcji Abstrakcje oparte na typach (int zastapiony przez {NEG, ZERO, P OS}) (23/32)

Przybliżanie z góry c.d. Abstrakcja predykatów (zastępujemy predykaty zmiennymi boolowskimi a instrukcje modyfikujace wartość predykatu modyfikujacymi wartość zmiennych) Automatyczna (konserwatywna) abstrakcja Duży problem z eliminacja nadmiarowych błędów Odnoszenie błędów w programach abstrakcyjnych do oryginalnych programów (24/32)

Przykład abstrakcji typów Abstrakcja typów danych w Banderze Na przykład: zamiast typu int rozważamy typ {NEG, ZERO, P OS} Zdefiniowane abstrakcje w Bandera: Range(i,j) Modulo(k), Set(v,?) Point wszystko w jeden punkt abstrakcje tablic indeksy i elementy abstrakcje klas abstrakcje dla poszczególnych pól (25/32)

Pokrycie testami w sprawdzaniu modeli Rzeczywistość: Przy sprawdzaniu modeli CZESTO brakuje pamięci Jeśli nie znaleziono błędu, to nie ma pewności, że go nie ma. Potrzebna jest miara pokrycia JPF został rozszerzony o obliczanie pokrycia rozgałęzień To pokrycie pozwala na lepsze heurystyczne poczukiwanie (26/32)

Techniki w Java Path Finder/Banderze Abstrakcja predykatów i abstrakcja oparta o typy Redukcje częściowo-porzadkowe i symetryczne Przekroje programów Przeszukiwanie heurystyczne Wykonywanie symboliczne Wyjaśnienia błędów (27/32)

Case study DEOS Honeywell Digital Engine Operating System (DEOS) System czasu rzeczywistego dla zintegrowanych modularnych systemów lotniczych DEOS Scheduler: nietrywialny program w Javie: 1443 LOC, 20 klas, 6 watków Własność: Procesy aplikacji maja gwarancję zaszeregowania przez opłacona ilość czasu w trakcie trwania czasowej jednostki szeregowania. (28/32)

Analiza dla K9 Mars Rover Rover to 8000 LOC przy 6 watkach dużo synchronizacji między watkami, złożone operacje na kolejkach Porównanie z tradycyjnym testowaniem Pierwotny kod w C++, potem przetłumaczony do Javy i C 4 grupy po 2 ludzi używało różnych technik wykrywania zadanych błędów (29/32)

Metodologia dla sprawdzania modeli Zespół był proszony, aby nie uruchamiać kodu (tylko sprawdzać modele) Kod źródłowy opierał się mocno na zależnościach czasowych Zależności czasowe zamodelowane jako niedeterministyczny wybór Znaleziono wszystkie oprócz jednego znane błędy w programowaniu rozproszonym Lepiej niż pozostałe grupy Tylko ta grupa była w stanie wskazać, jak dojść do błędów Znaleziono także wszystkie błędy spoza programowania rozproszonego (30/32)

Metodologia dla sprawdzania modeli Obserwacje: Porzucono abstrakcję czasu w ciagu pierwszej godziny na korzyść rozwiazania bliższego czasowi rzeczywistemu, ale które mogło ukryć błędy Zbyt trudne okazało się decydowanie, czy błędy sa fałszywe, bez gruntownej znajomości kodu Dużo czasu zajęło przygotowanie kodu, ale potem analiza szła szybko nawet po zmianach w kodzie (31/32)

Główne narzędzia i ośrodki 1. Bandera (SAnToS Laboratory, Kansas State University) 2. Java PathFinder JPF (NASA Ames) 3. SLAM Project (Microsoft Research) 4. BLAST Project (U. Berkeley) 5. FeaVer Project (Lucent/Bell Labs) 6. Alloy (MIT) 7. VeriSoft (dla C, Bell Laboratories, Lucent Technologies) (32/32)