lunes, 8 de diciembre de 2008

Un estándar para el desarrollo del producto software: SWEBOK

Hace algunos días escribíamos un post acercad del PMBOK, un estándar creado por el Project Management Institute para optimizar y guiar la Gestión de Proyectos. Hoy vamos a hablar de otro estándar, éste más enfocado a la Ingeniería del Software, y desarrollado por el IEEE: el SWEBOK.

SWEBOK (Software Engineering Body Of Knowledge) referencia al Cuerpo de Conocimiento de un campo tan complejo como es la Ingeniería del Software, es decir, a la descripción jerárquica del conocimiento de este área estructurado en dos niveles de jerarquía: áreas de conocimiento y componentes de conocimiento. Es un compendio de las mejores prácticas de este campo de la ingeniería con la finalidad de que sirvan como referencia a la hora del desarrollo de nuevos proyectos.

La idea de este desarrollo surgió basándose en que la Ingeniería del Software es una disciplina que poco o nada se parece a otras en la ciencia, por lo que es necesario definir un estándar o una guía para la mejora del proceso de creación de software. A diferencia de otros productos, el software se desarrolla, no se fabrica como cualquier otro objeto a partir de una materia prima, con un proceso de elaboración, etc., sino que es un producto de labores de ingeniería como análisis de requisitos, diseño, control de calidad,...

Las Áreas de Conocimiento en que se divide el SWEBOK son:
  • Requerimientos de Software: Un requerimiento es definido como una propiedad que debe ser exhibida para resolver algún problema del mundo real.
  • Diseño de Software: Es una fase que abarca todo el ciclo de vida de un producto software, pues se trata de la administración de los cambios, así como el mantenimiento de los requisitos, de tal forma que se refleje lo que en realidad el ítem final va a ser.
  • Construcción de Software: Implementación de un producto que sea funcional a través de la combinación de codificación, validación y pruebas unitarias.
  • Pruebas de Software: Verificación dinámica del comportamiento de un programa, sobre un conjunto finito de casos de prueba.
  • Mantenimiento de Software: Mejoras a implementar en el software una vez que está operativo, producto de anomalías, cambios en el ambiente operativo, nuevos requisitos, etc.
  • Gestión de la Configuración de Software: Proceso de de control de los cambios en el producto, con el fin de mantener la integridad en el ciclo de vida del mismo.
  • Gestión de la Ingeniería del Software: Administración de ciertos procesos complejos como la gestión de la organización, de los proyectos y de las métricas del software.
  • Procesos de Ingeniería del Software: Definición, implementación, medida y cambio de los procesos de ingeniería del software.
  • Métodos y herramientas de la Ingeniería del Software: Control del ambiente y métodos de desarrollo del software.
  • Calidad de Software: Consideraciones de calidad que trascienden los procesos del ciclo de vida.

(Pincha en la imagen para ampliarla)

Por último, aquí tenéis la página oficial de SWEBOK, donde os podréis descargar o simplemente consultar toda la documentación del estándar.

domingo, 7 de diciembre de 2008

Herramientas para la gestión de Proyectos: Zoho Projects

Os vamos a hablar hoy de una herramienta para la gestión de proyectos muy difundida y con una gran aceptación en la actualidad: Zoho Projects. Estamos hartos de oir hablar de lo compleja que es la gestión de un proyecto, de lo complicado que es coordinar a todos los miembros del equipo de trabajo, de la necesidad de un repositorio donde almacenar toda la documentación generada... Pues bien, esta herramienta permite hacer todo esto y mucho más de una forma sencilla, intuitiva y eficaz.

Así mismo ofrece control total para gestionar proyectos de cualquier tipo; permite asignar tareas a los miembros que se encuentren vinculados, junto con el plazo para que se lleven a cabo, llevar la cuenta de las acciones que ya se han realizado y lo que falta por hacer, o cargar archivos, entre otros. Una de las principales ventajas es que ofrece integración con las demás herramientas on-line de Zoho, como pueden ser procesadores de textos, hojas de cálculo, editor de Wikis, CRM, etc., lo cual proporciona un servicio muy completo para esta compleja tarea.

