V vsakdanjem željenju se vsakodnevno srečujemo z raznimi postopki. Ponavadi se velike večine izmed njih ne zavedamo. Ko zjutraj vstanemo iz postelje in se odpravimo v šolo ali na delo, to običajno izvedemo po dolečenem postopku (vstanemo, se umijemo, opravimo svoje zadeve, se oblečemo, pozajtrkujemo, ...). Tudi odhod v šolo je postopek : od doma se odpravimo pet minut pred prihodom autobusa, vstopimo v avtobus, izstopimo na pravi postaji, se sprehodimo do šole, .. Sam pouk je postopek, ki ga opredeljujeta urnik in izvedba posameznih ur, ... Reševanje nalog v šoli zahteva določeno proceduro oz.postopek. Te in podobne postopke izvajamo samodejno in so nam bili priučeni. Določene postopke nam vsiljujejo družbene norme, nekatere tudi zakonodaja. Tudi ti dve kategoriji sta v osnovi postopka.
Naslednje poglavje se bo ukvarjalo s postopki, predvsem z njihovim opisom, značilnostmi in preverjanjem postopkov.
Zakaj bi postopke opisovali ?
Vprašanje morebiti ni tako nezanimivo. Pomislimo na naslednje :
Algoritem je načrt (navodilo) za izvedbo zaporedja akcij (ali postopkov) nad podatki, da bi se dosegli želeni rezultati.
Da bi bil uporaben, mora algoritem biti:
Da bi algoritem bil popoln, morajo vse njegove akcije biti natančno definirane.
Množica instrukcij je nedvoumna le, če obstaja le en način interpretacije ukazov.
Če se sledi instrukcijam, je gotovo, da se bo želeni rezultat vedno dosegel.
Izvajanje instrukcij se (po določenem številu korakov) mora končati. Zahteva o končnosti se nanaša na število korakov in končno število spremenljivk, ki jih pri tem uporabljamo.
Poleg lastnosti, ki zagotavljajo, da nas izvajanje zaporedja korakov privede do želenega cilja, pa si ponavadi od postopka želimo še kaj več, kot je npr. to, da do cilja pridemo v čim krajšem času, da je sledenje navodilom enostavno, ... Te lastnosti postopkov, ki ne vplivajo na rezultat postopka, temveč njegovo predvsem na njegovo učinkovitost so:
Algoritem naj rešuje razred problemov, ne le enega. V primeru, da želimo spisati postopek za seštevanje dveh števil, verjetno ne bomo pisali postopka za seštevanje števil 2 in 3, nato nov postopek za seštevanje števil 7 in 8. Postopek spišemo splošno, tako da z njim lahko seštejemo poljuben par števil.
Ta atribut se nanaša na zgradbo algoritma. Dobro grajeni algoritem je narejen iz sestavin (blokov), ki jih je enostavno razložiti, ki so razumljivi, ki jih lahko testiramo in spreminjamo. Sestavine (bloki) naj bi bili tako povezani, da lahko enostavno zamenjamo en blok z drugim (po možnosti boljšim, učinkovitejšim) blokom.
odražajo hitrost, velikost in kompaktnost algoritma. (Naprej napišemo algoritem z dobro strukturo, ki v vseh primerih dosega želeni cilj. Šele potem ga izboljšujemo v smislu učinkovitosti.). Cilj pisanja postapka je tega spisati tako, da je kar se da hiter, majhen in brez odvečnega izvajanja.
Algoritem naj bo razumljiv in enostaven za uporabo. Zakaj ? Pomislite, kdo vse dandanes uporablja mobilni telefon in kako bi se različne skupine uporabnikov znašle brez enostavnih navodil.
Postopek mora biti izveden tako, da uspe razrešiti vse konflikne situacije, ki lahko nastopijo med njegovim izvajanjem. Npr.: postopek za vnos zahteva od uporabnika vnos celoštevilskih vrednosti. Uporabnik se pri vnosu 'zmoti' in vnese besedilo, sestavljeno iz simbolov za črke in številke. Postopek se zaradi nezmožnosti obdelave takega vnosa ne sme prekiniti ali še več, povzročiti nestabilnosti delovanja operacijskega sistema.
Postopke lahko predstavljamo na različne načine in z različnimi sredstvi. Ker so postopki dejansko navodila, se njihov opis ponavadi razlikuje v odvisnosti od tega, na katerih področjih življenja jih uporabljamo. V splošnem jih lahko podamo:
Gradniki diagramo poteka so grafični simboli s privzetimi pomeni. Največ uporabljani simboli so:
je običajno izvajanje korakov, pri čemer se ti izvajajo zaporedno v vrstnem redu, kot so specificirani,
omogoča, da ob določenem izvajalnem pogoju izvedemo alternativno zaporedje korakov
uporabimo, če je potrebno korake izvajanja v postopku večkrat ponoviti z enakimi ali podobnimi izvajalnimi podatki
2. Naslednji postopek ugotavlja deljivost vnesenega števila z 2 in s 3. Če je vneseno število deljivo z obema, ga izpiše:
3. Spodnji postopek izpiše vneseno število natanko trikrat:
Testiranje postopkov, prevsem na področju računalništva, praktično ni mogoče brez podatkov. Tako v bistvu testiramo izvajanje programov (izvajanje postopka ne določeni množici podatkov) ne pa direktno samega postopka, in ustreznost, pravilnost izvajanja kontroliramo preko spreminjanja samih podatkov. V ta namen lahko uporabimo specifično oz. namensko programsko opremo. Primer take opreme so razhroščevalniki (debuggers) pri uporabi programske kode, ali pa npr. orodja, ki omogočajo programiranje s pomočjo gradnikov diagramov poteka in nato sledenje izvajanja, kot je npr. Flow Char Programming .
Lahko pa pravilnost izvajanja postopka izvedemo tudi ročno, na list papirja, s t.i. sledjo izvajanja. Pri tem postopku si izrišemo tabelo, katere glava vsabuje vse spremenljive vrednosti, ki nastopajo v določenem postopku. Nato po stolpcih za vsak korak izvajanja beležimo spremembo teh vrednosti. Pravilnost postopka je potrjena v primeru, da smo iz znanih začetnih vrednosti preko postopka prišli do preverljivo pravilnega rezultata.
Izvedimo sled izvajanja za predhodni primer diagrama, kjer vneseno vrednost trikrat izpišemo:
postopek omogoča preverjanje vseh obveznih lastnosti postopka, pa tudi prenekaterega izmed želenih atributov.