Informació general


Tipus d'assignatura: Obligatòria

Coordinador: Alfons Palacios Gonzàlez

Trimestre: Primer trimestre

Crèdits: 6

Professorat: 

David Ródenas Picó
Josep Roure Alcobé 

Idiomes d'impartició


L'idioma d'impartició principal a classe és el Català.

Tanmateix:

- tot el material de l'assignatura disponible està en anglès,
- les eines usades i les seves documentacions està en anglès,
- tots els treballs i totes les entregues que es fan cal que siguin en anglès.
  (això inclou codi, comentaris, documentació, interfícies, etc.)

Competències


Competències bàsiques
  • B2_Que els estudiants sàpiguen aplicar els seus coneixements a la seva feina o vocació d'una forma professional i tinguin les comptències que demostren mitjançant l'elaboració i defensa d'arguments i la resolució de problemes dins de la seva àrea d'estudi

  • B4_Que els estudiants puguin transmetre informació, idees, problemes i solucions a un públic tan especialitzat com no especialitzat

  • B5_Que els estudiants hagin desenvolupat aquelles habilitats d'aprenentatge necessàries per emprendre estudis posteriors amb un alt grau d'autonomia

Competències específiques
  • EIS1_Capacitat per a desenvolupar, mantenir i avaluar serveis i sistemes software que satisfacin tots els requisits de l'usuari i que es comportin de forma fiable i eficient, siguin assequibles de desenvolupar i mantenir i compleixin normes de qualitat, aplicant les teories, principis, mètodes i pràctiques de l'enginyeria del software

  • EIS2_Capacitat per a valorar les necessitats del client i especificar els requisits software per a satisfer aquestes necessitats, reconciliant objectius en conflicte, mitjançant la cerca de compromisos acceptables, dins de les limitacions derivades del cost, del temps, de l'existència de sistemes ja desenvolupats i de les pròpies organitzacions

  • EIS3_Capacitat per donar solució a problemes d'integració en funció de les estratègies, estàndards i tecnologia disponibles

  • EIS4_Capacitat d'identificar i analitzar problemes i dissenyar, desenvolupar, implementar, verificar i documentar solucions software sobre la base d'un coneixement adequat de les teories, models i tècniques actuals

  • EIS5_Capacitat d'identificar, avaluar i gestionar els riscos potencials associats que es puguin presentar

  • EIS6_Capacitat per a dissenyar solucions apropiades en un o més dominis d'aplicació, utilitzant mètodes de l'enginyeria del software que integren aspectes ètics, socials, legals i econòmics

  • ESI2_Capacitat per determinar els requisits dels sistemes d'informació i comunicació d'una organització, atenent a aspectes de seguretat i compliment de la normativa i legislació vigent

  • ESI3_Capacitat per participar activament en l'especificació, disseny, implementació i manteniment dels sistemes d'informació i comunicació

Competències transversals
  • T1_Que els estudiants coneixin un tercer idioma, que serà preferentment l'anglès, amb un nivell adequat de forma oral i per escrit, d'acord amb les necessitats que tindran les graduades i els graduats a cada titulació

  • T2_Que els estudiants tinguin capacitat per a treballar com a membres d'un equip interidisciplinar ja sigui com un membres més, o realitzant tasques de direcció amb la finalitat de contribuir a desenvolupar projectes amb pragmatisme i sentit de la responsabilitat, assumint compromisos tenint en compte els recursos disponibles

Descripció


L'assignatura de Laboratori de Software 2 del primer trimestre de quart curs, és la última de les dues assignatures anomenades Laboratori de Software. La seva impartició està pensada en dedicar 1 ECTS a la part de teoria i 5 ECTS a practicar els conceptes exposats a teoria i els adquirits a la resta d’assignatures.

Aquesta assignatura consistirà en la creació d'una aplicació client servidor mitjançant en grup tot respectant la metodologia SCRUM i de continuos delivery.

L'alumne, a més d'implementar l'aplicació i crear les proves de software, captarà requisits per a noves funcionalitats, els especificarà, i farà els rols de Scrum Master i Release Manager.

Tot el dessenvolupament es farà a github, i les contribucions de l'equip es regularan mitjançant pull requests.

El codi es desenvoluparà amb Java Spring + JPA al costat servidor, Javascript React + Redux al client, i es comunicarà amb protocol REST.

