Salta el contingut
 

Enginyeria del programari

Joan Puigcerver Ibáñez

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Enginyeria del programari

Desenvolupar programari implica moltes persones amb punts de vista diferents sobre el mateix projecte (Figura 1). L'enginyeria del programari naix precisament per posar ordre en aquest procés.

Diferents punts de vista del desenvolupament de programari

Autoria desconeguda

Figura 1. Diferents punts de vista del desenvolupament de programari.

Què és l'enginyeria del programari?

L'enginyeria del programari és una disciplina que engloba ferramentes, tècniques, recomanacions i mètodes que s'utilitzen en la creació d'una aplicació, un sistema o una plataforma informàtica o, de manera més general, en el desenvolupament d'un projecte de programari que resol un problema o cobreix una necessitat.

El desenvolupament d'una aplicació s'entén com un intercanvi comercial d'un producte (el programari) entre una part que el desenvolupa i un client. Totes dues parts poden ser empreses, organitzacions o persones físiques, i poden ser una o diverses.

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

L'enginyeria del programari inclou les tasques següents:

  • Anàlisi: estudi previ de la situació (què es farà i quan).
  • Disseny: planificació del projecte (com es farà).
  • Desenvolupament: codificació del programari.
  • Proves: comprovacions necessàries per assegurar-ne el funcionament correcte.
  • Documentació: descripció del que s'ha fet i de com s'utilitza.
  • Implantació o desplegament: posada en marxa del sistema.

Per què és important?

El terme crisi del programari es va encunyar a principis dels anys 70, quan la planificació d'un projecte de programari era pràcticament inexistent. Es seguia un procés de desenvolupament força artesanal, sense una metodologia ni un camí definit.

L'anàlisi prèvia a la codificació ocupava el 8 % del temps total de desenvolupament. No obstant això, el 80 % dels errors es produïen en aquesta fase, i el cost de corregir-los augmentava a mesura que avançava el projecte. Amb aquests indicadors, era evident que alguna cosa fallava i que el procés de desenvolupament de programari necessitava un canvi radical.

L'Informe CHAOS de l'Standish Group sobre l'èxit dels projectes de programari va concloure el 2015 que (Figura 2):

  • El 36 % van tindre èxit: es van lliurar a temps, dins del pressupost i amb les característiques requerides.
  • El 45 % es van modificar: es van lliurar amb retard, per damunt del pressupost o amb menys característiques.
  • El 19 % van fracassar: es van cancel·lar abans d'acabar-los o es van lliurar i no es van utilitzar mai.

Cada any, des del 1994, l'Standish Group elabora una llista de 10 atributs, amb el seu pes relatiu, que anomena 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: com més gran és el projecte, major és l'índex de fracàs.
  • Responsables del projecte: és millor que hi haja una única persona responsable que no una junta directiva.

Estadístiques de l'informe CHAOS 2015

Standish Group 2015 Chaos Report

Figura 2. Estadístiques de l'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 amb totes les garanties (Figura 3).

Cicle de vida del programari

Autoria desconeguda

Figura 3. Cicle de vida del programari.

Per a cada fase, s'indica què es fa, quins perfils professionals hi participen i què es genera.

Anàlisi

Descripció Perfil professional Què es genera?
Descripció del problema. Què faré? - Cap de projecte - Especificació dels requisits
- Arquitecte de 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 i s'hi especifiquen els requisits funcionals i no funcionals del projecte.

Els requisits obtinguts es plasmen en aquests documents:

  • Especificació dels requisits del sistema: recull els requisits funcionals i no funcionals.
  • Prototips: poden anar des d'un esbós en paper fins a una versió molt bàsica de l'aplicació. També hi ha ferramentes de prototipatge, que normalment utilitza l'equip de disseny.

Els requisits s'agrupen en:

  • Funcionals: descriuen amb detall la funció del sistema, és a dir, què ha de fer l'aplicació.
  • No funcionals: tracten sobre característiques del sistema, com terminis de lliurament concrets, temps mínims d'execució o detalls més tècnics que el client exigeix 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 de programari - Diagrames de comportament
- Analista programador

En el disseny (o modelatge del programari) es planteja una solució per a l'aplicació i se'n fa un model amb diferents tècniques. Aquest disseny sol fer-se per nivells: es comença amb una idea general que es divideix en components per modelar després cadascun (disseny descendent o top-down).