Entre sus principales funcionalidades están:
  • Definir tareas, permitiendo la actualización de las mismas en base a su progreso.
  • Definir listas de tareas, agrupando las más relevantes.
  • Establecer dependecias entre distintas tareas a realizar.
  • Establecer diferentes objetivos a alcanzar en el proyecto, para su gestión independiente.
  • Control del calendario, donde se reflejan las distintas tareas, hitos, entregables...
  • Gestión de toda la documentación generada en el proyecto, con un repositorio que es susceptible de clasificación.
  • Creación de distintas etiquetas para la clasifiticación de los documentos.
  • Gestión de subversiones de todos los productos que se van realizando.
  • Elaboración de diagramas de Gantt a partir de la planificación realizada.
  • Gestión de horas trabajadas, así como una herramienta para el control de este seguimiento.
  • Acceso concurrente a la aplicación, con partes privadas para los distintots usuarios.
  • Recibir notificaciones por correo electrónico cuando se asigne una tarea a un usuario o cuando la fecha de vencimiento se aproxime.
  • Clasificar a los miembros de un proyecto según sus papeles en el mismo.
  • Foro de discusión, donde se podrá hablar sobre distintos temas relacionados con el proyecto.
Por último, os vamos a dejar un enlace a un vídeo para que veáis cómo se utiliza la herramienta y evaluéis la practicidad y utilidad de la herramienta.

jueves, 4 de diciembre de 2008

Herramientas para la gestión de las Pruebas del Sistema

Ha llegado el momento de definir las pruebas que se realizarán para verficar y validar el sistema. En este post vamos a hablaros de una herramienta que facilita notablemente la realización de las pruebas definidas en el Documento de Pruebas del Sistema (o en el de Diseño del Sistema, según si se han integrado ambos o no) en entorno Java: JUnit.

Normalmente el conjunto de pruebas se realiza a partir de la especificación de lo que se espera de un programa, de ahí se pasa a preparar una batería de casos de prueba. Para programas pequeños (como solía venir siendo hasta ahora en nuestra carrera universitaria) éstos se pueden escribir en papel y ejecutarse disciplinadamente de forma manual, algo factible si se han de realizar, por decir una cifra, unos veinte tests. Pero si nos enfrentamos a un problema mucho más grande, con cientos de pruebas que llevar a cabo, es conveniente automatizar este proceso, de forma que se puedan realizar muchas veces, tanto durante la fase de desarrollo como durante la de aceptación.

JUnit es un framework que permite realizar la ejecución de clases Java de manera controlada, para poder evaluar si el funcionamiento de cada uno de los métodos de la clase se comporta como se espera. Esto se refleja en la respuesta del mismo: en función de algún valor de entrada se evalúa el valor de retorno esperado; si la clase cumple con la especificación, entonces JUnit devolverá que el método de la clase pasó exitosamente la prueba; en caso de que el valor esperado sea diferente al que regresó el método durante la ejecución, se devolverá un fallo en el procedimiento correspondiente.

El concepto fundamental en esta herramienta es el caso de prueba (test case), y la suite de prueba (test suite). Los casos de prueba son clases o módulos que disponen de métodos para probar los métodos de una clase o módulo concreta/o. Así, para cada clase que quisiéramos probar definiríamos su correspondiente clase de caso de prueba. Mediante las suites podemos organizar los casos de prueba, de forma que cada suite agrupa los casos de prueba de módulos que están funcionalmente relacionados.

