martes, 23 de febrero de 2010

Volviendo a los clásicos I

- El Arte de Probar el Software - Glenford J. Myers – 1983 – Editorial El Ateneo

Ya que se está hablando en estos días de las pruebas que se hicieron para el cambio a año 2000, y que mucho se ha avanzado desde esa época en lo relativo a pruebas de software, vale la pena volver a leer a los referentes, y validar cómo siguen vigentes la mayoría de sus conceptos.

En esta línea, hemos releído a Myers, y queremos compartir un extracto de los puntos que nos parecen más interesantes (y siempre vigentes).

Qué mejor inicio del libro que con un ejercicio muy corto, para realizar una autoevaluación, donde se pide que se preparen casos de prueba sobre un programa muy sencillo, con el que se demuestra que aún siendo el problema trivial, la tarea no es fácil.

Ejercicio: El programa lee tres números enteros de una tarjeta, los que son interpretados como representaciones de las longitudes de los lados de un triángulo. El programa escribe un mensaje que informa si el triángulo es escaleno, isósceles o equilátero.

El libro encara un tratamiento más bien práctico que teórico del tema. Para el autor, más importante que los distintos puntos de vistas técnicos, es la adecuada elección de quién deberá hacer la prueba, y la adopción de un modo de pensar correcto. Estas cuestiones parecen contribuir en mayor grado al éxito de una prueba que otras de orden puramente técnico, por eso arranca con estas definiciones para luego ir a otras de naturaleza más técnica.

Punto 1 - Qué es probar

Las definiciones incorrectas sobre el término Probar tiene influencia psicológica en el momento de realizar los casos de pruebas, y son la causa principal de que las pruebas resulten deficientes.

Como ejemplo de tales definiciones se pueden dar las siguientes:

- “Probar es demostrar que no hay errores presentes en el programa”

- “el propósito de probar es mostrar que el programa realiza correctamente las funciones esperadas”

- “probar es el proceso que lleva a confiar en que un programa hará lo que se supone que debe hacer”.

Estas definiciones son incorrectas porque describen casi lo opuesto de lo que debemos considerar como prueba de un programa. Dejando de lado las definiciones, pensemos que cuando se prueba un programa, se desea agregarle un valor. Agregar valor significa aumentar su calidad o confiabilidad, lo que, a su vez, significa encontrar y eliminar errores. De aquí que no se deba probar un programa para mostrar que funciona; más bien es conveniente comenzar con la suposición de que el programa contiene errores y luego probar el programa para encontrar tantos errores como sea posible. Una definición más apropiada es:

Prueba es el proceso de ejecutar un programa con el fin de encontrar errores

Puesto que los seres humanos tienden a estar fuertemente orientados hacia la obtención de metas, si nuestra meta es demostrar que el programa no contiene tiene errores, estaremos entonces subconscientemente dirigidos hacia este fin, y tenderemos a seleccionar datos de pruebas con baja probabilidad de hacer que el programa falle. Esta definición implica que la prueba es un proceso destructivo.

Otra manera de reforzar la definición adecuada de prueba es utilizar bien las definiciones de las palabras “exitoso” y “no exitoso”. Un caso de prueba que no encuentre error alguno constituye un desperdicio de tiempo y dinero: éste sería un caso de prueba “no exitoso”, en cambio aquel que sí lo encuentre es un caso “exitoso”.

Punto 2 - Principios fundamentales

Estos principios parecen ser obvios y son importantes, y sin embargo con demasiada frecuencia se los ignora:

· La definición del resultado esperado a la salida del programa es una parte integrante y necesaria de un caso de prueba.

· Un programador debe evitar probar su propio programa.

· Una empresa de programación no debería probar sus propios programas.

· Inspeccionar concienzudamente el resultado de cada prueba.

· Los casos de prueba deben ser escritos tanto para condiciones de entradas inválidas e inesperadas como para condiciones válidas y esperadas.

· Examinar un programa para comprobar que no hace lo que se supone que debe hacer es sólo la mitad del problema. La otra mitad consiste en ver si el programa hace lo que no se supone que debe hacer.

· Evitar los casos de prueba desechables a menos que el programa sea verdaderamente un programa desechable.

· No planear un esfuerzo de prueba con la suposición tácita de que no se encontrarán errores.(uso de definición incorrecta de prueba, suponiendo que la prueba es el proceso de mostrar que el programa funciona correctamente)

· Las pruebas constituyen una tarea altamente creativa y son un desafío intelectual.

Punto 3 - Probar tempranamente

Cuanto antes se encuentren los errores, más bajo será el costo de corregirlos. Por ello se deben realizar inspecciones y recorridas en el código.

Las Inspecciones de Codificación: son procedimientos y técnicas para la revisión de programas en busca de errores, efectuada por un grupo de 4 personas (moderador, programador, diseñador del programa, tester).

Forma de trabajo: El moderador días antes distribuye las listas de programas y las especificaciones de diseño, se divide en dos sesiones la primea se le pide al programador que describa sentencia por sentencia la lógica del programa y se le realizan preguntas. La experiencia demuestra que el programador encuentra más errores que los otros miembros del equipo de inspección. En la segunda sesión se analiza el programa por medio de una lista de ayuda de memoria (checklist) preparada anteriormente que contiene una lista con los errores más frecuentes en programación.

