El principio KISS

El nombre del principio es el acrónimo del inglés Keep It Simple, Stupid o Keep It Short and Simple. El sentido, se puede imaginar. Es en realidad la aplicación de lo que se conoce como La Navaja de Occam (Ockham’s Razor) aplicado a la informática. Todo se basa en una simple premisa: “dadas dos soluciones a un problema determinado, la más simple es probablemente la correcta”.

Aplicado al mundo del desarrollo de software, lo que se conoce como el principio KISS, implica resolver los problemas del modo más sencillo posible y posiblemente ésta sea la mejor solución.

Código
Desde el punto de vista del código tiene más implicaciones a parte de la simplicidad:

  • Un código más simple es más sencillo de mantener, lo que ahorrará tiempo en el futuro.
  • Además, será más sencillo de comprender por cualquier persona que entre en el equipo de desarrollo.
  • Cuesta menos de escribir
  • Menos lineas equivalen a menos bugs, lo que significa código de mayor calidad

Gestión de proyectos
Pero todo esto carece de sentido si desde no se tiene también en cuenta desde el nivel de gestión de los proyectos de software. Es estupendo pensar en miles de funcionalidades para un producto pero ¿qué sentido tienen? Primero habrá que hacer lo más simple para luego ir añadiendo más cosas a una base sencilla y comprensible.

Hay que construir software sobre una base sólida y unos requisitos simples y concretos. Esto permitirá desarrollar unas funcionalidades simples y robustas en menos tiempo y una vez el producto tiene cara y ojos, se pueden ver las carencias y se pueden encontrar nuevas posibilidades.

Pensar en cientos de funcionalidades, además tiene otras implicaciones menos obvias:

  • Tests de usuario menos frecuentes pero mucho más complejos y largos.
  • Bugs más difíciles de encontrar y de solucionar.
  • Time-To-Login (tiempo entre que se empieza el desarrollo hasta que se tiene una primera release) mucho más alto.

Muchas de las metodologías ágiles se basan en parte en este principio para desarrollar un software evolutivo en vez de crear gran cantidad de especificaciones y documentos que pueden tardar años en implementarse y meses en integrarse.

En resumen, antes de escribir un método, piensa si no lo estás complicando demasiado y antes de añadir un requisito a una release… piensa si realmente es necesaria en ese momento. Recuerda: KISS.

Test de Joel, autoevaluación

El otro día llegué a un interesante post sobre qué preguntarle a nuestro futuro empleador en una entrevista. Después de leerlo me di cuenta de que si en una entrevista llego a preguntar todo eso y encima valoro las respuestas que me dan, no sé sin encontraría trabajo en el inframundo del desarrollo de software (si trabajas en un sitio que cumple, por ejemplo, 8 de los 12 puntos, por favor ¡contrátame!), por lo menos en España.

Lo importante en definitiva es que se basa en The Joel Test: 12 Steps to Better Code (versión en español). Son 12 sencillas preguntas que esconden toda una filosofía de buenas prácticas deseables en cualquier entorno de desarrollo. También googleando he encontrado un excelente artículo sobre estas 12 preguntas aplicadas al desarrollo web. Estas son:

  1. ¿Usas control de versiones?
  2. ¿Puedes tener listo el producto en un solo paso?
  3. ¿Compilas el producto a diario?
  4. ¿Tienes una base de datos de errores?
  5. ¿Solucionas los errores antes de escribir nuevo código?
  6. ¿Tienes una planificación actualizada?
  7. ¿Tienes unas especificaciones?
  8. ¿Tienen los programadores un entorno de trabajo tranquilo?
  9. ¿Tienes las mejores herramientas que puedes comprar?
  10. ¿Tienes testers?
  11. ¿Escriben código los candidatos durante su entrevista?
  12. ¿Haces pruebas de usabilidad de “vestibulo”? (O sea, a cualquiera que pase por allí y esté dispuesto)

Aunque en realidad se podrían hacer muchas más, si se realizan la mayoría de ellas probablemente se esté trabajando de forma decente. Si no, la cosa se puede poner complicada: posiblemente vives diariamente en un infierno incomprensible.

