Enginyeria del Software (21418)
Titulació/estudi: Grau en Enginyeria en Informàtica
Curs: segon
Trimestre: segon i tercer
Nombre de crèdits ECTS: 8 crèdits
Hores de dedicació de l'estudiant: 200 hores
Llengua o llengües de la docència: català i castellà
Professor: Vladimir Estivill-Castro
1. Presentació de l'assignatura
L'enginyeria del software s'encarrega de desenvolupar i de fer el manteniment dels sistemes de software perquè és comportin eficientment i s'hi pugui confiar. També es dedica a desenvolupar software de manera assequible per tal de satisfer els requeriments dels clients i dels usuaris que han definit i especificat la solució. És una disciplina important per l'espectre i l'impacte ampli que té el software en les activitats econòmiques de la humanitat i la societat moderna i pel paper que juga el software en sistemes crítics i en la seguretat de moltes aplicacions. La disciplina integra mètodes formals de les matemàtiques, de les ciències de la computació i de les pràctiques i orígens de l'enginyeria.
Així doncs, l'enginyeria del software és l'aplicació sistemàtica, disciplinada, quantificable i rigorosa d'enfocaments de desenvolupament, operació, manteniment i implantació del software. Evidentment, l'estudi dels enfocaments que condueixen a la producció de software de qualitat és la matèria central de l'enginyeria de software. Simplement, l'enginyeria del software es preocupa per construir correctament el software. El software no ha de fallar perquè, avui en dia, es controlen, es fan servir o es regulen milers d'activitats a través de sistemes que executen software.
La enginyeria del software engloba una sèrie de coneixements, definicions de processos, pràctiques, eines i estàndards. Tot aquest coneixement, l'utilitzen els equips de treball que porten a terme tasques que produeixen productes de software d'alta qualitat i que compleixen les necessitats dels usuaris. Les tasques inclouen l'anàlisi i l'especificació, el disseny, la implementació, la verificació, la realització de proves, el manteniment i la gestió dels projectes. Tot això a temps i dins del pressupost.
L'enginyeria del software moderna també té un enfocament important perquè els projectes produeixin sistemes sostenibles i que el seu impacte al medi ambient sigui mínim i els seus objectius considerin també principis socials i ètics. Els enginyers de software apliquen la tecnologia per tal de desenvolupar nous sistemes, construir nous instruments i utilitzar la tecnologia per al progrés i el benefici general, el mateix temps que es garanteix la qualitat dels resultats.
2. Competències que s'han d'assolir
S'han de tenir capacitats per al treball en equip, la solució de problemes, l'organització, la planificació, el disseny conceptual i les habilitats cognitives.
Competències generals |
Competències específiques |
Instrumentals Interpersonals Sistèmiques |
Les competències específiques es resumeixen en tres grans capacitats. Si es desglossen aquestes capacitats i competències, a continuació obtindrem els detalls següents sobre les competències específiques. 2.- Capacitat d'analitzar i de descriure els requeriments d'un problema complex. 3.- Capacitat de dissenyar una solució per a un problema complex d'enginyeria del software a partir de requeriments. |
3. Continguts
La descripció breu del contingut és:
- Cicle de vida del software
- Modelització visual i ús de llenguatges com UML
- Anàlisi i disseny orientat a objectes
- Ús i aplicació de patrons de l'enginyeria del software
La descripció detallada és la següent:
3.1. Part I: L'enginyeria de software i els seus processos.
Bloc de continguts 1: Cicle de vida i metodologies
Conceptes:
- Noció d'enginyeria del software
- Relació de l'enginyeria del software amb els àmbits professionals de la informàtica i amb altres professions.
- Cicle de vida dels productes de software i els seus models.
Procediments:
- Identificació de les diverses parts o processos del cicle de vida genèric i de les activitats que es realitzen en cada fase.
- Anàlisi dels avantatges i els desavantatges dels diferents esquemes per a un cicle de vida i en relació amb el context d'un projecte determinat.
Actituds:
- Interès per l'enginyeria del software i per la seva importància en la majoria dels àmbits de la professió informàtica.
- Esperit crític per avaluar els avantatges i els inconvenients dels diversos models d'un cicle de vida i de les metodologies de l'enginyeria del software.
Bloc de continguts 2: enginyeria de requeriments
Conceptes:
- Definició i classificació de tipus de requeriments
- Elements d'un document de requeriments i formalismes associats
- Cicle de vida de la enginyeria de requeriments
Procediments:
- Classificació dels requeriments funcionals, no funcionals i del domini.
- Identificació de les parts interessades i d'actors.
Actituds:
- Utilització de diagrames de casos d'ús en UML per analitzar i descobrir requeriments.
- Redacció de documents de requeriments com a resultat d'una anàlisi d'un cas pràctic.
- Manteniment d'un document de requeriments i gestió de la seva actualització com a resultat de canvis.
Bloc de continguts 3: Metodologies
Conceptes:
- Descripció de diversos exemples de metodologies
- Mètodes àgils en oposició als tradicionals
- Metodologies basades en processos en oposició a metodologies basades en persones.
Procediments:
- Identificació de beneficis i inconvenients de diverses metodologies.
- Aplicacions de les pràctiques i processos d'algunes de les metodologies.
Actituds:
- Actitud crítica per avaluar una metodologia.
3.2. Part II: Anàlisi i disseny orientat a objectes.
Bloc de continguts 4: Anàlisi i disseny orientat a objectes
Conceptes:
- Definició i propietats dels objectes
- Definició i propietats de les classes
- Les relacions d'herència, composició, agregació, associació i dependència.
- El polimorfisme i les jerarquies d'herència
- El llenguatge C++ com a exemple d'un llenguatge orientat a objectes.
Procediments:
- Divisió d'un problema complex utilitzant els conceptes i els procediments del paradigma orientat a objectes.
- Utilització del llenguatge UML per modelar els sistemes orientats a objectes.
- Utilització d'un llenguatge com l'UML per modelar els sistemes orientats a objectes.
- Utilització d'un llenguatge com el C++ per implementar un disseny orientat a objectes.
- Desenvolupament dirigit per proves.
Actituds:
- Les bones pràctiques de programació (encasellament, no duplicació, mètodes curts i nomenclatura clara)
- Adequació a les convencions per a la codificació en l'equip de treball.
- Adaptació al canvi, el codi que conforma una modelització en evolució constant.
- Comprensió dels avantatges del desenvolupament dirigit per proves.
Bloc de continguts 5: La modelització amb UML
Conceptes:
- Avantatges de la modelització visual
- Definició i història breu de l'UML
- Els principals diagrames UML i els elements inclosos.
Procediments:
- Utilitat dels diversos diagrames UML i el seu ús en diverses fases del cicle de vida.
- Comprensió dels diagrames UML i la seva aplicació a un problema concret.
- Utilització dels diagrames UML més importants (diagrames de casos d'ús estàtics i de seqüència) en la resolució d'un problema i, en menor mesura, d'alguns altres tipus de diagrames.
Actituds:
- Acceptació de la importància d'utilitzar un formalisme estàndard a l'hora d'utilitzar diagrames.
Bloc de continguts 6: Patrons de software
Conceptes:
- Concepte de patró en el software
- Catàleg de patrons i la seva utilitat
Procediments:
- Utilització de l'UMP per entendre un patró de disseny concret.
- Utilització dels catàlegs de patrons per identificar un patró com a solució genèrica d'un problema concret.
- Utilització de patrons en el disseny d'una solució per a un cas concret.
Actituds:
- No s'ha de tornar a inventar la roda. La gran majoria dels problemes que apareixen en l'àmbit pràctic ja estan solucionats i la solució està disponible en forma d'un patró que segurament té característiques de qualitat superiors a allò que podem desenvolupar en una primera iteració aïllada.
4. Avaluació a nivell d'assoliment de competències
4.1. Criteris d'avaluació generals
S'avaluaran tots els tipus de competències de la secció 3, així com també les competències especifiques a través de les següents activitats que s'avaluen i són obligatòries:
- Un examen final quan finalitzin els dos trimestres. Per aprovar-lo, s'ha de resoldre satisfactòriament un problema concret en un temps limitat.
- Problemes pràctics resolts al laboratori (en parelles) i que poden formar part d'un projecte global durant el transcurs del curs en dos trimestres (l'avaluació és contínua i la nota de les vuit sessions de problemes pràctics correspon a un 40%).
- Tres petits exàmens parcials que profunditzen en conceptes i la seva discussió pel que fa als continguts de l'assignatura.
- Participació i discussió durant els seminaris del material de la classe, les sessions de seminari i els exercicis realitzats durant els seminaris.
La nota final de l'assignatura es calcula així:
Examen final (10%)
Tres petits exàmens (10%)
Sessions de problemes al laboratori (40%)
Cada sessió compta un 5% (8x5%-40%)
Participació en seminaris i discussió d'exercicis pràctics (20%)
Cada sessió compta un 2% (10x2%=20%)
Sempre que es compleixi el següent criteri d'integritat de l'avaluació:
S'HA D'APROVAR L'EXAMEN FINAL, ALMENYS DOS DELS TRES PETITS EXÀMENS, ALMENYS EL 60% DELS EXERCICIS DE SEMINARI I COMPLETAR MÉS DEL 50% DE LES SESSIONS DE PROBLEMES PRÀCTICS PER APROVAR L'ASSIGNATURA.
4.2. Detall de l'avaluació
Examen Final
A l'examen final, es plantejarà un problema concret i una sèrie de preguntes d'anàlisi i disseny. El problema s'ha de resoldre en un temps limitat. Es podrà disposar dels apunts i de material complementari.
Què s'avaluarà?
- Competències generals:
- Resolució de problemes
- Organització i planificació
Competències específiques:
- Capacitat d'analitzar i descobrir els requeriments d'un problema complex de l'enginyeria del software.
- Capacitat de dissenyar una solució per a un problema complex de software a partir dels requeriments donats.
Quan s'avaluarà?
- Durant el període d'exàmens finals del tercer trimestre.
- Tres petits exàmens
- En un temps limitat, s'haurà de resoldre diversos petits exercicis que corresponen a l'aplicació dels conceptes. Els exercicis seran semblants als exercicis resolts abans en discussions de seminaris o al laboratori i s'enfoquen a una pràctica concreta o a un concepte específic.
Què s'avaluarà?
- Competències generals
- Resolució de problemes
- Organització i planificació
Competències especifiques
- Capacitat d'analitzar i descobrir els requeriments d'un problema complex de l'enginyeria del software.
- Capacitat de dissenyar una solució per a un problema complex de software a partir dels requeriments donats.
- Capacitat d'aplicar l'UML
- Capacitat d'aplicar conceptes de l'anàlisi i el disseny orientat a objectes
- Capacitat d'aplicar i usar patrons de l'enginyeria de software
- Capacitat de distingir entre diferents metodologies de l'enginyeria del software
- Quan s'avaluarà?
Aproximadament a la meitat de cadascun dels dos trimestres que formen l'assignatura i al final del primer trimestre de l'assignatura.
Sessions de problemes al laboratori
En el laboratori, s'introduiran eines que donen suport les metodologies de l'enginyeria del software i que conformaran fases d'un projecte per realitzar en equip i on es posaran en pràctica les competències generals i específiques. S'ha de col·laborar amb una altra persona i realitzar una comunicació pràctica tant oral com escrita adquirint els papers d'usuaris i de parts interessades.
Què s'avaluarà?
- Competències generals
- Resolució de problemes
- Organització i planificació
- Treball en equip
- Comunicació efectiva i eficient
Competències especifiques
- Capacitat d'analitzar i descobrir els requeriments d'un problema complex de l'enginyeria del software.
- Capacitat de dissenyar una solució per a un problema complex de software a partir dels requeriments donats.
- Capacitat d'aplicar l'UML
- Capacitat d'aplicar conceptes de l'anàlisi i el disseny orientat a objectes
- Capacitat d'aplicar i usar patrons de l'enginyeria de software
- Capacitat de distingir entre diferents metodologies de l'enginyeria del software
Quan s'avaluarà?
- Es reparteixen les 8 sessions de problemes durant els dos trimestres. Per tant, hi ha una sessió de problemes aproximadament cada 3 setmanes. Normalment, les activitats d'una sessió de problemes i laboratori s'hauran de completar durant la sessió i s'hauran d'entregar els resultats d'una sessió de problemes abans de la sessió següent.
Participació en seminaris i discussió d'exercicis pràctics
Durant les sessions de seminari, es discutiran les solucions i conceptes en casos i exercicis pràctics. Probablement es requerirà que els estudiants es presentin amb solucions parcials o completes i que s'exposin i es discuteixin davant de la classe o tutor. L'objectiu és aprofundir en les capacitats generals i específiques i aconseguir una retroalimentació i avaluació contínua.
Què s'avaluarà?
- Competències generals
- Resolució de problemes
- Organització i planificació
- Treball en equip
- Comunicació efectiva i eficient
Competències especifiques
- Capacitat d'analitzar i descobrir els requeriments d'un problema complex de l'enginyeria del software.
- Capacitat de dissenyar una solució per a un problema complex de software a partir dels requeriments donats.
- Capacitat d'aplicar l'UML
- Capacitat d'aplicar conceptes de l'anàlisi i el disseny orientat a objectes
- Capacitat d'aplicar i usar patrons de l'enginyeria de software
- Capacitat de distingir entre diferents metodologies de l'enginyeria del software
Quan s'avaluarà?
- Es reparteixen les 20 sessions de problemes durant els dos trimestres, és a dir, 10 sessions cada trimestre i, per tant, una sessió de seminari setmanal. Normalment, les activitats d'una sessió de seminari consisteixen en la discussió de solucions de casos concrets i problemes específics i en la discussió col·lectiva o presentació per part dels estudiants de les seves solucions per debatre alternatives i obtenir una retroalimentació del facilitador del seminari.
5. Bibliografia i recursos didàctics
5.1. Bibliografia bàsica
- Fowler, Martin UML distilled : a brief guide to the standard object modeling language / Martin Fowler with Kendall Scott Reading (Mass.) : Addison-Wesley, cop. 2000
- Meyer, Bertrand Construcción de software orientado a objetos / Bertrand Meyer traducción: Miguel Katrib Mora, Rafael García Bermejo, Salvador Sánchez ; revisión técnica: Jesús García. Madrid [etc.] : Prentice Hall, 1998
- Sommerville, Ian Software engineering / Ian Sommerville Harlow : Addison-Wesley, 2009
- Larman "Applying UML and patterns: an introduction to object-oriented analysis and design"
5.2 Bibliografia complementària
- Costal, Dolors. Enginyeria del software especificació : especificació de sitemes orientats a objectes amb la notació UML / Dolors Costal, M. Ribera Sancho, Ernest Teniente Barcelona : Edicions UPC, 2000
- Joyanes Aguilar, LuisPla docent assignatura Estudis Programación orientada a objetos / Luis Joyanes Aguilar Madrid : Osborne/McGraw-Hill, cop. 1998
- Peralta Giménez, Allen J. Enginyeria del software : programació orientada a objectes / Allen J. Peralta Giménez, Horacio Rodríguez Hontoria Barcelona : Edicions UPC, 1994 Upper Saddle River, N.J. : Prentice Hall PTR, cop. 1998
- Pressman, Roger S. Ingeniería del software un enfoque práctico / Roger S. Pressman adaptación: Darrel Ince traducción: Rafael Ojeda Martín ... [et al.] dirección, coordinación y revisiónMadrid McGraw-Hill cop. 2002
- Schach, Stephen R. Software engineering / Stephen R. Schach Boston : Irwin, cop. 1993 Shtern, Victor
- Core C++ : a software engineering approach / Victor Shtern Upper Saddle River : Prentice Hall PTR, cop. 2000
- Stroustrup, Bjarne The C++ programming language / Bjarne Stroustrup
5.3. Recursos didàctics
- Apuntes en format lliure
- Col·lecció de problemes
- Web de l'assignatura al Moodle
6. Metodologia
L'assignatura representa, per a l'estudiant, 18 sessions de teoria (2 hores cadascuna), 8 sessions de problemes als laboratoris (2 hores cadascuna) i 20 sessions de seminari (2 hores cadascuna) durant dos trimestres.
Les sessions de teoria són classes magistrals on participen tots els estudiants i s'introdueixen els conceptes teòrics bàsics, les metodologies i es demostren els procediments adequats per a la resolució de problemes complexos amb eines i tècniques de l'enginyeria del software.
Les sessions de seminari són en grups petits i consisteixen en la discussió de problemes concrets i en la retroalimentació immediata derivada de la discussió constructiva de solucions proposades per els estudiants i facilitadors d'exercicis concrets.
Les sessions de problemes són en grups mitjans però els estudiants treballen per parelles en la culminació de fases d'un projecte de software aplicant també eines concretes per a la producció de software en un context d'enginyeria de software. Aquestes sessions de laboratori tenen com a objectiu una realització pràctica i una il·lustració concreta que permet utilitzar eines com les eines CASE, IDE o les de control de versions. El seu objectiu es posar els conceptes teòrics en pràctica i serveixen per complementar les competències i les capacitats en un sentit real, concret i pràctic.