La calidad del software empresarial y la eficiencia

Iván Garcerant en su post Modelo de Calidad Tradicional del Software me ha puesto en la ruta para llegar a un listado de lo que podrían ser los elementos de calidad en el software. Sin embargo, mi opinión no es tan benéfica como la de Iván. La lista que ofrece mcarrillo en su blog me ha invitado a escribir un poco al respecto, y en esta primera entrega me ocuparé de la eficiencia como la menciona mcarrillo, vista como un problema de economía de recursos de la máquina.

Debo distinguir aquí dos categorías de software muy diferentes, el software de control, en el que la usabilidad cuenta poco y la eficiencia y seguridad de procesos es la máxima prioridad, y el software empresarial, donde la usabilidad y la experiencia de usuario es lo que más cuenta. Es sobre éste último tipo de software del que me ocupo y al que me refiero en esta nota.

La eficiencia

Es cierto que no queremos que un sistema tome días para algo que podría tomarle pocos segundos, pero en la actualidad, la preocupación por la eficiencia en cuanto a uso de recursos de la máquina (tiempo de procesador, consumo de memoria, etc.) ha dejado el lugar a la preocupación por la eficiencia en la usabilidad, en la experiencia de usuario.

Los modernos sistemas operativos: Windows Vista, Mac OS X, y varias distribuciones de Linux en las que se incluye lo que antes se llamaba Beryl son una muestra de que la eficiencia, vista como economía en el uso de recursos del sistema, no son una preocupación de las empresas. El software de usuario es para personas, para seres humanos como todo el mundo que tienden a buscar similitudes entre el mundo físico y el mundo de los escritorios virtuales.

Las personas nos sentimos más cómodas frente a ventanas que parecen estar hechas de algún material físico, que tienen sombras o transparencias, que se bambolean al moverlas, que pueden ser aventadas, etc. que ante consolas en ASCII o ventanas minimalistas con un consumo mínimo de recursos. Al final, nuestras computadoras modernas pueden hacer que las ventanas y los botones brillen y aparenten texturas y volúmenes físicos sin que el usuario pueda notar el uso intensivo de procesador, memoria, tarjeta de gráficos o disco duro que hace el sistema. Lo importante es que nos sea más natural, más cómodo.

Creo que medir la calidad de un sistema de software empresarial respecto a su eficiencia vista como economía de recursos es un error en estos momentos en los que tenemos máquinas con gigas de memoria RAM y hasta cuatro núcleos de procesador, pues un compromiso con la economía de recursos puede poner en segundo plano aspectos de usabilidad que son, al final, mucho más importantes. El software lo usan las personas, y a las personas no les importa mucho que el procesador, normalmente inactivo, esté vuelto loco dibujando brillitos siempre y cuando esas decoraciones hagan el sistema más atractivo y fácil de reconocer.

Mi mejor ejemplo en cuanto a eficiencia de usabilidad contra eficiencia en economía de recursos son los juegos. Los videojuegos modernos tienen una de las características que más envidiamos los desarrolladores de software empresarial: una usabilidad natural, intuitiva, fácil de aprender. Y son a la vez, y por mucho, las aplicaciones de cómputo más demandantes de recursos que un usuario común y corriente puede ejecutar en su computadora personal.

Es cierto que actualmente, con la computación móvil y las aplicaciones Web, el problema de la eficiencia y la economía de recursos ha vuelto a cobrar fuerza, sin embargo, los rápidos aumentos en las capacidades de memoria y procesador en los celulares y en el ancho de banda móvil apuntan a liberar a los desarrolladores de las preocupaciones sobre la economía de recursos para que se concentren en la usabilidad del software.

Y es que la usabilidad es un problema de comunicación humana, es decir, de máquinas (programadas por humanos) con humanos de carne y hueso. La comunicación humana, ya lo apuntaron Bateson y Lacan, está muy lejos de ser eficiente, todo lo contrario, es redundante tanto como le es posible, y es esa forma comunicativa la que los sistemas enfrentan al comunicarse con personas. Un sistema que ofrece poca redundancia en sus mensajes y controles de usuario será siempre mucho más difícil de usar, no en vano tenemos comandos de menú, botones, menús emergentes, atajos de teclado y hasta gestos de mouse para realizar la misma acción en un mismo programa.

Para un servidor, la medida más importante de la calidad de un sistema es su experiencia de usuario, y si para conseguir una mejor empatía por parte de las personas debemos poner a trabajar el procesador, pues lo pondremos a trabajar, después de todo, para eso lo compraron.

 

Como sea, y al margen de opiniones personales, vale la pena visitar el blog de mcarrillo y su post acerca de la calidad del software.