No s'ha de confondre la fase de disseny de l'enginyeria del programari amb el disseny gràfic (l'aspecte de l'aplicació).

Codificació

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

En la codificació s'implementa el programa amb tots els seus components, inclosos elements com la base de dades, els servidors o les comunicacions.

En molts projectes es comet l'error de suposar, d'una banda, que qui programa és la persona per a tot en el desenvolupament del programari i, d'altra banda, que qualsevol analista o consultor també programa bé. A més, no tots els perfils professionals estan capacitats per tractar directament amb el client.

Proves

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

Les proves són revisions que han de fer persones diferents de les que han codificat l'aplicació, per detectar errors d'usabilitat o errors no detectats en la fase anterior.

Es poden fer proves de diversos tipus: unitàries, d'integració i, sobretot, d'acceptació amb el client, sempre amb l'especificació de requisits de l'anàlisi com a referència.

Documentació

Descripció Perfil professional Què es genera?
Documentar la feina feta i l'ús - Administratiu - Manuals d'ús
- Programador - Documentació del codi

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

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

Implantació o desplegament

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

La implantació o desplegament consisteix a publicar la solució final en la plataforma de destinació o lliurar al client el producte final en el format acordat.

No s'ha de confondre la implantació amb la implementació (la codificació).

Molt poques persones de l'organització tenen (o han de tindre) accés als servidors on s'allotgen les aplicacions publicades (servidors de producció). Per això, aquesta fase recau en els perfils més veterans i experimentats (sènior).

Manteniment

Descripció Perfil professional Què es genera?
Actualitzar l'aplicació i corregir 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 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 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 canvis de l'entorn en què opera el sistema, com canvis de maquinari, de base de dades o de comunicacions.

En aquest punt, el programari ja està lliurat i facturat, per la qual cosa se sol restar importància al manteniment. No obstant això, moltes empreses de desenvolupament de programari paguen gran part de les nòmines de la plantilla amb les quotes de manteniment dels clients. Aquesta fase sol recaure en les persones nouvingudes (júnior).

Tipus de cicles de vida

Segons com s'ordenen les fases anteriors, hi ha diferents tipus de cicles de vida.

Clàssic o en cascada (waterfall)

En el model en cascada, totes les fases es distribueixen en una estructura lineal, sense retroalimentació ni possibilitat de tornar enrere (Figura 4). Per això, només és vàlid en projectes grans amb requisits molt clars.

Model en cascada

Autoria desconeguda

Figura 4. Model en cascada.

Cicle de vida iteratiu

En el model iteratiu, totes les fases es distribueixen en una estructura que repeteix en bucle el cicle lineal (Figura 5). Una vegada desplegada l'aplicació, es prova i s'avalua el sistema per vore si cal fer alguna modificació.

Model iteratiu

Autoria desconeguda

Figura 5. Model iteratiu.

Cicle de vida en espiral

El model en espiral parteix del model iteratiu i hi afig la gestió de riscos, per determinar si és viable continuar o aturar el desenvolupament de l'aplicació (Figura 6).

Model en espiral

Autoria desconeguda

Figura 6. Model en espiral.

Metodologies

Els cicles de vida es combinen i s'adapten per crear metodologies, que ofereixen tècniques concretes per a cada etapa o fase dels cicles de vida escollits. Hi ha dos enfocaments principals:

  • Metodologies tradicionals: es basen en combinacions dels cicles de vida anteriors. Tenen fases massa llargues i una retroalimentació (feedback) insuficient.

    Alguns exemples són MÉTRICA 3, RUP o MERISE.

  • Metodologies àgils: fomenten el reajustament continu dels objectius de desenvolupament a les necessitats i expectatives del client. Proporcionen processos de desenvolupament més lleugers i ràpids, que poden adaptar-se als inevitables canvis en els requisits del client.

    Alguns exemples són Scrum, Kanban o XP (Extreme Programming).

Segons l'informe CHAOS, els projectes amb metodologies àgils tenen més èxit que els que segueixen el model en cascada (Figura 7).

Estadístiques de l'informe CHAOS: metodologies àgils vs. cascada

Standish Group 2015 Chaos Report

Figura 7. Estadístiques de l'informe CHAOS: metodologies àgils vs. cascada.

Bibliografia

  • Aquests apunts s'han basat en el material de Sergio Badal.
  • CHAOS Report 2015 – Standish Group
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.