Salta el contingut
 

Enginyeria del programari

Autor: Joan Puigcerver Ibáñez

Correu electrònic: j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Enginyeria del programari

Diferents punts de vista del desenvolupament de programari

Autor desconegut

Figura 1. Diferents punts de vista del desenvolupament de programari

Què és l'enginyeria del programari?

La enginyeria del programari és una disciplina que engloba eines, tècniques, recomanacions i mètodes que s'utilitzen en la creació d'una aplicació/sistema/aplicatiu/plataforma informàtica o, més genèricament, al desenvolupament d'un projecte de programari que resol un problema o supleix una necessitat.

El desenvolupament d'una aplicació s'entén com un intercanvi comercial d'un producte (el programari) entre un desenvolupador i un client, podent ambdues parts ser empreses, organitzacions o persones físiques i ser-ne una o diverses.

Aquesta disciplina té la codificació o programació com a pilar fonamental, però inclou altres tasques abans i després que són tant o més importants que la codificació. L'enginyer de programari, per tant, s'encarrega de tota la gestió del projecte perquè es puga desenvolupar a temps i forma, és a dir, en un termini determinat i amb pressupost i requisits previstos.

L'enginyeria del programari inclou:

  • L'anàlisi prèvia de la situació (què i quan ho farem).
  • El disseny del projecte (com ho farem).
  • El desenvolupament del programari.
  • Les proves necessàries per comprovar el seu correcte funcionament.
  • La documentació (què s'ha fet, com s'utilitza).
  • La implantació o desplegament del sistema (posada en marxa).

Per què és important?

El terme Crisi del Programari es va definir a principis dels anys 70, quan la planificació d'un projecte programari era pràcticament inexistent. Seguien un procés de desenvolupament força artesanal, sense una metodologia o un camí que cal seguir per al seu desenvolupament.

L'anàlisi prèvia a la codificació abastava el 8% del temps total de desenvolupament de programari. El 80% dels errors es produïen en aquesta fase, de manera que s'incrementava el cost de correcció d'errors a mesura evolucionava el projecte. Amb aquests indicadors estava clar que alguna cosa estava fallant i que el procés de desenvolupament de programari necessitava un canvi radical.

L'Informe CHAOS2 de Standish sobre l'èxit dels projectes de programari va concloure a 2015 que:

  • 36% van tenir èxit: Es van lliurar a temps, en pressupost, amb les característiques requerides.
  • 45% van ser modificats: Amb retard, per sobre del pressupost, i/o amb menys característiques.
  • 19% van fracassar: Es van cancel·lar abans de la seva finalització o es van lliurar i mai no es van utilitzar.

Cada any, des del 1994, el Grup Standish crea una llista de 10 atributs i el seu pes relatiu que ells anomenen els factors d'èxit. Els tres primers per al 2018 són:

  • Latència de decisió: Les decisions s'han de prendre com més prompte millor.
  • Abast mínim: A més grandària del projecte, major índex de fracàs.
  • Responsables del projecte: Millor una única persona que no una Junta Directiva, per exemple.

Estadístiques informe CHAOS 2015

Standish Group 2015 Chaos Report

Figura 2. Estadístiques informe CHAOS 2015

Cicle de vida del programari

Fases més comunes

Les fases del desenvolupament de programari, conegudes com a cicle de vida del programari, representen les etapes per les quals ha de passar una aplicació per ser lliurada al destinatari amb totes les garanties.

Cicle de vida del programari

Autor desconegut

Figura 3. Cicle de vida del programari

Anàlisi

Descripció Perfil professional Què es genera?
Descripció del problema. Què faré? - Cap de projecte - Especificació dels requisits
- Arquitecte programari - Prototips
- Consultor - Diagrama de casos d'ús

L'anàlisi d'una aplicació pretén determinar les necessitats que ha de cobrir. Aquesta fase es realitza en contacte directe amb el client. S'especifiquen els requisits funcionals i no funcionals del projecte.

L'obtenció de requisits es plasma en aquests documents:

  • Una especificació dels requisites del sistema, amb els requisits funcionals i no funcionals.
  • Un o diversos prototips, que poden ser des d'un esbós en paper fins a una versió molt bàsica de l' aplicatiu. També existeixen eines de prototipatge, que normalment utilitzen dissenyadors.

Pel que fa als requisits, s'agrupen en:

  • Funcionals: descriuen amb detall la funció del sistema, és a dir, què ha de fer l'aplicació.
  • No funcionals: tracta sobre característiques del sistema, uns terminis de lliurament concrets, temps mínims d'execució o detalls més tècnics que exigisca el client per contracte (llenguatge de programació, plataforma, sistema operatiu...)

Disseny

Descripció Perfil professional Què es genera?
Descripció de la solució. Com ho faré? - Analista funcional - Diagrames d'estructura
- Arquitecte programari - Diagrames de comportament
- Analista programador

Al disseny (o modelat del programari) es planteja una solució per a l'aplicació i es fa un model utilitzant diferents tècniques. Aquest disseny sol fer-se per nivells, començant amb una idea general que es va dividint en components per després modelar cadascun (disseny descendent/drop-down).