Ahora toca la parte complicada. ¿Qué nota sacamos en mi empleo actual? Vamos a ver

  1. Sí, desde hace un tiempo y por supuesto para nuevos desarrollos. Subversion que no es ni el mejor ni el peor pero tiene herramientas chulas como TortoiseSVN y VisualSVN. Además está bastante extendido y se encuentra fácilmente soporte y ayuda.
  2. No, de momento. Es algo necesario y está planificado. Supuestamente con MsBuild o Nant lo podemos conseguir.
  3. Sí. Para el producto actual usamos TeamCity con cierto éxito, gratuita para pequeños grupos. Eso sí, faltan aun los scripts completos del paso 2.
  4. Sí, usamos Redmine y una herramienta interna (bastante inservible, la verdad), aunque no se si el Redmine me acaba de gustar del todo. En fin, mientras tengamos todos los errores registrados bueno es.
  5. Más o menos. A veces el tiempo apremia, pero se debería hacer. La compilación del paso 3 comprueba los tests unitarios, lo que no significa que encuentre todos los bugs, obviamente.
  6. Sí, lo intentamos, aunque a veces vamos dando palos de ciego sin saber muy bien el rumbo.
  7. Eso creo. El flujo de generación de especificaciones es bastante malo, por lo que muchas veces no son lo suficientemente rigurosas ni explícitas.
  8. Depende de la oficina. En la que yo estoy es excelente.
  9. No. Siempre hay pegas para adquirir herramientas pero estamos mejorando.
  10. No oficialmente. Se prueban las cosas bastante mal y sin rigor.
  11. No, lo que me atañe y voy a ver qué puedo hacer al respecto. De momento me leere la Guerrilla Guide to Interviewing a ver qué saco de interesante.
  12. No. Parece que ahora quieren contratar a unos expertos en usabilidad para guiarnos, aun así dudo que se realicen pruebas de este tipo

Así que mi JoelScore(tm) es de unos 6/12. Aprobado raspadillo y por los puntos 1, 3 y 4, lo cual no es por tirarme flores, pero creo que he contribuido bastante a instaurar estas herramientas y procesos. A ver si el año que viene llegamos a 8 o 9/12, lo que estaría bastante bien.

En resumen, aconsejo a todo el mundo que trabaja en este mundillo que lea las preguntas, que lea lo que significan las preguntas y se autoanalice para ver en qué estado está y qué puede hacer por mejorarlo.

Jornadas de Testeo de Software 2008 (día 3)

Con esta última sesión concluyen las JTS2008, con un balance creo que positivo. Como en todo, hay cosas que mejorar pero hemos seguido viendo cosas interesantes.

De esta jornada destacaría la ponencia de Lee Copeland sobre los cómo saber cuándo terminar de testear. Conseguir testear todo es imposible por lo que hay que sopesar si vale la pena seguir o es mejor dar el producto como suficientemente probado y listo. Cierto es que a veces los deadlines o decisiones de los estamentos superiores son quien deciden cuándo debe publicarse algo, pero aun así, las distintas métricas nos sirven para conocer el estado real del producto.

La ponencia de Peta Heck sobre “Crear y validar requerimientos de usuario”, aunque no centrada en el testeo nos recuerda que un buen testeo no se puede realizar si no hay una buena captura de requerimientos, sin ambigüedades ni lagunas, que permita conocer exactamente como debe funcionar un producto y por lo tanto permite realizar un testeo adecuado.

El resto de presentaciones han aportado más pinceladas y ideas sobre cómo implantar el testeo a todos los niveles, haciendo siempre hincapié en unos buenos requerimientos y en la necesidad de la implicación de todos los elementos que participan en el ciclo de desarrollo, no solamente de los equipos de test.

Por la tarde, un par de ejemplos de casos reales de implantación y uso de equipos de testado en Zurich y Metro de Madrid así como otros sobre el uso de algunas herramientas para gestionar el ciclo de desarrollo y testeo: desde la captura de requisitos hasta el testeo de aceptación. Ha quedado patente la importancia de la trazabilidad para conocer qué se implementa, cómo, cuando y quién; para ello, Telelogic presenta DOORS, un software comercial muy completo y también se habla de TestLink (también tienen un blog), un ejemplo de software libre apto para este tipo de tareas. Por supuesto, menos completo que el comercial pero aun así muy válido para PYMEs que no pueden costearse grandes soluciones.

He echado en falta el testeo de seguridad informática, especialmente en entorno web, ya que por ejemplo es el que en realidad ha preocupado más en mi entorno de trabajo dadas las posibles implicaciones que pueden tener los agujeros de seguridad, quizás no tan visibles como un fallo detectado por usuarios finales pero cuyas consecuencias pueden ser desastrosas y comprometer nuestros sistemas. A ver si un día me animo y hago una presentación sobre el tema. ;-)

También me gustaría haber visto algún caso de éxito más cercano de empresas locales (o a nivel estatal) de mediano tamaño que hayan visto mejorados sus productos gracias a la introducción de técnicas más o menos formales de especificación y testeo.

En cuanto a lo que me ha sobrado… en general no me gustan las grandes consultoras ni los mercaderes y por norma las soluciones que proponen desde luego no son escalables ni asumibles por la gran cantidad de PYMEs españolas que necesitan un punto de partida para mejorar sus procesos de calidad del software, además de que suelen hablar de conceptos vagos sin aportar realmente valor a la audiencia. Pero supongo que tiene que haber de todo.

Nos vemos el año que viene.

Link | JTS2008: segunda jornada, 4 abril, mañana