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



Podobne dokumenty
Code slicing: Droga do lepszego rozumienia kodu źródłowego (część druga)

Formalna weryfikacja oprogramowania w lotnictwie

Wykład 3 Składnia języka C# (cz. 2)

Wzorce projektowe i refaktoryzacja

Testowanie oprogramowania. Testowanie oprogramowania 1/34

Java EE produkcja oprogramowania

ZASADY PROGRAMOWANIA KOMPUTERÓW

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

Kompilator języka C na procesor 8051 RC51 implementacja

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

Wymagania edukacyjne z informatyki w klasie VIII

SZKOLENIE TWORZENIE SYSTEMÓW

Zapisywanie algorytmów w języku programowania

Języki programowania zasady ich tworzenia

Egzamin / zaliczenie na ocenę*

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

Michał Olejnik. 22 grudnia 2009

Metody Programowania

Modelowanie i Programowanie Obiektowe

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

Generated by Foxit PDF Creator Foxit Software For evaluation only. System Szablonów

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

METODY PROGRAMOWANIA

Algorytmy sztucznej inteligencji

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

Inżynieria oprogramowania. Jan Magott

Programowanie obiektowe

Paradygmaty programowania

Techniki (automatyzacji) projektowania testów. Adam Roman WarszawQA, 24 II 2016

The current software tools for the JEE platform

xx + x = 1, to y = Jeśli x = 0, to y = 0 Przykładowy układ Funkcja przykładowego układu Metody poszukiwania testów Porównanie tabel prawdy

Tworzenie oprogramowania

Warsztaty AVR. Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR. Dariusz Wika

Pixy - analiza statyczna skryptów PHP

Materiały dodatkowe. Simulink PLC Coder

Wprowadzenie do laboratorium. Zasady obowiązujące na zajęciach. Wprowadzenie do narzędzi wykorzystywanych podczas laboratorium.

Wymagania edukacyjne z informatyki w klasie 8 szkoły podstawowej

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

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

SYSTEMY OPERACYJNE WYKLAD 4 - zarządzanie pamięcią

Inżynieria Programowania Weryfikacja i zatwierdzanie. Plan wykładu. Motto. Wstęp. Notatki. Notatki. Notatki. Notatki.

Efektywna analiza składniowa GBK

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

SpecVer - metodyka tworzenia oprogramowania integrująca zadania specyfikacji, implementacji i weryfikacji modułów programów

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

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

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Wykład 7 Metodyki wytwarzania oprogramowania internetowego (2) Wykładowca: dr inż. Mariusz Trzaska

Maciej Oleksy Zenon Matuszyk

Dokumentacja Użytkownika Systemu

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

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

1 Podstawy c++ w pigułce.

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

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

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

Praktyczne metody weryfikacji

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

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

Programowanie Systemów Wbudowanych

Użycie Visual Basic for Applications ("VBA")

Programowanie i projektowanie obiektowe

Wymagania edukacyjne z informatyki w klasie 8 szkoły podstawowej

bo od managera wymaga się perfekcji

Investing f or Growth

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

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

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

METODY REPREZENTACJI INFORMACJI

Ćwiczenie 1. Przygotowanie środowiska JAVA

