From Wikipedia, the free encyclopedia
L'enginyeria de programari és la disciplina o àrea de la informàtica que ofereix mètodes i tècniques per a desenvolupar i mantenir un programari de qualitat. La creació del programari és un procés intrínsecament creatiu, l'enginyeria de programari pretén sistematitzar aquest procés amb la finalitat d'acotar el risc del fracàs en la consecució de l'objectiu creatiu i ho fa per mitjà de diverses tècniques que s'han demostrat adequades a partir de l'experiència prèvia. Aquesta enginyeria tracta amb àrees molt diverses de la informàtica i de les ciències de la computació, com ara la construcció de compiladors i els sistemes operatius; utilitza totes les fases del cicle de vida del desenvolupament de qualsevol tipus de sistemes d'informació i és aplicable a infinitat d'àrees: negocis, investigació científica, medicina, logística, banca, control del trànsit, meteorologia, dret, Internet…
El terme enginyeria de programari va ser popularitzat l'any 1968 a la NATO Software Engineering Conference -que va tenir lloc a Garmisch, Alemanya- pel seu president F.L. Bauer, i s'ha fet servir àmpliament des de llavors. La disciplina d'enginyeria de programari comprèn coneixements, eines, i mètodes per a la definició de requisits de programari, i la realització de tasques de disseny de programari, programació de computadores, disseny d'interfícies d'usuari, proves de programari, i manteniment de programari.[1]
L'enginyeria de programari també es basa en coneixements de ciències de la computació, enginyeria de la computació, gestió, matemàtiques, gestió de projectes, gestió de la qualitat, ergonomia de programari, i enginyeria de sistemes.[1]
El terme enginyeria de programari ha generat certa polèmica, ja que és discutible que el desenvolupament de programes informàtics sigui més un art que una ciència,[2] i que tractar d'imposar disciplines de l'enginyeria sobre un tipus d'art, com el que representa una bona pràctica a la creació de programari, és un exercici inútil.[3]
L'Institut d'Enginyers Elèctrics i Electrònics defineix "Enginnering programari" com l'aplicació d'un enfocament sistemàtic, disciplinat, un enfocament quantificable al desenvolupament, operació i manteniment del programari, i l'estudi d'aquests enfocaments, és a dir, l'aplicació d'Enginyeria del programari.[4]
L'enginyeria de software va aparèixer per primera vegada el 1968 a la Conferència d'Enginyeria de Software de l'OTAN i estava destinada a suscitar la reflexió sobre l'actual "crisi del programari" en aquell moment.[5] [6] Des d'aleshores, ha continuat com a professió i el su camp d'acció és dissenyar, implementar i millorar el programari que és de més qualitat, més accessible, més fàcil de mantenir i més ràpid de desenvolupar. Atès que el camp és encara relativament jove en comparació amb els seus germans dels camps de l'enginyeria, hi ha molt debat sobre què és realment l'enginyeria de programari, i si s'ajusta a la definició clàssica de l'enginyeria.
Tot i que és discutible l'impacte que ha tingut durant el desenvolupament de programes efectius als últims 40 anys,[7][8] el futur del camp sembla brillant d'acord amb Money Magazine i Salary.com que van qualificar l'"enginyeria de programari" com el millor treball als Estats Units en 2006.[9]
Quan els primers equips digitals moderns van aparèixer a la dècada del 1940,[10] les instruccions per fer-los funcionar s'implementaven directament a la màquina. Els professionals es van adonar ràpidament que aquest disseny no era flexible i se'ls va acudir l'"arquitectura de programa emmagatzemat", o l'arquitectura de Von Neumann. Així, la primera divisió entre "maquinari" i "programari", va començar amb abstracció, i es va fer servir per tractar la complexitat de la computació.
Els llenguatges de programació van començar a aparèixer a la dècada del 1950 i això és també un altre pas important a l'abstracció. Els principals idiomes com el Fortran, ALGOL, i Cobol van ser alliberats a finals del 1950 per fer front a científics, algorísmica, i els problemes de negocis. E.W. Dijkstra va escriure el seu treball seminal, "Go-to statement considered harmful",[11] el 1968 i David Parnas va introduir el concepte clau de la modularitat i ocultació d'informació el 1972[12] per ajudar els programadors a bregar amb la complexitat, cada vegada més gran, dels sistemes informàtics. Un sistema de programari per a la gestió del maquinari anomenat sistema operatiu també va ser introduït, en particular per Unix, el 1969. El 1967, el Simula va introduir el llenguatge de programació orientada a objectes paradigma.
Aquests avenços en el programari es van trobar amb més avenços en el maquinari. A la dècada del 1970, el microordinadors es va introduir, per la qual cosa va ser econòmic pels aficionats d'obtenir un ordinador i es comença a escriure programari per a aquest motiu. Això, al seu torn, va conduir al, ara famós, ordinador personal (PC) i Microsoft Windows. El Desenvolupament de Software Cicle de Vida o SDLC també comencen a aparèixer com un consens per a la construcció centralitzada del programari als anys 1980. A final del 1970 i principis del 1980, es va veure la introducció de diversos nous Simula inspirats en els llenguatges de programació orientada, incloent-hi C, Smalltalk, i Objective C.
Els codis oberts de programari van començar a aparèixer als anys 90 en forma de Linux, i altres programaris van presentar el "basar" o l'estil descentralitzat de la construcció del programari.[13] Després d'Internet i el World Wide Web va arribar, a mitjans dels 90, el canvi de l'enginyeria de programari, una vegada més. Els Sistemes distribuïts van guanyar influència com una forma de disseny de sistemes, i el llenguatge Java de programació es va introduir amb la seva pròpia màquina virtual com un pas més en l'abstracció. Programadors col·laboradors i van escriure el Manifest àgil, que va afavorir els processos més lleugers per crear una forma més econòmica i oportuna de programari.
L'enginyeria de programari afecta l'economia i les societats de diverses maneres. A més a més, amb la indústria del llenguatge s'estan trobant cada vegada més camps d'aplicació a escala global.
L'enginyeria de programari canvia la cultura del món a causa de l'ús generalitzat de l'ordinador. El correu electrònic (e-mail), la WWW i la missatgeria instantània permeten a la gent interaccionar de noves maneres. El programari baixa el cost i millora la qualitat dels serveis de salut, els departaments de bombers, les dependències governamentals i altres serveis socials. Els projectes reeixits on s'han utilitzat mètodes d'enginyeria de programari inclouen GNU / Linux, el programa del transbordador espacial, els caixers automàtics i molts altres.
Un objectiu de dècades ha estat trobar processos i metodologies, que fossin sistemàtics, predictibles i repetibles, per tal de millorar la productivitat en el desenvolupament i la qualitat del producte software.
L'enginyeria de programari requereix dur a terme nombroses tasques, dins d'etapes com les següents:
Extreure els requisits d'un producte de programari és la primera etapa per crear-lo. Mentre que els clients pensen que ells saben allò que el programari ha de fer, es requereix habilitat i d'experiència en l'enginyeria de programari per a reconèixer requisits incomplets, ambigus o contradictoris. El resultat de l'anàlisi de requisits amb el client es plasma en el document ERS, Especificació de Requisits del sistema. Així mateix, es defineix un diagrama d'Entitat/Relació, en què es plasmen les principals entitats que participaran en el desenvolupament del programari.
La captura, anàlisi i especificació de requisits és una part crucial; d'aquesta etapa depèn en gran manera l'assoliment dels objectius finals. S'han ideat models i diversos processos de treball per a aquestes finalitats. Tot i que encara no està formalitzada, ja es parla de l'anàlisi de requisits.
L'IEEE Std 830-1998 normalitza la creació de les especificacions de requisits de Programari (Software Requirements Specification).
L'especificació de requisits descriu el comportament esperat en el programari un cop desenvolupat. Gran part de l'èxit d'un projecte de programari radicarà en la identificació de les necessitats del negoci (definides pel client o el director de producte), així com la interacció amb els usuaris funcionals per a la recollida, classificació, identificació, priorització i especificació dels requisits del programari.
D'entre les tècniques utilitzades per a l'especificació de requisits se'n troben:
La integració d'infraestructura, desenvolupament d'aplicacions, bases de dades i eines gerencials, requereixen capacitat i lideratge per poder ser conceptualizats i projectats en un futur, solucionant els problemes d'avui. El rol en el qual es deleguen totes aquestes activitats és el de l'arquitecte.
L'arquitecte del software és la persona que afegeix valor als processos de negoci gràcies a la seva aportació important de solucions tecnològiques. L'Arquitectura de Sistemes en general, és una activitat de planificació, ja sigui a nivell d'infraestructures de xarxa i hardware, o de software. L'arquitectura de software consisteix en el disseny de components d'una aplicació (entitats del negoci), generalment utilitzant patrons d'arquitectura. El disseny arquitectònic ha de permetre visualitzar la interacció entre les entitats del negoci i a més pot ser validat, per exemple, mitjançant els diagrames de seqüència.
Un disseny arquitectònic descriu en general com es construirà una aplicació de software. Per això es documenta utilitzant diagrames, per exemple:
Els dos primers són els mínims necessaris per descriure l'arquitectura d'un projecte, i, depenent de l'abast, complexitat i necessitats del projecte, els arquitectes trien quins diagrames elaboren.
Reduir un disseny a codi pot ser la part més òbvia del treball d'enginyeria de programari, però no necessàriament és la que demana més treball i ni la més complicada. La complexitat i la durada d'aquesta etapa està íntimament relacionada amb el o els llenguatges de programació utilitzats, així com amb el disseny prèviament realitzat.
Consisteix a comprovar que el programari realitzi correctament les tasques indicades en l'especificació del problema. Una tècnica de prova és provar per separat cada mòdul del programari, i després provar-lo de forma integral, per així arribar a l'objectiu.
Es considera una bona pràctica que les proves siguin efectuades per algú que no sigui el desenvolupador que el va programar, idealment una àrea de proves, sense perjudicis perquè el programador faci les seves pròpies proves.
En general, hi ha dues grans formes d'organitzar una àrea de proves, la primera és que estigui formada per personal inexpert i que desconegui el tema de proves, d'aquesta manera s'avalua que la documentació lliurada sigui de qualitat, que els processos descrits són tan clars que qualsevol pot entendre'ls i el programari fa les coses tal com estan descrites. El segon enfocament és tenir una àrea de proves conformada per programadors amb experiència, persones que saben sense més indicacions en quines condicions pot fallar una aplicació i que poden posar atenció en detalls que personal inexpert no consideraria.
Tot el que està relacionat amb la documentació del propi desenvolupament del programari i de la gestió del projecte, passant per models (UML), diagrames, proves, manuals d'usuari, manuals tècnics, etc.; tot amb el propòsit d'eventuals correccions, usabilitat, manteniment futur i ampliacions al sistema. Aquesta part és força important, ja que des de sempre es pensa el producte des de zero, i el client final no arribarà a entendre-ho tan bé com nosaltres. Per això cal documentar tot el material existent. Proves, manuals, instruccions específiques...tot en general, per tal que el client sempre sigui capaç de resoldre ell tot sol un possible problema de conceptes.
Mantenir i millorar el software per arreglar errors i aplicar nous requisits. Això pot requerir més temps que fins i tot el mateix desenvolupament inicial del software. Al voltant d'un 60% de tota l'enginyeria del software té a veure amb el manteniment. Una petita part del treball consisteix a solucionar errors, o bugs. La major part consisteix a estendre el sistema per fer noves aplicacions. De manera similar, al voltant del 60% de tota l'enginyeria civil, arquitectura i treballs de construcció és donar manteniment.
L'enginyeria de programari té diversos models, paradigmes o filosofies de desenvolupament en els quals es pot donar suport per a la realització de programari, dels quals podem destacar aquests per ser els més utilitzats i els més complets:
L'enginyeria de programari té a veure amb diversos camps en diferents formes:
El lliurament de programari és la distribució, ja sigui pública o privada, d'un producte nou o millorat en forma de programa per a ordinador. Cada cop que es canvia un programa o sistema, els enginyers informàtics i les empreses que realitzen el treball decideixen com canviaran o lliuraran aquests productes. Les actualitzacions de programari són un mètode de distribució de canvis, així com les descàrregues i els discos compactes.
Els requisits legals per a la concessió de llicències o certificació d'enginyers de programari professionals varien al voltant del món. Al Regne Unit, la British Computer Society autoritza enginyers de programari i membres de la societat a convertir-se en Enginyers Col·legiats (CEng), mentre que en algunes zones del Canadà, com Alberta, Colúmbia Britànica, Ontario,[14] i el Quebec, els enginyers de programari poden mantenir la designació d'Enginyer Professional (P. Eng) i/o la designació de Sistemes d'Informació Professional (ISP). Al Canadà, hi ha un requisit legal per obtenir el P. Eng quan es vol utilitzar el títol de "enginyer" o en la pràctica d'"enginyeria de programari".
Als Estats Units, a partir del 2013, hi ha un examen d'enginyer professional NCEES d'Enginyeria de Software, que permet els enginyers de programari d'obtenir la llicència i ser reconeguts.[15] La llicència obligatòria està actualment sent objecte d'un intens debat, i percebuda com a polèmica. En algunes parts dels EUA com Texas, l'ús del terme d'Enginyer està regulat per la llei i reserva el seu ús només per a persones que tenen una llicència d'enginyer professional. L'IEEE informa que no es requereix la llicència d'enginyer professional llevat que l'individu treballi per al públic en matèries en què la salut dels altres podria estar en risc, o si l'enginyer no compleix amb els requerits estàndards de l'estat en particular. Les llicències d'enginyer professionals són específiques per a l'estat que les ha atorgat, i han de ser represes amb regularitat.
El IEEE Computer Society i l'ACM, les dues principals organitzacions professionals de l'enginyeria de programari, publiquen guies per a la professió de l'enginyeria de programari. L'IEEE Guia per al Cos d'Enginyeria del Software de coneixement - 2004 Versió, o SWEBOK, defineix l'àmbit i descriu el coneixement que la IEEE espera que un enginyer de programari ha de tenir. L'IEEE també promulga una "Codi Ètic d'Enginyeria de Programari".[16]
El 2004, l'U. S. Bureau of Labor Statistics comptà 760.840 enginyer de programaris ocupats als EUA i, al mateix període, hi va haver uns 1,4 milions de professionals empleats en els EUA en totes les disciplines d'enginyeria combinades.[17] A causa de la seva relativa novetat com un camp d'estudi, la formació acadèmica a l'enginyeria de programari sovint s'ensenya com a part d'un pla d'estudis d'informàtica, i com a resultat, la majoria dels enginyers de programari tenen títols de ciències de la computació.[18]
La majoria d'enginyers de programari treballen com a empleats o contractistes. Els enginyers de programari treballen amb empreses, organismes governamentals (civils o militars), i organitzacions no lucratives. Alguns enginyers de programari treballen per a si mateixos, com a independents. Algunes organitzacions compten amb especialistes per dur a terme cada una de les tasques del procés de desenvolupament de programari; altres organitzacions requereixen els enginyers de programari per a fer-ne només algunes, o totes elles. En els grans projectes, les persones poden especialitzar-se en una sola funció. En els projectes petits, les persones poden omplir diversos rols o tots al mateix temps. Algunes especialitzacions són: la indústria (analistes, arquitectes, desenvolupadors, emprovadors, suport tècnic, administradors...) i a l'acadèmia (educadors, investigadors).
Hi ha un debat considerable sobre les perspectives futures d'ocupació pels enginyers de programari i altres IT professionals. Per exemple: un mercat de futur en línia anomenat el "Futur de la TI: ITJOBS llocs de treball als Estats Units"[19] intenta respondre si hi haurà més llocs de treball de TI, incloent-hi enginyers de programari, l'any 2012 dels que n'hi havia el 2002.
La certificació professional dels enginyers de programari és un tema polèmic, amb algunes organitzacions professionals que hi donen suport,[20] i altres que afirmen que no és apropiat donat l'actual nivell de maduresa en la professió.[21] Alguns ho veuen com una eina per millorar la pràctica professional; "L'únic propòsit dels enginyers de programari de llicència és per protegir el públic".[22]
L'ACM tenia un programa de certificació professional a la dècada de 1980 que es va suspendre per la manca d'interès. L'ACM ha examinat la possibilitat de la certificació professional dels enginyers de programari a finals del 1990, però finalment es va decidir que aquesta certificació no era l'adequada per a la pràctica professional de l'enginyeria industrial de programari.[21] A 2006 l'IEEE havia certificat a més de 575 professionals de programari.[20] El Software Engineering Institute ofereix certificació en temes específics com la seguretat, la millora de processos i arquitectura de programari.[23]
La majoria de certificacions en els programes de la tecnologia IT estan orientades a tecnologies específiques, i són gestionades pels venedors d'aquestes tecnologies.[24] Aquests programes de certificació s'adapten a les institucions que donen feina a persones que utilitzen aquestes tecnologies.
En un projecte la responsabilitat serà compartida per tots els integrants que el conformen, encara que no serà repartida en parts iguals. El programari demana una clara distribució de la responsabilitat entre els diferents rols que es donen en el procés de producció. L'enginyer de programari té una responsabilitat moral i legal limitada a les conseqüències directes.
L'enginyeria de programari es podria dividir en:
L'enginyeria de programari està relacionada amb les disciplines de ciències de la computació, gestió de projectes i enginyeria de sistemes.
Gestió de projectes
Enginyeria de sistemes
L'enginyeria de programari pot ser dividit en deu subdisciplines, que són:[4]
El coneixement de la programació és el principal requisit per a convertir-se en un enginyer de programari, però no és suficient. Molts enginyers de programari tenen títols en informàtica a causa de la manca de programes d'enginyeria de programari a l'educació superior. Tanmateix, això ha començat a canviar amb la introducció de noves titulacions d'enginyeria de software, especialment en l'educació de postgrau. Un programa internacional per a les titulacions d'enginyeria de programari de pregrau va ser definit pel CCSE.
Steve McConnell opina que pel fet que la majoria de les universitats ensenyin ciències de la computació en lloc d'enginyeria de programari, hi ha una veritable escassetat d'enginyers de programari.[25] El 2004, el IEEE Computer Society va produir el SWEBOK, que ha esdevingut un estàndard ISO que descriu el cos de coneixement cobert per un enginyer de programari.
La Comissió Europea al programa Erasmus Mundus ofereix una màster europeu, anomenat Màster Europeu en Enginyeria de Programari per als estudiants d'Europa i també fora d'Europa.[26] Aquest és un programa conjunt (doble titulació) amb la participació de quatre universitats a Europa.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.