"-ilidades" en ingeniería de software

Tony Aug Gravedad ágil
Tony Aug, cofundador y consejero delegado de Nimble Gravity, comparte sus ideas sobre lo que hace que los sistemas de software sean de alta calidad. Cuando se trata de desarrollar software, no se trata sólo de escribir código que funcione. La verdadera medida del éxito es el rendimiento del sistema de software a largo plazo. Tanto si eres un desarrollador experimentado como si acabas de empezar, este artículo es una lectura obligada para cualquier persona interesada en crear software que resista el paso del tiempo. 

Dado que la ingeniería de software no deja de cambiar, es crucial reflexionar sobre qué hace que los sistemas de software sean de alta calidad. Una forma de hacerlo es fijándonos en las "-habilidades". Se trata de características que garantizan que nuestro software sea sólido, fiable y fácil de mantener. Si nos aseguramos de que nuestro software tiene estas cualidades, podemos estar seguros de que es fiable y funciona bien para las personas que lo utilizan. 

Los ingenieros de software no acuñamos el término "-ilidades", pero a lo largo de los años las hemos convertido en una piedra angular de nuestra forma de arquitecturar y construir procesos y sistemas, así que tenemos algunas ideas sobre cómo aplicarlas.

A grandes rasgos, una "-ilidad" es una forma de requisito que tiene (o a la que obligamos torpemente a tener) el sufijo -ilidad.El sufijo nos ayuda a pensar en los requisitos típicos de una forma cómoda y fácil de recordar.

A lo largo de mis años de experiencia, me he encontrado con muchas "-habilidades" que son esenciales para crear sistemas de software de máxima calidad. En esta entrada del blog, profundizaremos en las 8 "-habilidades" que considero más útiles en la arquitectura de software:

1. Estabilidad: ¿el sistema o proceso sigue funcionando y siendo fiable en diversas condiciones y usos?¿Se rompe o arroja resultados extraños en los casos extremos?¿Se rompe aleatoriamente por sí solo? 

2. Escalabilidad: ¿más trabajo = más problemas?¿Cómo gestiona una carga de trabajo creciente (quizá usuarios o datos o tráfico)?¿Se reduce el rendimiento en esas condiciones?Lo ideal sería saber si esta -habilidad es un uppy o un outty, por tomar prestada la terminología del ombligo. 

3. Usabilidad: ¿es intuitivo?¿Es fácil y eficaz?¿Se cumplen las necesidades y expectativas?   

4. Facilidad de mantenimiento: actualizaciones, modificaciones y reparaciones, ¡vaya!¿Son fáciles?¿Son costosas?¿Podemos hacerlas sin mucho riesgo de introducir nuevos errores o problemas? 

5. Testabilidad: esta capacidad ayuda a determinar el estado del sistema.Naturalmente, en este caso nos referimos a las pruebas de control de calidad y a la capacidad de confirmar que todo funciona correctamente antes de poner algo en producción.Sin embargo, pensamos de forma más amplia para incluir también el funcionamiento en producción (pensemos en páginas de estado del sistema y comprobaciones de salud). 

6. Accesibilidad: igualdad de acceso para todos, independientemente de las capacidades físicas. 

7. Explicabilidad: no está reservada únicamente a la ciencia de datos, pero es donde más a menudo aparece: "cómo y por qué un modelo ha hecho una predicción concreta".Más genéricamente, ¿podemos entender las decisiones y acciones? 

8. Extensibilidad: podemos ampliar (de ahí lo de extensibilidad) o modificar para añadir nuevas capacidades (¡también una -inidad!) o características sin tener que cambiar significativamente la arquitectura subyacente.También podríamos llamar a esto "capacidad de crecimiento". 

Estas 8 "-habilidades" son sólo la punta del iceberg cuando se trata de crear sistemas de software de alta calidad. Existen innumerables "-habilidades", cada una con sus propias ventajas y aplicaciones. Como ingeniero de software, es importante estar al día de las últimas tendencias y las mejores prácticas para crear software que satisfaga las necesidades de los usuarios y las partes interesadas. 

Así que, si tiene alguna "habilidad" que no hayamos mencionado, o si hay otras que considera esenciales para el éxito de la ingeniería de software, ¡coméntenoslo a continuación! 

 

¿Listo para construir lo que realmente importa?

Hablemos