Techniki efektywnego testowania kodu dla programistów Java (Spock

Sieci komputerowe - administracja

1.Wstęp. 2.Generowanie systemu w EDK

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

Lifehacking dla R. Przemyślenia i rozwiązania w temacie reprodukowalności analiz i organizacji pracy

ZiMSK. VLAN, trunk, intervlan-routing 1

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

Web frameworks do budowy aplikacji zgodnych z J2EE

Java Podstawy. Michał Bereta

Wprowadzenie (17) Część I. Makra w Excelu - podstawy (23)

Przesyłania danych przez protokół TCP/IP

Jarosław Kuchta Jakość Systemów Informatycznych Jakość Oprogramowania. Pomiary w inżynierii oprogramowania

Załącznik 1 instrukcje instalacji

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

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

PBS. Wykład Zabezpieczenie przełączników i dostępu do sieci LAN

Podstawy programowania obiektowego

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

Program szkolenia: Jenkins - Continuous Integration

Dokumentacja kompilacji źródeł aplikacji 1.0

Prezentacja portalu INTEGRACJA APLIKACJI E-COMMERCE AUTOMATYZACJA PROCESÓW

Ogólne zasady projektowania algorytmów i programowania

Lokalizacja Oprogramowania

Interfejsy i klasy wewnętrzne

Wzorce projektowe. dr inż. Marcin Pietroo

Logika Temporalna i Automaty Czasowe

Algorytmy i struktury danych

RAPORT KOŃCOWY PROJEKTU

Programowanie w Javie

Transkrypt:

w weryfikacji 16 lutego 2011

w weryfikacji 1 Rodzaje Statyczny slicing (ang. Static Slicing) Dynamiczny slicing (ang. Dynamic Slicing) Warunkowy slicing (ang. Conditioned Slicing) Bezpostaciowy slicing (ang. Amorphous Slicing) 2 w weryfikacji Motywacja Rodzaje slicingu w weryfikacji 3 Frama-C Bogor CodeSurfer 4

w weryfikacji Code / Program slicing Zaproponowany przez Mark Weiser w 1981, Ułatwia analizę dużych programów, Czytelniejsze od grafów zależności, Zmniejsza ilość kodu podczas weryfikacji,

w weryfikacji Statyczny slicing (ang. Static Slicing) Dynamiczny slicing (ang. Dynamic Slicing) Warunkowy slicing (ang. Conditioned Slicing) Bezpostaciowy slicing (ang. Amorphous Slicing) Początkowa metoda zaproponowana przez Weiser-a, Usuwanie całych wyrażeń, jeżeli nie mają one wpływu na wybrane zmienne Wybieramy zmienne użyte w wyrażeniu oraz jako lokalizacje Najprostsza odmiana slicingu Mało efektywna dla większości kawałków kodu

-)1!+(1<#-#&2&,#-)&-)1!+;"31'-.$/,."# 1 3*+:&+:"+3,# #-1<+,."# 1-)# Rodzaje Statyczny slicing (ang. Static Slicing),2;1$35 6.$)-1* &;,+"3+-. ; 41;+: 3#,)1"#,) $ )-C+"4#$0 -#;14#;,!.,&,."# 1!+!"31:3#0 $.$/,."# 1-)13#:#-1,*".;1")&42()$)-<&-#01<++2) <#(-+ w weryfikacji Dynamiczny slicing (ang. Dynamic Slicing) +"#3-#,#";+ $)34)1--.$/!"31;,#"3#-.$/!"313;+,."# 1-)15D"3.* #:14+'"#3&= Warunkowy slicing (ang. Conditioned Slicing) 0 $.4; 41;+: 2 :,#!+-) 231".2&-*)5E.2&-1*F!"31:2;#,)#!"3.* #:+,.*+: Bezpostaciowy slicing (ang. Amorphous Slicing),0 3.*&G#H#5!"#$&'()*D"3.* #:+,.*+: "B: +,.,0 3.*&G#H#5 E.2&-1* I!"31:2;#,)#,.$)-1* *+:& &;,+"3+-. 3<+:-)1 3 *".;1")&4 2()$)-= <&<15, z>a<:3)1j15k012;()-) *+:&:(#*;B"10*+-2;"&+,#-.' :3)1,.$)-1*# JzK012;"+3,# #- 34)1-- 5

-)1!+(1<#-#&2&,#-)&-)1!+;"31'-.$/,."# 1 3*+:&+:"+3,# #-1<+,."# 1-)# Rodzaje Statyczny slicing (ang. Static Slicing),2;1$35 6.$)-1* &;,+"3+-. ; 41;+: 3#,)1"#,) $ )-C+"4#$0 -#;14#;,!.,&,."# 1!+!"31:3#0 $.$/,."# 1-)13#:#-1,*".;1")&42()$)-<&-#01<++2) <#(-+ w weryfikacji Dynamiczny slicing (ang. Dynamic Slicing) +"#3-#,#";+ $)34)1--.$/!"31;,#"3#-.$/!"313;+,."# 1-)15D"3.* #:14+'"#3&= Warunkowy slicing (ang. Conditioned Slicing) 0 $.4; 41;+: 2 :,#!+-) 231".2&-*)5E.2&-1*F!"31:2;#,)#!"3.* #:+,.*+: Bezpostaciowy slicing (ang. Amorphous Slicing),0 3.*&G#H#5!"#$&'()*D"3.* #:+,.*+: "B: +,.,0 3.*&G#H#5 E.2&-1* I!"31:2;#,)#,.$)-1* *+:& &;,+"3+-. 3<+:-)1 3 *".;1")&4 2()$)-= <&<15, z>a<:3)1j15k012;()-) *+:&:(#*;B"10*+-2;"&+,#-.' :3)1,.$)-1*# JzK012;"+3,# #- 34)1-- 5!"#$&'()*!"#$&'(!)*+,-.,&#!./,0&'!.!(-#*'-)1!2345!.67!! 8*+,! 0,9*-.'$5! '! )*+,-.,&#! +#$&'(! (,0)!!./,0&'!.! 0':&$;!.8+'-8!;'0#&'! +#-8 '&85!(*<-'!1,/!1'!+= #+!&8!+8-*,!.1'&&';!>z?!+!@&!34!(,0)7!!!

w weryfikacji Statyczny slicing (ang. Static Slicing) Dynamiczny slicing (ang. Dynamic Slicing) Warunkowy slicing (ang. Conditioned Slicing) Bezpostaciowy slicing (ang. Amorphous Slicing) Dodajemy konkretne wartości niektórych zmiennych, Często duża redukcja kodu, Za duże ograniczenia na zmienne,

-1<+,2;1$3>#-<5executable backward static slicing?5@#3,#!+$/+:3)+:3# + 1 A *;B"1#&;+"!"3.0 :1C)-)&0 $,.$)-*)*+:&+"#32!+2+'&;,+"31-)#,.$)-*#561)21" Rodzaje Statyczny slicing (ang. Static Slicing)!"3.0 A 1*# :.,.$)-1*4&2)!+3+2;#,.*+-.,#(-.4!"+<"#414#01<+;,+"31= w weryfikacji Dynamiczny slicing (ang. Dynamic Slicing) -)1!+(1<#-#&2&,#-)&-)1!+;"31'-.$/,."# 1 3*+:&+:"+3,# #-1<+,."# 1-)# Warunkowy slicing (ang. Conditioned Slicing),2;1$35 6.$)-1* &;,+"3+-. ; 41;+: 3#,)1"#,) $ Bezpostaciowy )-C+"4#$0 -#;14#;,!.,& slicing (ang. Amorphous Slicing),."# 1!+!"31:3#0 $.$/,."# 1-)13#:#-1,*".;1")&42()$)-<&-#01<++2) <#(-+ +"#3-#,#";+ $)34)1--.$/!"31;,#"3#-.$/!"313;+,."# 1-)15D"3.* #:14+'"#3&= 0 $.4; 41;+: 2 :,#!+-) 231".2&-*)5E.2&-1*F!"31:2;#,)#!"3.* #:+,.*+:,0 3.*&G#H#5!"#$&'()*D"3.* #:+,.*+: "B: +,.,0 3.*&G#H#5 E.2&-1* I!"31:2;#,)#,.$)-1* *+:& &;,+"3+-. 3<+:-)1 3 *".;1")&4 2()$)-= <&<15, z>a<:3)1j15k012;()-) *+:&:(#*;B"10*+-2;"&+,#-.' :3)1,.$)-1*# JzK012;"+3,# #- 34)1-- 5

-1<+,2;1$3>#-<5executable backward static slicing?5@#3,#!+$/+:3)+:3# + 1 A *;B"1#&;+"!"3.0 :1C)-)&0 $,.$)-*)*+:&+"#32!+2+'&;,+"31-)#,.$)-*#561)21" Rodzaje Statyczny slicing (ang. Static Slicing)!"3.0 A 1*# :.,.$)-1*4&2)!+3+2;#,.*+-.,#(-.4!"+<"#414#01<+;,+"31= w weryfikacji Dynamiczny slicing (ang. Dynamic Slicing) -)1!+(1<#-#&2&,#-)&-)1!+;"31'-.$/,."# 1 3*+:&+:"+3,# #-1<+,."# 1-)# Warunkowy slicing (ang. Conditioned Slicing)!,2;1$35 6.$)-1* &;,+"3+-. ; 41;+: 3#,)1"#,) $ Bezpostaciowy )-C+"4#$0 -#;14#;,!.,& slicing (ang. Amorphous Slicing) "#$ &'(!#)*+!+,,(-.'/0#!+1*-*'02!3/+,!&#+, )'(!4!)5--6!789:!7;9:!7<9!#5.!7=9>!,."# 1!+!"31:3#0 $.$/,."# 1-)13#:#-1,*".;1")&42()$)-<&-#01<++2) <#(-+ +"#3-#,#";+ $)34)1--.$/!"31;,#"3#-.$/!"313;+,."# 1-)15D"3.* #:14+'"#3&= 0 $.4; 41;+: 2 :,#!+-) 231".2&-*)5E.2&-1*F!"31:2;#,)#!"3.* #:+,.*+:,0 3.*&G#H#5!"!# $&'()*+&#,-)*)&.#/'&."#Dynamic Slicing0# ".* $*!?/,#&.*/!&('?*-.'/0#!+1*-*'02!?# '!2.(+$!.'-.'*/!?'*/3+.(!4(-*'/$! &1!.&'/0#!$5(,/5*2?!+1*-*'02>!@('*$!,#!.!A$,2:!*!?/,#&!,!4!$5(,/5*2?!+1*-*'B 02! 24.01 &'*! &#&,$#4#! 45,# -*!.?*/''(-6:! &1! $,C5(-6!,4#5.#'(! 3/+,! 4(-*'/$! $#&2>!@!)5./-*4'# -*!&#!+,,(-.'/0#!+1*-*'02!'*/!+!,2!5#.),5(4'/!4+.(+,$*/!?# B 1*4/!45,# -*!.?*/''(-6>!D5(,/5*2?!&('?*-.'/0#!+1*-*'02!EF:!G:!HI!+$ &!+*!4* -!.!,5./-6!+$ &#4(-6J!! #K+.52!4(+, )#4'*!L1#$1*.-3*M!4(5 /!F:!.?*/''(-6!G:! 2+,1#'(-6!45,# -*!.?*/''(-6!H>! @5-3 -! &#! )5.($ &#4/0#! $#&2! 5C& #4/0#! )5./&+,4*#'/0#! '! 5(+2'$2! N:! &1! $5(,/5*2?! &('?*-.'/0#! +1*-*'02! +A#5?2 #4'/0#! 3$#J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! <15, z, <args[0]="1", args[1]="2", args[2]="3">>:! 4(-*'/$! #)5C-.! -. -*! +, (-6!,$*-6! 3$! &/$15-3! $1+(! #5.!?/,#&(! +$ &! +*!.!)#3/B &('-./0#!4(5 /'*!Lint z = 0;M>!O/.21,,!)5./&+,4*#5(+2'/$!;>!!"#$&'()*D"3.* #:+,.*+: "B: +,.,0 3.*&G#H#5! E.2&-1* I!"31:2;#,)#,.$)-1* *+:& &;,+"3+-. 3<+:-)1 3 *".;1")&4 2()$)-= <&<15, z>a<:3)1j15k012;()-) *+:&:(#*;B"10*+-2;"&+,#-.' :3)1,.$)-1*# JzK012;"+3,# #- 34)1-- 5! 1,2&34#5"!@(-*'/$!2,4#5.#'(!.0#&'*/!.!$5(,/5*2?!!!!!!! <15, z, <args[0]="1", args[1]="2", args[2]="3">> P#'*/4!45,#!.?*/''/3!args[0]!3/+,!2+,1#'!4!$5(,/5*2?:!4* -! -*/ $!4(B $#'(4'*!)5#05?2!3/+,!.!0C5(!.''>!Q!45,# -*!.?*/''/3!RxS!4('*$:!*!4!1*'**!=! #5(0*'1'/0#! $#&2! 5C& #4/0#! L5(+2'/$!NM! 452'/$!.4+./! K &.*/! +)/ '*#'(! *!+,/5#4'*/!'*0&(!'*/!.#+,'*/!)5./$.'/!&#!K1#$2!RelseS>!"1,/0#!,/!4!)5./-*4B '# -*!&#!4(-*'$!2,4#5.#'/0#!4!#)5-*2!#!?/,#&!+,,(-.'/0#!+1*-*'02:!4(5 /'*!.!

w weryfikacji Statyczny slicing (ang. Static Slicing) Dynamiczny slicing (ang. Dynamic Slicing) Warunkowy slicing (ang. Conditioned Slicing) Bezpostaciowy slicing (ang. Amorphous Slicing) Dodajemy zależności między zmiennymi (np x < y) Przydatny przy dowodzeniu własności Trudny w realizacji

61)21"!"31:2;#,) 41;+: +'1$-)1-+23 $ -#3,,.*+-.,#(-1<+2()$)-<&2;#;.$3= -1<+,2;1$3>#-<5executable Rodzaje backward static Statyczny slicing?5@#3,#!+$/+:3)+:3# + 1 A (ang. Static Slicing) *;B"1#&;+"!"3.0 :1C)-)&0 $,.$)-*)*+:&+"#32!+2+'&;,+"31-)#,.$)-*#561)21" w weryfikacji Dynamiczny slicing (ang. Dynamic Slicing)!"3.0 A 1*# :.,.$)-1*4&2)!+3+2;#,.*+-.,#(-.4!"+<"#414#01<+;,+"31= Warunkowy slicing (ang. Conditioned Slicing) -)1!+(1<#-#&2&,#-)&-)1!+;"31'-.$/,."# 1 3*+:&+:"+3,# #-1<+,."# 1-)# Bezpostaciowy slicing (ang. Amorphous Slicing),2;1$35 6.$)-1* &;,+"3+-. ; 41;+: 3#,)1"#,) $ )-C+"4#$0 -#;14#;,!.,&,."# 1!+!"31:3#0 $.$/,."# 1-)13#:#-1,*".;1")&42()$)-<&-#01<++2) <#(-+ +"#3-#,#";+ $)34)1--.$/!"31;,#"3#-.$/!"313;+,."# 1-)15D"3.* #:14+'"#3&= 0 $.4; 41;+: 2 :,#!+-) 231".2&-*)5E.2&-1*F!"31:2;#,)#!"3.* #:+,.*+:,0 3.*&G#H#5!"#$&'()*D"3.* #:+,.*+: "B: +,.,0 3.*&G#H#5 E.2&-1* I!"31:2;#,)#,.$)-1* *+:& &;,+"3+-. 3<+:-)1 3 *".;1")&4 2()$)-= <&<15, z>a<:3)1j15k012;()-) *+:&:(#*;B"10*+-2;"&+,#-.' :3)1,.$)-1*# JzK012;"+3,# #- 34)1-- 5

