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:
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.