Las pruebas que se van construyendo se estructuran así en forma de árbol, de modo que las hojas son los casos de prueba, y podemos ejecutar cualquier subárbol (suite) de forma recursiva.
De esta forma, construimos programas que sirven para probar nuestros módulos, y que podremos ejecutar de forma automática. A medida que la aplicación vaya avanzando, se dispondrá de un conjunto importante de casos de prueba, que servirá para hacer pruebas de regresión. Eso es importante, puesto que cuando cambiamos un módulo que ya ha sido probado, el cambio puede haber afectado a otros módulos, y sería necesario volver a ejecutar las pruebas para verificar que todo sigue funcionando. Esto último es básico en grandes sistemas donde la reingeniería es un proceso constante y se llevan a cabo múltiples modificaciones en el sistema, que pueden afectar al resto del mismo.

En la imagen anterior vemos un ejemplo de batería de pruebas realizado con JUnit, donde indica la cantidad de test realizados, los que fallan y los que son pasados con éxito.

miércoles, 3 de diciembre de 2008

Herramientas para la gestión del Acceso a Datos: Hibernate y DAO

Existen múltiples estrategias o herramientas para optimizar el acceso a la capa de datos (Base de Datos) y mantener la persistencia objeto-relacional en una aplicación Web implementada con Java EE. Una de las más conocidas y extendidas es Hibernate.

Se trata de una herramienta de mapeo objeto-relacional que proporciona un framework para llevar a cabo esta operación de asociación entre dos paradigmas conceptualmente muy distintos, el orientado a objetos y el relacional. En el caso de enfrentarnos a un problema sencillo en el que los objetos no revisten una complejidad extrema, mantener la persistencia no es algo complejo, pero la cosa cambia cuando los objetos que queremos almacenar presentan una gran cantidad de atributos compuestos, asociaciones y agregaciones, donde se han de guardar numerosas referencias, con lo que el tamaño de los datos en el repositorio se incrementan de forma exponencial sin que ello suponga un beneficio global para el sistema.

Para lograr este mapeo, Hibernate, permite al desarrollador detallar cómo es su modelo de datos, qué relaciones existen y qué forma tienen. Con esta información, el mapeador faculta a la aplicación para manipular los datos de la base operando sobre objetos, con todas las características de la POO. Hibernate convertirá los datos entre los tipos utilizados por Java y los definidos por SQL. Hibernate genera las sentencias SQL y libera al desarrollador del
manejo manual de los datos que resultan de la ejecución de dichas sentencias, manteniendo la portabilidad entre todos los motores de bases de datos con un ligero incremento en el tiempo de ejecución.

Otra de las ventajas que aporta esta herramienta es que las relaciones son definidas una sola vez por el equipo de desarrollo y se almacenan en un fichero XML que es leido de forma directa por el propio mapeador, con lo que no es necesario estar constantemente indicando dónde va cada objeto o de qué tabla se ha de obtener qué dato.
Y la otra herramienta de la que queríamos hablar era del patrón de diseño de Java EE Data Access Object. Proporciona una interfaz común para el acceso a los datos, utilizando un Objeto como medio de acceso al repositorio físico. Esto permite abstraer y encapsular las operaciones relacionadas con el tratamiento de la propia BBDD.

La ventaja de usar objetos de acceso a datos es que cualquier objeto de negocio (aquel que contiene detalles específicos de operación o aplicación) no requiere conocimiento directo del destino final de la información que manipula. Ello implica que estos objetos se pueden emplear para hacer independiente la aplicaciónde la herramienta de persistencia que utilice (JDBC o incluso el propio Hibernate), con lo que la tecnología subyacente puede ser modificada sin
que las otras partes de la aplicación hayan de sufrir cambio alguno.

El principal inconveniente que presenta el uso de este patrón es que la complejidad de emplear otra capa intermedia adicional a la de persistencia incide en un aumento considerable del tamaño total del programa, lo cual repercute en el rendimiento del mismo, que decrecerá.

El Modelo de Capacidad y Madurez: CMM-CMMi

Muchas veces hemos oído hablar del término madurez relacionado con la Ingenería del Software pero, realmente, ¿cómo se puede medir la madurez de un producto o empresa? Para dar respuesta a esta pregunta, surgió CMM.