El tiempo de las sesiones es de 90 minutos a 120 minutos. Al finalizar, el programador recibe la lista con los errores para corregirlos, se actualiza la lista si es necesario y luego de corregidos los errores, se realiza otra ronda de inspección.

Tipos de problemas que se buscan (checklist): Errores en la referencia de datos, errores de declaración de datos, errores de computación (variables mal definidas: tipo, longitud, etc.), errores de comparación, errores de flujo de control, errores de interfaz (una de las preguntas que se podría hacer es: ¿Es igual el número de parámetros recibidos por un módulo al número de argumentos enviados por cada uno de los módulos que llaman? ¿Es el orden correcto? y errores de E/S.

Las Recorridas (walkthroughs) de codificaciones son muy parecidas a las inspecciones, la diferencia está en la técnica de detección de errores. En este procedimiento, a diferencia de las Inspecciones, en lugar de usarse una lista (checklist) o leer simplemente el programa durante las reuniones, la persona designada como tester o probador, concurre a la reunión con una serie de casos de prueba con los datos de entrada y los resultados esperados.

Cada caso de prueba se ejecuta manualmente, es decir, el caso de prueba es pasado a través de la lógica del programa y se registra el estado del mismo (es decir los valores de las variables) en papel o en una pizarra. Por supuesto, los casos de prueba deben ser de naturaleza simple y pocos en número, ya que el hombre “ejecuta” los programas a una velocidad que es en muchos aspectos de magnitud inferior a la máquina.

Punto 4 - Estructuración del proceso de prueba

Dadas las limitaciones existentes en tiempo, costos, recursos, la cuestión clave referente a las pruebas de un programa es:

¿Cuál es el subconjunto de todos los posibles casos de prueba que tiene la mayor probabilidad de detectar el mayor número posible de errores?

El autor sugiere como estrategia razonable de prueba, la utilización de métodos de pruebas de caja negra, desarrollando adicionalmente casos suplementarios basados en los métodos de caja blanca, ya que cada uno de ellos tiene fuerzas y debilidades particulares.

Por otra parte, no es lo mismo probar un programa de 100 líneas de código, que uno de más de 500 líneas, o un sistema grande, complejo, y con variadas interfaces con otros sistemas.
Por lo tanto, se puede pensar la prueba por módulos, y avanzar luego en integración de los mismos.

Lista de pruebas a planificar: Pruebas de módulos (caja blanca), pruebas de función (caja negra), pruebas de sistema (sentencias, volumen, usabilidad, seguridad, tiempo de respuesta, almacenamiento, recuperación, etc.), pruebas de aceptación y pruebas de instalación.

Punto 5 - Planificación y control, finalización de las prueba

Ante un sistema grande se puede estar frente un enorme problema de Planificación, observación y control de un proceso de prueba que puede involucrar la escritura, ejecución y verificación de decenas de miles de casos de prueba, el manejo de miles de módulos, la corrección de miles de errores y el empleo quizás de cientos de personas en uno u otro momento durante el lapso de un año o más.

El mayor error cometido en la planificación de un proceso de prueba ha sido ya mencionado en el Punto 1; es la tácita suposición hecha cuando se establece un cronograma, de que no se encontrarán errores. El resultado obvio de esta equivocación es que los recursos planeados (gente, tiempo de calendario y tiempo de máquina) serán groseramente subestimados. Contribuye a esto el hecho de que los procesos de prueba suelen efectuarse hacia el final del ciclo del desarrollo, lo que hace que las modificaciones de recursos sean difíciles de lograr.

Como en la mayoría de los proyectos, la planificación es una parte decisiva de la organización del proceso de prueba. Los componentes de un buen plan son:

1. Objetivos

2. Criterios de terminación

3. Cronograma

4. Responsabilidades

5. Biblioteca de casos de pruebas y normas.

6. Herramientas.

7. Tiempo de máquina.

8. Configuración del equipo

9. Integración

10. Métodos de Seguimiento

11. Procedimientos para eliminación de fallas (debugging)

12. Pruebas de deterioro o regresión

Una de las preguntas más difíciles de responder cuando se realizan pruebas de programas es cuándo dar ésta por terminada, puesto que no hay manera de saber si el último error detectado es el único que quedaba.

En vista a este dilema y de que la economía es quien dictamina que la prueba debe darse por terminada, existen criterios útiles para definir la terminación de la prueba. Existen tres categorías de criterios de mayor utilidad. La primer categoría, aunque no la mejor, es basar la terminación en el uso de métodos específicos de diseño de casos de prueba.

La segunda categoría de criterios, y quizás la más valiosa, es establecer los requerimientos de determinación en términos positivos, es decir detectar un número predefinido de errores.

El tercer criterio consiste en representar gráficamente el número de errores encontrados por unidad de tiempo durante la fase de pruebas. Supóngase que se está realizando pruebas de función sobre un programa y se grafica el número de errores encontrados por semana, si en la séptima semana la curva tiene el aspecto de la figura de la izquierda entonces será imprudente terminar la prueba, por otra parte la curva obtenida en el gráfico de la derecha la detección de errores ha bajado significativamente, lo que implica que, quizá, la prueba de función ha cumplido ya su cometido y que es posible terminar con las pruebas de función y comenzar otras por ejemplo de sistemas.

- Gráficos con estimaciones del momento apropiado para dar las pruebas por terminadas mediante gráficos de errores detectados por unidad de tiempo

image
El mejor criterio para determinar si las pruebas se pueden dar por terminado es, probablemente una combinación de los tres tipos de pruebas ya mencionas más arriba en el Punto 4, tomando para cada una algunos de los criterios mencionados.

Algunas conclusiones

Dada la época en que fue escrito el libro, el modelo que describe no hace referencia a métodos ágiles, al menos por su nombre, si bien ya había algunos intentos por esos años.

De cualquier modo, parte de las prácticas son útiles, en función a la misión que el equipo de pruebas tenga que cumplir. Ver también: http://excelza.blogspot.com/2009/10/sobre-nuestra-mision-como-testers.html.

Cómo vemos hoy estos puntos enunciados por Myers?:

Punto 1 - Qué es probar: Probar es demostrar que los interesados pueden utilizar el producto adecuadamente según sus necesidades y requisitos. Actualmente la complejidad de las plataformas de hardware y software, la interacción e interconexión de los productos y sistemas, y por qué no, Internet y el cloud computing, hacen imprescindible fijar al inicio los objetivos de las pruebas, identificar a los interesados, sus necesidades y requisitos, en todos los órdenes, tanto “utilidad” como “garantía”. Todo esto permitirá determinar los procedimientos de prueba a aplicar, los riesgos a mitigar con las pruebas, los oráculos a consultar respecto a los resultados esperados, y a quiénes y cuándo informar resultados obtenidos, e impactará en las decisiones que se tomen en relación a cada uno de los puntos siguientes:

Punto 2 - Principios fundamentales: Siguen en general vigentes. Hay discusión respecto a la necesidad o no de escritura detallada de los casos de prueba, testing exploratorio, y otras técnicas.

Punto 3 - Probar tempranamente: Es siempre discutido y discutible. Si bien conceptualmente es aplicable, la complejidad y dinamismo de los desarrollos en la actualidad hacen que se utilicen poco las Inspecciones y Recorridas, por los tiempos de respuesta que se requieren.

Punto 4 - Estructuración del proceso de prueba: Sigue vigente. Como se dijo en el Punto 1, hay necesidad de planificar y ejecutar distintos tipos de pruebas según los objetivos, estrategias, tipos de proyectos, metodologías de construcción aplicadas, tipos de productos, características de la organización, etc... .
Ver también: http://excelza.blogspot.com/2009/11/pensando-que-probar.html.

Punto 5 - Planificación y control, finalización de las prueba: Sigue vigente. Con mucho más foco en análisis de riesgos, atributos de calidad requeridos, y “good enough quality”. Los planes específicos deben embeberse en los planes de prueba de los servicios de los que el software forma parte, ya que las aplicaciones que contribuyen a la arquitectura del servicio, tienen que tener funcionalidad y no funcionalidad tales, que el servicio pueda proveer la utilidad y garantía acordada con el cliente. Ver también: http://excelza.blogspot.com/2009/12/sobre-pruebas-de-software-y-servicios.html.

Hasta la próxima!

martes, 16 de febrero de 2010

Microsoft Project Server 2010 - Introducción

Para los que estén interesados en la nueva versión de Microsoft Project, dejó en esta entrada un imageresumen de las novedades. Interesantes desde mi humilde punto de vista!

Introducción

Las áreas en las que Microsoft ha invertido en esta nueva versión son:

  • Unificación de administración de proyectos y de portfolios.
  • Mejora de la experiencia de usuario.
  • Mejora en colaboración y reportes.
  • Plataforma escalable y conectada.

 

imageEl conjunto de herramientas ofrecidas es variable: Project Professional, Project Professional sincronizado con SharePoint y Project Server construido sobre SharePoint.

La elección varía de acuerdo al nivel de complejidad que queremos manejar y al tipo de implementación de la práctica de Administración de Proyectos que necesitemos implementar (individual, grupal o corporativa).

 

Proyectos y Portfolios ahora juntos!

Este es uno de los cambios de la versión 2010: un único servidor para la capacidad de PPM (Project Portfolio Management). Recordemos que en la versión 2007 eran dos herramientas separadas.

imageEl nuevo módulo de Planificación de Capacidad me resultó más que interesante. Promete:

  • Identificar las diferencias entre la demanda y la disponibilidad de recursos.
  • Tomar decisiones de asignación o incorporación de recursos.
  • Ajustar los calendarios para optimizar el uso de recursos.

 

image

Mejora de la experiencia de usuario

Existen algunas mejoras como la incorporación de la nueva barra de herramientas de Microsoft (Ribbon) y el comportamiento parecido a Excel. Sin embargo, desde mi punto de vista, hay dos funcionalidades que son realmente cambios muy interesantes:

imageLa principal es que ahora los proyectos pueden editarse desde Project Web Access. Esto quiere decir que en la mayoría de los casos (tal como se ven en la imagen) no será necesario abrir Project Professional para editar los proyectos. Aunque para algunos, este parezca un cambio menor, no es así. Este ha sido un problema histórico de Project Server, una de las mayores quejas de los usuarios, debido al impacto en la productividad que lleva aparejado abrir otra herramienta para hacer un cambio menor. Festejo esta nueva funcionalidad :)