61)21"!"31:2;#,) 41;+: +'1$-)1-+23 $ -#3,,.*+-.,#(-1<+2()$)-<&2;#;.$3= -1<+,2;1$3>#-<5executable Rodzaje backward static Statyczny slicing?5@#3,#!+$/+:3)+:3# + 1 A (ang. Static Slicing) *;B"1#&;+"!"3.0 :1C)-)&0 $,.$)-*)*+:&+"#32!+2+'&;,+"31-)#,.$)-*#561)21" w weryfikacji Dynamiczny slicing (ang. Dynamic Slicing)!"3.0 A 1*# :.,.$)-1*4&2)!+3+2;#,.*+-.,#(-.4!"+<"#414#01<+;,+"31= Warunkowy slicing (ang. Conditioned Slicing) -)1!+(1<#-#&2&,#-)&-)1!+;"31'-.$/,."# 1 3*+:&+:"+3,# #-1<+,."# 1-)# Bezpostaciowy slicing (ang. Amorphous Slicing),2;1$35 6.$)-1* &;,+"3+-. ; 41;+: 3#,)1"#,) $ )-C+"4#$0 -#;14#;,!.,&,."# 1!+!"31:3#0 $.$/,."# 1-)13#:#-1,*".;1")&42()$)-<&-#01<++2) <#(-+ +"#3-#,#";+ $)34)1--.$/!"31;,#"3#-.$/!"313;+,."# 1-)15D"3.* #:14+'"#3&= 0 $.4; 41;+: 2 :,#!+-) 231".2&-*)5E.2&-1*F!"31:2;#,)#!"3.* #:+,.*+:,0 3.*&G#H#5!"#$!&!'( ) *+"!$+,&-.#,/,01& )".!'+/2".3+$/"24)' 3$)0$2'#$ 04 /, 34-, 52" 2-,$00"-,6 7+"!$+,&- )'+&0*4)$14.#,/,01& 89: ;: <=.* '5'., ), / 2!+2$/>.* '54)"/>? 4@.2'+&)".! 34)'0,'A#4*'#,2'/(,B)"+' $ 9: 2-,$00"/>;: )'+!4 /,2-,$00"/>#&@)"+' $0,')'+&0*4)$14<6 C+2"* '54)42'* '5'( /3$),$0.!43,$ '@.!+'*/(,-4 0'2'3,.' *+"!$+,&-)'+&0D *4)$14.#,/,01&('*4? <15, z, <args[1]="1", args[0] < args[1], args[2]=args[0] > > E"/,0$* &2".*'0" 21450,$ 2!'* 2'5'0"- *+"!$+,&- 34),0,$0 @",5$0!"/20"('*!$05#'5"0'-,/20$14.#,/,01&6E"/,0$*24.!' 3+2$5.!'),40"0'+".&0*&F6!"#$&'()*D"3.* #:+,.*+: "B: +,.,0 3.*&G#H#5 E.2&-1* I!"31:2;#,)#,.$)-1* *+:& &;,+"3+-. 3<+:-)1 3 *".;1")&4 2()$)-= <&<15, z>a<:3)1j15k012;()-) *+:&:(#*;B"10*+-2;"&+,#-.' :3)1,.$)-1*# JzK012;"+3,# #- 34)1-- 5!"#$&'()*E"/,0$*&!)4+240"21450,$2*+"!$+,&- 8GH:2:8'+1.IGJK"G":'+1.ILJ8'+1.IGJ:'+1.IMJK'+1.ILJ== C454@0,$ ('* ) 3+2"3'5*& 5"0'-,/20$14.#,/,01& -4 0' 3+2$),52,$!&3+2$3 ").!$+4)'0,' ) 3+41+'-,$6 N 2'#$ 04 /, 345'0"/> ) *+"!$+,&-.#,/,01& -4 0' )"D )0,4.*4)' : $)'+!4 args[0]'/42'!"-,52,$)'+!4 2-,$00$(OxP@ 52,$ 2').2$-0,$(.2'45G6Q20'/2'!4: $)'+&0$*x Code<= slicing 1A#,0,'R4+"1,0'#0$14*45&

