trabajo práctico ingeniería de sw sistema de defensa antiaérea agüero, mariano - aguilera,...
TRANSCRIPT
Trabajo PrácticoIngeniería De SW
Sistema de Defensa antiaérea
Agüero, Mariano - Aguilera, German - Bustos, Maximiliano - Sureda, José
UNC - Facultad de Ciencias Exactas, Físicas y Naturales. Julio 2012 - v 1.0.0
PLAN DE MANEJO DE LAS CONFIGURACIONES
Control de Versiones: Subversion
CI – Items bajo configuración:
Directorios
Archivos
Clientes gráficos utilizados:
RabbitVCS SVN
Tortoise SVN
Repositorio:
Google Project Hosting
Esquema de directorios
Directorio Propósito del Directorio
trunk Rama principal del programa.
tags Etiquetas para ciertas versiones del proyecto. Ej Releases
branches Ramas derivadas de la principal para los desarrolladores.
documentos Alojamiento para los documentos del proyecto: CMP, SRS, informeFinal, etc
wiki Subiremos recursos e información que nos ayude a desarrollar el proyecto.
ESQUEMAS DE RAMAS UTILIZADOS
UCM Lean and Lazy
Para los Documentos Para el Código
REQUERIMIENTOS
Diagramas de Casos de Usos
Radar
Determina posicion de J et
J et
Bateria lanzamisil
Informa disponibilidad
Unidad de control
Dispara Misil
Misil
Suministra Trayectoria
Diagramas de Casos de Usos
Unidad de Control
Calcula Trayectoria del J et
Determina que bateria dispara
Solicita posicion de jet
Proporciona Infomarcion a la bateria
Brinda Informacion al Display
Bateria
Radar
Display
Señal de Disparo
Bateria Misil
Crea misil
Misil
Enemigo
Genera jet
jet
Misil
Define su trayectoria
Diagramas de Secuencia
Unidad de Control Radar
1 : Pedir Informacion()
2 : Devuelve informacion()
: Unidad de Control : Radar
Socket Servidor Socket Cliente SE1.2.1
1 : Solicita Scan()2 : Scan()
3 : Scan()
4 : Lista Objetos detectados()5 : Lista Objetos detectados()
6 : Lista Objetos detectados()
7 : solicita posicion de 1 jet()8 : solicita posicion de 1 jet()
9 : getjetposicion()
10 : jetposicion()11 : entrega posicion()
12 : entrga posicion()
13 : solicita posicion del mismo jet()14 : solicita posicion del mismo jet()
15 : getjetposicion()
16 : jetposicion()17 : entrega posicion()18 : entrega posicion()
19 : Calcula trayectoria()
Altsd
: Unidad de Control
Bateria de Misil Misil
1 : Calcula distancias a la baterias()
2 : Pide disponibilidad mas cercana()
3 : Disponibilidad()
4 : Pide disponibilidad siguente()
5 : Disponibilidad()
SE1.2.2
6 : Trayectoria de Misil()7 : Crea y Brinda puntos trayctorial()
8 : Señal de Disparo()
9 : Dispara Misi()
10 : Misil Disparado()
: Radar
socketservidor socketcliente
: J et
1 : miposicion()2 : miposicion()3 : miposicion()
4 : getposicion()5 : getposicion()
6 : getposicion()
7 : posicion()8 : posicion()
9 : posicion()
SE2.1
Revisar y hacer con metodo observer
: Radar
Socket Servidor Socket Cliente
: Misil
1 : cambiaPosicion()
2 : update()3 : update()
4 : update()
5 : getPosicion()6 : getPosicion()
7 : getPosicion()
Diagrama de Actividades
Detectar J etDetecto
No
Calcula Trayectoria de J et
Si
ingresa a zona protegia
Dispara Misil
Informa posicion
Deribo
NO
Señal de disparo
Cambia trayectoria
Si
No
GeneraJet
<<Sistema>>Deteccion
AsignaBateria por Cercania
si
disponibilidad
SiNo
Destruye Misil y J et
<<Sistema>>Derribo
<<Sistema>>Enemigo
<<Sistema>>Administrador
Matriz de TrazabilidadRequerimiento Diagramas RequerimientoUsuario Casos de Uso Secuencia SistemaUR1.1 CU1.1 SE1.1 SR1.1UR1.2 CU1.2 SE1.2.1 SR1.2 SR1.3UR1.3 CU1.2 SE1.2.2 SR1.4 SR1.5UR1.4 SR1.15UR1.5 CU1.2 SE1.2.3 SR1.6 SR1.16 SR1.17UR1.6 SR1.7 SR1.8UR1.7 SR1.9UR1.8 SR1.10UR1.9 SR1.11UR1.10 CU1.2 SE1.2.2 SR1.12UR1.11 CU1.2 SE1.2.2 SR1.13UR1.12 SR1.14UR2.1 CU2.1 SE2.1 revisar UR2.2 SR2.2UR2.3 SR2.3UR2.4 SR2.4UR2.5 CU4.3 SR2.5UR2.6 SE1.2.1 SR2.6UR2.7 SR2.7UR2.8 CU1.2 SE1.2.1 SR2.6UR2.9 SR2.1UR3.1 CU3.2 SE1.2.2 SR3.1UR3.2 CU3.2 SE1.2.2 SR3.2UR3.3 SR3.3UR3.4 SR3.5UR3.5 CU3.2 SE1.2.2 SR3.6UR3.6 SR3.4UR4.1 CU3.2 SE1.2.2 SR4.1 - SR4.2UR4.2 UR4.3 UR4.4 CU4.4 SR4.3 - SR4.4 - SR4.5UR4.5 SR4.6UR4.6 SR4.7UR4.7 SR4.8UR4.8 SR4.9UR4.9 SR4.10UR5.1 CU5.1 SE5.1 SR5.1 - SR5.2UR5.2 SR5.3UR5.3 SR5.4UR5.4 SR5.4UR5.5 SR5.5UR5.6 SR5.2UR5.7 SR5.6UR5.8 SR5.7UR5.9 SR5.2UR6.1 SR6.1 … SR6.6UR7.1 SR7.1UR7.2 SR7.5UR7.3 SR7.2 - SR7.3 - SR7.4UR7.4 SR7.1UR8.1 SR5.6
ARQUITECTURA
El patrón de arquitectura a utilizar es el de control - centralizado - Modelo del Administrador, para la simulación. También se implementó una arquitectura cliente/servidor ya que tenemos varios componentes como ser: el radar, la unidad de control y los objetos voladores que utilizan un protocolo de comunicación entre ellos.
Diagrama de Despliegue
Radar
Unidad de Control
Bateria de Misil
Misil
Router
TCP
TCP
Display
TCP
Diagrama de Componentes
Sistema de Disparo
Sistema de Detección
Sistema Enemigo
Radar
Unidad de Control
MisilBateria de Misiles
Enemigo Jet
Unidad Administracion
Socket
Display
Diagrama de Contexto
Sistema de Aerodefensa
Jet Enemigo
Misil
Avión Civil
J et Amigo
Detecta Posición y Destruye
Detecta Posición
Detecta Posición
Detecta Posición
DISEÑO E IMPLEMENTACIÓN
Patrones de Diseño Utilizados
Singleton: Es un patrón simple, cuyo objetivo es garantizar que determi-nadas clases solo puedan ser instanciadas una sola vez. Observer: Su objetivo es definir una dependencia uno-a-muchos entre objetos, de tal forma que cuando el objeto cambie de estado, todos sus objetos dependientes sean notificados automáticamente. Se trata de desacoplar la clase de los objetos clientes del objeto, aumentando la modu-laridad del lenguaje, creando las mínimas dependencias y evitando bucles de actualización.
Diagrama de Clases
Radar
+tiemporetardo+posicion+reloj+ip
+scan()+getJ etPosicion()+getPosicion()+currentTime()+moveMissile()
UnidadDeControl
+ip+listabateria+tamañozonarestringida+reloj
+Instance(): UnidadDeControl+calcularTrayectoriaJ et()+listaPrioridadBaterias()+seleccionBateria()+identificaAmenaza()+shot()
Misil
+colatrayectoria+colavelocidad
+misil()+setTrayectoria()
Bateria
+posicion+identificacion+ip+reloj+tiemporetardo
+disponibilidad(): boolean+shotMisil()+bateria()+crearMisil()
Enemigo
+Instance(): Enemigo+random()+crearJ et()+velAleatoria()+posicionAleatoria()
jet
+jet()
SujetoVolador
+identificacion+ip+velocidad+posicion+reloj
+descomponeVelocidad()+destruir()+calcularTrayectoria()
Subject
+Attach(o: Observer)+Detach(o: Observer)+Notify()
Observer
+Update()
+subject
Display
+mostrarJ et()+mostrarAmenaza()+mostrarDespedidaJ et()+mostrarDisparo()+mostrarDerribo()+mostrarDestrccion()
-instance
ServerSocket
+ServerSocket()+accept()+bind()+getLocalPort()+close()
Socket
+soket()+connect()+getInetAddress()+getInputStream()+getOutputStream()+setKeepAlive()+steSoLinger()+setTcpNoDelay()+setTrafficClass()
-instance
UnidaddeAdministracion
+Instance(): UnidaddeAdministracion+detectarColision()+detectasalidadejet()+creacionEntorno()
-instance
Diagrama de Paquetes
Sistema de Deteccion
Sistema de Derribo
Sistema Enemigo
Radar
+tiemporetardo+posicion+reloj+ip
+scan()+getJ etPosicion()+getPosicion()+currentTime()+moveMissile()
UnidadDeControl
+ip+listabateria+tamañozonarestringida+reloj
+Instance(): UnidadDeControl+calcularTrayectoriaJ et()+listaPrioridadBaterias()+seleccionBateria()+identificaAmenaza()+shot()
Misil
+colatrayectoria+colavelocidad
+misil()+setTrayectoria()
Bateria
+posicion+identificacion+ip+reloj+tiemporetardo
+disponibilidad(): boolean+shotMisil()+bateria()+crearMisil()
Enemigo
+Instance(): Enemigo+random()+crearJ et()+velAleatoria()+posicionAleatoria()
jet
+jet()
SujetoVolador
+identificacion+ip+velocidad+posicion+reloj
+descomponeVelocidad()+destruir()+calcularTrayectoria()
Subject
+Attach(o: Observer)+Detach(o: Observer)+Notify()
Observer
+Update()
+subject
Display
+mostrarJ et()+mostrarAmenaza()+mostrarDespedidaJ et()+mostrarDisparo()+mostrarDerribo()+mostrarDestrccion()
-instance
ServerSocket
+ServerSocket()+accept()+bind()+getLocalPort()+close()
Socket
+soket()+connect()+getInetAddress()+getInputStream()+getOutputStream()+setKeepAlive()+steSoLinger()+setTcpNoDelay()+setTrafficClass()
-instance
UnidaddeAdministracion
+Instance(): UnidaddeAdministracion+detectarColision()+detectasalidadejet()+creacionEntorno()
-instance
Entorno
SubjectObserverDisplaySujetoVoladorUnidadDeAdministracion
SocketServerSocket
PRUEBAS DE SW
JUnit en Eclipse
TDD – Desarrollo guiado por pruebas
Selecciono un requerimiento: Se elige de una lista el requerimiento que se cree que nos dará mayor conocimiento del problema y que a la vez sea fácilmente implementable.
Escribir una prueba: Se comienza escribiendo una prueba para el requisito.
Verificar que la prueba falla: Si la prueba no falla es porque el requerimiento ya estaba implementado o porque la prueba es errónea.
Escribir la implementación: Escribir el código más sencillo que haga que la prueba funcione.
Ejecutar las pruebas automatizadas: Verificar si todo el conjunto de pruebas funciona correctamente.
Actualización de Requerimientos: Modificamos, agregamos o quitamos requerimientos basado en el análisis de la implementación y el resultado de las pruebas.
Matriz de TrazabilidadRequerimiento Diagramas Requerimiento PruebaUsuario Casos de Uso Secuencia Sistema Unitaria SistemaUNFR1 TS3UNFR2 TS1UR1.1 CU1.1 SE1.1 SR1.1 UR1.2 CU1.2 SE1.2.1 SR1.2 - SR1.3 TU1.1 UR1.3 CU1.2 SE1.2.2 SR1.4 - SR1.5 TU1.3 - TU1.4 UR1.4 SR1.15 UR1.5 CU1.2 SE1.2.3 SR1.6 - SR16 - SR17 UR1.6 SR1.7 - SR1.8 TU1.1 - TU1.4 UR1.7 SR1.9 UR1.8 SR1.10 UR1.9 SR1.11 UR1.10 CU1.2 SE1.2.2 SR1.12 UR1.11 CU1.2 SE1.2.2 SR1.13 TU1.3 - TU1.5 UR1.12 SR1.14 UR2.1 CU2.1 SE2.1 revisar TU2.1 - TU2.2 UR2.2 SR2.2 UR2.3 SR2.3 UR2.4 SR2.4 UR2.5 CU4.3 SR2.5 TU2.3 UR2.6 SE1.2.1 SR2.6 UR2.7 SR2.7 UR2.8 CU1.2 SE1.2.1 SR2.6 UR2.9 SR2.1 UR3.1 CU3.2 SE1.2.2 SR3.1 TU3.2 - TU3.3 UR3.2 CU3.2 SE1.2.2 SR3.2 TU3.1 UR3.3 SR3.3 UR3.4 SR3.5 UR3.5 CU3.2 SE1.2.2 SR3.6 TU3.2 - TU3.3 UR3.6 SR3.4
UR4.1 CU3.2 SE1.2.2 SR4.1 - SR4.2TU4.1 - TU3.2 TU5.3
UR4.2 TU3.2 UR4.3 UR4.4 CU4.4 SR4.3 - SR4.4 - SR4.5 TU4.1 - TU5.1 UR4.5 SR4.6 UR4.6 SR4.7 TU5.2 UR4.7 SR4.8 UR4.8 SR4.9 UR4.9 SR4.10 UR5.1 CU5.1 SE5.1 SR5.1 - SR5.2 UR5.2 SR5.3 TU5.3 UR5.3 SR5.4 UR5.4 SR5.4 UR5.5 SR5.5 TU5.5 UR5.6 SR5.2 UR5.7 SR5.6 UR5.8 SR5.7 UR5.9 SR5.2 UR6.1 SR6.1 hasta SR6.6 UR7.1 SR7.1 TU7.1 UR7.2 SR7.5 TU7.1 UR7.3 SR7.2 - SR7.3 - SR7.4 UR7.4 SR7.1 UR8.1 SR5.6 TU8.1 - TU8.2
ESTIMACIONES
PROMEDIO DE TAMAÑO (T2) = 1859 líneas de código
PERT (En cantidad líneas de código)Optimista Más Probable Pesimista
1000 2000 3000
INTERMEDIARIOS (En cantidad líneas de código)Componentes
Nombre Cantidad Prom. LOCs/Comp. LOCs Clases Simples 5 50 250Clases Promedio 1 100 100Clases Complejas 2 300 600Interfaces 3 200 600
PERT:
PERT = (OPT+4*MPROB+PES)/6TOTAL PERT = 2167 líneas de código
INTERMEDIARIOS:
TOTAL INTERMEDIARIOS = 1550 líneas de código
Tamaño LOCs
Esfuerzo Personas Mes
Datos Históricos Tamaño (T1) Esfuerzo (E1) Duración (D1)Simulación del Tráfico de Internet (AED) 1400 3 3
LOCs PMs Meses
ANALOGÍA SIMPLE:
E2 = (T2*E1)/T1 TOTAL ANALOGÍA SIMPLE (E2) = 4 Personas Mes
ECUACIONES SIMPLES:Watson Felix: Esfuerzo [PMs] = 5.2 * Tamaño [KLOC] ^ 0.91TOTAL ECUACIONES SIMPLES = 9 Personas Mes
PROMEDIO DE ESFUERZO (E2) = 7 Personas Mes
Duración Meses
ANALOGÍA SIMPLE:D2 = D1 (E2/E1) ^ (1/3) TOTAL ANALOGÍA SIMPLE (D2) = 4 Meses
ECUACIONES SIMPLES:Regla de McConnell: Duración [M] = 3 * E2 ^ (1/3)TOTAL ECUACIONES SIMPLES = 6 Meses
PROMEDIO DE DURACIÓN (D2) = 5 Meses
Datos Históricos
Tarea Duración Personas Esfuerzo (Phs) ParticipantesManejo de las Configuraciones 5 hs 4 20 Agüero - Aguilera - Bustos - Sureda
Requerimientos 28 hs 4 112 Agüero - Aguilera - Bustos - SuredaArquitectura 14 hs 2 28 Aguilera - Sureda
Diseño e Implementación 14 hs 2 28 Agüero - BustosPruebas Unitarias y de Sistema 5hs 2 10 Agüero - BustosEstimaciones y Datos Históricos 3hs 2 6 Aguilera - Sureda
TOTAL ESFUERZO = 204 Personas Horas