Programari

El programari (software, en anglès) és el conjunt dels programes informàtics, procediments i documentació que fan alguna tasca en un ordinador. Comprèn el conjunt sistemàtic dels programes d'explotació i dels programes informàtics que serveixen per a aplicacions determinades. El terme inclou aplicacions com els processadors de text, programari de sistema com el sistema operatiu, que fa d'interfície entre el maquinari i les aplicacions, i finalment el programari intermediari, que controla i coordina sistemes distribuïts.

Moltes vegades, el terme és usat per contraposició a maquinari. S'usa el primer per a descriure la part lògica d'un sistema informàtica i el segon, per a descriure la part física. A diferència del maquinari, el programari "no es pot tocar".

Història 

La primera teoria sobre el programari va ser proposada per Alan Turing en el seu assaig del 1935 anomenat "On Computable Numbers, with an application to the Entscheidungsproblem" (Sobre els nombres calculables, amb una aplicació a lEntscheidungsproblem) El terme "programari" va ser utilitzat per primera vegada en un document imprès el 1958 per John Tukey a un article publicat a la revista de matemàtiques American Mathematical Monthly. Col·loquialment, el terme s'utilitza sovint en el sentit de programari d'aplicació. En informàtica i en enginyeria de programari, el programari és tota la informació processada per sistema informàtic, els programes i les dades. A l'àmbit acadèmic l'estudi de programari s'inclou dins dels camps de la informàtica i l'enginyeria de programari actual.

Sovint es considera que la història dels programes informàtics es remunta fins al primer error de programari, el 1946. Atès que cada vegada hi ha més programes que passen a formar part del món del microprogramari i el maquinari esdevé cada vegada més petit, més barat i més ràpid a causa de la llei de Moore, hi ha elements que abans eren considerats com a programari que avui dia han passat al domini del maquinari. La majoria de les companyies de maquinari actuals tenen força més programadors de programari en nòmina que dissenyadors de maquinari, ja que les eines de programari han automatitzat moltes de les tasques dels enginyers que creen els circuits impresos.

De la mateixa manera que ho va fer la indústria automotriu, la indústria del programari ha evolucionat a partir d'uns pocs visionaris que treballaven amb prototips al seu garatge. Steve Jobs i Bill Gates van ser el Henry Ford i el Louis Chevrolet de la seva època, que van aprofitar i capitalitzar les idees ja conegudes abans que iniciessin el seu negoci. En el cas del desenvolupament de programari, s'accepta de manera generalitzada que el moment inicial va ser la publicació a la dècada del 1980 de les especificacions de l'IBM Personal Computer per part de l'empleat d'IBM Don Estridge. Avui aquest moviment seria vist com un tipus de crowdsourcing (subcontractació oberta).

