Programmēšanas valodas: sintakse

Download Report

Transcript Programmēšanas valodas: sintakse

Formālās specifikācijas
LU datorzinātņu bakalaura programma
“Specifikācija”
Intuitīvi: specifikācija = apraksts
Sistēmas specifikācija:
precīzi formulēts sistēmas īpašību apraksts
precīzi formulēts sistēmas struktūras un / vai darbības īpašību apraksts
Sistēma – iecerēta, projektējama, var būt arī esoša
Sistēma – aparatūra vai programmatūra (vai abas kopā)
Specifikācija – vienošanās starp lietotāju un pakalpojuma sniedzēju
Specifikācija – daļēja (atsevišķas īpašības) vai izsmeļoša (visas prasības, darba
uzdevums kontraktā)
Specifikācijas – izmantotas dažādos līmeņos, dažādas specifikācijas vienai sistēmai
Programmēšanas valoda – arī programmēšanas sistēmas speciālgadījums (būs
būtiski šajā kursā).
“Formāls”
Formāls – balstās uz formu. Matemātiski precīzi definēts.
Sinonīmi: formāls – precīzs.
Formālā loģika: noskaidrot izteikuma patiesumu, balstoties uz
tā formu.
Piemēram, A  A ir patiess, neatkarīgi no tā, kāds ir A “saturs”.
Formāls izvedums no aksiomām.
Iespējams pārbaudīt uz datora.
Matemātiskā loģika: spriedumi tiek veidoti formāli.
Programmas izpilde: simbolu manipulācija – formāla aktivitāte.
Alternatīva: forma – saturs.
“Formālās specifikācijas”
Formāls – balstās uz formu. Matemātiski precīzi definēts.
Formālā loģika: noskaidrot izteikuma patiesumu, balstoties uz tā formu.
Formāla, precīza specifikācija: spriedumi par specifikāciju izdarāmi
aplūkojot tikai specifikācijas “formu” – uzrakstīto specifikācijas tekstu.
Viss būtiskais “saturs”, specifikācijas nozīme, ietverts formā, uzrakstīts
tekstā. Nekas nepaliek uz “roku vicināšanu”.
Gala lietotāja prasības – būtībā saturiskas (lai sistēma “strādā”). Prasību
formalizācija – pierakstīt tās precīzā formā noteiktā sistēmā.
Specifikācijas formalitāte neatceļ prasību pēc saturiskās nozīmes.
Specifikāciju validācija – vai formāli iegūtie secinājumi tiešām ir tie, kas
lietotājam vajadzīgi?
Formālā specifikācija – visas būtiskās sistēmas īpašības ietvertas arī formāli
uzrakstītajā specifikācijas tekstā.
Kāpēc specifikācijas?
Iegūt programmas / sistēmas, kas “garantēti”, “droši” risina tām izvirzītos uzdevumus.
Precīzi fiksēt sistēmas dizaina lēmumus agrīnā sistēmas izstrādes procesā; strukturēt
sistēmu izstrādes procesu.
Piezīmes:
1) garantijas un drošība kaut ko maksā
2) garantijas un drošība ir reālas, bet nebūs absolūtas.
Precīzas specifikācijas veidošana:
1)
Tiek iegūts precīzs uzdevuma formulējums (kas tad īsti no sistēmas vai tās
komponentes tiek sagaidīts, prasīts)
2)
Iespējas – specifikācijas analīze
-
Vai formulējums atbilst lietotāja vēlmēm (validācija)
-
Vai izstrādātā sistēma atbilst specifikācijai (verifikācija)
-
Iespējas izveidot / ģenerēt sistēmu, kas atbilst specifikācijai (sintēze)
Iespējas – programmatūras testēšanā:
3)
-
Specifikācija kā mēraukla testa rezultātiem
-
Testa situāciju automātiska ģenerēšana no specifikācijām (var būt iespējama
noteiktos kontekstos / situācijās)
Ja specifikācija ir, papildus iespējas var tikt un var netikt izmantotas
Specifikācijas programmatūras dzīves ciklā
Dažādas specifikācijas vienai sistēmai:
- Prasību (darbības) specifikācija, vienošanās starp gala lietotāju un sistēmas
izstrādātāju
- Dizaina specifikācija, ietver sistēmas arhitektūru, vienošanās starp sistēmas
arhitektu un realizētāju
- Moduļu (programmas) specifikācija, ietver prasības konkrētiem moduļiem,
procedūrām, vienošanās starp programmētājiem, kas implementē, un kas
lieto attiecīgo moduli / procedūru
- Realizācija – arī “īpašību apraksts” (parasti neuzskata par specifikāciju).
Specifikācijas – dažādos programmas dzīves cikla posmos, dažādos
kontekstos
Dažādas prasības pret specifikācijām:
- lasāmība (praktiski vienmēr),
- precizitāte, viennozīmība (svarīgi, bet vai vienmēr ievērots ?)
- izpildāmība (var dot papildus iespējas),
- utt.
Programmatūras kļūdas ..
Naudas tranzakciju apstrāde bankās (cilvēks atnāk izņemt naudu no bankomāta,
naudu viņam neizdod, bet no konta summu noņem, pretenzijas netiek pieņemtas,
jo viņam nav pierādījumu);
Radiācijas terapijas vadības sistēmas (programmas kļūdas dēļ pacienti terapijas
laikā saņem 100 – kāršu radiācijas devu, pēc tam nomirst);
Kosmisko lidaparātu vadības sistēmas – Ariane 5 owerflow kļūdas dēļ apstājas borta
vadības datori, kā sekas – lidaparāts tiek “disintegrēts” – gaisā sadalīts daļās;
Intel Pentium nepareizi veikta dalīšana – kompānijai izmaksāja aptuveni 475
miljonus dolāru;
Programmas kļūdas dēļ AT&T telefonijas komutatoros, Ņujorkas pilsēta uz 9
stundām paliek bez telefona sakariem.
Sk. “10 nopietnākās programmēšanas kļūdas cilvēces vēsturē”.
Kļūdu novēršana ir dārga, bet arī kļūdu esamība ne vienmēr ir lēta.
Svarīgi – noteikt pareizo balansu – cik lielus līdzekļus ieguldīt programmatūras
drošībā.
Dabiskās un formālās valodas specifikācijā
Specifikāciju valoda – konstrukciju sistēma specifikāciju veidošanai
Dabiskā valoda - ? Nav precizitātes, daudz “trokšņa”:
- viens un tas pats jēdziens dažādās vietās izteikts dažādi (sevišķi ja
jēdzienu jālieto daudzkārt nelielā teksta fragmentā)
Programmas ieejā tiek padotas divas netukšas simbolu virknes, un izejā
programma izdod virkni, kas satur vismaz vienu simbolu.
- var būt lietas, kas rakstītājam var šķist skaidras bez rakstīšanas, vai
arī, kuras uzrakstīt tiek aizmirsts
- “notikums a notiek pēc notikuma b” – gan “notiek”, gan “pēc” var tikt
interpretēts vairāk, nekā vienā veidā.
“notiek” – vai laikā momentāni, vai, iespējams, ilglaicīgi?
“pēc” – vai a sākums ir pēc b beigām, vai arī pietiek ar to, ka a sākums ir
pēc b sākuma, un a beigas pēc b beigām?
Dabiskās un formālās valodas specifikācijā
Specifikāciju valoda – konstrukciju sistēma specifikāciju
veidošanai
Dabiskā valoda - Nav precizitātes, daudz “trokšņa”:
Shematiskas diagrammas – var palīdzēt labāk strukturēt
specifikāciju
Bet: arī diagrammai nav pašai par sevi precīzas semantikas
(nozīmes), ja to nepapildina precīzas anotācijas
Formālās specifikāciju valodas: matemātiski precīzi definēta
konstrukciju sintakse un semantika.
Formālas specifikācijas: līmeņi
Specifikācija:
Formāla valoda / notācija – precīza sintakse un semantika.
Semantika: katrai valodas konstrukcija atbilst kādam “zināmam” matemātiskam
objektam.
Iespējams veidot matemātiskus apgalvojumus par specificēto sistēmu.
Specifikācija + analīze:
Formāla sistēma = Formāla notācija + formāli izveduma likumi
Iespējams veidot un pierādīt apgalvojumus par specificēto sistēmu (iespējams
matemātiski pārliecināties par noteiktām specifikācijas īpašībām).
Lai veiktu analīzi, vajadzīga formāla sistēma.
Lai analīze būtu ticama, nepieciešami valodas atbalsta rīki
Rīks nodrošina iespēju formāli pārbaudīt valodā izteiktos apgalvojumus
Bez atbalsta rīka pareizības “pierādījumā” ir vismaz tikpat viegli pieļaut kļūdu, kā
pašā programmā
Vai atbalsta rīka paša “pareizība” ir pierādīta?
... šajā kursā
Formālās specifikācijas programmatūras sistēmām.
A. Programmēšanas valodu formāla specifikācija (uzdot sintaksi un
semantiku).
B. Valoda Z formālu specifikāciju veidošanai, dažādām programmatūras
sistēmām (kursa otrajā daļā)
Programmēšanas valodas:
- pašas ir programmatūras sistēmas (interpretators, kompilators, ...)
- var tikt izmantotas citu programmatūras sistēmu veidošanā.
Programmēšanas valodas specifikācija – sintakses un semantikas
uzdošana.
Jautājums arī par to, kā pierādīt programmu īpašības.
Kursa tēmas
Formālas specifikācijas jēdziens
Abstraktās mašīnas. Galīgi un paplašināti automāti
Konkrētā un abstraktā sintakse programmēšanas valodām
Ievads funkcionālajā un loģiskajā programmēšanā
Operacionālā un dabiskā semantika
Translatīvā semantika
Denotacionālā un algebriskā semantika
Cikla invarianti, daļējās korektības pierādījumi
Cikla varianti, pilnās korektības pierādījumi
Datu un vadības struktūras korektības pierādījumos
Verifikācijas nosacījumi
Praktiskas verifikācijas sistēmas
Specifikāciju valoda Z: ievads
CZT vide darbam ar Z specifikācijām
Z: matemātiskā notācija un pierādījumi
Z: kopas, virknes, relācijas, brīvie tipi
Shēmas valodā Z, programmatūras sistēmu specifikācija
No specifikācijām uz programmām
Kursa mērķis
Kursā tiek aplūkots programmēšanas valodu formālas specifikācijas
jēdziens, īpaši akcentējot valodu semantikas uzdošanas metodes:
translatīvo, operacionālo un denotacionālo, kā arī programmu korektības
pierādījumus uz aksiomātiskās semantikas bāzes.
Kursa otrajā daļā tiek aplūkota universāla formālo specifikāciju valoda Z.
Kursa ietvaros studentiem tiek piedāvāti praktiski vingrinājumi ar aplūkoto
formālismu atbalsta rīkiem.
REZULTĀTI
1. Gūt priekšstatu par datorprogrammu kā formālu un matemātiski
analizējamu objektu.
2. Apgūt galveno programmu semantikas uzdošanas metožu pamatus.
3. Apgūt programmu korektības pierādīšanas pamatus.
4. Iepazīties ar formālo specifikāciju valodu Z un tās atbalsta rīkiem.
Prasības
Patstāvīgi izpildīti, noteiktos termiņos iesniegti un eksāmenā
atbildēti mājas darbi (70%).
Rakstisks eksāmena darbs sesijas laikā (30%).
Atzīmes „izcili” iegūšanai nepieciešams papildus referāts.
Literatūra
Pamatliteratūra, grāmatas pieejamas tīmeklī:
H.R.Nielson, F.Nielson, Semantics with applications: a formal introduction
J. Woodcook, J.Davies, Using Z: Specifications, Refinement and Proof
Papildliteratūra:
D.Gries, The Science of Programming
Z.Manna, Mathematical Theory of Computing, McGrawHill, 1974
F.Pagan, Formal Specification of Programming Languages: a panoramic
primer
C. Morgan, Programming from Specifications (pieejama tīmeklī).
J.M.Spivey, The Z Notation: a Reference Manual, Prentice Hall
International, 1992. (pieejama tīmeklī)
Tēmas pieteikums: abstraktās
mašīnas un automāti
Formālās specifikācijas
Kas ir dators?
Dažādi uztveres/matemātiskie modeļi. Varam uz datoru skatīties dažādos veidos.
(a) Dators kā lietotāja tekstu un tabulu apstrādes līdzeklis, uz datora iespējams
izpildīt lietojamas programmas (Word, Excel, u.c.)
(b) Dators kā vide programmēšanai (valodā C++, PASCAL, PROLOG, u.c.)
(c) Dators kā bināras simbolu virknes apstrādājoša iekārta (viss sastāv no 0 un 1,
baits – 8 biti, Kbaits – 1024 baiti, u.tml.)
(d) Dators kā fizikāli realizētu mikroshēmu sistēma, sastāv no diodēm, tranzistoriem,
u.c. elementiem.
Starp (b) un (c) vēl 3 līmeņi:
(b1) asemblera valoda (instrukcijas darbam ar reģistriem, atmiņas šūnām)
(b2) operētājsistēmas kodols (vada uzdevumu plūsmu datorā)
(b3) mikroprogrammas (procesora instrukciju realizācija loģisko operāciju līmenī).
Zemāks līmenis realizē operācijas, kas pieejamas (izmantojamas) augstākā līmenī.
Lai strādātu augstākā līmenī, nav jāzina visas zemākā līmeņa detaļas (lai brauktu ar
trolejbusu, nav jāzina tā dzinēja uzbūve).
Vienai un tai pašai sistēmai varam veidot dažādus matemātiskos modeļus.
Abstraktās mašīnas
Diskrētais process:
tas, kas notiek datora programmas izpildes laikā.
tas, kas notiek datora darbības laikā (0 un 1, vai citā līmenī).
Dažādi abstrakcijas līmeņi vienam un tam pašam diskrētajam procesam.
Šajā kursā: būtiska koncentrēšanās uz diskrētā procesa matemātisko modeļu
veidošanu un analīzi.
Abstraktā mašīna – diskrētā procesa matemātiskais modelis (viens iespējams veids)
Abstraktā mašīna: vadības bloks + datu bloks
Abstraktās mašīnas stāvoklis:
- norāde uz kārtējo instrukciju vadības blokā,
- datu bloka saturs
Abstraktās mašīnas komandas izpilde:
- izpilda kārtējo instrukciju no vadības bloka (iespējams, izmaina datu bloka
saturu; var būt arī ievada un izvada operācijas)
- uzstāda nākamo kārtējo vadības bloka instrukciju.
Vienkārša abstraktā mašīna: galīgs automāts (tukša datu telpa).
Galīgie automāti nozīmīgi gan no programmēšanas valodu sintakses, gan arī
semantikas apraksta viedokļa.
Abstraktās mašīnas kā semantikas modelis
while (x=y) do
if xy then y:=y-x
else x:=x-y
od
A: (x=y)
-
+
fi
B: xy
+
-
C: y:=y-x
E: beigas
D: x:=x-y
Piemērs: vienkārša programma un atbilstoša blokshēma.
Abstrakta mašīna – vadības bloks + datu bloks, komandas izpilde maina norādi uz
kārtējo instrukciju vadības blokā, maina datu informāciju.
Blokshēma – “pusceļš” uz atbilstošās abstraktās mašīnas definīciju.
Vadības stāvokļu kopa:
{ A, B, C, D, E }
Datu stāvokļu kopa:
StVar = {x,y}  Z
(vai Fun({x,y}, Z), vai Z  Z)
Lai abstrakto mašīnu definētu precīzi, vajadzīgi vēl
pāreju nosacījumi pA+, pA-, pB+, pB- (kā predikāti kopā StVar) un
pāreju funkcijas fA+, fA-, fB+, fB-, fC, fD (kā funkcijas StVar  StVar).
Galīgs automāts kā abstrakta mašīna
Abstrakta mašīna – vadības bloks + datu bloks, komandas izpilde maina norādi uz
kārtējo instrukciju vadības blokā, maina datu informāciju.
Galīgais automāts – vienkāršākā abstraktā mašīna, tikai vadības bloks.
Galīgs skaits dažādu stāvokļu un pārejas starp tiem.
“Kafijas automāts”:
Katrā brīdī atrodas vienā no 2 “stāvokļiem”:
Var pieņemt monētu, vai var izdot kafiju.
m
k
Stāvokli nosaka iepriekšējā darbību secība.
Galīgs dažādu stāvokļu skaits, galīgs skaits variantu, kā automāts var reaģēt
pašreizējā situācijā.
Ir sistēmas, ko var adekvāti aprakstīt ar galīgu automātu.
Cita veida sistēmām galīgs automāts var būt “abstrakcija”, kas var atspoguļot
vairākas (lai arī ne visas) būtiskas sistēmas īpašības.
Galīgi automāti būtiski gan valodu sintakses, gan semantikas uzdošanā (redzēsim
arī atšķirības starp šiem 2 lietojumiem).