image El otro cambio interesante es la posibilidad de hacer un calendario de alto nivel a partir del calendario detallado de un proyecto. Antes, algunos de nosotros, teníamos que mantener dos calendarios: uno en Project y otro PowerPoint.

Ahora esto está unificado y es realmente fácil de usar (lo digo por experiencia propia luego de haber hecho algunas pruebas en la versión Beta).

 

Si deseen leer algo más sobre estas nuevas funcionalidades, escribí artículos más detallados en:

 

Mejora en colaboración y reportes

Una de las mejoras en este rubro tiene que ver con la sincronización con SharePoint. No sólo se puede comenzar un proyecto a partir de una lista de tareas de SharePoint que luego es promovida a un Project Server, sino que también ahora es posible sincronizar Project Professional con SharePoint y así, tener una alternativa en los casos en que no se requiere Project Server para una implementación corporativa.

Hay también mejoras respecto a la forma de reportar horas (más simplificada) y mejor integración con Exchange Server.

imageSin embargo, creo que el cambio más importante está dado por el "Business Intelligence Center" y no es casual, ya que creo que esa es una de las herramientas que mejor aprovechan una implementación de EPM: la capacidad de analizar la información de proyectos y recursos en forma centralizada.

Técnicamente, Project 2010 deja los Office Web Components (tecnología obsoleta que ha sido reemplazada por Microsoft) y aprovecha ahora las nuevas herramientas, tales como:

  • Excel Services
  • PerformancePoint Services
  • Visio Services
  • SQL Server Reporting Services
  • SQL "008 R2: SelfServices BI, Power Pivot

