Requisitos no funcionales
=========================
**NFR1** Tornado
----------------
- **Versión**: 1
- **Autores**: Diego Martín
- **Fuentes**: Análisis preliminar
- **Descripción**: El *backend* web deberá implementarse sobre el *framework* Tornado con el objetivo de optimizar el rendimiento del sistema. Todas las aplicaciones que gestionen programación de operaciones utilizarán el bucle de eventos de Tornado por razones de sencillez y eficacia.
- **Importancia**: Alta
- **Urgencia**: Alta
- **Estado**: Completo
- **Estabilidad**: Estable
**NFR2** Abstracción de la base de datos
----------------------------------------
- **Versión**: 1
- **Autores**: Diego Martín
- **Fuentes**: Análisis preliminar
- **Objetivos asociados**: OBJ-1
- **Requisitos asociados**: RF-1, OBJ-2
- **Descripción**: Con el objetivo de garantizar la compatibilidad con diferentes modelos de bases de datos se utilizará el *Object-relational Mapping* (ORM) del *framework* `Django `_ para conseguir este nivel de abstracción.
- **Importancia**: Alta
- **Urgencia**: Alta
- **Estado**: Completo
- **Estabilidad**: Estable
**NFR3** HTTPS con doble validación
-----------------------------------
- **Versión**: 1
- **Autores**: Diego Martín
- **Fuentes**: Análisis preliminar
- **Objetivos asociados**: OBJ-1, OBJ-2, OBJ-3
- **Requisitos asociados**: RF-1, RF-2, RF-6, RF-7, RF-8
- **Descripción**: En toda comunicación segura ambos lados validarán la identidad del otro a través de los certificados HTTPS ofrecidos al establecer la conexión. De esta forma es posible recibir órdenes de control de forma segura.
- **Importancia**: Alta
- **Urgencia**: Alta
- **Estado**: Completo
- **Estabilidad**: Estable
**NFR4** Compatibilidad con systemd e initd
-------------------------------------------
- **Versión**: 1
- **Autores**: Diego Martín
- **Fuentes**: Análisis preliminar
- **Descripción**: Los diferentes *daemons* que este producto *software* incluye ofrece deben ser compatibles con los gestores de servicios systemd e init.d
- **Importancia**: Media
- **Urgencia**: Baja
- **Estado**: Por realizar
- **Estabilidad**: Estable
**NFR5** Instalación a través de ``setuptools``
-----------------------------------------------
- **Versión**: 1
- **Autores**: Diego Martín
- **Fuentes**: Análisis preliminar
- **Requisitos asociados**: NFR-4
- **Descripción**: La instalación del *software* estará asistida por el estándar *de facto* para aplicaciones escritas en Python, `setuptools `_.
- **Importancia**: Baja
- **Urgencia**: Baja
- **Estado**: Por realizar
- **Estabilidad**: Estable
**NFR6** Registro
-----------------
- **Versión**: 1
- **Autores**: Diego Martín
- **Fuentes**: Análisis preliminar
- **Objetivos asociados**: OBJ-1, OBJ-2
- **Requisitos asociados**: IRQ-2
- **Descripción**: Se deberá almacenar una serie de registros de las diferentes operaciones realizadas y programadas, así como una serie de ficheros que reflejen el comportamiento del sistema al realizar una operación.
- **Importancia**: Media
- **Urgencia**: Media
- **Estado**: Completo
- **Estabilidad**: Estable
**NRF7** Validación de los datos de usuario
-------------------------------------------
- **Versión**: 1
- **Autores**: Diego Martín
- **Fuentes**: Análisis preliminar
- **Objetivos asociados**: OBJ-1
- **Requisitos asociados**: RF-1, RF-2, RF-3, RF-4
- **Descripción**: Todo dato introducido por el usuario deberá ser sometido a procesos de "desinfección" (*sanitization*) con el objetivo de evitar ataques tales como *Cross-Side Scripting* (**XSS**) o inyección **SQL**.
- **Importancia**: Alta
- **Urgencia**: Media
- **Estado**: Completo
- **Estabilidad**: Estable
- **Comentarios**: Al emplear el ORM de Django la mayoría de este tipo de ataques son filtrados de forma automática.
..
- **Versión**:
- **Autores**:
- **Fuentes**:
- **Objetivos asociados**
- **Requisitos asociados**
- **Descripción**
- **Importancia**
- **Urgencia**
- **Estado**
- **Estabilidad**
- **Comentarios**