Enginyeria del Software II - 20370
3 de Setembre de 2003

  1. Siguin les dues finestres:


i suposem la regla d’usabilitat “La GUI només ha de permetre fer allò que és possible en qualsevol estat de l’aplicació”. Digueu quina de les afirmacions següents és certa:
     La finestra de la dreta no compleix aquesta regla perquè té seleccionat el botó Next>> per defecte, però la finestra de l’esquerra sí segueix la regla perquè no té cap botó per defecte.
     De fet, si a la finestra de la dreta estigués seleccionat per defecte el botó de Finish llavors les dues finestres serien coherents amb la regla.
     Cap finestra és coherent amb la regla.
       Cap de les anteriors és certa.
       No contesto...
 
  2. Considereu les dues finestres següents:

Digueu quina de les següents afirmacions és certa:
     Ambdues tenen el mateix look-and-feel.
     Ambdues tenen un look-and-feel diferent.
     Cap de les dues afirmacions anteriors té sentit perquè el look-and-feel d’una aplicació no es desprèn del aspecte de la GUI o de la interacció amb ella.
       Cap de les anteriors és certa.
       No contesto...
 
  3. Al respecte del desenvolupament d’interfícies d’usuari indiqueu quina de les afirmacions següents és certa:
     Durant el desenvolupament d’una aplicació és aconsellable centrar-se des de bon començament en enllestir les funcionalitats de l’aplicació sense preocupar-nos massa de les activitats relacionades amb el desenvolupament de la GUI, és a dir, una bona GUI sempre es pot afegir al final sense problemes gràcies als entorns avançats de desenvolupament de GUIs dels que disposem avui en dia.
     La frase reconèixer més que recordar fa referència a una característica desitjable de les GUIs per facilitar el treball dels usuaris principiants.
     El més importat és l’estil guia perquè determina allò que els usuaris veuen.
       Cap de les anteriors és certa.
       No contesto...
 
  4. Indiqueu quina de les afirmacions següents és falsa:
     A les GUIs els missatges han de ser centrats a l’usuari.
     A les GUIs els missatges antropomòrfics transmeten a l’usuari una sensació poc realista de les capacitats de l’ordinador.
     Quan l’usuari comet una errada és convenient donar un missatge una mica condemnatori al menys suggerint que es llegeixen els manuals abans d’utilitzar l’aplicació.
       Els manuals d’usuari es poden provar.
       No contesto...
 
  5. En relació a la gestió de la configuració, digueu quina de les següents afirmacions és certa:
     Al context del RUP: seguint l'UCM els desenvolupadors fan check-in/check-out local de fitxers i deliver d’activitats.
     Una release consisteix en una versió d'un o més elements de la configuració que no passen pel tràmit de revisió i control perquè són part de reparacions d'urgència.
     Si capturem correctament els requisits d’un client i els implementem sense errors, les tècniques de control de canvis no tindrien gaire importància perquè el principal motiu de manteniment és la correcció d’errors latents.
       Cap de les anteriors és certa.
       No contesto...
 
  6. Suposem les situacions següents durant el desenvolupament d’un SW: S1. realització d’activitats repetides; S2. un programador ha de corregir part del codi fet per un altre, el canvi que ha de fer no és trivial, però tot i així dedica el 90% del temps a entendre el codi i només el 10% a realitzar el canvi pròpiament; S3. reaparició d’errors en una release que provenen de releases més antigues però que en la release prèvia ja estaven corregits; S4. en una release apareixen funcionalitats desitjades però d’una prioritat menor que d’altres que no apareixen i que ja haurien d’estar incloses; S5. ens demanen fer un canvi al nostre disseny de classes, però ens adonem que aquest disseny és poc escalable i l’hem de llançar i fer-ho de nou; S6. Necessitem fer proves amb una release antiga d’una aplicació que té instal·lada un client que ens ha trucat per dir que té un problema, però no trobem aquesta release i no sabem com generar-la altra vegada. Indiqueu quin dels conjunts següents agrupa situacions que siguin degudes a la manca de gestió de la configuració:
     S1, S3, S4 i S5.
     S1, S3, S4 i S6.
     S1, S2, S3 i S4.
       S2, S3, S4 i S5.
       No contesto...
 
  7. Indiqueu quina de les afirmacions següents és falsa:
     El disseny per contracte evita la protecció redundant.
     La programació defensiva es pot aplicar a sistemes crítics.
     Els assert només estan actius en mode Release.
       Aquests assert són utilitzats moltes vegades per verificar pre-condicions d’un mètode, per tant, poden recolzar el disseny per contracte.
       No contesto...
 
  8. Digueu quina de les següents afirmacions és certa:
     En OCL, l’expressió nom_atribut@pre s’utilitza en les post-condicions per fer referència al valor de l’atribut nom_atribut en les pre-condicions.
     En OCL, l’expressió nom_atribut@pre s’utilitza en les pre-condicions per fer referència al valor de l’atribut nom_atribut en les post-condicions.
     En OCL, l’expressió nom_atribut@post s’utilitza en les pre-condicions per fer referència al valor de l’atribut nom_atribut en les post-condicions.
       Cap de les anteriors és certa.
       No contesto...
 
  9. Indiqueu quina de les afirmacions següents és certa:
     Quan fem disseny per contracte podem suposar que el principi de substitució de l’orientació a objecte no s’ha de complir, així tot es simplifica.
     Els contractes d’una classe derivada sí que s’han de complir a la seva classe base.
     Les afirmacions anteriors no tenen sentit perquè el disseny per contracte és pot aplicar a qualsevol paradigma.
       Cap de les anteriors és certa.
       No contesto...
 
  10. Digueu quina de les següents afirmacions és certa:
     En llenguatge C, des d'un throw sí es pot llençar un objecte.
     En llenguatge C, des d'un throwno es pot llençar un objecte.
     En llenguatge C++, des d'un throw no es pot llençar un objecte.
       En llenguatge C++, des d'un throw sí es pot llençar un objecte.
       No contesto...
 
  11. Indiqueu quina de les afirmacions següents és falsa:
     En C sí es pot fer gestió d’excepcions.
     En C++ sí es pot fer gestió d’excepcions.
     En Java sí es pot fer gestió d’excepcions.
       Cap de les anteriors afirmacions és certa.
       No contesto...
 
  12. Siguin les situacions següents: S1. Una aplicació arrenca, necessita reservar 256KB de memòria però no n’hi ha i la situació no canvia després d’uns 30 segons d’intentar-ho; S2. L’usuari escriu en un camp d’un formulari una clau alfanumèrica per fer una cerca en una base de dades. L’aplicació no troba cap informació relacionada amb la clau introduïda; S3. Un sistema format per un PC amb una camera de vídeo va gravant imatges a 15 frames per segon per al seu posterior anàlisi, però s’emplena el disc, que és de 10 GB. Indiqueu quina de les afirmacions següents és certa:
     S1, S2 i S3 impliquen llençar excepcions.
     Només S1 implica llençar una excepció.
     Només S2 implica llençar una excepció.
       Només S3 implica llençar una excepció.
       No contesto...
 
  13. Indiqueu quina de les afirmacions següents és certa:
     Evidentment és millor seguir un estil de codificació que no fer-ho, però, en realitat no és massa important perquè llegir codi és una activitat mínima de l’enginyeria del SW.
     Si no fos perquè el manteniment d’un codi ho pot fer una persona distinta a la que va crear el codi, els estils de codificació no serien de cap ajuda.
     De fet, l’afirmació anterior es veu reforçada degut al caràcter massa enfocat a l’estètica del codi dels estils de codificació, és a dir, en aquest context estil = estètica.
       Cap de les anteriors afirmacions és certa.
       No contesto...
 
  14. En relació a les proves del SW indiqueu quina de les afirmacions següents és certa:
     La complexitat ciclomàtica no augmenta amb el nombre de variables definides al codi.
     Els errors tipogràfics de codi són més fàcils de detectar amb proves de caixa negra que de caixa blanca.
     Les proves de regressió normalment són de caixa blanca.
       Si tenim dues unitats SW provades al 100% (suposem que fos possible, encara que, en general, sabem que no ho és) i que han superat aquestes proves, llavors no faria falta fer proves d’integració si suposem que només es comuniquen entre sí.
       No contesto...
 
  15. 15.Donades les activitats del desenvolupament d'un SW següents:
i.codificació,
ii.disseny,
iii.captura de requisits,
i les tasques de prova següents:
1.proves de validació,
2.proves d’unitat,
3.proves d’integració.
digueu quina de les llistes següents de parelles és la correcta, tenint en compte els tipus principals d'errors que es detecten a cada prova:
     1-iii, 2-i , 3-ii.
     1-i, 2-ii, 3-iii.
     1-iii, 2-ii, 3-i.
       1-ii, 2-i, 3-iii.
       No contesto...
 
  16. Digueu quina de les següents afirmacions és falsa:
     Els casos d’ús de l’UML ens poden servir de base per dissenyar proves de validació.
     Encara que no ho sembli, l’herència i el polimorfisme impliquen, en general, fer més proves i no menys.
     En termes generals, si utilitzem disseny per contracte les proves d’unitat són més simples que les proves d’integració.
       Si seguim metodologies de desenvolupament del SW com ara l’XP les proves tenen un paper molt secundari, apareixen cap al final del projecte.
       No contesto...
 
  17. Indiqueu quina de les afirmacions següents és certa:
     Si fem enginyeria inversa per anar d’un codi fet en C++, del qual no disposem de disseny previ, cap a un diagrama de classes UML no hi trobarem cap ambigüitat, és a dir, la intenció del programador és clara. El principal problema es troba quan volem anar del disseny de classes al codi.
     Els patrons de disseny són una idea molt bona per aconseguir que tots els enginyers del SW tinguin un llenguatge i coneixements comuns de disseny, però encara són una proposta teòrica perquè la majoria de patrons no s’han utilitzat com a solucions a problemes de disseny d’aplicacions reals.
     Les revisions tècniques formals són adequades només per garantir que la codificació segueix els estàndards prefixats.
       Cap de les anteriors.
       No contesto...
 
  18. Digueu quina de les següents afirmacions és falsa:
     El grup de SQA normalment és horitzontal als projectes.
     FURPS és l’acrònim d’una coneguda mètrica de la programació orientada a objecte.
     La metodologia de la IEEE per mesurar la qualitat d'un SW consisteix en un esquema de quatre nivells: requisits de qualitat (en termes de l'usuari), factors de qualitat (interpretació del que vol l'usuari), subfactors de qualitat (en termes de l'enginyer del SW), mètriques directes (representació quantitativa de subfactors de qualitat).
       El CMM serveix com referent de maduresa pels processos de desenvolupament de software.
       No contesto...
 
  19. Considerant els dos diagrames de classes següents:

i els dos fragments de codi C++ següents (generats automàticament):

indiqueu quina de les afirmacions següents és falsa:
     C2 seria coherent amb D1 si el diamant fos emplenat.
     C1 és coherent amb D2.
     C1 és coherent amb D1.
       C2 captura més acuradament la semàntica de D1 que C1.
       No contesto...
 
  20. Considerant el diagrama de classes i els dos fragments de codi C++ següents:

indiqueu quina de les afirmacions següents és certa:
     A partir de D3 es pot generar automàticament C3 però no C4.
     A partir de D3 es pot generar automàticament C4 però no C3.
     A partir de D3 podem generar C3 i C4.
       Cap de les anteriors.
       No contesto...
 
  21. Siguin el diagrama de classes i el codi següents:

Digueu quina de les següents afirmacions és certa:
     Encara que es llencin excepcions tipus PipeException o RSXYZException sempre es fa el Tractament d’excepció 1.
     Encara que es llencin excepcions tipus SocketException o RSXYZException sempre es fa el Tractament d’excepció 2.
     Encara que es llencin excepcions tipus PipeException o SocketException sempre es fa el Tractament d’excepció 3.
       Cap de les anteriors.
       No contesto...
 
  22. Considerant el diagrama de classes de la pregunta anterior i el codi següent:
void GestorComunicacions::EnviarInformacio(const CString & s)
{
try
{
&nbps;  m_pGestorDeComunicacioConcret->EnviarInformacio(s);
}
catch(SerialException & se)
{
  se.ManageException();
}
}

Digueu quina de les següents afirmacions és falsa:
     Aquest codi és més adequat de cara al manteniment que el de la pregunta anterior.
     Totes les excepcions que es podien capturar amb els catch del codi de la pregunta anterior es poden capturar amb el catch d’aquest codi.
     Aquest codi no funciona perquè SerialException és una classe abstracta.
       Encara que no és estrictament necessari, és convenient que el mètode ManageException() sigui virtual.
       No contesto...
 
  23. Digueu quina de les següents afirmacions és certa:
     El Bridge Pattern fomenta la composició envers l’herència per tal de separar abstracció i implementació.
     L’afirmació a) seria certa si no fos perquè a la banda de les implementacions i les abstraccions n’hi ha classes i subclasses, per tant, herència.
     En realitat, el motiu de que l’afirmació a) sigui falsa es que, al cas general, la classe base de les implementacions i la de les abstraccions són classes abstractes en el sentit de la programació orientada a objecte.
       Cap de les anteriors.
       No contesto...
 
  24. Siguin les afirmacions següents:
i.Simplificar l’ús d’un sistema definint la nostra pròpia interfície.
ii.Ajustar a una interfície particular una classe que no està sota el nostre control.
iii.Desacoblar abstracció i implementació.