Y como una imagen vale más que mil palabras, les recomiendo que hagan"clic" sobre la imagen de arriba.

imageFinalmente, no debemos olvidar que Project Server está construido sobre SharePoint Server 2010, con lo cual, contamos con todas las funcionalidades de SharePoint en nuestro producto EPM:

  • Workflow
  • Workspaces
  • InfoPath
  • Etc.... (ver imagen)

 

Plataforma escalable y conectada

Este es un tema más técnico. En su mayor parte las novedades están relacionadas con mejoras a la versión 2007.

Sin embargo, destaco algunas novedades como los campos personalizados departamentales. Para los que no los conocen, los campos personalizados permiten categorizar nuestros proyectos, de  manera de poder analizarlos mejor. Por ejemplo, si creo un campo denominado "Línea de negocio", podremos hacer un análisis del tipo "¿Cuál es la distribución de costos por línea de negocio en los últimos 10 años?".

Esta es una funcionalidad muy potente, pero que tenía una limitación en versiones anteriores. Debíamos usar los mismos campos personalizados para toda la organización. Algo difícil de manejar, especialmente en las corporaciones. Esta nueva versión 2010, nos promete una mejora al respecto, al proveer un nivel de autonomía en la definición de estos campos.

 

Conclusión

image Esta fue una primera y breve introducción. Desde mi punto de vista, hay algunos cambios importantes que nos obligan a pensar seriamente en esta nueva versión. En la siguiente imagen, pueden ver un resumen de los principales cambios.

En próximos artículos ampliaré alguno de los temas y comentaré otros que omití en este primer artículo.

Pueden consultar la fuente de esta información en Microsoft Project 2010 “Ignite” training slide presentations.

Hasta la próxima y espero haber sido útil!

lunes, 8 de febrero de 2010

39 JAIIO Jornadas Argentinas de Informática

Como es habitual desde 1961, este año se realizarán las Jornadas Argentinas de Informática JAIIO, organizadas por SADIO.

Este año las 39 Jornadas se realizarán en la Ciudad Autónoma de Buenos Aires, del 30 de agosto al 3 de septiembre de 2010, en la UADE, Lima 717.

Las diversas actividades están detalladas en http://www.39jaiio.org.ar/.

Dentro de estas Jornadas se realizarán diversos simposios, entre ellos el 11th Argentine Symposium on Software Engineering (ASSE 2010). La presentación y el llamado a presentación de ponencias se puede ver en http://www.39jaiio.org.ar/asse.

Entiendo que varios de los temas tratados pueden ser de interés para este Grupo.

Un saludo,

Raúl Martínez

lunes, 1 de febrero de 2010

Probamos, pero… evolucionamos?

Anteriormente publiqué un artículo sobre la mejora de procesos de testing y el Test Maturity Model.

Parte de la mejora sin duda debe provenir de la continua capacitación de nuestros testers, y de lograr que ellos evolucionen y optimicen su trabajo.

Revisando hoy algunas definiciones históricamente aceptadas de qué es probar, de qué es un tester, o qué es calidad, vemos que existe una importante evolución en esas definiciones o conceptos. Y creo que esa evolución está muy bien resumida en, y tiene correlato con, las llamadas “fases mentales del tester” que describe Beizer:

· Fase 0: El testing y el debugging son aproximadamente lo mismo. El propósito único del testing es ayudar a hacer debugging.

· Fase 1: El propósito del testing es mostrar que el software funciona.

· Fase 2: El propósito del testing es mostrar que el software NO funciona.

· Fase 3: El propósito del testing no es mostrar nada, sino reducir los riesgos percibidos a un valor aceptable.