CMM (Capability Maturity Model o Modelo de Capacidad y Madurez) es un modelo orientado a la mejora de los procesos empresariales, evaluando la calidad de los productos que desarrolla y clasificándolos según cinco niveles de madurez. Fue desarrollado por el SEI (Software Engineering Institute) a mediados de los años ochenta a petición del Departamento de Defensa de los Estados Unidos con la finalidad de evaluar a las distintas compañías que le proporcionan software. Este modelo está basado en conceptos de calidad total y de mejoramiento continuo.

CMMi (Capability Maturity Model Integration) es la evolución natural de CMM y surge con la intención de mejorar la usabilidad de los modelos de madurez integrando varios modelos diferentes en un solo framework. Así mismo describe las prácticas de ingeniería de software y gestión que permite a las organizaciones madurar sus procesos de desarrollo y mantenimiento del software, para cualquier proyecto en cualquier entorno. El CMMi presenta un conjunto de prácticas recomendadas en una serie de áreas clave que permiten mejorar el potencial del proceso de software. Abarca veintidós áreas de proceso, que van desde la Gestión de la Configuración y de los Requisitos hasta la Formación Organizacional, y se van concatenando en los distintos niveles de madurez.

CMMi, al igual que CMM presenta cinco niveles de madurez. Para poder estar en uno de ellos se han de cumplir todos los requisitos del mismo y de todos los niveles anteriores, de tal forma que si una organización cumple todos los requerimientos para estar en nivel 3 pero le falta uno de nivel 2 y sí cumple con los de nivel 1, se clasificará en este último. Los cinco niveles son los siguientes:
  1. Inicial: las organizaciones no disponen de un ambiente estable para el desarrollo y mantenimiento de software. Aunque se utilicen técnicas correctas de ingeniería, los esfuerzos se ven minados por falta de planificación. El éxito de los proyectos se basa la mayoría de las veces en el esfuerzo personal, aunque a menudo se producen fracasos y casi siempre retrasos y sobrecostes. El resultado de los proyectos es impredecible.
  2. Repetible: las organizaciones disponen de unas prácticas institucionalizadas de gestión de proyectos, existen unas métricas básicas y un razonable seguimiento de la calidad. La relación con subcontratistas y clientes está gestionada sistemáticamente.
  3. Definido: las organizaciones disponen, además de una buena gestión de proyectos, de correctos procedimientos de coordinación entre grupos, de formación del personal, técnicas de ingeniería más detalladas y un nivel más avanzado de métricas en los procesos.
  4. Gestionado: las organizaciones disponen de un conjunto de métricas significativas de calidad y productividad, que se usan de modo sistemático para la toma de decisiones y la gestión de riesgos. El software resultante es de alta calidad.
  5. Optimizado: la organización completa está volcada en la mejora continua de los procesos. Se hace uso intensivo de las métricas y se gestiona el proceso de innovación.
(Pinchar sobre la imagen para ampliar)

Para dar una idea de la dificultad que supone alcanzar la excelencia, únicamente hay dos empresas en todo el mundo, Infosys y Tata Consulting Services, que tienen un nivel 5 CMMi, mientras que en España, Indra y Everis pelean por estar en el nivel 4.

lunes, 1 de diciembre de 2008

Sistemas de Soporte a la Decision: el Business Intelligence

El Business Intelligence o Inteligencia de Negocio es un paradigma relativamente novedoso que hace referencia al conjunto de estrategias y herramientas destinadas a la obtención de conocimiento empresarial a través de un análisis de los datos contenidos en los repositorios organizacionales.

A grandes rasgos, suele definirse como la transformación de los datos de la compañía en conocimiento para obtener una ventaja competitiva. Desde un punto de vista más pragmático, y asociándolo directamente a las tecnologías de la información, podemos definir Business Intelligence como el conjunto de metodologías, aplicaciones y tecnologías que permiten reunir, depurar y transformar datos de los sistemas transaccionales e información desestructurada (interna y externa a la compañía) en información estructurada, para su explotación directa o para su análisis y conversión en conocimiento que sirva de soporte a la toma de decisiones sobre el negocio.

