Espezifikazio formala (informatika)

Wikipedia, Entziklopedia askea
Jump to navigation Jump to search

Espezifikazio formala matematikak eskaintzen duen lengoaia formala erabiliz, algoritmo baten zeregina dokumentatzean datza. Horretarako begizta edo egitura errekurtsiboen exekuzioen ondorioz lortutako emaitzen konputazio-egoerak lengoaia formalean zehazten dira, era horretan programak dokumentatzen dira. Dokumentazio horiek programen zeregina deskribatzean sarrerako datuen eta irteerako emaitzen arteko erlazioa adierazten dute.[1] Espezifikazioa lehen mailako lengoaia logiko edo matematikoan idatzi ohi da, eguneroko hizkuntzek dituzten anbiguotasun eta zehaztasun gabeziak ekiditeko. Hala ere, espezifika daiteke lengoaia informalak diren eguneroko hizkuntzekin, aholkatzen ez den arren, horretarako oso ondo zehaztu behar baitira erabili beharreko terminoak, hizkuntzaren anbiguotasuna saihestuz.

Espezifikazio formalaren premia[aldatu | aldatu iturburu kodea]

Sistema elektronikoak darabiltzaten gailuak programatzeko orduan, oso garrantzitsua da algoritmoaren espezifikazioa burutzea. Programa ondo dokumentatuz gero, erroreak gertatzeko arriskuak murrizten dira, programaren exekuzio zuzena ezinbestekoa delako erabiltzailearentzako. Gainera, badaude exekuzio erroreak barkaezinak diren kasuak, adibidez: operazio militar edo kirurgikoak, finantza eta burtsa mundua...

Algoritmoa espezifikatzearen abantailak[aldatu | aldatu iturburu kodea]

Idatzitako kodea anbiguotasunik gabeko lengoaia batean dokumentatzean, sarrera, irteera eta zeregina zein diren zehazten da, erabilitako lengoaia dakien beste edozeinek kodeak zehazki zer egiten duen jakin dezan ahalbidetuz. Esaterako, software-ingeniari batek sarean zabal dezake garatutako kodea beste edozein pertsonarentzako eta erabiltzaileak espezifikazioa irakurrita jakin dezake programak zer egingo duen programa bera exekutatu gabe.

Bestalde, algoritmoaren egiaztapen formala burutzeko ezinbestekoak dira espezifikazio formalak, algoritmoaren konputazio-egoera batetik besterako pausuak frogatu ahal izateko, lehenik egoerak zeintzuk diren zehaztu behar baitira. Gainera, algoritmoaren espezifikazioa emanik, bere zuzentasuna inplementazioa baino lehen froga daiteke. Prozedura honek programak eduki ditzakeen erroreak aurkitzea ahalbidetzen du inplementazioari ekin baino lehen. Espezifikazioak ez du adierazten emaitza nola lortzen den, baizik eta zein den emaitza.[1] Abantaila hauek gehien bat enpresetan hauteman daitezke, non softwarea sortzerakoan, programaren zuzentasuna frogatuz ez den galduko denborarik programaren "debugging"-a (arazketa) egiten, denbora eta, hortaz, dirua aurreztuz.

Asertzioak[aldatu | aldatu iturburu kodea]

Algoritmoaren espezifikazioa lerroz lerro burutzen da, lerroaren aurreko eta ondorengo egoera dokumentatuz. Horretarako asertzioak erabiltzen dira. Asertzioak lengoaia logiko baten bidez idatzitako espresioak dira eta espresio horiek beteko dituzten konputazio-egoeren multzoa finkatzen dute. Beste era batera esanda, algoritmoaren konputazio-egoera konkretu batean aldagaiek zein baldintza betetzen duten adierazten dute (ikus. 1. adibidea). Algoritmo osoaren lehen asertzioari, oraindik hasi baino lehenagoko egoera adierazten duenari, aurrebaldintza deitzen zaio, eta programak ondo funtzionatzeko baldintzak ezartzen ditu. Bukaerakoari, postbaldintza deritzo eta programaren emaitza adierazten du. Besteei tarteko asertzioak deritze.

Asertzioek, lengoaia logikoek bezala, sintaxia eta semantika dute. Espresioak idazteko aldagaiak (x, y, z, t...), konstanteak (a, b, c...), eta aldagai bakoitzari dagozkion funtzioak (+, −, <, ≠, ∧, ∨, besteak beste) erabiltzen dira, eta erabilitako semantika lengoaia logikoen semantika da.

Ezaugarriak[aldatu | aldatu iturburu kodea]

Espezifikazio zuzen bat egokia, anbiguotasun gabea, osotua eta ahalik eta laburrena izan behar da. Horrez gain, honako ezaugarri hauek bete behar dituzte espezifikazioek:[2]

  • Asertzio batetik aurrera erraz eraikitzeko ahalmena
  • Akatsak erraz konpontzeko ahalmena
  • Etorkizuneko aldaketei egokitzeko erraztasuna
  • Erabilgarritasuna
  • Algoritmoko bi asertzioen arteko erlazioa aurkitzeko erraztasuna (komunikagarritasuna)
  • Eraginkortasuna

Adibideak[aldatu | aldatu iturburu kodea]

1. adibidea:[aldatu | aldatu iturburu kodea]

Hurrengo adibidean, kode zati sinple baten espezifikazioa ageri da, esleipen batena. Aurrebaldintza, -rekin adierazi ohi dena, true da, edozein kasutarako funtzionatuko duelako kode puxka honek. Postbaldintzak, -rekin adierazi ohi denak, lerro horren exekuzio ostean programaren egoera dokumentatzen du. Kasu honetan, x-ren balioa 5 izango da.

2. adibidea:[aldatu | aldatu iturburu kodea]

Oraingo honetan aldaketa mordoa daude lehenengo adibidearekiko. Alde batetik while blokea dugu, while-aren ostean datorren baldintza betetzen den bitartean behin eta berriz exekutatuko den algoritmo zatia adieraziz. Bestalde, algoritmoak ez du edozein egoeratan funtzionatuko nahi bezala, aurrebaldintza ez baita . Horrez gain, x eta y parametroak dauzkagu. Honek esan nahi du emaitza x eta y-ren menpekoa izango dela. Aldagai hauek aurrebaldintzak mugatzen ditu eta exekuzioan esleitzen zaizkie balioak.

non % modulu funtzioaren sinboloa den.

Adibide honek argi erakusten du zein den aurrebaldintza ez betetzearen arazo bat. Adibidez, y negatiboa edo 0 izanez gero, programa begizta infinitu batean sartuko litzateke, eta x negatiboa izanez gero, balio bera itzuliko luke, kasu gehienetan emaitza okerra izanik.

Software bidezko espezifikazioa[aldatu | aldatu iturburu kodea]

Gaur egun existitzen dira espezifikazioa burutzen edo garatzen laguntzen duten software-tresnak eta notazioak. Notazio erabilien artean daude Z notazioa, VDM notazioa eta TLA+ notazioa. Tresna erabilienen artean Dafny[3] dago. Programa hau konpiladoreak bezala interprete moduan aritzen da eta kodearen zuzentasun funtzionala aztertzen du.

Bibliografia[aldatu | aldatu iturburu kodea]

Erreferentziak[aldatu | aldatu iturburu kodea]

Ikus, gainera[aldatu | aldatu iturburu kodea]

https://eu.wikipedia.org/wiki/Egiaztapen_formala_(informatika)
https://eu.wikipedia.org/wiki/Logika_konputazional