Construir software de calidad requiere del manejo de «buenas prácticas» y metodologías que permitan llevar un control más detallado de cada uno de los procesos involucrados en la mantenibilidad y el ciclo de vida de un sistema.
Temas
- 1 Definición de ingeniería del software
- 2 Transformación hacia una solución técnica
- 3 En costos la regla del BBB
- 4 Ciclo de vida de la ingeniería del software
- 5 Requisitos
- 6 Diseño
- 7 Generalidades de un diseño
- 8 Variables que afectan el proceso de desarrollo del software
- 9 Recomendaciones para diseñar software
- 10 Algunos requerimientos no funcionales
- 11 Clasificación de los requerimientos no funcionales
- 12 Tres pincipios básicos del diseño
- 13 Pricipos generales del diseño
- 14 Acomplamiento y cohesión
- 15 Acomplamiento en el diseño
- 16 Abstracción en el diseño
- 17 Encapsulamiento en el diseño
- 18 Modularización en el diseño
- 19 Construcción
- 20 Pruebas
- 21 Implantación
- 22 Ciclo de vida del software
Definición de ingeniería del software
Prodría decirse que es una disciplina formada por un conjunto de herramientas, métodos y técnicas que se utilizan en el desarrollo de aplicaciones o sistemas de información. En la ingeniería del software se incluye el análisis previo de la solución, el diseño del proyecto, el desarrollo del software, las pruebas necesarias para confirmar su correcto funcionamiento y la implementación del sistema.
Transformación hacia una solución técnica

En costos la regla del BBB

Escoger dos opciones: bueno y rápido o bueno y barato.
Ciclo de vida de la ingeniería del software
Se puede decir que es una estructura aplicada al desarrollo de un producto de software y generalmente se incluyen las etapas mencionadas a continuación:
Requisitos
Se refiere a la identificación de las necesidades de clientes y otros interesados en el sistema y a la generación de especificaciones con un nivel de detalle suficiente acerca de lo que el sistema debe hacer.
Diseño
En esta etapa se transforman los requerimientos en un diseño o modelo en el cual se construye el sistema. Hace alusión esencialmente a tomar decisiones respecto a la manera en qué se resolverán los requisitos establecidos previamente. Con esto se identifican claramente las partes del sistema y dará las pautas para empezar la construcción.
Generalidades de un diseño
- Un «buen diseño» es la base de la construcción
- A menudo se suele perder la fundamentación en el diseño.
- En arquitectura de software hay que definir todos los principios y conceptos
- Rapidez ≠ Agilismo
El software es frágil, es por eso que se deben hacer las siguientes reflexiones
- ¿Qué es diseñar software?
- Valor del diseño
- Es necesario eliminar la palabra artesanía
Variables que afectan el proceso de desarrollo del software
- Cambios en las necesidades del cliente
- La influencia del personal que se involucra en el proceso del desarrollo.
- Cada producto es diferente
Recomendaciones para diseñar software
- Planear la construcción
- Mitigar riesgos
- Crear procesos para la construcción para aplicaciones robustas
- Si no hay un “buen” diseño hay factibilidad de hacer reprocesos
- Los riesgos técnicos se deben conocer en el diseño
Algunos requerimientos no funcionales
Estos se enfocan más en el funcionamiento del sistema, es decir, las restricciones o condiciones ligadas a las propiedades del sistema
- Rendimiento
- Seguridad
- Disponibilidad
- Estabilidad
- Escalabilidad
Clasificación de los requerimientos no funcionales
- Producto: Usabilidad, eficiencia, disponibilidad, seguridad
- Organizacionales: de entorno u organizacionales y de desarrollo
- Externos: éticos, legislativos y reguladores
En conclusión, «un buen diseño» disminuye el costo de los cambios


Tres pincipios básicos del diseño
- Diseño robusto
- Diseño con calidad
- Independencia de la técnica o tecnología
Pricipos generales del diseño
- Abstracción
- Encapsulamiento
- Modularización
Acomplamiento y cohesión
- Principio POO: “alta integridad o cohesión, bajo acoplamiento”.
- Cohesión (Unir): asignación concreta de responsabilidades
- Acoplamiento: grado de relaciones entre los diferentes componentes.
Acomplamiento en el diseño
- En un diseño se debe tener la menor cantidad de relaciones posibles
- Hay que buscar el balance en el acoplamiento y la cohesión
- Un sistema sin acoplamiento no es funcional
Abstracción en el diseño
Elementos más relevantes
- software sea reutilizable
- bajo acoplamiento
- ndependencia
- Flexibilidad
“En la abstracción se tienen en cuenta los elementos más esenciales del problema”
En un sistema es necesario tener en cuenta las interfaces públicas, ir de los más global a lo más específico

Encapsulamiento en el diseño
No solo es la definición de las propiedades públicas y privadas
- Oculta la complejidad interna de un componente
- Minimización de las dependencias
“La interfaz de un componente debería revelar lo mínimo como sea posible del comportamiento interno”

Modularización en el diseño
Reducir la complejidad de un problema para encontrar soluciones simples
- Reutilización
- Desarrollo en paralelo
- Simplicidad del diseño de software
Construcción
Se refiere a la creación del sistema mediante desarrollo y prueba individual de las partes que lo componen, para su posterior integración, es decir conectar entre sí la partes relacionadas.
Pruebas
Actividad referida a la realización de pruebas sobre el sistema o parte de este a efecto de verificar si se satisfacen los requerimientos previamente establecidos e identificar y corregir fallas.
Implantación
Llevar a cabo una trasición del sistema desde el entorno de desarrollo hasta el entorno donde se ejecutará de forma definitiva y será utilizado por los usuarios finales
Ciclo de vida del software
