|
@@ -8,7 +8,7 @@
|
8
|
8
|
|
9
|
9
|
Como habrás aprendido en experiencias de laboratorio anteriores, lograr que un programa compile es solo una pequeña parte de programar. El compilador se encargará de decirte si hubo errores de sintaxis, pero no podrá detectar errores en la lógica del programa. Es muy importante probar las funciones del programa para validar que producen los resultados correctos y esperados.
|
10
|
10
|
|
11
|
|
-Una manera de hacer estas pruebas es “a mano”, esto es, corriendo el programa múltiples veces, ingresando valores representativos (por medio del teclado) y visualmente verificando que el programa devuelve los valores esperados. Otra forma más conveniente es implementar funciones dentro del programa cuyo propósito es verificar que otras funciones produzcan resultados correctos. En esta experiencia de laboratorio, practicarás ambos métodos de verificación.
|
|
11
|
+Una manera de hacer estas pruebas es a mano; esto es, corriendo el programa múltiples veces, ingresando valores representativos (por medio del teclado) y visualmente verificando que el programa devuelve los valores esperados. Otra forma más conveniente es implementar funciones dentro del programa cuyo propósito es verificar que otras funciones produzcan resultados correctos. En esta experiencia de laboratorio practicarás ambos métodos de verificación.
|
12
|
12
|
|
13
|
13
|
|
14
|
14
|
## Objetivos:
|
|
@@ -67,9 +67,9 @@ Cuando probamos la validez de una función debemos probar casos que activen los
|
67
|
67
|
### La función `assert`
|
68
|
68
|
|
69
|
69
|
|
70
|
|
-La función `assert(bool expression)` se puede utilizar como herramienta rudimentaria para validar funciones. `assert` tiene un funcionamiento muy sencillo y poderoso. Si la expresión que colocamos entre los paréntesis de `assert` es *cierta* la función permite que el programa continúe con la próxima instrucción. De lo contrario, si la expresión que colocamos entre los paréntesis es *falsa*, la función `assert` hace que el programa termine e imprime un mensaje al terminal que informa al usuario sobre la instrucción de `assert` que falló.
|
|
70
|
+La función `assert(bool expression)` se puede utilizar como herramienta rudimentaria para validar funciones. `assert` tiene un funcionamiento muy sencillo y poderoso. Si la expresión que colocamos entre los paréntesis de `assert` es *cierta* la función permite que el programa continúe con la próxima instrucción. De lo contrario, si la expresión que colocamos entre los paréntesis es *falsa*, la función `assert` hace que el programa termine e imprima un mensaje al terminal que informe al usuario sobre la instrucción de `assert` que falló.
|
71
|
71
|
|
72
|
|
-Por ejemplo, el siguiente programa correrá de principio a fin sin problemas pues todos las expresiones incluidas en los paréntesis de los asserts evalúan a *true*.
|
|
72
|
+Por ejemplo, el siguiente programa correrá de principio a fin sin problemas pues todos las expresiones incluidas en los paréntesis de los asserts evalúan a *cierto*.
|
73
|
73
|
|
74
|
74
|
---
|
75
|
75
|
|
|
@@ -94,7 +94,7 @@ int main() {
|
94
|
94
|
|
95
|
95
|
---
|
96
|
96
|
|
97
|
|
-El siguiente programa no correrá hasta el final pues el segundo `assert` (`assert(j == i);`) contiene una expresión (`j == i`) que evalúa a *false*.
|
|
97
|
+El siguiente programa no correrá hasta el final pues el segundo `assert` (`assert(j == i);`) contiene una expresión (`j == i`) que evalúa a *falsa*.
|
98
|
98
|
|
99
|
99
|
---
|
100
|
100
|
|
|
@@ -116,11 +116,11 @@ int main() {
|
116
|
116
|
|
117
|
117
|
```
|
118
|
118
|
|
119
|
|
-**Figura 2.** Ejemplo de programa que no "pasa" una prueba de `assert`.
|
|
119
|
+**Figura 2.** Ejemplo de programa que no pasa una prueba de `assert`.
|
120
|
120
|
|
121
|
121
|
---
|
122
|
122
|
|
123
|
|
-Al correr el pasado programa, en lugar de obtener la frase `”Eso es todo amigos!”` en el terminal, obtendremos un mensaje como el siguiente:
|
|
123
|
+Al correr el pasado programa, en lugar de obtener la frase `"Eso es todo amigos!”` en el terminal, obtendremos un mensaje como el siguiente:
|
124
|
124
|
|
125
|
125
|
`Assertion failed: (j == i), function main, file ../programa01/main.cpp, line 8.`
|
126
|
126
|
|
|
@@ -183,7 +183,7 @@ Supón que el programa tiene una interfaz como la siguiente:
|
183
|
183
|
|
184
|
184
|
![figure4.png](images/figure4.png)
|
185
|
185
|
|
186
|
|
-**Figura 4** - Interfaz de un programa para hallar el valor máximo entre tres enteros.
|
|
186
|
+**Figura 4.** Interfaz de un programa para hallar el valor máximo entre tres enteros.
|
187
|
187
|
|
188
|
188
|
---
|
189
|
189
|
|
|
@@ -193,7 +193,8 @@ Podrías determinar si el programa provee resultados válidos **sin analizar el
|
193
|
193
|
* a = 3, b = 6, c = 2; resultado esperado: 6
|
194
|
194
|
* a = 1, b = 10, c = 100; resultado esperado: 100
|
195
|
195
|
|
196
|
|
-Si alguno de estos tres casos no da el resultado esperado, el programa de tu amiga no funciona. Por otro lado, si los tres casos funcionan, entonces el programa tiene una probabilidad alta de estar correcto.
|
|
196
|
+Si alguno de estos tres casos no da el resultado esperado, el programa de tu amiga no funciona. Por otro lado, si los tres casos funcionan, entonces el programa tiene una alta probabilidad de estar correcto.
|
|
197
|
+
|
197
|
198
|
|
198
|
199
|
#### Funciones para validar
|
199
|
200
|
|
|
@@ -206,7 +207,7 @@ En este ejercicio estarás diseñando pruebas que validen varias versiones de la
|
206
|
207
|
|
207
|
208
|
![figure5.png](images/figure5.png)
|
208
|
209
|
|
209
|
|
- **Figura 5** - Interfaz de la función `3 Sorts`.
|
|
210
|
+ **Figura 5.** Interfaz de la función `3 Sorts`.
|
210
|
211
|
|
211
|
212
|
---
|
212
|
213
|
|
|
@@ -228,13 +229,13 @@ En este ejercicio estarás diseñando pruebas que validen varias versiones de la
|
228
|
229
|
|
229
|
230
|
![figure7.jpg](images/figure7.jpg)
|
230
|
231
|
|
231
|
|
- **Figura 7** - Formas de ganar en el juego "Piedra, papel y tijera".
|
|
232
|
+ **Figura 7.** Formas de ganar en el juego "Piedra, papel y tijera".
|
232
|
233
|
|
233
|
234
|
---
|
234
|
235
|
|
235
|
236
|
![figure8.png](images/figure8.png)
|
236
|
237
|
|
237
|
|
- **Figura 8** - Interfaz de la función `Rock, Paper, Scissors`.
|
|
238
|
+ **Figura 8.** Interfaz de la función `Rock, Paper, Scissors`.
|
238
|
239
|
|
239
|
240
|
---
|
240
|
241
|
|
|
@@ -249,7 +250,7 @@ En este ejercicio estarás diseñando pruebas que validen varias versiones de la
|
249
|
250
|
|
250
|
251
|
![figure9.png](images/figure9.png)
|
251
|
252
|
|
252
|
|
- **Figura 9** - Interfaz de la función `Zulu time`.
|
|
253
|
+ **Figura 9.** Interfaz de la función `Zulu time`.
|
253
|
254
|
|
254
|
255
|
---
|
255
|
256
|
|
|
@@ -269,7 +270,7 @@ En este ejercicio estarás diseñando pruebas que validen varias versiones de la
|
269
|
270
|
| 2 | "alce", "zorro", "coyote" | "zorro", "alce", "coyote" | .... | .... | |
|
270
|
271
|
| .... | .... | .... | .... | .... | .... |
|
271
|
272
|
|
272
|
|
- **Figura 10** - Tabla para organizar los resultados de las pruebas.
|
|
273
|
+ **Figura 10.** Tabla para organizar los resultados de las pruebas.
|
273
|
274
|
|
274
|
275
|
---
|
275
|
276
|
|
|
@@ -277,18 +278,18 @@ En este ejercicio estarás diseñando pruebas que validen varias versiones de la
|
277
|
278
|
|
278
|
279
|
|
279
|
280
|
|
280
|
|
-### Ejercicio 2: Hacer pruebas "a mano"
|
|
281
|
+### Ejercicio 2 - Hacer pruebas "a mano"
|
281
|
282
|
|
282
|
283
|
El proyecto `testing` implementa varias versiones de cada una de las cuatro funciones simples que se decribieron en el Ejercicio 1. Algunas o todas las implementaciones pueden estar incorrectas. Tu tarea es, usando las pruebas que diseñaste en el Ejercicio 1, probar las versiones de cada función para determinar cuáles de ellas, si alguna, están implementadas correctamente.
|
283
|
284
|
|
284
|
285
|
Este ejercicio **NO requiere programación**, debes hacer las pruebas **sin mirar el código.**
|
285
|
286
|
|
286
|
|
-#### Instrucciones:
|
|
287
|
+#### Instrucciones
|
287
|
288
|
|
288
|
289
|
1. Carga a `QtCreator` el proyecto `Testing`. Hay dos maneras de hacer esto:
|
289
|
290
|
|
290
|
291
|
* Utilizando la máquina virtual: Haz doble “click” en el archivo `Testing.pro` que se encuentra en el directorio `/home/eip/labs/testing-testing` de la máquina virtual.
|
291
|
|
- * Descargando la carpeta del proyecto de `Bitbucket`: Utiliza un terminal y escribe el commando `git clone http:/bitbucket.org/eip-uprrp/testing-testing` para descargar la carpeta `tema-nombre` de `Bitbucket`. En esa carpeta, haz doble “click” en el archivo `Testing.pro`.
|
|
292
|
+ * Descargando la carpeta del proyecto de `Bitbucket`: Utiliza un terminal y escribe el comando `git clone http:/bitbucket.org/eip-uprrp/testing-testing` para descargar la carpeta `tema-nombre` de `Bitbucket`. En esa carpeta, haz doble “click” en el archivo `Testing.pro`.
|
292
|
293
|
|
293
|
294
|
2. Configura el proyecto y corre el programa. Verás una pantalla similar a la siguiente:
|
294
|
295
|
|
|
@@ -296,19 +297,19 @@ Este ejercicio **NO requiere programación**, debes hacer las pruebas **sin mira
|
296
|
297
|
|
297
|
298
|
![figure11.png](images/figure11.png)
|
298
|
299
|
|
299
|
|
- **Figura 11** - Ventana para seleccionar la función que se va a probar.
|
|
300
|
+ **Figura 11.** Ventana para seleccionar la función que se va a probar.
|
300
|
301
|
|
301
|
302
|
---
|
302
|
303
|
|
303
|
304
|
3. Selecciona el botón de `3 Sorts` y obtendrás la interfaz de la Figura 5.
|
304
|
305
|
|
305
|
|
-4. La "Version Alpha" en la caja indica que estás corriendo la primera versión del algoritmo `3 Sorts`. Usa las pruebas que escribiste en el Ejercicio 1 para validar la "Version Alpha". Luego, haz lo mismo para las versiones Beta, Gamma y Delta. Escribe cuáles son las versiones correctas (si alguna) de la función y porqué. Recuerda que, para cada función, algunas o todas las implementaciones pueden estar incorrectas. Además, especifica cuáles pruebas te permitieron determinar las versiones que son incorrectas.
|
|
306
|
+4. La "Versión Alpha" en la caja indica que estás corriendo la primera versión del algoritmo `3 Sorts`. Usa las pruebas que escribiste en el Ejercicio 1 para validar la "Version Alpha". Luego, haz lo mismo para las versiones Beta, Gamma y Delta. Escribe cuáles son las versiones correctas (si alguna) de la función y por qué. Recuerda que, para cada función, algunas o todas las implementaciones pueden estar incorrectas. Además, especifica cuáles pruebas te permitieron determinar las versiones que son incorrectas.
|
306
|
307
|
|
307
|
308
|
|
308
|
309
|
|
309
|
|
-### Ejercicio 3: Usar `assert` para realizar pruebas unitarias
|
|
310
|
+### Ejercicio 3 - Usar `assert` para realizar pruebas unitarias
|
310
|
311
|
|
311
|
|
-Hacer pruebas "a mano" cada vez que corres un programa es una tarea que resulta "cansona" bien rápido. En los ejercicios anteriores lo hiciste para unas pocas funciones simples. ¡Imagínate hacer lo mismo para un programa complejo completo como un navegador o un procesador de palabras!
|
|
312
|
+Hacer pruebas a mano cada vez que corres un programa es una tarea que puede resultar cansona bien rápido. En los ejercicios anteriores lo hiciste para unas pocas funciones simples. ¡Imagínate hacer lo mismo para un programa complejo como un navegador o un procesador de palabras!
|
312
|
313
|
|
313
|
314
|
Las *pruebas unitarias* ayudan a los programadores a validar códigos y simplificar el proceso de depuración ("debugging"), a la vez que evitan la tediosa tarea de hacer pruebas a mano en cada ejecución.
|
314
|
315
|
|
|
@@ -346,7 +347,7 @@ Las *pruebas unitarias* ayudan a los programadores a validar códigos y simplifi
|
346
|
347
|
|
347
|
348
|
1. Utiliza "Entrega 1" en Moodle para entregar la tabla con las pruebas que diseñaste en el Ejercicio 1 y que completaste en el Ejercicio 2 con los resultados de las pruebas de las funciones.
|
348
|
349
|
|
349
|
|
-2. Utiliza "Entrega 2" en Moodle para entregar el archivo `main.cpp` que contiene las funciones `test_isALetter`, `test_isValidTime`, `test_gcd` y sus invocaciones. Recuerda utilizar buenas prácticas de programación, al incluir el nombre de los programadores y documentar tu programa.
|
|
350
|
+2. Utiliza "Entrega 2" en Moodle para entregar el archivo `main.cpp` que contiene las funciones `test_isALetter`, `test_isValidTime`, `test_gcd` y sus invocaciones. Recuerda utilizar buenas prácticas de programación, incluye el nombre de los programadores, y documenta tu programa.
|
350
|
351
|
|
351
|
352
|
---
|
352
|
353
|
|