WERYFIKACJA WSPOMAGANA KOMPUTEROWO

Podobne dokumenty
Specyfikacje w praktyce na przykładzie JML-a. Sesja I

Specyfikacje formalne

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

Formalna weryfikacja oprogramowania w lotnictwie

Techniki zabezpieczania kodu - kontrola wyjatków. Temat VIII

Programowanie kontraktowe w Javie

Co jeszcze mogą nam dać adnotacje? Adam Warski

Java w 21 dni / Rogers Cadenhead. Gliwice, cop Spis treści. O autorze 11. Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA

Podstawy i języki programowania

Projektowanie obiektowe oprogramowania Testowanie oprogramowania Wykład 13 Wiktor Zychla 2014

Praktyczne metody weryfikacji

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

Podstawy Informatyki. Algorytmy i ich poprawność

Dziedziczenie. Tomasz Borzyszkowski

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Egzamin / zaliczenie na ocenę*

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

Języki i metody programowania Java. Wykład 2 (część 2)

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

Język JAVA podstawy. wykład 1, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Praktyczne metody weryfikacji. Wykład 9: Weryfikacja ograniczona.. p.1/40

METODY PROGRAMOWANIA

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

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

Modelowanie i Programowanie Obiektowe

JUnit TESTY JEDNOSTKOWE. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

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

Paweł Kurzawa, Delfina Kongo

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

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

Java Collections Framework

Mechanizm dziedziczenia

Podstawy Programowania Obiektowego

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

Wzorce projektowe. dr inż. Marcin Pietroo

12) Wadą modelu kaskadowego jest: Zagadnienia obowiązujące na egzaminie z inżynierii oprogramowania: 13) Wadą modelu opartego na prototypowaniu jest:

Wzorce projektowe i refaktoryzacja

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

KOTLIN. Język programowania dla Androida

Program szkolenia: Continuous Integration i Git

Wykład 0 Informacje Podstawowe

Logika Temporalna i Automaty Czasowe

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Technologie informacyjne - wykład 12 -

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

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

Programowanie w Ruby

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

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

Wstęp do Programowania potok funkcyjny

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Praktyczne metody weryfikacji

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Wykład 9: Polimorfizm i klasy wirtualne

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/2017

Programowanie obiektowe. Wprowadzenie

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Informatyka I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) stacjonarne (stacjonarne / niestacjonarne)

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015

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

Programowanie, algorytmy i struktury danych

Techniki zabezpieczania kodu sprawdzanie modeli. Temat VI

Programowanie obiektowe 1 - opis przedmiotu

KARTA PRZEDMIOTU. Egzamin / zaliczenie. Egzamin / zaliczenie. ocenę*

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Model-checking programów w Javie

Scala - programowanie obiektowo-funkcyjne

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

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

Programowanie obiektowe - 1.

POLITECHNIKA LUBELSKA. Walidacja Modeli Xtext

Wykład 8: Obsługa Wyjątków

Programowanie obiektowe

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Wykład 7. Projektowanie kodu oprogramowania

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

Programowanie obiektowe Object programming. Elektrotechnika II stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny)

Java EE produkcja oprogramowania

PARADYGMATY PROGRAMOWANIA Wykład 4

Inżynieria Programowania Weryfikacja i zatwierdzanie

Technologie cyfrowe semestr letni 2018/2019

UML cz. II. UML cz. II 1/38

Programowanie obiektowe

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

Enkapsulacja, dziedziczenie, polimorfizm

Hoare Advanced Homework Assistant

Logika Hoare a z jawnymi aktualizacjami stanu

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Pętle. Programowanie komputerowe

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

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Bezpieczeństwo systemów komputerowych. Java i JavaScript. Java i JavaScript. Java - historia

Programowanie obiektowe

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

Optimizing Programs with Intended Semantics

Platformy Programistyczne Podstawy języka Java

Transkrypt:

WERYFIKACJA WSPOMAGANA KOMPUTEROWO Wykład 10 Dowodzenie poprawności programów. Java Modeling Language

I. Dowodzenie poprawności

DOWODZENIE POPRAWNOŚCI obligacje dowodowe system wspomagający dowodzenie dowód?

DOWODZENIE POPRAWNOŚCI obligacje dowodowe system wspomagający dowodzenie dowód?

DOWODZENIE POPRAWNOŚCI obligacje dowodowe automatycznie lub interakcyjnie system wspomagający dowodzenie dowód?

