software: técnicas calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo...
TRANSCRIPT
![Page 1: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/1.jpg)
Calidad delsoftware: técnicasde prevención,detección ycorrección dedefectos Xavier Escudero Sabadell PID_00178932
![Page 2: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/2.jpg)
© FUOC • PID_00178932 Calidad del software: técnicas de prevención, detección y corrección...
Ninguna parte de esta publicación, incluido el diseño general y la cubierta, puede ser copiada,reproducida, almacenada o transmitida de ninguna forma, ni por ningún medio, sea éste eléctrico,químico, mecánico, óptico, grabación, fotocopia, o cualquier otro, sin la previa autorización escritade los titulares del copyright.
![Page 3: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/3.jpg)
© FUOC • PID_00178932 Calidad del software: técnicas de prevención, detección y corrección...
Índice
Introducción............................................................................................... 7
Objetivos....................................................................................................... 8
1. Técnicas de detección de fallos. Las pruebas.............................. 9
1.1. Principios de las pruebas ............................................................ 9
1.2. Niveles de prueba ........................................................................ 11
1.2.1. Pruebas unitarias o de componente .............................. 13
1.2.2. Pruebas de integración .................................................. 14
1.2.3. Pruebas de sistema ......................................................... 17
1.2.4. Pruebas de aceptación ................................................... 17
1.3. Tipos de prueba ........................................................................... 18
1.3.1. Tipo de pruebas según características de calidad ........... 18
1.3.2. Pruebas de confirmación y regresión ............................ 20
1.3.3. Pruebas de humo ........................................................... 20
1.3.4. Pruebas manuales y automatizadas ............................... 21
1.4. Tipos de entornos de prueba ...................................................... 21
1.5. El proceso de pruebas. Actividades y entregables ....................... 22
1.5.1. Planificación y control .................................................. 23
1.5.2. Análisis y diseño ............................................................ 24
1.5.3. Implementación ............................................................. 27
1.5.4. Ejecución ........................................................................ 28
1.5.5. Evaluación del criterio de salida e informe de
resumen .......................................................................... 29
1.5.6. Cierre .............................................................................. 29
1.6. Técnicas de diseño de prueba dinámicas .................................... 29
1.6.1. Técnicas dinámicas basadas en la especificación ........... 31
1.6.2. Técnicas dinámicas basadas en la estructura ................. 35
1.6.3. Técnicas dinámicas basadas en la experiencia ............... 37
1.6.4. Técnicas dinámicas basadas en defectos ....................... 38
2. Técnicas de detección de defectos. Las revisiones y el
análisis estático.................................................................................. 40
2.1. Revisiones .................................................................................... 40
2.1.1. Tipos de revisiones. Roles y responsabilidades .............. 40
2.1.2. El proceso de revisión ................................................... 41
2.1.3. Listas de comprobación ................................................. 43
2.2. Análisis estático ........................................................................... 43
2.2.1. Análisis de la estructura del código ............................... 43
2.2.2. Cumplimiento de estándares de programación ............ 44
2.2.3. Cálculo de métricas de código ...................................... 44
![Page 4: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/4.jpg)
© FUOC • PID_00178932 Calidad del software: técnicas de prevención, detección y corrección...
3. Técnicas de localización y corrección de defectos.................... 45
3.1. La depuración .............................................................................. 45
3.1.1. Reproducción del fallo .................................................. 45
3.1.2. Diagnóstico .................................................................... 46
3.1.3. Corrección ...................................................................... 47
3.1.4. Gestión del conocimiento y cierre ................................ 48
3.2. Bitácora ........................................................................................ 49
3.3. Refactoring del código .................................................................. 54
4. Técnicas de prevención de defectos.............................................. 57
4.1. Análisis de causa raíz .................................................................. 57
4.2. Educación y formación ............................................................... 58
4.3. Guías y estándares de programación .......................................... 59
4.4. Validación de los datos ............................................................... 60
4.4.1. Diseño por contrato ...................................................... 61
4.5. Desarrollo guiado por pruebas .................................................... 62
4.6. Reutilización ................................................................................ 63
5. Técnicas de tolerancia a fallos....................................................... 65
5.1. Detección del fallo ...................................................................... 65
5.2. Generación de la excepción ........................................................ 66
5.3. Gestión de la excepción .............................................................. 68
5.4. Recuperación ............................................................................... 71
6. Herramientas....................................................................................... 73
6.1. Herramientas de gestión de las pruebas ..................................... 73
6.2. Herramientas de diseño y preparación de datos de las
pruebas ........................................................................................ 74
6.3. Herramientas para la ejecución de pruebas dinámicas ............... 75
6.3.1. Automatización de las pruebas ...................................... 76
6.3.2. Herramientas para la ejecución de pruebas unitarias
e integración .................................................................. 77
6.3.3. Herramientas para la ejecución de pruebas de
sistema ........................................................................... 77
6.4. Herramientas para la ejecución de pruebas estáticas .................. 80
6.4.1. Herramientas de revisión ............................................... 80
6.4.2. Herramientas de análisis estático de código .................. 80
6.5. Herramientas de soporte al desarrollo ........................................ 81
6.5.1. Herramientas de soporte a la programación ................. 81
6.5.2. Herramientas de depuración ......................................... 82
6.5.3. Herramientas de integración continua .......................... 83
6.5.4. Herramientas de gestión de la configuración ................ 83
Resumen....................................................................................................... 84
Actividades.................................................................................................. 85
![Page 5: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/5.jpg)
© FUOC • PID_00178932 Calidad del software: técnicas de prevención, detección y corrección...
Ejercicios de autoevaluación.................................................................. 86
Solucionario................................................................................................ 88
Glosario........................................................................................................ 92
Bibliografía................................................................................................. 94
![Page 6: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/6.jpg)
![Page 7: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/7.jpg)
© FUOC • PID_00178932 7 Calidad del software: técnicas de prevención, detección y corrección...
Introducción
Este módulo tiene como objetivo estudiar detalladamente las técnicas relacio-
nadas con la prevención, detección, corrección y gestión de los defectos del
software.
En primer lugar, estudiaremos cuáles son las pruebas clásicas, sus objetivos
y los diferentes tipos de prueba existentes, considerando las diferentes fases
y entregables que se producen en ellas. Analizaremos también qué son las
revisiones y el análisis estático y qué beneficios aportan respecto de las pruebas
clásicas.
Evaluaremos cuáles son las técnicas que nos pueden ayudar a localizar los de-
fectos y a corregirlos con técnicas como la depuración, la bitácora y el refacto-
ring del código.
A continuación estableceremos cuáles son los medios con los que podemos
prevenir los defectos, desde los de carácter formativo hasta la implantación
de medidas de definición de buenas prácticas y el uso de técnicas específicas,
como el diseño por contrato.
A pesar de las diferentes técnicas anteriores, veremos que los fallos son inevi-
tables, por lo que analizaremos qué medidas existen para protegernos de ellos,
principalmente con la gestión de excepciones.
Por último, revisaremos las diferentes tipologías de herramientas que nos pue-
den dar soporte para la ejecución de las técnicas que habremos revisado en
el módulo.
![Page 8: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/8.jpg)
© FUOC • PID_00178932 8 Calidad del software: técnicas de prevención, detección y corrección...
Objetivos
Los objetivos que los estudiantes tenéis que haber alcanzado una vez trabaja-
dos los contenidos de este módulo son:
1. Entender qué son las pruebas y diferenciar los niveles y tipos que se pueden
realizar.
2. Entender el objetivo de las revisiones, cuál es el proceso formal que se tiene
que seguir en ellas, y por qué es necesario que se realicen durante todo el
ciclo de vida.
3. Entender las diferentes técnicas de diseño que tenéis a vuestro alcance para
realizar las pruebas y revisiones, teniendo en cuenta las restricciones de
tiempo y la tipología de las características a probar.
4. Entender el proceso de localización de defectos y cómo se pueden usar el
mecanismo de bitácora y el refactoring del código para mejorar su calidad.
5. Identificar los mecanismos de prevención que podemos aplicar para evitar
defectos en la programación, reconociendo la importancia de establecer
unas guías y buenas prácticas, analizar de forma continua dónde se pro-
ducen más defectos y realizar acciones de validación en los datos.
6. Saber utilizar los mecanismos de gestión de excepciones para el tratamien-
to de fallos inevitables.
7. Conocer cuáles son las diferentes herramientas que podéis utilizar para
aplicar todas las técnicas.
![Page 9: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/9.jpg)
© FUOC • PID_00178932 9 Calidad del software: técnicas de prevención, detección y corrección...
1. Técnicas de detección de fallos. Las pruebas
Las pruebas1 de software son una estrategia de gestión del riesgo en la que se
valida que los requisitos se han cumplido y se buscan defectos. Las pruebas
tienen un carácter "destructivo" en el sentido de que se tienen que planificar
y diseñar para encontrar defectos y fallos en el software. Implica un cambio
de mentalidad respecto al que desarrolla, que trata de demostrar que lo que
ha construido funciona, y no al revés.
Las pruebas son el proceso de análisis de un elemento de software para
detectar la diferencia entre las condiciones existentes y las requeridas y
evaluar las características del elemento de software.
Sin embargo, el objetivo de las pruebas no es únicamente encontrar defec-
tos, sino también obtener confianza en el nivel de la calidad de un software,
comparando los resultados obtenidos no solo con los resultados especificados
(funcionalidad) sino también con los esperados (confianza, facilidad de man-
tenimiento, usabilidad, rendimiento, etc.).
Si bien en algunos modelos se consideran las pruebas únicamente como un
proceso de ejecución de software, dentro de ellas también tenemos que incluir
las técnicas de revisión (revisión de entregables, proceso, etc.) y las de análisis
estático (análisis de la calidad del código fuente...). En este módulo conside-
raremos que las pruebas incluyen tanto la verificación como la validación du-
rante todo el ciclo de vida, extendiendo el modelo clásico en el que las pruebas
se realizan solo después de la construcción.
1.1. Principios de las pruebas
Existen diferentes aspectos que determinan el éxito y eficacia de las pruebas:
1) Los probadores tienen que evaluar e interpretar de forma meticulosa los
resultados obtenidos en las pruebas. En caso de una mala interpretación de
resultados, se puede concluir que las pruebas han ido bien, cuando lo que
realmente ha habido ha sido un fallo, o que han ido mal, cuando realmente
no ha habido ningún fallo. Eso puede comportar grandes esfuerzos en la de-
tección de defectos que no existen o en la aparición de defectos posteriores,
no detectados por un mal análisis.
2) Los casos de prueba tienen que ser desarrollados tanto para condiciones
de entrada válidas como inválidas. Considerar únicamente valores de entrada
válidos en las pruebas para demostrar que el software funciona correctamente
(1)En inglés, el proceso de las prue-bas se llama testing.
Ved también
En el módulo "Calidad del soft-ware: gestión de la calidad ymétricas" se ve que las pruebasestán contenidas dentro delcontrol de la calidad.
![Page 10: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/10.jpg)
© FUOC • PID_00178932 10 Calidad del software: técnicas de prevención, detección y corrección...
es uno de los errores más comunes. Los usuarios pueden cometer en la entra-
da de datos errores de tipo tipográfico, de formato o de valores permitidos,
aunque el software aporte información detallada de los valores que pueden ser
entrados, y puede ocurrir que el software no realice las validaciones necesarias
y permita valores incorrectos.
3) Las pruebas pueden mostrar qué defectos están presentes, pero no pueden
asegurar que no hay defectos. Se reduce la probabilidad de defectos no descu-
biertos, pero aunque no se encuentre ningún defecto, no tenemos ninguna
seguridad de que no haya defectos por descubrir.
4) Probar todas las condiciones y combinaciones es imposible, excepto en los
casos simples. En lugar de probar exhaustivamente, más vale realizar un análi-
sis de riesgos y prioridades para establecer la estrategia y esfuerzos de las prue-
bas.
5) Las actividades de prueba se han de iniciar lo más pronto posible en el ciclo
de vida del desarrollo. Las actividades de pruebas realizadas en fases iniciales,
como las revisiones o el diseño de las pruebas, pueden encontrar defectos que
se podrán corregir con un coste menor que si se hubieran descubierto en fases
finales del desarrollo.
Ejemplo
Revisando el diseño de la arquitectura podríamos detectar que no se ha tenido en cuentala gestión de los usuarios.
6) La mayoría de los defectos están causados por un pequeño número de mó-
dulos o áreas (los de mayor complejidad, mal diseñados, desarrollados por un
programador no experimentado, etc.), por lo que es bueno invertir más tiem-
po en probar estas áreas para encontrar más defectos. Si, por ejemplo, tenemos
en un sistema dos componentes, A y B, en los que se han encontrado 25 y 50
defectos, respectivamente, la probabilidad de encontrar más defectos en A es
más alta que la de encontrarlos en B.
Podemos encontrar una analogía en el principio de Pareto, o regla del 80-20,
para indicar que el 80% de los problemas se encuentran ubicados en el 20%
de los módulos.
Principio de Pareto
Pareto fue un economista italiano que observó que el 20% de la población italiana estabaen posesión del 80% de la propiedad (riqueza). Esta regla ha sido aplicada en diferentescampos (económicos, políticos, etc.) y también en el mundo informático.
El principio de Pareto también tiene aplicación en los costes de desarrollo, donde, nor-malmente, el 80% del esfuerzo de desarrollo acaba produciendo el 20% de código, mien-tras que el 20% de esfuerzo restante produce el 80% de código.
![Page 11: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/11.jpg)
© FUOC • PID_00178932 11 Calidad del software: técnicas de prevención, detección y corrección...
7) Aunque realicemos pruebas para encontrar o prevenir determinados defec-
tos, hay otros que pueden crecer ocultos. Si no actualizamos los casos de prue-
ba, las pruebas serán cada vez menos efectivas. Un buen proceso de pruebas
requiere que se actualicen los casos de prueba y se creen nuevas pruebas para
detectar otros tipos de defectos.
Analogía
Los insectos que sobreviven al uso de un pesticida son más inmunes al veneno que losdemás insectos. En este caso, las compañías que crean los pesticidas tienen que trabajarcontinuamente para encontrar nuevos productos que puedan eliminar los insectos quehan sobrevivido a los anteriores pesticidas.
8) Para ser más eficaces, las pruebas tienen que ser realizadas por un equi-
po independiente. Casi ningún programador admitirá que el software que ha
desarrollado tiene defectos, y el exceso de familiaridad hace muy difícil que
identifique los defectos de lo que él mismo ha producido. El requisito de un
grupo independiente de pruebas puede ser implementado como una entidad
separada de la organización, o bien como un grupo interno en el desarrollo,
pero dedicado únicamente a las actividades de pruebas y con visión objetiva.
Como humanos que somos, a veces no somos capaces de ver lo que hemos hecho maly necesitamos el apoyo de alguien externo y no "viciado" que tenga una visión indepen-diente y fresca.
9) Las pruebas han de ser repetibles. Hay que diseñarlas y ejecutarlas siempre
bajo las mismas condiciones (equipamientos, entradas, acontecimientos...)
para poder asegurar que el defecto se ha corregido. Si cambian las condiciones,
no podremos asegurarlo.
1.2. Niveles de prueba
Las pruebas se pueden realizar en diferentes niveles, según que queramos pro-
bar de forma aislada un componente, la integración entre componentes o el
funcionamiento del sistema como un todo. Esta clasificación es la denomina-
da de niveles de prueba, y en ella podemos diferenciar:
1)�Pruebas�unitarias�o�de�componente. Tienen como objetivo probar cada
componente (módulo, clase...) de forma aislada del resto del sistema. Están
consideradas como una actividad dentro del proceso de construcción, y, por
lo tanto, las realiza el equipo de desarrollo.
2)�Pruebas�de�integración. Se prueban las interfaces entre componentes, di-
ferentes partes del sistema (entre un componente y el sistema operativo, por
ejemplo), o bien entre sistemas (entre un sistema de nóminas y un sistema
externo bancario, por ejemplo). Suele realizarlas el equipo de pruebas, aunque
en algunos casos también las efectúa el equipo de desarrollo.
![Page 12: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/12.jpg)
© FUOC • PID_00178932 12 Calidad del software: técnicas de prevención, detección y corrección...
3)�Pruebas�de�sistema. Tienen como objetivo encontrar defectos y validar que
el sistema cumple las especificaciones, comparando los resultados obtenidos
con los requisitos del sistema. Son realizadas por el equipo de pruebas.
4)�Pruebas�de�aceptación. Es el último nivel, en el que el cliente tiene que
validar que el desarrollo ha cumplido lo que se requería de él y no hay riesgos
en la puesta en marcha del aplicativo.
Cuanto mejor se haya realizado un nivel de pruebas, mayor será la eficiencia
de los siguientes niveles y menores defectos se encontrarán en ellos.
En todos los niveles se pueden validar requisitos tanto funcionales como no
funcionales. Así, por ejemplo, podemos comprobar una funcionalidad en un
componente o en el sistema y, también, el rendimiento del componente o del
sistema.
![Page 13: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/13.jpg)
© FUOC • PID_00178932 13 Calidad del software: técnicas de prevención, detección y corrección...
1.2.1. Pruebas unitarias o de componente
Una unidad es la pieza más pequeña que se puede probar. Si bien en un lengua-
je procedimental la unidad mínima a probar es una función o procedimiento,
en orientación a objetos existen dos posibilidades, considerar un método o
una clase.
Unidad mínima en orientación a objetos
En orientación a objetos no hay consenso sobre si la unidad mínima a probar tiene queser un método o una clase al completo, así que se puede utilizar cualquiera de las dosposibilidades y hacer combinaciones entre ellas.
Las pruebas unitarias son desarrolladas y ejecutadas por los propios programa-
dores. Eso tiene algunos inconvenientes:
• Un programador desarrolla los casos de prueba unitarios para que funcio-
nen, en lugar de crearlos para que fallen (contrasta con la filosofía de pro-
bar si funciona y el objetivo de un probador que quiere encontrar defec-
tos).
• Los defectos encontrados no son registrados por el programador, por lo
que no podemos aprender de ellos o prevenirlos.
IEEE 1008
El estándar IEEE 1008 descri-be aspectos relacionados conpruebas unitarias.
En Java existen librerías para la creación de pruebas unitarias, entre las que
destaca JUnit. JUnit permite crear nuestros casos de prueba a partir de las clases
TestCase y TestSuite. La primera permite definir un caso de prueba, mientras
que la segunda sirve para agrupar diferentes casos de prueba.
Un caso de prueba que herede de TestCase tiene que definir tres grupos de
métodos:
1)�testNombrePrueba. Para cada condición de prueba que queramos compro-
bar crearemos un método con el prefijo "test". Dentro de ella podemos utilizar
diferentes sentencias de JUnit para comprobar los resultados de la ejecución.
La más habitual es assertEquals (permite comparar si el resultado obtenido
es igual al valor esperado).
2)�setUp. El código incluido en el método setUp se ejecutará siempre una vez
para todos los métodos testNombrePrueba. Sirve para inicializar las varia-
bles usadas en ellos, por ejemplo para abrir una conexión a la base de datos,
inicializar un fichero, etc.
3)�tearDown. En este método tenemos que cerrar cualquiera de los recursos
que hayamos utilizado en los métodos testNombrePrueba, habitualmente
los que se crearon en el setUp.
Ved también
Veremos más en detalle quéson un caso de prueba y unacondición de prueba en elsubapartado 1.5 de este mó-dulo.
![Page 14: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/14.jpg)
© FUOC • PID_00178932 14 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo
Supongamos que en nuestro sistema VCV nos piden incluir una política de fidelizaciónpor la que los puntos obtenidos por cada reserva realizada se acumulen y se pueda obtenercon ellos descuentos en la compra de libros, entradas de cine, etc. Para el cálculo de lospuntos, nos indican que sigamos el siguiente algoritmo:
• Dar 0 puntos si el número de adultos reservado es 1;• 2 puntos si el número de adultos es de más de 1 y hasta 9;• 5 puntos de 10 adultos hasta 24;• 10 puntos si es superior a 24;• el programa no acepta más de 50.
Este se ha implementado en Java con el siguiente código:
public class GestorFidelizacion { public int calcularPuntos(int aNumAdultos){ int puntos = 0; if (aNumAdultos>=2 && aNumAdultos<10) { puntos = 2; } else if (aNumAdultos>=10 && aNumAdultos<25) { puntos = 5; } else if (aNumAdultos>=25) { puntos = 10; } return puntos; }}
Vemos por medio de JUnit cómo podemos verificar con un caso de prueba que la funcióncalcularPuntos devuelve un 5 si introducimos el valor 18.
importe junit.framework.TestCase;
public class GestorFidelizacionTestCase extends TestCase { GestorFidelizacion GestorFidelizacion; @Override protected void setUp() throws Exception { GestorFidelizacion = new GestorFidelizacion(); }
@Override protected void tearDown() throws Exception { GestorFidelizacion = null; } public void testCalculoPuntos() throws Exception { assertEquals("Se espera que los puntos sean 5", 5, GestorFidelizacion.calcularPuntos(18)); }}
En el método setUp inicializamos el objeto que usaremos en los diferentes casos de prue-ba. En la ejecución del caso de prueba testCalculoPuntos se verifica que llamandoal método calcularPuntos con el valor 18 el resultado es 5. Si en alguna ejecución elresultado real no es el esperado, JUnit nos lo indicará. Finalmente, una vez ejecutadostodos los casos de prueba, se ejecuta el método tearDown, en el que se libera el objetoGestorFidelizacion usado.
1.2.2. Pruebas de integración
Respecto de las pruebas de integración se han de tener en cuenta tanto los
niveles de integración como las estrategias de las pruebas.
![Page 15: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/15.jpg)
© FUOC • PID_00178932 15 Calidad del software: técnicas de prevención, detección y corrección...
Niveles de integración
Las pruebas de integración pueden ser realizadas dentro de un sistema o entre
sistemas, por lo que pueden clasificarse en:
• Pruebas�de�integración�entre�componentes. Se prueba la interacción en-
tre componentes de un sistema. Estas pruebas se realizan a continuación
de las pruebas de componente.
• Pruebas�de�integración�entre�sistemas. Se prueba la interacción entre sis-
temas independientes que son integrados entre sí. Se realizan a continua-
ción de las pruebas de sistema. Se aplican a casos en los que construimos
una aplicación que está formada por diferentes sistemas construidos por
distintos equipos.
Este nivel de pruebas y las pruebas de sistema las realizan grupos de profesio-
nales dedicados a las pruebas.
Estrategias de pruebas de integración
A menudo, las pruebas de integración no se pueden realizar de golpe, cuando
ya están desarrollados todos los módulos (componentes o sistemas de un sis-
tema), sino que se van realizando a medida que se van desarrollando y pro-
bando los módulos. Basándonos en eso podemos establecer diferentes estrate-
gias de integración.
El caso más extremo es esperar a que todos los módulos estén desarrollados
e integrados para realizar las pruebas de integración. A esta estrategia se la
llama big-bang o estrategia no incremental. En contraposición encontramos las
estrategias incrementales, en las que los módulos se van probando a medida
que se van desarrollando e integrando en el proyecto.
Desarrollo de sistemasintegrados entre sí
Los diferentes sistemas integra-dos entre sí pueden haber si-do desarrollados por distintosequipos, distintas metodolo-gías o ciclos de vida, etc.
![Page 16: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/16.jpg)
© FUOC • PID_00178932 16 Calidad del software: técnicas de prevención, detección y corrección...
Dentro de las estrategias incrementales existen diversas alternativas:
1)�Top�down. En esta estrategia se prueba en primer lugar el nivel superior
de la jerarquía (componente C1), y se continúa hacia abajo probando la inte-
gración con cada una de las capas. Puede suceder que los módulos o compo-
nentes inferiores (por ejemplo, C2, C3 y C4) no estén todavía preparados o
desarrollados. Para dar solución a esta problemática, se puede crear un código
"maniquí2" pequeño que simule a C2, C3 y C4 y devuelva valores esperados al
componente superior (C1). Este código simulado se llama stub.
Los stubs simulan las funciones de los módulos inferiores que el módulo
probado solicita. Un stub devuelve un valor "predefinido" al módulo
que lo llama a fin de que pueda continuar con la ejecución.
(2)En inglés, dummy.
2)�Bottom-up. Las interfaces de los componentes de los niveles más bajos son
las primeras que se prueban. En este caso puede suceder que los componentes
superiores no estén preparados o finalizados. Para suplirlo podemos crear pe-
queños códigos "maniquí" que simulen los componentes superiores y pasen
valores específicos al componente que queremos probar para ver que su fun-
cionamiento es el esperado. A este código simulado se le llama driver.
Los drivers simulan el comportamiento de los módulos superiores (to-
davía no desarrollados) que llaman al módulo probado. Un driver pasa
parámetros prefijados al módulo probado y comprueba que el resultado
recibido es el esperado.
Maniquíes
Tanto los drivers como losstubs son "maniquíes", porqueno ejecutan comportamientoreal, sino que de forma muysencilla pasan y recogen valo-res prefijados y conocidos, sintratarlos.
![Page 17: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/17.jpg)
© FUOC • PID_00178932 17 Calidad del software: técnicas de prevención, detección y corrección...
3)�Integración�funcional. En este caso la integración se realiza por área fun-
cional.
4)�Sandwich. Es una estrategia mixta, en la que los módulos o componentes
de alto nivel se integran de forma top-down y los componentes de bajo nivel
con bottom-up.
1.2.3. Pruebas de sistema
Las pruebas de sistema están dirigidas a probar el sistema de forma completa,
en función de los riesgos y especificaciones de los requisitos, procesos de ne-
gocio, casos de uso u otras descripciones del sistema.
Una prueba de sistema ejecuta una transacción de negocio completa, desde
el punto de vista del usuario, desde la pantalla de introducción de los datos
hasta la respuesta que da el sistema a estos datos.
Ejemplo
En nuestro sistema VCV probar cómo funciona una reserva concreta desde que se esco-gen los datos de la reserva hasta que se efectúa la compra y se imprime el billete. Inter-namente, los componentes pueden efectuar funciones en las que se llaman entre sí, oefectuar operaciones unitarias que habrán sido verificadas con pruebas de integración yunitarias, pero en la prueba de sistema solo comprobamos que la visión como un todofunciona correctamente.
En general, es en este nivel de pruebas donde se invierten más esfuerzos y se
focaliza el mayor número de tipo de pruebas (rendimiento, funcional, usabi-
lidad, seguridad, etc.).
1.2.4. Pruebas de aceptación
Una vez se han corregido todos los defectos encontrados en los niveles pre-
vios, el sistema se entrega al usuario o cliente para que realice las pruebas de
aceptación. Durante estas pruebas, el cliente tiene que validar que el desarrollo
ha cumplido lo que se requería de él y no hay riesgos en la puesta en marcha
del aplicativo.
Existen diferentes tipos de pruebas de aceptación:
1)�Pruebas�de�aceptación�de�usuario. Las realizan los usuarios y gestores del
aplicativo. Su objetivo es probar su funcionalidad.
![Page 18: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/18.jpg)
© FUOC • PID_00178932 18 Calidad del software: técnicas de prevención, detección y corrección...
2)�Pruebas�de�aceptación�operacional3. Estas pruebas son realizadas por el
administrador de sistemas. En estas pruebas se comprueba la facilidad de ins-
talación del aplicativo, el funcionamiento de las copias de seguridad, la recu-
peración de fallos, las tareas de mantenimiento del aplicativo y se revisan pe-
riódicamente las vulnerabilidades de seguridad.
3)�Pruebas�de�aceptación�contractual�y�de�reglamento. Se verifica el sistema
de acuerdo con los criterios que se definieron en el contrato con el proveedor, y
el cumplimiento con estándares gubernamentales, legales y de seguridad (por
ejemplo, el cumplimiento con la Ley Orgánica de Protección de Datos, LOPD).
(3)También llamadas pruebas depreparación operacional.
4)�Pruebas�alpha�y�beta. Si el sistema ha sido desarrollado como un paquete
comercial destinado a la venta, las pruebas de aceptación de usuario no son
posibles, ya que los usuarios son desconocidos. En este caso se usan dos tipos
de pruebas, ordenadas en el tiempo en dos fases:
a) En la primera fase se realizan pruebas alpha. En este tipo de pruebas se
invita a participar a usuarios potenciales y desarrolladores para que prueben el
aplicativo en la ubicación del equipo de desarrollo, y se registran los defectos
encontrados.
b) En la segunda fase se realizan pruebas beta, donde el sistema es enviado a
un conjunto de usuarios a fin de que lo instalen y lo prueben bajo condiciones
reales (datos, procesos, etc.). Los usuarios envían las incidencias detectadas y
estas son corregidas por el desarrollo. Estos usuarios no tienen ningún contac-
to con los desarrolladores.
1.3. Tipos de prueba
COTS
En inglés, el software desarro-llado como paquete comer-cial se llama commercial off theshelf (COTS).
Los tipos de prueba permiten definir de forma clara los objetivos de los dife-
rentes niveles de prueba. Dentro de un nivel podemos ejecutar diferentes ti-
pos de prueba, cada uno con un objetivo específico, como probar una función
de un componente o sistema, la estructura de un componente o sistema, una
característica de calidad no funcional (como la usabilidad o el rendimiento) o
la verificación de los cambios realizados en el software (como la confirmación
o la regresión).
1.3.1. Tipo de pruebas según características de calidad
De acuerdo con las características de calidad que se prueban, podemos dife-
renciar los siguientes tipos de prueba:
Nota
Podemos realizar pruebas derendimiento en el nivel unita-rio, el nivel de integración o elnivel de sistema, entre otros.
![Page 19: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/19.jpg)
© FUOC • PID_00178932 19 Calidad del software: técnicas de prevención, detección y corrección...
1)�Pruebas�funcionales. Su objetivo es validar la funcionalidad del sistema.
Se incluyen en ellas la validación de las características de calidad: idoneidad,
interoperabilidad, seguridad, precisión y cumplimiento. Acostumbran a aso-
ciarse de forma incorrecta con las técnicas de caja negra, ya que estas se pue-
den aplicar también a las pruebas no funcionales.
b)�Pruebas�no�funcionales. Su objetivo es validar los criterios de calidad no
funcionales y comprobar cómo funciona el software. Dentro de las pruebas no
funcionales se incluyen, entre otras, las pruebas de rendimiento, las pruebas de
carga, las pruebas de estrés, las pruebas de usabilidad, las pruebas de facilidad
de mantenimiento, las pruebas de fiabilidad y las pruebas de portabilidad.
Tipos de prueba no funcional Descripción
Pruebas de diseño Se comprueba el diseño de la interfaz, si sigue una guía de estilounificada, una gestión de colores correcta, etc.
Pruebas de corrección idiomática y ortográfica Se valida la ortografía de los literales mostrados, la corrección endiferentes idiomas, etc.
Pruebas de compatibilidad Se comprueba que la aplicación funciona de forma correcta en di-ferentes entornos (sistemas operativos, navegadores web, etc.).
Pruebas de rendimiento: carga, volumen, estrés y estabilidad • Pruebas de carga. Tienen como objeto validar el correcto com-portamiento de la aplicación en determinadas condiciones decarga (con diferente número de accesos simultáneos de usua-rios a la vez).
• Pruebas de volumen. El objetivo es ver cómo se comporta elsistema con grandes cantidades de datos/ficheros.
• Pruebas de estrés. El objetivo es ver el comportamiento del sis-tema en las condiciones más extremas para poder conocer sila aplicación podrá dar servicio por encima de las condicionesesperadas.
• Pruebas de resistencia o de estabilidad. Este tipo de prueba tienecomo objetivo determinar si una carga continua esperada nodegrada el sistema. En general, se utiliza para encontrar si hayalgún problema de fugas de memoria en la aplicación.
Pruebas de seguridad El objetivo de estas pruebas es la detección de vulnerabilidades deseguridad en el software.
Pruebas de usabilidad y accesibilidad4 Implican medir aspectos como el rendimiento de uso que hace elusuario (cuánto tiempo o pasos utiliza para completar sus tareasbásicas), cómo recuerda el usuario la utilización después de perío-dos de no utilización, criterios de accesibilidad, etc.
(4)La accesibilidad es la capacidad que tiene el software para ser utilizado por personascon discapacidades.
3)�Pruebas�estructurales. Las pruebas estructurales, también llamadas pruebas
de caja blanca por la técnica que se usa en ellas, se basan en analizar el código
fuente para observar cómo se comporta el sistema internamente.
Técnicas de caja negra
Las técnicas de caja negra secaracterizan por basarse enprobar el comportamiento delsistema desde un punto ex-terno, sin importar cómo es-té construido internamente elsoftware.
![Page 20: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/20.jpg)
© FUOC • PID_00178932 20 Calidad del software: técnicas de prevención, detección y corrección...
1.3.2. Pruebas de confirmación y regresión
Cuando se realizan cambios en un software (como resultado de una petición
de mejora o un correctivo de defectos), hay que repetir de nuevo las pruebas
para validar que los defectos se han corregido.
Las pruebas�de�confirmación se realizan para verificar que un defecto
ha sido corregido correctamente.
Es importante que las pruebas de confirmación se ejecuten en las mismas con-
diciones en las que se ejecutaron la última vez (datos de entrada, entorno, etc.).
Si las pruebas nos dan como resultado que se ha corregido el defecto, ¿pode-
mos considerar que el software es ya correcto? La respuesta es no, ya que la
experiencia demuestra que aparecen nuevos defectos o reaparecen defectos
en otras partes del sistema que aparentemente no han sido modificados en la
corrección de un defecto. La causa más común de la aparición o reaparición
de defectos es el desconocimiento del impacto que un cambio en un módu-
lo o componente tiene en el resto de componentes. A veces, la corrección es
"frágil" y resuelve un caso pequeño, pero no cubre otros casos más generales
y específicos.
Las pruebas�de�regresión tienen como objetivo ejecutar un conjunto
de pruebas predefinidas en cada cambio que se haga en el software y nos
permiten verificar que no se han introducido defectos en otras partes
del sistema como consecuencia de las correcciones.
Debido a la necesidad de repetir estas pruebas en cada cambio o versión, se
acostumbran a generar y ejecutar de forma automática mediante herramien-
tas, casi nunca de forma manual.
1.3.3. Pruebas de humo
Beneficios de las pruebasde regresión
Las pruebas de regresión nospermiten comprobar que nohemos "roto" una cosa mien-tras "arreglábamos" otra.
Una prueba de humo5 es la ejecución de un subconjunto de todos los
casos de prueba definidos, que cubren la funcionalidad principal de un
componente o sistema, para determinar que las funciones más impor-
tantes van bien, sin necesidad de realizar todas las pruebas.
Origen de la expresión "prueba de humo"
La expresión "prueba de humo" proviene de la industria electrónica. Si un ingeniero dise-ña un circuito o un sistema electrónico, lo primero que hace es enchufarlo a la corrientey encender el circuito. Si sale humo, apaga el circuito y vuelve a la mesa con el soldador.Si no sale humo, continúa realizando más pruebas para ver si funciona correctamente.
(5)En inglés, smoke test
![Page 21: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/21.jpg)
© FUOC • PID_00178932 21 Calidad del software: técnicas de prevención, detección y corrección...
Las pruebas de humo son un paso previo a la ejecución de pruebas que pueden
revelar fallos simples y críticos, lo que evita el esfuerzo innecesario que sería
la ejecución de todos los casos de prueba planificados.
1.3.4. Pruebas manuales y automatizadas
Las pruebas pueden ser ejecutadas de forma manual, o bien de forma automá-
tica con el apoyo de herramientas. El caso más habitual de utilización de he-
rramientas de apoyo lo encontramos en los siguientes tipos de prueba:
• Revisiones�de� la�calidad�interna�del�código. Se usan herramientas de
apoyo que analizan la estructura y complejidad del código y extraen di-
ferentes métricas (complejidad ciclomática, número de líneas duplicadas,
índice de facilidad de mantenimiento...).
• Pruebas�de�rendimiento. Permiten simular la navegación en el aplicativo
de múltiples usuarios.
1.4. Tipos de entornos de prueba
Cualquiera de los implicados en un proyecto (programadores, probadores,
usuarios, etc.) desea que su trabajo no sea interrumpido por nadie.
Ejemplo
Se ha finalizado el desarrollo de la nueva versión 2.6 del aplicativo del sistema VCV, quecorrige algunos de los defectos de la versión 2.5 que actualmente utilizan los usuarios. Sisustituimos la versión 2.5 por la versión 2.6 y hacemos las pruebas en paralelo, mientraslos usuarios acceden podemos impactar en su trabajo (por ejemplo, si hacemos pruebas derendimiento, ello les provocaría lentitud en el acceso). Incluso algunas de las funcionesprevias podrían dejar de funcionar en la nueva versión (imaginad el efecto que eso tendríaen los usuarios).
Para evitar conflictos entre los diferentes implicados con distintos objetivos,
las infraestructuras suelen estar divididas en cuatro tipos de entorno:
1)�Entorno�de�desarrollo. En este tipo de entorno se ejecutan las pruebas
unitarias.
2)�Entorno�de�pruebas. En este tipo de entorno se ejecutan las pruebas de
integración o las pruebas de sistema (podemos tener entornos específicos para
realizar unas u otras pruebas).
3)�Entorno�de�aceptación. En este tipo se ejecutan las pruebas de aceptación.
4)�Entorno�de�producción. Es un tipo de entorno en el que el aplicativo es
utilizado por los usuarios reales.
Pruebas sin herramientasde apoyo
Antiguamente, sin la existenciade herramientas de apoyo a laspruebas de rendimiento, cual-quier prueba de rendimientotenía que reunir físicamente avarios usuarios (podrían reque-rirse más de 50 usuarios, porejemplo) que tenían que regis-trar los tiempos obtenidos enun cuestionario.
![Page 22: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/22.jpg)
© FUOC • PID_00178932 22 Calidad del software: técnicas de prevención, detección y corrección...
De acuerdo con esta clasificación, un proyecto puede tener más de una ins-
tancia de entorno de cada tipo, tal como se ve en la tabla siguiente.
Tipo de entorno Entornos Propietario
Entorno de desarrollo • Entorno de desarrollo local (el del PC de cada desarrollador)• Entorno de desarrollo central
Proveedor de desarrollo
Entorno de pruebas • Entorno de pruebas de integración• Entorno de pruebas de sistema
Organización del cliente
Entorno de aceptación • Entorno de pruebas de aceptación/entorno de preproducción Organización del cliente
Entorno de producción • Entorno real de producción• Entorno de apoyo de producción (en caso de caída del principal)
Organización del cliente
El entorno de aceptación tiene que ser idéntico al entorno de producción con
el fin de minimizar los riesgos de fallos o defectos dependientes del entorno
(configuración de los servidores, balanceo, encaminadores y firewalls, etc.) y
reproducir una situación fiel a lo que será un uso regular del sistema (volumen
de datos de prueba iguales a los de producción...).
1.5. El proceso de pruebas. Actividades y entregables
Todo proceso de desarrollo incluye un conjunto de fases, entregables, proce-
dimientos y pasos que hay que realizar para producir un aplicativo. Dentro de
este proceso se encuentran relacionados con otros procesos, como el de prue-
bas, que se compone de las fases mostradas en la siguiente figura.
Las fases son secuenciales, pero en un proyecto concreto pueden superponerse,
realizarse en paralelo e incluso repetirse. En cada una de estas fases se generan
diferentes tipos de entregables, que estudiaremos en los siguientes subaparta-
dos.
Elementos de un entorno
Un entorno contiene elemen-tos específicos físicos y lógicos:elementos de red, servidoresweb, servidores de aplicacio-nes, servidores de base de da-tos, etc.
![Page 23: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/23.jpg)
© FUOC • PID_00178932 23 Calidad del software: técnicas de prevención, detección y corrección...
1.5.1. Planificación y control
El objetivo de la planificación de las pruebas es definir la misión de las pruebas
en el proyecto, analizando las necesidades del cliente y del propio proyecto,
así como sus riesgos. A ser posible, tiene que realizarse en paralelo con la pla-
nificación del proyecto.
Una planificación "ideal" de las pruebas incluye un plan exhaustivo de prue-
bas, que comprende la realización de pruebas unitarias para todos los compo-
nentes, pruebas de integración para todas las integraciones posibles y pruebas
de sistema completas. Este plan asegura una calidad máxima, pero requiere
un esfuerzo muy grande en recursos y una duración larga para su realización.
Debido a que no se puede probar todo, tenemos que definir muy claramente el
alcance de las pruebas en función de los riesgos del proyecto y las necesidades
del cliente. Los pasos que tendremos que realizar durante esta fase son:
1) Definir el alcance de las pruebas. Se identifica lo que queremos probar u
"objeto de las pruebas" y la información que usaremos para definir las pruebas
o la "base de pruebas" (documento de especificación funcional, técnico...).
2) Definir el enfoque. Se determina qué técnicas de prueba se usarán, las he-
rramientas de soporte a las pruebas y qué métricas se recogerán (cobertura de
las pruebas...).
3) Determinar los criterios para poder iniciar las pruebas (herramientas insta-
ladas, plataformas de hardware disponibles, datos de prueba preparados, etc.).
4) Determinar los criterios para finalizar las pruebas.
Ved también
En los siguientes apartados ve-remos diferentes técnicas deprueba.
![Page 24: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/24.jpg)
© FUOC • PID_00178932 24 Calidad del software: técnicas de prevención, detección y corrección...
El criterio de salida o finalización es un conjunto de condiciones, acor-
dadas con el cliente, para proceder de forma oficial al cierre del proceso
de pruebas y evitar que una tarea considerada completa haya obviado
algunas partes no realizadas.
Algunos criterios de finalización son:
a) Se han cumplido los objetivos definidos en cobertura de las pruebas.
b) La tasa de detección de defectos del período (semana, mes...) se encuentra
por debajo del umbral previamente definido.
c) El coste marginal para encontrar el siguiente defecto excede al de la pérdi-
da esperada por este defecto. Cuando iniciamos las pruebas es relativamente
sencillo y "barato" encontrar los primeros defectos. A medida que avanzamos
en el tiempo, el tiempo necesario para encontrar defectos es mayor. Tenemos
que evaluar si el tiempo y coste de las pruebas es superior al impacto por la
aparición de defectos en producción no detectados en las pruebas.
5) Determinar el esfuerzo, los recursos y los roles. Especificar los costes y re-
cursos necesarios para realizar las pruebas.
Boris Beizer
Boris Beizer escribió que nohay un criterio racional, únicoy válido para definir cuándotenemos que parar las prue-bas. Todo depende del pro-ducto, el entorno, la cultura yla aversión al riesgo.
Riesgos
La dirección puede forzar a en-tregar el producto (por pre-siones, fechas comprometi-das, etc.). En este caso, es im-portante que, como probado-res, sepamos transmitir a la di-rección el riesgo de puesta enmarcha.
Toda la información especificada en la planificación se recoge en el documen-
to de plan de pruebas. Sin embargo, en la mayoría de proyectos, los diferentes
niveles de prueba requieren recursos, métodos y entornos diferentes. En este
caso es mejor describir un plan separado para cada nivel y especificar un plan
maestro que establezca los puntos comunes a todos los niveles y la interrela-
ción entre los niveles.
1.5.2. Análisis y diseño
El objetivo del análisis y diseño es transformar los objetivos definidos en el
plan de pruebas en diseños concretos de prueba, con sus condiciones y casos
de prueba.
IEEE 829
El estándar IEEE 829 (estándarpara documentación de prue-bas de software) especifica losdiferentes documentos que seproducen durante el procesode pruebas.
![Page 25: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/25.jpg)
© FUOC • PID_00178932 25 Calidad del software: técnicas de prevención, detección y corrección...
Los pasos que se deben realizar durante esta fase son: identificar las condicio-
nes de prueba, crear los casos de prueba y diseñar los procedimientos de prue-
ba.
Identificar las condiciones de prueba
A partir de la base de pruebas habremos de determinar qué características ten-
dremos que probar mediante condiciones de prueba.
Una condición de prueba es un aspecto o atributo de un componente
o sistema que puede ser verificado por una prueba.
Como norma general, la condición de prueba estará formada por un condi-
cional más el resultado esperado.
Ejemplo
Si se escoge un asiento ya ocupado en el sistema VCV, se mostrará el mensaje "El asientoya está reservado, por favor, seleccione otro asiento".
El diseño de prueba es el documento que especifica las condiciones de
prueba de un elemento a probar, el enfoque detallado de las pruebas y
los casos de prueba asociados.
Las diferentes condiciones de prueba para un componente o grupo están re-
cogidas en el documento "Especificación de diseño de prueba". En él tiene que
aparecer toda la información relacionada con las condiciones de prueba, ade-
más de la lista de casos de prueba que se asociarán a estas condiciones.
Ved también
Los casos de prueba se creanen el siguiente paso, que ve-remos a continuación en elsubapartado "Especificar loscasos de prueba".
![Page 26: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/26.jpg)
© FUOC • PID_00178932 26 Calidad del software: técnicas de prevención, detección y corrección...
El número de diseños de prueba que tendremos que definir dependerá del ni-
vel de pruebas y de las características del objeto de prueba. En pruebas uni-
tarias podremos tener en general un diseño de pruebas por componente, en
pruebas de integración algunos grupos por interfaz y en pruebas de sistema y
aceptación varios grupos.
Especificar los casos de prueba
Las condiciones de prueba pueden ser incompletas o poco específicas, lo que
da un cierto margen de posibilidades a quien realiza la prueba, y se tienen que
concretar para poder ejecutar las pruebas.
Ejemplo
En el aplicativo VCV, para la condición de prueba definida en el diseño de prueba "com-probar que no se puede seleccionar un asiento ya ocupado", el caso de prueba tendrá queutilizar datos concretos (¿Qué usuario registrado tengo que probar?, ¿qué vuelo?, ¿quéasiento específico tengo que escoger?).
Para los diferentes valores de entrada (o un subconjunto de ellos, por ejemplo,
como veremos con las técnicas de diseño de pruebas) tendremos que conocer
cuáles son los resultados esperados y describirlos en la prueba.
Un caso de prueba6 es un elemento de prueba que incluye un conjun-
to de entradas de prueba y unas condiciones de ejecución (resultados
esperados, entorno...).
El caso de prueba tendrá que contener la siguiente información:
• Especificaciones�de�entrada. Se especifica cada una de las entradas que
se requieren para ejecutar el caso de prueba, definidas por valor (con um-
brales y tolerancias, caso de que sea posible) o referencias a tablas, fiche-
ros, etc.
• Especificaciones� de� salida. Salidas y comportamiento esperado (por
ejemplo, el tiempo de respuesta) requerido por los elementos de prueba.
• Necesidades�de�entorno. Programas y hardware para la configuración,
ejecución y registro de resultados.
• Dependencias�entre�casos�de�prueba. Lista de los identificadores de los
casos de prueba que tienen que ser ejecutados previamente a este caso de
prueba.
(6)En inglés, un caso de prueba sellama test case.
![Page 27: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/27.jpg)
© FUOC • PID_00178932 27 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo
En el aplicativo VCV, antes de ejecutar el caso de prueba para comprobar que no se puedereservar el asiento 6 del vuelo AB20043 previamente reservado, tendremos que ejecutarel caso de prueba que crea la reserva donde se escoge el asiento 6.
Para un diseño de prueba podemos tener varios casos de prueba, por ejemplo,
para probar varios escenarios en función de diferentes valores de entrada.
1.5.3. Implementación
Algunos casos de prueba tienen que ser ejecutados en conjunto en una secuen-
cia específica. Por ejemplo, un caso de prueba puede realizar la autenticación,
otro registrar una reserva de vuelo, otro consultar las reservas realizadas, otro
los puntos obtenidos de fidelización, etc. Todos ellos tienen que ser ejecutados
en el orden correcto, o no podremos evaluar lo que queremos probar.
El objetivo de la implementación es organizar de forma adecuada y ordenada
los casos de prueba definidos en el diseño en procedimientos. Estos describen
en detalle los pasos para ejecutar un conjunto de casos de prueba.
Un procedimiento de pruebas es un documento que describe los pasos
que se tendrán que ejecutar para un conjunto de casos de prueba.
¿Cuál es la mejor forma de estructurar nuestros casos de prueba para definir
nuestros procedimientos? Existen dos posibilidades:
1)�Casos�de�prueba�en�cascada. Se encadenan diferentes casos de prueba para
realizar todos los pasos. Por ejemplo, el primer caso de prueba comprueba
una característica del programa y deja el programa en un estado que permite
ejecutar el segundo caso de prueba.
Ejemplo
En el aplicativo VCV queremos comprobar el flujo siguiente:
1) Reservar vuelo.
2) Consultar vuelos reservados.
3) Cancelar reserva.
La ventaja de este estilo es que los casos de prueba son más pequeños y simples,
y pueden ser reutilizados en otros casos de prueba en cascada. Su desventaja
es que podemos llegar a tener muchos casos de uso "ficticios" y complicar su
gestión.
Autenticación
Un ejemplo típico de caso deprueba reutilizado es el de au-tenticación o login.
![Page 28: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/28.jpg)
© FUOC • PID_00178932 28 Calidad del software: técnicas de prevención, detección y corrección...
2)�Casos�de�prueba�independientes. Cada caso de prueba es autocontenido
y no requiere que se hayan ejecutado previamente otros casos de prueba para
poder ser ejecutado. Su ventaja es que se pueden ejecutar en cualquier orden,
pero acostumbran a ser grandes y complejos, no reutilizables, y difíciles de
diseñar y mantener.
Una vez definido el documento del procedimiento, se puede evaluar si este
se puede automatizar con una herramienta, mediante un código que se llama
guión o script.
1.5.4. Ejecución
La ejecución de las pruebas se inicia con la recepción de los elementos de prue-
ba que se tienen que probar. Para validar que estos elementos de prueba están
preparados, se solicita previamente al equipo un documento llamado informe
de�transmisión, en el que se especifican qué elementos son entregados para
las pruebas, dónde encontrarlos, qué cambios hay en los elementos (resultado
de correctivos y evolutivos) y una aprobación formal que indica que el aplica-
tivo se puede desplegar con garantías.
Ejemplo
Si durante el desarrollo del VCV tenemos que hacer un análisis del código, requeriremosque se nos indique dónde descargar el código fuente, ya sea un repositorio de códigofuente, ya un servidor FTP o incluso un CD entregado en mano.
Durante la ejecución realizaremos las siguientes actividades:
• Ejecutar los procedimientos de prueba definidos (de forma manual o au-
tomática).
• Registrar las operaciones realizadas en el documento de bitácora�de� la
prueba, indicando la persona que ha realizado las pruebas, la hora de ini-
cio y finalización de las mismas y los diferentes acontecimientos, situacio-
nes o problemas que hayamos encontrado durante su ejecución.
Ejemplo
He tenido que repetir la prueba a las 13:30 porque el servidor se ha caído de repente.
• Comparar los resultados obtenidos en la ejecución con los resultados es-
perados. Si no son coincidentes, registrarlo como una incidencia en el sis-
tema de gestión de incidencias o defectos.
Ved también
Dentro del subapartado 6.3.1de este módulo veremos cómose puede llegar a automatizaruna prueba.
![Page 29: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/29.jpg)
© FUOC • PID_00178932 29 Calidad del software: técnicas de prevención, detección y corrección...
1.5.5. Evaluación del criterio de salida e informe de resumen
Al final de la ejecución de cada uno de los niveles de prueba tendremos que
evaluar si se ha alcanzado el criterio de finalización definido en la planifica-
ción, realizando las siguientes tareas:
• Medir el progreso de finalización de las pruebas, de acuerdo con los cri-
terios de finalización definidos en la planificación, y compararlo con la
información registrada en la bitácora y los defectos encontrados.
• Evaluar si el criterio de finalización se tiene que cambiar o se necesita rea-
lizar más pruebas.
• Si se validan los criterios de finalización, generar un informe de resumen
de las pruebas para el cliente en el que se resuma cómo han ido las prue-
bas, el número de fallos encontrados y el de pendientes de corregir, y la
valoración global de la calidad del software del sistema o aplicación.
1.5.6. Cierre
En el cierre consolidamos la experiencia obtenida en la realización de las prue-
bas (errores de estimación, causas más comunes de los errores en el equipo
de pruebas, procedimientos que se pueden reutilizar, etc.) y se introducen en
el sistema de gestión de la configuración todos los elementos usados en las
pruebas (documentos, scripts, datos, configuración de entornos, etc.).
1.6. Técnicas de diseño de prueba dinámicas
Es imposible probar todos los casos posibles de un software. Si tenemos en
cuenta los diferentes flujos posibles de navegación o las combinaciones de da-
tos de entrada y de salida, el número de casos de prueba resultantes podría
llegar a ser muy grande. Por lo tanto, se tiene que establecer alguna estrategia
que nos permita simplificar el problema y afrontarlo de forma viable (en pre-
supuesto y tiempo) mediante la selección y el uso de técnicas de prueba.
Una técnica de diseño de prueba permite simplificar una prueba, alcan-
zando una cobertura adecuada sin tener que ejecutar todas las casuísti-
cas posibles.
![Page 30: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/30.jpg)
© FUOC • PID_00178932 30 Calidad del software: técnicas de prevención, detección y corrección...
Las técnicas de prueba pueden clasificarse en estáticas y dinámicas. Las prime-
ras se pueden aplicar a elementos no ejecutables (código fuente, documentos
funcionales, documentos técnicos, manuales de usuario, etc.) mientras que las
técnicas dinámicas se usan para probar software en ejecución.
Usos de las pruebas estáticas y dinámicas
De acuerdo con la diferenciación entre defecto y fallo, podemos establecer que las prue-bas estáticas permiten encontrar defectos (se identifica qué se tiene que corregir) mien-tras que las pruebas dinámicas, o simplemente pruebas, permiten identificar fallos (pos-teriormente se tendrá que encontrar con la depuración el defecto que los produce).
Técnicas estáticas Técnicas dinámicas
El software no se ejecuta. Se ejecuta el software.
Se comprueba que el código cumple buenasprácticas, su complejidad, etc. (con el apoyo,en general, de una herramienta).Se comprueban de forma manual los docu-mentos.
Se examina la respuesta física del sistema en laintroducción de parámetros de entrada.
Se buscan defectos. Se buscan fallos.
Pertenecen a las actividades de verificación. Pertenecen a las actividades de validación.
Ejemplos: Revisiones manuales y análisis estáti-co de la calidad del código.
Ejemplos: Pruebas unitarias, pruebas de in-tegración, pruebas de sistema y pruebas deaceptación.
![Page 31: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/31.jpg)
© FUOC • PID_00178932 31 Calidad del software: técnicas de prevención, detección y corrección...
Las técnicas dinámicas se dividen en:
1)�Basadas�en�la�especificación. Las pruebas se concentran en lo que hace el
software, más que en cómo lo hace.
Técnicas de caja negra
Las pruebas basadas en la especificación se llaman también técnicas de caja negra, porquese considera el software como una caja negra con entradas y salidas, pero sin que hayaningún interés en saber cómo está estructurado el componente internamente ("dentrode la caja").
2)�Basadas�en�la�estructura. Se llaman también técnicas de caja blanca porque
los casos de prueba son definidos de acuerdo con el conocimiento que se tiene
de la estructura interna del código y de cómo está implementado.
3)�Basadas�en�la�experiencia. Se basan en aprovechar la experiencia y habi-
lidades de los diferentes implicados en el proyecto para definir los casos de
prueba y sus condiciones.
4)�Basadas�en�defectos. Estas técnicas están dirigidas a diseñar los casos de
prueba para encontrar una o más categorías específicas de defectos.
5)�Análisis�dinámico. El objetivo es analizar la aplicación mientras se está
ejecutando (evaluando el comportamiento de la red, la memoria del sistema,
etc.).
Todas las técnicas son complementarias, pudiendo aplicar varias técnicas a
una misma prueba.
1.6.1. Técnicas dinámicas basadas en la especificación
Las técnicas de caja negra o basadas en la especificación se utilizan para
diseñar los casos de prueba en función de la especificación o descripción
del producto, sin importar cómo esté construido por dentro.
Existen diferentes técnicas dinámicas basadas en la especificación, entre las
que podemos destacar las clases de equivalencia, el análisis de valores frontera,
las tablas de decisión, las pruebas basadas en estados y las basadas en casos
de uso.
Clases de equivalencia
La técnica de clases de equivalencia permite reducir el número total de
casos de prueba dividiendo el conjunto de valores en un número finito
de subconjuntos, llamados clases de equivalencia.
Ved también
En este subapartado analizare-mos las técnicas dinámicas; lastécnicas estáticas las revisare-mos en detalle en el apartado2 de este módulo.
![Page 32: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/32.jpg)
© FUOC • PID_00178932 32 Calidad del software: técnicas de prevención, detección y corrección...
Se considera que el software se comportará de la misma manera para todos los
miembros de una clase: si probamos un miembro de una clase y la prueba va
bien, se considera que ha ido bien para todos los miembros de la clase, y si el
resultado ha sido malo para uno de ellos, lo será también para los demás.
Habitualmente, la técnica de clases de equivalencia se aplica a intervalos nu-
méricos ([1 a 5]...), conjuntos de posibilidades ([masculino, femenino]; [clase
turista, clase business]) y valores booleanos (falso/cierto).
Cuando realizamos la división de los valores en clases de equivalencia, tene-
mos que considerar tanto las clases válidas (contienen valores que el produc-
to acepta) como las inválidas (contienen valores que el producto rechaza o
para los que no hay un comportamiento definido en el programa). Además,
un miembro o valor no puede encontrarse nunca en dos o más clases de equi-
valencia.
¿Cómo identificamos las clases de equivalencia? Aunque dependerá de cada
caso, podemos tener en cuenta que:
• Si la condición de entrada especifica un rango de valores, obtendremos
una clase de equivalencia válida y dos clases inválidas.
Ejemplo
Si la reserva de vuelos del sistema VCV solo acepta introducir el valor 1 a 50 adultos enla reserva, obtendremos una clase de equivalencia válida que incluye el intervalo [1-50]y 2 clases inválidas (valores menores de 1 y superiores a 50).
• Si la condición de entrada especifica un conjunto de lista de valores, en-
tonces tendremos una clase de equivalencia para cada valor.
Ejemplo
En el VCV se pueden escoger dos valores para la categoría del viajero: turista o business.Cada uno de ellos es una clase de equivalencia.
Nota
La técnica de clases de equiva-lencia es la más utilizada habi-tualmente.
![Page 33: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/33.jpg)
© FUOC • PID_00178932 33 Calidad del software: técnicas de prevención, detección y corrección...
• Si la condición de entrada incluye una validación tendremos una clase de
equivalencia para representar los valores válidos y otra para representar
los valores inválidos.
Ejemplo
En el VCV se incluye la fecha de ida del vuelo en una reserva. Tendremos una clase pararepresentar fechas válidas y otra para representar fechas inválidas (cadenas...).
• Si la condición de entrada es un valor booleano, tendremos dos clases de
equivalencia, una para el valor cierto y una para el valor falso.
Ejemplo
En el VCV se incluye un campo que permite indicar si somos o no flexibles en las fechas.En el caso de que digamos que no, el sistema propondrá también los vuelos que salganun día antes o después de la fecha escogida. En este caso tendremos dos clases, una parael valor cierto y una para el valor falso (no soy flexible en las fechas).
• En cualquier otro caso, la partición en clases dependerá de los valores y el
funcionamiento que se espera del programa.
Ejemplo
En el sistema VCV, para el cálculo de puntos de fidelización tenemos las siguientes clasesválidas: 1, {2 a 9}, {10 a 24}, {25 a 50}.
Una vez realizada la división en clases, podemos hacer diferentes pruebas en
las que cada una seleccione un valor representativo de cada clase de equiva-
lencia. Podremos medir la cobertura de las pruebas efectuadas de acuerdo con
el porcentaje de clases de equivalencia que se han probado.
Análisis de valores frontera
La técnica de análisis de valores frontera es un refinamiento de la técnica
de clases de equivalencia, orientada a probar los valores frontera, que
son los que se encuentran en la frontera de una clase de equivalencia.
Defectos y valoresfrontera
Tenemos que prestar especialatención a los valores frontera,ya que los defectos suelen en-contrarse en estos valores.
![Page 34: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/34.jpg)
© FUOC • PID_00178932 34 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo
Supongamos que en el ejemplo de clases de equivalencia, en el cálculo de fidelizacióndel VCV se dan las siguientes condiciones:
1) El valor escogido en las pruebas para la clase de equivalencia {10 a 24} ha sido el valor14.
2) El programador ha cometido un error7 y ha hecho el siguiente código:
if (NumAdultos>1 && NumAdultos<10) puntos=2; if (NumAdultos>10 && NumAdultos <25) puntos = 5;
Cuando lo correcto hubiera sido que la segunda sentencia fuera:
if(NumAdultos>=10 && NumAdultos<25) puntos = 5;
3) Se realizan las pruebas y se verifica que todo va bien.
4) Posteriormente, una reserva con valor 10 provoca un error que hace abortar el pro-grama.
Si nos fijamos bien, el valor escogido no nos permitió detectar el defecto.
La técnica de valores frontera se basa en seleccionar en las pruebas los valores
que limitan al inicio de la clase y a su final. Eso implica que probaremos dos
valores por cada frontera (entre clase y clase).
Ejemplo
En el caso anterior descrito del VCV, los valores frontera de cada una de las clases deequivalencia serían los representados a continuación:
Inválida Válida Válida Válida Válida Inválida
0 1 2 9 10 24 25 50 51
Nuestras pruebas tendrían que verificar el comportamiento del software con cada unode estos valores.
Hasta aquí puede parecer que todo es correcto, pero existe una ampliación de
este modelo que tiene en cuenta tres valores por cada frontera.
(7)Aunque pueda parecer extraño,es bastante habitual que los pro-gramadores cometan estos tiposde errores.
Ejemplo
Supongamos que probamos los números 10 y 24 para comprobar que se nos dan 5 puntos,pero que para el número 10 el resultado es 5 puntos y para el 24 obtenemos otro valor.¿Cómo podemos determinar cuál es el comportamiento de los valores 11 a 23? La técnicade 3 valores incluirá los 2 valores frontera y el valor siguiente al límite inferior y el valoranterior al límite superior, es decir, 11 y 23.
Inválida Válida Válida Válida Válida Inválida
-1 0 1 2 3 8 9 10 11 23 24 25 26 49 50 51 52
No todas las clases de equivalencia tienen valores frontera. Solo podemos tener
valores frontera en clases de equivalencia cuyos miembros estén ordenados (se
puede determinar cuándo un miembro es mayor o menor que otro).
Reflexión
Si bien nuestro ejemplo es sim-ple y las clases contienen unrango pequeño de valores,pensad qué ganancia obten-dríamos si el número de valo-res en cada clase fuera muchomayor (comprobar cantidadesbancarias...).
![Page 35: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/35.jpg)
© FUOC • PID_00178932 35 Calidad del software: técnicas de prevención, detección y corrección...
Tablas de decisión
Si el sistema realiza acciones diferentes dependiendo de las combinaciones de
los valores de entrada, no podemos aplicar las técnicas de clases de equivalen-
cia y análisis de valores frontera. Las tablas de decisión y las pruebas basadas en
estados están orientadas a probar las reglas establecidas en la lógica de negocio.
Una tabla de decisión (o tabla de "causa-efecto") es una tabla que repre-
senta las acciones del sistema (salidas) basadas en las diferentes combi-
naciones de las condiciones de entrada.
Pruebas basadas en estados
La técnica de pruebas basadas en estados es adecuada cuando queremos probar
alguna parte del sistema en la que el resultado obtenido es diferente para la
misma entrada según el estado en que se encuentre el sistema. Se basa en la
utilización de diagramas de estados.
Pruebas basadas en casos de uso
Si durante el diseño del aplicativo se han definido casos de uso, los podemos
utilizar para realizar pruebas basadas en ellos. Ejecutaremos un caso de prueba
para el escenario principal y un caso de prueba para cada extensión que se
haya especificado.
Podemos combinar las técnicas de clases de equivalencia y análisis de valores
frontera para determinar qué valores se tienen que utilizar en las pruebas ba-
sadas en casos de uso. Se puede iniciar, por ejemplo, una ejecución con valo-
res miembro de cada clase de equivalencia válida para los escenarios normales
o habituales, después el escenario normal con valores frontera inválidos, y fi-
nalmente las extensiones más críticas para el sistema.
1.6.2. Técnicas dinámicas basadas en la estructura
Las técnicas dinámicas de caja blanca, o basadas en la estructura, tienen
como objetivo cubrir con las pruebas los caminos internos que realiza
el software.
Si bien son pruebas que se pueden aplicar en todos los niveles (unitarias, inte-
gración, sistema), habitualmente las realizan los desarrolladores en las pruebas
unitarias.
Caso de uso
Un caso de uso muestra cómointeractúa nuestro aplicativocon unos o más actores. Inclu-ye las diferentes acciones querealiza en respuesta a aconteci-mientos de los actores.
![Page 36: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/36.jpg)
© FUOC • PID_00178932 36 Calidad del software: técnicas de prevención, detección y corrección...
En las técnicas de caja blanca diferenciamos en un programa dos elementos,
las sentencias (declaraciones, asignaciones, cálculos...) y las decisiones o con-
dicionales (if, while...).
Podemos realizar dos tipos de pruebas de caja blanca teniendo en cuenta la
anterior diferenciación:
1)�Basadas�en�sentencias. Se prueba una secuencia específica de sentencias
del programa con el objetivo de obtener una cobertura determinada, según el
porcentaje de sentencias totales que son ejecutadas por la prueba.
Ejemplo
Supongamos el pseudocódigo del sistema VCV representado a continuación.
Leer paráms. NumAdultos, import,núm.Tarjeta;
if (NumAdultos>10) { descuento=importe*(1-10%);}
if (comprobarTarjetaValida()) { cerrarReserva();} else { cancelReserva();}
Este puede ser representado por el grafo de la figura siguiente, donde se muestran en cajaslas sentencias y con rombos las condiciones. Si queremos probar todas las sentencias nosharían falta únicamente dos pruebas para pasar por todas ellas (se representa cuál seríasu flujo con las líneas discontinuas).
![Page 37: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/37.jpg)
© FUOC • PID_00178932 37 Calidad del software: técnicas de prevención, detección y corrección...
2)�Pruebas�basadas�en�decisiones. En este caso, la cobertura se mide por el
número de pruebas que se han definido para evaluar todas las decisiones. En
la mayoría de los casos, una decisión tendrá dos salidas, falsa o cierta, pero
una decisión puede tener más salidas, como, por ejemplo, en un switch-case.
Ejemplo
En el caso anterior del VCV si queremos pasar por todas las condiciones tendremos quehacer cuatro pruebas diferentes.
Una cobertura del 100% de decisiones garantiza siempre un 100% de cobertura
de sentencias. Es decir, si los casos de prueba definidos pasan por todas las
condiciones, ciertamente pasan por todas las sentencias.
1.6.3. Técnicas dinámicas basadas en la experiencia
Hasta ahora hemos analizado diferentes técnicas sistemáticas para encontrar
defectos, pero existen algunos defectos que no se pueden encontrar con estas
técnicas. Existen diferentes tipos de técnicas basadas en la experiencia, entre
las que podemos encontrar las técnicas de adivinación, las listas de compro-
bación y las pruebas exploratorias.
En la técnica de adivinación de errores, el probador utiliza su experien-
cia para anticipar o prever cuáles son los errores que cometerá el pro-
gramador y diseña las pruebas para exponerlos.
![Page 38: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/38.jpg)
© FUOC • PID_00178932 38 Calidad del software: técnicas de prevención, detección y corrección...
En las listas de comprobación se establece un conjunto predefinido de posi-
bles fallos que sabemos que suelen "escapar" a las pruebas sistemáticas. Estas
listas se obtienen y definen basándose en la experiencia recogida en proyectos
previos.
Las pruebas exploratorias son una técnica en la que un probador con
experiencia y habilidades controla y actualiza activamente el diseño de
las pruebas a medida que las ejecuta, y utiliza la información obtenida
para diseñar nuevas y mejores pruebas.
Uno de los tipos más conocidos de pruebas exploratorias es el de las pruebas
basadas�en�sesiones, útiles en proyectos con restricciones de tiempo y conti-
nuos cambios en los requisitos. Se basan en definir intervalos o sesiones de
prueba sin interrupciones de 45 a 120 minutos, en las que se realizan las si-
guientes actividades:
Cem Kaner
Cem Kaner fue el primero queintrodujo el concepto de prue-bas exploratorias.
1) Definir el objetivo de las pruebas en un documento en formato carta deno-
minado "carta de sesión8".
Ejemplo
Encontrar defectos en la realización del pago de la reserva del sistema VCV y encontrardefectos de usabilidad en el navegador Firefox 2.0.
2) Ejecutar las pruebas. A medida que se ejecutan las pruebas, analizar sus re-
sultados y pensar qué variaciones se podrían realizar en las pruebas. Se regis-
tran los defectos encontrados en la carta de pruebas.
3) Aislar y documentar los defectos. Una vez se hayan hecho una o dos cartas
de prueba, se recogen los defectos encontrados y se intenta saber cómo repe-
tirlos de forma determinista. Se anota en la carta cómo reproducirlos.
4) En el último paso se evalúan los resultados obtenidos en la sesión y se pla-
nifica la siguiente sesión.
Esta técnica tiene un gran carácter de adaptación, que permite realimentar las
pruebas en función de los resultados obtenidos.
1.6.4. Técnicas dinámicas basadas en defectos
Las técnicas basadas en defectos tienen en cuenta diferentes tipologías
de defectos, bien para detectarlos, bien para introducirlos y comprobar
que las pruebas son capaces de detectarlos.
(8)En inglés, session charter.
![Page 39: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/39.jpg)
© FUOC • PID_00178932 39 Calidad del software: técnicas de prevención, detección y corrección...
Las técnicas basadas en defectos se pueden clasificar en:
1)�Basadas�en�taxonomías. Las pruebas son definidas para buscar una o más
categorías o taxonomías de defectos con lo que ya se sabe de dichas categorías
(qué errores se cometen, en qué áreas se encuentran habitualmente, etc.).
2)�Inyección�de�fallos. Es una técnica en la que se introducen de forma deli-
berada defectos en el código, bien de forma manual, bien con el soporte de
herramientas, para evaluar la eficiencia de las pruebas.
3)�Análisis�dinámico. Se basa en evaluar el comportamiento de un sistema
o componente durante su ejecución con el soporte de herramientas de ins-
trumentación sobre diferentes componentes del sistema (servidores, bases de
datos, red, aplicativo, etc.) para obtener en tiempo real información del fun-
cionamiento de cada uno de ellos. Nos permite encontrar defectos habituales,
como:
a)�Fugas�de�memoria�y�otros�elementos. Identificar donde se localizan las
fugas de memoria con la representación de los objetos creados y no destruidos
en el tiempo. Las herramientas son también capaces de detectar en qué puntos
no se liberan correctamente los recursos abiertos por ficheros, conexiones a
base de datos, sockets, etc.
Síntomas de una fuga de memoria
Una fuga de memoria tiene lugar cuando un software reserva un espacio de memoriapero después no es liberado por un error de programación. El síntoma de este error esel empeoramiento del tiempo de respuesta de las peticiones de los usuarios hasta que seproduce el fallo total del sistema.
b)�Análisis�del�rendimiento. Muchas aplicaciones se construyen sin tener en
cuenta los requisitos de rendimiento y carga. Las herramientas nos permiten
medir el rendimiento del aplicativo en función de diferentes escenarios de
carga e identificar "cuellos de botella".
Cuellos de botella
Los cuellos de botella son lospuntos en los que el softwarefunciona de forma ineficiente.
![Page 40: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/40.jpg)
© FUOC • PID_00178932 40 Calidad del software: técnicas de prevención, detección y corrección...
2. Técnicas de detección de defectos. Las revisiones y elanálisis estático
Las técnicas de detección de defectos incluyen las técnicas relacionadas con
lo que llamamos pruebas estáticas, en las que encontramos las revisiones y el
análisis estático.
2.1. Revisiones
El objetivo de las revisiones es encontrar defectos examinando entrega-
bles no ejecutables.
Tanto si consideramos las revisiones como actividades del aseguramiento de
la calidad como si son parte de las pruebas, las revisiones se diferencian de las
pruebas "clásicas" en que se realizan durante todo el ciclo de vida de desarrollo
y su objeto de estudio es cualquier tipo de entregable no ejecutable: requisitos y
especificaciones, documentos de diseño (funcional, técnico...), código fuente,
documentos de prueba, manuales de usuario, etc.
2.1.1. Tipos de revisiones. Roles y responsabilidades
Defectos de losdocumentos de prueba
Los documentos de pruebatambién pueden tener defec-tos (condiciones de pruebaambiguas, informes de resulta-dos incompletos, etc.).
Ved también
Recordad que habéis estudia-do las pruebas "clásicas" en elapartado 1 de este módulo.
Las revisiones pueden ser tanto informales como formales. Las revisiones in-
formales no tienen reglas definidas, ni roles, ni responsabilidades.
En una revisión formal, por el contrario, existen roles y responsabilidades bien
definidos:
• Líder�o�moderador. Es la persona responsable de la revisión. En coopera-
ción con el autor establece el tipo de revisión y la composición del equi-
po de revisión. Revisa la planificación, prepara las listas de comprobación,
distribuye los documentos a revisar antes de las reuniones y gestiona la
reunión de revisión.
• Autor. Es la persona que ha escrito el documento a revisar.
• Revisores. Son las personas que revisan los documentos.
• Secretario�o�escribano. Registra y documenta los problemas, defectos y
recomendaciones.
Ejemplos de revisionesinformales
Las revisiones informales pue-den ser tan simples como unaconversación en un café entredos colegas que revisan un do-cumento o un correo en el quese solicita revisar el contenidode un entregable.
![Page 41: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/41.jpg)
© FUOC • PID_00178932 41 Calidad del software: técnicas de prevención, detección y corrección...
Según el tipo de revisión, algunos de los roles pueden ser ejecutados por la
misma persona, y un solo documento puede ser objeto de más de una revisión.
Por ejemplo, antes de realizar una revisión técnica formal de un documento se puedehaber realizado una revisión informal del mismo.
Podemos diferenciar varios tipos de revisiones formales:
1)�Tutorial9. El autor del documento a revisar guía a los participantes a través
del documento a fin de que lo entiendan. Este tipo de revisión es especialmen-
te útil para documentos de alto nivel, como especificaciones de requisitos o
documentos de arquitectura, cuando los revisores no tienen conocimientos
de los documentos de desarrollo. El autor hace toda la preparación, y los par-
ticipantes (escogidos de diferentes ámbitos y departamentos) no tienen que
realizar un estudio previo detallado de los documentos.
(9)En inglés, walkthrough.
2)�Revisión�técnica. Su objetivo es la revisión del contenido técnico de un
documento por parte de expertos (arquitectos, diseñadores, usuarios clave...).
A veces se llaman "revisión de igual a igual10".
3)�Inspección. En este caso, el documento a revisar es preparado y evaluado
antes de la reunión por todos los revisores, que comparan el documento con
otros documentos referenciados y usan listas de comprobación. A diferencia
de los anteriores tipos de revisiones, hay un moderador que no es el autor, y
se realiza un seguimiento posterior de las anotaciones y cambios en el docu-
mento.
(10)En inglés, peer review.
4)�Revisión�de�gestión. Su objetivo es monitorizar el progreso y los riesgos
de un proyecto, sistema, actividad o proceso y tomar decisiones de mejora o
actuación. Los gestores que están implicados en el elemento a revisar son a
menudo quienes realizan estas revisiones, pero en algunos casos se contratan
consultores externos para hacer evaluaciones de procesos. El resultado de la
revisión de gestión es el establecimiento de acciones y recomendaciones.
5)�Auditoría. Se evalúa el cumplimiento de estándares, guías, especificaciones
y procedimientos en función de unos criterios objetivos (estándares, guías,
etc.). Como resultado de la evaluación se concluye si hay cumplimiento total
o no cumplimiento. Siempre se realiza por una parte independiente.
2.1.2. El proceso de revisión
Si bien un proceso de revisión informal no tiene un ciclo establecido, en un
proceso de revisión formal encontramos las siguientes fases:
Ejemplo de revisión degestión
Un ejemplo de revisión de ges-tión es el modelo SCAMPI paraCMMI que vimos en el módulo"Calidad del software: gestiónde la calidad y métricas".
![Page 42: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/42.jpg)
© FUOC • PID_00178932 42 Calidad del software: técnicas de prevención, detección y corrección...
1)�Planificación. El moderador realiza una comprobación preliminar del do-
cumento a revisar. Si el documento tiene demasiados errores obvios no tendrá
sentido que se haga ninguna revisión. Si el documento es correcto, el mode-
rador y el autor definen qué parte del documento se tendrá que revisar y esta-
blecen la composición del equipo de revisores.
2)�Reunión�de�lanzamiento. Durante la reunión, a la que asisten todos los
roles de participación, se establecen los objetivos de la revisión, el tiempo dis-
ponible y los criterios de finalización y se distribuye el documento.
3)�Preparación. Los participantes trabajan individualmente en la revisión del
documento e identifican defectos y preguntas o comentarios. Para la revisión
usan procedimientos, documentos relacionados y listas de comprobación.
4)�Reunión�de�revisión. La reunión se distribuye en tres fases:
a)�Fase�de�bitácora. Cada revisor comenta los diferentes defectos que ha de-
tectado durante la preparación. Estos son registrados por el secretario y se es-
tablece cuáles se tienen que discutir en la fase siguiente de la reunión. Durante
esta fase no se permite ninguna discusión o argumentación de los defectos.
b)�Fase�de�discusión. En esta fase se discute sobre los defectos anotados desde
un punto de vista positivo.
c)�Fase�de�decisión. Al final de la reunión se revisan los criterios de finalización
y se determina si se procederá a la realización de un nuevo ciclo de revisión,
una vez corregidos los defectos detectados.
5)�Corrección. En función de los defectos detectados, el autor mejora el do-
cumento. Para poder hacer el seguimiento de las correcciones tiene que indi-
car qué puntos del documento ha modificado. Se puede, por ejemplo, activar
la opción de revisión "Seguimiento de cambios" en la herramienta ofimática
usada.
6)�Seguimiento. El moderador es el responsable de validar que se han corre-
gido los defectos y se han realizado las mejoras sugeridas, bien de forma indi-
vidual, bien recogiendo la validación de los diferentes revisores.
7)�Cierre. En esta fase final el moderador recoge y analiza toda la información
que permite mejorar el proceso de revisión y establecer medidas de prevención
de los defectos detectados.
![Page 43: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/43.jpg)
© FUOC • PID_00178932 43 Calidad del software: técnicas de prevención, detección y corrección...
2.1.3. Listas de comprobación
Las listas de comprobación son herramientas de soporte muy prácticas
para las revisiones. Establecen un guión o lista de los elementos que tie-
nen que ser revisados o ser comprobados. Estas listas de comprobación
se construyen basándose en la experiencia y estándares.
Una lista de comprobación incluye habitualmente, para cada criterio o regla
a comprobar, dos columnas de valoración, una para indicar si se cumple (Sí,
No, No aplicable) y otra para describir la causa de la valoración. Para mejorar
su lectura, los criterios se suelen clasificar en grupos.
Criterio ¿Se cumple? Comentarios
Sí/No/No aplicable
2.2. Análisis estático
Ejemplo
Los probadores del softwareVCV utilizan una lista de com-probación para revisar la con-sistencia de las páginas webcreadas.
El análisis estático es una técnica para evaluar código y modelos (en
UML, por ejemplo) realizada con el apoyo de herramientas.
Podemos detectar, por ejemplo, si se referencia una variable que no tiene va-
lor definido, qué variables no se utilizan nunca, si existe código muerto que
nunca se ejecutará, el incumplimiento de estándares de programación, vulne-
rabilidades de seguridad, etc.
Existen tres técnicas principales de análisis estático: el análisis de la estructura
del código, la comprobación del cumplimiento de estándares de programación
y el cálculo de métricas.
2.2.1. Análisis de la estructura del código
Con la estructura del código podemos analizar su flujo de control y su flujo
de datos.
Ejemplo de análisisestático
Un compilador puede conside-rarse como un nivel básico deanálisis estático, ya que verifi-ca el código para comprobar sisu construcción es válida en ellenguaje de programación.
Con el flujo de control se evalúa la secuencia en la que las instrucciones serán
ejecutadas (bucles, condiciones, etc.) para poder detectar, entre otros, código
muerto y funciones que nunca son llamadas.
Código muerto
El código muerto es una re-gión del código que no seráejecutada nunca porque no seestablece ningún condicionan-te para llegar a ella (una condi-ción siempre falsa, una salidade la función previa, etc.).
![Page 44: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/44.jpg)
© FUOC • PID_00178932 44 Calidad del software: técnicas de prevención, detección y corrección...
El flujo de datos permite analizar cómo un elemento de datos –una variable– es
accedido y modificado en el código. Podemos detectar el uso de una variable
sin definir (sin valor), variables que nunca son usadas o variables que se usan
después de haber sido destruidas.
2.2.2. Cumplimiento de estándares de programación
Mediante una herramienta de análisis estático de código se puede verificar el
seguimiento de cualquiera de las convenciones definidas en un estándar de
codificación o programación.
Por ejemplo, se puede comprobar, entre otros:
• Seguimiento de convenciones de nombres de las clases, métodos, paráme-
tros.
• Seguimiento de buenas prácticas de programación: uso de cadenas, litera-
les, concatenación, seguridad, inicialización de variables fuera de los bu-
cles, etc.
• Seguimiento de formato: número de líneas por método, por clase, inden-
taciones, etc.
2.2.3. Cálculo de métricas de código
Ved también
En el apartado 4 de este mó-dulo podéis encontrar la defi-nición de estándar de progra-mación y cuáles son sus bene-ficios.
Cuando se realiza el análisis estático del código se extrae información de su
estructura interna, como, por ejemplo:
• Líneas de código
• Complejidad ciclomática
• Índice de mantenibilidad
• Fan-in y fan-out
• Número de descendientes
Las diferentes medidas obtenidas tienen que ser evaluadas y comparadas con
el tiempo para comprobar si se están realizando mejoras en el código o estamos
empeorando su calidad.
Nota
Podemos recoger todas lasmétricas de producto que ana-lizamos en el módulo "Calidaddel software: gestión de la cali-dad y métricas".
![Page 45: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/45.jpg)
© FUOC • PID_00178932 45 Calidad del software: técnicas de prevención, detección y corrección...
3. Técnicas de localización y corrección de defectos
3.1. La depuración
El proceso de depuración11 consiste en buscar, analizar y eliminar las
causas de un fallo.
Una vez se ha encontrado un fallo –bien por parte de un usuario, bien en
las pruebas–, algún programador tiene que realizar la localización o diagnosis
del defecto y corregirlo. Este proceso, llamado depuración, se divide en cuatro
fases:
1)�Reproducción�del�fallo. Se busca cómo reproducir el fallo varias veces, de
forma determinista.
2)�Diagnóstico. Se construyen y prueban diferentes hipótesis, hasta tener la
confianza y seguridad de que se ha identificado el defecto.
3)�Corrección. Se diseña e implementa la solución que corrige el problema,
evitando impactar sobre otras partes del aplicativo y manteniendo el nivel
adecuado de su calidad.
4)�Reflexión. Se evalúa por qué ha tenido lugar el fallo y si hay otras áreas en
el aplicativo en las que se puedan encontrar defectos similares. Se registra y
comunica toda la información para prevenir la aparición de defectos similares
en el proyecto y otros proyectos de la organización.
3.1.1. Reproducción del fallo
El primer paso que un programador tiene que realizar para reproducir un fallo
es analizar su informe de incidencia.
Falta de información del fallo
Algunos usuarios y probadores poco experimentados no informan de las condiciones enque se ha reproducido el fallo (versión del aplicativo, sistema operativo, navegador, etc.).Eso hace que sea habitual encontrar incidencias cerradas por programadores con motivode resolución "No se puede reproducir", sin ni siquiera haber intentado reproducirlas.
Es importante que se conozcan las condiciones en que se ha reproducido el
fallo (preguntando al usuario o al probador, si es necesario) y que el programa-
dor configure un entorno similar al entorno en que se ha reproducido el fallo:
(11)En inglés, debugging.
Herramientas dedepuración
No debemos confundir el pro-ceso con las herramientas desoporte al desarrollo, como ladepuración. Las herramientasde depuración ofrecen utili-dades para poder analizar entiempo de ejecución y en elcódigo cuál es el estado de susvariables, o ver qué camino es-tá siguiendo el software.
Tiempo de depuración
La reproducción del fallo y eldiagnóstico pueden represen-tar hasta un 95% del tiempototal de la depuración.
![Page 46: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/46.jpg)
© FUOC • PID_00178932 46 Calidad del software: técnicas de prevención, detección y corrección...
1)�Versión�del�software. La versión del software o aplicativo que se encuentra
desplegada en producción puede no coincidir con la que tiene el desarrollador.
En este punto juega un papel importante la gestión de la configuración, ya
que el desarrollador tendrá que bajarse el código fuente de la versión corres-
pondiente, compilarla y ejecutarla.
2)�Entorno. Es probable que el programador no pueda reproducir un fallo en
su entorno local de desarrollo si no ejecuta el aplicativo en las mismas condi-
ciones que el entorno servidor de producción (sistema operativo, red, capaci-
dades de almacenamiento, servidor...) y el entorno del usuario (navegador, sis-
tema operativo, software de soporte, etc.). Si bien existen determinadas condi-
ciones que pueden ser ejecutadas de forma independiente por cada fallo, otros
no se pueden ejecutar de forma independiente fácilmente. Con la virtualiza-
ción podemos llegar a resolver esta problemática.
Ejemplo de uso de la virtualización
Se puede probar fácilmente si el fallo se reproduce en Google Chrome 5.0 y no en InternetExplorer 4.0, porque no existen incompatibilidades entre los dos si están instalados enla misma máquina que hace las pruebas. En cambio, no se puede reproducir en unamáquina un fallo en dos sistemas operativos diferentes (Ubuntu y Windows, o WindowsVista i Windows 7, por ejemplo), salvo que se recurra al uso de la virtualización.
Sin embargo, habrá condiciones que solo podrán ser reproducidas en entornos
reales, debido a las necesidades de capacidad del procesador, la configuración
de la red y otros elementos de los que no se puede disponer fácilmente por
su coste.
Virtualización
La virtualización es un meca-nismo bastante utilizado parapoder disponer de diferentesconfiguraciones en un mismoentorno que pueden ser ejecu-tadas de forma independiente.
3)�Datos. Los datos de entrada que han provocado el fallo son relevantes para
reproducirlo. Si en el registro de incidencia no se aporta información sobre los
datos utilizados se tendrá que inferir o registrar de forma previa, por ejemplo,
con rastros o bitácoras de la ejecución del software. Caso de que se tenga que
inferir, se puede seguir, por ejemplo, la técnica de análisis de valores frontera
o la técnica de cobertura de ramas. Caso de que el fallo se dé bajo condiciones
de alta concurrencia de usuarios, tendremos que recurrir a la realización de
pruebas de rendimiento y simular una carga de usuarios que permita reprodu-
cir el fallo.
3.1.2. Diagnóstico
Durante el diagnóstico tenemos que experimentar las posibles causas del de-
fecto:
Ved también
Analizaremos la bitácora o log-ging en el subapartado 3.2 deeste módulo.
![Page 47: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/47.jpg)
© FUOC • PID_00178932 47 Calidad del software: técnicas de prevención, detección y corrección...
• Examinando el estado interno del software con una instrumentación di-
recta o ejecutando una herramienta de depuración.
• Modificando algún aspecto del software que permita identificar si se com-
porta de forma diferente (cambiando datos, cambiando a otro entorno,
etc.).
Ejemplo
Supongamos que tenemos un problema en la función de búsqueda de los vuelos del sis-tema VCV que provoca una pérdida de memoria. Sabemos que el defecto se encuentra enun método concreto, pero no sabemos dónde dentro de las 50 líneas del método. Pode-mos introducir en el código un "chivato" en la mitad del método y escribir por pantallacuál es la memoria disponible para comprobar si hemos perdido memoria. Si el resulta-do es que sí, podemos inferir que la pérdida se encuentra en la primera mitad. Despuéspodremos meter el "chivato" en la mitad de la primera mitad, y así sucesivamente hastalocalizar la línea concreta donde se encuentra el defecto.
• Modificando la lógica del código fuente del programa para ver el efecto
del cambio.
Instrumentación
La instrumentación es la in-troducción de código que noafecta al comportamiento delprograma. El método más co-mún es el uso de rastros o log-ging. Ver este método un pocomás adelante en el subaparta-do 3.2 de este módulo.
• Comparando el estado actual con estados previos en los que no se repro-
ducía el fallo. Si, por ejemplo, se sabe a ciencia cierta que un fallo ya fue
corregido en una versión anterior, podemos usar el histórico que mantie-
ne el sistema de control de versiones de código para analizar qué líneas de
código fuente se han añadido, eliminado o cambiado, y averiguar si estos
cambios son los que han provocado el fallo.
En general, los desarrolladores introducen diferentes cambios a la vez para in-
tentar reducir el tiempo de diagnóstico. Es fácil que después de haber realizado
diferentes experimentos lleguemos a perder la noción de lo que hemos hecho
y repitamos o realicemos experimentos que no tengan ninguna relación con
los resultados obtenidos previamente. Es necesario, pues, que registremos cada
uno de los experimentos realizados.
3.1.3. Corrección
Una vez se ha diagnosticado y encontrado la causa del defecto, entra en juego
su corrección. Toda corrección tiene que implicar las siguientes actividades:
1)�Restablecer�la�situación�inicial. En primer lugar, tenemos que restable-
cer la situación inicial en la reproducción del fallo y eliminar todos aquellos
cambios que se hayan realizado durante la experimentación en el diagnóstico.
Todo el código que hayamos incluido en la experimentación tendría que ser
eliminado.
Es común comentar el código de experimentación o el código que se ha eli-
minado durante la corrección por creer que se podrá necesitar en un futuro.
Este código, que llamaremos "código eliminado comentado", es confuso y pe-
Sistemas de control deversiones
Podemos usar el comparadordel sistema de control de ver-siones (Subversion...) para ana-lizar qué cambios se han intro-ducido entre una versión en laque no existía el fallo y la ver-sión en la que se reproduce elfallo.
![Page 48: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/48.jpg)
© FUOC • PID_00178932 48 Calidad del software: técnicas de prevención, detección y corrección...
ligroso en manos de cualquier programador que desconozca el motivo por el
que se comentó. Se recomienda eliminar siempre el código obsoleto y, en caso
necesario, reubicar este código en un documento de experiencias recogidas.
2)�Implementar�las�pruebas. En este momento podemos aplicar la técnica
del desarrollo guiado por pruebas y crear una prueba que permita reproducir
el fallo.
3)�Realizar�la�corrección. Se tiene que corregir la causa, no el síntoma. Aun-
que pueda parecer obvio, a menudo se realizan cambios que arreglan el sínto-
ma, pero no la causa.
Ejemplo
Supongamos que el pago de las reservas en nuestro aplicativo VCV (A) se realiza mediantela interacción con un sistema externo de pago (B) al que enviamos ficheros en formatoXML y que se dan las siguientes situaciones:
• Por un error, el programador de nuestro sistema ha olvidado incluir el tag de inicio<begin> en el fichero XML que tiene que enviar al sistema de pago.
• Como resultado, el sistema destino no procesa correctamente la petición y se produceun fallo en el sistema A.
• Nuestro programador se pone en contacto con el programador del sistema B paracomunicarle que el sistema de pago no controla bien la situación.
• El programador del sistema externo, bajo presión, y sin considerar los posibles efectos,añade siempre la cadena <begin> en el fichero recibido, lo que permite que nuestrosistema funcione correctamente.
• Poco después, todos los sistemas de las demás compañías que se comunican con elmismo sistema de pago (y ya añadían el tag <begin>) dejan de funcionar.
En este ejemplo se corrigió el síntoma, pero no la causa, que era realmente parte denuestro sistema.
Ved también
En el subapartado 4.5. se ana-liza en detalle la técnica deldesarrollo guiado por pruebas.
4)�Realizar�refactoring�en�el�código. La corrección de un defecto puede abrir
oportunidades de refactoring en el código (por ejemplo, por la posibilidad de
que el código quede más claro y mejor estructurado).
5)�Subir�el�código�al�control�de�versiones. Como último paso, y dentro de
la política establecida para las correcciones (ramas, fusiones, etc.), se subirá el
código fuente al control de versiones.
3.1.4. Gestión del conocimiento y cierre
Nos tenemos que preguntar por qué razones se ha producido el error: ¿eran
ambiguos los requisitos?, ¿se habían definido pruebas para detectar el fallo?,
¿hay alguna librería utilizada que tenga una tasa de defectos grande?, ¿están
los programadores bien formados?
Ved también
En el subapartado 3.3 se es-tudia un poco más en detallequé es el refactoring y por quées necesaria.
![Page 49: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/49.jpg)
© FUOC • PID_00178932 49 Calidad del software: técnicas de prevención, detección y corrección...
Todas estas preguntas responden a la prevención y el aseguramiento de la ca-
lidad, donde tendremos que plantear si hace falta actualizar documentos de
estándares de programación de la organización, actualizar procesos de desa-
rrollo o prever un plan de formación, entre otros.
Finalmente, el programador tendrá que registrar la resolución del defecto en
el informe de la incidencia (cómo se ha corregido, cuál era la causa real, etc.).
3.2. Bitácora
La bitácora12 es un proceso de registro de acontecimientos cronológicos
de lo que hace un sistema o aplicativo durante su ejecución.
(12)En inglés, logging.
En caso de que haya un problema con el aplicativo, este registro será útil para
saber en qué lugar se localiza el defecto, entender su actividad y obtener pistas.
El registro de la bitácora se genera habitualmente sobre la consola de la aplica-
ción (la pantalla) o en ficheros. En programas sencillos de Java, las sentencias
System.out.println o System.err.println nos permiten volcar en la
pantalla (consola) mensajes desde el aplicativo. Esta técnica tiene los siguien-
tes problemas:
• No se eliminan los mensajes temporales registrados. En ocasiones, un pro-
gramador puede mostrar mensajes por la consola que le permitan entender
por qué algo no funciona correctamente, pero después puede olvidar bo-
rrarlos. La consola puede llenarse de detalles superfluos que pueden ocul-
tar los problemas reales.
• Se degrada el rendimiento. No hay ninguna forma sencilla de activar o
desactivar de forma condicional de los mensajes sin recurrir a soluciones
susceptibles de error, como, por ejemplo:
if (DEBUG) { System.err.println("mensaje..." + parámetro);}
• Si usamos la solución anterior no propuesta, tampoco podemos tener un
control esmerado de qué mensajes se tienen que mostrar y cuáles no, aun-
que podríamos incorporar controles del tipo:
If (DEBUG || WARN || ERROR) System.err.println("mensaje..." + parámetro);
• Estamos restringidos a que se vuelquen los mensajes únicamente en los
dispositivos de consola de salida y error. ¿Cómo podemos hacer para vol-
carlos en un fichero rotativo? ¿Cómo podemos volcarlos a la vez en di-
Ejemplo de log
Cuando usamos un progra-ma FTP, este puede generarun fichero de log en el que semuestran la fecha, la hora y lospaths de origen y destino paracada fichero transferido.
![Page 50: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/50.jpg)
© FUOC • PID_00178932 50 Calidad del software: técnicas de prevención, detección y corrección...
ferentes destinos con una única sentencia (tenemos que gestionar cómo
volcar en fichero, cómo enviar un correo de notificación, etc.)?
• El volumen de mensajes no se puede reducir o ampliar, es siempre el mis-
mo para cada petición.
Existen marcos o librerías específicas de bitácora que nos aportan ventajas en el
volcado específico previo, ofreciendo, entre otras, las características siguientes:
1)�Diferentes�niveles�de�bitácora,�lo�que�nos�permite�decidir�si�queremos
volcar�determinados�mensajes�o�no. Por ejemplo, durante la operación de
una aplicación nos puede interesar volcar únicamente acontecimientos rela-
cionados con errores críticos o fatales, pero en desarrollo nos puede interesar
volcar todos los mensajes.
Existe una relación de precedencia entre los niveles, de forma que si se deter-
mina, bien en configuración, bien en tiempo de ejecución, que se vuelquen
los mensajes de un nivel, también se volcarán los mensajes de los niveles su-
periores.
El framework Log4J define por defecto los niveles que se pueden ver en la tabla
siguiente.
Nivel Descripción
Fatal Errores graves que causan una interrupción brusca del sistema
Error Otros errores en ejecución o condiciones inesperadas
Warning Uso de API depreciadas, errores próximos (nos encontramos cerca de consu-mir el 80% de conexiones...) u otras situaciones inesperadas, pero no necesa-riamente malas
Info Acontecimientos de interés (arranque y parada del sistema, por ejemplo)
Debug Información detallada del flujo en el el sistema
Y ofrece una clase principal Logger que incluye los siguientes métodos:
// Métodos de creación y recuperaciónpublic static Logger getRootLogger();public static Logger getLogger(String name);
// métodos para imprimir mensajespublic void debug(Object message);public void info(Object message);public void warn(Object message);public void error(Object message);public void fatal(Object message);
Según el nivel con el que queremos volcar el mensaje, usaremos uno u otro
método (debug, info...). El método habitual para poder mostrar un mensaje
se muestra en el siguiente fragmento:
Enlace de interés
El framework de diario histó-ricamente más reconocido enJava ha sido Log4J, que ac-tualmente es el que se usa yha sido utilizado para desa-rrollar los ejemplos de estemódulo. Podéis encontrarmás detalles al respecto enhttp://logging.apache.org/log4j/index.html.Podéis encontrar tam-bién otros frameworkscomo SLF4J, Logback ojava.util.logging
Depreciar
Cuando se libera una nuevaversión de una librería (API),es posible que partes de ellahayan sido depreciadas (pue-de ser una clase, un métodoo cualquier elemento que yano se necesita). No se eliminanpara evitar problemas de com-patibilidad, pero no se garan-tiza que se eliminen por com-pleto en siguientes versiones.
![Page 51: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/51.jpg)
© FUOC • PID_00178932 51 Calidad del software: técnicas de prevención, detección y corrección...
public class NombreClasse { static Logger logger = Logger.getLogger(this.class); public void funcion() { logger.info(..."); logger.debug(..."); }...
Ejemplo
Si el nivel predeterminado en el fichero de configuración es warning, se volcarán losmensajes escritos con nivel warning (logger.warn(...")), error y fatal, pero ningunode los mensajes con nivel debug e info.
2)�Se�puede�configurar�sobre�qué�salidas�se�tienen�que�volcar�los�mensajes
(fichero, base de datos, correo electrónico, SNMP, consola, sockets...).
Ejemplo
Se puede configurar, por ejemplo, que en el entorno de desarrollo los mensajes se pre-senten por consola y fichero, pero que en el entorno productivo se vuelquen únicamenteen fichero, y que este sea rotativo (cuando supere un determinado tamaño se eliminenlos mensajes más antiguos).
3)�Los�mensajes�pueden�ser�"decorados"�automáticamente�con�otra�infor-
mación�útil (usuario conectado, fecha y hora, clase y número de la línea en
que se ha generado el mensaje, etc.).
Log4J permite, entre otros, los patrones que se ven en la tabla siguiente (se
definen en el fichero de configuración).
Patrón Descripción
%C Mostrar el nombre completo de la clase que ha escrito el mensaje
%d Mostrar la fecha en que se ha escrito el mensaje. Se puede determinar su for-mato completo.Ejemplo: %d{dd MMM yyyy HH:mm:ss,SSS}
%L Número de línea de la clase en la que se ha escrito el mensaje
%m El mensaje que escribe la clase
%M Nombre del método que ha escrito el mensaje
%p Nivel del mensaje (warn...)
Se pueden definir nuevas decoraciones por parte del programador, como, por
ejemplo, que se vuelque información de la sesión y así poder identificar a la
persona que ha sufrido un fallo en concreto.
4)�Capacidad�para�registrar�o�no�registrar�los�acontecimientos�en�un�área
particular, bien en la ubicación lógica del código (un package concreto en
Java), bien en un área funcional.
Appenders
En Log4J el tipo de salida sedetermina con los llamadosappenders, que son clases es-pecíficas que realizan el volca-do en un tipo de salida especí-fica. Por ejemplo, la clase Con-soleAppender permite vol-car por consola, RollingFi-leAppender en un fichero ro-tativo, etc.
![Page 52: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/52.jpg)
© FUOC • PID_00178932 52 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo
Quiero que se vuelquen los mensajes del módulo A, pero no los del módulo B. Quiero quese vuelquen los mensajes del acceso a la base de datos en un fichero y que, en cambio,los mensajes de la capa de presentación se vuelquen por consola (o en ficheros diferentesal del acceso a la base de datos).
Esta característica se implementa en Log4J con un nombre concreto en el fi-
chero de configuración. Existen tres posibilidades:
a)�Usar�el�rootLogger. La configuración que se especifique en él será de aplica-
ción a todos los mensajes, excepto aquellos que se indiquen en los casos b y c.
log4j.rootLogger=nivel, appender1..., appenderN
b)�Usar�el�nombre�correspondiente�a�un�package. Se puede usar un package
para configurar cómo se quiere volcar todos los mensajes que se generen desde
cualquier clase contenida en dicho package.
log4j.edu.uoc.reservas.puntos =nivel, appender1..., appen-
derN
c)�Usar�un�nombre�específico. En este caso se permite la generación de men-
sajes controlados por el aplicativo en áreas funcionales o lógicas. Su uso se
basa en utilizar la función específica getLogger(nombre).
log4j.nombreespecifico =nivel, appender1..., appenderN
static Logger logger = Logger.getLogger(nombreespecifico);public void funcion() { logger.info(...");
Con este nombre es cómo se determina qué decorador appender y nivel se
tiene que volcar para este nombre.
5)�Se�pueden�automatizar�determinados�tipos�de�acontecimientos. Se pue-
de configurar, por ejemplo, que en el caso de que se dé una excepción que
no hemos controlado con la gestión de excepciones, se envíe un correo al ad-
ministrador.
6)�La�bitácora�se�puede�configurar�en�un�fichero�de�propiedades�o�en�eje-
cución (sin tener que recompilar el código o detener el sistema).
Ejemplo
# Queremos mostrar por defecto todos los mensajes en modo info# o superiores para la consola y para la salida definida en el# AppenderFichero, correspondiente al fichero (ver más abajo).log4j.rootLogger=info, consola, appenderFichero
#A la salida de consola (stdout) configuramoslog4j.appender.consola=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.consola=org.apache.log4j.PatternLayout
![Page 53: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/53.jpg)
© FUOC • PID_00178932 53 Calidad del software: técnicas de prevención, detección y corrección...
# que aparezca el número de línea, el método.log4j.appender.consola.layout.ConversionPattern=%5p [%t] (%F:%L) -%m%n
# La salida appenderFichero. firme que use RollingFileAppenderlog4j.appender.appenderFichero.=org.apache.log4j.RollingFileAppender# De nombre 'ejemplo.log'log4j.appender.appenderFichero.file=ejemplo.log# Que tiene un tamaño máximo de 100Kb. Si se supera, se eliminan# los mensajes más antiguoslog4j.appender.appenderFichero.maxFileSize=100KB# I en él se decoran los mensajes con un patrón, que difiere del# patrón usado para la salida por consolalog4j.appender.appenderFichero.layout=org.apache.log4j.PatternLayout#mostrar la línea de código, el nombre de la clase y el mensajelog4j.appender.appenderFichero.layout.ConversionPattern= %d{dd- MM-yyyy HH:mm:ss} %L %p %C - %m
# Para los mensajes volcados desde las clases contenidas en el package# 'edu.uoc.hoteles.reservas' se vuelcan los mensajes warn y# superiores (sobreescribe el# nivel por defecto info que se había predeterminado para cualquier# clase arribalog4j.logger.edu.uoc.hoteles.reservas =WARN
Supongamos ahora el siguiente código de la clase que vuelca los mensajes:
package edu.uoc.reservas.vols;public class GestorReservas {
public void reservar() { ... logger.warn("Quedan menos de 5 asientos disponibles en el vuelo" + núm.Vuelo); ... logger.debug("Salimos de la función"); }
Saldría el mensaje siguiente en consola y fichero:
156 WARN edu.uoc.hoteles.reservas.GestorReservas - Quedan menos de5 asientos disponibles en el vuelo 3X34900L
Pero el mensaje "Salimos de la función" no aparecería, ya que se había configurado queel nivel mínimo fuera WARN.
Una vez analizadas las particularidades de la bitácora, tenemos que saber dife-
renciarla de la depuración y averiguar cuándo se tiene que aplicar una u otra:
• La bitácora es más rápida en ejecución que la depuración.
• La bitácora puede ser usada para diagnosticar problemas en el entorno de
producción o en el entorno de desarrollo. La depuración se tiene que usar
en entornos de desarrollo.
• La bitácora es más fácil de ejecutar en entornos distribuidos.
• Si queremos usar la bitácora como una herramienta de depuración, nece-
sitaremos registrar una gran cantidad de acontecimientos poco útiles.
Depuración y bitácora
La depuración es un mecanis-mo para analizar internamen-te el software y poder detec-tar defectos, la bitácora nospermite registrar los aconte-cimientos para obtener infor-mación real de la ejecución delsoftware (datos usados, condi-ciones, etc.).
![Page 54: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/54.jpg)
© FUOC • PID_00178932 54 Calidad del software: técnicas de prevención, detección y corrección...
3.3. Refactoring del código
A medida que se realiza el mantenimiento de un aplicativo (bien para añadir
nuevas funcionalidades, bien para realizar la corrección de un defecto) el códi-
go puede degenerarse. En estos casos es completamente necesario hacer lo que
se llama "refactoring del código"; modificar su comportamiento internamente
aumentando alguna cualidad no funcional (rendimiento, simplicidad, facili-
dad de mantenimiento...) sin modificar su comportamiento externo (aparien-
cia, funcionalidad...).
El refactoring�del�código son los cambios realizados en la estructura
interna del software a fin de que sea más fácil de entender y más barato
de modificar, sin cambiar su comportamiento observable.
El refactoring consigue los siguientes objetivos:
1)�Mejora�el�diseño�del�software. A medida que los programadores hacen
cambios en el código sin un conocimiento exhaustivo de su diseño, el código
pierde su estructura y se hace más difícil entenderlo. Un diseño pobre provoca
que se tenga que codificar más para hacer lo mismo, ya que, a menudo, el có-
digo hace lo mismo en diferentes puntos del aplicativo. Una parte importante
de el refactoring del diseño es eliminar el código duplicado.
2)�Mejora�la�comprensión�del�software. El refactoring del código facilita que
podamos entender el que hemos construido nosotros mismos para ser mejo-
rado y entendido por alguien que en el futuro tenga que hacer cambios en
nuestro código.
3)�Ayuda�a�encontrar�defectos. El refactoring facilita el hallazgo de defectos,
ya que se clarifica la estructura del programa.
4)�Mejora�la�eficiencia�en�la�programación. Sin un buen diseño, el progra-
mador tiene que invertir más tiempo para entender el código y localizar de-
fectos, en lugar de hacer nuevas funciones.
Sin embargo ¿en qué casos tenemos que planificar un refactoring? En sí mis-
ma, el refactoring no es una actividad que tenga que ser planificada, es una
actividad que tiene que ser realizada de forma continuada. El mejor momento
para realizarla es cuando se añade una nueva característica o funcionalidad al
software. En esta situación podemos preguntarnos si hay que hacer un refac-
toring para que sea más fácil entender el código o si es muy complicado rea-
lizar el cambio por cómo está diseñado. Otra gran oportunidad para realizar
un refactoring es cuando se tenga que corregir un defecto o cuando se realiza
una revisión del código.
Comprensión del software
"Cualquiera puede escribir có-digo que un ordenador pue-de entender. Los buenos pro-gramadores escriben códigoque los humanos pueden en-tender".Martin Fowler
![Page 55: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/55.jpg)
© FUOC • PID_00178932 55 Calidad del software: técnicas de prevención, detección y corrección...
Los ejemplos más habituales en los que hay que realizar un refactoring son:
• Código�duplicado. La existencia de código duplicado es una fuente habi-
tual de defectos, ya que provoca que, ante un cambio, se tengan que hacer
modificaciones en paralelo en diferentes puntos del software.
• Métodos�muy�largos. En una programación orientada a objetos, un mé-
todo de más de 25 líneas representa un intento de forzar una programa-
ción estructurada en un modelo orientado a objetos. La solución es usar
la modularidad y descomponer los métodos (agrupando un conjunto de
líneas de código del método en un nuevo método, por ejemplo).
• Clases�muy�largas. Habitualmente, una clase muy larga tiene múltiples
responsabilidades no relacionadas entre sí. Hay que extraer fragmentos de
la clase en una clase o más clases separadas, cada una con una responsa-
bilidad, de forma que entre todas ellas formen un conjunto de responsa-
bilidades.
• Métodos�con�una�lista�larga�de�parámetros. Una lista larga de paráme-
tros hace difícil entender el propósito del método, y cualquier cambio tie-
ne impacto en los que lo usan. Una opción puede ser reemplazar los pará-
metros con la definición de una nueva clase.
• Renombrar�métodos. Los nombres de los métodos tienen que identificar
claramente su propósito. Si se nos hace difícil establecer el nombre de un
método es que este hace más cosas de las que tendría que hacer.
• Reemplazar�valores�literales�usados�en�el�código�por�constantes (a este
caso se lo denomina números mágicos).
Riesgos de modificaciónsobre código duplicado
Podemos olvidar hacer el cam-bio en algún punto o nos pue-de ser difícil reconocer encuántos puntos se encuentra elmismo código.
![Page 56: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/56.jpg)
© FUOC • PID_00178932 56 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo
Supongamos el siguiente fragmento de código de nuestro sistema VCV, en el que se haceel cálculo de la ruta óptima desde el aeropuerto origen al aeropuerto destino escogidospor el usuario:
public class GestorRutas { public void calcularRutaOptima(String anAeropuertoOrigen, String anAeropuertoDestino){ ... distanciaKm = 0.62f * distanciaMillas; System.out.println("Distancia en km": + distanciaKm); ... }}
Donde tenemos una transformación de millas en kilómetros, que, además, se usa en otrospuntos del software. El refactoring del código consiste en extraer el valor en una constanteque pueda reutilizarse en otras partes del sistema y, además, facilite su mantenimiento:
public class GestorRutas { private static final float CONVERSION_MILLAS_KILOMETROS = 0.62f;
public void calcularRutaOptima(String anAeropuertoOrigen, String anAeropuertoDestino){ ... distanciaKm = CONVERSION_MILLAS_KILOMETROS * distanciaMillas; System.out.println("Distancia en km": + distanciaKm); ... }}
Existen algunos casos en los que no estará justificado que realicemos un refac-
toring. Si el coste de refactoring es muy alto, el código de todo el aplicativo está
muy desestructurado o el impacto de las modificaciones tiene un alto riesgo,
puede ser conveniente plantear la construcción desde cero del código.
Herramientas con apoyo alrefactoring del código
La mayoría de las herramientasde desarrollo, como, por ejem-plo, Eclipse, dan apoyo al re-factoring del código.
![Page 57: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/57.jpg)
© FUOC • PID_00178932 57 Calidad del software: técnicas de prevención, detección y corrección...
4. Técnicas de prevención de defectos
Las pruebas y revisiones se basan en encontrar fallos o defectos que ya han
sido introducidos en el software y se tienen que localizar y corregir posterior-
mente, pero su esfuerzo se puede reducir si se establecen técnicas que eviten la
aparición de defectos. En este apartado analizaremos algunas de estas técnicas.
4.1. Análisis de causa raíz
El análisis de causa raíz se basa en analizar los defectos encontrados
para determinar su causa, adoptar las acciones necesarias para prevenir
errores similares en el futuro y borrar defectos parecidos que puedan
existir en el sistema o detectarlos lo más pronto posible en el desarrollo
(con revisiones, por ejemplo).
Estándares en la prevención de defectos
Existen dos técnicas o estándares reconocidos en la prevención de defectos: el failuremodes and effect analysis (FMEA) y el fault tree analysis (FTA). El primero está enfocado aidentificar los fallos potenciales, mientras que el segundo está enfocado a las causas deestos fallos.
Una de las técnicas más útiles para analizar los defectos se basa en el principio
de Pareto, según el cual, el 80% de los problemas se pueden corregir con el
20% del esfuerzo. Si nos concentramos en explorar los defectos más habituales
de mayor severidad (el 80%), podremos obtener una ganancia sustancial si
actualizamos el proceso para prevenirlos.
![Page 58: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/58.jpg)
© FUOC • PID_00178932 58 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo
Imaginemos que hemos clasificado los defectos encontrados en unas pruebas del sistemaVCV según su tipo, tal como se muestra en la tabla siguiente.
Tipo de defecto Número de defectos
Interfaz 45
Gestión�de�datos 32
Computación 15
Mejora 9
Lógico 4
Datos 3
Calidad�documentación 3
Documentación 2
En el ejemplo, el 80% de los defectos (ved la serie Acumulado en el gráfico de arriba) sondefectos de interfaz, gestión de datos y computación. Con este sencillo análisis podemosestablecer fácilmente que hace falta una mejora en la prevención de este tipo de defectos.
También será importante conocer en qué puntos del ciclo de vida se introdu-
cen más defectos, y adoptar acciones de mejora en los procesos y recursos (con
formación, herramientas, etc.).
4.2. Educación y formación
La educación y formación de los equipos de desarrollo de una organización
puede ayudar a prevenir la inyección de determinados defectos.
![Page 59: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/59.jpg)
© FUOC • PID_00178932 59 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo
Muchas veces se malgasta memoria de procesamiento por haber usado en el código untipo de datos que ocupa mucho espacio pero no es necesario. En nuestro programa delCVC usamos una variable de tipo int de Java para almacenar el número de adultos de lareserva, para el que solo queremos representar 2 dígitos. El tipo int permite representardesde el valor –2.147.483.648 hasta el 2.147.483.647. Lo correcto es usar el tipo byte,que permite representar valores entre –128 y 127 y, por tanto, cubre nuestras necesidades.
4.3. Guías y estándares de programación
Un estándar de programación es un conjunto de reglas o guías definido
por la organización, que recomienda y/o obliga a un estilo de progra-
mación y la utilización de prácticas o métodos para cada tipo de pieza
de software escrito en un lenguaje en particular.
Los estándares de programación se diseñan, en general, para hacer que el có-
digo sea más fácil de mantener y lo pueda entender cualquier integrante del
equipo o cualquier externo al equipo, y para animar buenas prácticas de pro-
gramación. Su implantación aporta los siguientes beneficios:
• Incrementa�la�transferibilidad�del�código. Al forzar la necesidad de es-
tructurar mejor el código e incluir comentarios, el software podrá ser trans-
ferido a un equipo nuevo con menos coste.
• Menos�defectos�en�el�código. Una buena estructura del código permite
que los programadores tengan más facilidad para ver qué errores cometen.
• Facilidad�de�prueba. Un código bien estructurado hace más fácil diseñar
las pruebas (con técnicas de caja blanca).
• Facilidad�de�mantenimiento. Si se sigue un estilo idéntico en la progra-
mación de los componentes, les será mucho más fácil y rápido a otros pro-
gramadores modificar un código que no han hecho ellos.
¿Qué tipo de reglas se definen en un estándar de codificación? Entre otras, se
definen las siguientes categorías:
• Nombres de los ficheros y organización
• Convenciones de nombre
Ejemplo
Se determina en la programación del sistema VCV que todas las clases de presentacióntendrán que contener el sufijo "vista" (ReservaVista) y que los nombres de los packagestendrán que cumplir el patrón edu.uoc.nombreaplicacion.nombremodulo".
Convenciones de código
Las convenciones de códigono pueden ser verificadas au-tomáticamente por el compila-dor, pero sí por herramientasde análisis estático de código.
![Page 60: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/60.jpg)
© FUOC • PID_00178932 60 Calidad del software: técnicas de prevención, detección y corrección...
• Aspectos de indentación y espacios en blanco
• Tamaño de los diferentes elementos (clase, función...). Por ejemplo, una
función no puede tener más de 25 líneas.
• Comentarios de código
• Declaraciones y sentencias
• Buenas prácticas de programación
Buenas prácticas deprogramación
Algunos ejemplos de buenasprácticas de programaciónson no usar el operador "="para comparar, usar siempre"equals" en su lugar, no utilizarnúmeros mágicos, etc.
Si bien es cada organización quien ha de definir sus guías y estándares de pro-
gramación, existen algunos ejemplos ya disponibles en los que nos podemos
basar.
El uso de buenas prácticas de programación disminuye la necesidad de realizar
costosos refactoring en el código.
4.4. Validación de los datos
Los usuarios se equivocan. Si bien el software tiene que dar indicaciones de
cuáles son los formatos válidos para una entrada, ha de controlar que no se
introduzcan valores incorrectos.
La comprobación o validación de las entradas se tiene que realizar desde dife-
rentes puntos:
Enlace de interés
Se recomienda acceder a lasconvenciones y buenas prác-ticas de programación queOracle propone en:http://www.oracle.com/technetwork/java/code-conv-138413.html
Robustez
Como el programa valida ycontrola los datos, es parte delfactor de calidad de robustez.
• Datos de usuario (introducidos por pantalla). Hay que comprobar, por
ejemplo, que los números estén dentro de su rango permitido y no se reali-
ce ningún ataque de seguridad.
• Datos intercambiados con sistemas externos.
• Datos internos de una función. La comprobación de los valores de los pa-
rámetros de entrada en una función es equivalente a cualquiera de los
otros tipos, pero, en este caso, los datos vienen de otra función del mismo
programa.
En todos los casos, cuando los datos de entrada sean inválidos se tendrá que
adoptar una medida de reacción, aplicando una o más de las siguientes op-
ciones:
• Sustitución por datos válidos. En el caso de recorrer un conjunto de da-
tos, tenemos que tomar la decisión de abortar o, bien, continuar con el
siguiente dato válido.
Inyección de sentenciasSQL
Uno de los ataques de segu-ridad más habituales es la in-yección de sentencias SQL encampos de entrada que no sevalidan correctamente por elsoftware.
![Page 61: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/61.jpg)
© FUOC • PID_00178932 61 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo
En el sistema VCV queremos procesar cada noche todas las reservas realizadas y enviarlasa la central de reserva de vuelos de las compañías. Si en el procesamiento detectamosque una reserva es errónea por algún motivo, ¿abortamos y no enviamos ninguna de lasreservas o descartamos la reserva errónea y enviamos las restantes? Seguramente consi-deraremos esta última opción como la más recomendada.
• Almacenar un mensaje de error en un fichero interno (con bitácora).
• Devolver un código de error.
• Mostrar un mensaje de error para cualquier error encontrado.
Para controlar los datos inválidos que vengan del propio sistema usaremos las
aserciones o diseño por contrato, como veremos a continuación.
4.4.1. Diseño por contrato
El diseño o programación por contrato prescribe cómo se tienen que
definir formalmente los componentes de software, incorporando a sus
funciones tres conceptos:
• Precondiciones. El método cliente que invoca una función tiene
que proporcionar una entrada correcta (obligación). El método des-
tino no ha de controlar ningún caso especial, excepto la precondi-
ción.
• Poscondiciones. Garantizan el resultado si el cálculo de la función
es exitoso.
• Invariantes. Mantienen una propiedad de entrada en su salida.
Muchos lenguajes proporcionan facilidades para realizar cualquiera de estos
tres tipos de aserciones. En Java también existe este soporte con la sentencia
assert. Las aserciones son una expresión booleana que, en caso de ser eva-
luada como falsa, indica un defecto en el código.
![Page 62: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/62.jpg)
© FUOC • PID_00178932 62 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo
Supongamos la función de cálculo de puntos de fidelización del sistema VCV. Esta fun-ción es llamada internamente a partir de los datos introducidos previamente por el usua-rio. La función espera que le llegue un número de adultos superior a 0 e inferior a 50(quien lo haya validado previamente tendría que ser la capa de presentación), por lo quese usa una aserción para verificarlo.
private int calcularPuntos(byte aNumAdultos){ assert aNumAdultos>0 && aNumAdultos<50: Número de adultos": + aNumAdultos;
...}
Si el parámetro aNumAdultos es mayor que 50 o menor que 0, saldrá un error del tipoAssertionError (aparecerá por pantalla).
Las aserciones permiten detectar de forma preventiva defectos de programa-
ción en el desarrollo. Son usadas para depurar errores lógicos en la aplicación.
Por defecto están desactivadas cuando se ejecuta el software, ya que pueden
impactar en el rendimiento y son innecesarias para el usuario.
Nunca usaremos las aserciones para controlar excepciones de entradas recibi-
das en una función pública, y se tendrían que desactivar antes de que el apli-
cativo se ponga en producción.
Gestión de excepciones Aserciones
Tratamiento de circunstancias inusuales du-rante la ejecución del programa. Robustez.
Asegurar que el software es correcto.
No hay que desactivarlas nunca. Pueden ser desactivadas en el arranque de lamáquina virtual.
No se tienen que usar en la comprobación deargumentos en funciones públicas.
4.5. Desarrollo guiado por pruebas
Activación de lasaserciones
Si se quiere activar las asercio-nes en Java, se tiene que arran-car la máquina virtual Java conel parámetro -ea (java -ea...).
El desarrollo guiado por pruebas es una técnica específica, aplicable a
cualquier ciclo de vida, en la que antes de escribir el código del compo-
nente se escriben sus casos de prueba unitarios.
Con esta técnica se consigue un diseño más robusto (en el caso de un cambio
incorrecto en el componente, lo detectamos rápidamente con la prueba) y que
el código del componente sea más claro, funcional y fácil de mantener.
Sin embargo ¿cómo podemos crear una prueba si todavía no existe el compo-
nente? Veamos cuál es el proceso de esta técnica:
Terminología
El desarrollo guiado por prue-bas se llama en inglés test dri-ven development. Se encuen-tra definido en la metodolo-gía ágil para el desarrollo desoftware denominada extremeprogramming (XP), pero puedeaplicarse en cualquier metodo-logía.
Clean code that works
En inglés, el objetivo de conse-guir un código claro y funcio-nal se resume en la frase cleancode that works.
![Page 63: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/63.jpg)
© FUOC • PID_00178932 63 Calidad del software: técnicas de prevención, detección y corrección...
1) Primero se escribe el caso de prueba que tiene que comprobar una propiedad
concreta de un componente.
2) El componente todavía no existe, por lo que tenemos que crear su esqueleto
sin contenido y escribir la función que se quiere probar poniendo un resulta-
do fallido, pero sin escribir ningún código más (la función solo incluye una
sentencia de retorno de un resultado prefijado no esperado).
3) A continuación se ejecuta el caso de prueba para comprobar que se da el
fallo (resultado negativo).
4) Se escribe el mínimo código en la función del componente para devolver
el resultado esperado por la prueba.
5) Se vuelve a ejecutar la prueba para comprobar que es satisfactoria.
6) Finalmente, y de forma iterativa se realiza un refactoring del código a medida
que se van construyendo los diferentes casos de prueba sobre el componente.
Ejemplo
En el ejemplo que se muestra en la siguiente figura, se realiza un caso de prueba conJUnit para verificar el correcto funcionamiento de la función de cálculo de los puntosde fidelización del sistema VCV.
4.6. Reutilización
La reutilización de software es un método clave para incrementar la calidad del
software y la productividad en el desarrollo. Habitualmente, si reutilizamos
componentes que ya han sido probados previamente reduciremos el número
![Page 64: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/64.jpg)
© FUOC • PID_00178932 64 Calidad del software: técnicas de prevención, detección y corrección...
de defectos. Eso se puede aplicar a la utilización de marcos de trabajo (frame-
works) y librerías ampliamente extendidas, en los que hay una gran comuni-
dad que se dedica a corregir defectos de forma continua.
Ahora bien, para poder ser eficientes, la organización tiene que definir un pro-
grama sistemático de reutilización que permita medir su progreso, identificar
estrategias y establecer un plan de comunicación para facilitar el acceso a los
elementos reutilizables. Tenemos que considerar que la reutilización se pue-
de aplicar a cualquier entregable, no solo a fragmentos de código fuente sino
también a documentos de requisitos, estructuras de diseño, datos, casos de
prueba, interfaces, etc.
![Page 65: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/65.jpg)
© FUOC • PID_00178932 65 Calidad del software: técnicas de prevención, detección y corrección...
5. Técnicas de tolerancia a fallos
Las técnicas de tolerancia a fallos permiten reducir el efecto de un fallo
mediante su gestión y recuperación.
La complejidad y el tamaño de los sistemas hacen que sea imposible probarlo
todo, y las actividades de calidad previas no pueden eliminar por completo
todos los defectos, por lo que algunos se pueden quedar sin corregir. Si se
da un fallo ¿tenemos algún medio para que se reduzca su efecto y no afecte
al entorno del sistema? La respuesta es afirmativa, ya que existen diferentes
técnicas que permiten que los sistemas sigan funcionando incluso en el caso
de que surjan fallos en el software o en el entorno en que se ejecuta.
Sistema eléctrico de seguridad
Estas técnicas se usan en la vida cotidiana desde hace mucho tiempo. Si la corrienteeléctrica de un hospital falla, se pone en marcha otro sistema eléctrico de seguridad (deotra compañía o de un generador propio, por ejemplo).
Cualquier técnica de tolerancia a fallos incluye cuatro fases: la detección del
fallo, la generación de la excepción, su gestión y la recuperación. En este apar-
tado analizaremos de forma práctica estas fases considerando el lenguaje de
programación Java.
5.1. Detección del fallo
La detección de un fallo tiene lugar en el momento en que un componente
efectúa una operación y obtiene un resultado inesperado. En algunos casos,
este resultado puede producirse por comprobaciones de tiempo o de restric-
ciones en tiempo de ejecución.
Las comprobaciones de tiempo se basan en iniciar un temporizador en el mo-
mento en que se solicita un servicio a un componente. Este temporizador ex-
pira en el momento en que se espera que un servicio haya finalizado. Si acaba
antes de tiempo se cancela y se considera que ha habido un fallo.
Ejemplo
Nuestro aplicativo VCV se comunica con un componente externo de un banco para rea-lizar el pago mediante un servicio web. Una vez enviada la petición al servicio web, es-peramos un máximo de tiempo para determinar si ha habido algún fallo en el destino.
![Page 66: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/66.jpg)
© FUOC • PID_00178932 66 Calidad del software: técnicas de prevención, detección y corrección...
En las comprobaciones de restricciones en tiempo de ejecución se verifica que
no se hayan excedido determinadas restricciones, como valores frontera o va-
riables. Cada vez que se modifican las estructuras de datos asociadas a estas
variables se comprueba si hay alguna inconsistencia.
Ejemplo
Podemos verificar si el número de accesos al sistema VCV es superior al previamente con-figurado para enviar a estos accesos un aviso de "Vuelva a intentarlo en unos minutos".
5.2. Generación de la excepción
Listeners
Listeners es un mecanismo enJava que permite ser notificadode cualquier modificación enun dato y así comprobar si seestá desbordando.
Una vez se ha detectado una situación real de fallo, se lanza una excepción
para indicar que algún componente tendrá que gestionarla y tratarla.
La excepción es el acontecimiento anormal que tiene lugar durante la
ejecución de una rutina o función y es efecto de un fallo.
Durante la interacción entre dos componentes podemos encontrar los siguien-
tes escenarios:
1) Un componente B recibe una petición inválida desde otro componente A.
El componente receptor B genera una excepción hacia el componente que lo
ha llamado (excepción de interfaz).
2) El componente A llama a un componente B del que ha recibido una excep-
ción (bien de interfaz, bien por un fallo). El componente A activa su gestión
de excepciones, en la que tendrá que determinar si continúa con su actividad
normal o lanza una nueva excepción al componente superior en la cadena
que lo ha llamado (excepción fallida).
Ejemplo de excepción
El propio lenguaje y algunoscomponentes lanzan una ex-cepción cuando detectan si-tuaciones anómalas.
![Page 67: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/67.jpg)
© FUOC • PID_00178932 67 Calidad del software: técnicas de prevención, detección y corrección...
3) Durante la actividad normal del componente A, detecta un fallo propio y
genera una excepción que es tratada por su gestor de excepciones (excepción
local).
En Java, las excepciones son generadas con la sentencia throw new Nom-
breExcepcion. El método que incluya esta sentencia tiene que incluir asi-
mismo al final de su definición la cláusula throws NombreExcepcion.
public void tratarFidelizacion(String aNombreCliente...) throws FidelizacionException {
if (...) {
throw new FidelizacionException("El cliente "+ aNombreCliente + no tiene...");
}
...
El lenguaje Java permite generar dos tipos de excepciones: excepciones de ti-
po controlado (checked) o excepciones de tipo no controlado (unchecked).
Estos tipos determinan respectivamente si la excepción tiene que ser tratada
obligatoriamente o no por algún gestor de excepciones.
Podemos crear excepciones específicas en una aplicación que deriven de estajerarquía base o indirectamente de clases que se encuentren por debajo deesta jerarquía (ya existentes en frameworks que usamos, librerías, excepcionesespecíficas del lenguaje, etc.).
Las excepciones�de�tipo�controlado representan excepciones "no fatales" en
la ejecución del programa, que tienen que ser tratadas en el código que recibe
la excepción o, bien, obviadas y transmitidas al siguiente objeto en la cadena
de llamadas iniciada. Para crear una excepción de este tipo se tiene que heredar
de la clase Exception.
![Page 68: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/68.jpg)
© FUOC • PID_00178932 68 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo
El componente de reservas del sistema VCV, una vez finalizada la reserva, envía al correoelectrónico del usuario un billete electrónico que permite realizar el check-in de forma ágil.Al comunicarse con el componente que hace el envío, recibe una excepción indicandoque el correo de destino no existe. Sin embargo, este componente toma la decisión de nogestionar la excepción y la pasa a la clase anterior que lo ha llamado. Si no es controladapor ninguna de las clases en la cadena de llamadas, llegará a la pantalla del usuario.
Dentro de las excepciones de tipo no controlado podemos diferenciar dos sub-
tipos:
1)�Error. Excepción considerada fatal por la ejecución del programa. Son ex-
cepciones externas a nuestro programa.
Ejemplo de error
Un ejemplo de error es cuando al escribir un fichero en un directorio hay un problemade red y el propio sistema nos da una excepción de tipo IOException.
2)�RuntimeException. Representan condiciones excepcionales internas a la
aplicación, que esta no puede anticipar. En general corresponden a defectos
de programación, como el uso incorrecto de la API o errores lógicos.
Ejemplo de RuntimeException
Nuestro sistema VCV pasa a una función interna un objeto no inicializado (nulo) querepresenta al cliente que ha hecho la reserva. La función que lo recibe no compruebasi el objeto es nulo e intenta acceder a uno de sus atributos. El lenguaje, al detectar es-ta situación, genera automáticamente una excepción de tipo NullPointerException(heredada de RuntimeException).
Todas las clases anteriores heredan de la clase padre Throwable. En general,
las clases de excepción de nuestro aplicativo siempre heredarán directamente
de Exception.
5.3. Gestión de la excepción
Los gestores de las excepciones son los encargados de recibir las excepciones
y determinar cuáles son las acciones que se tienen que adoptar para mitigar
el fallo.
En Java, si un componente A llama a una función de un componente B, que
declara la generación de una excepción BX (throws BX), puede determinar:
1) No hacer nada con ella y dejarla pasar hacia el componente superior que lo
ha llamado inicialmente. En este caso tendrá que añadir el tipo de excepción
(BX) que puede recibir a la lista de excepciones lanzadas por el método del
componente que recibe la excepción.
Ejemplo
public void tratarFidelizacion(...) throws FidelizacionException, Ex-cepcionInferior
Nota
Las excepciones de tipo nocontrolado no tienen que sercapturadas o gestionadas obli-gatoriamente por nuestro có-digo.
![Page 69: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/69.jpg)
© FUOC • PID_00178932 69 Calidad del software: técnicas de prevención, detección y corrección...
2) Tratar la excepción. En este caso tiene que usar las sentencias de bloque
try-catch-finally.
public void hacerReserva(String aNombreCliente...) throws NullPointerException {
...
try {
tratarFidelizacion(aNombreCliente)
...
} catch (FidelizacionException) {
...
} finally {
...
}
}
Dentro del bloque try se tienen que incluir todas las funciones que puedan
generar una excepción (porque lo dice su cláusula throws).
Si dentro del código del try podemos recibir diferentes tipos de excepciones,
tendremos que crear un catch para cada tipo de excepción que se pueda re-
cibir. En estos bloques es donde realizaremos el tratamiento de la excepción,
bien lanzando una nueva excepción (throw), bien continuando con la activi-
dad normal.
Por último, el bloque finally recoge aquello que haremos independiente-
mente de que se haya producido o no una excepción. Eso puede ser usado para
liberar recursos que se han asignado al bloque try.
La gestión de excepciones se debe realizar de forma adecuada, tomando las
siguientes pautas:
1) Se tiene que lanzar una excepción para condiciones que son realmente ex-
cepciones y no pueden ser gestionadas con otras prácticas de codificación (bi-
tácora...).
Finally
El bloque finally siempre seejecuta, tanto si ha habido al-guna excepción como si no,incluso si dentro del código dealgún catch se llama a algunafunción que genera de nuevouna excepción.
![Page 70: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/70.jpg)
© FUOC • PID_00178932 70 Calidad del software: técnicas de prevención, detección y corrección...
2) Se tiene que evitar relanzar hacia los niveles superiores las excepciones re-
cibidas. Si una condición de error se puede gestionar localmente, hacerlo.
3) Se tienen que generar las excepciones en un nivel adecuado de abstracción.
No tiene sentido lanzar una excepción de acceso a base de datos en un método
de nivel superior de negocio.
4) Se tiene que evitar el uso de bloques catch sin código. No se tiene que
ignorar el tratamiento de las excepciones.
5) Se tienen que incluir en el mensaje de la excepción las circunstancias reales
que han provocado la excepción.
Ejemplo
Si al reservar un vuelo en el sistema VCV se ha dado una excepción en la generación deltique, informar en la excepción de cuál es el dato concreto que ha provocado el error,tanto para una gestión interna como para presentar al usuario indicaciones de cuál hasido el problema.
En Java, las excepciones que no tratamos en ningún gestor de excepciones de
nuestro código son finalmente tratadas por un gestor de excepciones superior
de la máquina virtual de Java, que toma como única decisión la de volcar por
pantalla la información de la excepción producida.
Ejemplo
En nuestro sistema VCV, el último paso de la reserva incluye un campo con datos de latarjeta de pago. Al aceptar los datos se envía la información de pago a un sistema externoo pasarela de pago que comprueba el saldo de la tarjeta y efectúa el cobro.
Si esta pasarela está caída y no gestionamos la excepción, el sistema mostraría finalmentepor pantalla un mensaje como el que aparece a continuación:
![Page 71: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/71.jpg)
© FUOC • PID_00178932 71 Calidad del software: técnicas de prevención, detección y corrección...
Este mensaje, como se puede comprobar, no es comprensible para el usuario final, quienno puede realizar ninguna acción para abrir una incidencia, y da incluso informaciónque podría ser usada por algún atacante (URL del servicio web). En cambio, si se gestionala excepción correctamente, se podría mostrar un mensaje como el siguiente:
5.4. Recuperación
Dentro de la gestión de la excepción se tiene que tomar una acción de recu-
peración, bien de forma estática, bien dinámica. La recuperación estática se
basa en devolver al componente a un estado predeterminado, ya sea el inicial
o uno de los posibles estados.
![Page 72: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/72.jpg)
© FUOC • PID_00178932 72 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo
Durante la finalización de la reserva de un vuelo en el sistema VCV se pierde la conexióncon el sistema de pago y el sistema determina cerrar la sesión del usuario y que este vuelvaa iniciar de nuevo la reserva.
La recuperación dinámica utiliza puntos de control que son instantáneas del
estado que pueden ser creados en diferentes puntos de la ejecución, bien a
intervalos fijados en el tiempo, bien en específicos puntos de la ejecución.
Ejemplo
En el mismo caso anterior, durante la ejecución de la reserva el sistema almacena el estadode la misma y sus datos. Cuando tiene lugar el fallo, el sistema reenvía al usuario al últimopunto en que se había quedado.
Sin embargo, hay acciones que no se pueden recuperar o deshacer. En estos
casos se tiene que tomar en consideración cuál debe ser el orden para incluir
al final de la secuencia de acciones la acción que no tenga marcha atrás.
Ejemplo
Supongamos que el sistema VCV envía primero un correo electrónico para confirmar lareserva y, a continuación, un SMS, pero que este último falla. El correo ya habrá sidoenviado y no se podrá deshacer una acción que no tiene marcha atrás (el SMS no se hapodido enviar, pero sí se ha enviado el correo electrónico).
![Page 73: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/73.jpg)
© FUOC • PID_00178932 73 Calidad del software: técnicas de prevención, detección y corrección...
6. Herramientas
El uso de herramientas permite incrementar la eficiencia y efectividad de los
diferentes procesos, actividades y técnicas que hemos visto en el módulo.
En este apartado nos basaremos en la estructura de las herramientas que, según
el tipo de perfil al que van dirigidas, se clasifican en herramientas de gestión
de las pruebas (gestores), herramientas de definición y diseño de pruebas (ana-
listas de pruebas), herramientas de ejecución de pruebas dinámicas (probado-
res), herramientas de ejecución de pruebas estáticas (revisores) y herramientas
específicas para desarrolladores.
Por último, veremos herramientas de soporte que, si bien no se pueden iden-
tificar como herramientas dirigidas a ninguno de los perfiles anteriores, son
imprescindibles para la consecución de los hitos establecidos.
6.1. Herramientas de gestión de las pruebas
Las herramientas de gestión nos permiten realizar las tareas asociadas a la ges-
tión del ciclo de las pruebas, como el análisis de riesgos, la estimación de los
esfuerzos, la planificación de las pruebas y su monitorización. Aportan, entre
otras, las siguientes funcionalidades:
• Planificación de las pruebas, seguimiento de su ejecución (horas invertidas
en cada actividad, persona que las tiene que ejecutar, etc.) y riesgos.
• Gestión de la documentación de las pruebas: especificaciones de prueba,
procedimientos y establecimiento de la trazabilidad de las pruebas con los
requisitos (qué requisitos cubre cada prueba).
• Seguimiento de la ejecución de las pruebas: pruebas planificadas, especifi-
cadas, ejecutadas, pasadas con éxito y fallos.
• Registro y seguimiento de los defectos encontrados durante las pruebas.
• Generación de informes y métricas (tendencias de defectos corregidos
frente a creados, número de casos de prueba, etc.).
• Comunicación y visión integrada con otras herramientas:
– Ejecución de las pruebas (para visualizar el estado de las pruebas).
– Herramientas de gestión de incidencias (para extraer información de
las incidencias y hacer su seguimiento).
Ejemplos de herramientasde gestión de las pruebas
Los siguientes son ejemplos dealgunas herramientas de ges-tión de las pruebas: RTH (gra-tuita), XQual-XStudio Testo-pia (extensión de Bugzilla), HPQuality Center, IBM RationalTestManager o SilkCentral TestManager.
![Page 74: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/74.jpg)
© FUOC • PID_00178932 74 Calidad del software: técnicas de prevención, detección y corrección...
– Herramientas de gestión de la configuración (para controlar los activos
de pruebas generados).
– Herramientas de gestión de requisitos (para poder establecer la traza-
bilidad de las pruebas con los requisitos).
Ejemplo de la herramienta RTH, que permite gestionar los requisitos y pruebas de unaaplicación
6.2. Herramientas de diseño y preparación de datos de las
pruebas
Las herramientas de diseño de pruebas ayudan a la creación de las especifi-
caciones de prueba. Algunas de estas permiten la creación de diagramas y la
generación de documentación de casos de prueba, pero otras son capaces de
generar casos de prueba de alto nivel a partir de los requisitos o de un modelo
(creado, por ejemplo, con UML).
Ejemplo
En la siguiente figura se muestra cómo se han diseñado los casos de prueba del sistemaVCV con clases de equivalencia, mediante la herramienta CTE, gratuita.
Ejemplos de herramientas
Algunos ejemplos en el merca-do que pueden generar casosde prueba son:• Conformiq Qtronic• Microsoft Spec Explorer• Smarttesting Test Designer
![Page 75: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/75.jpg)
© FUOC • PID_00178932 75 Calidad del software: técnicas de prevención, detección y corrección...
Preparar un juego de datos de prueba puede comportar un gran esfuerzo, espe-
cialmente si queremos generar un conjunto grande de datos. Las herramientas
de preparación de datos dan soporte a esta necesidad, permitiendo la selección
de fuentes de datos (una base de datos existente, un fichero XML...), la crea-
ción y generación de datos y su manipulación.
Algunas de estas herramientas permiten seleccionar datos reales ya existentes
(de una base de datos de producción, por ejemplo) y transformarlos automá-
ticamente en otros, ocultando datos sensibles (por ejemplo, los NIF son cam-
biados por NIF no reales, los nombres son intercambiados, etc.). Este proceso
se denomina habitualmente "enmascaramiento de datos" y permite la ejecu-
ción de pruebas con datos reales y simular así el máximo de condiciones de
prueba posibles.
Es especialmente importante poder generar diferentes volúmenes de datos
"reales" en pruebas de rendimiento, en las que se requiere la ejecución de di-
ferentes usuarios con diferentes datos.
6.3. Herramientas para la ejecución de pruebas dinámicas
Las herramientas de ejecución de pruebas dinámicas son utilizadas principal-
mente para la realización de pruebas de regresión basadas en la automatiza-
ción de las mismas. Permiten la ejecución de procedimientos de prueba más
rápidamente y con más garantías que si lo hiciera una persona.
Ejemplo
¿Cómo podríamos simular la interacción de 1.000 alumnos a la vez sobre la web del sis-tema VCV si no disponemos de usuarios reales que lo prueben? Podríamos reunir a 250personas interinas que abrieran cuatro navegadores a la vez y, mientras fueran navegan-do, tuvieran que registrar en cada uno de ellos los tiempos de respuesta obtenidos encada interacción y se hubieran de recoger y analizar los datos por cada pantalla anotada,etc. Para suplir estas problemáticas, una herramienta de ejecución de pruebas puede serde gran ayuda.
Herramientas degeneración de datos deprueba
Algunos ejemplos de herra-mientas de generación de da-tos de prueba son: Grid-toolsDatamaker, Datanamic DB Da-ta Generator y Microfocus Da-ta Express.
Enmascaramiento dedatos
El enmascaramiento de datoses obligatorio cuando tenemosque usar datos sensibles en laspruebas. Hay datos que, por suconfidencialidad, no puedenser conocidos.
![Page 76: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/76.jpg)
© FUOC • PID_00178932 76 Calidad del software: técnicas de prevención, detección y corrección...
6.3.1. Automatización de las pruebas
Las herramientas de ejecución de pruebas trabajan generalmente de acuerdo
con un conjunto de instrucciones escritas en un lenguaje de scripting perso-
nalizado por la herramienta. Con este lenguaje, el probador puede establecer
cuáles son las acciones que tendrá que realizar la herramienta contra el aplica-
tivo que se quiere probar13 y qué resultados tendrá que verificar automática-
mente (mirar que aparezca el mensaje 'Vuelo reservado con éxito', que el lis-
tado de vuelos muestre los vuelos esperados por un usuario en concreto, etc.).
Para facilitar la tarea de programación, estas herramientas suelen ofrecer la
posibilidad de grabar y reproducir14 una navegación real contra la aplicación.
El probador indica a la herramienta que empieza una grabación, accede a la
aplicación y realiza las diferentes acciones que quiere probar. A medida que se
realiza la interacción del probador con el aplicativo, la herramienta va gene-
rando, para cada acción, la sentencia correspondiente en el lenguaje de scrip-
ting. Adicionalmente, el probador puede marcar en la pantalla de la aplicación
qué es lo que se quiere validar en cada prueba y la herramienta lo registra.
En el momento de la ejecución automática, la herramienta realizará la inter-
acción con la aplicación como si se tratara de un usuario real, siguiendo las
sentencias del script, comparando los resultados esperados con los reales y ge-
nerando el resultado final de la prueba (ha sido fallida, ha pasado, en base a
que las condiciones y resultados son los que se esperaban).
Las características de estas herramientas permiten:
• Capturar las entradas de prueba realizadas manualmente.
• Almacenar los resultados esperados en una pantalla u objeto (un tag con-
creto HTML, un mensaje, etc.) para poder ser comparados la próxima vez
que se ejecute la prueba.
• Ejecutar las pruebas a partir de los scripts almacenados y los datos que se
hayan indicado.
• Comparar en la ejecución los resultados esperados y los reales.
• Registrar las resultados de las pruebas (han pasado, han fallado, etc.) y
enviarlos a la herramienta de gestión de pruebas.
(13)Por ejemplo, acceder a la URLhttp://www.uoc.edu/reserves,apretar el botón "Quiero reservarun vuelo", escoger el aeropuertode origen "Barcelona", etc.
Lenguaje de scripting
Un lenguaje de scripting es unlenguaje de programación quepermite el control de una omás aplicaciones. Este lengua-je es diferente del lenguaje enque está escrita la aplicación.
(14)La funcionalidad de la herra-mienta para grabar y reproducir sellama capture & replay en inglés.
![Page 77: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/77.jpg)
© FUOC • PID_00178932 77 Calidad del software: técnicas de prevención, detección y corrección...
6.3.2. Herramientas para la ejecución de pruebas unitarias e
integración
Para la ejecución de pruebas unitarias y de integración, la herramienta más
utilizada en el entorno Java es JUnit. TestNG también es otra opción seria
que aporta algunas funcionalidades más que JUnit, pero que todavía no la ha
desbancado como estándar de facto.
Diferentes herramientas de soporte nos permitirán visualizar los resultados de
las diferentes pruebas unitarias y ver cuáles han fallado (por ejemplo, porque
un cambio erróneo en el código haga que el resultado real no sea el esperado).
6.3.3. Herramientas para la ejecución de pruebas de sistema
Dentro de las herramientas para la ejecución de pruebas de sistema pode-
mos distinguir las siguientes herramientas: herramientas de ejecución de prue-
bas funcionales, herramientas de ejecución de pruebas de rendimiento, herra-
mientas de ejecución de pruebas de seguridad y herramientas de ejecución de
pruebas de accesibilidad.
Herramientas de ejecución de pruebas funcionales
Enlaces de interés
Para saber más sobre TestNGy JUnit podéis accedera http://www.junit.org/y http://testng.org/doc/index.html
Las herramientas de ejecución de pruebas de sistema funcionales son el ejem-
plo más claro de automatización para grabación y reproducción.
Sellenium
Sellenium es un ejemplo de herramienta gratuita de automatización de pruebas funcio-nales que se integra con otras herramientas de software libre. Permite la grabación desdeun navegador Firefox de una navegación e indicar qué resultados se quieren comprobardurante las pruebas automáticas.
Herramientas de ejecución de pruebas de rendimiento
Las herramientas de ejecución de pruebas de rendimiento permiten generar
volúmenes grandes de carga en la aplicación y medir su rendimiento en dife-
rentes escenarios. Están formadas por dos elementos principales: un generador
de carga y un componente de análisis.
Diversas herramientas
Si bien existen muchísimas herramientas de pruebas de rendimiento destacamos las si-guientes:
• JMeter (gratuita, ampliamente usada en software libre)• OpenSTA (gratuita)• Grinder (gratuita)• HP LoadRunner• Compuware QALoad• IBM Rational Performance Tester• Microfocus SilkPerformer
La generación de carga se realiza en tres fases:
Otras herramientas
Otras herramientas de auto-matización funcional amplia-mente conocidas son:• Fitnesse (gratuita)• Microfocus SilkTest• IBM Rational Functional
Tester• HP QuickTest
![Page 78: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/78.jpg)
© FUOC • PID_00178932 78 Calidad del software: técnicas de prevención, detección y corrección...
1) En primer lugar se crea el scripting que define la navegación y las acciones
que se tienen que realizar contra la aplicación (apretar botón, introducir datos,
etc.), bien de forma manual, bien con el mecanismo de "grabación" ofrecido
por la herramienta.
2) En segundo lugar se configura un perfil operacional en el que se definen el
número de usuarios que se simularán (usuarios virtuales), en qué intervalo de
tiempo irá entrando cada uno de ellos (rampa de entrada) y los datos que se
utilizarán de entrada para cada usuario simulado.
3) Por último, al ejecutar las pruebas la herramienta genera carga real contra
el sistema con la navegación definida y el perfil operacional.
Una vez se han iniciado las pruebas, el componente de análisis de la herra-
mienta registra durante toda la prueba cuántos usuarios se están simulando,
qué acciones están realizando y los tiempos de respuesta obtenidos por cada
acción. Esta información, contrastada con los requisitos, nos da idea de si el
aplicativo está preparado para asumir la carga esperada o cuáles son las con-
diciones máximas que puede permitir.
Ejemplo de ejecución con JMeter
![Page 79: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/79.jpg)
© FUOC • PID_00178932 79 Calidad del software: técnicas de prevención, detección y corrección...
Durante las pruebas de rendimiento son muy útiles las herramientas de mo-
nitorización, que dan información del estado del sistema mientras se está uti-
lizando (servidores, redes, rendimiento, aplicaciones, etc.). Con estas herra-
mientas podemos identificar posibles cuellos de botella (sentencias SQL poco
óptimas, código poco eficiente, etc.), monitorizar el tráfico de red y obtener
información valiosa en tiempo real e histórico.
Herramientas de ejecución de pruebas de seguridad
Hay herramientas de propósito especial para detectar problemas de seguridad
en las aplicaciones. Estas herramientas detectan, entre otras, vulnerabilidad
del tipo SQLInjection y Cross Site Scripting. La mayoría se basan en dar cum-
plimiento a las buenas prácticas establecidas por el OWASP (open web applica-
tion security project).
Habitualmente, es en las pruebas de seguridad donde encontramos más falsos
positivos, es decir, fallos que realmente no son tales. En estos casos tendremos
que confirmarlo de forma manual.
Herramientas de ejecución de pruebas de accesibilidad
En el ámbito específico de aplicaciones web podemos encontrar herramientas
para analizar diferentes aspectos:
• Detectar enlaces rotos entre las páginas.
• Validar si la sintaxis HTML es correcta.
• Validar la accesibilidad de las páginas. Están orientadas a detectar el segui-
miento del cumplimiento de las normas establecidas por el W3C en ma-
teria de accesibilidad y reconocer qué nivel de cumplimiento tiene la web.
La herramienta TAW (test de accesibilidad web) desarrollada por la Fundación CTIC (Principado de Asturias) permite comprobarde forma automática si un aplicativo cumple las normas incluidas en el WCAG.
OWASP
El OWASP es un proyecto decódigo abierto para determi-nar y combatir las causas quehacen que el software sea inse-guro.
Herramientas dereferencia
Algunas herramientas de refe-rencia para la ejecución de laspruebas de seguridad son:• WebScarab• IBM AppScan• HP WebInspect
![Page 80: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/80.jpg)
© FUOC • PID_00178932 80 Calidad del software: técnicas de prevención, detección y corrección...
6.4. Herramientas para la ejecución de pruebas estáticas
6.4.1. Herramientas de revisión
Algunas herramientas de modelado permiten validar los modelos diseñados,
comprobando, por ejemplo, la consistencia en las relaciones entre las tablas
de una base de datos o la consistencia de un modelo en UML.
Las herramientas de gestión de requisitos también pueden contener informa-
ción muy valiosa que permiten, entre otros:
Microfocus Together
Un ejemplo típico de herra-mienta de revisión es Microfo-cus Together.
• Comprobar la consistencia entre los requisitos.
• Comprobar aspectos ambiguos en los requisitos (algunas palabras clave co-
mo "puede", "habría de"...), expresiones no permitidas, legibilidad o tiem-
pos verbales incorrectos.
• Identificar requisitos sin definir o "por definir más adelante".
• Comprobar la trazabilidad con las pruebas y su cobertura.
6.4.2. Herramientas de análisis estático de código
Visure IRQA
La herramienta Visure IRQAes capaz de detectar aspectosambiguos en los requisitos.
Las herramientas de análisis estático de código permiten entender la estructu-
ra del código y evaluar el seguimiento de estándares de codificación y buenas
prácticas de programación. Aportan, entre otras, las siguientes funcionalida-
des:
• Obtención de métricas de código (complejidad ciclomática, fan-in, fan-
out...).
• Seguimiento de normas de codificación.
• Análisis de la estructura y dependencias (ver qué relaciones existen entre
diferentes clases, componentes, etc.).
• Identificación de defectos.
Estas herramientas permiten generar informes detallados de los incumpli-
mientos y en qué puntos específicos del código se tienen que realizar las co-
rrecciones.
Herramientas paraanalizar código Java
Las herramientas más utiliza-das para analizar código Javason:• Checkstyle (gratuita)• Findbugs (gratuita)• PMD (gratuita)• Sonar (integra las anteriores
en un cuadro de mandos)• Parasoft JTest
![Page 81: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/81.jpg)
© FUOC • PID_00178932 81 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo de Sonar, un cuadro de mandos para el análisis de la calidad del código Java
6.5. Herramientas de soporte al desarrollo
En este grupo se incluyen todas las herramientas que pueden usar los desarro-
lladores para programar con más calidad, localizar defectos y realizar su co-
rrección.
6.5.1. Herramientas de soporte a la programación
En general, las diferentes herramientas de programación ofrecen utilidades
que reducen el tiempo necesario para desarrollar código (plantillas, generación
automática de código, etc.), así como también para evitar la introducción de
defectos y usar buenas prácticas de programación, como, por ejemplo:
• Asistir automáticamente al programador incorporando automáticamente
el corchete de final del bloque ("}") cuando el programador introduce el
corchete de inicio ("{").
• Eliminar los 'import' no utilizados.
• Autocompletar funciones con búsqueda asistida.
• Comprobar en tiempo real, a medida que se programa, si se están cum-
pliendo los estándares y buenas prácticas de programación. La mayoría de
las herramientas de análisis estático estudiadas anteriormente tienen una
versión específica integrada con el entorno de desarrollo.
FindBugs
FindBugs, por ejemplo, tie-ne un plugin para Eclipse quenos marca aquellos puntos denuestro código que incumplenlas buenas prácticas de progra-mación.
![Page 82: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/82.jpg)
© FUOC • PID_00178932 82 Calidad del software: técnicas de prevención, detección y corrección...
Ejemplo donde el programador ve al momento que lacomparación entre cadenas no es correcta (se marca elincumplimiento o mala práctica con un icono de defecto a laizquierda de la línea).
6.5.2. Herramientas de depuración
Al principio del desarrollo de una transacción de negocio o de un método
puede ser interesante usar una herramienta de depuración para verificar que el
código está haciendo lo que esperábamos mientras lo estábamos implemen-
tando, o para ayudarnos a explorar un código que se comporta de una forma
que no entendemos (qué valores tienen los datos, qué camino se toma...).
La mayoría de las herramientas de desarrollo ofrecen herramientas de depura-
ción. La ejecución de la depuración se realiza en los siguientes pasos:
1) El programador determina en qué puntos del código fuente el depurador
tendrá que detener su ejecución (puntos de interrupción).
2) El programador arranca desde la herramienta de desarrollo el aplicativo en
modo de depuración.
3) El programador entra en el aplicativo como si se tratara de un usuario real
y navega hasta que el depurador determina que se ha pasado por un punto
de interrupción.
4) El depurador interrumpe la ejecución y muestra de forma destacada dentro
del código fuente la línea en la que se ha detenido.
5) El programador evalúa en esta interrupción la memoria, los valores de las
variables del programa y determina la siguiente acción:
a) Ir paso a paso por el código fuente para analizar por qué puntos pasa la
ejecución.
b) Incorporar nuevos puntos de interrupción.
Puntos de interrupción
El punto de interrupción pue-de ser condicional (parar si he-mos llegado a la posición 10del bucle) o imperativo (pararsiempre si llegas a esta senten-cia).
![Page 83: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/83.jpg)
© FUOC • PID_00178932 83 Calidad del software: técnicas de prevención, detección y corrección...
c) Ejecutar determinadas partes del código, como el interior de una función
llamada por una función (de forma recursiva), o pasar a la siguiente interrup-
ción.
6.5.3. Herramientas de integración continua
Las herramientas de integración continua permiten realizar de forma desasis-
tida, y habitualmente diaria, la construcción del software, a partir del código
generado por diferentes desarrolladores y subido a la herramienta de control
de versiones, la ejecución de pruebas unitarias, la comprobación del cumpli-
miento de normas y estándares, el despliegue del aplicativo y la comprobación
funcional del mismo, todo ello de forma automática. Con la visión incremen-
tal de la herramienta en informes accesibles en web podemos prevenir defec-
tos durante todo el ciclo de vida.
6.5.4. Herramientas de gestión de la configuración
Diversas herramientas
Existen diferentes herramientasgratuitas de integración con-tinua, como Hudson, Conti-nuum o Cruise Control.
Las herramientas de gestión de la configuración no son en sí mismas herra-
mientas de pruebas, pero resultan vitales para una ejecución correcta de las
mismas. Cuando probamos una aplicación tenemos que saber cuál es la ver-
sión que probamos, ya que todos los activos de prueba dependerán de esta.
Todos los entregables generados durante las pruebas tienen cambios en el tiem-
po y están asociados a determinadas versiones del software a probar, por lo que
también tienen que ser almacenados y gestionados dentro de las herramientas
de gestión de la configuración.
Gestión de laconfiguración
En algunas ocasiones, una ma-la gestión de la configuraciónprovoca que se inviertan variassemanas en probar una versióndel software que no correspon-de a la versión que realmentese tenía que probar.
![Page 84: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/84.jpg)
© FUOC • PID_00178932 84 Calidad del software: técnicas de prevención, detección y corrección...
Resumen
Hemos iniciado el módulo con una detallada descripción de la misión que
tienen las pruebas, incluyendo su clasificación (niveles, características a pro-
bar...), sus fases y los entregables producidos en ellas (especificación del dise-
ño, casos de prueba y procedimientos, entre otros). Asimismo hemos descri-
to diferentes técnicas de diseño de pruebas, como, por ejemplo, la técnica de
clases de equivalencia.
Debido a que las pruebas no son suficientes por sí solas para evaluar la calidad,
hemos descrito el objetivo de las revisiones y el análisis estático. Las primeras
pueden ser clasificadas según su formalidad y tienen un proceso bien definido.
Para poder localizar defectos hemos recurrido al proceso de depuración y la
bitácora, un mecanismo habitual para registrar acontecimientos que nos per-
mitan reconocer las condiciones y la localización del código en el que se ha
producido un fallo o un defecto. Asimismo, el refactoring es una estrategia que
tiene que utilizarse continuamente para mantener la calidad de nuestro soft-
ware.
Como técnicas de prevención de defectos, podemos encontrar el análisis de la
causa raíz, los estándares de programación y la validación de los datos, en la
que se incluye el concepto de "diseño por contrato".
Para establecer una acción de recuperación en el caso de que se dé un fallo
hemos descrito el mecanismo de gestión de excepciones, considerando el tra-
tamiento que posibilita el lenguaje Java, como ejemplo.
Para finalizar el módulo hemos descrito diferentes herramientas que dan so-
porte a las diferentes técnicas analizadas, como las herramientas de gestión
de las pruebas, las herramientas para la ejecución de pruebas dinámicas o las
herramientas de análisis estático, entre otras.
![Page 85: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/85.jpg)
© FUOC • PID_00178932 85 Calidad del software: técnicas de prevención, detección y corrección...
Actividades
1. Identificad las clases de equivalencia para cada uno de los datos de entrada mostrados enla pantalla de ejemplo del sistema VCV del subapartado 1.6.1.
2. Suponed el siguiente diagrama que representa la realización de una reserva en el sistemaVCV y cómo se tiene que bloquear la plaza reservada (a fin de que no la pueda coger otrousuario) hasta su pago (o anularla):
Construir la tabla de estados correspondiente al diagrama superior para diseñar las pruebasnecesarias.
3. Supongamos en el sistema VCV el siguiente escenario:
• El sistema tiene que validar la reserva si la cuenta de la tarjeta corresponde a alguno delos pasajeros y el saldo de la tarjeta cubre el total de la reserva.
• El sistema tiene que enviar en caso de validación de reserva un correo electrónico deconfirmación.
• El sistema tiene que enviar confirmación por SMS si se ha marcado envío por SMS y elteléfono móvil indicado es correcto.
• El sistema tiene que descontar de la factura un 1% si el correo electrónico indicado co-rresponde a un usuario registrado en la web.
Definid la tabla de decisión correspondiente para las pruebas, eliminando aquellos casos queno sean posibles.
4. Proponed una lista de comprobación de la usabilidad de aplicativos web. A continuación,revisad qué es la accesibilidad y qué lista de comprobación define el W3C (World Wide Con-sortium). Describid de forma sucinta el concepto de prioridades y niveles de conformidad.
5. Definid qué es un oráculo de pruebas y dad algunos ejemplos.
6. Describid con un ejemplo aplicado al sistema VCV qué es SQL Injection. ¿Qué solucioneshay para prevenir este tipo de defectos?
7. Imaginad que un programador escribe el siguiente fragmento de código:
![Page 86: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/86.jpg)
© FUOC • PID_00178932 86 Calidad del software: técnicas de prevención, detección y corrección...
SqlConnection conn = null;try { conn = new SqlConnection(...); conn.open(); // código de ejecución de inserciones, consultas, etc. Statement smt = conn.createStatement(); ... ...// otro código conn.close()} catch (SQLException sqlExc) {}
¿Qué problema tiene este código? Proponed cuál tendría que ser el código correcto.
8. Escoged alguno de los proyectos publicados en http://nemo.sonarsource.org/ y analizadlos defectos más importantes encontrados. Buscad algún método en el que la complejidadciclomática sea superior a la máxima permitida y, caso de que sea posible, indicad cómo seha calculado.
Ejercicios de autoevaluación
1. Imaginad que, por una nueva ley de seguridad, todas las reservas realizadas en nuestrosistema VCV tendrán que ser notificadas a un sistema de la policía en el que nos tenemosque integrar. Suponed que este componente externo no estará desarrollado hasta dentro dedos meses, pero se quiere simular su interacción antes de que esté disponible. ¿Qué soluciónpropondríais?
2. En los siguientes casos de nuestro sistema VCV, identificad qué tipo de prueba o qué técnicautilizaríais:
a) Se quiere obtener feedback del mercado de una nueva aplicación para móviles que permitirála realización de las reservas.
b) Se quiere comprobar que esta nueva aplicación móvil funciona correctamente en diferen-tes plataformas de dispositivos móviles (Android, Symbian, Windows Phone y BlackberryOS).
c) Se quiere probar que nuestro sistema VCV envía un correo a la central de reservas si la fechade reserva es inferior a 3 días e incluye un aeropuerto de destino internacional, mientras quetiene que enviar un SMS en caso contrario.
d) Se quieren probar todas las condiciones del código de la función de facturación.
e) Nuestro sistema VCV, después de ser puesto en producción, cae por un número inesperadode accesos. Se quiere conocer cuál es el umbral máximo de usuarios que permite el sistema.
f) Nuestro sistema VCV genera un tique de reserva en formato PDF que tendría que poderser usado en diferentes versiones del programa Acrobat Reader.
g) Se quiere asegurar que los defectos previamente corregidos no vuelven a aparecer.
h) No se ha definido un plan de pruebas exhaustivo, pero se dispone de un probador conalta experiencia en encontrar defectos en sistemas de reservas.
3. ¿Qué tipo de técnica de detección de defectos propondríais para cada uno de los siguientescasos?
a) Se quiere analizar qué porcentaje de código duplicado tiene nuestro software del sistemaVCV.
b) Se quiere comprobar la evolución del proyecto y la existencia de desviaciones importantes.
c) Se quiere pedir a una entidad externa que nos certifique en el nivel 3 de CMMI.
d) Se quiere revisar un plan de pruebas basándose en una lista de comprobación.
e) Se quiere revisar si la arquitectura propuesta en nuestro sistema VCV es adecuada. Se pro-pone la participación de técnicos expertos.
![Page 87: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/87.jpg)
© FUOC • PID_00178932 87 Calidad del software: técnicas de prevención, detección y corrección...
4. ¿Qué técnica de prevención, localización o corrección aplicaríais en los siguientes casos?
a) Por normas regulatorias tenemos que registrar todos los accesos que se realicen a nuestroaplicativo VCV.
b) Después de corregir un defecto en un fragmento de código, hemos encontrado diferentespuntos del código en el que aparece el mismo fragmento erróneo.
c) Nuestro sistema recibe eventos de fallo al comunicarse con el componente externo defacturación.
d) Durante el desarrollo se observa inexplicablemente que un dato entrado en una pantallapasa posteriormente a ser almacenado con otro valor. Queremos comprobar dónde se cambiael valor internamente.
e) En repetidas ocasiones se producen fallos en el entorno productivo motivados por valoresde negocio válidos, pero complejos. El desarrollador tiene un script de base de datos querealiza la corrección rápidamente, pero no se ha encontrado una solución permanente.
f) Nuestro sistema VCV ha incorporado un espacio en el que la gente puede publicar las guíasde sus viajes. El sistema no es capaz de recibir documentos adjuntos superiores a 10 Mb, perosigue permitiendo que el usuario suba documentos de cualquier tamaño.
![Page 88: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/88.jpg)
© FUOC • PID_00178932 88 Calidad del software: técnicas de prevención, detección y corrección...
Solucionario
Actividades
Solución�de�la�actividad�1
Una posible solución sería la que se puede ver en la tabla siguiente.
Campo Clases de equivalencia válidas Clases de equiva-lencia inválidas
Ida y vuelta / Vuelta Ida y vueltaVuelta (2 clases válidas)
Aeropuerto origen o destino Origen estatal y destino estatalOrigen estatal y destino interna-cionalOrigen internacional y destino es-tatalOrigen internacional y destino in-ternacional
Fecha de ida Fecha>Hoy <=Hoy
Fecha de vuelta >Fecha ida <=Fecha ida
Adultos 1-50 (no se permite que viajen ni-ños solos, si se permitiera, sería0-50)
<1>50 (2 clases inválidas)
Texto alfanumérico
Niños 0-5 <0>5
Bebés 0-2 <0>2
Categoría BusinessTurista (2 clases válidas)
Soy flexible en las fechas, Solovuelos directos,Incluir low cost
SíNo
Solución�de�la�actividad�2
La tabla de estados correspondiente es:
Estado actual Evento/con-dición
Acción Nuevo estado
Libre Vuelo seleccionado Bloquear Introduciendo datos
Introduciendo datos Aceptar datos - Pendiente de pago
Introduciendo datos Tiempo>15 min. Desbloquear y cerrar sesión Libre
Pendiente de pago Pago no realizado Enviar correo Libre
Pendiente de pago Pago realizado Enviar correo confirmación Cerrada
Solución�de�la�actividad�3
Algunos de los casos de prueba no son aplicables o reales. Si la cuenta titular no correspondea ningún pasajero, no hace falta que comprobemos nada más, ya que la reserva no se podrá
![Page 89: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/89.jpg)
© FUOC • PID_00178932 89 Calidad del software: técnicas de prevención, detección y corrección...
realizar, y, por tanto, no se enviará ninguna confirmación ni se aplicará ningún descuento.En caso de que sí corresponda a algún pasajero, pero la cuenta no tenga saldo, tampocotendrá sentido comprobar si el usuario está registrado o si ha marcado envío por SMS. Por lotanto, la tabla final de decisión y, consecuentemente, los diferentes casos de prueba (6) serán:
Condición 1 2 3 4 5 6
¿Cuenta titular de algún pasajero? S S S S S N
¿Cuenta con saldo? S S S S N -
¿Usuario registrado? S S N N - -
¿Marcada confirmación por SMS? S N S N - -
Acciones
Validar reserva y enviar correo S S S S
Enviar confirmación SMS S S
Descontar factura S S
Mensaje error S S
Solución�de�la�actividad�4
Una lista de comprobación para la usabilidad de páginas podría contener los siguientes cri-terios:
Grupo de criterios Criterio
Navegación • ¿Se muestra claramente la localización al usuario dentro del sitioweb?
• ¿Se identifica de forma clara cómo ir a la página principal?• ¿Las partes más importantes son accesibles desde la página prin-
cipal?• ¿Se facilita una función de búsqueda?
Funcionalidad • ¿Se puede acceder desde un nivel principiante y uno experto?• ¿Las funciones se identifican claramente?• ¿Solo se usan plugins (Flash, Applet...) cuando aportan valor?
Control al usuario • ¿El usuario puede cancelar cualquier operación?• ¿Están soportados los navegadores más habituales? (Firefox, Ex-
plorer...)• ¿El tamaño de las páginas es inferior a 50 K para permitir el
acceso a conexiones lentas?
Ayuda al usuario • ¿Se muestra una pantalla de confirmación para las operaciones?• ¿Se aporta en cada página la fecha de última actualización?• ¿Se aportan ayudas contextuales a los componentes?
Accesibilidad • Referirse a la guía WAI del W3C
Con el nombre WAI (web accessibility initiative) se describe un conjunto de guías y herra-mientas para la evaluación de la accesibilidad de páginas web. La guía WCAG (web content
![Page 90: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/90.jpg)
© FUOC • PID_00178932 90 Calidad del software: técnicas de prevención, detección y corrección...
accessibility guidelines) incluye una lista de comprobación para el desarrollo de páginas webaccesibles, donde cada comprobación tiene asignada una prioridad:
• Prioridad 1. Se tiene que cumplir obligatoriamente. Si no se cumple, algunos grupos en-contrarán imposible acceder al contenido web. Ejemplo: Asegurar que toda la informa-ción mostrada con color también es comprensible sin color.
• Prioridad 2. Se tendría que cumplir.• Prioridad 3. Puede cumplirla o no.
En función de estos puntos asignados a cada comprobación se puede establecer un nivel deconformidad de todo el aplicativo web: "A" si se han satisfecho todos los puntos de compro-bación con prioridad 1, "AA" si se han satisfecho todos los puntos de comprobación conprioridad 1 y 2, y "AAA" si se han satisfecho todos los puntos de comprobación con prioridad1, 2 y 3.
Solución�de�la�actividad�5
Un oráculo es cualquier programa, proceso o dato que proporciona información de cuál tieneque ser el resultado de un conjunto de pruebas. Es requerido en casos en los que no podemosdeterminar fácilmente cuáles son los resultados esperados de la prueba. Algunos ejemplosque nos pueden servir como oráculo son: oráculo heurístico con los resultados aproximadoso exactos de los resultados para un conjunto de entradas de prueba, un juicio humano (¿haceel programa lo que parece correcto para el usuario?), comparar los resultados de las pruebascon las mismas pruebas realizadas con versiones anteriores del aplicativo, o incluso compararlos resultados con una tabla, fórmula u otros elementos definidos como salidas válidas.
Solución�de�la�actividad�6
La inyección SQL es el proceso de insertar código SQL dentro de otro código SQL con elobjetivo de cambiar el funcionamiento normal de la sentencia SQL original. Supongamosque en nuestro sistema de reserva de vuelos del sistema VCV existe una opción llamada "Verreservas realizadas". Como resultado de apretar el enlace se realiza una petición al servidoren la que se incorpora como parámetro nuestro identificador de usuario.
http://viajar.uoc.edu/verReservas.do?idUsuario=12939
Esta petición llega al servidor que procesa la petición y lanza la siguiente sentencia SQL enla base de datos:
SELECT * FROM reservas WHERE id_usuario=12939
Como resultado el servidor genera una página de salida HTML al usuario en la que se muestrala información de las reservas realizadas.
Supongamos ahora, en cambio, un ataque malicioso no controlado por el sistema, en el quese nos envía la siguiente petición:
http://viajar.uoc.edu/verReservas.do?idUsuario=%20OR%20%22=
Esta petición llegaría a ser ejecutada con la siguiente sentencia SQL:
SELECT * FROM reservas WHERE id_usuario=" OR =";
¡Eso provocaría que se pudieran ver todas las reservas de todos los usuarios del sistema!
La solución para evitar este ataque es aplicar una validación a los datos, por ejemplo, limi-tando el tamaño del valor y prohibiendo el uso de caracteres como comillas simples ('), puntoy coma (;), etc.
Solución�de�la�actividad�7
Supongamos que se da una excepción en el código llamado entre la sentencia conn.open yconn.close(). Automáticamente el código continúa en el bloque catch, y nunca se reali-zará la sentencia conn.close(), con lo que la conexión se quedará abierta e inutilizada. Sipensamos que este código es ejecutado por cada petición que se haga en el sistema, el sistemase quedará rápidamente sin conexiones y la única solución será reiniciar el sistema cuandoya sea demasiado tarde y muchos usuarios hayan estado sin poder trabajar un buen rato.
La solución correcta sería:
![Page 91: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/91.jpg)
© FUOC • PID_00178932 91 Calidad del software: técnicas de prevención, detección y corrección...
SqlConnection conn = null;try { conn = new SqlConnection(...); conn.open(); // código de ejecución de inserciones, consultas, etc. // otro código conn.close()} catch (SQLException sqlExc) { // tratamiento de la excepción} finally { if(conn != null) { conn.close(); conn = null; }}
Solución�de�la�actividad�8
Respuesta libre
Ejercicios de autoevaluación
1. Una solución es desarrollar un stub que simule el componente externo, devolviendo siem-pre un resultado positivo. En el momento en que esté disponible el componente externopodremos volver a reactivar el código "real".
2.a) Pruebas beta
b) Pruebas de compatibilidad
c) Técnica de tablas de decisión
d) Técnica dinámica de caja blanca basada en condiciones
e) Pruebas de estrés
f) Pruebas de compatibilidad
g) Pruebas de regresión
h) Pruebas exploratorias
3.a) Análisis estático
b) Revisión de gestión
c) Auditoría
d) Inspección
e) Revisión técnica
4.a) Bitácora. Podríamos registrar desde el código cada acceso a una base de datos o un fi-chero.
b) Refactoring. Convendría establecer una función que incluyera el fragmento correcto y fuerallamado desde los puntos en los que previamente se duplicaba el código.
c) Gestión de excepciones.
d) Depuración (herramienta). Mediante la depuración con una herramienta podríamos irpaso a paso en la ejecución y analizar el valor de la variable en cada momento, hasta detectaren qué punto se cambia el valor recibido.
e) Análisis de causa raíz. Se tendría que analizar cuál es la causa real del fallo y estableceracciones correctivas específicas que eviten soluciones "temporales" (como el script) que nomitigan el problema real.
f) Validación de datos. Se tendría que validar que el documento adjunto no supere los 10 Mby mostrar un mensaje al usuario indicando esta restricción.
![Page 92: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/92.jpg)
© FUOC • PID_00178932 92 Calidad del software: técnicas de prevención, detección y corrección...
Glosario
alpha testing (pruebas alpha) f pl Tipo de pruebas para paquetes destinados al público,realizadas en la ubicación del equipo de desarrollo.
aserción f Predicado ubicado por un desarrollador en un punto del código donde consideraque se satisface el predicado.
beta testing (pruebas beta) f pl Tipo de pruebas para paquetes destinados al público,realizadas en instalaciones del usuario final.
big-bang m Estrategia de pruebas de integración no incremental.
bitácora f Registro de acontecimientos cronológicos de lo que hace un sistema o aplicativodurante su ejecución.
caso de prueba m Elemento de prueba con las condiciones de ejecución y el conjuntode datos de entrada de prueba.
código muerto m Fragmento o región de un código que no será nunca ejecutado porqueno se da ninguna condición para que se pueda llegar a él.
condición de prueba f Aspecto o característica de un componente o sistema que podráser verificado mediante una prueba.
depuración f Proceso de búsqueda, análisis y eliminación de las causas de un fallo. Otraacepción incluye la utilidad dada por las herramientas de desarrollo para analizar en tiempode ejecución el estado de las variables y trazar el camino seguido por el programa.
depreciar v tr Acción que deja un elemento en estado transitorio, pendiente de elimina-ción, pero que se mantiene durante un tiempo para evitar el impacto que provoca el cambioa los elementos que lo utilizan.
driver m Pieza de software que simula un módulo o componente todavía no finalizado quetiene que interactuar con un componente ya existente a probar.
extreme programming f Metodología de desarrollo ágil, basada en el uso de programaciónpor pares, revisiones de código continuas y pruebas unitarias en todo el código.
file transfer protocol m Protocolo de red para la transferencia de ficheros entre sistemasque estén conectados con TCP. sigla FTP
FTP m Ver file transfer protocol.
invariante f Condición que se cumple durante toda la ejecución de un fragmento o fun-ción de un código.
logging m Ver bitácora.
poscondición f Condición que se ha satisfacer después de un fragmento de código o fun-ción.
precondición f Condición que se ha satisfacer antes de que empiece un fragmento de uncódigo o función.
procedimiento de prueba m Documento descriptivo de los pasos a ejecutar por un con-junto de casos de prueba.
refactoring f Proceso realizado sobre el software a fin de que sea más fácil de entender ymodificar sin cambiar su comportamiento externo u observable.
simple network management protocol m Protocolo para facilitar la transferencia deinformación de administración sobre el funcionamiento de la red, de un servidor, etc. siglaSNMP
smoke test (prueba de humo) m Subconjunto de los casos de prueba totales que permitevalidar que el sistema cumple los mínimos requeridos para poder ser probado.
SNMP m Ver simple network management protocol.
![Page 93: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/93.jpg)
© FUOC • PID_00178932 93 Calidad del software: técnicas de prevención, detección y corrección...
stub m Pieza de software que permite simular un módulo o componente inferior que noexiste o todavía no está finalizado.
taxonomía f Clasificación de una especie, concepto o elemento.
TCP m Ver transmission control protocol.
transmission control protocol m Protocolo básico de Internet que garantiza la entregaentre dos sistemas porla red. Sigla TCP
![Page 94: software: técnicas Calidad del de prevención, detección y …uoc.gitlab.io/2015/desarrollo proyecto/4.pdf · 2. Entender el objetivo de las revisiones, cuál es el proceso formal](https://reader035.vdocumento.com/reader035/viewer/2022071607/61446123aa0cd638b460d1ca/html5/thumbnails/94.jpg)
© FUOC • PID_00178932 94 Calidad del software: técnicas de prevención, detección y corrección...
Bibliografía
Black, R. (2008). Advanced Software Testing (vol. 1). Rocky Nook.
Burnstein, I. (2003). Practical Software Testing. Spring.
Butcher, P. (2009). Debug It!. The Pragmatic Programmers.
Copeland, L. (2004). A Practitioner's Guide to Software Test Design. Artech House
Fewster, M.; Graham, D. (2009). Software Testing Automation - Effective use of test executiontools. Addison Wesley.
Graham, D.; Van Veenendaal, E.; Evans, I.; Black, R. (2008). Foundations of SofwareTesting. Course Technology Cengage Learning.
Koomen, T.; Van der Aalst, L., y otros (2006). TMap Next for result-driven testing. UTNPublishers.
McConell, S. (2004). Code complete. Microsoft Press.
Myers, G. J. (2004). The Art of Sofware Testing. John Wiley and Sons.
Wiegers, K. E. (2003). Software requirements. Microsoft Press.