Ingeniería del software

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.

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