viernes, 23 de noviembre de 2012

Economizar con Software Quality Assurance: Parte I


Economizar con Software Quality Assurance: Parte I, por Hernan Gil

En el presente artículo veremos qué es Software Quality Assurance (SQA), cuáles son los beneficios económicos de su implementación y cómo interviene en las etapas del proceso de desarrollo.

La implementación de una disciplina de SQA tiene como principal objetivo aumentar la calidad de los entregables durante todo el proceso de desarrollo. Muchos requerimientos de calidad –sobre todo, aquellos que tienen que ver con la performance, la usabilidad, la carga, la disponibilidad, etc. – pueden ser tratados como riesgos. Es decir que el hecho de que uno de ellos no se cumpla implica un peligro.
Entonces, al asegurar la calidad del software durante su proceso, se disminuyen los riesgos asociados y se aumenta la predictibilidad del desarrollo de software. Esto trae aparejada una serie de beneficios de variada visibilidad. Entre los que más se destacan, podemos nombrar:

  • Reducción de los tiempos de desarrollo, principalmente, el tiempo de retrabajo generado en la fase de testing.
  • Optimización del uso de los recursos, que disminuye el costo de la infraestructura necesaria para soportar la aplicación.
  • Disminución del costo de mantenimiento, ya que se generan aplicaciones más seguras y estables.
  • Aumento de la permeabilidad al cambio y facilidad para medir su impacto.
  • Cumplimiento de los requerimientos, tanto los funcionales como los de calidad.
  • Seguimiento de los estándares definidos.
  • Provee información sobre la calidad del proyecto a los stake holders que tienen menor conocimiento técnico.
  • Los desarrollos se vuelven más predecibles, lo cual facilita las estimaciones.

Actividades de SQA en el proceso de desarrollo

SQA es una disciplina que está compuesta por una serie de actividades que acompañan al proceso de desarrollo. El objetivo de estas tareas es aumentar, administrar y monitorizar la calidad de los entregables producidos.

Fases y disciplinas de UP

Para identificar estas actividades y el momento oportuno para realizarlas, es necesario revisar el ciclo de vida de un proyecto. Para esto nos basamos en el análisis de fases/disciplinas/esfuerzo realizado en UP, porque es un proceso muy difundido en el mercado; sin embargo, el mismo análisis puede aplicarse a otros procesos de desarrollo. Analizando el diagrama de Fases, notamos que el esfuerzo de cada disciplina varía según la fase del proyecto.
De aquí se deriva que el momento para controlar la calidad de cada disciplina es cuando mayor esfuerzo se le dedica.
En iniciativas de SQA saludables, el impacto de ésta debería verse reflejado en todos los artefactos que se generan en el proceso de desarrollo. No debería limitarse sólo al testing o verificación funcional, lo cual es una acepción bastante difundida de la función de SQA, pero diametralmente desacertada.

En una perspectiva más amplia del rol sinérgico de SQA en un proyecto de desarrollo, podemos encontrar, entre otras, las siguientes actividades:

  • Verificación de requerimientos: Tiene como objetivo demostrar que la definición de los requerimientos definen realmente el sistema que el usuario necesita o el cliente desea.
  • Validación y verificación de requerimientos: Tienen como objetivo demostrar que la especificación de los requerimientos definen realmente el sistema que el usuario necesita o el cliente desea y que el sistema satisface dichas necesidades.
  • Evaluar la arquitectura: Es una actividad muy importante para evaluar la factibilidad de cumplir con los requerimientos no funcionales y detectar de forma temprana los principales riesgos asociados al proyecto.
  • Control de diseño: Se enfoca en validar el diseño lógico de los componentes, su distribución e interacción; en identificar componentes que puedan ser reutilizables, y en el alcance de los requerimientos de calidad definidos por parte de cada uno de ellos.
  • Control de código: Se subdivide en dos actividades:
    • Control estático del código: Es la validación del código contra un conjunto de reglas, best practices y estándares predefinidos.
    • Control dinámico del código: El control se focaliza en el uso de los recursos que hace la aplicación y la cobertura del código que hacen los tests unitarios.
  • Testing Funcional: Se realiza cerca del final de la etapa de desarrollo, y se encarga de controlar el cumplimiento de los requerimientos funcionales de sistema y de detectar los errores de mayor visibilidad para el usuario.
  • Test de stress: Se enfoca en evaluar el desempeño de la aplicación durante la simulación de momentos pico de actividad.

Tareas previas
Es necesario tener en cuenta que, para realizar algunas de estas actividades, primero hay que realizar otras, como las siguientes:
- Definición de estándares y best practices de desarrollo.
- Elección de herramientas para documentar y desarrollar.
- Otras
La realización de estas tareas se justifica por el solo hecho de que, para poder validar la calidad de cualquier proceso, es necesario contar, previamente, con la definición, requerimiento o estándar contra el cual validar.
En la segunda entrega veremos los siguientes temas: Análisis de costos, ¿Por dónde empezamos?, Métricas de calidad y Conclusiones