Extracción de Requisitos

Extracción de Requisitos:
Se va a proceder a hacer un resumen de todos los requisitos que deberán de cumplir las distintas capas del proyecto OVC así como delimitar el proyecto en sí.

Punto de vista del software:
Vamos a extraer cuales serian los distintos requisitos que debe de cumplir nuestro proyecto de manera que sirva como lista de elementos a cumplir.

-Reusable: Debe ser capaz de ser usado por muchas aplicaciones.
-Fácil: Debe de definir una interfaz suficientemente amplia para simplificar el uso de esta librería
-Extensible: Debe de ser muy extensible, a ser posible con distintos módulos para que un programador,(en adelante usuario) pueda ampliarlo ganando riqueza sin perder estandaribilidad.
-Usar software libre: Debe utilizar sólo librerías libres.
-Multiplataforma: Debe permitir que sea fácilmente adaptable a cualquier plataforma. O independiente de ésta.
-Completitud: Debe ser capaz de leer y escribir objetos OVC.
-Documentación: Debe tener una documentación suficiente para poder permitir que cualquier usuario se una al proyecto.

Por otro lado el proyecto debe de cumplir otros requisitos menos generales.
-Ser recursivo: Un OVC debe poder contener y manejar otros OVC
-No especifico de un motor determinado: Debe de poderse implementar distintos módulos que adapten un OVC a cualquier motor elegido.
-Compatible ODE e Irrlich: Debe de tener como base una compatibilidad con ODE como motor físico e Irrlich como motor gráfico.
--La representación interna debe intentar ser lo más próxima a estos motores.
-Se utilizará C++: Para poder realizar librerías y tener muchas librerías multiplataforma y libres.
-Muy modular: Debe permitir tanto módulos de parseo de un ovc para poder extender la definición de este como módulos de motores de alto nivel para poder adaptar un ovc a un motor determinado.

Punto de Vista de los usuarios:
Vamos a explicar que es lo que un usuario puede requerir. Vamos a ir por módulos:

Objeto OVC:
-Zip con XML
-Recursivo:Pueden existir varios OVC dentro de otros
-Aceptará transformaciones: Las ruedas de un coche son todos un mismo OVC pero con distintas normales.

Librería Controller IO:
-Comprimir Zip
-Descomprimir Zip
-Leer XML y convertirlo en DOM.
-Escribir XML desde un DOM.
-Cargar Modulos IO.
--Ejecutar métodos de Módulos IO
-Comuniciación horizontal con Módulos IO
-Comunicación vertical con Controller Builder
-Controlar el uso de directorios, lectura de que modulos hay y carga de esos módulos
-Manejo intensivo de Disco

Módulos IO:
-Implementar módulo de physics
--Definir los elementos físicos necesarios para cualquier motor físico
-Implementar módulo de graphics3d
--Definir una especificación gráfica definida como estándar.
-Comunicación horizontal con Controller IO
--Definir Interfaz de comunicación
---Controller IO – Module IO
---Module IO – Controller IO
-Sencillos de implementar.
-Tener suficiente documentación.
-Tener una plantilla para poder hacer un módulo relativamente rápido.

Controller Builder:
-Capaz de comunicarse con IO verticalmente
-Capaz de cargar módulos Builder
-Definir un API con el programador final
-Tener buena documentación
-Comunicación horizontal: Ser capaz de comunicarse con sus módulos Builder
-Será capaz de manejar datos IO y datos de módulos Builder
-Carga selectiva de módulos en instanciación
-Manejo de directorios.

Modulo Builder:
-Será especifico para un motor
-Se podrán crear varios módulos
-Usará los módulos IO como interfaz con un OVC a través de los controladores
-Usará las cabeceras de los módulos IO
-Existirá un modulo ODE
--Será capaz de crear un objeto con física
-Existirá un modulo Irrlich
--Será capaz de crear un objeto gráfico

Extracción de requisitos en el wiki.