lunes, 18 de abril de 2011

Calidad III : La Relatividad del concepto

En los comentarios del post sobre la Calidad del Desarrollo de Software II tanto Walter Risi comoErnesto Kiszkurno aportaron un par definiciones distintas y muy interesantes de la calidad de software.

El concepto de la calidad de Software, en general, es decir Que hace que un software sea de calidad es uno de los temas que más discusión ha causado dentro de la comunidad de sistemas desde hace décadas.

En los 2 posts anteriores sobre Calidad del desarrollo hemos evitado justamente este tema ateniéndonos nada mas (pero nada menos) que al concepto, bastante más concreto, de que es lo que hace que un desarrollo sea de calidad. Es decir, para usar la metafora-que-odio-de-la-fabricación, que calidad tiene su construcción, su Calidad Interna.

Pero para no esquivar el bulto al problema más general, podemos plantearnos entonces , Que determina que un software sea de calidad?

El Juego

Uno de los sistemas que más utilizamos en nuestra época de estudiantes en Exactas (UBA) fue un juego (como no podía ser de otra manera) de estrategia en tiempo real llamado Dune II. Fue un juego que nos apasionó y en el cual podíamos pasarnos horas jugando hasta terminar las misiones. No obstante ese juego tenia un par de bugs molestos, uno de ellos con la Inteligencia Artificial de la maquina que justamente en determinadas situaciones no respondía bien en la defensa y el otro con el manejo del gusano de arena que ha veces se tildaba y quedaba ciclando en algún loop escondido.

Si nos hubieran preguntado allá en el tiempo pero incluso ahora que opinabamos de la Calidad de ese desarrollo, creo no exagerar en decir que era Sobresaliente, excepcional.
Hubiera agregado algo si la empresa dueña del juego arreglaba esos bugs? Probablemente hubiera sido lindo, quizás un poquito mas interesante pero....eso no hubiera cambiado la percepción de la Calidad del producto que teníamos, era sencillamente de Calidad.

Entonces, que es lo que determina que un producto de software sea de Calidad....y bueno... si no queda otra, ensayemos algunas respuestas habituales:

1) que sea utilizado por mucha gente?

Windows es el caso arquetípico de software utilizado por mucha gente que no obstante....digamos que jamás ha sido famoso por su Calidad (piensen sino en el caso cercano del Vista y ni que hablar de otros...ejem fallidos como ....alguien se acuerda del Milleniun?)
El software de Mac en general tiene asociado una fama de mucha mayor Calidad y es utilizado por muchisima menos gente.

2) que sea fácilmente usable?

El problema para determinar aquí que tal sistema es de Calidad por su usabilidad, más allá de los recientes libros y normas sobre usabilidad de Diseñadores gráficos, es que los usuarios tienden a encariñarse poderosamente con la interfaz de usuario que conocen. Siempre prefieren lo conocido por sobre lo novedoso.
Piensen sino en lo que diría un usuario de WordStar o WordPerfect si tuviera que usar el Word actual o, viceversa, si un usuario de Word tuviera que usar el Wordstar y para ambos la usabilidad de la herramienta que usan/usaban era formidable. Ni que hablar de la pelea entre los amantes de Vi versus Emacs versus editores de linea tradicionales.
Para los amantes de linux cualquier linux es totalmente fácil de usar pero si le damos una consola de comandos a una persona que siempre uso Windows...bueno...inmaginense su juicio.

3) que Tenga cero defectos?

Permitan me una sonrisa irónica, Jeje, no se conocen casos de software que se alegue que sean de Calidad por no tener Defectos sencillamente porque todavía no ha habido un software que no tenga defectos.

4) Que tenga muchísima funcionalidad y features?

Más allá de los casos conocidos como los productos de Office y para que vean que no la tenemos en contra de Microsoft ambos autores de este blog hemos utilizado un par de productos de GIS (Sistemas de Información Geográfica) de una empresa anglosajona que se podrían definir como el paraíso de la acumulación de funcionalidad y features. Uno de ellos se focalizaba en plotear mapas, el otro para hacer carga, procesamiento y consultas en sistemas de información Geográfica.
Cada uno de los productos tenia cientos de features y comandos, muchas veces con funcionalidad superpuesta que creaban una especie de frankestein gordo y pesado, un mamotreto de distintas funcionalidades mezcladas adonde nada se hacia realmente bien o perfomante porque todo era una solución de compromiso para poder hacer muchas cosas que casi nunca se necesitaban.

5) que Sea de bajo Costo y termine dentro de la planificación?

Seguramente son requisitos para el Gerente de un proyecto, el de Marketing o Ventas e incluso los interesados o StakeHolders pero...y los usuarios?

6) Que tenga buena calidad de desarrollo?

