Curs 2011-2012

Enginyeria de Software I (12460)

Titulació/estudi: Enginyeria Informàtica
Curs: 3r
Trimestre: 1r
Nombre de crèdits ECTS: 9 crèdits
Hores dedicació estudiant:
Llengua o llengües de la docència:

1. COMPETÈNCIES DE L'ASSIGNATURA


Competències generals

1. Resolució de problemes
Instrumentals:
- Habilitats cognitives (comprensió, interrelació d'idees i pensaments, anàlisi, síntesi...) (i): Totes aquestes competències generals són necessàries com a requisit previ per a les diferents competències que es presenten a continuació.
- Sentit comú (i): De forma similar aquesta competència és l'eina més important a l'hora de poder assolir les altres competències que es descriuen en aquest apartat.
- Organització del temps (i): Ser capaç de resoldre un problema complex de forma sub-òptima en un temps limitat, planificant abans la quantitat de temps que es destinarà a cada activitat.
- Cerca documental i de fonts de referència (i): Per resoldre qualsevol problema de certa complexitat s'ha de ser capaç d'accedir a fonts de documentació externa, destriant la informació relevant per al problema que s'està adreçant.

Sistèmiques:
- Gestió de la informació (s): Un problema complex se sòl presentar com un gran conjunt d'informació desestructurada però interrelacionada. S'ha de ser capaç d'indentificar la informació substancial, organitzar-la, relacionar-la i prioritzar-la per poder plantejar-se una anàlisi coherent.
- Anàlisi de punts febles i forts (s) : Ser capaç d'analitzar els punts febles i forts de les diverses opcions que es presenten per a solucionar un problema concret.
- Presa de decisions (s): A partir del resultat d'una anàlisi prèvia poder optar per una de les possibles opcions que es presenten, actuant de forma coherent amb la decisió presa.
- Introducció de millores (s): Apart de resoldre un problema és molt important ser capaç d'analitzar de forma crítica la solució final i introduir millores concretes.
- Capacitat per generar noves idees (creativitat) (s): Per resoldre un problema complex és important disposar de creativitat suficient com per a generar possibles alternatives.

Nota: En les competències i: instrumental, s: sistèmica, ip: interpersonal


2. Organització i planificació
Sistèmiques:
- Interès per la qualitat (s): Es tracta d'una competència bàsica per poder assolir les fites plantejades en un projecte amb suficients garanties.
- Disseny i direcció de projectes (s): S'ha de ser capaç de dissenyar i planificar les diverses tasques d'un projecte i després assumir la seva direcció per a que aquestes es duguin a terme en els plaços previstos.
- Planificació de canvi (s): Qualsevol projecte d'enginyeria ha d'estar preparat per a introduir canvis en qualsevol de les seves fases. L'alumne ha de ser capaç de planificar i avançar les possibles complicacions relacionades amb canvis en els requeriments o les solucions adoptades.
- Redisseny de processos (s): Quan un procés es mostra poc eficient o adient per a una situació concreta s'ha de poder redissenyar-lo, plantejant els canvis necessaris per a la seva millora.
- Capacitat d'adaptació a noves situacions (s): Un cop redissenyat un procés o introduit un canvi a la planificació s'ha de ser capaç d'adaptar-se a aquesta nova situació de forma eficient i en el menor temps possible.


3. Treball en equip
Interpersonals:
- Competència comunicativa (ip): En el context d'un treball en equip s'ha de ser capaç de comunicar els criteris propis i els resultats personals a la resta dels membres de forma convincent i clara utillitzant el llenguatge tècnic adient de forma que la comunicació resulti el menys ambigua possible. Aquesta competència comunicativa s'haurà d'assolir tant mitjançant comunicació verbal com escrita.
- Capacitat per comunicar-se amb experts d'altres àmbits (ip): De la mateixa manera és important ser capaç de comunicar-se amb experts d'altres àmbits o amb clients, abandonant en la mida del possible la jerga informàtica i adoptant un llenguatge planer i sintètic que sigui capaç de transmetre els punts inportants del què volem comunicar.
- Lideratge (ip): Ser capaç de prendre decisions en un grup de treball, comunicar-les de forma convincent i aconseguir el suport dels altres membres del grup.


4. Altres
Instrumentals:
- Ús d'instruments tecnològics (i): Poder aplicar diferents instruments tecnològics a la pràctica i ser capaç de decidir sobre la idoneïtat de la seva utilització.
- Capacitat per aplicar el coneixement teòric a la pràctica (s): S'ha de ser capaç d'aplicar el coneixement obtingut de forma teòrica (sobre diferents metodologies o forma d'organitzar processos i activitats) a la resolució d'un problema pràctic.

Sistèmiques:
- Capacitat d'aprendre a aprendre (s): Possiblement la competència general més important és la ser capaç d'aprendre noves tecnologies o assimilar experiències de forma acumulativa.

Competències Específiques:
Les competències específiques d'aquesta assignatura es poden resumir en quatre grans competències-eix:
- Coneixement de Metodologies de l'Enginyeria del Software:
- Capacitat d'analitzar i descriure els requeriments d'un problema complex d'enginyeria del software
- Capacitat de dissenyar la solució d'un problema complex d'enginyeria del software a partir d'uns requeriments

A continuació desglossarem i detallarem cadascuna d'aquestes competències-eix. Més endavant, al següent apartat, comentarem amb més detall com s'avaluaran cada competència.
1. Coneixement de diferents metodologies de l'enginyeria del software.
- Coneixement dels diferents tipus de "cicles de vida" del software (i)
- Capacitat de triar una metodologia concreta entre les existents segons les necessitats del cas concret (s)
- Capacitat d'adaptar la metodologia usant mesures correctores (i)
- Capacitat d'entendre com les decisions d'anàlisi, disseny i procés afecten el producte final (s)

2. Capacitat d'analitzar i descriure els requeriments d'un problema complex d'enginyeria del software.
- Capacitat d'extreure'n els requeriments: identificar "stakeholders", actors, casos d'ús, classificar requeriments segons siguin funcionals, no funcionals i de domini (s)
- Capacitat d'expressar-los de forma organitzada i tècnica (concreta, unívoca) (s)
- Domini d'algun llenguatge de modelització estàndar (per exemple l'UML) amb el qual ajudar-se per expressar els requeriments (i)
- Capacitat de treballar els requeriments en equip (ip)
- Capacitat de comunicar els requeriments al client, de forma planera, per obtenir "feedback" i validar-los (ip)

3. Capacitat de dissenyar la solució d'un problema complex d'enginyeria del software a partir d'uns requeriments
- Capacitat d'entendre uns requeriments donats (s)
- Capacitat d'organització i planificació de les diverses fases i tasques involucrades (s)
- Presa de decisions de disseny (s)
- Identificar les forces involucrades i trobar una solució de que les balanci.
- Capacitat per comunicar de forma convincent i clara les decisions preses en la resolució del cas pràctic (ip)
- Capacitat de treballar el disseny en equip (ip)
- Optimització del temps: Capacitat de trobar una aproximació prou bona a la solució d'un problema complex (s)
- Coneixement de tecnologies orientades a objecte (i)
- Domini un llenguatge orientat a objectes (per exemple el C++)
- Coneixement d'un llenguatge de modelatge estàndar (per exemple l'UML)
- Capacitat d'aplicar patrons de disseny.
- Capacitat d'implementar el disseny (s)
- Capacitat d'obtenir feedback del codi per modificar el disseny.
- Capacitat de realitzar testos automàtics de la solució implementada (s)