Fins a aquest moment, el programari era empaquetat juntament amb el maquinari pels OEMs (fabricants d'equips originals), com Data General, Digital Equipment o IBM. En aquell moment, quan un client comprava un miniordinador, l'ordinador més petit de l'època, l'equip no venia amb cap programari preinstal·lat, sinó que havia de ser instal·lat per enginyers empleats per l'OEM. Les empreses de maquinari, no només venien els seus paquets de programari, també les demandes d'ubicar els equips en uns espais refrigerats anomenats sales d'ordinadors. La majoria de les empreses tenien el seu programari en els catàlegs a cap preu (0 €), de manera que no es podia considerar com un actiu (de manera similar a alguns casos de música popular d'avui dia). Quan Data General va presentar el seu miniordinador de 16 bits anomenat Data General Nova, una companyia anomenada Digidyne va voler utilitzar el seu sistema operatiu RDOS (Real-time Disk Operating System en el seu propi clon del maquinari. Data General es van negar a llicenciar el seu programari (cosa que era difícil, ja que era publicat com un bé lliure), i va reclamar els seus drets. La Cort Suprema va crear un precedent anomenat Digidyne v. Data General in 1985 i finalment Data General es va veure obligada a la concessió de llicències de programari del sistema operatiu, ja que es va fallar que la restricció de la llicència al maquinari de Data General era il·legal. Poc després, IBM publicava el codi font del seu sistema operatiu de disc de manera gratuïta, i va néixer Microsoft. Data General va acabar sent absorbida per EMC Corporation en ser incapaç de suportar les pèrdues causades pels honoraris dels advocats. La decisió de la Cort Suprema va permetre valorar el programari i també comprar patents de programari. En aquell moment la decisió d'IBM de publicar el codi era gairebé com una protesta. Pocs dins la indústria creien que algú fora de la mateixa IBM (gràcies a la publicitat gratuïta de la seva decisió) podria arribar a treure'n algun benefici. Microsoft i Apple van ser capaces de treure profit dels productes soft. Avui dia es fa difícil d'imaginar que va haver-hi una vegada que la gent pensava que el programari no valia res sense una màquina. Avui en dia hi ha moltes empreses d'èxit que venen només productes de programari, tot i que habitualment encara hi ha molts problemes relacionats amb la concessió de llicències a causa de la complexitat dels dissenys i la poca documentació, el que porta a les patents troll.

Amb les especificacions de programari de codi obert i la possibilitat de concessió de llicències de programari, van aparèixer noves oportunitats per a eines de programari que després van esdevenir estàndards de facto, com per exemple DOS per als sistemes operatius, però també diferents sistemes propietaris de tractament text i fulls de càlcul. Seguint un patró de similar, els mètodes de desenvolupament propietaris van esdevenir metodologies estàndards de desenvolupament de programari.

Definició 
La definició més formal de programari és la següent: 

En aquesta definició, el concepte de programari va més enllà dels programes de computació en els seus diferents estats: codi font, binari o executable; també la seva documentació, les dades a processar i la informació d'usuari forma part del software: és a dir, abasta tot el que és intangible, tot el "no físic" relacionat.

El terme «software» va ser utilitzat per primera vegada en aquest sentit per John Tukey el 1958. En informàtica i en l'enginyeria de programari, el programari és tota la informació processada pels sistemes informàtics: programes i dades. El concepte de llegir diferents seqüències d'instruccions des de la memòria d'un dispositiu per a controlar els càlculs va ser introduït per Charles Babbage com una part de la seva màquina diferencial. La teoria que forma la base de la major part del programari modern va ser proposada per primera vegada per Alan Turing en el seu assaig del 1936, Els nombres computables, amb una aplicació al problema de la decisió.

Classificació 

Si bé aquesta distinció és, en certa manera, arbitrària, i de vegades confusa, prioritzant la finalitat pràctica de l'objecte, el programari es pot classificar en tres grans grups:
 Programari de sistema: El seu objectiu és desvincular adequadament a l'usuari i al programador dels detalls de la computadora en particular que s'usi, aïllant-lo especialment del processament referit a les característiques internes de: memòria, discs, ports i dispositius de comunicacions, impressores, pantalles, teclats, etc. El programari de sistema li procura l'usuari i programador adequades interfícies d'alt nivell, eines i utilitats de suport que permeten el seu manteniment.
 Programari de programació: És el conjunt d'eines que permeten al programador desenvolupar programes informàtics, usant diferents alternatives i llenguatges de programació, d'una manera pràctica.
 Programari d'aplicació: És aquell que permet als usuaris dur a terme una o diverses tasques específiques, en qualsevol camp d'activitat susceptible de ser automatitzada o assistit, amb especial èmfasi en els negocis.

Tanmateix hi ha d'altres classificacions possibles i d'altres possibles tipus de programari que es poden considerar:
 El microprogramari (firmware, en anglès) és el programari específic que controla un dispositiu (un mòdem, una unitat de DVD, un microprocessador…)
 El programari portàtil és aquell que es pot ubicar normalment en un medi que es pot extreure i que pot executar-se en qualsevol maquinari.
 Les biblioteques contenen funcions comunes del sistema operatiu, que són utilitzades des d'altres programes.
 Les aplicacions són programes que executa un usuari amb una funció concreta; calculadora, processador de textos, gestors de fulls de càlcul, videojocs, missatgeria…

Programari de sistema 

El programari del sistema proporciona les funcions bàsiques per a la utilització de l'ordinador, i pot ser dividit en sistema operatiu i sistema de suport. El sistema operatiu és el programari més bàsic. El programari de sistema ajuda a executar el maquinari i el sistema informàtic i proporciona a l'usuari i al programador interfícies adequades d'alt nivell, eines i utilitats de suport que permeten el seu manteniment. Inclou una combinació dels següents elements:

 Sistemes operatius. És el programari que s'inicia en engegar un ordinador, i que controla l'execució de tots els altres programes.
 Controladors de dispositiu
 Sistema de finestres
 Eines de diagnòstic
 Eines de correcció i optimització
 Servidors
 Utilitats

S'encarrega de gestionar la gran varietat de maquinari que pot haver-hi en un ordinador per tal que tots els elements puguin treballar junts harmoniosament. El programari de sistema s'encarrega de presentar l'ordinador com un tot als usuaris i en altres programaris sense que s'hagin de preocupar sobre com treballa cada maquinari particular. El seu objectiu és desvincular el programador dels detalls, sovint de gran complexitat, inherents a l'ordinador particular que estigui utilitzant, incloent-hi accessoris com dispositius de comunicacions, impressores, lectors de disc òptic o d'altres, monitors o teclats i també possibilitar la compartició de recursos com la memòria i el temps d'utilització del processador d'una manera segura i estable. Alguns exemples són - Microsoft Windows, Linux i Mac OS X.

Programari de programació 

És el conjunt d'eines que permeten al programador desenvolupar programes informàtics, utilitzant diferents alternatives i llenguatges de programació, d'una manera pràctica. Inclou entre altres:
 Compiladors
 Intèrprets
 Enllaçadors (linkers)
 Depuradors (debuggers)
 Editors de text

Els entorns integrats de desenvolupament (o IDE, acrònim de Integrated development environment) agrupen les eines anteriors, normalment en un entorn gràfic, de manera que el programador no necessiti introduir múltiples ordres per, entre altres coses, compilar, interpretar o depurar. Aquestes eines de programació compten habitualment amb una avançada interfície gràfica d'usuari (o GUI, de Graphical user interface).

Programari d'aplicació 

El programari d'aplicació és aquell que permet als usuaris dur a terme una o diverses tasques específiques, en qualsevol camp d'activitat susceptible de ser automatitzat o assistit, amb especial èmfasi en els negocis. Inclou entre d'altres:

 Aplicacions de sistema de control i automatització industrial
 Aplicacions ofimàtiques
 Programari empresarial
 Bases de dades
 Telecomunicacions (com per exemple Internet i tota la seva estructura lògica)
 Videojocs
 Programari mèdic
 Fulls de càlcul
 Programari de disseny assistit (CAD)
 Programari de Fabricació assistida per ordinador (CAM)
 Programari de presa de decisions
 Simuladors
 Programari educatiu

Llenguatges de programació 

Per introduir ordres a la computadora hem d'usar un llenguatge específic conegut com a llenguatge màquina, que consisteix en llargues cadenes de nombres binaris (1 i 0). Aquest llenguatge, que la computadora entén directament, és excessivament complicat per a una persona. Per a fer el treball més fàcil els primers operadors de computadores van decidir posar noms mnemònics a les instruccions que abans només s'especificaven amb codis binaris. Aquest nou llenguatge l'anomenaren llenguatge d'assemblador. Així per exemple, per sumar s'usa la instrucció "add". Escriure en llenguatge d'assemblador és equivalent a fer-ho en llenguatge màquina, però les instruccions són més fàcils de recordar que no pas si s'escriuen com una sèrie de nombres.

A mesura que va anar augmentat la complexitat dels programes escrits en assemblador es va fer necessari disposar d'un llenguatge més potent i senzill per a programar-los. Llavors, es van crear els llenguatges d'alt nivell. Quan amb una tasca tan senzilla com sumar dos nombres pot necessitar diverses instruccions en un llenguatge de baix nivell com l'assemblador, en un llenguatge d'alt nivell en tindrem prou amb només una.

Una vegada escrit un programa, tant en llenguatges de baix com d'alt nivell, és necessari compilar-los, això és, traduir-los a llenguatge màquina (un executable), que és l'únic que un ordinador entén. Això no és així amb llenguatges interpretats com a C#, Java o JavaScript.

Procés de creació de programari 
Es defineix un procés al conjunt ordenat de passos a seguir per arribar a la solució d'un problema o obtenció d'un producte, en aquest cas particular, per aconseguir l'obtenció del programari que resolgui un problema o satisfaci una necessitat.

Aquest procés de creació de programari pot arribar a ser molt complex, depenent del seu port i de les seves característiques. Per exemple, la creació d'un sistema operatiu és una tasca que requereix un projecte, gestió, nombrosos recursos i tot un equip de treball ben disciplinat. A l'altre extrem, si es tracta d'un programa senzill, com per exemple un per a la resolució d'una equació de segon ordre, aquest pot ser realitzat fàcilment per un sol programador, fins i tot per un programador aficionat. Normalment, els ports es divideixen en tres categories segons la mida del programari (les línies de codi) i/o el cost: de petit, mitjà i gran port. Hi ha diverses metodologies per fer les estimacions pertinents; una de les més populars és el sistema COCOMO que proveeix mètodes i un programa que calcula i proporciona una estimació de tots els costos de producció en un "projecte programari" on hi ha, entre altres coses, una relació d'hores per individu, el cost econòmic i la quantitat de línies font d'acord amb llenguatge utilitzat.

Considerant els de gran port, és necessari realitzar moltes tasques i molt complexes, tècniques, de gerència, amb una intensa gestió, i calen anàlisis diverses per al seu estudi i realització i tot el suport de l'enginyeria: l'enginyer de programari.

En tant que en els de port mitjà, petits equips de treball, que fins i tot pot consistir en un avesat i solitari analista-programador, pot realitzar la tasca. Encara que, sempre en casos de mitjà i gran port –i de vegades, segons la seva complexitat, també en algun petit port–, s'han de seguir certes etapes que són necessàries per a la construcció del programari. Aquestes etapes, si bé han d'existir, són flexibles en la seva forma d'aplicació, d'acord amb la metodologia o Procés de Desenvolupament escollit i utilitzat per l'equip de desenvolupament o analista-programador solitari (si és el cas).

Els "processos de desenvolupament de programari" posseeixen regles preestablertes, i han de ser aplicats en la creació del programa de mitjà i gran port, ja que en cas contrari el més segur és que el projecte o no aconsegueixi concloure o acabi sense complir els objectius previstos i amb varietat d'errors inacceptables (fracassen, en poques paraules). Entre aquests "processos" n'hi ha d'àgils o lleugers, com per exemple la programació extrema (XP), pesants i lents com l'RUP, i variants intermèdies; i normalment s'apliquen d'acord amb el tipus i porte i tipologia del programari a desenvolupar, a criteri del líder (si no hi ha) de l'equip de desenvolupament. Alguns d'aquests processos són l'Extreme Programming (XP) (Programació extrema), el Rational Unified Process (RUP), i el Feature Driven Development (FDD).

Qualsevol que sigui el "procés" utilitzat i aplicat en un desenvolupament de programari (RUP, FDD, etc.), i gairebé independentment d'ell, sempre s'ha d'aplicar un "model de cicle de vida".

S'estima que, del total de grans projectes de programari iniciats, un 28% fracassen, un 46% cauen en severes modificacions que retarden l'acabament del projecte, i un 26% es desenvolupen de manera adequada. Quan un projecte fracassa, poques vegades és degut a falles tècniques; la principal causa d'errors i fracassos és la manca d'una bona metodologia o d'un adequat desenvolupament. Entre altres, des de fa poques dècades, una clara tendència és la de millorar les metodologies o processos de desenvolupament, o crear-ne de noves i conscienciar als professionals perquè la seva utilització sigui l'adequada. Normalment, els especialistes en l'estudi i desenvolupament d'aquestes metodologies i àrees afins (com ara models i fins a la gestió mateixa dels projectes) són els enginyers de programes. Els especialistes en qualsevol altra àrea de desenvolupament informàtic (analista, programador, llicenciat en informàtica, enginyer en informàtica, enginyer de sistemes, etc.) Normalment apliquen els seus coneixements especialitzats però utilitzant models, paradigmes i processos ja elaborats.

És normal que per al desenvolupament de programari de port mitjà els equips humans que hi participen apliquin les seves pròpies metodologies, que normalment són un híbrid dels processos anteriors i de vegades es fan servir amb criteris propis.

El procés de desenvolupament pot involucrar nombroses i variades tasques, des de l'àmbit administratiu, passant pel tècnic i la gestió i la gerència. Però gairebé, de manera rigorosa, sempre es compleixen unes determinades etapes, que es poden resumir en:
 Captura i obtenció d'informació. Especificació i Anàlisi de requisits
 Disseny
 Codificació
 Proves (unitàries i d'integració)
 Instal·lació i pas a Producció
 Manteniment

En les anteriors etapes poden variar lleugerament els seus noms, o ser més globals, o contràriament més refinades; per exemple indicar com una única fase (als fins documentals i interpretatius) de "Anàlisi i Disseny", o indicar com a "Implementació" el que està dit com "Codificació"; però en rigor, totes existeixen i inclouen, bàsicament, les mateixes tasques específiques.

Hi ha molts llenguatges de programació, com són el C, PHP, Perl, Python, Java, BASIC, etc. que es poden utilitzar per escriure programes. Les eines mínimes que es necessiten són un editor de text i un compilador o intèrpret del llenguatge que s'utilitzi.

Es pot crear programari seguint diferents paradigmes, com per exemple la programació estructurada o la programació orientada a objectes

Proves (unitàries i d'integració) 
Entre les diverses proves que se li efectuen al programari es poden distingir principalment:

Proves unitàries: Consisteixen a provar o testejar peces de programari petites; pel que fa a seccions, procediments, funcions i mòduls; aquelles que tinguin funcionalitats específiques. Aquestes proves s'utilitzen per assegurar el correcte funcionament de seccions de codi, molt més reduïdes que el conjunt, i que tenen funcions concretes amb cert grau d'independència.

Proves d'integració: Es realitzen una vegada que les proves unitàries van ser concloses amb èxit; amb aquestes s'intenta assegurar que el sistema complet, fins i tot els subsistemes que componen les peces individuals grans del programari funcionin correctament en operar en conjunt.

Drets d'autor 
Freqüentment es classifica el programari segons les llibertats que ofereix (lliure o propietari) o si és de pagament o no (programari de prova, programari descatalogat, programari gratuït…).

Programari lliure 

El programari lliure (en anglès free software) és el programari que pot ser utilitzat, estudiat i modificat sense restriccions, i que pot ser copiat i redistribuït bé en una versió modificada o sense modificar sense cap restricció, o bé amb unes restriccions mínimes per garantir que els futurs destinataris també tindran aquests drets.

En general, es pot dir que un programa és lliure si permet les quatre llibertats definides per la Free Software Foundation:
 La llibertat d'executar el programari per qualsevol propòsit (llibertat 0).
 La llibertat de veure com funciona el programa i adaptar-lo a les pròpies necessitats (llibertat 1). això comporta l'accés al codi font com a requisit.
 La llibertat de redistribuir còpies (llibertat 2)
 La llibertat de millorar el programa i de distribuir-lo de nou amb les millores realitzades, per tal que tota la comunitat se'n pugui beneficiar (llibertat 3). Igual que en el cas de la llibertat 1, l'accés al codi font és un requisit inherent.

Com que aquest tipus de programari es pot redistribuir lliurement, en general es pot trobar gratuïtament a Internet, o a un cost baix si l'adquirim per mitjà d'altres suports (CD-Rom o DVD per exemple). A causa d'això, els models de negoci basats en programari lliure normalment es basen a proporcionar serveis de valor afegit com per exemple suport tècnic, cursos de formació, personalització, integració, o certificació.

Programari propietari 

El programari de propietat o no lliure és qualsevol programari sotmès a restriccions en la seva utilització, modificació privada, o amb restriccions en la còpia i publicació de versions modificades o no modificades. Normalment el seu codi font no està disponible, o només sota restriccions. Les restriccions derivades dels drets d'autor, patents, propietat intel·lectual, etc., del propietari s'apliquen per mitjans legals però de vegades també tècnics. Encara que el codi font pugui fer-se públic, el programari pot continuar essent de propietat si es mantenen les restriccions abans esmentades.

Programari gratuït 
El programari gratuït ("freeware" en anglès) és un programari que es distribueix sense cap cost. De vegades s'inclou el codi font, però no és un requisit necessari. El programari gratuït acostuma a incloure una llicència d'ús, que permet que se'l redistribueixi, però amb algunes restriccions com la prohibició de modificar l'aplicació o vendre-la, o utilitzar-a només per a ús personal, no comercial, acadèmic, etc. És habitual la utilització d'aquest tipus de programari per a donar a conèixer un producte i poder aconseguir usuaris disposats a pagar per una versió més completa o avançada.

Programari de prova 
El programari de prova o shareware és un tipus de programari que comporta el permís de redistribució, però que adverteix a tothom que l'ús continuat de la còpia rebuda implica el pagament d'una llicència d'ús.

Programari descatalogat 

El programari descatalogat és un programari que ja no es desenvolupa ni es manté pel titular dels seus drets (copyright). Habitualment es tracta de jocs o programes sense funcions avançades que tenen més de 5 anys d'antiguitat que poden ser descarregats i utilitzats.

Indústria del programari 

La indústria del programari està constituïda per una gran varietat d'empreses de programari i programadors. El programari pot ser una indústria molt rendible, Bill Gates, el fundador de Microsoft, va ser la persona més rica del món el 2009 en gran gràcies a les vendes de Microsoft Windows i Microsoft Office, dos productes de programari. El mateix passa amb Larry Ellison, que obté en gran part els seus guanys a través del seu programari de base de dades anomenat Oracle.

Al llarg del temps la indústria del programari s'ha anat especialitzant cada vegada més i hi ha diversos tipus de negocis. Trobem camps com el del programari de sistema i infraestructura, que inclou els sistemes operatius, programari intermediari (middleware) i bases de dades, i el creen empreses com Microsoft, IBM, Sybase, EMC, Oracle o VMware. El programari empresarial que automatitza els processos empresarials en les finances, la producció, la logística, les vendes i el màrqueting el fan empreses com Oracle Corporation, SAP AG, Sage o Infor. El programari de seguretat està fet per empreses com Symantec, Comodo, Trend Micro o Kaspersky.

Diversos fabricants de programari específic per a la indústria també es troben entre les majors companyies de programari del món: SunGard fa programari per a bancs, BlackBoar fa programari per a les escoles, i empreses com Qualcomm o Cybervision fan programari per a empreses de telecomunicacions. Altres empreses realitzen contractes de programació per a desenvolupar un programari únic a mida per a una empresa en particular, o se centren en la configuració i personalització dels paquets de grans fabricants com SAP o Oracle.

També hi ha organitzacions sense ànim de lucre que es dediquen a la creació de programari, en aquest grup s'inclouen la Free Software Foundation, GNU (GNU/Linux) o la Fundació Mozilla (creadora del navegador Firefox entre altres populars productes). Al costat d'aquestes hi ha d'altres organitzacions dedicades a l'estandardització del programari com la W3C o la IETF que desenvolupen i promouen estàndards de programari de manera que la major part del programari pugui interaccionar a través d'estàndards com per exemple XML, HTML, HTTP o FTP.

Programari en automòbils de sèrie 
A finals del segle vint l'electrònica incorporada als cotxes de sèrie era escassa i es limitava a un sistema d'encesa electrònica. Actualment el conjunt de maquinari i programari dels automòbils de carrer representa un cinquanta per cent del preu total de cada vehicle.

Sense entrar en explicacions detallades dels diversos sistemes emprats, hi ha dues funcions que exigeixen un programari específic: l'encesa i la injecció de combustible.

En els motors de gasolina el moment d'ignició és molt important. Per a cada velocitat de gir, en funció de la posició del pedal d'acceleració hi ha un programari de defineix el punt en què les bugies han de produir la guspira. En funció de les prestacions desitjades hi ha diverses possibilitats que es poden determinar de forma automàtica un cop escollir el mode amb un selector (són típiques les opcions normal, esport i condicions de baixa tracció). Pel que fa al programari de l'encesa es parla de la “topografia de l'encesa”.
Un cas similar és el de la “topografia de la injecció”, concepte vàlid per a motors de gasolina amb injecció i motors dièsel.

Referències

Vegeu també 
 Priorització de requeriments