· Fase 4: El testing no es un acto, es una disciplina mental que resulta en software de bajo riesgo, sin demasiado esfuerzo en hacer pruebas.

Cómo nos impactan estas fases

Aunque sea básico en cualquier curso de testing explicar axiomas como “nunca podemos encontrar todos los defectos”, “sólo podemos probar la existencia de defectos, no su ausencia”, y otros, no siempre los entendemos, o no siempre todos los que están a nuestro alrededor en un proyecto los entienden o aceptan.

Por lo tanto, dependiendo de la madurez de la organización en que estemos trabajando, surgirán inevitablemente problemas a la hora de definir / pedir lineamientos / consensuar mecanismos de:

· Separación de ambientes (probemos en producción / probemos en desarrollo)

· Control de configuraciones (para qué?)

· Control de versiones (seguro que se necesita?)

· Registración y seguimiento de defectos (sólo luego de que los desarrolladores los aceptan…)

· Conjunto básico de métricas (horas de trabajo, qué más?)

· Criterios de reporte (sólo los defectos importantes, o quedaremos mal!!!)

· Criterios de planificación (lo más difícil o complejo al final…)

· Criterios de finalización de pruebas (fecha fija / cero defectos!!)

· ….

La imposibilidad de consensuar sobre estos ítems, afecta a la calidad de nuestro trabajo, y a nuestra “calidad de vida” durante los proyectos. Pero lo más grave, es que dificulta cumplir el principal objetivo del testing, que es el que se logra cuando se llega a Fase 4:

Ayudar a construir software
con las funcionalidades / no funcionalidad requeridas,
entregándolo a tiempo,
con costes que lo hagan financieramente posible,
y logrando la satisfacción de usuarios, clientes, y otros interesados.

Un punto muy importante sobre el que volveremos, tiene que ver con la Fase 3: cómo analizar y reducir los riesgos percibidos.

Hasta la próxima!!!!

Bibliografía:

[1] Boris Beizer. Software Testing Techniques.

jueves, 21 de enero de 2010

Probamos, pero… contra qué nos comparamos?

Anteriormente comenté sobre nuestra misión como testers, sobre cómo podemos pensar qué probar, y sobre la relación entre los servicios de TI y nuestras actividades como testers.

Pero independientemente de nuestra misión, las características del servicio brindado, las técnicas de prueba específicas, no podemos dejar fuera de nuestras incumbencias la mejora de nuestros procesos.

Esa mejora, como ocurre en general con los procesos de mejora, implica
- entender qué y cómo lo hacemos,
- compararnos con algún modelo reconocido,
- analizar cómo nos impactan los gaps (las cosas que no hacemos o hacemos de manera distinta),
- decidir qué gaps interesa cerrar según su costo/beneficio,
- asignar prioridad a los gaps a cerrar,
- planificar y ejecutar las acciones para cerrarlos,
- evaluar cómo nos fue, y definir próximos pasos / ciclos de mejora.

Si bien este ciclo es claro, no siempre es claro contra qué compararnos.

Muchas veces hemos observado que quienes comienzan a probar sistemáticamente el software producido en sus organizaciones, no dejan de hacerlo, ya que se evidencian fácilmente los beneficios. Suele darse una secuencia de aplicación de prácticas similar a ésta:

image

En esta secuencia de escenarios, se van incorporando herramientas y buenas prácticas gradualmente, a la vez que se mejora la organización propiamente dicha, y se capacita a sus recursos formalmente. Hasta aquí, seguir trabajando en el proceso de mejora a prueba y error es una posibilidad, pero suele dar mejores resultados compararnos con modelos conocidos.

En el caso de las actividades de pruebas de software, el modelo de referencia es el TMM – Test Maturity Model, elaborado por Ilene Burnstein y sus colegas en el Illinois Institute of Technology hacia 2002.

TMM

Actualmente este modelo es impulsado por la TMMi Foundation - http://www.tmmifoundation.org/html/tmmiorg.html , y comprende cinco niveles de madurez, que complementan a los equivalentes del CMMi en lo relativo al proceso de pruebas.

En cada nivel, el modelo caracteriza las Metas (Goals), que son soportados por Submetas (Subgoals) y ATRs (Actividades, Tareas y Responsabilidades).

Los niveles de madurez descriptos son:

1. Inicial (Initial). Este nivel no tiene metas, y es aquél en el que la organización no hace nada específico o definido para probar su software. Puede probar algo, pero en forma ad-hoc y casi sin registración. La prueba no es considerada crítica, no separada del desarrollo propiamente dicho.

2. De Definición de Fases (Phase Definition). En este nivel aparecen metas específicas, relacionadas con separación de testing y debugging, planificación de pruebas e institucionalización de técnicas básicas de prueba.

3. De Integración (Integration). En este nivel, se espera que el proceso de prueba esté totalmente integrado con el ciclo de vida del desarrollo y la planificación de los proyectos.
Por lo tanto, las metas específicas se relacionan con establecer un grupo de prueba con personal independiente, un programa técnico para mantener a ese grupo adecuadamente capacitado, integrar el proceso de prueba las al ciclo de vida del desarrollo, y controlar y monitorear el proceso (por ejemplo, llevando métricas de esfuerzo, costo y calendario).