DOWODZENIE POPRAWNOŚCI - CECHY CHARAKTERYSTYCZNE analizujemy udekorowany program źródłowy na ogół tylko częściowo automatycznie na ogół konieczny duży nakład pracy specjalisty stosowalne do niewielkich programów parametryzacja/generalizacja

ESC / JAVA 2 Automatyczny system dowodzący Simplify semantyka Javy i JMLa w logice 1go rzędu (ok. 100 aksjomatów) Dowodzenie poprawności podczas kompilacji (analiza statyczna) Brak pełności i poprawności nie znajduje wszystkich błędów fałszywe alarmy

POSZERZONA ANALIZA STATYCZNA jakość poszerzona analiza statyczna KeY, Loop,... analiza statyczna PathFinder, Bandera, Bogor,... ESC / Java 2 Jlint, FindBugs, PMD,... weryfikacja modelowa javac dowodzenie poprawności koszt

ESC / JAVA 2 warunki,,bazowe (rozwinięcie pętli) Simplify obligacje dowodowe (VC) dowód kontrprzykład ostrzeżenie

ESC / JAVA 2 warunki,,bazowe (rozwinięcie pętli) Simplify obligacje dowodowe (VC) najsłabsze warunki wstępne dowód kontrprzykład ostrzeżenie

II. JML

ŹRÓDŁA G. T. Leavens, Y. Cheon, Design by Contract with JML P. Chalin, J. R. Kiniry, G. T. Leavens, E. Poll, Beyond Assertions: Advanced Specification and Verification with JML and ESC/Java2 J. R. Kiniry, G. T. Leavens, E. Poll, A JML Tutorial: Modular Specification and Verification of Functional Behavior for Java, CAV 2007 Tutorial K. Rustan, M. Leino, G. Nelson, J.B. Saxe, ESC/Java User s Manual

ZAŁOŻENIA formalny język specyfikacji (i dokumentacji) inspiracja: logika Hoare a najsłabszy warunek wstępny Dijkstry łatwy w użyciu dla programisty (asercje),,lekkie częściowe specyfikacje DBC: design by contract

KONTRAKT

KONTRAKT warunki wstępne (ang. pre-conditions)

KONTRAKT warunki wstępne (ang. pre-conditions) kontrakt warunki końcowe (ang. post-conditions)

KONTRAKT warunki wstępne (ang. pre-conditions) kontrakt warunki końcowe (ang. post-conditions) semantyka: poprawność częściowa

z KONTRAKT z może założyć warunek wstępny musi zapewnić metoda wywołujący musi zapewnić warunek końcowy może założyć

z KONTRAKT z może założyć warunek wstępny musi zapewnić metoda Modularna analiza wywołujący musi zapewnić warunek końcowy może założyć

KONTRAKT

MODULARNOŚĆ

LOGIKA && ==>! == kwantyfikacja: \forall \exists \sum \product \min \max \num_of \result \old( ) język naturalny

WYKONYWALNOŚĆ

WYKONYWALNOŚĆ możliwa analiza dynamiczna (w czasie wykonania)

WYKONYWALNOŚĆ możliwa analiza dynamiczna (w czasie wykonania) jmlc

WARUNEK KOŃCOWY normalny: ensures wyjątkowy: signals signals_only

WYJĄTKI signals(exception) false ensures false

NIEZMIENNIKI (OBIEKTOWE) implicite w warunkach wstępnych i końcowych (również wyjątkowych) wszystkich metod warunkach końcowych konstruktorów chwilowo mogą nie zachodzić ułatwiają zrozumienie kodu

NIEZMIENNIKI (OBIEKTOWE) implicite w warunkach wstępnych i końcowych (również wyjątkowych) wszystkich metod warunkach końcowych konstruktorów skrót? chwilowo mogą nie zachodzić ułatwiają zrozumienie kodu

NIEZMIENNIKI niezmienniki to dużo więcej niż użyteczny skrót niezmienniki są dziedziczone mogą zależeć od innych obiektów! muszą być prawdziwe we wszytkich stanach obserwowalnych

NIEZMIENNIKI niezmienniki to dużo więcej niż użyteczny skrót niezmienniki są dziedziczone mogą zależeć od innych obiektów! muszą być prawdziwe we wszytkich stanach obserwowalnych wejście do/wyjście z dowolnej metody

NON_NULL skrótowy zapis niezmiennika warunku wstępnego końcowego