2. AVALUACIÓ


- Fase 1. Criteris d'avaluació generals:
S'avaluaran les 4 competències eix esmentades en l'apartat anterior així com les competències generals. A tal efecte es realitzaran les següents activitats avaluadores:
Obligatòries:
1. Examen final amb la resolució d'un problema pràctic en un temps limitat: 40% de la nota final
2. Pràctiques realitzades en parella amb la realització d'un projecte durant tot el trimestre i avaluació continuada: 40% de la nota final
3. Test teòric avaluant els coneixements adquirits a realitzar abans de l'acabament del trimestre: 15% de la nota final
4. Discussió sobre la resolució d'uns exercicis pràctics i participació a classe 5 % de la nota final

Per poder aprovar les quatre activitats obligatòries han de tenir una nota superior al 4. Per a la convocatòria extra-ordinària es conservarà la nota de les parts amb nota superior a 4.
A continuació detallarem i concretarem aquestes activitats

- Fase 2. Concreció
Activitat 1.Problema d'Examen
- Com s'avaluarà:
En un examen en que es plantejarà un problema concret amb una sèrie de preguntes d'anàlisi i disseny. El problema haurà de resoldre's en un temps limitat. Es podrà disposar d'apunts i material complementari.
- Què s'avaluarà:
Competències Generals:
1. Resolució de problemes
2 . Organització i planificatió
Competències Específiques:
3. Capacitat d'analitzar i descriure els requeriments d'un problema complex d'enginyeria del software.
4. Capacitat de dissenyar la solució d'un problema complex d'enginyeria del software a partir d'uns requeriments
- Quan s'avaluarà:
S'avaluarà a finals de trimestre per assegurar que els alumnes han assolit la soltura i els coneixements necessaris.

