Lihtne vooskeem, mis kujutab pangaautomaadi tööprotsessi PIN-koodi sisestamisel
**Vooskeem** (ingl *flowchart*) on skeem, mis kujutab töövoogu või protsessi. Vooskeemi võib defineerida ka algoritmi skemaatilise esitusena, mis näitab etapiviisilist lähenemist ülesande lahendamisele.

Vooskeemil kujutatakse protsessi või etapiviisilise lahenduse osi geomeetriliste kujunditega, mis on ühendatud voojoontega. Vooskeeme kasutatakse mitmes valdkonnas protsessi või programmi analüüsimisel, disainimisel, dokumenteerimisel või haldamisel.

Ajalugu
-------

Esimest struktureeritud meetodit protsessivoo dokumenteerimiseks, vooprotsessi skeemi (ingl *flow process chart*), tutvustasid Frank ja Lillian Gilbreth 1921. aastal ettekandes "Process Charts: First Steps in Finding the One Best Way to do Work" Ameerika inseneriorganisatsiooni ASME liikmetele. 

1937. aastal hakkas ameerika tööstusinsener Allan H. Mogensen koos Lillian Gilbrethi ja teistega ettevõtete töötajaid koolitama lihtsustamise meetodite ja äriprotsesside mudeldamise vallas.  1944. aastal Mogenseni koolituse läbinud Art Spinager töötas selle põhjal Procter & Gamble'is välja "Deliberate Methods Change" programmi ning samal aastal selle koolituse läbinud Ben. S. Graham kohandas vooprotsessi skeemi nii, et seda saaks kasutada mitme dokumendi ja nendevaheliste seoste näitamiseks.

1947. aastal võttis ASME kasutusele Gilbrethi algsest teosest tuletatud sümbolite hulga "ASME Standard: Operation and Flow Process Charts".

Douglas Hartree (1949) väitis, et Herman Goldstine ja John von Neumann arendasid vooskeemi arvutiprogrammide plaanimiseks. Goldstine ja von Neumanni originaalsed programmeerimise vooskeemid on leitavad nende avaldamata aruandest "Planning and coding of problems for an electronic computing instrument, Part II, Volume 1" (1947), mis on reprodutseeritud von Neumanni kogutud teostes.

Ensmenger (2016) toob välja, et kuigi 1970. aastate alguses oli vooskeem väga populaarne vahend arvutialgoritmide kirjeldamiseks, siis 1980. aastate alguseks oli vooskeemi akadeemilisest arvutiteaduse kirjandusest peaaegu kadunud ning tänapäeval kasutavad programmeerijad enamasti teisi tarkvara visualiseerimise vorme, näiteks UML-skeeme. Siiski on vooskeemid kasutusel veel paljudes sissejuhatavates programmeerimisainetes, kaasaegses juhtimisalases kirjanduses ning ka visuaalses huumoris. 

Ka mitmes tänapäevases algoritmide kirjeldamismeetodis on kasutusel veel ka vooskeeme, sealhulgas näiteks UML-skeemides tegevusskeemid.

Tüübid
------

Vooskeemide klassifitseerimise kohta on avaldatud palju arvamusi. Näiteks Andrew Veronis (1978) tõi välja kolm põhilist vooskeemitüüpi: süsteemi vooskeem, üldine vooskeem ja detailne vooskeem. Samas väitis Marilyn Bohl (1978), et lahenduste planeerimises on praktiliselt kasutuses vaid süsteemi ja programmi vooskeemid. Mark A. Fryman (2001) nimetas otsuse vooskeemid, loogika vooskeemid, süsteemi vooskeemid, toote vooskeemid ja protsessivooskeemid ning väitis, et peale nende on kasutuses veel mitmeid vooskeemide tüüpe.

Sümbolid
--------

### Tavasümbolid

Ameerika Riiklik Standardite Instituut (ANSI) sättis 1960. aastatel standardid vooskeemidele ning nende sümbolitele. Rahvusvaheline Standardiorganisatsioon (ISO) võttis ANSI sümbolid kasutusele 1970. aastal. Praeguse standardi (ISO 5807) viimane muutus oli aastal 1985. Vooskeemide voog liigub tavaliselt ülalt alla ning vasakult paremale. Kõige tavalisemad vooskeemides kasutatavad sümbolid on:

| ANSI/ISO kujund | Nimetus | Kirjeldus |
| --- | --- | --- |
|  | Põhijoon (koos nooleotsaga) | Joon, mis väiljub ühest sümbolist ning viitab teisele. Näitab protsessi tööjärjekorda. Nooleotsa kasutatakse vajadusel voo suuna näitamiseks või loetavuse parandamiseks. |
|  | Otspunkt (ingl *terminator*) | Tähistab väliskeskkonnast sisenemist või sinna väljumist, näiteks programmivoo algust või lõppu. |
|  | Protsess | Tähistab mistahes töötlusfunktsiooni, näiteks jada tegevustest, mille tulemuseks on andmete väärtuse, vormi või asukoha muutumine. |
|  | Otsus | Tähistab otsust või funktsiooni, millel on üks sisend kuid mitu üksteist välistavat väljundit. Väärtustamisele vastavad tulemused võivad olla kirjutatud vastavate väljunditeed tähistavate joonte kõrvale. |
|  | Andmed | Tähistab täpsustamata sisend- või väljundmeediumiga andmeid. |
|  | Eeldefineeritud protsess | Tähistab nimega protsessi, mis koosneb ühest või mitmest programmi sammust, mis on täpsustatud mujal. |
|  | Konnektor | Tähistab sama vooskeemi teisest osast sisenemit või teise osasse väljumist. |

### Muud sümbolid

Lisaks sisaldavad ANSI/ISO standardid ka teisi sümboleid, mille hulgas on näiteks:

| ANSI/ISO kujund | Nimetus | Kirjeldus |
| --- | --- | --- |
|  | Dokument | Tähistab inimloetavaid andmeid. |
|  | Mitu dokumenti | Tähistab mitme dokument tüüpi objekti kasutamist. |
|  | Manuaalne operatsioon | Tähistab mistahes protsessi, mida teostab inimene. |
|  | Manuaalne sisend | Tähistab andmeid, mille info on töötlemise ajal käsitsi sisestatud, näiteks kasutades klaviatuuri. |
|  | Ettevalmistus | Tähistab juhendi või juhendite hulga muutmist mingi järgneva tegevuse mõjutamiseks, näiteks indeksiregistri muutmine. |

Tarkvara
--------

Iga joonistusprogrammiga on võimalik luua vooskeeme, kuid neil pole aluseks andmemudelit, mida andmebaaside või teiste programmidega jagada. On olemas tarkvara, mis suudab automaatselt vooskeeme luua, olgu see siis otse programmeerimiskeele aluskoodist (näiteks code2flow) või vooskeemi kirjelduskeele põhjal (näiteks Flou).

Osad rakendused ja graafilised programmeerimiskeeled kasutavad programmide esindamiseks ja käivitamiseks vooskeeme. Nende hulka kuuluvad näiteks Scratch, Flowgorithm, Visual Logic ja RAPTOR.

Viited
------

1. ↑  SEVOCAB: Software Systems Engineering Vocabulary. Term: *Flow chart*. Vaadatud 31. juuli 2022.
2. ↑  Busbee, Kenneth Leroy. "Flowcharts - Programming Fundamentals". *Programming Fundamentals*. Vaadatud 10. jaanuar 2022.
3. ↑  Gilbreth, Frank Bunker & Gilbreth, Lillian Moller (1921) (arhiivikoopia seisuga 9. mai 2015). American Society of Mechanical Engineers.
4. ↑  National Office Management Association (1951). Nomayear. Nr. 32. University of Minnesota. p. 25.
5. ↑  Graham, Ben S. jun (10. juuni 1996). "People Come First". Vaadatud 10. jaanuar 2022.
6. ↑  American Society of Mechanical Engineers (1947). *ASME standard; operation and flow process charts*. New York.
7. ↑  Hartree, Douglas (1949). Calculating Instruments and Machines. The University of Illinois Press. p. 112.
8. ↑  Taub, Abraham (1963). John von Neumann Collected Works. Nr 5. 1963. pp. 80–151.
9. ↑  Ensmenger, Nathan The Multiple Meanings of a Flowchart. (2016). Information & Culture: A Journal of History. Nr. 51. pp. 321-351.
10. ↑  Mishra, Jibitesh (2011). Software Engineering. Pearson Education India. p. 134.
11. ↑  Veronis, Andrew (1978). Microprocessors: Design and Applications. p. 111.
12. ↑  Bohl, Marilyn (1978). A Guide for Programmers. p. 65.
13. ↑  Fryman, Mark A. (2001). Quality and Process Improvement. p. 169.
14. ↑  Shelly, Gary B. & Vermaat, Misty E. (2011). Discovering Computers, Complete: Your Interactive Guide to the Digital World. Cengage Learning. pp. 691-693.
15. 1 2  "ISO 5807:1985". Veebruar 1985. Vaadatud 10. jaanuar 2022.
16. ↑  "code2flow". Vaadatud 10. jaanuar 2022.
17. ↑  "Flou". Vaadatud 10. jaanuar 2022.
18. ↑  Myers, Brad A. (1986). Visual programming, programming by example, and program visualization: a taxonomy. Nr. 17.