ASSIGNABLE, PURE assignable specyfikuje dozwolone efekty uboczne pure = assignable \nothing

,,LEKKIE I,,CIĘŻKIE SPECYFIKACJE analiza statyczna analiza dynamiczna

DZIEDZICZENIE SPECYFIKACJI podklasa dziedziczy specyfikację niezmiennik podklasy jest silniejszy warunek wstępny podklasy jest słabszy warunek końcowy podklasy jest silniejszy

WIDOCZNOŚĆ - ABSTRAKCJA

ZMIENNE MODELOWE abstrakcyjnie reprezentują zmienne konkretne niemodyfikowalne zmieniają wartość wraz ze zmiennymi konkretnymi

ZMIENNE-DUCHY istnieją tylko w specyfikacji modyfikowalne (set)

I INNE... niezmienniki pętli aliasy grupy danych,,omijanie niezmienników: metody pomocnicze poprawność synchronizacji...

III. ESC / Java 2

WŁASNOŚCI wyjątki: dereferencja NULLa indeks tablicy poza zakresem, ujemny rozmiar tablicy brak rzutowania na podklasę dzielenie przez 0 nie są sprawdzane błędy wykonania, np. OutOfMemoryError

WŁASNOŚCI poprawność metod częściowa popawność względem warunków wstępnych i końcowych naruszenie assignable (pure) niezadeklarowane wyjątki naruszenie non_null

WŁASNOŚCI poprawność pętli loop_invariant decreases Uwaga: pętle są rozwijane zadaną liczbę razy! ESC/Java User s Manual

WŁASNOŚCI poprawność przepływu sterowania: assert reachable

WŁASNOŚCI poprawność klas - niezmienniki obiektowe: initially invariant (tylko w stanach obserwowalnych)

WŁASNOŚCI wielowątkowość monitored zakleszczenie (np. spowodowane przez synchronized) nie jest sprawdzany brak synchronizacji

INFORMACJA DIAGNOSTYCZNA czasem nieczytelna punkt wyjścia: formuła uznana przez Simplify za nieprawdziwą (spełnialną)

NIEPOPRAWNOŚĆ - BRAK BŁĘDU ESC / Java 2 nie sprawdza pewnych własności, można wyłączyć sprawdzanie pewnych własności

NIEPOPRAWNOŚĆ - PRZYCZYNY assume, nowarn pętle - skończone rozwinięcia niezmienniki obiektów tworzonych dynamicznie ignorowane tylko niektóre niezmienniki są brane pod uwagę (heurystyka) nie jest sprawdzany brak synchronizacji przepełnienie arytmetyczne jest ignorowane Simplify ma ograniczony czas działania Simplify: błąd w heurystycznej procedurze dla arytmetyki

NIEPEŁNOŚĆ - FAŁSZYWE ALARMY ESC / Java 2 nie jest w stanie stwierdzić, że dany błąd nie może zajść

NIEPEŁNOŚĆ - PRZYCZYNY Simplify jest niepełny (zwraca kontrprzykład,,za wcześnie ) niepełna semantyka Javy: arytmetyka zmiennopozycyjna, operacje bitowe, napisy przepełnienie arytmetyczne jest ignorowane przechwytywany wyjątek też jest traktowany jako błąd modularność: statyczny typ obiektu, którego metodę wywołujemy, może mieć słabszą specyfikację niż typ dynamiczny

ESC / JAVA 2 - SILNE STRONY szybko znajduje niemało błędów narzędzie w pełni automatyczne można uruchomić nawet bez specyfikacji modularność informacja diagnostyczna integracja ze środowiskami programistycznymi (Eclipse)

ESC / JAVA 2 - SŁABE STRONY brak pełności i poprawności czasochłonna specyfikacja jest konieczna informacja diagnostyczna nieczytelna tylko dla Javy 1.4 niedosyt dokumentacji

NARZĘDZIA DLA JMLA poszerzona analiza statyczna Esc/Java2 weryfikacja modelowa Bogor *.html jmldoc jmlc *.class jmlunit KeY, LOOP, Krakatoa, JACK testy jednostkowe dowód poprawności

NARZĘDZIA DLA JMLA poszerzona analiza statyczna Esc/Java2 weryfikacja modelowa Bogor *.html jmldoc jmlc *.class jmlunit testy jednostkowe Daikon *.java KeY, LOOP, Krakatoa, JACK dowód poprawności