3 thoughts on “La calidad del software empresarial y la eficiencia

  1. Saludos.

    Lamento no estar de acuerdo con tu valoración de la eficiencia. En concreto, para el ejemplo de los vídeo juegos el uso de recursos es ciertamente intensiva, pero esto no significa que sean ineficientes. Muy por el contrario, los vídeo juegos son de las aplicaciones más avanzadas de hoy en día, siempre utilizando los mejores algoritmos y las más avanzadas técnicas de programación.

    La eficiencia no es limitarse en el uso de recursos, sino el hacer lo más a partir de lo que tenemos. Es cierto que hoy ponemos a trabajar a nuestros procesadores en aspectos relacionados con la experiencia de usuario, pero aún en este caso la forma en que los ponemos a trabajar es justamente eficiente, ya que es la forma optima de realizar la tarea.

  2. Ivan,

    Como siempre es un gusto recibir tus comentarios, incluso puedo decir que es un gusto discrepar contigo.

    No es que quiera yo enredarme en una discusión estéril. Como en otras ocasiones, creo que estamos más de acuerdo que lo que parece a simple vista, el problema, creo, es que no he sabido decir las cosas más claramente.

    Es cierto que los videojuegos son el ejemplo por excelencia de la excelencia en programación, donde se pueden observar las mejores prácticas en usabilidad, pruebas de usuario, eficiencia y economía en el uso de recursos, etc.

    Los últimos juegos como Crysis lo que buscan es un realismo casi cinematográfico, realismo que sin duda requiere algoritmos muy complicados y llevados a excelentes niveles de eficiencia, pero Crysis no es el único juego en el mercado. Tenemos también juegos como Turok que instala unos 16 gigas ve a saber de qué. Si a eso le llamamos eficiencia, me temo que entonces sí entendemos las cosas de manera muy distinta.

    Mi punto no era que por la usabilidad nos pusiéramos a dilapidar los recursos de la máquina, pues esto nos llevaría a programas lentos que a su vez afectarían la experiencia de usuario. Mi punto es que la eficienica vista como economía de recursos ya no es una verdadera preocupación. Te pongo algunos ejemplos que más bien están del lado del desarrollo:

    El uso de predicados delegados para búsquedas en listas genéricas en C#. Para realizar una búsqueda en una lista genérica sobre el tipo T, List<T>, desde la versión 2.0 del framework .Net podemos utilizar predicados de la forma MyList.Find(Predicate) donde Predicate es una función de devolución Booleana con un argumento de tipo T. Pues bien, esta forma tan conveniente de escribir, sin duda mucho más fácil y rápida para los desarrolladores, no genera el código más eficiente para búsqueda en colecciones, pues hace un recorrido exhaustivo sobre la lista, equivalente a hacer un ciclo “for” sobre los elementos de la lista. Un diccionario basado en una HashTable o algo parecido sin duda sería mucho más rápido y eficiente, sin embargo, en la mayoría de los casos, es más fácil y rápido (en tiempo de desarrollo) usar el Find de las listas genéricas que implementar modos eficientes de búsqueda en colecciones.

    Otro ejemplo lo podemos ver en SOA, donde la eficiencia se busca igualmente en el desarrollo, es decir, en la velocidad con la que es posible implementar un nuevo servicio o un conector para un sistema heredado, y no tanto en el rendimiento concreto de este subsistema.

    Un ejemplo más serían los ViewState de ASP .Net que pueden crecer casi al infinito llevando información la mayoría de las veces redundante. Sin embargo, el tiempo de desarrollo para hacer más eficiente estos sistemas y reducir el consumo de ancho de banda es demasiado comparado con los pequeños sacrificios en consumo de conexión a Internet.

    Mi punto no es que ahora nos dediquemos a hacer sistemas llenos de lucecitas y animaciones, sino que es más importante preocuparnos por el nivel comunicativo humano mientras los recursos de la máquina nos lo permitan.

    Pasando a confesiones, debo decir que yo mismo me preocupo bastante por la eficiencia de los sistemas, sobre todo cuando se trata de llamadas a bases de datos o consumo de servicios externos, pero sigo pensando que, a menos que se comprometan los procesos reales, la eficiencia no es una prioridad en lo que respecta a la calidad del software.

    Por cierto, hablando de “eficiencia” y videojuegos, le recomiendo a todo el que no los conozca, que le de una miradita a los “demos” de 64 kb o cosas parecidas de Demoscene (http://en.wikipedia.org/wiki/Demoscene).

  3. Saludos.

    Bueno, estoy de acuerdo contigo, al menos hasta cierto punto. Pienso que a medida que vayas desarrollando tu serie de reflexiones sobre los factores de calidad del software podremos ir afinando las diferencias.

    Tus conclusiones son correctas, una vez que se haya definido a la eficiencia como el uso modesto de recursos. A su vez, en los ejemplos que pones, también resultan correctas incluso si asumimos que la eficiencia sea el uso correcto u optimo de los recursos. Simplemente es cierto e indiscutible que es fácil encontrar ejemplos de desperdicio de recursos hoy en día.

    Por otra parte, me recuerdas a una expresión que leí en algún lado justamente sobre el punto de los recursos de computación; en el comentario se mencionaba que un día viviríamos en la “era de la abundancia” ya que duplicando el poder de computo y el ancho de banda, así como la capacidad de los discos, llegaría un día en que simplemente no podríamos escribir software capaz de aprovechar los recursos.

    Si hoy vivimos en la era de la abundancia pues bien; dediquemos recursos a cosas como mejorar la experiencia de usuario. Sin embargo, de algún modo, cada vez que uno adquiere una computadora más potente, uno quiere hacer MAS que con su computadora anterior…

    …y para hacer más, se requiere no desperdiciar.

    ¿Qué puede ser ese más? Hace unas semanas estaba yo conversando en la oficina y recordábamos nuestros viejos equipos 386 y 486, comparando que esos equipos son en realidad más lentos que mi actual equipo de teléfono celular. El punto de la conversación fue que esos equipos daban la talla, ya que lo que uno hacia era solo cosas sencillas, como escribir una carta o trabajar con una hoja de cálculo.

    Hoy en cambio, mi teléfono me ofrece (aún si yo no lo use) Internet, llamadas de voz, mensajería por varios protocolos, fotografías, tanto la cámara como la edición de las mismas, vídeo, reproducción y grabación… y muchas otras cosas; sin embargo, la cantidad de recursos no es muy superior a digamos, una pentium de 200 megahertz de finales de los noventa.

    ¿Como cabe todo eso en el teléfono? Ah! dije, misterios de la programación eficiente ;-)

    Así que estoy de acuerdo contigo, hasta un punto.

    Seguiremos hablando cuando escribas sobre los otros factores de calidad.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s