1 / 19

Programmu inženierijas valoda B

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);

elita
Download Presentation

Programmu inženierijas valoda B

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programmu inženierijas valoda B Specifikāciju valodu pamati

  2. 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 nosaka sakarī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

  3. 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

  4. 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 T1 un T2 ir tipi, tad T1T2 ir tips. Izteiksmēm: tipu saderība MACHINE RMan(RES) RES - dotā kopa mašīnai RMan. VARIABLES rfree INVARIANT rfree  RES INITIALISATION rfree :=  OPERATIONSalloc(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 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.

  5. Pseidoprogrammas, substitūcijas, konsistence MACHINE RMan(RES)VARIABLES rfree INVARIANT rfree  RES INITIALISATION rfree :=  <--- Piešķiršanas pseido - programma OPERATIONSalloc(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 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  RESkatra operācija saglabā invariantu: I  P  [G]I (I - invariants, P - PRE daļa, G - substitūcija (visa: PRE + THEN))

  6. Substitūcijas, konsistence (turp.) MACHINE RMan(RES)VARIABLES rfree INVARIANT rfree  RES INITIALISATION rfree :=  <--- Piešķiršanas pseido - programma OPERATIONSalloc(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 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]Qkā[PRE P THEN H END]Qsemantikas 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, jaPir spēkā

  7. 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  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 END ans <-- istested(st) = PRE stenrolled THEN IF sttested THEN ans:=TRUE ELSE ans:=FALSE END END leave(st) = PRE stenrolled THEN IF sttested THEN tested:=tested-{st} || enrolled:=enrolled-{st} ELSE enrolled:=enrolled -{st} END END clmax, sofar <-- howmany = BEGINclmax, sofar := class_size, card(enrolled) END END

  8. 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  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 stenrol(st) = PRE st  STUDENT card(enrolled) < class_size st enrolled THEN enrolled := enrolled{st} END Izejas vērtība ansans <-- isenrolled(st) = PRE st STUDENT THEN IF stenrolled THEN ans:=TRUE ELSE ans:=FALSE END END ...

  9. Studiju reģistratora palīgs - paskaidrojumi (2) ... ans <-- isenrolled(st) = PRE st STUDENT THEN IF stenrolled THEN ans:=TRUE ELSE ans:=FALSE END END ans <-- istested(st) = PRE stenrolled THEN IF sttested THEN ans:=TRUE ELSE ans:=FALSE END 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 END tested, enrolled := tested-{st}, enrolled-{st} clmax, sofar <-- howmany = BEGINclmax, 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)

  10. 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, speccustSpecifikācijā deklarētas konstantes PROPERTIES specacctACCTNO speccustCUSTNOKonstanšu īpašības VARIABLES owner INVARIANT owner  ACCTNO +-> CUSTNO speccact |->speccust owner S+->T apzīmē funkciju kopu noS uzT, S +-> T elementi ir ar tipu S  Ta |-> 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 cust  customers  acct  ACCTNO  acct  accountsTHEN CHOICE resp:=success || owner(acct):= cust OR resp := noroom END END f(x):= E, "piešķiršana" funkcijas vērtībai, faktiskif := f +> {x |-> E}

  11. 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 cust  customers  accounts  ACCTNOTHEN CHOICE ANY ac WHERE ac  ACCTNO  ac  accounts THEN resp,owner(ac),acct := success,cust,ac END OR resp := noroom || acct : ACCTNO END 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.

  12. 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 ENDans <-- is_any_free = ans := bool(rfree)rec_free(rr) = PRE rr  RESOURCE-rfree card(rfree)<max_res THEN free(rr) ENDans <-- is_free(rr) = PRE rr  RESOURCE THEN ans:=bool(rr rfree) ENDrec_backup = BEGIN bkup.setfree(rfree) ENDrec_restore = BEGIN setfree(bkup.rfree) END END x := bool(P) nozīmē IF P THEN x:=TRUE ELSE x:=FALSE END

  13. Saliktu mašīnu konstruēšanas līdzekļi INCLUDES - iekļauj vienu vai 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)

  14. 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  STUDENTtested  enrolled card(enrolled) class_size INITIALIZATION enrolled, tested := , OPERATIONS resp <-- enrol(st) PRE stSTUDENTTHEN SELECT stenrolled THEN resp:=already_enrolled WHEN card(enrolled)=class_size THEN resp:=no_room WHEN card(enrolled) < class_size st enrolledTHEN enrolled := enrolled {st} ||resp := student_enrolled END 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.

  15. 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)

  16. 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.

  17. "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' Datu reprezentācija (3)

  18. 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

  19. 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.

More Related