ANY u WHERE u : seq(MININT..MAXINT) & size(u) = size(s) & #f.(f : 1..size(s) >->> 1..size(s) & !j.(j : 1..size(s) => s(f(j)) = u(j))) & !i.(i : 1..size(s)-1 => u(i) <= u(i + 1)) THEN t := u END x <-- findmax(s, n) = PRE n : 1..MAXINT-1 & s : seq(MININT..MAXINT) & size(s) >= n THEN ANY y WHERE y : 1..n & !z.(z : 1..n => s(y) >= s(z)) THEN x := y END #include using namespace std; int main() { int k, m ; cout << "A 2*x+3 fuggveny ertekeinek az osszege m-tol, k-darab\n" ; cout > m; cout > k; int sum = 0; for (int i=m; i<=m+k; i++){ sum += 2*i+3; } cout << "\nA 2*x+3 fuggveny ertekek osszege " << m << "-tol " << k << "-darab: " << sum << "\n"; return 0; } „…hogy ne robbanjon fel…” Neumann Nap 2005 ELTE-IK-PSZT Dr. Istenes Zoltán Neumann Nap 2005 ELTE-IK-PSZT Dr. Istenes Zoltán
#include using namespace std; int main() { int k, m, sum ; cout << "A 2*x+3 fv. értékeinek az összege m-tól, k-darab"; cout > m; cout > k; for (int i=m; i<=m+k; i++){ sum += 2*i+3;} cout << "A 2*x+3 fv. értékek összege " << m << "-tól " << m+k << "-ig: " << sum return 0;} Csak egy kis C++ program…(1) sum = 0; ; fordító jelzi, szintaktikai hiba első teszteléskor kiderül, „csak elfelejtettük”… szemantikai hiba, „mindenki tudja”…
Csak egy kis C++ program…(2) #include using namespace std; int main() { int k, m, sum=0 ; cout << "A 2*x+3 fv. értékeinek az összege m-tól, k-darab"; cout > m; cout > k; for (int i=m; i!=m+k; i++){ sum += 2*i+3;} cout << "A 2*x+3 fv. értékek összege " << m << "-tól " << k << " darab: " << sum; return 0;}
„Ha egy változó túlcsordul…” e) At 36.7 seconds after H0 (approx. 30 seconds after lift-off) the computer within the back-up inertial reference system, which was working on stand-by for guidance and attitude control, became inoperative. This was caused by an internal variable related to the horizontal velocity of the launcher exceeding a limit which existed in the software of this computer. ARIANE 5 - Flight 501 Failure - Report by the Inquiry Board for (int i=m; i!=m+k; i++){ sum += 2*i+3;}
B módszer (the B method) van formális szintaktikája és formális szemantikája komplett fejlesztőeszközök, B specifikációkat szerkeszteni, ellenőrizni, bizonyítandó tételeket készíteni és azokat bizonyítani lehet velük. formális kifejezhetőek a különféle tulajdonságok és feltételek, bemutathatóak azok bizonyítása illetve működése B-Toolkit / Atelier-B "A B egy módszer szoftverrendszerek tervezésére és megvalósítására" J.R. Abrial
Bizonyítások „láncolata”… Absztrakt gép specifikáció Absztrakt gép specifikáció Finomítás 1. Finomítás... Finomítás n. Megvalósítás C/Java forráskód Egy szinten belüli „koherencia” „megfelelés” az előző szintnek
specifikáció implementáció
„Halmaz, típus, helyettesítés” INVARIANT beir TAN INITIALISATION beir:= OPERATIONS kiirat(diak)= PRE diak beir THEN beir:=beir-{diak} END; [beir:= ]beir TAN TAN beir TAN diak beir [PRE diak beir THEN beir:=beir-{diak} END]beir TAN beir TAN diak beir diak beir [beir:=beir-{diak}]beir TAN beir TAN diak beir [beir:=beir-{diak}]beir TAN beir TAN diak beir beir-{diak} TAN A művelet „formális” definiciója: [PRE P THEN G END] Q P [G] Q Az invariánst „megőrzi” az inicializálás… Az invariánst „megőrzi” a művelet…
B módszer alkalmazása Párizsi metro 14-es vonal program által irányított… sor B specifikáció sor ADA kód bizonyított tétel félformális és formális módszerek félformális és formális módszerek rendszer modellezés UML tervminták „Formális módszerek a szoftvertechnológiában” „Formális módszerek a szoftvertechnológiában”
Összefoglalás igény a „nagy” és „biztonságos” informatikai rendszerek iránt formális eszközök/módszerek szükségesek a biztonságkritikus és a bizonyíthatóan helyes rendszerek tervezésekor formális eszközök/módszerek szükségesek a biztonságkritikus és a bizonyíthatóan helyes rendszerek tervezésekor B módszer formális módszerek alkalmazása Az előadás : A tárgy weboldala : The B method :