Imatge del sistema operatiu per a dispositiusmòbils Android.
Elprogramari (software, enanglès) és el conjunt dels programes informàtics, procediments i documentació que fan alguna tasca en unordinador. Comprèn el conjunt sistemàtic dels programes d'explotació i dels programes informàtics que serveixen per a aplicacions determinades.[1] El terme inclou aplicacions com elsprocessadors de text, programari de sistema com elsistema operatiu, que fa d'interfície entre elmaquinari i les aplicacions, i finalment elprogramari intermediari, que controla i coordinasistemes distribuïts.
Moltes vegades, el terme és usat per contraposició amaquinari. 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.[2] A diferència del maquinari, el programari "no es pot tocar".[3]
Sovint es considera que la història dels programes informàtics es remunta fins al primererror de programari, el 1946. Atès que cada vegada hi ha més programes que passen a formar part del món delmicroprogramari i elmaquinari esdevé cada vegada més petit, més barat i més ràpid a causa de lallei 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 delsenginyers que creen elscircuits impresos.
Fins a aquest moment, el programari eraempaquetat juntament amb el maquinari pelsOEMs (fabricants d'equips originals), comData General,Digital Equipment o IBM. En aquell moment, quan un client comprava unminiordinador, 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 unactiu (de manera similar a alguns casos de música popular d'avui dia). Quan Data General va presentar el seu miniordinador de 16 bits anomenatData General Nova, una companyia anomenada Digidyne va voler utilitzar el seusistema operatiu RDOS (Real-time Disk Operating System en el seu propi clon del maquinari. Data General es van negar allicenciar 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 anomenatDigidyne 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.[7] Poc després, IBM publicava elcodi font del seusistema operatiu de disc de manera gratuïta, i va néixerMicrosoft. Data General va acabar sent absorbida perEMC Corporation en ser incapaç de suportar les pèrdues causades pels honoraris delsadvocats. La decisió de la Cort Suprema va permetre valorar el programari i també comprarpatents 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 iApple van ser capaces de treure profit dels productessoft. 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 lespatents troll.
Amb les especificacions deprogramari 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àndardsde facto, com per exemple DOS per als sistemes operatius, però també diferents sistemes propietaris detractament text ifulls de càlcul. Seguint un patró de similar, els mètodes de desenvolupament propietaris van esdevenir metodologies estàndards de desenvolupament de programari.
La definició més formal de programari és la següent:
«
És el conjunt dels programes de computació, procediments, regles, documentació i dades associades que formen part de les operacions d'un sistema de còmput.
En aquesta definició, el concepte de programari va més enllà dels programes de computació en els seus diferents estats:codi font,binari oexecutable; també la seva documentació, les dades a processar i la informació d'usuari forma part delsoftware: é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. Eninformàtica i en l'enginyeria de programari, el programari és tota lainformació processada pelssistemes informàtics: programes i dades. El concepte de llegir diferents seqüències d'instruccions des de lamemòria d'un dispositiu per a controlar els càlculs va ser introduït perCharles Babbage com una part de la sevamàquina diferencial. La teoria que forma la base de la major part del programari modern va ser proposada per primera vegada perAlan Turing en el seu assaig del 1936,Els nombres computables, amb una aplicació al problema de la decisió.
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:
Elprogramari del sistema proporciona les funcions bàsiques per a la utilització de l'ordinador, i pot ser dividit ensistema 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.
S'encarrega de gestionar la gran varietat demaquinari 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 alsusuaris i en altres programaris sense que s'hagin de preocupar sobre com treballa cada maquinari particular. El seu objectiu és desvincular elprogramador 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 oteclats i també possibilitar la compartició de recursos com lamemòria i el temps d'utilització delprocessador d'una manera segura i estable. Alguns exemples són -Microsoft Windows,Linux iMac OS X.
És el conjunt d'eines que permeten alprogramador desenvolupar programes informàtics, utilitzant diferents alternatives illenguatges de programació, d'una manera pràctica. Inclou entre altres:
Elsentorns integrats de desenvolupament (o IDE,acrònim deIntegrated development environment) agrupen les eines anteriors, normalment en un entorn gràfic, de manera que el programador no necessiti introduir múltiplesordres per, entre altres coses, compilar, interpretar o depurar. Aquestes eines de programació compten habitualment amb una avançadainterfície gràfica d'usuari (o GUI, deGraphical user interface).
Elprogramari 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 iautomatització industrial
Per introduir ordres a la computadora hem d'usar un llenguatge específic conegut com allenguatge màquina, que consisteix en llargues cadenes de nombresbinaris (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'anomenarenllenguatge 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 necessaricompilar-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 llenguatgesinterpretats com a C#, Java oJavaScript.
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'unsistema 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'unaequació 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 acomplir 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 laprogramació 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.
Possible model a seguir en la creació d'un programari.
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.
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.
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…).
Firefox, un dels programes més coneguts de programari lliure.
El programari lliure (en anglèsfree 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 laFree 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 alcodi 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 alcodi font és un requisit inherent.
Com que aquest tipus de programari es pot redistribuir lliurement, en general es pot trobar gratuïtament aInternet, o a un cost baix si l'adquirim per mitjà d'altres suports (CD-Rom oDVD 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ó.
El programari de propietat ono 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 seucodi font no està disponible, o només sota restriccions. Les restriccions derivades delsdrets 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.
Elprogramari gratuït ("freeware" en anglès) és un programari que es distribueix sense cap cost. De vegades s'inclou elcodi 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.
Elprogramari de prova oshareware és un tipus deprogramari 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.
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.
Programari de navegació ambGPS per a mòbils amb el sistema operatiuAndroid.
Laindú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 deMicrosoft, va ser la persona més rica del món el 2009 en gran gràcies a les vendes deMicrosoft Windows iMicrosoft Office, dos productes de programari. El mateix passa ambLarry Ellison, que obté en gran part els seus guanys a través del seu programari de base de dades anomenatOracle.
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 elssistemes operatius,programari intermediari (middleware) i bases de dades, i el creen empreses comMicrosoft,IBM,Sybase,EMC,Oracle oVMware. 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 oInfor. El programari de seguretat està fet per empreses comSymantec,Comodo,Trend Micro oKaspersky.
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 comQualcomm o Cybervision fan programari per a empreses detelecomunicacions. 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 laFree Software Foundation,GNU (GNU/Linux) o laFundació Mozilla (creadora del navegadorFirefox entre altres populars productes). Al costat d'aquestes hi ha d'altres organitzacions dedicades a l'estandardització del programari com laW3C o laIETF 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 exempleXML,HTML,HTTP oFTP.
A finals delsegle vint l'electrònica incorporada alscotxes 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 lainjecció de combustible.
En elsmotors 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è lesbugies 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 escollit 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ó imotors dièsel.
↑Hally, Mike (2005:79).Electronic brains/Stories from the dawn of the computer age. British Broadcasting Corporation and Granta Books, London.ISBN 1-86207-663-4
↑Turing, A.M. «On Computable Numbers, with an Application to the Entscheidungsproblem». Proceedings of the London Mathematical Society, 42, 1936, p. 230–65.DOI:10.1112/plms/s2-42.1.230.ISSN:0024-6115. (iTuring, A.M. «On Computable Numbers, with an Application to the Entscheidungsproblem: A correction». Proceedings of the London Mathematical Society, 43, 1938, p. 544–6.DOI:10.1112/plms/s2-43.6.544.)