4. De Medición y Gestión (Management and Measurement). En este nivel, las pruebas no son una fase más de los proyectos. Son un proceso independiente que se mide, administra y mejora.
Por lo tanto, sus metas tienen que ver con establecer programas de revisión tempranamente en el ciclo de vida, establecer programas de medición y evaluación del proceso de pruebas, y evaluar la calidad del software generado, poniendo metas para estos programas y niveles de calidad, a nivel Organización.

5. De Optimización, Prevención y Control de Calidad (Optimization/Defect Prevention

and Quality Control). En este nivel, el objetivo es optimizar, o sea, gastar menos para obtener mejor calidad. Sus metas tienen que ver con utilizar los datos recabados para prevenir la aparición de defectos (análisis de causa raíz, equipos y planes de prevención), aplicar control estadístico a los procesos, optimizarlos y mejorarlos.

Por dónde empezar

Entender qué y cómo lo hacemos, es una buena manera.

Para ello, primero veamos si el conjunto básico de buenas prácticas está siendo utilizado, y cómo:

· Separación de ambientes

· Control de configuraciones

· Control de versiones

· Registración y seguimiento de defectos

· Conjunto básico de métricas

· Uniformidad de criterios de reporte

· Uniformidad de criterios de planificación

Luego, sigamos con los demás pasos del proceso de mejora, poco a poco pero con fundamentos sólidos (léase, con convencimiento nuestro y de los niveles que tienen que brindarnos soporte y fondos).

Hasta la próxima!!!

Bibliografía:

[1] I. Burnstein. Practical Software Testing. Springer, New York, 2003.

[2] I. Burnstein, A. Homyen, T. Suwanassart, G. Saxena, and R. Grom. A Testing Maturity Model for Software Test Process Assessment and Improvement. Software Quality Professional , September 1999, pp. 1–8.

domingo, 17 de enero de 2010

WBS, el “QUÉ” del proyecto

Agregando a lo que escribió Juan Pablo sobre WBS y los que fueron ampliando, sumo algo más.

Nombre de los componentes de la WBS (1)

El nombre de la WBS y sus componentes, sustantivos y no verbos, no es menor.

Sustantivo- implica algo, un sistema, una casa, etc.

Los niveles siguientes al nombre del proyecto, nos muestran un producto y cómo se va descomponiendo en sus partes.

Verbo- implica proceso.

Los niveles siguientes nos muestran sus actividades y cómo se refinan.

Al Cliente le interesa más la primera visión, le resulta más sencillo “ver” los productos, que entender qué parte de ellos está construida al terminar una actividad de la WBS.

La regla del 100% (2)

Dice:

“El próximo nivel de descomposición de un componente de la WBS (hijo) debe representar el 100% del trabajo aplicable al componente de nivel superior próximo (padre)”.

Asegura:

Que a medida que se va descomponiendo la jerarquía, no se pierde ningún componente del Alcance.

· Cada nivel de descomposición incluye el 100% de los entregables del componente padre.

· El resultado final de la WBS es un conjunto de paquetes de trabajo que definen completamente todos los entregables requeridos.

El PMI y la WBS (3)

PMBOK

El PMI fue variando con el tiempo la definición dada en el PMBOK de la WBS.
Acá un resumen de Norman y Brotherton, traducido y ampliado con PMBOK 2008.

1987: Un “árbol genealógico” orientado a actividades.

1996 / 2000: Un agrupamiento de los elementos del proyecto, orientado a entregables, que organizan y definen el alcance total del proyecto.

2004: Una descomposición jerárquica, orientada a entregables, del trabajo a ejecutar por el equipo de proyecto para lograr los objetivos del proyecto y crear los entregables requeridos. Organiza y define el alcance total del proyecto.

2008: Ídem 2004.

Estándar de WBS

Muy recomendable el Practice Standard for Work Breakdown Structures – 2006 del PMI.

Utiliza como ejemplo la construcción de una bicicleta. Excelente explicación del tema.

Bibliografía:

(1) Work Breakdown Structure - the foundation for project management excellence.
Norman, Brotherton y Fried.

(2) Effective work breakdown structures. Haugan, G.

(3) Practice Standard for Work Breakdown Structures. PMI

viernes, 8 de enero de 2010

¿Cómo implementar Project Server sin morir en el intento?

¿Por qué fallan las instalaciones de Project Server? Si usted ha estado en una instalación fallida de Project Server, en una exitosa o se está por embarcar en un proyecto de EPM, creo que este artículo le resultará interesante.

 

La primera parte del problema

Según Chris Vandersluis, el problema empieza cuando el equipo de ventas muestra al cliente los imageresultados que pueden obtenerse con una solución de EPM sin explicar el esfuerzo requerido para reproducir los resultados en un ambiente de producción.

El otro problema es la historia y la reputación de las aplicaciones de Microsoft: son conocidas en el mercado por la capacidad de insertar un DVD en su PC y esperar sólo algunos minutos hasta que se empieza a disfrutar de los beneficios del software adquirido. A lo sumo se puede requerir un poco de capacitación adicional y no mucho más.

Lo que sucede es que no se asume que una implementación de EPM se trata de un auténtico proyecto de cambio organizacional.

 

Pero... ¿Qué es EPM? ¿la segunda parte del problema?

