Professional Documents
Culture Documents
Departament d’Ensenyament
Institut Obert de Catalunya
Nom i cognoms
Aquest exercici d’avaluació continuada (EAC) es correspon amb els continguts treballats a la unitat 2,
Desenvolupament de programari.
Criteris d’avaluació
Els criteris que es tindran en compte per avaluar el treball de l’alumnat són els següents:
Correcció i concreció a les respostes.
Correctesa i claredat en els procediments realitzats.
Robustesa, claredat, llegibilitat i documentació en el codi generat.
Per respondre les qüestions heu d’utilitzar aquest mateix fitxer. Elimineu els apartats Presentació i resultats
d'aprenentatge, Criteris d’avaluació i Forma i data de lliurament.
Un cop finalitzat l’exercici d’avaluació continuada heu d’enviar el document des de l'apartat M5 Lliurament
EAC2 de l'aula, dins del termini establert. Tingueu en compte que el sistema no permetrà fer lliuraments
després de la data i hora indicades.
El nom del fitxer serà el següent: 2252M05_EAC2_Cognom1_Inicial del cognom2. Els cognoms
s’escriuran sense accents. Per exemple, l’estudiant Joan García Santos posaria el següent nom al seu fitxer
de l’EAC2: 2252M05_EAC2_Garcia_S.
Comprimiu tots els fitxers que heu de lliurar (aquest document amb les respostes i els fitxers que us
demanen alguns exercicis) amb el format lliure format zip.
2252M05_EAC2_Enunciat_1516S1 Lliurament:
Versió: 02
13/11/2015
Formació professional
Nom i cognoms
Anomeneu aquest fitxer comprimit amb el mateix criteri que l'assenyalat pel fitxer odt:
"2252M05_EAC2_Cognom1_Inicialdelcognom2.zip". Pengeu aquest fitxer comprimit a l'àrea de
lliurament de la plataforma anomenada ”Lliurament EAC2”.
El termini de lliurament finalitza a les 23:55 h del dia 13/11/2015. La proposta de solució de l’EAC es
publicarà el dia 24/11/2013 i les qualificacions el dia 24/11/2015.
Enunciat
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
Afirmació Cert Fals
Les proves de sistemes busquen detectar errors en l'assoliment dels requeriments.
X
Les proves funcionals són les encarregades de detectar els errors en la implementació
dels requeriments d’usuari.
X
Les proves funcionals busquen la detecció d'errors en la implementació dels requeriments
del desenvolupador.
X
Les proves funcionals les efectuen els únicament els verificadors.
X
Les proves funcionals són les encarregades de detectar els errors en la implementació
dels requeriments d’usuari.
X
Les proves de robustesa valoren la capacitat del sistema per suportar entrades no
correctes
X
Les proves d'integració busquen la detecció d'errors de les interfícies i en les relacions
entre els components
X
Les proves d’usabilitat indicaran les operacions d’arrencada i d’actualització dels
programaris
X
Les proves de regressió cerquen detectar possibles nous errors o problemes que puguin
sortir en haver introduït canvis o millores en el programari
X
WebLoad pot integrar-se a Eclipse i efectua un escaneig de codi per mitjà del qual troba
errors comuns, males pràctiques de programació, codi vulnerable, rendiment, seguretat...
X
Avignon permet als usuaris expressar proves d’acceptació d’una forma no ambigua abans
que comenci el desenvolupament.
X
La refacció és transformar el codi font mantenint intacte el seu comportament, aplicant els
canvis només en la forma de programar o en l’estructura del codi font, cercant la seva
optimització.
X
El patró d'extreure una variable local li assigna a una nova variable local qualsevol
referència a l’expressió en l’àmbit local i serà substituïda per la variable nova.
X
El patró extreure una constant consisteix en convertir en una constant una cadena de
caràcters o un valor numèric i substituir per la constant qualsevol referència a aquesta
cadena de caràcters o valor numèric.
X
El patró convertir una variable local en un camp converteix un atribut en un paràmetre
d'una funció
X
El patró extreure el mètode converteix un tros de codi en un nou mètode
X
El patró extreure una interfície converteix una interfície en atribut de la classe
X
Un sistema de control de versions és una eina d’ajuda al desenvolupament de programari
que anirà emmagatzemant la situació del codi font en moments determinats X
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
Afirmació Cert Fals
Un sistema de control centralitzat disposa a cada ordinador de treball, així com el servidor,
d’una còpia de les versions emmagatzemades
X
Amb un check out, baixar, podem enviar, al repositori, les dades corresponents als canvis
que s’han produït en el servidor local
X
Un repositori és la part principal d’un sistema de control de versions. Són sistemes
dissenyats per enregistrar, guardar i gestionar tots els canvis i informacions sobre totes les
dades d’un projecte al llarg del temps
X
En un cvs només hi ha un sistema per solucionar la problemàtica d’accés simultani a un
mateix fitxer, i és el sistema de bloqueig d’arxius
X
JavaDoc permet la creació de documentació d’API en format HTML
X
git add nomFitxerOcarpeta-admetCaractersComodí Puja el fitxer anterior al repositori
remot
X
En un cvs una actualització, update, permet dur a terme una còpia de seguretat de totes
les dades del repositori a l’ordinador client amb què treballarà el programador
X
Crear un projecte nou amb una classe Java, aquesta classe tindrà un atribut.
Fer que GIT consideri el nostre projecte com a repositori. Per això cal:
2. teclejar l'ordre:
git init
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
2. Excloure fitxers.
Excloure els fitxers .class. Això es fa posant aquestes extensions al fitxer .gitignore. Pot fer-se, per exemple,
així:
Afegir tot el que hi ha a la carpeta actual (incloent-hi les subcarpetes), podem fer:
git add .
4. Crear una classe nova al repositori i veure el que hi ha pendent de confirmar (entre altres
informacions):
git status
Capturar la pantalla:
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
Confirmar tots els fitxers modificats o esborrats des del darrer commit i que ja hi estaven inclosos, podem
fer-ho així:
(si hem creat un fitxer nou, en no haver-lo afegit amb git add cap vegada, no s'hi inclouria).
Captureu la pantalla un cop executada l'ordre anterior i git status per verificar que no hi ha canvis pendents:
7. Creació d'un repositori remot, configuració del repositori remot propi i sincronització d'aquest
amb el nostre:
Creeu un repositori remot a https://github.com/ i conecteu-vos-hi, el nom d'usuari del repositori remot
seràn el vostre nom concatenat amb el vostre cognom. En cas contrari la pregunta valdrà 0 punts.
Per poder treballar amb repositoris remots cal indicar l'email, el nom d'usuari (la contrassenya la demanen
en fer ...) i la URL del repositori amb:
branca és la branca que pugem. La branca principal, per defecte, s'anomena master.
git config --global user.name "nomUsuari"
git config --global user.email "correuElectrònic"
git remote add origin https://URLdelRepositori(amb extensió .git)
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
Poseu a continuació una captura de la pantalla amb el resultat de git pull i el directori descarregat:
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
10. Modificar a continuació el codi i executar altre cop git status, captureu la pantalla i poseu-la a
continuació:
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
3. (2 punts) Refacció.
Reescriu la classe Persona tot aplicant, on sigui adient, les següents tècniques de refacció (o
refactorització):
La finalitat d'aplicar-les sempre ha de ser bé evitar la repetició de càlculs (és a dir, tenir una solució més
eficient), bé evitar repeticions innecessàries del codi (codi més mantenible).
Una refacció pot haver-se de repetir a més d'un lloc del codi. Pots utilitzar les facilitats de l'entorn i/o fer-hi
modificacions manuals. Només cal entregar el resultat al requadre que hi ha a continuació.
Posa-hi comentaris del tipus // als llocs on has refactoritzat per indicar el patró utilitzat a cada part del codi.
Per facilitar la correcció, escriu en vermell aquests comentaris.
package eac2;
private final String CNOM = " Nom : "; //EXTRACCIó D'UNA CONSTANT
private final String CCOGNOM = " COGNOM : "; //EXTRACCIó D'UNA CONSTANT
return nom;
}
if(e>=0)
{
edat=e;
}
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
return edat;
}
edat++;
}
• El mètode buscar2 busca un enter en un vector d'enters que rep com a paràmetre. Si el vector és
null, genera una excepció.
• El mètode positius passa a positiu els valors negatius del vector. Si el vector és null, genera una
excepció.
int i=0;
Boolean trobat=false;
if(vector[i]==valor)
{
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
trobat=true;
}
else
{
i++;
}
}
return trobat;
}
int i=0;
Boolean trobat=false;
if (vector == null){
throw new CercaException(VECTOR_NULL);
}
if(vector[i]==valor)
{
trobat=true;
}
else
{
i++;
}
}
return trobat;
}
if (vector == null){
throw new CercaException(VECTOR_NULL);
}
while(i<vector.length){
if(vector[i]<0)
{
vector[i] =vector[i]*-1;
}
i++;
}
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
{
Algorisme a=new Algorisme();
int vector[]={1,2,34,5,-10};
int vector2[]=null;
try
{
System.out.println(a.buscar(2,vector));
System.out.println(a.buscar(3,vector));
a.positius(vector);
System.out.println(a.buscar2(3, vector2));
}
catch(Exception e)
{
System.out.println("Error :"+e.toString());
}
}
}
@SuppressWarnings("serial")
public class CercaException extends Exception {
Per realitzar els punts 4.2., 4.3. i 4.4. cal realitzar un únic projecte d'Eclipse. Caldrà lliurar comprimides les
carpetes src i doc d'aquest projecte juntament amb les respostes a aquest enunciat.
4.1. (2 punts) Realitza el disseny dels casos de prova per comprovar el funcionament correcte de la classe
Algorisme, amb el codi que figura a l'enunciat.
a) Dissenya les classes d'equivalència. Cal seguir els passos que s'indiquen al punt del material 1.3.2
(Disseny de les proves. Tipus de proves), apartat “Classes d'equivalència” (és a dir, els passos són:
“Identificar les condicions, restriccions o continguts de les entrades i les sortides” i ”Identificar, a partir de les
condicions, les classes d’equivalència de les entrades i les sortides”). Tingues en compte que, per a cada
mètode caldrà trobar les seves classes d'equivalència.
public Boolean buscar (int valor, int vector[])
Condicions:
• D'entrada: El vector valors no ha de ser null.
• De sortida: Torna cert si el valor està al vector i fals en cas contrari, valor i vector tenen els
mateixos valors que abans de cridar a la funció; si el vector és null, es genera una excepció
NullPointerException
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
Classes d'equivalència:
1. Entrada vàlida: El vector valors no és null
2. Entrada invàlida: El vector valors és null
• Les classes d'equivalència que es generarien a partir de les condicions de sortida ja van incloses a
les classes anteriors.
Condicions:
• D'entrada: El vector valors no ha de ser null.
• De sortida: Torna cert si el valor està al vector i fals en cas contrari, valor i vector tenen els
mateixos valors que abans de cridar a la funció; si el vector és null, es genera una excepció
CercaException
Classes d'equivalència:
1. Entrada vàlida: El vector valors no és null
2. Entrada invàlida: El vector és null
• Les classes d'equivalència que es generarien a partir de les condicions de sortida ja van incloses a
les classes anteriors.
Condicions:
• D'entrada: El vector valors no ha de ser null.
• De sortida: Torna cert si el valor està al vector i fals en cas contrari, valor i vector tenen els
mateixos valors que abans de cridar a la funció; si el vector és null, es genera una excepció
CercaException
Classes d'equivalència:
1. Entrada vàlida: El vector no és null
2. Entrada invàlida: El vector és null
• Les classes d'equivalència que es generarien a partir de les condicions de sortida ja van incloses a
les classes anteriors.
b) Dissenya els casos de prova a partir de les classes d'equivalència seleccionades anteriorment. Tingues
en compte que:
• Com a mínim ha d'haver un representant de cada classe d'equivalència
• Han de cobrir els valors límit i els errors típics
• Han de recórrer almenys una vegada cada camí independent (això últim està relacionat amb els
apartats “Cobertura del flux de control” i “Complexitat ciclomàtica”).
Classes d'equivalència:
1. Entrada vàlida: el vector valors no és null
Casos de prova
• Valor límit (vector): el vector no té cap valor: { } i qualsevol valor
• Valor límit (valor): el vector només té un valor {8} i valor hi és al vector
• Valor límit (valor): el vector només té un valor {8} i valor hi és al vector (val 8, per tant)
• Valor límit (valor): el vector té més d'un valor: {4, 6, 8, 4, 9, 5, 6, 7, 10, 34, 11, 80} i valor n'és
el primer (4)
• Valor límit (valor): el vector té més d'un valor: {4, 6, 8, 4, 9, 5, 6, 7, 10, 34, 11, 80} i valor n'és
l'últim (80)
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
• Valor intermedi (valor): el vector té més d'un valor: {4, 6, 8, 4, 9, 5, 6, 7, 10, 34, 11, 80} i valor
és a la posició intermitja (val 5)
(s'ha triat un vector de longitud 12, però podria ser de qualsevol altra longitud > 1) i el valor=90
no està al vector.
Els camins són 1-2-3-1-5, 1-2-4-1-5 i 1-5. Amb els casos de prova anteriors es cobreixen.
Classes d'equivalència:
3. Entrada vàlida: el vector valors no és null
Casos de prova
• Valor límit (vector): el vector no té cap valor: { }
• Valor límit (valor): el vector només té un valor {8} i valor hi és al vector
• Valor límit (valor): el vector només té un valor {8} i valor hi és al vector (val 8, per tant)
• Valor límit (valor): el vector té més d'un valor: {4, 6, 8, 4, 9, 5, 6, 7, 10, 34, 11, 80} i valor n'és
el primer (4)
• Valor límit (valor): el vector té més d'un valor: {4, 6, 8, 4, 9, 5, 6, 7, 10, 34, 11, 80} i valor n'és
l'últim (80)
• Valor intermedi (valor): el vector té més d'un valor: {4, 6, 8, 4, 9, 5, 6, 7, 10, 34, 11, 80} i valor
és a la posició intermitja (val 5)
(s'ha triat un vector de longitud 12, però podria ser de qualsevol altra longitud > 1) i el valor=90
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
no està al vector.
Els camins són 1-2-4-5-2-7, 1-2-4-6-2-7 , 1-2-7 i 1-3-7. Amb els casos de prova anteriors es cobreixen tots.
Classes d'equivalència:
1. Entrada vàlida: el vector no és null
Casos de prova:
• Valors límit: vector buit, {}
• Valors no limits: el vector té només un valor positiu: { 8 }
el vector té només un valor negatiu: { -8 }
el vector té més d'un valor i tots són positius:
{4, 6, 8, 4, 9, 5, 6, 7, 10, 34, 11, 80}
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
el vector té més d'un valor i tots són negatius:
{-4, -6, -8, -4, -9, -5, -6, -7, -10, -34, -11, -80}
el vector té més d'un valor i n'hi ha tant positius com negatius:
{-4, 6, -8, 4, -9, -5, 6, 7, 10, -34, 11, -80}
Els camins són 1-2-4-5-6-2-7, 1-2-4-6-2-7, 1-2-7 i 1-3-7. Amb els casos de prova anteriors es cobreixen
tots.
4.2. (1 punt) Crea un projecte amb les classes Algorisme, i CercaException. Executa-hi les proves
dissenyades a l'apartat 4.1. amb l'ajut de JUnit.
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
• Després cal crear una classe de test (al material també indica com fer-ho amb un assistent). Ha de
ser al mateix paquet que la classe que es vol provar i el seu nom ha de començar per Test (p.e.
TestAlgorisme).
En aquesta classe cal posar un mètode precedit per @Test per a cada prova que vulguem fer.
A cada mètode podeu fer diferents proves. (p.e. el mètode provaBuscar que passi al mètode
buscar un vector amb valors i un enter que hi és i un altre enter que no hi és, el mètode
provaPositius que cridi al mètode positius amb un vector buit, altres que cridin al mètode
provaPositius en diferents circumstàncies, etc.). Pots posar tants mètodes com vulguis. En
executar les proves s'aniran executant l'una darrera l'altre.
• Per controlar el resultat cal utilitzar les anotacions o mètodes de JUnit que creguis adients per fer
cada prova. Pots trobar informació al respecte a l'annex del primer apartat, “Disseny i realització de
proves de programari”, del material. Cal tenir present que on posa “Declaracions” s'està referint a
mètodes de la classe org.junit.Assert.
• Després ja pots executar aquesta classe com “JUnit Test”. Veuràs que diu a quins mètodes ha anat
bé la prova i a quins no.
• Si amb l'assistent creas una classe JUnit Test Case (s'hi arriba per New → Other → JUnit...) veuràs
que el propi assistent realitza una bona part dels passos anteriors.
Realitzar una captura de pantalla de l'execució dels tests i on es vegin els tests realitzats i enganxar-
la a continuació:
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
4.3. (1 punt) Documenta les classes Algorisme, Persona i CercaException. Després genera els Javadoc
corresponents a la carpeta doc, a l'arrel del vostre projecte (en principi, hauria de ser la que aparegués per
defecte amb l'assistent). És important que t'asseguris que aquesta carpeta ( doc) queda dins del projecte
perquè aquest exercici es corregirà a partir del contingut del teu projecte.
Amb l'ajut del depurador que porta integrat l'IDE Eclipse, realitza les següents operacions sobre aquest
projecte:
1. Prepara l'entorn perquè el programa s'aturi just després d'haver cridat al mètode positius.
2. Executa la classe que conté el main en mode depuració (cal fer clic amb el botó dret a sobre de la
classe i triar “Debug as” → “Java Application”).
3. S'ha d'aturar el depurador en la instrucció que heu indicat al pas 1. Fes que l'entorn mostri les
dades que conté el resultat d'haver cridat al mètode positius i el punt on s'ha aturat l'execució.
Captura la pantalla i adjunta-la a continuació. Abans d'adjuntar-la, però, retalla de la imatge la part
que no sigui significativa pel que es demana.
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015
Formació professional
Nom i cognoms
En aquest punt cal treballar amb el repositori que ja us heu descarregat anteriorment de
https://github.com/xfaus/IOC-EAC2-2015.git Per execurar el codi heu de tenir configurat el Windows Builder
a l'EAC1.
Has d'indicar dins del requadre que hi ha a continuació quines proves cal realitzar al programa esmentat per
verificar el seu correcte funcionament (el material et dóna una orientació, al subapartat “Ús d'interfície
gràfica”).
- Proves sobre finestres: funcionen les icones minimitzar, maximitzar i tancar, que són a l'angle superior
dret. La finestra es pot desplaçar per la pantalla. Al començament, el resultat que indica la calculadora és
0.
Lliurament:
Versió: 02 2252M05_EAC2_Enunciat_1516S1
13/11/2015