Principios de la Ingeniería de Software

#ingenieriaDeSoftware #universidad
Aunque no existen principios universales reconocidos, se han establecido varios intentos por definirlos. El libro "Fundamentals of Software Engineering" de Ghezzi et al. propone 7 principios fundamentales para el desarrollo de sistemas de software:

  1. Rigor y Formalidad

    • Descripción: La documentación y el código deben ser claros y consistentes.
    • Beneficios: Aumenta la confiabilidad, facilita la verificación y el mantenimiento del sistema.
    • Importancia: Evita ambigüedades que dificulten la identificación de defectos y la realización de cambios.
  2. Modularidad

    • Descripción: Dividir el sistema en partes más pequeñas (módulos) que puedan diseñarse y desarrollarse de manera independiente.
    • En Programación Estructurada: Módulos como procedimientos y funciones.
    • En Programación Orientada a Objetos: Módulos formados por clases que representan entidades del problema.
    • Beneficios: Simplifica el diseño, desarrollo, pruebas y mantenimiento.
  3. Abstracción

    • Descripción: Identificar la esencia del problema, extrayendo características comunes de ejemplos específicos.
    • Ejemplo: Abstraer diferentes elipses a partir de sus características comunes.
    • Beneficios: Facilita la comprensión y manejo de la complejidad del sistema.
  4. Anticipación al Cambio

    • Descripción: Prepararse para cambios frecuentes en los requisitos y corrección de defectos.
    • Estrategias: Gestionar configuraciones y versiones del software de manera controlada desde las fases iniciales.
    • Beneficios: Mejora la adaptabilidad y reduce el impacto de los cambios.
  5. Generabilidad

    • Descripción: Buscar soluciones generales en lugar de especializadas.
    • Beneficios: Reutilización de módulos y soluciones, aumentando la eficiencia del desarrollo.
    • Ejemplo: Un mismo módulo puede ser utilizado en múltiples partes de la aplicación.
  6. Incrementalidad

    • Descripción: Desarrollar el sistema en etapas, entregando versiones parciales y mejoradas progresivamente.
    • Estrategias: Crear prototipos o comenzar con un núcleo básico y añadir funcionalidades.
    • Beneficios: Permite la retroalimentación continua del usuario y la adaptación a requerimientos cambiantes.
  7. Separación de Intereses

    • Descripción: Dividir diferentes aspectos del problema para abordarlos de manera aislada.
    • Estrategias: Primero enfocarse en la corrección, luego en la eficiencia.
    • Beneficios: Facilita el manejo de la complejidad y mejora la calidad del software.