Activitat 2. Pràctiques
- Com s'avaluarà:
Els alumnes s'enfrontaran per equips a la resolució d'un cas pràctic que simularà una situació real i hauran de seguir tot el cicle de vida des de l'anàlisi de requeriments fins a la implementació. L'avaluació es realitzarà a partir de punts de control intermitjos en què els alumnes hauran de presentar els resultats parcials i defensar les seves decisions de forma coherent. També es tindrà en compte aspectes subjectius com ara el funcionament del grup de treball, la organització...
- Què s'avaluarà:
Competències Generals:
1. Resolució de problemes
2. Organització i planificatió
3. Treball en equip
4. Ús d'instruments tecnològics
5. Capacitat per aplicar el coneixement teòric a la pràctica
Competències Específiques:
- Capacitat d'analitzar i descriure els requeriments d'un problema complex d'enginyeria del software.
- Capacitat de dissenyar la solució d'un problema complex d'enginyeria del software a partir d'uns requeriments
- Quan s'avaluarà:
S'avaluarà durant tot el trimestre a partir de punts de control i lliuraments intermitjos.

Activitat 3. Examen Test
- Com s'avaluarà:
Es realitzarà un test amb preguntes enfocades a demostrar els coneixements de l'alumne en els diversos conceptes presentats al llarg de l'assignatura
- Què s'avaluarà:
Competències Específiques:
Coneixement de Metodologies de l'Enginyeria del Software
- Quan s'avaluarà:
Es realitzarà a mitjans de trimestre quan ja s'hagi introduit tot el contingut teòric. D'aquesta manera se separarà de l'examen final i es distribuiran esforços més homogèniament. Si l'alumne suspén en aquesta primera convocatòria, podrà fer-lo també juntament amb l'examen a finals de trimestre.

Activitat 4. Discussió Exercicis
- Com s'avaluarà:
Es realitzaran una sèrie de seminaris amb un màxim de 10 persones on els alumnes presentaran i discutiran les possibles solucions a exercicis realitzats prèviament.
- Què s'avaluarà:
En realitat aquesta no és una activitat avaluativa i no es pretén avaluar cap competència. El fet que es consideri la participació dels alumnes com a element avaluador és una simple mesura incentivadora per a la seva participació.
- Quan s'avaluarà:
A mitjans de trimestre

Activitat 5. Seminaris d'Empresa

- Com s'avaluarà:
Es realitzaran una sèrie de seminaris amb la participació d'empreses externes del sector que exposaran les seves metodologies. Els alumnes seran convidats a intervenir i formular preguntes. Es contarà en la part de participació a classe.
- Què s'avaluarà:
No és una activitat avaluativa sinó incentivadora.
- Quan s'avaluarà:
A mitjans de trimestre