i els patrons de disseny següents:
1) Bridge pattern; 2) Facade pattern; 3) Adapter pattern.
Identifiqueu les parelles correctes:
     i-1, ii-2, iii-3.
     i-2, ii-3, iii-1.
     i-3, ii-1, iii-2.
       Cap de les anteriors.
       No contesto...
 
  25. Digueu quina de les següents afirmacions és falsa:
     Els patrons de disseny poden tenir un contracte associat en el sentit del disseny per contracte.
     Els patrons capturen les relacions estàtiques dels objectes que hi participen en una solució a un problema mitjançant diagrames de classes, però no capturen el comportament dinàmic d’aquest objectes.
     Es pot saber si un patró ens pot ser útil només coneixent el problema que resol, sense saber exactament com s’implementa.
       Els patrons es poden combinar.
       No contesto...
 
  26. Pràctiques 1: Per tal de codificar la interacció de la interfície gràfica corresponent als diàlegs d’opcions del professor i de l’alumne:
     S’ha de crear una classe associada al diàleg i posar la crida al botó corresponent.
     S’ha de crear una classe associada al diàleg i el GestorGUI corresponent amb un mètode mostrar_menu_opc.
     Ja estava codificada la interacció amb la resta de la interfície al fer un login d’un usuari d’aquest tipus.
       Cap de les anteriors.
       No contesto...
 
  27. Pràctiques 2: Al incloure el control ActiveX a la finestra per a mostrar la BD:
     S’ha de fer una crida al mètode GetReg ja implementat de la classe BaseDades.
     S’ha de crear un nou mètode al GestorDBUsr i a les classes BaseDadesAPI i BaseDades per a poder accedir als diferents camps de la BD.
     S’ha de tornar a llegir la BD de disc per a poder mostrar el seu contingut.
       (a) i (c) són certes.
       No contesto...
 
  28. Pràctiques 3: Segons la casa Ellemtel, els noms dels mètodes i les variables han de seguir el següent format:
     Nom_Metode, Nom_Variable.
     nom_metode, nom_variable.
     NomMetode, NomVariable.
       nomMetode, nomVariable.
       No contesto...
 
  29. Pràctiques 4: On s’havien de col·locar els blocs try-catch i quina era la seva funció?
     Allà mateix on es feia el throw, sortint del programa.
     Allà on es cridava la funció que feia el throw i mostrant un missatge d’error, continuant amb l’execució en qualsevol cas.
     Al nivell més alt de l’aplicació (on es cridava al login) continuant amb l’execució del programa sense haver de fer res.
       Cap de les anteriors.
       No contesto...
 
  30. Pràctiques 5: Quin problema hi havia al crear la classe CDlgIntroProfe?
     No hi havia cap problema.
     S’havia de crear els fitxers manualment ja que el ClassWizard no ho permetia.
     El ClassWizard deia que la classe ja estava creada i se li havia de dir que l’esborrés abans de crear-la de nou.
       Cap de les anteriors.
       No contesto...
 
  31. Pràctiques 6: Quan executeu un script del Robot, és a dir, quan feu un playback, us podeu trobar que en algun punt el programa no pot seguir executant l’script pel motiu que sigui (p. ex. no troba una finestra o un control). En aquesta situació, com reacciona el Robot?
     Immediatament mostra una finestra avisant del problema i us demana que li assenyaleu on es troba l’objecte que ell busca.
     Intenta trobar l’objecte durant una estona, i si no el troba mostra la finestra comentada en la resposta anterior.
     Intenta trobar l’objecte durant una estona, i si no el troba passa a la següent línia del script fins arribar al final d’aquest, on mostra el TestManager i els errors trobats.
       Cap de les anteriors.
       No contesto...
 
  32. Pràctiques 7: Quan utilitzem el Purify per detectar un memory leak i en detectem algun, aquest programa mostra la següent informació a l’usuari:
     Indica la línia de codi on es reserva memòria, la pila de crides de les funcions i un possible lloc del codi on poder alliberar la memòria.
     Indica la línia de codi on es reserva memòria, i les línies de codi executades.
     Indica la línia de codi on es reserva memòria, la pila de crides de les funcions, un possible lloc del codi on poder alliberar la memòria, i les línies de codi executades.
       Cap de les anteriors.
       No contesto...
 
  33. Pràctiques 8: Les eines Rational Purify i Coverage, serveixen per a:
     Optimitzar i comprovar la cobertura de codi, respectivament.
     Capturar errors en temps d’execució i comprovar la cobertura de codi, respectivament.
     Capturar errors en temps d’execució i optimitzar el codi, respectivament.
       Cap de les anteriors.
       No contesto...
 
  34. Pràctiques 9: En la darrera pràctica, hi havia un escenari concret en que apareixia una finestra que demanava si volíeu guardar les dades a disc quan realment no havia de fer-ho. Com vau solucionar aquest problema?
     Comprovant que l’usuari realment no hagués canviat cap dada de la finestra de modificació de dades.
     Comprovant que el DNI modificat ja existia prèviament a la base de dades, i per tant havia d’ignorar la modificació.
     Després de corregir un memory leak que es produïa quan no es capturava una excepció, corregit afegint un bloc try-catch, el nou flux d’execució feia que erròniament s’executés el mètode SetModificada() de la classe BaseDades.
       Cap de les anteriors.
       No contesto...
 
  35. Pràctiques 10: Per a solucionar un dels problemes de la darrera pràctica, havieu de comprovar si un DNI ja existia en la base de dades. Com ho vau comprovar:
     Cridant iterativament el mètode IsNickRight(int index) per cadascun dels valors de la variable index.
     Detectant una excepció que es llençava quan es cridava la funció SetUserNick (), el que volia dir que el nick no existia en la base de dades.
     Cridant a la funció GetDBData(), la qual retornava tots els camps de la base de dades, en els que buscàvem el DNI en qüestió.
       Cap de les anteriors.
       No contesto...
 

Check...