Aquesta assignatura disposa de recursos metodològics i digitals per fer possible la seva continuïtat en modalitat no presencial en el cas de ser necessari per motius relacionats amb la Covid-19. D’aquesta forma s’assegurarà l’assoliment dels mateixos coneixements i competències que s’especifiquen en aquest pla docent.

Resultats d'aprenentatge


A nivell general, aquesta assignatura contribueix als següents resultats d'aprenentatge especificats per a la matèria a la qual pertany (Enginyeria del Software):

- Utilitzar de forma apropiada teories, procediments i eines en el desenvolupament professional de l'enginyeria informàtica en tots els seus àmbits (especificació, disseny, implementació, desplegament -implantación- i avaluació de productes) de manera que es demostri la comprensió dels compromisos adoptats en les decisions de disseny.
- Fer servir les eines d'un entorn de desenvolupament de programari per a crear i desenvolupar aplicacions.
- Assumir els rols i les funcions del cap del projecte i aplicar, en l'àmbit de les organitzacions les tècniques de gestió i programació del temps, dels costos i dels aspectes financers, dels recursos humans i del risc.
- Demostrar coneixement i saber aplicar les tècniques apropiades per a modelar i analitzar els diferents tipus de decisions.
- Gestionar i resoldre els problemes i conflictes gràcies a la capacitat de generar alternatives o escenaris de futur convenientment analitzats, integrant els aspectes d'incertesa i els múltiples objectius a considerar.
- Controlar versions i configuracions del projecte.
- Prendre iniciatives que generin oportunitats, nous objectes o solucions noves, amb una visió d'implementació de procés i de mercat, i que impliqui i faci partícips als altres en projectes que s'han de desenvolupar (capacitat d'actuar de manera autònoma).
- Especificar, dissenyar, implementar, gestionar i mantenir sistemes i serveis programari complexos i / o crítics.
- Controlar la qualitat i dissenyar proves en la producció de programari.
- Definir i gestionar els requisits d'un sistema software.
- Comprendre i utilitzar eficaçment manuals, especificacions de productes i altra informació de caràcter tècnic escrita en anglès.
- Planificar i utilitzar la informació necessària per a un treball acadèmic (per exemple, per al treball final de grau) a partir d'una reflexió crítica sobre els recursos d'informació utilitzats. Gestionar la informació de manera competent, independent i autònoma. Avaluar la informació trobada i identificar les llacunes presents.
- Garantir que els sistemes TIC d'una organització funcionen de forma adequada, són segurs, i estan adequadament instal·lats, documentats, personalitzats, mantinguts i substituïts, i que les persones de l'organització reben un suport TIC correcte.
- Dirigir, planificar i coordinar la gestió de la infraestructura informàtica: maquinari, programari, xarxes i comunicacions.

 

A un nivell més concret, en acabar l’assignatura l’estudiant o estudianta ha de ser capaç de:

- RA1: Crear aplicacions multiusuari client/servidors amb interfície web/mobile.
- RA2: Gestionar el desenvolupament d'un producte informàtic en equip, així com dirigir l'equip per assegurar el correcte desenvolupament.
- RA3: Crear i gestionar les proves de qualitat d'un producte informàtic.
- RA4: Captar i crear els requisits d'un producte informàtic, analitzar-los, definir-los, i presentar-los a membres externs al desenvolupament.
- RA5: Capacitat de mantenir un codi existent, i afegir noves funcionalitats, com a part d'un equip.
- RA6: Presentar i negociar noves funcionalitats amb membres interns i externs al desenvolupament.
- RA7: Capacitat de coordinar un equip fins d'un entorn i vetllar pel correcte desenvolupament del software.
- RA8: Vigilar i gestionar noves funcionalitats tot interaccionant amb altres membres de l'equip i assegurant la correcte correcta qualitat. 
- RA9: Aplicar noves funcionalitats a la versió de producció així com fer el seu desplegament.

 

Metodologia de treball


El treball en aquesta assignatura, malgrat organitzar-se en grups, serà de caràcter unipersonal.

Cada alumne participarà en el desenvolupament d'una aplicació client/servidor amb interfície web/mobile, però no tan sols des del punt de vista del codi, sinó també des del punt de vista de captació de requisits, i noves funcionalitats.

Durant el trimestre se simularà un entorn de treball basat en Scrum on el professor farà el rol de cap / PO (Product Owner).

El curs s'organitzarà en Sprints que definiran un període durant el qual l'alumne contribuirà al projecte.

 


Normes de realització de les activitats

Per a cada activitat, els docents informaran de les normes i condicions particulars que les regeixin.

Les activitats unipersonals pressuposen el compromís de l'estudiant de realitzar-les de manera individual. Es consideraran suspeses totes aquelles activitats en què l'estudiant no s'ajusti a aquest compromís, independentment del seu paper (origen o destí).

Igualment, les activitats que s'hagin de realitzar en grups pressuposen el compromís per part dels estudiants que l'integren de realitzar-les en el si del grup. Es consideraran suspeses totes aquelles activitats en què el grup no hagi respectat aquest compromís amb independència del seu paper (origen o destí).

Totes les activitats realitzades en aquesta assignatura es consideren que es realitzen de forma unipersonal; el resultat de cada contribució al grup s'haurà de negociar amb la resta del grup, amb preferència primer al professor, i després al Scrum Master si es tracta de funcionalitats o al Release Manager si són de qualitat i detalls d'implementació.

En les activitats realitzades en grup el docent personalitzarà la qualificació per a cada integrant del grup.

Qualsevol activitat no lliurada es considerarà puntuada amb zero punts.

És potestatiu dels docents acceptar o no lliuraments fora dels terminis que s'indiquin. En el cas que aquests lliuraments fora de termini s'acceptin, és potestatiu del docent decidir si aplica alguna penalització i la quantia d'aquesta.

Continguts


1. Disseny d'arquitectures Client/Servidor

Ús d'arquitectures distribuïdes en arquitectura client/servidor. El servidor estableix una interfície que el client usarà per comunicar-se amb l'usuari. El servidor i el client es comunicaren principalment amb REST.

2. Arquitectura d'Injecció de dependències automàtica + JPA

Ús de tecnologies d'injecció de dependències automàtica Spring.
Ús de l'API JPA al back-end que automàticament connecta amb una font de dades i estructura les taules i relacions de forma automàtica.

3. Arquitectura client MVC

Ús d'una arquitectura MVC al client capaç de gestionar correctament les dades i la comunicació amb el servidor.

4. Project Management

Ús del sistema SCRUM en equips on els alumnes hauran de presentar els resultats freqüentment al PO. El professor farà el rol de PO. Dins de cada grup i en rotació un dels alumnes farà de Scrumm Master.
Els alumnes també faran la captura de requisits, presentació de funcionalitats i disseny d'implementació.

5. Continuous Delivery

Ús d'un sistema de continuous delivery. S'usen proves de software per traçar i assegurar que s'implementa l'especificació correctament. A cada iteració, amb un sistema de rotació, cada un dels alumnes farà de Release Manager, creant i validant la versió a desplegar, i fent el desplegament a un entorn real de producció.

6. Qualitat i Seguretat

El sistema implantat ha de passar alts estàndards de qualitat i seguretat. Tot el codi passarà per diverses code reviews i haurà d'aplicar els patrons apresos en assignatures anteriors. També tot el codi haurà de disposar de testos amb una cobertura de quasi el 100%, i aquests hauran de contemplar totes les excepcions que puguin comprometre el servidor.

Activitats d'aprenentatge


PROJECTE EN GRUP (RA1 - RA9)

El fil conductor de tot el trimestre és la creació/manteniment d'una aplicació en grup tot i que la contribució de cada alumne del grup al projecte serà individual.

Les tasques de l'alumne durant el trimestre seran:

- Blog: Captació, definició, especificació i presentació de requisits,
- Com: Interacció amb el professor PO que ordenara les històries a implementar,
- Qlt: Vetllar per la qualitat i correctesa del codi propi,
- Test: Crear i mantenir tests acurats que validin amb la màxima cobertura possible el codi i funcionalitats,
- CRev: Proactivament revisar els pull request d'altres alumnes del mateix grup i aprovar-los o fer recomanacions de canvis,
- SM: Quan li correspongui, fer el rol de scrum master, vetllar pel correcte dessenvolupament del producte i fer l'informe de progrés resultant de la seva gestió,
- RM: Quan li correspongui, fer el rol de release manager, validar els pull requests, vetllar per la qualitat del producte, i garantir el correcte ús del repositori, fer l'informe de progrés resultant de la seva gestió i desplegament a producció,
- BE: Implementació de back-end,
- FE: Implementació de front-end

Pel desenvolupament del projecte es definiran històries que representaran una funcionalitat a afegir al producte. L'alumne haurà de ser capaç de fer totes les etapes d'una sola història.
Nota: tots els alumnes hauran de contribuir en tots els rols i totes les tasques. Malgrat fer-se en grup, no es podran dividir les tasques de forma que una història s'implementi entre diversos alumnes. Tots els alumnes implementaran front-end, tots back-end, i tots faran captació i definició d'històries. Exceptuant el main de l'aplicació, la cobertura cal que sigui del 100%, i tots els testos cal que estiguin justificats amb l'especificació de les funcionalitats.

El grup es reunirà amb el professor regularment en períodes de temps identificats com Sprints. En cada Sprint es reorganitzarà les tasques a desenvolupar, s'avaluarà la feina feta, i els rols de scrum master i release manager podran canviar d'alumne dins del grup.

 

EXAMEN INDIVIDUAL (RA1 - RA5)

Prova individual eminentment pràctica.

Caldrà lliurar la resolució de la prova.

Aquesta prova representa el 50% de la qualificació final de l'assignatura.

Objectius específics: L'objectiu d'aquesta activitat és avaluar si l’estudiant sap:

- Captar, definir, i especificar requisits

- Aplicar els principis del disseny orientat a objectes.

- Implementar programes amb interfície gràfica per l'usuari i web.

- Persistir objectes a bases de dades relacionals mitjançant l'ús del JPA.

- Implementar proves de qualitat automatitzada.

 

Aquesta assignatura és de caràcter completament pràctic. Reprodueix el desenvolupament d’un software client/servidor web de forma iterativa en grups. S’exigeix a l'alumne participar en totes les fases de desenvolupament, des de la captació de noves idees i requeriments fins al desplegament en un entorn real a internet. El professor fa el rol de stakeholder de l’empresa amb qui l’alumne ha de negociar les noves funcionalitats, els possibles costos, i el resultat. La qualitat juga un paper essencial, juntament amb la traçabilitat. Totes les noves funcionalitats es documenten en el blog de l'aplicació, de caràcter comercial, que s’usen d’entrada a algoritmes de test automàtics que verifiquen el correcte funcionament de l’aplicació. L’alumne també serà responsable de la qualitat del codi, tan seva com la dels seus companys mitjançant la revisió de codi. S’exigeix a l'alumne implementar en tots els nivells d’aplicació, tant client com servidor, i participar en tots els rols. L'avaluació es farà mitjançant entregues contínues individuals signades amb clau de hash a un repositori de codi indicat pel professor, eines automàtiques de traçament de cicles de vida de features i code reviews, interacció amb el professor al seu rol de stakeholder, i entrevistes/qüestionaris sobre la seva eficàcia en cada rol. Això fa que malgrat ser una pràctica en grup, cada avaluació sigui individual.

L'examen té un abast molt més reduït, no hi ha interacció amb altres persones, però té per objectiu contrastar que l'alumne ha sigut capaç d'assolir els aspectes més tècnics. En aquest es demana la captació de requisits, especificació, disseny, implementació, creació de test i integració completa d'una proposta feta pel professor sobre una base de codi igual o de similars característiques a la usada en la pràctica. Opcionalment el professor podrà complementar aquesta prova amb una prova teòrica sobre parts de l'arquitectura bàsica de la pràctica.

En l'àmbit competencial la pràctica, que majoritàriament s’haurà de desenvolupar en temps no presencial, cobreix totes les competències comunes i específiques de l’assignatura:
EFB4: interacció amb múltiples eines i IDEs, tant editors o navegadors com bases de dades
CIN1: compleix en tots els cicles de vida amb la màxima fiabilitat, seguretat, qualitat i conformitat amb principis ètics i legals
CIN2: participa en tot el procés de desenvolupament fins al desplegament, aprenent les conseqüències de les seves accions
CIN3: negocia noves funcionalitats amb professor i companys
CIN4: cal que siguin capaços de determinar i desplegar l'aplicació d'acord amb els estàndards i lleis actuals
CIN5: manté i evoluciona la solució en un entorn real
CIN8: aplica alts estàndards de proves de software, revisa qualitat de codi, i arquitectura cada funcionalitat
CIN12: desplega la pràctica en un entorn web real
CIN13: l'aplicació segueix l'esquema client/servidor mitjançant protocols web amb base de dades
CIN16: participa en totes les etapes, incloent-hi múltiples millores de l’aplicació
CIN17: disenya i implementa noves interfícies d'usuari tenint en compte estandars d'accessibilitat
CIN18: cal que considerin la normativa nacional, europea i internacional en les condicions de desplegament
EIS1: aplica alts estàndards de proves de software i les lliga amb els requisits,
EIS2: fa propostes de noves funcionalitats donat un entorn ja existent i analitzant costos
EIS3: soluciona els problemes basats en estàndards i tecnologies disponibles
EIS4: busca alternatives d'ús avançant-se a problemes de funcionament o seguretat amb proves de software
EIS5: quan se li assigna el rol, vetlla per la correctesa del mètode, els riscos i proposa solucions
EIS6: aplica alts estàndards de proves de software i es revisa que el codi tingui bona qualitat i els patrons ben aplicats,
ESI2: até als principis de seguretat i cumpliment legal en la captació de requisits i especificació
ESI3: integra propostes amb seguretat completa gràcies a un entorn de testing

En l'àmbit bàsic i transversal:
CB.2, CB.4, CT.2: malgrat ser avaluació personal, necessiten comunicar-se, convèncer a altres membres de l’equip i professor i coordinar la feina amb un objectiu comú
CB.5: ells mateixos s’estableixen els reptes i aprenen les seves limitacions
CT.1: tota la documentació, codi, i documents de treball cal que siguin en anglès.

Per tal de superar (aprovar) les activitats avaluatives, els estudiants hauran de demostrar

  • Que han adquirit els coneixements teòrics relatius als continguts de l’assignatura i que la seva comprensió els permet de portar-los a la pràctica [MECES-2 punt a, punt c]
  • Que poden desenvolupar solucions a problemes que, si bé són semblants a d’altres vistos anteriorment, presenten aspectes que són nous [MECES-2 punt f]

Sistema d'avaluació


La nota final es calcularà amb les qualificacions de les activitats ponderades de la forma següent:

- EXAMEN INDIVIDUAL: 50%

- PRÀCTICA: PROJECTE EN GRUP: 50%


El projecte en grup, tot i fer-se en grup, la participació i la nota serà individual. Aquesta serà la ponderació de les diverses notes de les diverses tasques portades a terme per l'alumne. La nota de cada tasca cal que sigui 3 o superior, en cas contrari la nota de tot el projecte en grup serà el mínim de les notes de cada tasca.

Si la nota de l'examen és inferior a 3, o la nota de la pràctica és inferior a 3, la nota final de l'assignatura serà la mínima d'elles.

Només podrà recuperar-se la l'examen individual (el projecte en grup no es podrà recuperar). El 50% de la nota final de l’assignatura serà la més gran entre la prova de recuperació i l’obtinguda en l'examen.
 

Per poder realitzar la prova de recuperació l’estudiant haurà de complir les tres condicions següents:

- La nota de l’assignatura és inferior a cinc.

- La nota de la prova 1 és superior a 3.

- La nota que ha obtinguda en cada una de les tasques de la pràctica ser 3 o més.

 

Sobre la avaluació de la pràctica:

Durant el trimestre, s'anirà registrant la activitat avaluable de cada alumne que s'usuarà per calcular la nota del projecte en grup.

En cada sprint s'avaluarà la participació individual de cada alumne al projecte així com el dessenvolupament dels possibles rols que hagi portat a terme.

És imprescindible que l'alumne contribueixi de forma uniforme en tots els sprints i en totes les tasques. Es valora més la constància en la contribució en totes les tasques que el resultat final del projecte en grup de l'assignatura.

Donada la regularitat dels sprint, a discrecció del profesor, es dóna l'opció d'obviar els resultats d'un o dos sprints de cada alumne.

El número exacte d'sprints, i el canvi de rol dins de cada sprint es deixen a discreció del professor, haguent tots els alumnes cumplir amb tots els rols.

 

Requisits hardware:

Cal que l'alumne disposi d'un equip propi amb el software i versions requerides pel professor. Haurà de disposar de l'equip durant les sessions de teoria i pràctica i també durant l'examen.

Bibliografia


Bàsic

Spring Documentation - https://spring.io

Agile Software Development: Principles, Patterns, and Practices — Robert C. Martin,

Guide: Writing Testable Code http://misko.hevery.com/code-reviewers-guide/ —Miško Hevery

Complementary

UML for Java Programmers — Robert C. Martin