Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 20

Ingeniería de Software

Una introducción completa


Introducción
• La Ingeniería de Software es una
disciplina que se encarga del diseño,
desarrollo, mantenimiento y gestión de
sistemas de software. A diferencia de la
programación tradicional, que se centra en
escribir código, la ingeniería de software se
preocupa por la calidad, funcionalidad,
fiabilidad y sostenibilidad del software.
Importancia de la ingenieria de
software

Calidad: La ingeniería de software


Eficiencia: Optimizar el proceso de
busca asegurar que el software
desarrollo permite entregar
cumpla con estándares de calidad, lo
soluciones en menos tiempo y con
que se traduce en menos errores y un
recursos adecuados.
mejor desempeño.

Evolución: Con el paso del tiempo, las Seguridad: En un mundo digitalizado,


necesidades cambian. La ingeniería de la seguridad es primordial. La
software permite que los sistemas se ingeniería de software se encarga de
adapten y evolucionen según las diseñar sistemas seguros y protegidos
demandas del negocio o del usuario. contra amenazas.
Aplicaciones en la Vida Diaria Cada día, interactuamos con Diferencia con la Programación Mientras que la
múltiples aplicaciones y sistemas que han sido desarrollados programación se enfoca en el acto de escribir código para
mediante principios de ingeniería de software. Desde resolver problemas específicos, la ingeniería de software
aplicaciones bancarias, sistemas de navegación, redes abarca un enfoque más amplio, considerando todo el ciclo
sociales hasta sistemas embebidos en electrodomésticos, la de vida del software, desde la concepción de una idea hasta
ingeniería de software juega un papel crucial en su su despliegue y mantenimiento.
funcionamiento y confiabilidad.
Historia de la Ingenieria de
Software

A finales de los años


60, la industria del
software enfrentó lo Esta crisis llevó a la
que se conoce como la comunidad a
"crisis del software". A reflexionar sobre la
Orígenes: La Crisis del medida que los necesidad de
Software (1960s) sistemas informáticos metodologías y
crecían en complejidad, técnicas más
se volvía más difícil estructuradas para el
desarrollar software de desarrollo de software.
calidad en tiempo y
forma.
Nacimiento de Lenguajes de Alto Nivel

A finales de los 50 y principios de los 60, emergieron


lenguajes de programación de alto nivel como
FORTRAN y COBOL, que permitían escribir programas
más complejos de una manera más comprensible.

Estos lenguajes facilitaron la creación de software,


pero también hicieron evidente la necesidad de
métodos de desarrollo más formales.
Modelo en Cascada: Primeras Metodologías
Estructuradas (1970s)
• En los años 70, el modelo en cascada fue
introducido por Winston W. Royce como una
de las primeras metodologías estructuradas
para el desarrollo de software.
• Este modelo propone una secuencia lineal y
ordenada de etapas, desde la definición de
requisitos hasta el mantenimiento.
Revolución Ágil (1990s - 2000s)
• Con la necesidad de adaptarse
rápidamente a los cambios,
surgieron metodologías ágiles como
Scrum, XP (Extreme Programming) y
otras que enfatizan la flexibilidad y
la colaboración.
• Estas metodologías buscan
entregas rápidas y frecuentes de
software funcional, con un énfasis
en la retroalimentación del cliente.
Era Moderna: Integración y
Entrega Continua
• Con la llegada del desarrollo
en la nube y la necesidad de
despliegues más frecuentes,
surgen prácticas como la
Integración Continua (CI) y la
Entrega Continua (CD) que
buscan automatizar y optimizar
el proceso de desarrollo y
despliegue de software.
• Herramientas como Jenkins,
Travis CI y otros sistemas de
CI/CD se vuelven esenciales en
el desarrollo moderno.
Ciclo de vida del software

• El Ciclo de Vida del Software (SDLC, por sus siglas en inglés) se refiere a las etapas o
fases que se siguen durante el desarrollo de un sistema o aplicación software. Este ciclo
garantiza que se cumplan los requisitos de calidad y funcionalidad del software.
• Fases del SDLC:
• Requisitos: Recopilación y análisis de las necesidades del usuario o cliente.
• Diseño: Definición de la arquitectura, componentes y diseño de interfaces.
• Implementación: Codificación del software.
• Pruebas: Verificación y validación del software para asegurar su correcto
funcionamiento.
• Despliegue: Distribución e instalación del software en el entorno del usuario.
• Mantenimiento: Corrección de errores, actualizaciones y mejoras del software post-
despliegue.
• Objetivo: Asegurar que el software desarrollado sea de alta calidad, cumpla con las
expectativas del usuario y sea entregado en tiempo y forma.
Métodos Ágiles
• Definición: Los métodos
ágiles son un conjunto de
metodologías de desarrollo de
software que se centran en la
colaboración, adaptabilidad y
entregas rápidas y frecuentes de
valor. Priorizan la interacción
humana y la respuesta al cambio
por encima de procesos rígidos y
herramientas.
Principales Metodologías:
• Scrum: Marco de trabajo que divide el desarrollo
en ciclos (sprints) de duración fija, generalmente de
2-4 semanas, al final de los cuales se entrega un
incremento de software.
• Kanban: Método que se enfoca en la entrega
continua sin sobrecargar al equipo de desarrollo,
utilizando un tablero visual para gestionar el flujo de
trabajo.
• Extreme Programming (XP): Enfatiza la
satisfacción del cliente y la adaptabilidad. Se destaca
por prácticas como programación en parejas y
desarrollo orientado a pruebas.
• Lean Software Development: Inspirado en la
producción Lean, busca eliminar desperdicios en el
proceso de desarrollo y entregar valor de manera
eficiente.
Herramientas y Entornos de
desarrollo
Las herramientas y entornos de desarrollo son aplicaciones y sistemas diseñados para asistir a los desarrolladores en la
creación, prueba y mantenimiento del software. Facilitan la codificación, depuración y colaboración en proyectos.

