11fc62828b7373cb7d60e80f51a85698.ppt
- Количество слайдов: 19
Programmu inženierijas valoda B Specifikāciju valodu pamati
B: ievada piezīmes • Programmatūras modelis - abstraktās mašīnas: – Atklāti aprakstīts stāvoklis (abstraktā matemātiskā notācijā; semantiskais pamats - kopu teorija); – Operācijas (relācijas) stāvokļa maiņai (iesaista arī ieejas un izejas datus); – Katrai operācijai - sākuma nosacījums (precondition), kam jābūt spēkā, lai operāciju varētu izpildīt (klienta atbildība); – Invariants nosakarības starp stāvokļa komponentēm (sakarības vienmēr spēkā mašīnas darbības laikā); – Inicializācija - stāvokļa komponenšu sākuma vērtības (tām jāapmierina invariantu). • B: valoda gan specifikāciju, gan arī implementāciju aprakstam – Machine, Refinement, Implementation: vienā notācijā; Implementācijas invariants ietver atsauces uz specifikācijas stāvokli – Mašīnas jēdziens B metodē: nodrošina enkapsulācijas principu • B-Toolkit: līdzeklis B mašīnu izstrādei
B: ievada piezīmes (2) • Abstrakto mašīnu modelis: arī valodās Z, VDM, katrā savas nianses (t. sk. atšķirīgi valodas mērķi) • B: valoda gan specifikāciju, gan arī implementāciju aprakstam (Z, VDM - valodas pamatā specifikācijai) • B "niša": API un komponenšu līmeņa programmatūras izstrāde (kur iespējamas formālas prasību specifikācijas); • B: piedāvā iespējas konstruēt augstāka līmeņa mašīnas, izmantojot pieejamās zemāka līmeņa mašīnas; • Valodas B konstrukcijas: zināmā mērā labāk piemērotas programmu izstrādes procesa aprakstam, nekā VDM, Z (iespējama diskusija) • Literatūra: J. B. Wordsworth, Software Engineering with B • Pieejami arī tīmekļa resursi (B-Core) • ZB workshops - metodes pielietojumi, attīstība
Vienkārša mašīna: resursu pārvaldnieks Tipu sistēma: Katra dotā kopa ir tips (N - vienmēr dotā kopa); Ja T ir tips, tad P(T) ir tips; Ja T 1 un T 2 ir tipi, tad T 1 T 2 ir tips. Izteiksmēm: tipu saderība RES - dotā kopa mašīnai RMan. MACHINE RMan(RES) VARIABLES rfree INVARIANT rfree RES INITIALISATION rfree : = OPERATIONS alloc(rr)= PRE rr rfree THEN rfree : = rfree - {rr} END; free(rr)= PRE rr RES rr rfree THEN rfree : = rfree {rr} END; setfree(rrs)= PRE rrs RES THEN rfree : = rrs END RES - kopa kā parametrs mašīnai, vērtības izvēlas lietotājs. Alternatīva: kopa kā iekšēja kopa mašīnai, vērtības izvēlas realizētājs.
Pseidoprogrammas, substitūcijas, konsistence MACHINE RMan(RES) VARIABLES rfree INVARIANT rfree RES INITIALISATION rfree : = <--- Piešķiršanas pseido - programma OPERATIONS alloc(rr)= PRE rr rfree THEN rfree : = rfree - {rr} END; free(rr)= PRE rr RES rr rfree THEN rfree : = rfree {rr} END; setfree(rrs)= PRE rrs RES THEN rfree : = rrs END PRE-THEN-END pseidoprogramma: sākuma nosacījums (lietotājs atbildīgs par tā spēkā esamību) un THEN-daļa (izpildes apraksts). Pseidoprogramma G uzstāda predikātu P: rakstam [G]P [x: =E]P - substitūcija predikātā, predikātā P katrā x brīvā ieiešanas vietā rakstam E [G]P spēkā "tagad", t. u. t. t. ja, izpildot G būs spēkā P [G]P - "vispārināta substitūcija" predikātā P G - "vispārinātā substitūcija", turpmāk - substitūcija (= pseidoprogramma) Konsistence: inicializācija uzstāda invariantu: [rfree : = ] rfree RES katra operācija saglabā invariantu: I P [G]I (I - invariants, P - PRE daļa, G - substitūcija (visa: PRE + THEN))
Substitūcijas, konsistence (turp. ) MACHINE RMan(RES) VARIABLES rfree INITIALISATION rfree : = INVARIANT rfree RES <--- Piešķiršanas pseido - programma OPERATIONS alloc(rr)= PRE rr rfree THEN rfree : = rfree - {rr} END; free(rr)= PRE rr RES rr rfree THEN rfree : = rfree {rr} END; setfree(rrs)= PRE rrs RES THEN rfree : = rrs END Konsistence: inicializācija uzstāda invariantu: [rfree : = ] rfree RES katra operācija saglabā invariantu: I P [G]I (I - invariants, P - PRE daļa, G - substitūcija (visa: PRE + THEN)) PRE-THEN-END substitūcijas likums: [PRE P THEN H END]Q P [H]Q Neizmanto P [H]Q kā [PRE P THEN H END]Q semantikas definējumu. Apsvērumi: [PRE P THEN H END] operācijas korektība: ( I P [PRE P THEN H END] I ) ( I P P [H]I ) ( I P [H]I ) Pēc substitūcijas definīcijas [PRE P THEN H END]Q spēkā "tagad", t. u. t. t. ja, izpildot [PRE P THEN H END] būs spēkā Q "izpildot [PRE P THEN H END] būs spēkā Q" var garantēt tikai, ja P ir spēkā
Studiju reģistratora palīgs MACHINE CMA(class_size, STUDENT) CONSTRAINTS class_size > 0 card(STUDENT) N SEES Bool_TYPE VARIABLES enrolled, tested INVARIANT enrolled STUDENT tested enrolled card(enrolled) class_size ASSERTIONS card(tested) class_size INITIALIZATION enrolled, tested : = , OPERATIONS enrol(st) = PRE st STUDENT card(enrolled) < class_size st enrolled THEN enrolled : = enrolled {st} END ans <-- isenrolled(st) = PRE st STUDENT THEN IF st enrolled THEN ans: =TRUE ELSE ans: =FALSE END ans <-- istested(st) = PRE st enrolled THEN IF st tested THEN ans: =TRUE ELSE ans: =FALSE END leave(st) = PRE st enrolled THEN IF st tested THEN tested: =tested-{st} || enrolled: =enrolled-{st} ELSE enrolled: =enrolled -{st} END clmax, sofar <-- howmany = BEGIN clmax, sofar : = class_size, card(enrolled) END
Studiju reģistratora palīgs - paskaidrojumi (1) MACHINE CMA(class_size, STUDENT) skaitlisks un kopas parametrs CONSTRAINTS class_size > 0 card(STUDENT) N ierobežojumi uz parametriem, mašīnas "izsaukuma" brīdī jāpierāda, ka tie spēkā SEES Bool_TYPE - "redz" norādītās mašīnas konstrukcijas, var tās izmantot. . . INVARIANT enrolled STUDENT tested enrolled card(enrolled) class_size ASSERTIONS card(tested) class_size papildus apgalvojums A par stāvokli, jāpierāda I A, tad pierādot operatoru konsistenci var izmantot: I A P [G]I INITIALIZATION enrolled, tested : = , vienlaicīga pseido-piešķiršana (substitūcija) OPERATIONS Ieejas parametrs st enrol(st) = PRE st STUDENT card(enrolled) < class_size st enrolled THEN enrolled : = enrolled {st} END Izejas vērtība ans <-- isenrolled(st) = PRE st STUDENT THEN IF st enrolled THEN ans: =TRUE ELSE ans: =FALSE END. . .
Studiju reģistratora palīgs - paskaidrojumi (2). . . ans <-IF isenrolled(st) = PRE st STUDENT THEN st enrolled THEN ans: =TRUE ELSE ans: =FALSE END istested(st) = PRE st enrolled THEN st tested THEN ans: =TRUE ELSE ans: =FALSE END [IF P THEN G ELSE H END]Q (P [G]Q) ( P [H]Q) leave(st) = PRE st enrolled THEN IF st tested THEN tested: =tested-{st} || enrolled: =enrolled-{st} ELSE enrolled: =enrolled -{st} END tested, enrolled : = tested-{st}, enrolled-{st} clmax, sofar <-- howmany = BEGIN clmax, sofar : = class_size, card(enrolled) END [BEGIN G END]P [G]P Katras (vispārinātās) substitūcijas (pseidoprogrammas) semantika tiek uzdota tās korektības likuma terminos (sal. aksiomātiskā semantika progr. valodām)
Bankas kontu uzskaite (konstrukciju ilustrācija) MACHINE Owners SETS ACCTNO; CUSTNO; "Atliktās" kopas, tiks precizētas implementācijas laikā O_RESP={success, noroom} Kopa uzdota ar elementu uzskaitījumu CONSTANTS specacct, speccust Specifikācijā deklarētas konstantes PROPERTIES specacct ACCTNO speccust CUSTNO Konstanšu īpašības VARIABLES owner INVARIANT owner ACCTNO +-> CUSTNO speccact |-> speccust owner S +-> T apzīmē funkciju kopu no S uz T, S +-> T elementi ir ar tipu S T a |-> b apzīmē sakārtotu pāri, ko veido elementi a un b (pāris <a, b>) INITIALISATION owner : = {specacct |-> speccust} DEFINITIONS accounts == dom(owner); customers == ran(owner) Funkcijas definīcijas apgabals un vērtību kopa Definīcijas ir saīsinājumi, kas var tikt izmantoti tālāk specifikācijas uzdošanā. OPERATIONS resp <-- new_acct_old_cust(cust, acct) = PRE customers acct ACCTNO acct accounts THEN CHOICE resp: =success || owner(acct): = cust OR resp : = noroom END f(x): = E, "piešķiršana" funkcijas vērtībai, faktiski f : = f +> {x |-> E}
Nedeterministiskas specifikācijas [CHOICE G OR H END]P [G]P [H]P Specifikācija pieļauj, ka implementācijā realizēts jebkurš no variantiem. Lai šāda specifikācija būtu korekta, rezultāta predikātam P jābūt spēkā abos variantos. Kurš variants realizēts - to noteiks implementācija. Spec. atļauj "izvēles brīvību". [ANY x WHERE P THEN G END]Q x (P [G]Q) Nedeterminēti izvēlas x, kam spēkā P, tad ar šo x veic darbību G. x - lokālā mainīgā vārds, redzams tikai šajā substitūcijā. [x: S]P y (y S [x: =y]P) Mainīgajam x piešķir jebkuru elementu no kopas S. Vienalga kurš elements izvēlēts, rezultātā jābūt spēkā P. resp, acct <-- alt_new_acct_old_cust(cust) PRE customers accounts ACCTNO THEN CHOICE ANY ac WHERE ac ACCTNO accounts THEN resp, owner(ac), acct : = success, cust, ac END OR resp : = noroom || acct : ACCTNO END Esošam bankas klientam piešķir jaunu kontu ACCTNO - bankas kontu kopa, accounts - jau piešķirto kontu kopa Ja vairāk jaunu numuru nav, tad kā izejas vērtība ir jebkurš konta numurs.
Saliktu mašīnu konstruēšana - piemērs MACHINE RRMan(RESOURCE, max_res) Recoverable resource manager CONSTRAINTS card(RESOURCE) >= max_res SEES Bool_TYPE INCLUDES RMan(RESOURCE), bkup. RMan(RESOURCE) 2 kopijas no mašīnas RMan, līdz ar to stāvokļiem, mainīgajiem, inicializāciju un invariantu. Mašīnas bkup. RMan mainīgais rfree tiek apzīmēts kā bkup. rfree INVARIANT card(rfree) max_res card(bkup. rfree) max_res -- papildus invariants INITIALIZATION - nekas netiek rakstīts, inicializācija jau komponenšu mašīnās OPERATIONS - iekļauto mašīnu operācijas nepāriet uz iekļaujošo mašīnu, iekļaujošās mašīnas operācijas var definēt, izmantojot iekļauto mašīnu operācijas res <-- rec_alloc = PRE rfree THEN ANY rr WHERE rr rfree THEN res: =rr || alloc(rr) END ans <-- is_any_free = ans : = bool(rfree ) rec_free(rr) = PRE rr RESOURCE-rfree card(rfree)<max_res THEN free(rr) END ans <-- is_free(rr) = PRE rr RESOURCE THEN ans: =bool(rr rfree) END rec_backup = BEGIN bkup. setfree(rfree) END rec_restore = BEGIN setfree(bkup. rfree) END x : = bool(P) nozīmē IF P THEN x: =TRUE ELSE x: =FALSE END
Saliktu mašīnu konstruēšanas līdzekļi INCLUDES - iekļauj vienu vairākas komponenšu mašīnas EXTENDS - iekļauj komponenšu mašīnu un padara visas tās operācijas arī par iekļaujošās mašīnas operācijām PROMOTES - padara kādu no iekļautās mašīnas operācijām arī par iekļaujošās mašīnas operāciju INCLUDES, EXTENDS - var iekļaut vairākas mašīnas, iespējama arī pārsaukšana (sk. piemērā ar INCLUDES)
Robustas (pilnas funkcionalitātes) mašīnas Ideja: operāciju sākuma nosacījumi ietver tikai tipu prasības, neietver neko citu (operācijas rezultāts definēts "visos gadījumos") MACHINE CMA(class_size, STUDENT) CONSTRAINTS class_size > 0 card(STUDENT) N SETS Response = {no_room, already_enrolled, student_enrolled, not_enrolled, already_tested, test_noted, certificate, no_certificate, student_tested, enrolled_but_not_tested} VARIABLES enrolled, tested INVARIANT enrolled STUDENT tested enrolled card(enrolled) class_size INITIALIZATION enrolled, tested : = , OPERATIONS resp <-- enrol(st) PRE st STUDENT THEN SELECT st enrolled THEN resp: =already_enrolled WHEN card(enrolled)=class_size THEN resp: =no_room WHEN card(enrolled) < class_size st enrolled THEN enrolled : = enrolled {st} || resp : = student_enrolled END. . . [SELECT P THEN G WHEN Q THEN H END]R (P [G]R) (Q [H]R) G, H - nav jābūt savstarpēji ekskluzīviem, bet ir jāietver visus gadījumus.
Datu reprezentācija Specifikācijā: abstraktie mainīgie, abstraktie dati Implementācijā: konkrētie mainīgie, realizējami programmas kodā Datu reprezentācija: saista specifikācijas un implementācijas datus, reprezentācijas attiecība iekļauta implementācijas aprakstā "Konkrētās" mašīnas invariants ietver arī sasaisti ar abstraktā līmeņa mašīnas stāvokli. Datu reprezentācijas attiecība var būt: viens pret daudziem. "Konkrētās" mašīnas inicializācijas korektība: [GC] [GA] PC PC - konkrētās mašīnas invariants (ieskaitot konkr. un abstr. stāvokļu sasaisti) GC un GA - konkrētās un abstraktās mašīnas incializācija. Konkrētā inicializācija garantē to, ka abstraktai inicializācijai eksistē izpildes iespēja, kuras rezultātā konkrētais invariants būs spēkā (nav tā, ka pēc visiem abstraktās inicializācijas ceļiem būs spēkā PC negācija)
Datu reprezentācija (2) "Konkrētās" mašīnas inicializācijas korektība: [GC] [GA] PC Konkrētā inicializācija garantē to, ka abstraktai inicializācijai eksistē izpildes iespēja, kuras rezultātā konkrētais invariants būs spēkā (nav tā, ka pēc visiem abstraktās inicializācijas ceļiem būs spēkā PC negācija) Kāpēc nevar: [GC] [GA] PC ? Nevar prasīt, lai katra no specifikācijas realizācijām atbilstu šai vienai konkrētajai implementācijā izdarītajai izvēlei. (Specifikācija kā iespēju ierobežojums, specifikācija var paredzēt vairāk iespēju, nekā implementācijā tiek realizēts, bet visām nepieciešamajām jābūt paredzētām). Kad derīga vienkāršākā forma? - Ja abstraktā mašīna deterministiska. Sal. ar LARCH: abstraktā un konkrētā stāvokļa attiecība tiek precīzi fiksēta. Arī nedeterminitāte šeit jauna.
Datu reprezentācija (3) "Konkrētās" mašīnas inicializācijas korektība: [GC] [GA] PC Analoģiski definē korektību konkrētās mašīnas operācijām: PA PC QA [HC] [HA] PC PA , PC - abstraktais un konkrētais invarianti QA - abstraktās operācijas priekšnosacījums HA - THEN daļa no abstraktās operācijas substitūcijas HC - konkrētā substitūcija (ietverot gan PRE, gan arī THEN daļu) Ja abās mašīnās ir spēkā invarianti (t. sk. ja mašīnu stāvokļi ir pareizi saistīti) un ja ir spēkā abstraktās operācijas priekšnosacījums, tad konkrētās operācijas izpilde garantē to, ka abstraktajai operācijai eksistē izpildes iespēja, kuras rezultātā konkrētais invariants būs spēkā (nav tā, ka pēc visiem abstraktās operācijas ceļiem būs spēkā PC negācija). Korektība konkrētās mašīnas operācijām ar izeju: PA PC QA [HC] [H'A] (PC y'= y) y - izejas vērtība, H'A - tas pats HA, kurā y pārsaukts par y'
Algoritmu izstrādes konstrukcijas [skip] P P (var tikt izmantots jau specifikāciju līmenī. . ) Virkne: G ; H korektība: [G ; H] P [G] [H] P Lokālie mainīgie: valodas B loģiskā sistēma atļauj tos ieviest implementācijā, saglabājot pierādīti korektas specifikācijas un implementācijas attiecības. Cikls: WHILE P DO G VARIANT E INVARIANT Q END Cikla korektība: [WHILE P DO G VARIANT E INVARIANT Q END] R Q Cikla invariants ir spēkā sākumā ( P Q R) Ja programma atstāj ciklu, tad spēkā R (Q E N) Variants ir vienmēr naturāls skaitlis (P Q [y : = E] [G] E < y) Variants tiek samazināts (P Q [G] Q) Invariants saglabājas katrā cikla apgriezienā. Korektība virknei: [H; WHILE P DO G VARIANT E INVARIANT Q END] R Pirmais konjunkts cikla korektības izteiksmē aizstājams ar [H]Q
Implementācijas mašīnas - shematisks priekšstats Implementācija: abstrakta mašīna, no kuras iespējams ģenerēt programmas kodu (datu deklarācijas un izpildāmus operatorus). Nav VARIABLES klauzulas, to vietā IMPORTS klauzulas B-Toolkit piedāvā dažādās programmēšanas valodās pieejamu konkrēto datu tipu bibliotēku (tipi realizēti kā abstraktas mašīnas) Implementācijai ir INVARIANT klauzula, kas nosaka: - attiecības starp dažādu importēto mašīnu mainīgajiem - saiti ar specifikācijas abstraktajiem mainīgajiem Implementācijai ir veicama inicializācija, kas nosaka sākuma vērtības Ir noteikts ierobežots substitūciju kopums, ko var izmantot, definējot implementācijas operācijas: VAR-IN-END (lokālo mainīgo deklarācija); BEGIN-END, IF-THEN-ELSE-END, CASE, virkne, cikls; piešķiršana lokālam mainīgajam (ar nosacījumiem arī uz labo pusi); importēto un redzamo mašīnu operācijas. Nosacījumi arī uz loģiskajām un aritmētiskajām operācijām.
11fc62828b7373cb7d60e80f51a85698.ppt