DUOK - Auditoria

DUOK tiene una serie de aplicaciones web que procesan peticiones con scripts de PHP. Estos contienen típicamente una mezcla de diferentes tipos de lógica (presentación, negocio, base de datos, etc.) y con el tiempo y la evolución de las aplicaciones está llegando a ser cada vez más caro mantenerlas o añadirles más funcionalidades. Nuestra meta con la consultoría fue revisar los procesos de desarrollo actuales y la futura arquitectura de aplicaciones propuesta para identificar áreas de mejora y a continuación proporcionar el apoyo que hiciese falta.

Para organizar la consultoría de dos semanas la dividimos en tres partes. Desde nuestra oficina en Valencia, la semana anterior al trabajo en DUOK, dedicamos dos días a conocer las aplicaciones, la arquitectura futura propuesta y la tecnologías involucradas. También dedicamos tiempo a elaborar el plan preliminar (incluido abajo) usando las respuestas al cuestionario que solemos usar con clientes nuevos y otra información obtenida de otras conversaciones que tuvimos.

A continuación estuvimos cinco días junto al equipo de DUOK en sus oficinas en San Sebastian y usando el plan preliminar como guía trabajamos variando el tamaño de los grupos en función del tema que queríamos tratar o la información a difundir. Al final de la semana nos quedamos con una serie de tareas para los tres días de trabajo que hicimos desde la oficina en Valencia al volver, usando Skype y Dropbox para comunicarnos, cuando hiciera falta.

Revisión / Definición de una metodología de desarrollo

  • Combinación de scripts de (Powershell, launchy, bash) y otras herramientas (Phing, Rake, Capistrano) para agilizar el proceso de desarrollo y despliegue
  • La configuración y uso correcto de SVN (trunk, branches, tags, svn:externals, svn:keywords)
  • Como trabajar en equipo con un sistema de control de versiones y como evitar problemas
  • Como aprovechar al máximo la integración entre un sistema de control de incidencias y SVN
  • Montaje y uso de un servidor de integración continua (Cruise Control y PhpUnderControl)
  • Configuración del entorno de integración continua para desarrolladores
  • Generación automatizado de Documentación e informes de cobertura, de pruebas, de métricas de calidad
  • Pruebas - requisitos para pruebas unitarias, de integración y funcionales (funcionales pasan por el dispatcher / los filtros)
  • Pruebas de rendimiento y el análisis de sus resultados

Definición de una arquitectura estándar para aplicaciones PHP

  • Definición de los entornos de trabajo y sus requisitos (desarrollo, test, staging, producción)
  • Buenas practicas para programadores (generales), configuración y uso de Eclipse
  • Buenas practicas para la programación enfocada a objetos con PHP
  • Como cambiar de mentalidad y aprovechar al máximo un proceso de desarrollo tipo Test Driven Development
  • Uso de patrones de diseño (Enfocado en los patrones que se usa hoy en día en Symfony pero hablaremos de otros)
  • Como usar una fachada para esconder la interacción con un servicio externo para hacer el código mas robusto y eliminar dependencias
  • Uso de caches de diferentes niveles
  • i18n - como implementar multi-idioma en las aplicaciones (sobre los datos de la aplicación y las etiquetas estaticas en la capa web)
  • Uso de ficheros de configuración externos
  • Uso y tratamiento de los errores dentro de una aplicación (Exceptions)
  • Uso de Logging

Definición de una arquitectura para la capa web

  • Definir estándares de HTML, CSS y javascript para asegurar la calidad, el rendimiento y el uso multi-navegador de las aplicaciones
  • Javascript - librerías, arquitectura y pruebas
  • Estándares de javascript para desarrolladores
  • Como configurar y usar Selenium para probar aplicaciones con navegadores diferentes
  • Estándares de HTML y CSS para desarrolladores
  • Implicaciones para desarrolladores y diseñadores de HTML 5 y CSS 3

Diseño de Bases de Datos optimizadas para el uso de "frameworks"

  • Uso de scripts para la creación y gestión de una BD de cualquier tipo
  • Como configurar y usar una BD, hay mas cosas que hay que tener en cuenta pero unos ejemplos son
    • Configuración de usuarios y permisos
    • Selección de motores de almacenamiento
    • Nomenclatura
    • Un longitud y tipo consistente para campos parecidos
    • Codificación
    • Selección de claves primarias, claves ajenas e indices
    • Identificación y definición de los juegos de datos necesarios para cada entorno
  • Como perfilar el rendimiento de indices y SQLs para evitar o solucionar problemas de rendimiento