3. CONTINGUTS

PART 1. L'ENGINYERIA DE SOFTWARE I ELS SEUS PROCESSOS (cap. 1-4)

Bloc de contingut 1: Cicle de Vida i Metodologies (Nota: inclou els capítols 1, 2 i 3 dels apunts)
Conceptes:
- Noció d'Enginyeria de Software
- Relació de l'Enginyeria de Software amb altres àmbits de la professió informàtica i altres professions
- El Cicle de Vida d'un producte software i els seus models

Procediments:
- Identificació de les diverses parts o processos del cicle de vida genèric i les activitats que s'hi duen a terme
- Anàlisi dels avantatges/inconvenients dels diversos models de cicle de vida en compte el context d'un determinat projecte

Actituds:
- Interés per l'Enginyeria de Software i la seva importància en la majoria dels àmbits de la professió informàtica.
- Esperit crític a l'hora d'avaluar els avantatges/inconvenients dels diversos models de cicle de vida I metodologies.

Bloc de contingut 2: Enginyeria de Requeriments
Conceptes:
- Definició i classificació dels diversos tipus de Requeriments
- Elements d'un Document de Requeriments i formalismes associats
- El cicle de vida de l'Enginyeria de Requeriments

Procediments:
- Classificació dels requeriments en funcionals, no funcionals i de domini
- Identificació de stakeholders i actors.
- Utilització del diagrama de casos d'us UML per analitzar i descriure els requeriments funcionals
- Redacció d'un Document de Requeriments complert a partir de l'anàlisi d'un cas pràctic.
- Manteniment del Document de Requeriments: gestió del canvi

Actituds:
- Valoració de la importància d'uns requeriments ben definits en el marc d'un projecte informàtic
- Previsió i adequació al canvi

Bloc de contingut 3: Metodologies
Conceptes:
- Descripció de diversos exemples de metodologies
- Metodologies àgils vs. tradicionals
- Metodologies basades en el procés vs. metodologies basades en les persones

Procediments:
- Identificació dels beneficis I inconvenients de diverses metodologies
- Aplicació de les pràctiques I processos d'algunes de les metodologies

Actituds:
- Actitud crítica per avaluar una metodologia


PART 2. ANÀLISI I DISSENY OO (cap. 5-7)

Bloc de contingut 4:Anàlisi i Disseny OO
Conceptes:
- Definició i propietats dels Objectes
- Definició i propietats de les Classes
- Les relacions entre classes: herència, composició, agregació, associació i dependència
- El Polimorfisme i les Jerarquies d'Herència
- El llenguatge C++ com a exemple de llenguatge orientat a objectes.

Procediments:
- Particionament d'un problema complex emprant els conceptes i els procediments del paradigma orientat a objectes.
- Utilització de l'UML per a modelar sistemes Orientats a Objecte
- Utilització del llenguatge C++ per a implementar un disseny orientat a objectes.
- Desenvolupament dirigit per testos

Actituds:
- Les bones pràctiques de programació (Encapsulació, no duplicació, mètodes curts, nomenclatura entenedora...)
- Adaptarció a les convencions de codificació de l'equip on s'està treballant
- Adaptació al canvi: el codi es quelcom moldejable i en constant evolució
- Comprensió dels avantatges del desenvolupament dirigit per testos

Bloc de contingut 5:L'UML
Conceptes:
- Avantatges del modelatge visual
- Definició i breu història de l'UML
- Els principals diagrames UML i els elements inclosos a tots ells

