Qué ha de tener un buen software

¿Nunca te has preguntado qué es lo que hace que un programa sea realmente bueno?  Normalmente, nos fijamos en su diseño, en las utilidades que tiene y en su facilidad de uso. ¿Pero es eso todo? La respuesta es no. Si bien es cierto que estos factores juegan un papel muy importante, también lo es que no son los únicos a tener en cuenta.  A continuación, puedes ver qué características deben reunir las buenas aplicaciones.

Usefulness

Robustez

Flexibilidad y mantenimiento

Seguridad

Diseño

Usefulness

Usefulness es una palabra que comprende los términos utilidad + usabilidad, por lo tanto, cuando hablamos de que un software tiene que ser Usefulness, nos referimos a que tiene que ser provechoso o beneficioso para el público al que lo queremos dirigir y además tiene que ser fácil de utilizar e intuitivo.

Como usuario siempre buscas lo más cómodo y mejor, por lo tanto esperas que el programa te aporte mucho sin tener que pasar todo un proceso de aprendizaje, beneficiarte de las grandes bondades del mismo en cuestión de segundos. Cuando no encuentras eso, el siguiente paso suele ser buscar otra alternativa que sí lo haga.

Robustez

En este punto has encontrado un programa que te aportará grandes beneficios y que además, serás capaz de utilizarlo a la perfección en cuestión de segundos.

Vamos en el camino correcto, pero… ¿Qué hay de la robustez? ¿Estás seguro de que el programa hace todo lo que se supone que debe hacer y de forma correcta? ¿Qué pasaría si hicieras alguna acción inesperada?

Pase lo que pase, hagas lo que hagas, el programa tiene que funcionar de la manera esperada.

Para garantizar eso, los desarrolladores utilizamos las llamadas pruebas automatizadas unitarias y las pruebas automatizadas funcionales, que a pesar de alargar un poco el proceso de programación, comprueban que toda tu aplicación funcione de la manera esperada, ahorrando mucho tiempo en las pruebas de la aplicación y minimizando considerablemente el error humano que se puede producir durante este proceso.

Fiabilidad

Llegados al punto donde el producto cumple con lo explicado en los apartados Usefulness y Robustez, es hora de hablar de la fiabilidad. Básicamente consiste en evitar que las actualizaciones provoquen errores, asegurarse que no habrá cortes de servicio y que si por causa mayor hay alguno, este durará el mínimo tiempo posible.

Para tener un mayor control sobre las actualizaciones y evitar errores o cortes de servicio innecesarios, los desarrolladores utilizamos algún sistema de control de versiones (VCS).

Estos sistemas facilitan la administración de las distintas versiones del producto desarrollado, así como las posibles especializaciones realizadas, permitiéndonos de esta manera, entre otras cosas, revertir los cambios o volver a una versión del programa anterior en cuestión de segundos.

Flexibilidad y Mantenibilidad

Con lo mencionado anteriormente, ya tenemos un programa que está bastante bien, pero no lo suficiente.

Por ejemplo, imaginemos que ahora quieren añadirle otra funcionalidad rompedora, pero mientras estaban concentrados en conseguir que el programa cumpliera todo lo anterior se han olvidado totalmente de que éste requiere un mantenimiento constante y que además algún día podrían querer ampliarlo. Con todo han hecho una aplicación de un solo archivo y 100.000 líneas de código que además no han comentado y los nombres de funciones y variables no tienen ningún sentido. ¡Vaya desastre! Es entonces cuando se dan cuenta de la importancia de que el código sea fácilmente legible, interpretable y flexible.

Para lograr esto hay cuatro puntos clave:

  • Utilizar Patrones de diseño de software: Establecen la forma en la que organizar el código en función de una situación determinada. Con ellos  se consigue crear un código limpio y flexible.
  • Comentar bien el código: El código de un programa no tiene por qué tocarlo siempre la misma persona, de hecho muchas veces son varias personas las que lo hacen, por este motivo y porque no tenemos una memoria perfecta existe un sistema para que podamos detallar muy brevemente algunos aspectos de cada una de las partes del código. Esto nos permite saber rápidamente qué hace y cómo funciona cada parte de él.
  • Utilizar nombres descriptivos: Hay que usar nombres que describan lo mejor posible cada uno de los componentes del programa como pueden ser archivos, directorios, funciones, clases, variables, etc.
  • Utilizar una estructura coherente: Hay que ser organizados y poner cada cosa en su sitio, hay que conseguir que la estructura de carpetas y archivos sea lógica y coherente.

Con todo esto aplicado,  tanto realizar el mantenimiento como añadir nuevas funcionalidades será mucho mas cómodo y rápido. Gracias a eso, el programa es más rentable y los desarrolladores podemos emplear mucho más tiempo en mejoras para el programa.

Seguridad

Aunque como usuario no percibirás la seguridad, los desarrolladores tenemos que tenerla muy presente.

Si el programa maneja datos sensibles, un fallo de seguridad podría arruinarlo todo, por lo que tenemos que asegurarnos que el programa es seguro y por lo tanto tus datos quedan altamente protegidos.

Diseño

Ahora sí que ya sabes todo lo que un buen programa debe tener. Pero… ¿Quién va a querer un programa estéticamente nefasto? El programa puede ser el mejor del mercado pero si el diseño no está cuidado, poca gente se lo creerá y los que se lo crean, echarán de menos un buen diseño.

Por ello, un buen programa tiene que ir acompañado de un buen diseño.