Examen del primer parcial Las soluciones propuestas son esquemáticas. Por supuesto al puntuar se han valorado conocimentos adicionales y soluciones alternativas. 1. Defina qué se entiende por requisito. Tipos de requisitos. Defina brevemente qué es una especificación y enumere cualidades que debe tener una buena especificación. Requisito Es una capacidad que el sistema debe tener porque el cliente lo ha pedido explícita o implícitamente. Tipos de requisitos Funcionales: Dicen qué debe hacer el sistema en el sentido de servicios proporcionados al usuario. No funcionales: Dicen las características del sistema. Especificación : Es un documento que contiene todos los requisitos. Tiene un tipo de formato estándar. Cualidades de una buena especificación : Completitud, Concisión, Legibilidad, Consistencia, Factibilidad y Facilidades de prueba, cambio y seguimiento. 2. Enumere y describa las formas de identificar actores en los diagramas de casos de uso del lenguaje UML. Se trata de encontrar esta información: Identificar usuarios del sistema: Hay que tener en cuenta para quién se está diseñando o con qué personas va a interactuar de un modo directo (actores principales) y quién va a tener un papel de supervisión o mantenimiento del sistema (actores secundarios). Identificar los roles que juegan esos usuarios desde el punto de vista del sistema. Hay varios tipos, gestores de alto nivel, gente que introduce datos, etc. Identificar otros sistemas con los cuales exista comunicación. Estos sistemas también se consideran como actores dado que son algo externo a nuestro sistema. 1 3. En un conocido juego de estrategia hay tres tipos de razas: Terrans, Zergs y Protos. Cada tipo de raza define a su vez dos tipos de personajes: Trabajadores (consiguen recursos y construyen edificios) y Soldados (pegan a personajes de otro bando). Un personaje tiene como características: Si es aéreo o terrestre, salud (número entero), velocidad, escudo, etc. Un soldado además define si puede pegar a personajes aéreos o terrestres, daño que hace, etc. Un trabajador recoge recursos y los lleva a un edificio de recogida. Los recursos son de dos tipos: Gemas y Gas y se van agotando a medida que son explotados. Hay diferentes tipos de edificios propios de cada raza y cada uno proporciona capacidades diferentes a los miembros de su bando, por ejemplo, el máximo número de personajes de un bando está determinado por el número de edificios granja multiplicado por 8; el edificio armería mejora en +1 el daño de los soldados. Un bando está definido por un conjunto de personajes y edificios de una o más razas. El juego tiene lugar sobre un tablero definido en una retícula romboidal. En cada punto de la retícula se define el tipo de terreno y se pueden posicionar personajes, edificios y recursos. Un bando puede ser dirigido por un jugador o por la inteligencia artificial del programa. Es posible que varias personas jueguen en red, con lo que habrá una copia de todo el sistema en cada ordenador y un sistema de paso de mensajes entre los diferentes ordenadores para actualizar el tablero. Se pide: Diagrama de clases que represente el problema. Discuta brevemente las ventajas e inconvenientes de estas dos opciones de diseño para el caso de partidas multijugador: • Cada ordenador tiene una copia de toda la información. Cuando un jugador da una orden a un personaje se modifica el tablero. La orden es transmitida a todos los demás ordenadores que actualizan su copia del tablero. • Existe un servidor que contiene la información del tablero, los ordenadores con los que juegan las personas también pero cuando un jugador da una orden esta se transmite primero al servidor y luego a los demás ordenadores. Teniendo en cuenta que nos interesa representar las comunicaciones entre diferentes ordenadores, ¿ Qué tipo de diagrama de UML utilizaría para representar las dos arquitecturas anteriores ? Represente ambas opciones de diseño en el tipo de diagrama que haya propuesto. 2 Figura 1: Diagrama de clases En el diagrama de clases los edificios pueden tener una jerarquía mucho mayor si se añaden los tipos de edificios en función de la raza. Existen varias restricciones indicadas en lenguaje natural en el diagrama. El tipo void indica que no ha sido definido en la especificación dada en el examen. El problema real es más complejo; se ha dado una solución simplificada. Opciones de diseño. Hay varios aspectos a tener en cuenta1 : Tiempo de respuesta, Robustez, Coherencia de la información, Eficiencia, Mecanismo para incorporarse y retirarse del juego. Primera opción: 1. Tiempo de respuesta: Menor porque el mensaje va directamente de un ordenador a los demás. 2. Robustez: Es un sistema más robusto, todos los ordenadores son iguales y si uno se cae el juego puede continuar sin problemas. 3. Coherencia de la información: Es más difícil porque cada ordenador tiene que actualizar el estado de n-1 ordenadores cada vez que su usuario haga algo. Si hay un conflicto (por ejemplo: el personaje a del 1 Esta respuesta no tiene en cuenta todos los condicionantes posibles, sólo los importantes 3 usuario A mata al personaje b del usuario B y antes de que le llegue ese mensaje el personaje b mata al personaje a) hay que diseñar un protocolo de arbitraje que resuelva la situación. 4. Eficiencia: Cuantos más ordenadores hay en la misma red más se exige de cada ordenador (tiene que enviar el mismo mensaje a más destinatarios, a menos que sea posible mandar mensajes de tipo broadcast). 5. Mecanismo para incorporarse al juego: Es complicado porque al no haber un servidor al cual dirigirse. Tiene que existir un medio de que un ordenador que quiera incorporarse puede averiguar las direcciones del resto de los ordenadores que están conectados al juego. Segunda opción: 1. Tiempo de respuesta: Mayor porque el mensaje va primero al servidor y luego se retransmite a los demás. 2. Robustez: Tiene el problema de que si el servidor se cae, se cae con él todo el sistema. 3. Coherencia de la información: Es más sencillo porque el servidor es quien actualiza su estado cuando le llega un mensaje y se lo comunica a los demás para que actualizen el suyo. Si hay conflictos el servidor los resuelve y comunica la resolución a los otros ordenadores. 4. Eficiencia: La red en la que esté instalado el servidor podría ser un cuello de botella, de todas formas, esta solución admite más usuarios que la otra. 5. Mecanismo para incorporarse al juego: Es fácil, sólo hay que mandar un mensaje al servidor. La configuración podría ser tan sencilla como escribir una dirección IP en algún sitio. 4 Representación de las dos alternativas. El tipo de diagrama más adecuado sería el de distribución por la definición del mismo: Sirve para expresar las comunicaciones entre nodos. Figura 2: Opción 1 Figura 3: Opción 2 5 Examen del segundo parcial Las soluciones propuestas son esquemáticas. Por supuesto al puntuar se han valorado conocimentos adicionales y soluciones alternativas. 1. Defina los conceptos de validación y verificación. Defina las pruebas que se realizan al resultado de cada fase del ciclo de vida de un producto software. (2 puntos) Verificación Conjunto de actividades que aseguran que el software implementa correctamente una función específica. Responde a la pregunta: ¿ Estamos construyendo el producto correctamente ? Validación Conjunto de actividades que asegura que el sofware construido se ajusta a los requisitos del cliente. Responde a la pregunta: ¿ Estamos construyendo el producto correcto ?. Pruebas aplicadas a los resultados obtenidos de las distintas fases: Codificación: Pruebas de unidad. Diseño: Pruebas de integración. Requisitos o Análisis o Especificación2 : Pruebas de validación. Ingeniería de sistema3 : Prueba del sistema. 2. Razone brevemente la respuesta a la siguiente pregunta: ¿Es suficiente para asegurar la calidad de una aplicación software verificar y validar las distintas versiones del producto terminado ? ( 2 puntos) No. La calidad se incorpora al software durante el proceso de ingeniería del software usando los métodos y herramientas adecuadas, revisiones técnicas formales y una gestión y medición correctas. Las pruebas pueden confirmar la calidad. 3. Objetivos de las pruebas de integración. Enumera y define brevemente las aproximaciones mas frecuentes para realizar las pruebas de integración. Objetivo Partiendo de módulos ya probados en las pruebas de unidad, construir una estructura de programa que esté de acuerdo con el diseño. 2 Se admite cualquiera de estas tres palabras no se ha estudiado como una fase del ciclo de vida, se supone que es anterior 3 Esto 6 Aproximaciones Descendente: Integración incremental que parte de los módulos superiores y va integrando siguiendo la estructura de control moviéndose hacia abajo. Hay dos formas: primero en profundidad y primero en anchura. Ascendente: Es otro tipo de integración incremental que parte de los módulos inferiores (atómicos) siguiendo la estructura de control moviéndose hacia arriba. Sandwich: Combinación de la descendente y la ascendente. Big bang: Integración de todos los módulos al tiempo. Es la peor de todas. Regresión: Volver a probar un subconjunto de las pruebas cuando se han hecho cambios para asegurar que no se han introducido nuevos errores con los cambios. Humo: Divide el software en “construcciones” que son todos los recursos necesarios para implementar un conjunto de funciones. Busca errores “bloqueantes”, que son los que impiden cumplir la planificación. 4. Suponga un triángulo cuyos lados tienen por longitudes l1, l2 y l3. Un triángulo es equilatero si todos sus lados son iguales, isósceles si tiene dos lados iguales y escaleno si son todos distintos. Dadas tres longitudes: l1, l2, l3 correspondientes a las longitudes de los lados de un triángulo: 1) Escribir un programa en pseudocódigo que compruebe en cual de los tres casos nos encontramos. 2) Dibujar el grafo de flujo. 3) ¿ Son aplicables las pruebas basadas en particiones equivalentes ? Razone la respuesta. Si son aplicables hágalo. 4) Lo mismo para las pruebas basadas en el análsis de valores límite. 7 Pseudocódigo: Es un programa muy sencillo. Los lados son l1, l2 y l3. Se supone que el problema de conseguir los lados ya está resuelto. El problema de que l1, l2 y l3 sean números positivos y que la suma de dos cualesquiera de los lados sea mayor que el otro no se menciona en el enunciado y por lo tanto no se tiene en cuenta en el algoritmo. 1 2 3 4 5 6 7 8 9 10 11 12 13 si (l1 == l2) entonces si (l2 == l3) entonces Escribir Equilatero sino Escribir Isosceles fin si sino si (l2 == l3) entonces Escribir Isosceles sino si (l1 == l3) entonces Escribir Isosceles sino Escribir Escaleno fin si fin si fin si 8 El grafo de flujo que corresponde al algoritmo sería este: 1 l1 == l2 No Si 2 Si No Si 3 Isosceles No 7 4 Equilatero l2 == l3 6 l2 == l3 8 Isosceles No Si 5 l1 == l3 Fin Si 10 9 Isosceles Escaleno 11 12 13 Fin Si Figura 4: Grafo de flujo 9 Fin Si Fin Si Pruebas basadas en particiones equivalentes: Es un tipo de prueba de caja negra que divide las posibles combinaciones de entradas en clases de datos. Se hace un caso de prueba por cada clase de equivalencia. En este caso las variables de entrada son tres condiciones booleanas: C1: l1 == l2, C2: l2 == l3 y C3: l1 == l3. Hay 8 posibles combinaciones de entrada, de las cuales por la lógica del dominio sólo son posibles 5 como se ve en la tabla. Clase de equivalencia C1 C2 C3 C1 C2 ¬ C3 C1 ¬ C2 C3 C1 ¬ C2 ¬ C3 ¬ C1 C2 C3 ¬C1 C2 ¬ C3 ¬C1 ¬ C2 C3 ¬C1 ¬ C2 ¬ C3 Caso de prueba l1 = 5, l2 = 5, l3 = 5 No aplicable No aplicable l1 = 5, l2 = 5, l3 = 6 No aplicable l1 = 5, l2 = 6, l3 = 6 l1 = 5, l2 = 6, l3 = 5 l1 = 5, l2 = 6, l3 = 7 Salida Equilátero Isósceles Isósceles Isósceles Escaleno Pruebas basadas en el análisis de valores límite: Es un tipo de prueba de caja negra que complementa la anterior y se basa en el hecho comprobado empíricamente de que los errores se suelen encontrar en los extremos de los intervalos. No son aplicables porque en este caso no hay intervalos al ser las variables booleanas. Además, al tomar un caso de prueba por cada clase de equivalencia ya se han considerado en las pruebas anteriores todos los posibles lugares donde encontrar errores. 10