Procediments:
- Utilitat dels diversos diagrames UML a les diverses fases del cicle de vida
- Comprensió de qualsevol tipus de diagrama UML aplicat a un problema concret
- Utilització dels diagrames UML més importants (diagrama de casos d'us, estàtic, i de seqüència) en la resolució d'un problema i en menor mesura d'algun dels altres tipus de diagrames.

Actituds:
- Acceptació de la importància d'utilitzar un formalisme estàndar a l'hora d'utilitzar diagrames.

Bloc de contingut 6:Patrons Software
Conceptes:
- Concepte de Patró Software
- Catàlegs de patrons i la seva utilitat

Procediments:
- Utilització d'UML per a entendre un patró de disseny concret
- Utilització dels catàlegs de patrons per a identificar un patró com a solució genèrica a un problema concret
- Utilització de patrons a l'hora de dissenyar la solució a un problema pràctic concret

Actituds:
- No re-inventar la roda: la majoria de problemes amb que un es troben ja han estat solucionats i que la solució disponible en forma de patró és segurament millor que la nosaltres li podríem donar de bon començament.



4. CONEIXEMENTS PREVIS/PRERREQUISITS


- Coneixements de programació
- Coneixements bàsics del paradigma i les tecnologies Orientades a l'Objecte
- Competències generals a esperar en un alumne en 3er curs d'enginyeria en concret capacitats de comprensió i anàlisi d'un problema complex

5. ACTIVITAT ENSENYAMENT-APRENENTATGE


Disseny per competències
Competència 1. Coneixement de diferents metodologies de l'enginyeria del software.

Activitats docents

Temporització

Activitats

d'aprenentatge

Temporització

Classe Magistral: Explicacións de caire general fomentant la discussió.

Seminari empresa

5 hores

2 hores

Estudi personal a partir d'apunts i bibliografia recomanada.

Realització d'exercicis tipus test de la col·lecció.

23 hores

2 hores


Competència 2. Capacitat de descriure els requeriments d'un problema complex d'enginyeria del software.

Activitats docents

Temporització

Activitats

d'aprenentatge

Temporització

Classe magistral/ discussió explicant tipus de requeriments, estructura de document...

Revisió i discussió de requeriments preparats pels propis alumnes en clàsses pràctiques 10-15 alumnes

6,5 hores

6 hores

Pràctiques en parella realitzant un document de requeriments i utilitzant eines CASE.

Estudi i realització de problemes de la col·lecció

15 hores

10 hores

Competència 3. Capacitat de dissenyar la solució d'un problema complex d'enginyeria del software

Activitats docents

Temporització

Activitats

d'aprenentatge

Temporització

Classe magistral: Explicació dels elements més importants del paradigma Orientat a Objectes

Classe magistral: Explicació del llenguatge UML

Resolució de problemes prèviament proposats en seminaris

Projecte a realitzar a la pràctica

3,5 hores

4,5 hores

1,5 hores

14 hores

Resolució individual de problemes de la col·lecció

Resolució pràctica en parella d'un problema complex relacionat amb els requeriments prèviament analitzats

27 hores

35 hores




Nota: Segons Bolonya l'Estudiant ha de dedicar 25 hores per crèdit. Enginyeria de Software I té 9 crèdits i això dona un total de 225 hores o 22,5 hores per setmana. D'aquestes 7 hores es realitzaran presencialment a classe i la resta corren a càrrec de l'alumne.

6. RECURSOS DIDÀCTICS


- Apunts en format llibre entregats a principi de trimestre
- Col·lecció de Problemes
- Web de l'assignatura: http://xavier.amatriain.net/es1

Bibliografia recomanada:

Fent un clic damunt del títol de cada document, enllaçaràs amb el seu registre bibliogràfic en el catàleg de la Biblioteca. D'aquesta manera et serà fàcil localitzar el document i/o reservar-lo en cas que tots els exemplars disponibles estiguin en préstec.

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, 2001

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

Eliëns, Anton

Principles of object-oriented software development / Anton Eliëns

Workingham : Addison-Wesley, 1995

Joyanes Aguilar, Luis

Programación orientada a objetos / Luis Joyanes Aguilar

Madrid : Osborne/McGraw-Hill, cop. 1998

Larman, Craig

Applying UML and patterns : an introduction to object-oriented analysis and design / Craig Larman

Upper Saddle River, N.J. : Prentice Hall PTR, 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

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ón

Madrid 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

Reading (Mass.) : Addison-Wesley, cop. 1997