Eclipse: Ampliamente IntelliJ IDEA: Ofrece Visual Studio: Desarrollado


utilizado para el desarrollo herramientas avanzadas para por Microsoft, es una
IDEs (Entornos de Desarrollo
en Java, aunque soporta el desarrollo, especialmente herramienta principal para el
Integrado):
múltiples lenguajes a través en Java. Tiene una versión desarrollo en C#, VB.NET, y
de plugins. gratuita y otra profesional. otros lenguajes.

Git: Sistema de control de


versiones distribuido. SVN (Subversion): Sistema Mercurial: Similar a Git, es
Control de Versiones: Permite a los equipos centralizado de control de un sistema de control de
colaborar en un código versiones. versiones distribuido.
fuente y gestionar cambios.

Travis CI: Servicio de CircleCI: Plataforma de CI/CD


Jenkins: Servidor de
Herramientas CI/CD integración continua usado que acelera el desarrollo
automatización open source
(Integración Continua y para construir y testear automatizando el proceso de
para integración y entrega
Entrega Continua): proyectos alojados en GitHub compilación, prueba y
continua.
y Bitbucket. despliegue.
Diseño de Software

• El diseño de software es la fase en la


que se define la arquitectura,
componentes, interfaces y otras
características del sistema antes de la
codificación. Es el plan que guía la
construcción del software.
Principios fundamentales:
• Cohesión: Grado en el que las responsabilidades de un módulo están
estrechamente relacionadas.
• Acoplamiento: Grado de dependencia entre diferentes módulos.
• Abstracción: Representar la esencia de un objeto, eliminando detalles
complejos.
• Encapsulación: Ocultar los detalles internos y mostrar solo la
funcionalidad necesaria.

Patrones de diseño:
• Singleton: Asegura que una clase tenga una única instancia y
proporciona un punto de acceso a ella.
• Factory: Centraliza la creación de objetos de una superclase.
• Observer: Permite que un objeto notifique a otros sobre cambios en su
estado.
• MVC: Divide la aplicación en tres componentes interconectados:
Modelo, Vista y Controlador.
Calidad de Software

• La calidad de software se refiere a cuán bien


se ajusta el software a los requisitos
funcionales y no funcionales que guían su
diseño y desarrollo. Afecta la satisfacción del
usuario, la rentabilidad y la seguridad del
software.
Fiabilidad: Capacidad del
Mantenibilidad: Facilidad
software de funcionar
Métricas: con la que el software
correctamente bajo
puede ser modificado.
condiciones definidas.

Usabilidad: Facilidad con


Eficiencia: Capacidad del
la que los usuarios
software de proporcionar
pueden utilizar el Pruebas:
un rendimiento óptimo
software y obtener
con recursos mínimos.
resultados deseados.

Unitarias: Evalúa la Integración: Evalúa la


Sistema: Evalúa el
funcionalidad de un cooperación entre
software en su totalidad.
componente específico. diferentes componentes.

Aceptación: Determina si
el software cumple con
los requisitos del cliente.
Tendencias Futuras

La nube ofrece escalabilidad, Uso de algoritmos de IA para


flexibilidad y ahorro de automatizar tareas, analizar
Desarrollo orientado a la Integración de Inteligencia
costos, lo que lleva a un grandes conjuntos de datos y
nube: Artificial:
aumento en el desarrollo mejorar la experiencia del
orientado a la nube. usuario.

Aplicaciones basadas en la Dividir aplicaciones en


nube que los usuarios pequeños servicios que
Software como Servicio pueden utilizar a través de funcionan de manera
Microservicios:
(SaaS): una suscripción en lugar de independiente, permitiendo
comprar licencias de escalabilidad y facilidad de
software. mantenimiento.
Conclusion

• La ingeniería de software es el pilar de nuestra era digital,


fusionando creatividad, ciencia y gestión para crear soluciones
innovadoras. Su evolución, desde simples códigos hasta sistemas
complejos, refleja la adaptabilidad y la búsqueda constante de
mejora. A medida que enfrentamos futuros desafíos tecnológicos,
los fundamentos de la ingeniería de software seguirán siendo
esenciales para garantizar calidad, seguridad y relevancia.

También podría gustarte