w weryfikacji Statyczny slicing (ang. Static Slicing) Dynamiczny slicing (ang. Dynamic Slicing) Warunkowy slicing (ang. Conditioned Slicing) Bezpostaciowy slicing (ang. Amorphous Slicing) Dopuszczamy zmianę składni (nie tylko usuwanie) Zwiększona czytelność powstałego kodu (lub zmniejszona...)

!"3.0 A 1*# :.,.$)-1*4&2)!+3+2;#,.*+-.,#(-.4!"+<"#414#01<+;,+"31= -)1!+(1<#-#&2&,#-)&-)1!+;"31'-.$/,."# 1 3*+:&+:"+3,# #-1<+,."# 1-)# Rodzaje Statyczny slicing (ang. Static Slicing),2;1$35 Code 6.$)-1* slicing &;,+"3+-. w weryfikacji ; 41;+: 3#,)1"#,) $ Dynamiczny )-C+"4#$0 -#;14#;,!.,& slicing (ang. Dynamic Slicing),."# 1!+!"31:3#0 $.$/,."# 1-)13#:#-1,*".;1")&42()$)-<&-#01<++2) <#(-+ Warunkowy slicing (ang. Conditioned Slicing) +"#3-#,#";+ $)34)1--.$/!"31;,#"3#-.$/!"313;+,."# 1-)15D"3.* #:14+'"#3&= Bezpostaciowy slicing (ang. Amorphous Slicing) 0 $.4; 41;+: 2 :,#!+-) 231".2&-*)5E.2&-1*F!"31:2;#,)#!"3.* #:+,.*+:,0 3.*&G#H#5!"#$&'()*D"3.* #:+,.*+: "B: +,.,0 3.*&G#H#5 E.2&-1* I!"31:2;#,)#,.$)-1* *+:& &;,+"3+-. 3<+:-)1 3 *".;1")&4 2()$)-= <&<15, z>a<:3)1j15k012;()-) *+:&:(#*;B"10*+-2;"&+,#-.' :3)1,.$)-1*# JzK012;"+3,# #- 34)1-- 5

!"3.0 A 1*# :.,.$)-1*4&2)!+3+2;#,.*+-.,#(-.4!"+<"#414#01<+;,+"31= -)1!+(1<#-#&2&,#-)&-)1!+;"31'-.$/,."# 1 3*+:&+:"+3,# #-1<+,."# 1-)# Rodzaje Statyczny slicing (ang. Static Slicing),2;1$35 Code 6.$)-1* slicing &;,+"3+-. w weryfikacji ; 41;+: 3#,)1"#,) $ Dynamiczny )-C+"4#$0 -#;14#;,!.,& slicing (ang. Dynamic Slicing),."# 1!+!"31:3#0 $.$/,."# 1-)13#:#-1,*".;1")&42()$)-<&-#01<++2) <#(-+ Warunkowy slicing (ang. Conditioned Slicing) +"#3-#,#";+ $)34)1--.$/!"31;,#"3#-.$/!"313;+,."# 1-)15D"3.* #:14+'"#3&= Bezpostaciowy slicing (ang. Amorphous Slicing) 0 $.4; 41;+: 2 :,#!+-) 231".2&-*)5E.2&-1*F!"31:2;#,)#!"3.* #:+,.*+:,0 3.*&G#H#5!!"#$&'()*D"3.* #:+,.*+: "B: +,.,0 3.*&G#H#5 E.2&-1* I!"31:2;#,)#,.$)-1* *+:& &;,+"3+-. 3<+:-)1 3 *".;1")&4 2()$)-= <&<15, z>a<:3)1j15k012;()-) *+:&:(#*;B"10*+-2;"&+,#-.' :3)1,.$)-1*# JzK012;"+3,# #- 34)1-- 5!"#$&'()*!"#$&'(!)*+,-.,&#!./,0&'!.!(-#*'-)1!2345!.6!! "#$&'(!.!-#7)&()!4!8'7*!-9+&,+: &#!+#$&(,+!+#(,&:&'1)!.:!;,1,$!7*:*#$.< &'/,!7=$&/)!>-#7)&'(!?@A!B'0#&!-9 &$!8'7*!1,0#C(:$8:!+#-: '&:!+:-)&(,+'/,!

w weryfikacji Statyczny slicing (ang. Static Slicing) Dynamiczny slicing (ang. Dynamic Slicing) Warunkowy slicing (ang. Conditioned Slicing) Bezpostaciowy slicing (ang. Amorphous Slicing) Backward slice Wszystkie ścieżki od początku do danej lokalizacji, Większość sprawdzeń poprawności programu w danym punkcie, Forward slice Wszystkie ścieżki od danej lokalizacji do końca programu, Można badać wpływ zmiany w kodzie na dalszą część programu Połączenie obu daje complete slice.

w weryfikacji Motywacja Rodzaje slicingu w weryfikacji Większość narzędzi sprawdza model, nie program, Duże znaczenie ma rozmiar, Większość programów jest duża i bardzo skomplikowana......ale często sprawdzamy proste własności dotyczące małego kawałka, Staramy się zautomatyzować jak największą część weryfikacji oprogramowania,

w weryfikacji Motywacja Rodzaje slicingu w weryfikacji Automatyczny program jest bezpieczniejszy od człowieka, Może działać na dużych programach, Pomaga znaleźć komponenty wymagające ręcznego napisania modelu, Redukuje rozmiar programu bez zmniejszania czytelności,

w weryfikacji Motywacja Rodzaje slicingu w weryfikacji Statyczny slicing z warunkiem zawierającym lokalizacje i zmienne z formuły LTL, Warunkowy slicing na podstawie reguły LTL,

w weryfikacji Frama-C Bogor CodeSurfer Frama-C, Framework do weryfikacji programów w C, Początkowy etap analizy to slicing, Wspiera slicing statyczny i dynamiczny,

w weryfikacji Frama-C Bogor CodeSurfer Bogor / Bandera (Indus), Framework Wsparcie języków OO z dynamicznymi obiektami, wątkami, itd, Integracja z Eclipse,

w weryfikacji Frama-C Bogor CodeSurfer Indus - część projektu Bandera Wspiera statyczną analizę i przekształcanie kodu w języku Java, Backward, Forward slice, Wygenerowane wycinki można skompilować, Integracja z Eclipse,

w weryfikacji Frama-C Bogor CodeSurfer CodeSurfer Komercyjny, Wspiera C / C++, Wspiera zmienną ilość argumentów funkcji, struktury, libc (sygnały, abort(), exec()), Umożliwia robienie wycinków z programów do 100K LOC,

w weryfikacji Bartosz Bogacki, : Droga do lepszego rozumienia kodu źródłowego Mark Weiser. Program slicing. Proceedings of the 5th International Conference on Software Engineering, pages 439 449, IEEE Computer Society Press, March 1981. John Hatcliff, Matthew B. Dwyer and Hongjun Zheng, Slicing Software for Model Construction