Permítanme citar nuevamente a Chris Vanderluis. ¿Qué entienden los clientes por EPM (Enterprise Project Management)? Según Chris, las respuestas tienden a estar en línea con lo que se muestra en la siguiente lámina:

EPM (2)

El problema no pasa sólo porque el término EPM es usado para definiciones distintas, sino que todas las definiciones son correctas y, lo que es más problemático, los clientes requieren que se implemente todo!!

Y aquí es dónde hay que ponerse firme y asesorar correctamente. Si bien, técnicamente es posible hacer todo, en la práctica esto no lo es. Y esto se debe principalmente a dos razones:

Todo lo que un EPM puede hacer no está necesariamente en la misma dirección, si queremos implementar todo, estaremos a mitad de camino o en caminos incompatibles.

La velocidad en que madura la organización respecto a su proceso de administración de proyectos es menor a la velocidad en que pueden implementarse las funcionalidades EPM. Tendremos la parte técnica resuelta, pero no el cambio cultural. Y no debemos olvidar que un proyecto de EPM, debe tratarse como un proyecto de cambio organizacional.

 

Implementación en etapas

Respecto a la forma de implementar una solución de este tipo debemos saber:

Una implementación big-bang no sirve.

Por lo clásico: demora el retorno de la inversión, por lo no tan clásico: obliga a ejecutar el cambio cultural el día de la implementación y dar un salto demasiado alto.

Una implementación rápida no sirve.

Existen muchos intentos frustrados de implementar EPM rápidamente. Estos intentos no sirven. Aunque al principio "disimulen", terminan siendo fracasos con el tiempo. Y cito nuevamente a Vanderluis, no se trata de instalar un video-game, sino de ejercitar un cambo organizacional.

image Implementación en etapas

Funciona, por las razones estándar, como rápido retorno de inversión y menos riesgos.

Fundamentalmente porque la madurez en el cambio cultural es acompañada por la evolución de los procesos y las herramientas.

Es conveniente procurar una primera etapa rápida con alto retorno de inversión, para facilitar el éxito de las próximas etapas.

Pero no se debe creer que una primera etapa se ejecuta en 2 meses. 4 a 8 meses, dependiendo del tamaño de la organización y su situación particular, puede ser un parámetro razonable.

Factores de éxito

Hechas las breves aclaraciones, la siguiente es una lista de factores de éxito, no exhaustiva, pero bastante completa.

imageEs un proyecto: implementar un EPM es un proyecto, hay que manejarlo como tal.

Proceso de cambio: no es un proyecto tecnológico, hay que manejarlo como un proceso de cambio.

Equipo: se necesitan especialistas técnicos (seguro que se necesitan), pero fundamentalmente especialistas en procesos de administración de proyectos. La tecnología no representa más del 30-40% del proyecto.

Equipo técnico: la herramienta (Project Server) es compleja. Se necesitan profesionales con experiencia certificada. Se debe tener en cuenta que existen al menos 4 certificaciones en Project / Project Server y 4 más en SharePoint otorgadas por Microsoft. Las empresas consultoras también son certificadas por Microsoft en EPM y Colaboración (esto ocurre cuando sus profesionales están certificados y poseen implementaciones exitosas en clientes).

SharePoint es importante: no se trata sólo de Project Server, se necesitan manejar las dos herramientas, Project Server y SharePoint. Una buena solución requiere mucho de SharePoint y esto es más de lo que se ofrece out of the box.

No a los pececitos de colores: la herramienta debe adaptarse al proceso y no la inversa! No se necesita implementar todo lo que hace Project Server, no hay que dejarse llevar por los pececitos de colores, hay que concentrarse en las necesidades y en el nivel de madurez de la organización para soportar el cambio. Este es un error clásico.

image De a poco: implementar en etapas, dar tiempo a que el cambio cultural sea asimilado y que las nuevas necesidades aparezcan. No hacer esto puede hacer malgastar el esfuerzo de mejora. Y cómo se suele decir, los procesos de cambio son de única vez, no hay que desaprovecharlos.

Sponsor: cómo todo proyecto, requiere un sponsor. Cuando se trata de un cambio organizacional, se requiere un sponsor de alto nivel, si es posible, representante del negocio.

Preparar un equipo para el futuro: no conviene descansar  en la consultoría. Un consultor puede ayudar en la implementación, pero el proceso debe ser mantenido por la propia organización, debe tener un "dueño del proceso" y un "equipo de mejora".

Prueba tecnológica: es altamente recomendable comenzar desde el día 1 de proyecto con el Plan de Tecnología, una prueba de concepto y una preparación de ambientes. Esto puedo demorar 1 a 3 meses.

Participación del usuario: es importa involucrar y hacer partícipe al usuario desde el día 1. Y esto aplica en todos los niveles: líderes de proyecto, miembros del equipo, jefes funcionales, áreas de Calidad, PMO, Gerencia, etc. Debemos asegurarnos que la solución sea "usable" y que ayude al trabajo del día a día de los equipos. No debe ser impuesta, ni se debe minimizar su impacto.

¿Por qué estamos haciendo esto? siempre será conveniente preguntárselo para obtener los drivers del proyecto. Es la única formar de lograr la satisfacción y poder enfocar mejor los esfuerzos de mejora.

 

Bibliografía

