Diseño de software
El diseño de sofware es algo que va mas alla de una discusion que surge a partir de la necesidad de un nuevo feature o la solucion a un bug reportado en un producto.
El diseño del software personalmente considero que tiene etapas y estas son:
1.- Desglosamiento de los requerimientos(funcionales y no funcionales), es una buena practica antes de empezar con el desarrollo de software entender que se desarrollara y dividir cada requerimiento en en una pieza trabajable(cada requerimiento llegara a convertirse en un epic, que a su vez estos epics se convertiran en historias y posteriormente en tareas)
2.- Implementacion de los test cases, son importantes los test cases ya que los desarrolladores se basaran en ellos para poder implementar cada featura acordemente y esto a su vez ayudara al equipo de control de calidad a hacer un mejor control de calidad
3.- Diseño de la interfaz de usuario(si es que el feature involucra una), en este diseño no trabajan los desarrolladores pero participan activamente para interiorizarse de los requerimientos del PO(product owner)
4.- Lineas de guia(Guide lines), antes de empezar con el desarrollo de un determinado producto es necesario acordar con el equipo que guia de desarrollo se va seguir, es decir que estandares de codificacion se emplearan, esto con el objetivo de que leer el codigo de otras personas sea mas facil leer, revisar y por ende dar soporte.
5.- Diseño de la arquitectura, es muy importante tener reuniones con todo el equipo de desarrollo para determinar una solucion robusta, escalable y mantenible en el tiempo de tal manera que ese codigo pueda ser mantenido por otros equipos en un futuro
6.- Diseño de base de datos y/o procedimientos almacenados(Si asi lo requiere el feature y/o software) ; La base de datos al ser el corazon de cualquier sistema es algo que se debe trabajar con el mayor cuidado posible, ya que de ello depende la eficiencia y robustez del sistema a la hora de guardar informacion, modificarla o recuperarla
7.- Diseño de test unitarios, todo sofware con el tiempo crece, es decir se van agregando nuevos features(funcionalidades), quitando features o corriegiendo funcionalidades(bug fixing), por tal motivo se tiene que ir verificando constantemente la integridad del software, ver si no se rompieron o dañaron funcionales que existian previamente, esto se debe verificar de manera automatica. Tambien despues de escribir un nuevo feature se debe verificar que este feature hace lo que tien que hacer, que cumpla su objetivo. Todos estos propositos pueden ser cubiertos con test unitarios
8.- Diseño de test automatizados, evidentemente no todos los features en un sistema pueden ser cubiertos por test automatizados, pero la mayoria deberia ser cubierto por ellos para economizar costos y tiempo, un test automatizado garantiza la estabilidad, robustez y funcionalidad de un sistema.
9.- Versionamiento de codigo, es muy importante diseñar de que manera se versionara el codigo elaborado, es decir que sistema de versionamiento se utilizara, si se utilizara integracion continua y/o desarrollo continuo(CI/CD), etc