Enginyer de programari treballant en el desenvolupament deMediaWiki.
L'enginyeria de programari és la disciplina o àrea de lainformàtica que ofereix mètodes i tècniques per a desenvolupar i mantenir unprogramari 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 lesciències de la computació, com ara la construcció decompiladors i elssistemes 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 deltrànsit,meteorologia,dret,Internet…
El termeenginyeria de programari va ser popularitzat l'any 1968 a laNATO Software Engineering Conference -que va tenir lloc aGarmisch,Alemanya- pel seu presidentF.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ó decomputadores, disseny d'interfícies d'usuari,proves de programari, imanteniment de programari.[1]
El termeenginyeria de programari ha generat certa polèmica, ja que és discutible que el desenvolupament de programes informàtics sigui més unart que unaciè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 delprogramari, 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 aprofessió 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 ambMoney Magazine iSalary.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ó.
Elsllenguatges 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 elFortran,ALGOL, iCobol 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 iDavid Parnas va introduir el concepte clau de lamodularitat iocultació d'informació el 1972[12] per ajudar els programadors a bregar amb la complexitat, cada vegada més gran, delssistemes informàtics. Un sistema de programari per a la gestió del maquinari anomenatsistema operatiu també va ser introduït, en particular perUnix, el 1969. El 1967, elSimula va introduir el llenguatge deprogramació orientada a objectes paradigma.
Aquests avenços en elprogramari es van trobar amb més avenços en elmaquinari. A la dècada del 1970, elmicroordinadors es va introduir, per la qual cosa va ser econòmic pels aficionats d'obtenir unordinador i es comença a escriureprogramari per a aquest motiu. Això, al seu torn, va conduir al, ara famós,ordinador personal (PC) iMicrosoft Windows. ElDesenvolupament 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-hiC,Smalltalk, iObjective C.
Elscodis oberts de programari van començar a aparèixer als anys 90 en forma deLinux, i altres programaris van presentar el "basar" o l'estil descentralitzat de la construcció del programari.[13] Després d'Internet i elWorld Wide Web va arribar, a mitjans dels 90, el canvi de l'enginyeria de programari, una vegada més. ElsSistemes distribuïts van guanyar influència com una forma de disseny de sistemes, i el llenguatgeJava de programació es va introduir amb la seva pròpiamàquina virtual com un pas més enl'abstracció. Programadors col·laboradors i van escriure elManifest à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 laindústria del llenguatge s'estan trobant cada vegada més camps d'aplicació a escala global.
L'enginyeria de programari canvia lacultura del món a causa de l'ús generalitzat de l'ordinador. Elcorreu electrònic (e-mail), laWWW i lamissatgeria 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 inclouenGNU / Linux, el programa deltransbordador espacial, elscaixers automàtics i molts altres.
Un objectiu de dècades ha estat trobar processos imetodologies, que fossin sistemàtics, predictibles i repetibles, per tal de millorar la productivitat en el desenvolupament i la qualitat del producte software.
Extreure elsrequisits 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, cal 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 arreglarerrors 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, obugs. 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:
Matemàtiques: Els programes tenen moltes propietats matemàtiques. Per exemple: la correcció i la complexitat de molts algorismes són conceptes matemàtics que poden ser rigorosament provats. L'ús de les matemàtiques a l'EP és anomenatmètodes formals.
Creació: Els programes són construïts en una seqüència de passos. El fet de definir pròpiament i dur a terme aquests passos, com en una línia d'acoblament, és necessari per millorar la productivitat dels desenvolupadors i la qualitat final dels programes. Aquest punt de vista inspira els diferents processos i metodologies que trobem a l'EP.
Gestió de Projectes: El programari comercial (i la majoria del no comercial) requereix gestió de projectes. Hi ha pressupostos i establiment de temps, gent per liderar, recursos (espai d'oficina, ordinadors) per adquirir... Tot això encaixa apropiadament amb la visió de la Gestió de Projectes.
Art: Els programes contenen molts elements artístics. Les interfícies d'usuari, la codificació, etc. Fins i tot, la decisió per un nom d'una variable o una classe.
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. AlRegne Unit, laBritish Computer Society autoritza enginyers de programari i membres de la societat a convertir-se en Enginyers Col·legiats (CEng), mentre que en algunes zones delCanadà, comAlberta,Colúmbia Britànica,Ontario,[14] i elQuebec, 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 elP. Eng quan es vol utilitzar el títol de "enginyer" o en la pràctica d'"enginyeria de programari".
AlsEstats 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 comTexas, 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 cal 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.
ElIEEE 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'IEEEGuia per al Cos d'Enginyeria del Software de coneixement - 2004 Versió, oSWEBOK, 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.840enginyer de programaris ocupats alsEUA 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 aindependents. Algunes organitzacions compten amb especialistes per dur a terme cada una de les tasques del procés dedesenvolupament 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 altresIT 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 el2002.
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 laprà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]ElSoftware Engineering Institute ofereix certificació en temes específics com la seguretat, la millora de processos iarquitectura de programari.[23]
La majoria de certificacions en els programes de la tecnologiaIT 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.
Disciplines relacionades amb l'enginyeria del programari
L'enginyeria de programari està relacionada amb les disciplines deciències de la computació, gestió de projectes i enginyeria de sistemes.
Informàtica
L'enginyeria de programari és considerada un subcamp de la informàtica per molts acadèmics. Molts dels fonaments de l'enginyeria de programari provenen de la informàtica.
Gestió de projectes
La construcció d'un sistema de programari es considera, generalment, com un projecte i pren prestats molts principis del camp de la gestió de projectes.
Enginyeria de sistemes
Els enginyers de sistemes s'han ocupat de la complexitat dels sistemes durant moltes dècades i el seu coneixement s'aplica a molts problemes d'enginyeria de programari.
Manteniment de programari: Els sistemes de programari sovint tenen problemes i necessiten millores després d'un llarg temps des de la primera prova. En aquest subcamp es tracten aquests problemes.
Gestió de configuració de programari: Com que els sistemes de programari són molt complexos, la seva configuració (com ara el control de versions i control de codi font) han de ser gestionats en un mètode normalitzat i estructurat.
Gestió d'enginyeria de programari: La gestió dels sistemes de programari s'inspira en gran manera a partir degestió de projectes, però hi ha matisos trobats en el programari que no es veu en les disciplines de gestió.
Procés dedesenvolupament de programari: El procés de construcció de programari és objecte d'acalorats debats entre els professionals sobre els principals paradigmes i l'agilitat del desenvolupament de programari o el model en cascada.
Les eines d'enginyeria de programari, vegeuEines CASE.
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 eninformà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 pelCCSE.
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, elIEEE Computer Society va produir elSWEBOK, que ha esdevingut un estàndardISO que descriu el cos de coneixement cobert per un enginyer de programari.
↑Randell, Brian. «La 1968/69 de l'OTAN d'Enginyeria de Programari Informes». Brian Randell Pàgina d'inici. L'Escola de les Ciències de la Computació, Universitat de Newcastle, 10-08-2001. «La idea de la primera Conferència d'Enginyeria de Software de l'OTAN i, en particular la d'adoptar el terme llavors pràcticament desconegut "enginyeria de programari" com el seu (deliberadament provocador) del títol, crec que va venir originalment pel professor Fritz Bauer .»
↑[finalhttp://alistair.cockburn.us/The d'enginyeria de programari i l'inici dels jocs de cooperació econòmic-El final de l'enginyeria de programari i l'inici dels jocs de cooperació econòmica]
↑21,021,1«A Resum de la posició de l'ACM d'Enginyeria del Software com a professió llicència Enginyeria». Association for Computing Machinery (ACM), 17-07-2000. Arxivat de l'original el 17 d'abril 2007. «En la seva reunió de maig de 2000, el Consell va concloure així mateix que el marc d'un enginyer professional, originalment desenvolupat per als enginyers civils, no coincideix amb la pràctica industrial professional de l'enginyeria de programari. La concessió de llicències pràctiques donaria falses seguretats de competència, fins i tot, si el cos de coneixementss'està madura, i s'oposen a molts dels enginyers de software més qualificat d'obtenir la llicència.»
↑McConnell, Steve (10 de juliol de 2003.Professionals de desenvolupament de programari: programes més breus, Productes de Qualitat Superior, projectes més reeixits, Carreras millorada.ISBN 978-0-321-19367-4