Tarkvara
ehk
arvuti tarkvara
on masinloetav juhend, mis suunab arvuti
protsessorit
spetsiifilisi toiminguid sooritama. Tarkvara holmab koiki mittefuusilisi
arvuti
tooks vajalikke voi rakenduslikke komponente, eelkoige
arvutiprogramme
ning nende andmeid ?
andmefaile
,
seadeid
,
dokumentatsiooni
, jne.
Tarkvara moistet kasutatakse vastandina arvuti
riistvara
moistele, need on arvuti fuusilised seadmed ja uhendused (naiteks
protsessor
), millel on tarkvara talletatud ja mis teostavad antud juhised.
[1]
[2]
Arvuti riist- ja tarkvara vajavad uksteist ja kumbagi ei saa reaalselt kasutada ilma teiseta.
"Tarkvara" on uldine termin. See voib viidata koikidele arvuti juhistele uldiselt voi mistahes konkreetsele juhisele. See holmab nii masinjuhiseid (
kahendkood
, mida protsessor "Moistab") kui ka
lahtekoodist
(inimesele arusaadavamad juhendid, mis tuleb enne kaivitamist tolkida masinkoodi).
Arvuti tarkvara on komplekt programme, protseduure,
funktsioone
, seotud andmeid ja nende dokumentatsioone, kui voimalik. Programmi tarkvara taidab rakendatava programmi ulesande, kas andes juhised otse digitaalsele
elektroonikale
voi tootavad
sisendina
mone teise tarkvara jaoks.
Erinevalt riistvarast on kaivitatav tarkvara salvestatud andmetena arvuti susteemis ning seega ei saa seda fuusiliselt puudutada. Madalaimal tasandil kaivitatav kood koosneb masinkeelsetest juhistest, mis on spetsiifilised uhele individuaalsele protsessorile. Masinkeel koosneb kahendvaartuste ruhmadest, mis tahistavad protsessori juhiseid, mis muudavad arvuti olekut.
[3]
Naiteks voib moni juhis muuta konkreetsesse kohta salvestatud vaartuse (mida kasutaja silmaga ei nae) voi (kaudselt) panna arvuti ekraanile ilmuma mone objekti (mida naeb kasutaja ka ise). Protsessor taidab juhiseid nende esitatud jarjekorras, valja arvatud olukorras, kui tal on kastud "hupata" monele teisele kasule voi kui toiming on katkestatud.
Tarkvara on tavaliselt kirjutatud korgetasemelises
programmeerimiskeeles
, mida on inimestel lihtsam ja tohusam kasutada (sarnaneb rohkem
loomuliku keelega
) kui masinkeelt. Korgetasemelised keeled on koostatud voi tolgitakse masinkeele objektikoodi. Tarkvara voib olla kirjutatud ka
assemblerkeeles
, sisuliselt meeldejaavam variant masinkeelest, kasutades loomuliku keele tahestikku. Assemblerkeel tuleb koostada objektikoodi koostaja (
assembler
) abil.
Tarkvara holmab suurt hulka tooteid, mis voivad olla toodetud erinevaid tehnikaid nagu tavalisi programmeerimiskeeli, mikrokoodi voi
FPGA
konfiguratsiooni
kasutades.
Peaaegu koikidel arvuti platvormidel saab tarkvara jagada paari suuremasse kategooriasse:
- Susteemitarkvara
on tarkvara, mis on kavandatud arvuti riistvara juhendamiseks, et tagada pohifunktsioonid ja tagada platvorm jooksvatele
rakendustarkvaradele
. Susteemi tarkvara holmab seadme
susteemidraivereid
,
operatsioonisusteeme
(
Mac OS X
,
Microsoft Windows
,
Linux
jne),
serveritarkvara
,
aknahaldustarkvara
ja
utiliite
(nt
diagnostikaprogrammid
).
- Susteemi tarkvara sisaldab ka alglaadimise
pusivara
, mis laadib lahti (voi monel juhul ka moodustab) operatsioonisusteemi. Pusivara on tarkvara, mis on pusivalt salvestatud riistvarasse (tapsemalt
pusimallu
). Seega on sellel nii tarkvara kui ka riistvara omadusi, kuid on siiski tarkvara.
- Rakendustarkvara
ja
skriptid
olid ajalooliselt maaratletud kui kogu tarkvara, mis kasutab arvutisusteemi, et teha kasulikumat tood (voi lahutada meelt), kui arvuti algoperatsioonid voi arvuti ise. Praktikas on aga susteemi- ja rakendustarkvara erinevused sageli ahmased kasulikkude operatsioonisusteemi rakenduste tottu. Rakendustarkvara voimaldab kasutajal teatava kindla ulesande taitmist. Rakendustarkvara alla kuuluvad naiteks
kontoritarkvara
(
Microsoft Office
,
LibreOffice
),
arhiveerimistarkvara
,
majandustarkvara
,
andmebaasid
,
arvutimangud
. Rakendustarkvaras on tavaliselt kasutusel
graafiline kasutajaliides
(GUI).
- Rakendustarkvara sisaldab toolauarakendusi nagu
brauserid
ja Microsoft Office, samuti
nutitelefoni
ja tableti rakendusi (nn "app").
- JavaScripti
skriptid on tarkvara osad, mis on traditsiooniliselt veebilehtede osad, mis kaivitatakse otse brauseri sees, kui veebileht lahti laaditakse, ilma et oleks vaja veebibrauseri
pistikprogrammi
(inglise
plug-in
). Tarkvara, mis on kirjutatud teistes programmeerimiskeeltes, saab ka veebibrauseris kaivitada, kui tarkvara on, kas tolgitud JavaScripti voi kui brauseri pistikprogramm, mis toetad vastavat keelt, on installitud. Koige levinum naide viimasest on
ActionScripti
skriptid, mida toetab
Adobe Flashi
lisandprogramm.
- Veebirakendused tootavad tavaliselt
veebiserveris
ja valjundavad veebibrauseritele dunaamiliselt genereeritud veebilehti, kasutades tarkvara nagu
PHP
,
Java
voi
ASP.NET
, voi isegi JavaScripti, mis jookseb
serveris
.
- Pistikprogrammid ja laiendid on tarkvara, mis laiendab voi muudab mone teise tarkvara funktsionaalsust, noudes vastava tarkvara kasutamist, et funktsioneerida.
- Sisseehitatud tarkvara on arvuti tarkvara, mis on kirjutatud, et juhtida masinaid voi seadmeid, millest tavaliselt ei moelda kui arvutitest. Uldiselt spetsialiseerunud eelkoige riistvarale, mida vastav tarkvara kaitab ning millel on aja- ja malupiirangud. Seda terminit kasutatakse monikord pusivarana, kuigi pusivara saab kasutada ka arvuti pusimalupohises koodis, millelt operatsioonisusteem jookseb, samas kui sisseehitatud tarkvara on tavaliselt ainuke tarkvara konealusel seadmel.
[4]
- Mikrokood
on eriline, suhteliselt segast tuupi sisseehitatud tarkvara, mis utleb protsessorile, kuidas taita masinkoodi, nii et tegelikult on see madalam tasand kui masinkood.
[5]
See on tavaliselt salastatud protsessori tootja poolt ning koik vajalikud mikrokoodi tarkvara uuendused varustatakse kasutajatele nende poolt (mis on palju odavam kui asendava protsessori riistvara kohaletoimetamine). Seega tavaline programmeerija ei peaks kunagi eeldama, et peab sellega tegelema.
Programmeerimisvahendid on tarkvara programmide voi rakenduste kujul, mida tarkvara arendajad (tuntud ka kui
programmeerijad
, koodijad,
hakkerid
voi tarkvarainsenerid) kasutavad, et luua,
siluda
, sailitada (st parandada voi taiustada) voi muul viisil toetada tarkvara. Tarkvara kirjutatakse uhes voi mitmes programmeerimiskeeles; on palju programmeerimiskeeli ja igauhel neist on vahemalt uks rakendus, millest igauks koosneb oma programmeerimisvahendite komplektist. Need vahendid voivad olla suhteliselt iseseisvad programmid nagu koostajad, silujad, tolgid ja teksti toimetajad, mida saab kasutada koos, et taita teatud ulesanne (tapselt nagu fuusilise objekti parandamisel mitme tooriista kasutamine). Nad voivad olla ka
integreeritud arenduskeskkond
(IDE), millel on mitmed voi koik selliseid kompaktsete tooriistade funktsioonid. Peaaegu koik programmeerimiskeele rakendused (erandiks on
Smalltalk
) annavad voimaluse kasutada konkreetseid vahendeid IDE asemel, sest moned programmeerijad eelistavad IDE mittekasutamist eri pohjustel. Lisaks laheb tavaliselt kauem aega, et arendada IDE "vastuvoetavale" tasemele.
Kasutajad naevad asju sageli teistmoodi kui programmeerijad. Inimesed, kes kasutavad nuudisaegseid uldotstarbelisi arvuteid (erinevalt manussusteemidest,
analoogarvutitest
ja
superarvutitest
) naevad tavaliselt kolme kihti tarkvara, mis taidavad erinevaid ulesandeid: platvormi, rakenduslik ja kasutaja tarkvara.
- Tarkvaraplatvorm ? sisaldab pusivara, seadmedraiverid, operatsioonisusteemi ja tavaliselt graafilist kasutajaliidest, mis kokkuvottes voimaldab kasutajal suhelda arvuti ja selle valisseadmetega. Tarkvaraplatvorm on sageli arvutiga komplekteeritud. Eraarvutitel on kasutajal tavaliselt voimalus muuta tarkvaraplatvormi.
- Rakendustarkvara ? rakendustarkvara voi rakendused on need, mida enamik inimesi peavad tarkvaraks. Tuupilised naited on kontoritoo programmid ja videomangud. Rakendustarkvara ostetakse sageli riistvarast eraldi. Monikord on rakendused arvutiga kaasas, kuid see ei muuda asjaolu, et nad tootavad iseseisvate rakendustena. Rakendused on tavaliselt soltumatud programmid operatsioonisusteemis, kuigi nad on sageli kohandatud teatud platvormidele.
- Kasutaja kirjutatud tarkvara, mida loppkasutajad ise arendavad ja kujundavad vastavalt endi vajadustele. Kasutaja tarkvara hulka kuuluvad arvutustabeli- ja tekstitootlusmallid. Isegi
e-posti
filtrid on omamoodi kasutaja tarkvara. Kasutajad loovad selle tarkvara ise ja tihti ei pane isegi tahele, kui oluline see on. Soltuvalt sellest, kui asjatundlikult kasutaja kirjutatud tarkvara on integreeritud vaikerakenduse
pakettidesse
, ei pruugi paljud kasutajad teha vahet originaalpaketil ja tookaaslaste lisatud tarkvaral.
Arvuti tarkvara peab laadima arvuti "salve" (naiteks
kovaketas
voi
malu
). Parast tarkvara laadimist on arvuti voimeline tarkvara kaivitama. See sisaldab rakendustarkvara juhiste labimist labi susteemi tarkvara riistvarale, mis lopuks saab juhendid kui masinkoodis. Iga juhis pohjustab arvutis teatud operatsiooni teostamise ? andmete teisaldamise, arvutuse tegemise voi juhiste kontrollvoolu muutmise.
Andmete teisaldamine tahendab tavaliselt andmete teisaldamist uhest malu kohast teise. Vahel sisaldab see andmete teisaldamist malu ja
registrite
vahel, mis voimaldavad protsessoris andmetele kiire juurdepaasu. Andmete teisaldamine, eriti suurtes kogustes, voib olla ohtlik. Seega aeg-ajalt valditakse seda, kasutades andmete viitu. Arvutused sisaldavad lihtsaid toiminguid, naiteks muutuva andme osale vaartuse juurde lisamine. Keerulisemad arvutused voivad sisaldada nii mitmeid operatsioone kui ka andmete elemente.
-
Pikemalt artiklis
Tarkvara testimine
Tarkvara kvaliteet on vaga oluline, eriti ari- ja susteemitarkvara (naiteks Microsoft Office, Microsoft Windows ja Linux) kvaliteet. Kui tarkvara on vigane, voib see kustutada isiku too, arvuti kokku jooksutada ja teha muid ootamatuid asju. Paljud vead avastatakse ja korvaldatakse
tarkvara testimise
kaigus. Kuid tarkvara testimine eemaldab harva ? kui uldse ? koik vead. Moned programmeerijad isegi utlevad, et "igal programmil on vahemalt uks viga" (Lubarsky seadus). Koikidel suurtel tarkvarafirmadel, naiteks
Microsoftil
,
Novellil
ja
Sun Microsystemsil
, on oma tarkvara testimise osakonnad, mille konkreetne eesmark ongi vaid tarkvara testimine. Tarkvara saab kontrollida
uhiktestimise
,
regressioonitestimise
ja muude meetodite rakendamisel, mida tehakse kasitsi. Tavaliselt tehakse seda aga automaatselt, sest tihti on testitava koodi suurus usna suur. Naiteks
NASA
-l on aarmiselt ranged tarkvara testimise protseduurid paljude operatsioonisusteemide ja sidefunktsioonide jaoks. Paljud NASA-l pohinevad operatsioonid suhtlevad ja tuvastavad uksteist labi kaskprogrammide, mida kutsutakse kasktarkvaraks. See voimaldab paljudel NASA-s tootavatel inimestel kontrollida ja hinnata uldisi funktsionaalseid susteeme. Programmid sisaldavad kask tarkvara voimaldab riistvara insenerja susteemi tegevuse toimida palju lihtsam koos. Programmide abil, mis sisaldavad kasktarkvara, saavad riistvara ja tarkvara palju sujuvamalt koos tootada.
Tarkvaralitsents
annab kasutajale oiguse kasutada tarkvara litsentsitud keskkonnas. Monel tarkvaral on litsents, kui see ostetakse n-o riiulilt, riistvaraga kaasas aga OEM litsents. Ulejaanud tarkvaraga kaasneb tasuta tarkvara litsents, andes saajale oigused muuta ja levitada antud tarkvara. Tarkvara voib olla ka
vabavara
voi
jaosvara
kujul.
Tarkvara saab
patenteerida
moningates, kuid mitte koikides riikides. Tarkvarapatendid voivad tarkvara toostuses olla vastuolulised ? paljudel inimestel on selles osas erinevad vaated. Lahkarvamused tarkvarapatentide kohta on seotud konkreetsete algoritmide ja tehnikate kasutamisega, mida tarkvara sisaldab ning mida ei tohi teised dubleerida. Selle dubleerimist peetakse
intellektuaalomandi
ja
autorioiguse
rikkumiseks, soltuvalt rikkumise raskusastmest.
Tarkvara valjatootamine ja rakendamine soltub suuresti tarkvara keerukusest. Naiteks
Microsoft Wordi
tarkvara valjatootamine ja loomine votab programmide funktsionaalsete erinevuste tottu palju rohkem aega kui
Microsoft Notepadi
arendamine ja valjatootamine
.
[7]
Tarkvara on tavaliselt valja tootatud ja loodud (kodeeritud/kirjutatud/programmeeritud) integreeritud arenduskeskkondades (IDE) nagu
Eclipse
,
Emacs
ja
Microsoft Visual Studio
, mis suudavad protsessi lihtsustada ja koostada programmi. Nagu erinevates sektsioonides margitud, loodakse tarkvara tavaliselt olemasoleva tarkvara ja rakenduse programmeerimisliidese (API), mille antud alumine tarkvara annab nagu
GTK +
,
JavaBeans
voi
Swing
, peale. Rakenduse programmeerimisliidese raamatukogud on liigitatud erinevatel pohjustel. Naiteks JavaBeansi
teeki
(inglise
library
) kasutatakse ettevotete rakenduste valjatootamiseks, Windows Formsi teeki aga graafilise kasutajaliidese (GUI) rakenduste valjatootamisel (naiteks Microsoft Word) ning Windows Communication Foundationi teeki veebiteenuste valjatootamisel. Programmeerimise alusmoisted quicksort,
paisktabel
(inglise
hash table
), rida (inglise
array
) ja kahendpuu voivad olla tarkvara loomisel kasulikud. Programmi disainimisel tugineb see rakenduse programmiliidesele.