z jezik za specifikaciju - mrkve - loginmrkve.etfos.hr/pred/ozm/si/sem07.pdf · z tool-kit nije...
TRANSCRIPT
Sveučilište J. J. Strossmayera u Osijeku
Odjel za matematiku
Sveučilišni diplomski studij matematike i računarstva
Z – jezik za specifikaciju
Seminarski rad iz kolegija
Softversko inženjerstvo
Student: Josipa Nemčić
Osijek, lipanj 2016.
1
1 Sadržaj
1 Formalna specifikacija ............................................................................................................. 2
2 Što je Z? .................................................................................................................................... 3
3 Kako je nastao Z? ..................................................................................................................... 4
4 Modeliranje sustava................................................................................................................. 5
5 Primjeri notacije ....................................................................................................................... 6
5.1 Birthday Book ................................................................................................................... 6
5.2 Bankovni sustav ................................................................................................................ 9
6 Zaključak ................................................................................................................................... 9
7 Literatura ................................................................................................................................ 13
2
2 Formalna specifikacija
Formalna specifikacija se odnosi na matematički bazirane tehnike sa ciljem olakšavanja
implementacije sustava. Koristi se za opis sustava, analizu ponašanja i kontrolu dizajna preko
verifikacije ključnih svojstava kroz vrlo stroge i efektivne alate odlučivanja.
Koncentracija je na preciznom načinu opisa svojstava koje informacijski sustav mora imati bez
velikog ulaženja u način na koji bi se ta svojstva trebala ostvariti.
Drugim riječima, ona propisuje što bi sustav trebao raditi, ne na koji način bi to trebalo biti
ostvareno.
Iz samog naziva bi mogli zaključiti da se formalna specifikacija koristi u ranijim fazama izrade
softvera kao polazište za daljnje oblikovanje, ali ona je osim toga uvelike prisutna i u dizajnu i
verifikaciji. Najviše se koristi za sustave koje je teško ostvariti, koji su kritični u nekom smislu,
komplicirani ili neobični.
U verifikaciji, za razliku od ostalih tehnika, zaključke izvodi iz detaljne analize a ne iz
eksperimentalnih rezultata. Daje bolji uvid u potrebnu funkcionalnost i minimizira mogućnost
nastanka greške.
Apstrakcija čini formalnu specifikaciju korisnom u procesu razvoja jer dozvoljava
nedvosmislene odgovore na pitanja o konačnom proizvodu s matematičkog aspekta kroz
algebarske, diskretizatizacijske, statističke, računarske i ostale tehnike, bez potrebe za
traženjem potrebnih informacija u masi kompliciranih kodova ili spekulacije oko značenja
određenih elemenata u nepreciznom opisu implementacije.
Postoje različite tehnike formalne specifikacije čije su zajedničke karakteristike specijalna
sintaksa, semantička restrikcija na jednu domenu, sposobnost izvođenja korisnih informacija u
svrhu stvaranja pouzdanijeg i kvalitetnijeg dizajna...
U nastavku ćemo promatrati specijalnu metodu formalne specifikacije, Z notaciju.
3
3 Što je Z?
Z je kolekcija konvekcija za prikaz matematičkog teksta s ciljem opisivanja računalnog sustava,
razvijenih za pojednostavljenje procesa specifikacije i izrade zahtjeva, te daljnju kontrolu
ponašanja.
Izgovara se 'Zed' a ime je dobila prema Zermelo-Fränkel teoriji skupova na kojoj je bazirana.
Matematička notacija Z jezika se sastoji od male jezgre istinitih tvrdnji, koja je naknadno
proširena u veliku kolekciju korisnih objekata i operacija pod imenom Z mathematical tool-kit.
Z tool-kit nije softver, to je kolekcija matematičkih teorija: definicija i pravila nad objektima kao skupovima, relacijama, funkcijama, sekvencama i njihovim operacijama. Koristimo te matematičke objekte da modeliramo strukturu podataka i ostale komponente računalnog sustava. Tool-kit na neki način igra ulogu standardne biblioteke tipova i funkcija programskog jezika.
Iako se može koristiti uz funkcionalne programske jezike, Z je prirodno koristiti sa objektno-orjentiranim jezicima. Varijable stanja u Z jeziku su ekvivalentne instancama varijabli i operacije metodama. Z podržava i neku vrstu nasljeđivanja.
Ovdje je potrebno naglasiti da Z nije programski jezik, odnosno Z specifikacija se ne može prevesti na strojni jezik ili kompajlirati u programu, prototipu ili simulaciji. Dizajniran je za ljudsku upotrebu, ne za strojeve. Kroz niz godina Z tekst se pisao isključivo rukom.
S obzirom da se Z oslanja na matematičku analizu, sadrži mnogo matematičkih simbola koji
nisu dio ASCII notacije. Kako bi se taj problem premostio, specifikacija uključuje sugestije za
renderiranje Z notacije u ASCII isto kao i Latex.
Z notacija podržava više metoda. Primjeri takvih metoda su apstraktna formalna specifikacija1 i izvedbeni projekt2. U prvom slučaju značenje Z teksta određuju njegovi autori i uglavnom se koristiti samo za modeliranje ponašanja sustava. U drugom slučaju elementi Z teksta mogu prikazivati strukturu u kodu: modele, tipove podataka, procedure, funkcije, klase, objekte.
Z na prvi pogled može djelovati vrlo zbunjujuće: obično se sastoji od skupa pravokutnika, teksta, grčkih slova i neobičnih simbola. Bez obzira na to, Z je zapravo jednostavan za naučiti. Pravokutnici i simboli nam pomažu da se fokusiramo na strukturu modela čak i prije nego počnemo čitati dokument.
1 eng. apstract formal specification 2 eng. detailed design
4
4 Kako je nastao Z?
Ideja za notaciju se prvi put pojavljuje 1974. godine u knjizi „Data Semantics“ francuskog
profesora i računalnog znanstvenika Jean-Raymond Abriala. Notacija koja je korištena u toj
knjizi samo je začetak Z-a. Počela se koristiti na francuskom sveučilištu Grenoble gdje je Abrial
u to vrijeme radio.
1977. godine Abrial uz pomoć Stevea Schumana i Bertranda Meyera razvija notaciju koja je
tada nazvana Z.
1980. godine izdana je knjiga „Méthodes de programmation” koja je uvelike pomogla
popularizaciji Z jezika.
Daljni razvoj Z-a se odvija na sveučilištu Oxford u sklopu računalno istraživačke skupine3 koja
se sastojala od znanstvenika i industrijskih partnera kao IBM i Inmos (proizvođač poluvodiča).
Prvi Z referentni priručnik je izdan 1989. godine nakon što je Z već uvelike dokazan u praksi.
Internacionalni Z standard4 je završen 2002. godine.
Z od svojeg nastanka do danas služi kao baza za ostale notacije, uključujući nekoliko
programskih jezika kao Objektni-Z i Z++.
Danas su dostupni softverski alati za pisanje i prikaz specijalnih Z simbola i organizaciju
dokumenata, za traženje grešaka u sintaksi te čak pomoć oko dokazivanja tvrdnji vezanih za
ponašanje modeliranog sustava. Ti su alati nužni u ozbiljnijem radu sa Z-om.
Z je notacija koja se dugo razvijala, koristila na različite načine, prošla kroz različite faze
razvoja računalne znanosti te preživjela do danas.
3 Programming Research Group 4 ISO standard, ISO/IEC 13568:2002
5
5 Modeliranje sustava
Z zapravo ujedinjuje dvije notacije. Prva je notacija obične diskretne matematike. Druga
notacija daje strukturu matematičkom tekstu, a sastoji se od konstruktora strukture.
Najizraženiji oblik Z konstruktora je makro tip konstrukcije kojeg nazivamo shema. Pojam koji
često susrećemo kod Z notacije – shema calculus se odnosi na izgradnju velikih shema preko
više malih.
Shema je svojstvo koje najviše odvaja Z od ostalih notacija formalne specifikacije.
Z je model-based notacija u kojoj najčešće modeliramo sustav preko njegovih stanja –
kolekcije varijarijabli i njihovih vrijednosti te operacija koje mogu promijeniti to stanje.
Dakle shema, odnosno modul odgovarajuće veličine, se sastoji se od:
Stanja
Kolekcije varijabli stanja zajedno sa njihovim vrijednostima
Operacija koje mogu promijeniti to stanje
Stanje u većini slučajeva opisuje situaciju. Može modelirati ciljeve, rezultate, pretpostavke,
uvjete na sigurnost... Sastoji se od fiksne konfiguracije odnosno konstanti i promijenjivih
komponenata odnosno varijabli.
Operacije nad varijablama se zadaju operatorima, koji su definirani preko formula Z notacije.
Formule sadrže standardne simbole koji se koriste u gotovo svim granama matematike, a
potječu iz aksiomatske Zermelo-Fränkel teorije skupova.
Svaki izraz iz Zermelo-Fränkel teorije skupova ima korespodencijski ekvivalent u Z notaciji
(primjer Slika 1).
Slika 1. Primjeri matematičkih izraza i njihovih ekvivalenata u Z notaciji
Z dokumenti bi se trebali pisati tako da budu dovoljno precizni da bi tekst mogao precesuirati
stroj.
6
6 Primjeri notacije
6.1 Birthday Book
Da bi vidjeli kako Z funkcionira u praksi prvo uzimamo najjednostavniji primjer, BirthdayBook,
čiju važnost možemo vidjeti iz činjenice da ga se smatra ekvivalentom „Hello World“
programa kod programskih jezik.
Radi se o sustavu koji bilježi rođendane danog broja osoba, omogućuje pretraživanje i može
se proširiti tako da na primjer ispisuje imena osoba čiji je rođendan dan datumom upita.
U ovom slučaju nam neće biti bitno kojeg su formata imena i datumi pa uvodimo skup svih
imena i skup svih datuma kao osnovne tipove za specifikaciju: [NAME, DATE]. To nam
omogućava da imenujemo skupove bez da moramo navoditi tipove objekata koje sadrže, tako
da se možemo koncentrirati na najvažnija svojstva modela.
Prvi aspekt sustava kojeg opisujemo je opis prostora njegovih stanja, što radimo preko sheme:
Slika 2. BirthdayBook shema
Kao većina shema, i ova se sastoji od dva dijela odvojena horizontalnom linijom, od kojih prvi
sadrži deklaraciju varijabli, a drugi vezu između vrijednosti i varijabli.
Imamo dvije varijable za prikaz važnih elemenata koje možemo izvesti iz stanja:
known je skup imena zajedno sa pridruženim datumima rođenja
birthday je funkcija koja, kada se primijeni na određena imena, daje datume rođenja
vezane uz ta imena
Dio sheme ispod horizontalne linije daje vezu koja je istinita za svako stanje sustava i njena
točnost je sačuvana kroz sve operacije koje se mogu primijeniti na modelu. U ovom slučaju ta
veza nam kaže da je skup known jednak domeni funkcije birthday. To je invarijanta sustava.
Invarijanta dozvoljava vrijednostima varijable known da budu izvedene iz vrijednosti funkcije
birthday. known je izvedena komponenta stanja, odnosno moguće je modelirati sustav bez
njezinog definiranja. Ipak, davanje imena važnim konceptima čini specifikaciju preglednijom.
7
Promotrimo sada jedno moguće stanje sustava sa tri osobe u skupu known, sa njihovim
datumima rođenja zabilježenim preko funkcije birthday:
Invarijanta je zadovoljena jer birthday zabilježava datume za točno one tri osobe koje se
nalaze u skupu known.
Uočimo da u opisu prostora stanja ovog sustava nemamo ograničenje na broj informacija koje
možemo spremati ili propisani poredak kojeg bi se trebali držati kod spremanja podataka.
Također smo izbjegli odluku o formatu podataka koji će se spremati.
Sa druge strane, bilo nam je bitno da pokrijemo uvjet da jedna osoba može imati samo jedan
datum rođenja i da dvije osobe mogu imati isti datum rođenja. To smo ostvarili preko
činjenice da je birthday funkcija i kao takva ima potrebna matematička svojstva.
Nakon što smo obradili prostor stanja, sada ćemo se koncentrirati na operacije sustava. Prva
koju ćemo uzeti za primjer je akcija dodavanja novog podatka. Navedenu akciju opisujemo
shemom:
Slika 3. Model za dodavanje nove osobe u sustav
Deklaracija ∆BirthdayBook ističe činjenicu da shema opisuje promijenu stanja. Uvodimo četiri
varijable: known, birthday, known0 i birthay0.
Prve dvije varijable prikazuju stanje prije promijene, dok druge dvije stanje nakon promijene.
Svaka dva para varijabli čuvaju invarijantu pa invarijanta mora biti zadovoljena prije i poslije
promijene.
8
Nakon deklaracije imamo dva inputa operacije. Prema konvenciji, imena inputa završavaju
znakom upitnika.
Dio sheme ispod linije u prvom redu zadaje uvjet koji mora biti ispunjen da bi akcija bila
izvršena uspješno: ime koje dodajemo mora biti različito od onih koje već imamo u sustavu.
Ova specifikacija ne pruža informacije o tome što će se dogoditi ako uvijet nije ispunjen.
Kasnije se model lako može proširiti tako da je u mogućnosti ispisati poruku o greški ukoliko se
ona pojavi.
Ako uvjet je zadovoljen, bazu proširujemo novim imenom i datumom rođenja.
Očekujemo da će skup imena known biti proširen sa novim imenom:
known0 = known ∪ {name?}.
To možemo dokazati preko specifikacije modela AddBirthay, koristeći invarijantu stanja prije i
poslije operacije:
known0 = dom birthday0 [invariant after]
= dom(birthday ∪ {name? → date?}) [spec. AddBirthday]
= dom birthday ∪ dom {name? → date?} [fact about 'dom']
= dom birthday ∪ {name?} [fact about 'dom']
= known ∪ {name?} [invariant before]
Formulacija i dokaz svojstava nam potvrđuju da je specifikacija ispravna i analiza sustava na taj
način nam omogućuje da istražimo ponašanje sistema prije implementacije te nam smanjuje
trošak prilikom testiranja u kasnijim fazama razvoja.
Dvije činjenice o domeni 'dom' koje smo koristili u dokazu su vezane uz matematička svojstva
skupova:
dom(f ∪ g) = (dom f ) ∪ (dom g)
dom{a → b} = {a}
Modeliramo još jednu operaciju na modulu BirthdayBook, za traženje datuma rođenja osobe
poznate sustavu.
Ponovo opisujemo operaciju sa shemom (Slika 4.)
9
Slika 4. Shema za operaciju FindBirthday u sklopu sustava BirthdayBook
Deklaracija ΞBirthdayBook označava da se radi o operaciji koja ne mijenja stanje: vrijednosti
varijabli known0 i birthday0 nakon primjene operacije su jednake vrijednostima prije
primjene.
U drugom dijelu modela koristimo varijablu name koje smo dobili na ulazu. Operacija
FindBirthday preslikava ime u odgovarajući datum. Preduvjet za uspješno izvršavanje
operacije je pripadnost vrijednosti varijable name? skupu poznatih podataka. Ako je taj uvijet
ispunjen izlaz date! ima vrijednost funkcije birthday na danom argumentu. Ukličnik nam
označava ispis i ne smijemo ga zamijeniti sa znakom različito koji se u istoj notaciji pojavljuje u
mnogim programskim jezicima.
6.2 Bankovni sustav
Sada ćemo na sličan način modelirati bankovni sustav, ovaj put bez većih ulaženja u detalje
notacije s obzirom da je postupak modeliranja analogan.
Shemu za sustav modeliramo na način:
Slika 6. Model Bankovnog sustava
U ovom slučaju smo dali tipove podataka varijablama iz prostora stanja modela. Varijable
kojima baratamo su dollars i cents, obje poprimaju vrijednosti iz skupa prirodnih brojeva .
10
Imamo restrikciju na modelu danu uvjetima ispod crte, koju smo zadali u svrhu
pojednostavljenja modela. Iz nje čitamo da dozvoljavamo samo nenegativni balans na
bankovnom računu.
Modelirati ćemo operaciju WithdrawMoney koja opisuje akciju povlačenja novaca sa računa.
Prvo pogledajmo skicu akcije koja prikazuje stanje prije i poslije izvršavanja:
Slika 7. Tranzicija kod akcije WithdrawMoney
Potpuno analogno kao i prije, radimo sa četiri varijable: dollars, cents, dollars' i cents', istog
tipa podataka.
Invarijanta sustava u ovom slučaju nam kaže da balans uvijek mora biti veći od nule, a s
obzirom da oba para varijabli čuvaju invarijantu, ona je očuvana prije i nakon izvršavanja
operacije.
Za više tehničkih detalja pogledati ćemo shemu:
Slika 8. Shema za akciju WithdrawMoney modela BankingSystem
11
Analogno kao i prije, moramo označiti da akcija mijenja sustav, što radimo preko deklaracije:
∆BankAccount. Input završavamo sa znakom upitnik. Od nas se traži da unesemo iznos dolara i
centi koje želimo povući sa računa.
Preduvjet da bi akcija bila izvršena uspješno dan je u drugom dijelu sheme, zajedno sa
preciznim opisom radnji koje se izvršavaju ukoliko je on ispunjen. Niti u ovom slučaju ne
definiramo što se događa ukoliko uvijet nije ispunjen.
Novac nećemo moći povući ako smo unijeli iznos veći od onog kojeg imamo na računu.
Ukoliko je iznos dolara koji smo unijeli jednak iznosu kojeg imamo na računu, akcija će biti
izvršena uspješno samo ukoliko je iznos centi koje smo dali na ulazu manji ili jednak od onog
kojeg imamo na računu.
Time smo pokrili sve slučajeve u kojima bi akcija mogla zakazati, u svim drugim slučajevima
možemo biti sigurni da će biti izvršena uspješno.
Sada moramo razlikovati situaciju u kojoj zadajemo veći iznos centi od onog kojeg imamo na
računu i situaciju kad je zadan iznos manji ili jednak.
Formulu:
centAmount? > cents
=> dollars' = dollars – dollarAmount? – 1 i cents' = cents – centAmount? + 100
ilustriramo na primjeru:
dollarAmount? 1 centAmount? 80 dollars = 2 cents = 20 ------------------------------ dollars' = dollars – dollarAmount? = 1
cents' = cents – centAmount? + 100 = 20 – 80 + 100 = -60 + 100 = 40
Sada je lako vidjeti zašto su nam potrebna dva slučaja čak i ako su uvjeti da bi akcija bila
uspješno izvršena ispunjeni. Ukoliko oba ne pokrijemo iznos centi nakon promijene bi mogao
biti negativan i rezultirao bi nedopustivim tipom podataka varijable cents.
Slučaj kada je iznos centi koje povlačimo manji od iznosa centi koji imamo na računamo nema
potrebe detaljnije objašnjavati s obzirom da samo oduzimamo iznose.
Model se naravno može proširiti ali za naše potrebe razumijevanja notacije obrađeni modeli
će nam biti dovoljni.
12
7 Zaključak
Ovaj seminar daje kratki osvrt na Z specifikaciju. Vidjeli smo što je zapravo Z, objasnili sintaksu
na jednostavnim primjerima i modelirali sustave zajedno sa nekoliko operacija nad njima.
S obzirom da Z sintaksa na prvi pogled djeluje, moglo bi se reći zastrašujuće, rad je vođen
idejom da se problemu pristupi na najjednostavniji mogući način. Iz tog je razloga izostavljena
problematika aksiomatske teorije skupova koja je temelj ovoj specifikaciji i paralelizam između
te dvije konvencije.
Međutim, koliko je matematički aspekt bitan za Z, možemo naslutiti samo iz činjenice da je Z
dobio ime po Zermelo-Fränkel teoriji skupova.
Jean-Raymond Abrial, profesor i razvojni inženjer notacije, jednom je objasnio da je nazivom
želio istaknuti univerzalnost.
Nagađam da je Abrial ciljao na jezgru Z notacije koja sadrži mali skup najbitnijih istina5, od koje
se izvodi neka vrsta ogromne biblioteke koju smo već spominjali, Z – mathematical tool-kit,
koja pokriva široki spektar tipova podataka i funkcija.
Z notacija ima svojih prednosti i mana. Svoje mane povlači iz same formalne specifikacije koja
nije nimalo jednostavna za provedbu ukoliko se radi o samo malo kompliciranijim sustavima i
zahtjeva posebno sposobne ljude, određeno vrijeme za analizu i ukoliko se pažljivo ne provodi
može zadati vrlo ozbiljne probleme u razvoju sustava. Njene prednosti potječu iz
matematičkih svojstava kojima postižemo apsolutnu sigurnost u valjanost konačnog
proizvoda. U većini slučajeva razvoja, jednostavno se trudimo raditi najbolje što možemo. Za
neke tipove sustava to ipak nije dovoljno, i tu nastupa formalna specifikacija.
5 U smislu predikatne logike prvog reda
13
8 Literatura
[1] The Z notation Reference Manual
http://spivey.oriel.ox.ac.uk/mike/zrm/zrm.pdf
[2] Z lecture notes by Jonathan Jacky
http://staff.washington.edu/jon/z-lectures/z-lectures.html
[3] Wikipedia Z-notation
https://en.wikipedia.org/wiki/Z_notation
[4] Introduction to Z-notation
https://www.youtube.com/watch?v=qfEe9luJmVE
[5] Formal Specification – Z Notation – Syntax, Type and Semantics
http://www.open-std.org/jtc1/sc22/open/n3187.pdf