Ello viene motivado porque el exceso de información no es poder, pero el conocimiento sí lo es. En muchos casos, la transformación y el análisis de toda la información y los datos que las propias compañías generan se convierte en un verdadero problema y, por lo tanto, la toma de decisiones se vuelve desesperadamente lenta, de ahí la importancia de este paradigma.

Al igual que comentábamos cuando hablábamos de los ERP, una solución BI se debe concebir como un sistema integral, con una visión y perspectiva global del mismo, de tal modo que se consideren y tengan en cuenta todas sus fases para dar lugar a un producto de calidad y que realmente satisfaga las necesidades del cliente.

Como se aprecia en la figura anterior, en el campo de Business Intelligence se diferencian distintos componentes que forman una arquitectura o Framework global sobre el que basarse para desarrollar cualquier proyecto sobre esta materia. Una solución integral BI se compone de los siguientes elementos:
  • Diseño conceptual de los sistemas: qué información necesitamos para la gestión y toma de decisiones, qué formato ha de tener, de dónde proceden los datos que necesitamos y cual es su disponibilidad.
  • Construcción del almacén de datos (DataWarehouse): éste no es más que una base de datos corporativa que replica los datos transaccionales una vez seleccionados, depurados y especialmente estructurados para el objetivo que persigamos.
  • Selección de herramientas de explotación de la información: Cuadros de Mando Integrales (CMI), Data Mining, etc.
Los principales proveedores de este tipo de soluciones son Oracle, SAP, Cognos y BusinessObjects que ocupan más del 80 % de la cuota total de mercado en lo que a estas tecnologías se refiere. Así mismo, en los últimos años están teniendo un gran auge las múltiples firmas que ofrecen sus productos Open Source, instalándose en un gran número de empresas habida cuenta de que carecen de costes de adquisición y que cada vez ofrecen unas mejores prestaciones.

El Software Colaborativo

El Groupware o Software Colaborativo es el conjunto de sistemas de información o aplicaciones informáticas que persiguen la integración de todo el trabajo de un equipo con múltiples miembros accediendo de manera concurrente a los recursos proporcionados.

El groupware se basa en tres elementos básicos: la organización, la tecnología y las personas. Aunque la plataforma tecnológica tiene gran importancia, más importantes aún son los aspectos organizativos, es decir, una buena definición de los procedimientos con los que se va a trabajar, así como los aspectos sociales y culturales, es decir, la buena o mala disposición de los empleados para trabajar en equipo.

Así mismo existen tres factores que resultan críticos en una solución de software colaborativo:
  • Comunicación: aplicaciones que permiten el continuo flujo de información entre los distintos departamentos empresariales, transferencia de archivos, páginas web colaborativas, correo electrónico organizacional.
  • Conferencia: sistemas para llevar a cabo un intercambio de información de forma interactiva entre los distintos usuarios del software, tales como mensajería instantánea, donde podría tener cabida Twitter, CRMs, ordenadores con escritorios compartidos, etc.
  • Gestión colaborativa: aplicaciones para administrar el desarrollo de equipos de trabajo, tales como sistemas de gestión de proyectos, de gestión de conocimiento (Knowledge Management), de control de los flujos de trabajo (Workflows),...
Existen numerosas aplicaciones de esta índole, muchas de ellas Open Source (eGroupWare, OpenGroupWare, el propio Moodle, etc), entre las que destacan Google Apps y Microsoft Share Point, propiedad de los dos grandes gigantes de Internet. En la primera se engobla una solución con GMail como gestor de correo electrónico, GTalk para mensajería instantánea, Google Calendar para gestión de eventos, Google Docs para crear y gestionar documentos, Google Site para compartir información desde tu propia estación de trabajo, etcétera.