Inicialmente este artículo iba a estar basado en la experiencia y las lecciones aprendidas de nuestra participación en proyectos de EPM. Esto es así, y hay muchas de estas lecciones aquí reflejadas.

Afortunadamente, en el camino, encontré un paper de Microsoft (en inglés), que refleja muchos de estos aspectos y con el que coincido ampliamente. Este es el material y enlace por si desean consultarlo:

 

Hasta la próxima

Como siempre, espero haber sido útil y también espero feedback.

Saludos!

martes, 29 de diciembre de 2009

¿Project Server?

imageMicrosoft Project Server es la herramienta de Microsoft pensada para soportar lo que comúnmente se conoce como Enterprise Project Management (EPM). Si bien es una herramienta bastante conocida, a menudo no está claro su alcance ni las diferencias con Microsoft Project. Este artículo pretende resolver las inquietudes alrededor del tema. Espero que les sea útil.

Introducción y un poco de historia

Hasta el año 2002, la herramienta ofrecida por Microsoft para administrar proyectos era "Project", una herramienta principalmente orientada a resolver la problemática del calendario, Gantt, camino crítico y balanceo de recursos. Esta es una herramienta de amplia difusión, muy útil, pero no pensada para resolver la problemática de múltiples proyectos.

Por esta razón, hacia el año 2002 nace la primera versión de Project Server (sus posteriores versiones fueron la 2003, 2007 y 2010, esta última en su fase beta). Project Server trae novedades importantes en relación al manejo de múltiples proyectos:

  1. imageLos proyectos se guardan ahora en una base de datos centralizada.
  2. El pool de recursos se guarda en una base de datos centralizada y es compartido entre proyectos.
  3. El punto 1 y 2 hace que ahora sea posible reportar los reales de los proyectos, a través de la funcionalidad de Time Sheet.
  4. Todo esto hace posible planificar la demanda de recursos.
  5. La integración entre Project Server y SharePoint hace que sea posible manejar los homes de proyectos.
  6. Toda esta información nos brinda una amplia capacidad de análisis que puede ser muy bien explotada a través de tecnología OLAP.

Este es un muy breve resumen, pero nos da una idea preliminar de las diferencias entre las herramientas.

La herramienta y los procesos

Project Server es una herramienta muy potente y tal como mencioné anteriormente soporta el EPM. Ahora bien, para soportar el EPM, el EPM tiene que existir y este, según mi humilde opinión, ha sido uno de los temas más difíciles de aclarar a la hora de implementar Project Server.

Intentaré profundizar un poco: para implementar Project (el tradicional) en una organización, alcanza con comprar la caja, instalar el software y en el mejor de los casos tomar una capacitación.

Sin embargo, esto no es así con Project Server. Para implementar Project Server, se requiere que la organización esté trabajando con algún proceso de Administración de Proyectos y de Administración y Control de la Cartera de Proyectos. Dependerá de la madurez de este proceso, qué funcionalidades de Project Server podremos implementar.

Pero por sobre todas las cosas deberemos tener siempre en claro que la herramienta debe adaptarse al proceso y no el proceso a la herramienta. Esto hace que una implementación típica de Project Server esté en el orden de los 4 a 6 meses (pudiendo ser más o menos dependiendo del caso).

Los pilares de Project Server

image Para entender un poco más que información maneja Project Server, les dejo un "modelo de datos" conceptual y muy resumido, pero que permite ver hasta donde llegan las entidades que maneja:

Project Server permite registrar todo tipo de actividades: los proyectos, pero también las propuestas o actividades continúas (como el mantenimiento, soporte o la operación).

Por otro lado maneja los Recursos, cuya organización se refleja en la RBS (Resource BreakDown Structure).

Los recursos se asocian a la WBS de los proyectos a través de las asignaciones y sobre estas últimas se pueden cargar los presupuestos. También es posible reflejar el trabajo Real de los proyectos (a través de la funcionalidad de TimeSheet).

Finalmente, cada proyecto posee un Home de Proyecto (en SharePoint) que registra los issues, riesgos, entregables y documentos del proyecto (entre otras entidades).

Finalmente existen los campos personalizados, que nos permiten categorizar Proyectos y Recursos principalmente. Una buena utilización de estos campos enriquece notablemente el análisis que posteriormente podemos hacer a través de los cubos OLAP del producto.

Insisto, es un modelo muy simplificado e ilustrativo para tener una visión conceptual del producto.

La funcionalidad completa de Project Server

El último punto que quiero tratar en este primer artículo de Project Server es el resumen de las funcionalidades que maneja el producto. Les dejo un mapa mental, que siempre es más entretenido de leer que una guía del producto :-)

Project Server

Arquitectura

Si bien escapa al objetivo de este artículo, les pego (a título informativo) un mapa de la arquitectura:

image

Concluyendo y próximos artículos

Como habrán podido ver, Project Server es una herramienta muy potente y compleja a la vez. Hay mucho más para escribir sobre el tema, especialmente relacionado con la forma más conveniente de encarar este tipo de proyectos o determinados puntos a tener en cuenta sobre algunas funcionalidades específicas. Espero poder tratar estos temas en próximos artículos.

Como siempre, que les haya sido útil y no dejen de hacerme llegar sus comentarios.

Enlaces interesantes

Hasta la próxima!

Seguinos en linkedin