Software-ul este o colectie de instructiuni care ii spun unui computer cum sa functioneze. Acest lucru este in contrast cu hardware-ul, din care este construit sistemul si realizeaza efectiv munca.

La cel mai jos nivel de programare, codul executabil consta din instructiuni in limbajul masinii suportate de un procesor individual – de obicei o unitate centrala de procesare (CPU) sau o unitate de procesare grafica (GPU). Limbajul masinii este format din grupuri de valori binare care semnifica instructiunile procesorului si care schimba starea computerului fata de starea anterioara. De exemplu, o instructiune poate modifica valoarea stocata intr-o anumita locatie de stocare a computerului – un efect care nu este observabil direct de utilizator.

O instructiune poate invoca, de asemenea, una dintre multele operatiuni de intrare sau de iesire, de exemplu afisarea unui text pe ecranul unui computer, provocând schimbari de stare care ar trebui sa fie vizibile pentru utilizator. Procesorul executa instructiunile in ordinea in care sunt furnizate, cu exceptia cazului in care i se cere sa „sara” la o alta instructiune sau este intrerupt de sistemul de operare.

Incepând cu 2015, majoritatea computerelor personale, dispozitivelor smartphone si serverelor au procesoare cu mai multe unitati de executie sau mai multe nuclee care efectueaza calcule impreuna, iar calculul a devenit o activitate mult mai concurenta decât in ​​trecut.

Majoritatea software-ului este scris in limbaje de programare de nivel inalt. Sunt mai usoare si mai eficiente pentru programatori, deoarece sunt mai aproape de limbajele naturale decât limbajele tip masina.

Limbajele de nivel inalt sunt traduse in limbajul masina folosind un compilator, un interpret sau o combinatie a celor doua. Software-ul poate fi, de asemenea, scris intr-un limbaj de asamblare de nivel scazut, care are o corespondenta puternica cu instructiunile computerului in limbajul masinii si este tradus in limbajul masinii folosind un asamblator.

Tipuri

Pe aproape toate platformele informatice, software-ul poate fi grupat in câteva categorii mari.

Scopul sau domeniul de utilizare

In functie de obiectiv, software-ul de calculator poate fi impartit in:

Aplicatia software foloseste sistemul informatic pentru a indeplini functii speciale dincolo de functionarea de baza a computerului in sine. Exista multe tipuri diferite de aplicatii software, deoarece gama de sarcini care pot fi efectuate cu un computer modern este foarte mare.

Software-ul de sistem gestioneaza comportamentul hardware, astfel incât sa ofere functionalitati de baza care sunt cerute de utilizatori sau pentru ca alt software sa ruleze corect, daca este necesar. Software-ul de sistem este, de asemenea, conceput pentru a oferi o platforma pentru rularea software-ului aplicatiei, si include urmatoarele:

  • Sistemele de operare sunt colectii esentiale de software care gestioneaza resurse si ofera servicii comune pentru alte tipuri de software care ruleaza „pe deasupra” acestora. Programele de supraveghere, incarcatoarele de pornire/rulare, shell-urile si sistemele de ferestre sunt parti esentiale ale sistemelor de operare. In practica, un sistem de operare vine la pachet cu software suplimentar (inclusiv software de aplicatie), astfel incât un utilizator sa poata lucra cu un computer care are un singur sistem de operare.
  • Driverele de dispozitiv opereaza sau controleaza un anumit tip de dispozitiv care este atasat la un computer. Fiecare dispozitiv are nevoie de cel putin un driver de dispozitiv corespunzator; deoarece un computer are de obicei cel putin un dispozitiv de intrare si cel putin un dispozitiv de iesire, un computer are de obicei nevoie de mai mult de un driver de dispozitiv.
  • Utilitarele sunt programe de calculator concepute pentru a ajuta utilizatorii in intretinerea si ingrijirea computerelor lor.
  • Software-ul rau intentionat sau malware este un software dezvoltat pentru a ataca sau a perturba computerele. Programele malware sunt strâns asociate cu infractiunile legate de computere, desi unele programe rau intentionate ar fi putut fi concepute ca glume practice.

Natura sau domeniul de executie

Scripturile JavaScript sunt componente de software incorporate in mod traditional in paginile web care sunt rulate direct in browserul web atunci când o pagina web este incarcata, fara a fi nevoie de un plugin pentru browser web. Software-ul scris in alte limbaje de programare poate fi, de asemenea, rulat in browser-ul web daca software-ul este fie tradus in JavaScript, fie daca este instalat un plugin de browser web care accepta limbajul respectiv; cel mai comun exemplu al acestora din urma sunt scripturile ActionScript, care sunt acceptate de pluginul Adobe Flash.

Software de aplicatie

Software de server, inclusiv:

Aplicatii web, care ruleaza de obicei pe serverul web si scot pagini web generate dinamic catre browsere web, folosind de ex. PHP, Java, ASP.NET sau chiar JavaScript care ruleaza pe server. In vremurile moderne, acestea includ in mod obisnuit ceva JavaScript pentru a fi rulat si in browserul web, caz in care ruleaza de obicei partial pe server, partial in browserul web.

Pluginurile si extensiile sunt softuri care extind sau modifica functionalitatea unei alte parti de software.

