La calidad por la calidad

¿Te has preguntado alguna vez cuál es la definición de calidad de software? ¿Y de calidad de código? ¿Qué relación hay entre ellas? ¿Acaso no son la misma cosa?

Según Mark Seeman, calidad de software se refiere a las características externas del software, y se evalúa en la medida en que el software cumple su propósito, i.e. resuelve un problema, mejora la vida de alguien.

Por otra parte, calidad del código se refiere a la legibilidad y la mantenibilidad del código. O dicho de otra forma, a la capacidad que tenga de modificarse fácilmente a lo largo del tiempo.

También hay quien se refiere a estos términos como “calidad externa” y “calidad interna”.

Claramente, parece que son cosas diferentes, pero ¿hay alguna relación entre ellas?

Hay una escuela de pensamiento que defiende que lo principal es la calidad externa.

Mientras el software haga lo que tiene que hacer, “da igual” cómo esté hecho por dentro.

Lo cual ha dado lugar a técnicas y metodologías ampliamente usadas en la industria como Behaviour-driven Development (BDD), Outside-in TDD, etc.

Por otra parte, hay otra escuela que da más peso a las cualidades observables del código.

¿Es legible? ¿Es fácil de modificar? ¿Está cubierto por tests? ¿Es, en definitiva, código limpio?

Todas estas son cualidades deseables en el código, y efectivamente perseguirlas suele traer un efecto positivo.

El problema, viene cuando comenzamos a perseguir la calidad del código por el mero hecho de tener código súper limpio y bien diseñado, y nos olvidamos de la calidad externa.

Es decir, perseguimos la calidad del código como un fin en sí mismo.

Nos olvidamos del propósito último del software, que es que resuelva un problema.

Evidentemente, un código que cumple todos los principios, que tiene todos los patrones, que se lee perfectamente, pero que no resuelve ningún problema, no podemos decir que sea software de calidad.

Ni siquiera podemos decir que sea software bien diseñado.

¿Qué es software bien diseñado, entonces?

En mi opinión, es aquel código que hace que el software, no solo funcione y aporte valor hoy, sino que permita seguir haciéndolo en el futuro.

En este sentido, calidad de software y calidad de código están estrechamente relacionadas y no se pueden concebir una sin la otra.

La calidad el software es la capacidad de resolver un problema real en el presente. La calidad del código permite continuar resolviendo problemas en el futuro, y lo hace habilitando la evolución del mismo para acomodar cambios, o nuevas necesidades.

Ojo! No necesariamente haciendo código que pueda manejar todos los casos posibles.

Tampoco tenemos una bola de cristal.

Sino escribiendo código que sea sencillo de cambiar cuando las necesidades cambien, mediante la simplicidad, y que podamos verificar que continúa funcionando y aportando valor, mediante las pruebas automatizadas.

Es decir, que el código evolucione con las necesidades.

Por eso alguna gente (yo incluido) le llamamos a esta forma de diseñar software “diseño evolutivo”.

Es una forma de diseñar que pone la calidad del código al servicio de poder seguir entregando funcionalidad de forma sostenible.

Es la que personalmente aplico desde hace años y la que enseño en mis formaciones.

Por eso estoy preparando una formación avanzada sobre Diseño de Software, que vamos a lanzar en Septiembre.

Y para que aprendas realmente cómo yo consigo que mi código se mantenga simple y capaz de evolucionar a medida que lo hacen los requisitos, la formación va a consistir en el desarrollo de un proyecto real de principio a fin.

Hasta finales de agosto puedes adquirir la formación a precio reducido, así que yo no me lo perdería.

Te dejo más información aquí.

Nos vemos pronto.

Un abrazo, Pedro