Desarrollo

El subsistema de Desarrollo contempla las normativas y estándares para la elaboración de un código fuente homogéneo y estándar con el objeto de minimizar las tareas de mantenimiento. También se incorporan las especificaciones para la obtención de sistemas de información seguros, con un rendimiento óptimo y adaptados a las necesidades de las tecnologías definidas en el subsistema de Arquitectura de MADEJA con el que está ampliamente vinculado.

Enlaces rápidos a tablas resumen:

  • Tabla resumen de las tecnologías asociadas al subsistema de desarrollo.
  • A partir de las pautas del subsistema se han elaborado la verificaciones que pueden realizarse. Estas verificaciones se ha agrupado en matrices de verificación en función del área al que pertenecen. Puede descargar las matrices en el siguiente enlace. Posteriormente estas verificaciones estará almacenadas en el sistema VerificA.
  • Se ha hecho un esfuerzo inicial para automatizar estas verificaciones utilizando la herramienta sonar. Existen para sonar una serie de plugins como pmd, checktyles, findbugs, que se han usado. Para usar estas primeras verificaciones automáticas puede descargar el perfil del proyecto sonar en el siguiente enlace.

Objetivos

  • Promover la generación de código fuente de calidad.
  • Unificar el uso de librerías y utilidades de apoyo.
  • Proponer plugins para el desarrollo con IDEs.
  • Promover el uso de patrones de diseño software.

Áreas 

Licenciamiento

La Junta de Andalucía trata desde hace años de impulsar el uso de software libre. Como parte de este objetivo nace la ORDEN DE 21 DE FEBRERO DE 2005, en la que se hace constar que el software desarrollado por o para la Junta de Andalucía debe estar disponible públicamente.

Especificaciones de Codificación y Construcción

El establecimiento de la normativa para la codificación de aplicaciones se organizará en base a los diferentes elementos que configuran la arquitectura del Subsistema MADEJA, profundizando con un mayor nivel de detalle sobre aquellos elementos que se consideran la base de esta arquitectura.

Construcción de Aplicaciones por Capas

La programación por capas es un estilo de programación en el que el objetivo primordial es la separación de la lógica de negocios de la lógica de diseño; un ejemplo básico de esto consiste en separar la capa de datos de la capa de presentación al usuario.

Capa de Presentación

Mediante la capa de presentación se separa la interacción del usuario respecto a la lógica de negocio.

Capa de Negocio

La capa de negocio expone la lógica necesaria a la capa de presentación para que el usuario, a través de la interfaz, interactúe con las funcionalidades de la aplicación.

Capa de Persistencia

La necesidad de vincular los datos guardados en una base de datos relacional, con los objetos de una aplicación orientada a objetos, determinó la aparición del concepto de persistencia de objetos. Siguiendo el estilo de desarrollo en tres capas, la persistencia queda recogida en su propia capa, separada de la lógica de negocio y de la interfaz de usaurio.

Seguridad

En este área se incluyen conceptos, recomendaciones, consejos y ejemplos de seguridad en los procesos de desarrollo de aplicaciones informáticas, teniendo en cuenta las indicaciones del Plan Director de Seguridad de los Sistemas de Información y Telecomunicaciones de la Administración de la Junta de Andalucía, del Esquema Nacional de Seguridad, de las normas ISO 27000 y de la Ley Orgánica de Protección de Datos.

Control de Acceso y Autenticación

Se analizan la vulnerabilidades que pueden darse en las aplicaciones a la hora de identificar sus usuarios y los permisos que estos poseen. Recogiendo una serie de recomendaciones para el desarrollo de aplicaciones, que tenidas en cuenta, ayuden a mitigar los riesgos de producirse situaciones como el escalado de privilegios o la suplantación de identidad.

Codificación y Validación de entrada/salida

La debilidad de seguridad más común en aplicaciones web es la falta de validación apropiada de las entradas del cliente o del entorno.Teniendo en cuenta una serie de indicaciones y consejos a la hora de codificar nuestras aplicaciones podremos evitar problemas como la inyección de código SQL, de comandos, LDAP, XPath, XML o por XSS.

Cifrado

Una de las principales medidas para asegurar la integridad y la confidencialidad de la información que se transmite a través de la red es la encriptación o codificación de los mensajes, evitando que, aún interceptando nuestra comunicación, no sea posible su entendimiento. Para ello, se resumen diversas situaciones en las que se debe cifrar la información y los algoritmos a utilizar.

Gestión de Sesiones y Usuarios

El manejo de la sesión es uno de los aspectos críticos de la seguridad WEB. Veremos cómo es posible mejorar la seguridad en el control de acceso y la autenticación a través del manejo de las sesiones y de la información de los usuarios de nuestras aplicaciones.

Gestión de Errores y Excepciones

Uno de los focos que originan vulnerabilidades en nuestras aplicaciones se basa en la falta de control sobre los errores que se producen en su ejecución y el tratamiento correcto de las excepciones. Veremos cómo disminuir los riesgos de ser atacados a partir de la generación de un error o excepción en la aplicación.

Auditoría y Registro

La auditoría y el registro de los eventos que suceden al ejecutar nuestras aplicaciones nos permite monitorizarlas y detectar posibles intentos de ataques o intrusiones. Además, veremos cómo mejorar la gestión de los archivos de log para que sean más seguros.

Servicios Web

Dada la particularidad de los servicios web, se ha creado este apartado para que, además de tener en cuenta todas las indicaciones de seguridad dadas para el control de acceso y la autenticación, la codificación y validación de entrada/salida, el cifrado, etc. se tengan en cuenta otras actuaciones concretas para garantizar la seguridad en el uso de servicios web: la integridad, el no repudio y la confidencialidad de los mensajes, así como habilitar mecanismos para la identificación y autorización de servicios y usuarios.

Rendimiento

En informática entendemos el rendimiento como la medida o cuantificación de la velocidad/resultado con que se realiza una tarea o proceso.

Librerías y Módulos

El objetivo de esta área temática busca establecer un catálogo de librerías o elementos software reutilizables para los lenguajes Java, PHP o Drupal. Además, para cada una de estas librerías se proporciona una descripción y unas normas o recomendaciones de uso.

Patrones de Diseño

Los patrones de diseño aportan una posible solución a un problema concreto, usualmente relacionado con la estructura básica de una aplicación. Teniendo en cuenta las características de la aplicación a desarrollar y el tipo de problemas detectados durante el diseño de dicha aplicación, es posible determinar qué patrón de diseño será el más apropiado para resolver dichos problemas.