Esto justamente es lo que hablamos en el post anterior, y así como creemos profundamente que es un requisito indispensable por el mismo motivo que un edificio sin buenos cimientos se derrumbará, no es suficiente para que todo el producto, el sistema sea de Calidad. Es decir, podemos tener un sistema de una calidad de desarrollo excepcional pero que no sea útil para el o los usuarios en cuestión.

La raíz del problema

Justamente el problema que tiene cada una de las definiciones que intentamos y que han sido intentadas alguna vez, es que la CALIDAD es un término relativo. La calidad que es adecuada para una persona o tipo de persona puede ser totalmente inadecuada para otra.

Jerry Weinberg en su libro "Quality Software Management: System Thinking" habla justamente sobre este tema, y en particular como este concepto de "relatividad" se esconde incluso en
algunas de las definiciones más famosas de Calidad de Software.

Por ejemplo la de Crosby: "Calidad es el cumplimiento y satisfacción de los requerimientos", es decir que un sistema es de calidad si cumple con sus requerimientos.

El tema, o kid de la cuestión y que deberíamos preguntarnos es:
"Requerimientos de Quien o para Quien?", entonces, para ser más precisos deberíamos decir:

"Calidad es el cumplimiento y la satisfacción de los requerimientos de algunas personas"


Para cada persona el mismo producto tendrá distintas "calidades" y de hecho entonces cada sentencia que alguna vez se ha hecho o se hará acerca de la calidad del un sistema es una sentencia acerca de lo que consideran que es la calidad un determinado conjunto de personas.

Por ello, la próxima vez que estés desarrollando software, siempre, siempre preguntate:

"Quien o quienes son las personas detrás del concepto de calidad que están pidiendo para este sistema en particular"

4 comentarios:

  1. Estimados,

    Primero que nada, agradezco la mención.
    Segundo aporto dos definiciónes más de la calidad incluyendo la de Weinberg:

    La calidad es
    … es adecuación al uso. Joseph Juran
    … valor para alguna persona. Gerald Weinberg

    Tercero hago un comentario. En muchos casos, dado lo subjetivo del tema, es conveniente hablar de calidad en terminos de atributos (internos o externos) puesto que de esta manera llegamos a una definición mucho más operativa que nos permite operar sobre ella. La ISO 9126 por ejemplo define una serie de atributos y a partir de ellos luego uno puede operar tomando decisiones sobre el proceso de desarrollo de software mucho más fácilmente.

    Ejemplo. En una organización el atributo mantenibilidad puede ser muy importante puesto que apuntan a tener un grupo de desarrollo chico dedicado solo a lo nuevo que no quiere estar haciendo grandes arreglos sobre el código. En otra organización pueden privilegiar el "time-to-market" y por ende tomar atajos en el desarrollo aún sabiendo que luego tendrán que "arreglar" las cosas que hicieron a las apuradas. En este caso no hay un criterio mejor que el otro dado que cada uno valora cosas distintas.

    Para poder evaluar si llegamos al nivel de calidad que queremos es necesario primero definir qué es calidad para nosotros y luego medir para ver si llegamos a lo que queríamos.

    Saludos y seguimos pensando..

    ResponderEliminar
  2. Para mí un desarrollo de calidad es _ágil_ (que responde de manera rápida y flexible a los cambios), es _eficaz_ (cumple muy bien con los requerimientos prioritarios) y es _sustentable_ (reutilizable y capaz de interoperar con el desarrollo de otras aplicaciones)

    Saludos

    ResponderEliminar
  3. Que tal Ernesto! solo un tema acerca del tercer punto, en mi experiencia el unico caso en que no es importante centrarse en la mantenibilidad del código es cuando se programan procesos de-una-sola-corrida como los de una migración adonde lo que importa ahi es la calidad de los datos, la transformación pero no el código porque cada programa se tira después de usarse una vez.
    En el resto de los casos si se esta desarrollando un producto, en lo que me toco a mi participar, siempre es importante centrarse en la calidad porque de lo contrario uno podrá no perder el time-to-market de la primera vez pero en el mediano plazo se metió hasta la cintura en la cienaga del codigo-espagheti, jeje.
    Obviamente no hay reglas absolutas y a veces se puede dejar de lado por un tiempo muuuy corto el foco en la calidad para llegar a un deadline de ventas o cubrir una oportunidad, claro. Pero luego habrá que redoblar esfuerzos porque el caos no perdona.
    saludos!

    ResponderEliminar
  4. Ideas Chile, gracias por el comentario y excelente definición tambien. En definitiva honra todo principio central de las metodologias agiles:


    1 - responder ante el cambio
    2 - Dar valor al cliente/usuario
    3 - Que 1 y 2 se puedan sostener en el tiempo en cada iteración o etapa de desarrollo (iba a decir sprint, je).

    Me gusto. Saludos

    ResponderEliminar