Cal no confondre la fase de DISSENY en termes d'ISW amb el DISSENY GRÀFIC (aspecte de la nostra aplicació). Són coses completament diferents.

Codificació

Descripció Perfil professional Què es genera?
Implementació de la solució - Desenvolupador - Codi font / Llibreries
- Administrador de bases de dades - Executables
- Bases de dades (sistemes d'informació)

A la codificació es realitza el programa atenent tots els seus components; això inclou elements com la base de dades, servidors o comunicacions.

En molts projectes es comet l'error de suposar que, per una banda, el programador és la "persona per a tot" en el desenvolupament del programari i que, de l'altra, qualsevol analista o consultor és també un bon programador. No tot professional està capacitat per tractar directament amb el client.

Proves

Descripció Perfil professional Què es genera?
Prova de la solució - Tester - Verificació de la solució
- Programador - Tests

Les proves són revisions que han de realitzar persones diferents de les que van codificar el aplicatiu per detectar errors d'usabilitat o errors no detectats a la fase anterior.

Es poden fer proves de diversos tipus: individuals, d'integració i sobretot d'acceptació amb el client, sempre amb l'especificació de requisits (l'anàlisi) al davant.

Documentació

Descripció Perfil professional Què es genera?
Documentar feina realitzada i usabilitat - Administratiu - Manuals d'ús
- Programador - Documentació codi

La fase de documentació consisteix a deixar per escrit les decisions tècniques que s'han pres. Des de per què un framework i no un altre fins per què s'han creat 10 taules a la base de dades i no 200.

Aquesta fase no s'ha de fer necessàriament després de la de codificació. De fet, es considera una bona pràctica documentar a la vegada que codifica.

Implantació o desplegament

Descripció Perfil professional Què es genera?
Publicar la solució - Programador (sènior) - Solució publicada / lliurada

La implantació o desplegament (no confondre amb implementació) consisteix a publicar la solució final a la plataforma destinació o lliurar al client el producte final en el format acordat.

Molt poques persones a l'organització tenen (o han de tenir) accés als servidors on resideixen les aplicacions que estan publicades (servidors de producció). Aquesta fase recau en els més veterans i experimentats (sènior).

Manteniment

Descripció Perfil professional Què es genera?
Actualitzar l'aplicatiu i correcció d'errors - Programador (júnior) - Evolutiu, correctiu i adaptatiu
- Tècnics de suport

La fase de manteniment sol tindre una secció específica en els contractes de desenvolupament on es detalla com es facturarà aquest servei i en quins termes.

El manteniment pot ser:

  • Evolutiu: Modificacions i/o eliminacions en el producte per un canvi de les necessitats del client o per canvis en requisits externs (normatius, legals,...).

  • Correctiu: Accions per millorar la qualitat del producte en sistemes en qualsevol dels seus aspectes: Correcció d'errors, reestructuració i optimització del codi, definició més clara i millora del rendiment.

  • Adaptatiu: Modificacions necessàries per adaptar-se a variacions de l'entorn (context) als que el sistema opera, per exemple, canvis de maquinari, de base de dades, comunicacions,...

En aquest punt el programari està lliurat i facturat, per la qual cosa se li sol restar importància malgrat que moltes empreses de desenvolupament de programari paguen gran part de les nòmines dels seus empleats amb les quotes de manteniment de tots els clients. Aquesta fase sol recaure en els nouvinguts (junior).

Tipus de cicles de vida

En funció de com se seqüencien les fases que hem vist abans, tindrem aquests tipus:

Clàssic o cascada (waterfall)

Totes les fases es distribueixen en una estructura lineal, on no hi ha retroalimentació ni la possibilitat de tornar enrere. Només vàlid en projectes grans amb requisits molt clars.

Model en cascada

Autor desconegut

Figura 4. Model en cascada

Cicle de vida iteratiu

Totes les fases es distribueixen en una estructura iterativa, on es repeteix en bucle el sistema lineal. Una vegada realitzat el desplegament de l'aplicació, es prova i s'avalua el sistema per veure si cal fer alguna modificació.

Model iteratiu

Autor desconegut

Figura 5. Model iteratiu

Cicle de vida a espiral

A partir del model iteratiu, afegeix la gestió de risc, per determinar si és viable aturar o no el desenvolupament de l'aplicació.

Model en espiral

Autor desconegut

Figura 6. Model en espiral

Metodologies

Els cicles de vida es combinen i exploten per crear metodologies, que ofereixen tècniques concretes per cada etapa o fase dels cicles de vida escollits. Hi ha tres enfocaments:

  • Metodologies tradicionals: Basades en combinacions dels cicles de vida anteriors. Fases massa llargues, feedback insuficient.

    • Exemples: METRICA3, RUP, MERISE
  • Metodologies àgils: Fomenten el reajustament continu dels objectius de desenvolupament amb les necessitats i expectatives del client, i proporcionen processos de desenvolupament de programari "més lleugers", més ràpids i "àgils" que poden adaptar-se als inevitables canvis en els requisits del client

    • Exemples: Scrum, Kanban, XP Programming

Estadístiques informe CHAOS àgils vs cascada

Standish Group 2015 Chaos Report

Figura 7. Estadístiques informe CHAOS àgils vs cascada

Bibliografia

Comentaris