Software-ul incorporat rezida ca firmware in sistemele incorporate, dispozitive dedicate unei singure utilizari sau pentru câteva utilizari, cum ar fi masinile si televizoarele (desi unele dispozitive incorporate, cum ar fi chipset-urile fara fir, pot face ele insele parte dintr-un sistem informatic obisnuit, neincorporat, cum ar fi un PC sau smartphone).

In contextul sistemului incorporat, uneori nu exista o distinctie clara intre software-ul de sistem si software-ul aplicatiei. Cu toate acestea, unele sisteme incorporate ruleaza sisteme de operare incorporate, iar aceste sisteme pastreaza distinctia intre software-ul de sistem si software-ul de aplicatie (desi de obicei va exista o singura aplicatie fixa, care este intotdeauna rulata).

Microcodul este un tip special, relativ obscur de software incorporat, care ii spune procesorului insusi cum sa execute codul de masina. Actualizarile software de microcod sunt furnizate direct utilizatorilor (ceea ce este mult mai ieftin decât livrarea hardware-ului de inlocuire). Astfel, un programator obisnuit nu s-ar astepta sa aiba vreodata de-a face cu asta.

Instrumente de programare

Instrumentele de programare sunt, de asemenea, software sub forma de programe sau aplicatii pe care dezvoltatorii le folosesc pentru a crea, depana, intretine sau sustine un alt software.

Software-ul este scris in unul sau mai multe limbaje de programare; exista multe limbaje de programare si fiecare are cel putin o implementare, fiecare constând din propriul set de instrumente de programare. Aceste instrumente pot fi programe relativ autonome, cum ar fi compilatoare, depanatoare, interpreti, linkere si editori de text, care pot fi combinate pentru a indeplini o sarcina; sau pot forma un mediu de dezvoltare integrat (IDE), care combina o mare parte sau intreaga functionalitate a unor astfel de instrumente autonome.

Un IDE poate facilita realizarea unor sarcini specifice, cum ar fi cautarea in fisiere dintr-un anumit proiect. Multe implementari ale limbajului de programare ofera optiunea de a folosi atât instrumente individuale, cât si un IDE.

Arhitectura

Oamenii care folosesc computere moderne de uz general (spre deosebire de sistemele incorporate, computere analogice si supercomputere) folosesc de obicei trei straturi de software care efectueaza o varietate de sarcini: platforma, aplicatie si software de utilizator.

Software-ul platformei

Platforma include firmware-ul, driverele de dispozitiv, un sistem de operare si, de obicei, o interfata grafica cu utilizatorul care, impreuna, permit unui utilizator sa interactioneze cu computerul si perifericele acestuia (echipamente asociate). Software-ul platformei vine adesea la pachet cu computerul. Pe un PC, cineva va avea de obicei capacitatea de a schimba software-ul platformei.

Software de aplicatie

Aplicatia software este tipul de program la care se gandesc cei mai multi oameni atunci când este pus in discutie termenul “software”. Exemplele tipice includ suite software de birou si jocurile video. Aplicatia software este adesea achizitionata separat de hardware-ul computerului. Uneori, aplicatiile sunt incluse in pachet cu computerul, dar asta nu schimba faptul ca ruleaza ca aplicatii independente. Aplicatiile sunt de obicei programe independente de sistemul de operare, desi sunt adesea adaptate pentru anumite platforme. Majoritatea utilizatorilor considera compilatoarele, bazele de date si alte „software de sistem” ca aplicatii software.

Software scris de utilizator

Dezvoltarea utilizatorului final adapteaza sistemele pentru a satisface nevoile specifice ale utilizatorilor. Software-ul utilizatorului include sabloane de foi de calcul si sabloane de procesare de text. Chiar si filtrele de e-mail sunt un fel de software pentru utilizator. Utilizatorii creeaza ei insisi acest software si deseori trec cu vederea cât de important este acesta. In functie de cât de competent a fost integrat software-ul scris de utilizator in pachetele implicite de aplicatii, multi utilizatori ar putea sa nu fie constienti de distinctia dintre pachetele originale si ce a fost adaugat de colegi.

Calitate si fiabilitate

Calitatea software-ului este foarte importanta, in special pentru software-ul comercial si de sistem. Daca software-ul este defect, acesta poate sterge munca unei persoane, poate bloca computerul si poate face alte lucruri neasteptate. Defectiunile si erorile sunt numite „bug-uri”, care sunt adesea descoperite in timpul testarii alfa si beta.

Multe erori sunt descoperite si remediate prin testarea software-ului. Cu toate acestea, testarea software-ului nu elimina de cele mai multe ori fiecare eroare; unii programatori spun ca „fiecare program are cel putin inca un bug” (Legea lui Lubarsky). In metoda cascada de dezvoltare a software-ului, se folosesc de obicei echipe de testare separate, dar in abordarile mai noi dezvoltatorii isi fac adesea propriile teste si demonstreaza software-ul utilizatorilor/clientilor in mod regulat pentru a obtine feedback.

Software-ul poate fi testat prin testare unitara, testare de regresie si alte metode, care sunt efectuate manual sau, cel mai frecvent, automat, deoarece cantitatea de cod care trebuie testata poate fi mare. Programele care contin software de comanda permit ingineriei hardware si operatiunilor sistemului sa functioneze mult mai usor impreuna.