Introducció a l'enginyeria del programari
Índex
- Introducció
- Objectius
- 1.Què és l'enginyeria del programari?
- 2.Organització de l'enginyeria del programari
- 2.1.Organització del desenvolupament, operació i manteniment
- 2.2.Organització dels projectes de desenvolupament
- 2.3.Activitats de l'enginyeria del programari
- 2.3.1.Gestió del projecte
- 2.3.2.Identificació i gestió dels requisits
- 2.3.3.Modelització
- 2.3.4.Construcció i proves
- 2.3.5.Qualitat
- 2.3.6.Manteniment i reenginyeria
- 2.3.7.Activitats des del punt de vista del cicle de vida del projecte
- 2.4.Rols en l'enginyeria de programari
- 2.4.1.El cap de projectes
- 2.4.2.Els experts del domini
- 2.4.3.L'analista funcional
- 2.4.4.L'arquitecte
- 2.4.5.L'analista orgànic o analista tècnic
- 2.4.6.Els programadors
- 2.4.7.L'expert de qualitat (provador)
- 2.4.8.L'encarregat del desplegament
- 2.4.9.El responsable de producte
- 2.4.10.Altres rols
- 3.Mètodes de desenvolupament de programari
- 4.Tècniques i eines de l'enginyeria del programari
- 5.Estàndards de l'enginyeria del programari
- Resum
- Activitats
- Exercicis d'autoavaluació
- Solucionari
- Glossari
- Bibliografia
Introducció
Objectius
-
Entendre què és l'enginyeria del programari i situar-la en context.
-
Entendre les peculiaritats de l'enginyeria del programari comparada amb altres enginyeries.
-
Saber identificar els diferents rols i activitats que participen en un projecte de desenvolupament de programari.
-
Conèixer alguns dels mètodes de desenvolupament més utilitzats.
-
Conèixer algunes de les tècniques pròpies de l'enginyeria del programari.
-
Conèixer els principals estàndards de l'enginyeria del programari.
1.Què és l'enginyeria del programari?
1.1.Programari i maquinari
1.2.El desenvolupament de programari
mov ax, num1 mov bx, num2 cmp ax, bx jg num2MesGran ;num1>num2 jmp final num2MesGran: ;num2>=num1 final:
if (num1>num2) { //num1 > num2 } else { //num2 >= num1 }
1.3.L'àmbit de l'enginyeria del programari
-
Programari de sistemes. Són programes escrits per a donar servei a altres programes, com ara els sistemes operatius o els compiladors. Aquest tipus de programes acostumen a interactuar directament amb el maquinari, de manera que els seus usuaris no són els usuaris finals que fan servir l'ordinador sinó altres programadors.
-
Programari d'aplicació. Són programes independents que resolen una necessitat específica, normalment d'una organització, com ara el programari de gestió de vendes d'una organització concreta. Poden ser desenvolupats a mida (per a un únic client) o bé com a programari de propòsit general (s'intenten cobrir les necessitats de diversos clients i és habitual que aquests utilitzin només un subconjunt de la funcionalitat total).
-
Programari científic i d'enginyeria. Molt enfocats al càlcul i a la simulació, es caracteritzen per la utilització d'algorismes i models matemàtics complexos.
-
Programari encastat. És el programari que forma part d'un aparell, des del control d'un forn fins a l'ordinador de bord d'un automòbil. Es caracteritza per les limitacions quant a recursos computacionals i per estar molt adaptat al producte concret que controla.
-
Programari de línies de productes. És programari dissenyat per a proporcionar una capacitat específica però orientat a una gran varietat de clients. Pot estar enfocat a un mercat molt limitat (com ara la gestió d'inventaris) o molt ampli (com, per exemple, un full de càlcul).
-
Aplicacions web. Les aplicacions web, independentment que siguin un paquet o a mida, tenen una sèrie de característiques que les fan diferents de la resta del programari. Es caracteritzen per unificar fonts de dades i serveis diversos en entorns altament distribuïts.
-
Programari d'intel·ligència artificial. Aquests programes fan servir tècniques, eines i algorismes molt diferents de la resta de sistemes i, per tant, tenen una problemàtica pròpia. Pertanyen a aquesta categoria els sistemes experts, les xarxes neuronals i el programari de reconeixement de la parla.
1.4.Què és l'enginyeria del programari?
1.5.Història de l'enginyeria del programari
1.6.L'enginyeria del programari comparada amb les altres enginyeries
-
Per una banda, les noves possibilitats tecnològiques fan que canviï totalment la naturalesa dels productes que estem desenvolupant; per exemple, l'aparició de les interfícies gràfiques als anys vuitanta, la consolidació de l'accés a Internet als anys noranta o la popularització de l'accés a Internet des del mòbil a la primera dècada del segle XXI van donar lloc a nous tipus de productes i noves necessitats pràcticament inimaginables deu anys enrere.
-
Per altra banda, l'augment de la potència de càlcul dels ordinadors també ha provocat canvis fonamentals en les eines que es fan servir per a desenvolupar programari, tant a escala de llenguatges i paradigmes de programació (estructurats, orientats a objectes, dinàmics, etc.) com de les eines mateixes (entorns de desenvolupament, eines CASE, etc.).
2.Organització de l'enginyeria del programari
2.1.Organització del desenvolupament, operació i manteniment
2.2.Organització dels projectes de desenvolupament
-
Quines tasques i en quin ordre s'han de dur a terme.
-
Quins rols han de tenir les diferents persones que participen en el desenvolupament, quina és la responsabilitat de cada rol i quines tasques ha de dur a terme.
-
Quins artefactes (documents, programes, etc.) s'han de fer servir com a punt de partida per a cada tasca i quins s'han de generar com a resultat.
2.3.Activitats de l'enginyeria del programari
2.3.1.Gestió del projecte
-
Estudi de viabilitat. Abans de començar pròpiament el projecte, caldrà detectar una necessitat en l'organització que l'encarrega i fer un estudi d'alternatives i costos per tal de decidir si el projecte de desenvolupament és o no la millor opció per a satisfer les necessitats esmentades. Per a fer-ho, caldrà anticipar el cost del projecte (quins recursos s'han d'invertir per al desenvolupament) i quant de temps serà necessari per a desenvolupar-lo.
-
Estimació. Tal com hem dit abans, cal fer una estimació del cost del projecte i també del temps necessari per a dur-lo a terme i de la relació entre recursos i temps: com es modifica l'estimació de temps si afegim o traiem recursos? Aquesta relació no acostuma a ser lineal. L'exemple clàssic és que, mentre que una dona pot gestar una criatura en nou mesos, nou dones no la poden gestar en un mes.
-
Definir clarament els objectius del projecte, que en determinaran l'èxit o fracàs. Per exemple, un projecte pot fracassar perquè, un cop iniciat, es descobreixi que és impossible complir els seus objectius amb els recursos o el temps disponible (i, per tant, calgui cancel·lar el projecte).
-
Formar l'equip de desenvolupament tenint en compte l'estimació de recursos feta inicialment. Aquest equip pot estar format per persones amb dedicació completa al projecte o bé amb dedicació parcial. Com més va és més habitual que aquests equips tinguin, a més dels desenvolupadors, persones que representen els stakeholders.
-
Establir fites que ens permetin dur a terme les activitats de seguiment i control del projecte per tal de verificar-ne la bona marxa.
-
Identificar riscos que puguin posar en perill l'èxit del projecte. No solament des del punt de vista tecnològic (haver d'utilitzar tecnologies noves i poc provades, etc.) sinó de tots (manca de suport per part de l'organització, problemes legals, etc.).
2.3.2.Identificació i gestió dels requisits
-
Diferències respecte a la informació amb què treballen les diferents parts. Els stakeholders tenen informació sobre el producte que els desenvolupadors no tenen, mentre que els desenvolupadors tenen informació sobre la tecnologia que els stakeholders no tenen. Això pot condicionar la visió del problema que tenen uns i altres i pot afectar negativament la transferència d'informació.
-
Limitacions del canal utilitzat. Qualsevol canal de comunicació imposa limitacions. Per exemple, si la comunicació és escrita, es perd el llenguatge no verbal, mentre que, si és verbal, es perd la possibilitat de revisió que dóna la documentació escrita.
-
Limitacions del llenguatge utilitzat. El llenguatge natural és propens a l'ambigüitat, raó per la qual s'han desenvolupat els llenguatges formals d'especificació; aquests llenguatges, però, acostumen a ser menys expressius que el llenguatge natural. A més, només serveixen per a la comunicació si totes les parts els entenen correctament.
-
Dificultat de definir el millor sistema possible. Un altre problema associat a aquesta activitat és aconseguir que els stakeholders comuniquin exactament els requisits del millor sistema possible, ja que és habitual que, en descriure el sistema que volen, estiguin condicionats pel coneixement que tenen sobre sistemes semblants o, senzillament, que no se'ls acudeixin algunes possibilitats.
2.3.3.Modelització
2.3.4.Construcció i proves
2.3.5.Qualitat
2.3.6.Manteniment i reenginyeria
2.3.7.Activitats des del punt de vista del cicle de vida del projecte
-
Tasques d'iniciació. Són aquelles relatives a la presa de la decisió sobre si es començarà o no el projecte (o la nova fase del projecte). Per exemple, una organització es pot plantejar, com a alternativa a un desenvolupament, l'adquisició d'un producte ja desenvolupat. Com a resultat de les activitats d'iniciació, obtindrem la definició de l'abast del projecte (allò que es farà i allò que no es farà com a part del projecte), l'estimació de la durada (límit temporal) del projecte i del cost (recursos humans i materials que caldrà invertir per a dur a terme el projecte).
-
Tasques de planificació. Ajuden a organitzar el treball, definint quines tasques caldrà dur a terme i en quin ordre. Per exemple, es pot decidir planificar el projecte en funció dels riscos (dur a terme primer les tasques que poden posar en perill la viabilitat del projecte), o bé per funcionalitats (desenvolupar una funcionalitat de manera completa abans de treballar en les altres) o per tipus d'activitats (primer fer totes les tasques d'un tipus, després passar a les del tipus següent, etc.).
-
Tasques d'execució. Són aquelles destinades a completar la feina requerida per a desenvolupar el producte. Per exemple, escriure els programes.
-
Tasques de seguiment i control. Són les destinades a observar l'execució del projecte per tal de detectar els possibles problemes i adoptar les accions correctives que calgui. També ens ajuden a validar la planificació (per exemple, validant que l'estimació inicial de cost i temps era correcta).
-
Tasques de tancament. Un cop finalitzat el projecte, cal tancar-lo adequadament. Per exemple, caldrà fer l'acceptació del producte (que consisteix a determinar que, efectivament, el producte satisfà els objectius establerts), resoldre el contracte si s'ha contractat una organització externa per a fer el desenvolupament o bé traspassar el programari a l'equip d'operacions.
2.4.Rols en l'enginyeria de programari
2.4.1.El cap de projectes
2.4.2.Els experts del domini
2.4.3.L'analista funcional
2.4.4.L'arquitecte
2.4.5.L'analista orgànic o analista tècnic
2.4.6.Els programadors
2.4.7.L'expert de qualitat (provador)
2.4.8.L'encarregat del desplegament
2.4.9.El responsable de producte
2.4.10.Altres rols
3.Mètodes de desenvolupament de programari
3.1.Història dels mètodes de desenvolupament
-
Jidoka: evitar produir productes defectuosos aturant, si cal, la línia de producció;
-
i la producció just-in-time: produir només aquells productes que són necessaris en la fase següent i no acumular estocs.
-
La prevalença de modes passatgeres més típiques de la indústria de la moda que d'una disciplina de l'enginyeria.
-
La manca d'una base teòrica sòlida i àmpliament acceptada.
-
L'enorme nombre de mètodes i variants de mètodes, amb diferències pobrament compreses i magnificades artificialment.
-
La manca d'avaluació i validació experimental creïble.
-
La separació entre la pràctica en la indústria i la recerca científica."
3.2.Classificació dels mètodes de desenvolupament
-
risc
-
valor de negoci
-
durada (menys de 3 mesos, 3 a 6 mesos, més de 6 mesos, etc.)
-
complexitat
-
tecnologia utilitzada
-
nombre de departaments afectats
-
cost
|
Solució coneguda
|
Solució poc coneguda
|
---|---|---|
Objectiu clar
|
1
|
2
|
Objectiu poc clar
|
3
|
4
|
-
Els que segueixen el cicle de vida en cascada (adequat per als projectes de tipus 1) per un costat,
-
els mètodes iteratius i incrementals, i
-
els àgils, per l'altre costat (més adequats per als de tipus 2).
3.2.1.Cicle de vida clàssic o en cascada
-
Requisits. Definir quin ha de ser el producte per desenvolupar. Com que el cicle de vida en cascada és poc flexible als canvis, aquesta etapa és crítica per a l'èxit del projecte, ja que un defecte als requisits es propagaria per la resta d'etapes i n'amplificaria els efectes nocius. Per a evitar aquest problema els diferents mètodes disposaran d'eines com les revisions de requisits o els llenguatges formals d'especificació com l'OCL (4) .
-
Anàlisi i disseny. Definir com ha de ser el producte tant des del punt de vista extern com intern. L'anàlisi dóna un punt de vista extern documentant mitjançant models de què fa el sistema, mentre que el disseny dóna el punt de vista intern documentant com ho fa (quins components en formen part, com es relacionen entre ells, etc.).
-
Implementació. Escriure el codi, els manuals i generar el producte executable. Aquest codi s'ha d'escriure segons les indicacions efectuades en la fase d'anàlisi i disseny.
-
Proves. Es verifica que el producte desenvolupat es correspongui amb els requisits. En aquest punt es mostra el producte als usuaris finals per tal que en validin el resultat.
-
Manteniment. Es posa el sistema a disposició de tots els usuaris i se'n corregeixen els defectes que es vagin trobant.
3.2.2.Cicle de vida iteratiu i incremental
-
Accelera la retroalimentació. Com que cada iteració cobreix totes les activitats del desenvolupament (requisits, anàlisi, implementació i proves) tenim informació sobre tots els àmbits del producte des del principi i, per exemple, si l'arquitectura que hem definit no es pot implementar, ho veurem al principi i no al final del projecte. També ens permet obtenir informació empírica basada en el producte real ja que la part que està desenvolupada és ja definitiva.
-
En tot moment es té un producte operatiu. Com que es van afegint funcionalitats sobre un producte operatiu, en qualsevol moment es pot decidir fer servir el sistema desenvolupat, la qual cosa permet accelerar el retorn de la inversió o, fins i tot, finalitzar el projecte abans de consumir tots els recursos assignats si s'arriba a un punt en què el producte és "prou bo".
3.2.3.Desenvolupament lean i àgil
-
Individus i interaccions per sobre de processos i eines.
-
Programari que funciona per sobre de documentació exhaustiva.
-
Col·laboració amb el client per sobre de negociació de contractes.
-
Resposta al canvi per sobre de cenyir-se a una planificació.
3.3.Exemples de mètodes de desenvolupament
3.3.1.Mètrica 3
-
planificació de sistemes d'informació (PSI)
-
desenvolupament de sistemes d'informació (DSI)
-
estudi de viabilitat del sistema (EVS)
-
anàlisi del sistema d'informació (ASI)
-
disseny del sistema d'informació (DSI)
-
construcció del sistema d'informació (CSI)
-
implantació i acceptació del sistema (IAS)
-
-
manteniment de sistemes d'informació (MSI)
3.3.2.Procés unificat
Fases del projecte
Activitats
-
Modelització de negoci (business modelling). Aquesta activitat intenta solucionar el problema de comunicació entre els experts en el domini i els especialistes en tecnologia que, habitualment, fan servir llenguatges diferents. Es generen els casos d'ús "de negoci" (business use cases), que descriuen els processos principals de l'organització i que serviran com a llenguatge comú per a tots els implicats en el procés de desenvolupament. Aquesta activitat és molt important, ja que és la que ens assegurarà que els desenvolupadors entenguin quin és l'encaix del producte que estan desenvolupant dins del context de l'organització per al qual l'estan desenvolupant.
-
Requisits (requirements). Descriure què ha de fer el sistema (i què no ha de fer). El model que es fa servir per a descriure la funcionalitat del sistema és l'anomenat model de casos d'ús, que consisteix a descriure escenaris d'ús del sistema mitjançant una seqüència d'esdeveniments (l'usuari fa X, el sistema fa Y, etc.).
-
Anàlisi i disseny (analysis & design). Descriure com s'implementarà el sistema. Es creen models detallats dels components que formaran el sistema. Aquests models serveixen com a guia per als implementadors a l'hora d'escriure el codi font dels programes. Aquests models han d'estar relacionats amb els casos d'ús i han de permetre introduir canvis en el cas que els requisits funcionals canviïn.
-
Implementació (implementation). Definir l'organització del codi, escriure'l i verificar que cada component compleix els requisits de manera unitària (és a dir, de manera aïllada de la resta de components) i generar un sistema executable. El procés també preveu la reutilització de components que existeixin prèviament.
-
Proves (test). Verificar la interacció entre els objectes i components que formen el sistema. Com que les proves s'executen durant totes les iteracions, és més fàcil detectar errors abans que es propaguin pel sistema. Les proves han d'incloure la fiabilitat, la funcionalitat i el rendiment.
-
Deployment. Produir els lliuraments del sistema i lliurar-los als usuaris finals. Inclou les tasques relatives a la gestió de la configuració i de les versions i, sobretot, té lloc durant la fase de transició.
Rols
-
Stakeholder. Qualsevol persona que tingui un interès en el resultat final del projecte.
-
Cap de projecte. Encarregat de la planificació i de coordinar la interacció entre els stakehoders. També és responsable de mantenir els membres de l'equip centrats a aconseguir complir els objectius del projecte.
-
Analista. Recull la informació dels stakeholders en forma de requisits, els classifica i prioritza. És el que, en la classificació que hem fet al subapartat 2.4, hem anomenat analista funcional.
-
Arquitecte. Defineix l'arquitectura del programari, la qual cosa inclou prendre les decisions clau que afecten tot el disseny i implementació del sistema.
-
Desenvolupador. Desenvolupa una part del sistema, la qual cosa inclou dissenyar-la d'acord amb l'arquitectura, prototipar (si cal) la interfície gràfica d'usuari, implementar-la i provar-la tant aïllada de la resta del sistema con integrada amb la resta de components. Aquest rol inclou els rols d'analista orgànic i el de programador, tal com els hem definit al subapartat 2.4.
-
Expert en proves. Identifica, defineix, implementa i duu a terme les proves aportant un punt de vista complementari al del desenvolupador. El més habitual és que treballi sobre el sistema construït i no sobre components aïllats.
3.3.3.Scrum
Rols
-
Scrum Master. És responsable d'assegurar que l'equip segueix els valors, pràctiques i regles de Scrum. També s'encarrega d'eliminar impediments que l'equip es pugui trobar dins l'organització.
-
Product owner. És la persona responsable de vetllar pels interessos de tots els stakeholders i portar el projecte a bon terme. És, per tant, l'encarregat de decidir què s'implementa i què és més prioritari.
-
Team. La resta de membres de l'equip són els desenvolupadors. No s'especialitzen sinó que tots han de tenir, en més o menys grau, habilitats en totes les activitats implicades. Els membres de l'equip decideixen ells mateixos com s'organitzen la feina i ningú (ni tan sols l'Scrum Master) els pot dir com ho han de fer.
Artefactes
-
Product backlog. És la llista de requisits pendents d'implementar al producte. Cada entrada (normalment una "història d'usuari") té associada una estimació del valor que aporta a l'organització i també del cost del seu desenvolupament.
-
Sprint backlog. El backlog per a una iteració concreta (Scrum anomena sprint les iteracions); més detallat que el product backlog i en què cada història d'usuari està descomposta en tasques entre 4 i 16 hores de durada.
-
Release burndown chart. Gràfic que mostra el progrés actual de l'equip en funció del nombre d'històries d'usuari que falten per implementar.
-
Sprint burndown. El burndown per a una iteració concreta, en què el progrés es pot mesurar en tasques finalitzades encara que no siguin històries d'usuari completes.
Pràctiques
-
Sprint planning meeting. Reunió que es fa abans de començar un sprint en què es decideixen quines històries d'usuari s'implementaran en aquest sprint i, per tant, es crea l'sprint backlog.
-
Daily scrum. Reunió diària on tots els membres de l'equip responen tres preguntes: què van fer ahir, què pensen fer avui i quins impediments s'han trobat que els han impedit avançar. La finalitat d'aquesta reunió és que tots els membres de l'equip estiguin al corrent de què està fent la resta de membres i així s'identifiquin oportunitats d'ajudar-se els uns als altres.
-
Sprint review meeting. En finalitzar un sprint es revisa la feina feta i s'ensenya a qui estigui interessat el resultat implementat (la demo).
-
Sprint retrospective. Serveix per a reflexionar sobre el que hagi passat durant l'sprint i per a identificar oportunitats de millora en el procés de desenvolupament.
4.Tècniques i eines de l'enginyeria del programari
4.1.Tècniques basades en la reutilització
-
Oportunitat. Com que hem de desenvolupar menys programari, es pot desenvolupar amb més rapidesa i, per tant, tenir-lo enllestit abans.
-
Disminució dels costos. Com que el component és compartit, el cost del seu desenvolupament i manteniment també pot ser compartit.
-
Fiabilitat. Els components reutilitzats ja han estat provats i utilitzats i, per tant, podem confiar en el seu bon funcionament ja que, si tenen errors, algú altre els pot haver trobat abans.
-
Eficiència. El desenvolupador del component reutilitzable es pot especialitzar en un problema molt concret (el que resol el component) i, per tant, trobar les solucions més eficients.
4.1.1.Desenvolupament orientat a objectes
4.1.2.Bastiments
4.1.3.Components
4.1.4.Desenvolupament orientat a serveis
4.1.5.Patrons
-
Reutilitzar les solucions i aprofitar l'experiència prèvia d'altres persones que han dedicat més esforç a entendre els contextos, les solucions i les conseqüències del que nosaltres volem o podem dedicar.
-
Beneficiar-nos del coneixement i l'experiència d'aquestes persones mitjançant un enfocament metòdic.
-
Comunicar i transmetre la nostra experiència a altres persones (si en definim de nous).
-
Establir un vocabulari comú per a millorar i agilitzar la comunicació.
-
Encapsular coneixement detallat sobre un tipus de problema i les seves solucions assignant-li un nom per tal que en puguem fer referència fàcilment.
-
No haver de reinventar una solució al problema.
-
El nom ens permet fer referència al patró quan documentem el nostre disseny o quan el comentem amb altres desenvolupadors. També ens permet augmentar el nivell d'abstracció del procés de disseny, ja que podem pensar en la solució al problema com un tot.
-
El problema ens indica què resol el patró. Aquest problema podria ser un problema concret o la identificació d'una estructura problemàtica (per exemple, una estructura de classes poc flexible).
-
La solució descriu els elements que formen part del patró, i també les seves relacions, responsabilitats i col·laboracions. La solució no és una estructura concreta sinó que, com hem indicat anteriorment, és com una plantilla que podem aplicar al nostre problema. Alguns patrons presenten diverses variants d'una mateixa solució.
-
Les conseqüències són els resultats i els compromisos derivats de l'aplicació del patró. És molt important que les tinguem en compte a l'hora d'avaluar el nostre disseny, ja que és el que ens permet entendre realment el cost i els beneficis de l'aplicació del patró.
-
Nom: estat (també conegut com a objectes per estats).
-
Problema: el comportament d'un objecte depèn del seu estat i ha de canviar el seu comportament en temps d'execució en funció d'aquest. Les operacions tenen sentències condicionals llargues que depenen de l'estat de l'objecte. Sovint diverses operacions tenen les mateixes estructures condicionals (és a dir, preveuen les mateixes condicions, ja que depenen dels possibles estats de l'objecte).
-
Solució: introduir una nova classe que representa l'estat amb una subclasse per cada estat que tingui un comportament diferent. Cada branca de les estructures condicionals es correspondrà ara a una de les subclasses de l'estat. Això ens permet tractar l'estat de l'objecte com un objecte en si mateix que pot canviar independentment de la resta d'objectes.
-
Conseqüències: localitza el comportament específic de l'estat, particiona el comportament dels diferents estats i fa explícites les transicions entre estats.
4.1.6.Línies de producte
4.2.Tècniques basades en l'abstracció
4.2.1.Arquitectura dirigida per models
4.2.2.Llenguatges específics del domini
4.3.Eines de suport a l'enginyeria del programari (CASE)
-
Eines de gestió del procés. Ajuden a la definició, modelització, execució o gestió del procés de desenvolupament mateix.
-
Eines de gestió de projectes. Eines que ajuden en tasques de gestió del projecte com ara l'estimació, la planificació o l'anàlisi del risc.
-
Eines de gestió de requisits. Eines de suport per a la recollida, documentació, gestió i validació de requisits. Poden ser genèriques, en què els requisits es documenten textualment, o específiques, com ara les basades en històries d'usuari o en casos d'ús.
-
Eines de modelització. Eines que faciliten la creació de models. En el cas específic d'UML, permeten la creació de diagrames UML tot validant en més o menys grau la correctesa de la sintaxi utilitzada.
-
Eines d'enginyeria inversa. Es tracta d'eines que permeten analitzar un programari existent per a poder començar a aplicar els principis d'enginyeria del programari; típicament elaboren models d'anàlisi i disseny, per exemple, en UML, a partir del codi, d'una base de dades existent, etc.
-
Entorn integrat de desenvolupament. Eines per a la codificació del programari, però també per al disseny, l'execució de proves i la depuració.
-
Eines de construcció del programari. Eines que construeixen l'executable final a partir dels diversos arxius de codi font. Fan la compilació dels arxius, però també l'empaquetament en el format adequat per a l'entrega.
-
Eines de proves. Eines per a la definició d'una estratègia de proves i per al seguiment al llarg del projecte. Poden ajudar en la definició de la prova, l'execució, la gestió de les proves i dels resultats obtinguts, etc.
-
Eines de desenvolupament d'interfícies gràfiques d'usuari. Són eines que permeten desenvolupar les interfícies gràfiques d'usuari de manera gràfica, de tal manera que, en lloc d'haver de programar el 100% de la interfície, el desenvolupador pot arrossegar components a les pantalles de manera visual i programar-ne només el comportament dinàmic.
-
Eines de mesura de mètriques. Eines que permeten mesurar una sèrie de mètriques de manera automatitzada per a donar-nos criteris objectius a partir dels quals puguem valorar la qualitat del programari desenvolupat pel que fa a arquitectura, disseny, codi, proves, etc.
-
Eines de gestió de la configuració i del canvi. Eines que gestionen el canvi del programari al llarg de la seva vida. Poden gestionar les diverses versions que es van creant de cada artefacte, les diverses versions del producte final, la integració de les noves versions de cada part del producte final, etc.
5.Estàndards de l'enginyeria del programari
5.1.Llenguatge unificat de modelització (UML)
5.2.Software engineering body of knowledge (SWEBOK)
-
Promoure una visió consistent del que és l'enginyeria del programari a escala mundial.
-
Clarificar la situació (i les fronteres) de l'enginyeria del programari envers altres disciplines com les ciències de la computació (computer science), la gestió de projectes, l'enginyeria de computadors (computer engineering) i les matemàtiques.
-
Caracteritzar els continguts de la disciplina de l'enginyeria del programari.
-
Proporcionar un accés organitzat al cos de coneixement de l'enginyeria del programari.
5.3.Capability maturity model integration (CMMI)
-
Gestió de serveis (CMMI-SVC), destinat a proveïdors de serveis amb la finalitat d'ajudar-los a reduir costos, millorar la qualitat i la predictibilitat. Inclou bones pràctiques sobre quins serveis s'han d'oferir, assegurar-se que s'està en condicions d'oferir un servei, i establir acords i activitats relacionades, en general, amb la provisió de serveis
-
Adquisició (CMM-ACQ), enfocat a ajudar organitzacions que contracten proveïdors de productes o serveis a millorar les relacions amb els proveïdors, els processos de contractació i de control, i també l'adequació del producte o servei adquirit a les necessitats de l'organització.
-
Desenvolupament (CMMI-DEV), dirigit a organitzacions que desenvolupen programari i que vulguin millorar la satisfacció dels clients, la qualitat del producte obtingut i el procés mateix de desenvolupament.
5.4.Project management body of knowledge (PMBOK)
-
gestió de la integració
-
gestió de l'abast
-
gestió del temps
-
gestió de la qualitat
-
gestió dels costos
-
gestió del risc
-
gestió de recursos humans
-
gestió de la comunicació
-
gestió de les compres i adquisicions
Resum
Activitats
-
El nucli de l'SO Linux
-
Un gestor de finestres en un entorn d'escriptori (per exemple, MetaCity)
-
Un paquet ofimàtic com, per exemple, OpenOffice
-
El programari de planificació de recursos empresarials SAP
-
Un sistema de gestió del correu electrònic via Web (com, per exemple, Hotmail)
-
L'aplicació de campus virtual de la UOC
-
El programari Mathematica
-
AutoCAD
-
El programari que gestiona el GPS d'un cotxe
-
El programari de reconeixement de la parla
-
Estudiar el producte ofert per la companyia X per veure si satisfà les nostres necessitats o si, al contrari, haurem de buscar un altre producte o fer un desenvolupament a mesura.
-
Determinar si podem acabar el projecte en una data concreta si la Maria deixa el projecte.
-
Establir el calendari de reunions de seguiment del projecte.
-
Estudiar com ens afecta la LOPD.
-
Crear un model de la interfície d'usuari per a mostrar als usuaris finals com serà l'aplicació.
-
Crear un diagrama UML amb el model conceptual del domini.
-
Determinar i documentar quin volum màxim d'usuaris ha de suportar el sistema per desenvolupar.
-
Detectar quines són les necessitats dels administradors del sistema.
-
Fer un prototip de la interfície gràfica d'usuari per tal de provar diferents combinacions de colors i diferents disposicions de la informació.
-
Dissenyar un component del sistema.
-
Comprovar que el sistema suporta el volum màxim d'usuaris que es va determinar.
-
Verificar que s'ha seguit el procés de desenvolupament tal com està definit.
-
Recollir informació sobre el nombre de requisits implementats cada setmana.
-
Corregir un error en un sistema ja en producció.
-
Desenvolupar una aplicació per a substituir el full de càlcul on apuntem les vacances.
-
Desenvolupar un sistema de comerç electrònic que permeti incrementar les vendes en línia.
-
Avaluar l'OpenOffice com a alternativa a les eines ofimàtiques que s'estan fent servir actualment a la nostra organització.
-
Identificar quins dels nostres sistemes actuals podem substituir per aplicacions de programari lliure.
-
Desenvolupar una aplicació que incorpori dades d'uns fitxers en un format conegut i documentat i les desi en una base de dades existent.
-
Desenvolupar una aplicació per a automatitzar el procés de compra de mercaderies a proveïdors en una organització on, actualment, tot el procés és manual.
Requisit
|
Anàlisi i disseny
|
Implementació
|
Proves
|
---|---|---|---|
a
|
1
|
1
|
1
|
b
|
3
|
5
|
2
|
c
|
2
|
4
|
1
|
d
|
1
|
3
|
1
|
e
|
2
|
1
|
2
|
f
|
1
|
3
|
2
|
g
|
1
|
1
|
1
|
-
Planifiqueu el projecte suposant que l'estimació està en dies de feina (per exemple, el requisit a necessita un dia d'anàlisi i disseny, un dia d'implementació i un dia de proves) fent servir el cicle de vida en cascada, indicant quina feina es farà cada setmana.
-
Feu el mateix amb el cicle de vida iteratiu i incremental suposant iteracions de 10 dies.
-
Un cop aclarida la funcionalitat en una conversa amb el client, el cost de documentar-la i implementar-la és més o menys el doble que el d'implementar-la directament i decidim no documentar-la.
-
El client ha de signar el document de requisits abans de començar el desenvolupament per tal d'assegurar-nos que l'ha entès bé i que no caldrà introduir canvis.
-
Els desenvolupadors han d'omplir un informe al final del dia on indiquin, de les seves hores de feina, quantes han dedicat a cadascuna de les tasques.
-
El cap de projectes no assigna tasques als desenvolupadors sinó que aquests es presenten voluntaris.
-
El client ha d'estar disponible en tot moment per a resoldre dubtes als desenvolupadors (i no solament al cap de projecte).
-
S'ha planificat en detall i s'ha documentat en un diagrama de Gantt tota la feina dels propers sis mesos.
-
Hi ha un procés de gestió del canvi que permet introduir canvis als requisits un cop iniciat el desenvolupament.
-
Totes les persones implicades en el desenvolupament del projecte treballen a la mateixa sala.
-
Tota la comunicació entre desenvolupadors s'ha de fer per mitjà d'un fòrum perquè quedi registrada i es pugui reutilitzar més endavant.
-
A l'hora de mesurar l'avanç del projecte no es té en compte la funcionalitat que està a mig implementar. Per exemple, si tenim l'especificació i l'anàlisi d'una funcionalitat però no l'hem acabada de dissenyar i implementar, considerem que l'avanç és 0 i no 50%. Per tant, considerem que l'avanç d'una funcionalitat és SÍ/NO i no un percentatge.
Exercicis d'autoavaluació
Solucionari
Solucionari
-
Programari de sistemes
-
Programari de sistemes
-
Programari d'aplicació, línia de productes
-
Programari d'aplicació, línia de productes
-
Aplicació web
-
Aplicació web
-
Programari científic/d'enginyeria
-
Programari d'enginyeria
-
Programari encastat (també podria formar part d'una línia de productes)
-
Intel·ligència artificial
-
El principal argument a favor és el gran nombre de projectes de desenvolupament de programari que s'han dut a terme al llarg dels anys aplicant l'enginyeria al desenvolupament del programari i com s'ha millorat respecte a la situació anterior. Al subapartat 1.5, parlem del Chaos Report de l'any 1995 i de l'any 2010 i de com s'ha doblat en 15 anys el nombre de projectes que es consideren 100% reeixits.
-
Un altre argument a favor és que l'enfocament sistemàtic (que, com acabem de dir, és viable) ens permet aplicar el coneixement de les altres enginyeries al desenvolupament del programari. És el cas, per exemple, de com els principis del mètode de producció de Toyota s'han traslladat al món del desenvolupament de programari en el que s'ha anomenat desenvolupament lean.
-
Per una banda, Tom DeMarcos ens diu, a l'article "Software Engineering: An Idea Whose Time Has Come and Gone?", publicat a la revista IEEE Software al número de juliol/agost de 2009 que, si bé l'enginyeria se centra en el control del procés, aquest no hauria de ser l'aspecte més important per considerar a l'hora de pensar en com desenvolupem el programari sinó que ens hauríem de centrar en com el programari transforma el món en què vivim o l'organització per al qual el desenvolupem.
-
D'altra banda, un altre argument en contra de l'enfocament d'enginyeria és aquell que considera que l'impacte de les persones en el procés de desenvolupament de programari (la seva habilitat, com es relacionen i com es comuniquen, el seu estat d'ànim, la seva motivació, etc.) és tan gran que cap mètode, per ben definit que estigui, pot convertir el desenvolupament de programari en un procés repetible.
-
S'acostumen a fer en equip.
-
El nivell d'experiènica i l'habilitat natural dels participants impacta molt en el resultat final.
-
S'ha d'aconseguir un objectiu amb un temps i uns recursos limitats.
-
En l'alpinisme cada ascensió comença de zero, mentre que l'enginyeria del programari pot aprofitar parts de la feina que ja estiguin fetes d'altres projectes i, per tant, hem d'intentar tenir en compte els futurs desenvolupaments durant el projecte.
-
L'alpinisme té un final clar i a curt termini: o bé el moment d'arribar al cim o bé el moment de tornar. L'enginyeria del programari, en canvi, ha de tenir en compte el manteniment futur del sistema i també la seva operació.
-
En l'alpinisme no és habitual canviar de membres de l'equip durant l'ascensió mentre que, al llarg de la vida del programari, és habitual que es produeixin canvis.
-
Gestió del projecte
-
Gestió del projecte
-
Gestió del projecte
-
Gestió del projecte, requisits
-
Modelització
-
Modelització
-
Requisits
-
Requisits
-
Requisits
-
Construcció i proves
-
Construcció i proves
-
Qualitat
-
Qualitat
-
Manteniment.
-
1 (Objectiu clar i solució coneguda)
-
2 (Objectiu clar i solució no coneguda)
-
1 (Objectiu clar i solució coneguda)
-
3 (Objectiu poc clar i solució no coneguda)
-
1 (Objectiu clar i solució coneguda)
-
2 (Objectiu clar i solució no coneguda)
-
Cada setmana són 5 unitats d'estimació.
Setmana 1: anàlisi i disseny dea,bi part dec(1/2)Setmana 2: anàlisi i disseny de part dec(1/2),d,eif.Setmana 3: anàlisi i disseny deg. Implementació deai part deb(3/5)Setmana 4: implementació de part deb(2/5) i part dec(3/4)Setmana 5: implementació de part dec(1/4),dieSetmana 6: implementació defi g. Proves dea.Setmana 7: proves deb,c,di part dee(1/2).Setmana 8: proves dee(1/2),fig. -
En aquest cas no distingim anàlisi i disseny, implementació i proves, sinó que planifiquem per requisits analitzats, implementats i provats.
Iteració 1 (setmanes 1 i 2): requisita,c(elbno el podem completar en aquesta iteració i, per això, fem elcabans).Iteració 2 (setmanes 3 i 4): requisitbIteració 3 (setmanes 5 i 6): requisitsdieIteració 4 (setmanes 7 i 8): requisitsfig.
-
No segueix els principis del manifest àgil perquè aquest, tot i que diu que preferim "Programari que funciona per sobre de documentació exhaustiva", també diu que reconeix el valor dels ítems a la dreta i, per tant, no fer cap documentació va en contra d'aquesta última frase.
-
No compleix el principi "Col·laboració amb el client per sobre de negociació del contracte".
-
En aquest cas dependrà de quant de temps han de dedicar els desenvolupadors a omplir l'informe, ja que, en funció d'això, es pot considerar que no es compleix el principi "Individus i interaccions per sobre de processos i eines".
-
Sí que compleix el principi "Individus i interaccions per sobre de processos i eines".
-
Sí que compleix el principi de "Col·laboració amb el client per sobre de negociació del contracte".
-
No compleix el principi "Respondre al canvi per sobre de seguir un pla"
-
Sí que compleix el principi "Respondre al canvi per sobre de seguir un pla".
-
Sí que compleix el principi "Individus i interaccions abans que processos i eines".
-
No compleix el principi "Individus i interaccions abans que processos i eines".
-
Sí que compleix el principi "Programari que funciona abans que la documentació exhaustiva".
-
Identificar i donar una visió general dels requisits
-
Detallar els requisits globals del sistema
-
Detallar els casos d'ús
-
Desenvolupar la visió tecnològica
-
Les mètriques han de mesurar coses mesurables.
-
Les mètriques s'han de prendre al nivell adequat i en la unitat adequada.
-
Només té sentit mesurar si es vol actuar sobre el resultat.
Glossari
- abstracció f
- L'abstracció consisteix a identificar els aspectes rellevants d'un problema de manera que ens puguem concentrar només en aquests.
- activitat f
- Conjunt de tasques que duen a terme les persones que tenen un determinat rol.
- anàlisi f
- L'anàlisi d'un sistema informàtic documenta com ha de ser el producte per desenvolupar des d'un punt de vista extern (és a dir, sense considerar com està fet per dintre). Habitualment, aquesta documentació es fa en forma de models.
- artefacte m
- Objecte produït pel treball de l'ésser humà. En el context de l'enginyeria del programari, cada un dels documents, models, programes, etc., que es generen com a resultat del treball de l'enginyer.
- cicle de vida m
- El cicle de vida d'un procés defineix quines són les diferents etapes per les quals
va passant un procés al llarg de la seva vida. En l'enginyeria del programari fem
servir aquest terme per a classificar els mètodes en famílies segons el tipus de cicle
de vida.
Vegeu cicle de vida en cascada, cicle de vida iteratiu i cicle de vida incremental. - cicle de vida en cascada m
- El cicle de vida en cascada és un cicle de vida seqüencial que consta de les etapes següents: requisits, anàlisi i disseny, implementació, proves i manteniment. Tot i haver-hi diverses variants del cicle de vida en cascada, el que les caracteritza a totes és la seva naturalesa seqüencial.
- cicle de vida incremental m
- Un cicle de vida és incremental quan el producte per desenvolupar es crea mitjançant petits increments de funcionalitat completa que es van agregant al producte desenvolupat.
- cicle de vida iteratiu m
- Un cicle de vida és iteratiu si organitza el desenvolupament en iteracions de temps determinat. El principal avantatge del cicle de vida iteratiu és que permet establir punts de control regulars (al final de cada iteració) durant el desenvolupament.
- computer aided software engineering
- Terme que es fa servir habitualment per a fer referència a les eines que tenen com
a finalitat ajudar l'enginyer de programari a aplicar els principis d'enginyeria al
desenvolupament de programari.
Sigla CASE - construcció del programari f
- La construcció del programari és l'activitat que té com a finalitat l'obtenció del producte executable. Això inclou, entre altres, la creació del codi font, la creació dels arxius executables o la gestió de la configuració.
- desenvolupament àgil m
- El desenvolupament àgil consisteix a aplicar els quatre principis del Manifest àgil al desenvolupament de programari. També es coneix com a desenvolupament àgil el conjunt de mètodes de desenvolupament que comparteixen els principis esmentats.
- desenvolupament lean m
- El desenvolupament lean intenta aplicar les tècniques de manufactura lean al desenvolupament de programari. Aquestes tècniques es deriven, originàriament, del sistema de producció Toyota (TPS).
- desenvolupament de programari m
- El desenvolupament de programari és l'acte de produir o crear programari.
- disseny de programari m
- El disseny de programari documenta l'estructura i el comportament intern d'un sistema informàtic.
- enginyeria f
- L'enginyeria és l'aplicació d'un enfocament sistemàtic, disciplinat i quantificable a les estructures, màquines, productes, sistemes o processos per a obtenir un resultat esperat.
- enginyeria del programari
- L'enginyeria del programari és l'aplicació d'un enfocament sistemàtic, disciplinat i quantificable al desenvolupament, operació i manteniment del programari; és a dir, l'aplicació de l'enginyeria al programari.
- gestió del projecte f
- La gestió del projecte és tot allò que no sigui l'execució del projecte. El seu objectiu principal és assegurar l'èxit del projecte.
- implementació (com a activitat del desenvolupament) f
- Creació del codi font.
- implementació (com a part de l'ocultació d'informació) f
- Part interna d'un objecte o un sistema; inclou tot allò que no és visible a aquells que el fan servir.
- interfície (com a part de l'ocultació d'informació) f
- Part externa d'un objecte o un sistema; inclou tot allò que sí que és visible a aquells que el fan servir.
- manteniment del programari m
- Comprèn la modificació posterior al desenvolupament del producte de programari per tal de corregir-ne els errors o bé adaptar-lo a noves necessitats.
- mètode m
- Definició de les característiques del procés o procediment disciplinat utilitzat en l'enginyeria d'un producte o en la prestació d'un servei.
- metodologia f
- Ciència que estudia els mètodes. Conjunt dels mètodes d'una disciplina.
- modelització f
- Activitat que consisteix en la creació de models del sistema per desenvolupar: aquests models facilitaran la comprensió dels requisits i el disseny del sistema.
- ocultació d'informació f
- L'ocultació d'informació consisteix a amagar els detalls sobre l'estructura interna d'un mòdul, de manera que podem definir clarament quins aspectes dels objectes són visibles públicament (i, per tant, utilitzables pels reutilitzadors) i quins no.
- operació del programari f
- L'operació del programari consisteix a executar el producte de programari dins del seu entorn d'execució per tal de dur a terme la seva funció.
- procediment m
- Vegeu procés.
- procés m
- Manera de descabdellar-se una acció progressiva.
- programació f
- Típicament, s'anomena programació la creació del codi font.
- programari m
- Conjunt de programes. Més formalment, el conjunt dels programes de computació, procediments, regles, documentació i dades associades que formen part de les operacions d'un sistema de còmput.
- programa m
- Conjunt d'instruccions codificades i de dades que són l'expressió completa d'un procediment, i en particular d'un algorisme, executable per un sistema informàtic.
- requisit m
- Els requisits expressen les necessitats i restriccions que afecten un producte de programari que contribueix a la solució d'un problema del món real.
- sistema d'informació m
- Un sistema d'informació és qualsevol combinació de tecnologia de la informació i activitats humanes que utilitzen aquesta tecnologia per a donar suport a l'operació, gestió o presa de decisions.
- tasca f
- Com a part de l'execució d'un procés, una tasca l'ha de dur a terme una persona amb un rol concret per tal de crear uns artefactes de sortida a partir d'uns artefactes d'entrada.
- unified modeling language
- Llenguatge unificat de modelització. És un estàndard publicat per l'OMG que defineix
la notació acceptada universalment per a la creació de models del programari.
Sigla UML