La ingeniería del software es la rama de las ciencias de la computación que busca principios que sirvan como guía al desarrollo de sistemas de software complejos y de gran tamaño.
El desarrollo de estos sistemas requiere del esfuerzo de más de una persona a lo largo de un periodo extendido de tiempo durante el cuál los requisitos del sistema propuesto pueden verse alterados y el personal asignado al proyecto puede variar.
Lo primero que se tiene que hacer para construir un software es hacer un boceto.
Diferencias de la ingeniería de software
- Capacidad de construir sistemas a partir de componentes genéricos prefabricados.
- Los componentes de software son diseñados para un dominio específico y para una aplicación específica.
- Falta de técnicas cuantitativas, denominadas métricas, para medir las propiedades del software
- La complejidad del software es difícil de medir
- La calidad de un producto software es difícil de medir-Tiempo entre fallos no es buena métrica
- Otras diferencias y errores en el software
- Nuestra sociedad es dependiente a los sistemas de computadoras y software
- Nuestra economía, la salud pública, el gobierno, las fuerzas de seguridad, el transporte y la defensa dependen de sistemas de software de gran envergadura
- Los errores en el software han provocado desastres o casi desastres
Métricas para evaluar tu plataforma
- Tasa de conversión
- Número de usuarios registrados
- Tasa de abandono
- Tasa de nombramiento
- Disminución de entrenamiento
- Mayor uso
- Ahorro de tiempo
- Ahorro de tiempo de desarrollo
- Reducción de errores
¿Porqué los proyectos fallan tan a menudo?
- Objetivos del proyecto poco realistas o articulados
- Estimaciones inexactas de los recursos necesarios
- Requisitos del sistema mal definidos
- Informe deficiente del estado del proyecto
- Riesgos no gestionados
- Mala comunicación entre clientes, desarrolladores y usuarios
- Uso de tecnología inmadura
- Incapacidad para manejar la complejidad del proyecto
- Prácticas de desarrollo descuidado
- Mala gestión del proyecto
- Presiones comerciales
Mejorando la calidad del software: Ingeniería del software asistida por computadoras (CASE)
- Sistema de planificación de proyectos
- Como ayudar para la estimación de costos; para la fijación de hitos en los proyectos y para la asignación de personal
- Sistema de gestión de proyectos
- Como ayudar para el monitoreo del progreso del proyecto en desarrollo
- Herramientas de documentación
- Como ayudar para la escritura y organización de la documentación
- Sistemas de prototipado y simulación
- Como ayudar al desarrollo de prototipos
- Sistemas de programación
- Como ayudar a la escritura y depuración de programas
El ciclo de vida del software
Desarrollo --> Uso --> Mantenimiento
Una vez que el software ha sido desarrollado, entra en un ciclo de utilización y mantenimiento, un ciclo que continúa durante el resto de la vida útil de ese software
En otros productos, la fase de mantenimiento tiende a ser un proceso de reparación. En el caso del software suele consistir en correcciones y actualizaciones.
El proceso de mantenimiento normalmente requiere que una persona estudie el programa subyacente y su documentación para entender el programa, o cuando menos la parte pertinente del mismo.
En ocasiones resulta más fácil desarrollar un nuevo sistema partiendo de cero que modificar adecuadamente el paquete existente.
Fase de desarrollo tradicional del ciclo de vida del software
Análisis de requisitos --> Diseño --> Implementación --> Pruebas
- Análisis
- Especificar qué servicios proporcionará el sistema propuesto, identificar las condiciones impuestas a esos servicios y definir como va a interactuar el mundo exterior con el sistema.
- Diseño
- Crear un plan para la construcción de este sistema propuesto. El diseño consiste en tratar de desarrollar una solución para un problema. El resultado de la fase de diseño es una descripción detallada de la estructura del sistema de software que puede convertirse en programa.
- Implementación
- La implementación implica la escritura de programas, la creación de archivos de datos, y el desarrollo de bases de datos. Así como análisis de software vs. programador.
- Pruebas
- Proceso de depurar los programas y confirmar que el producto software final es compatible con la especificación de requisitos. Así como eliminación de errores.
Metodologías de ingeniería de software
- Modelo en cascada: Proceso estrictamente secuencial.
- Modelo iterativo: En este modelo, el primer sistema es una versión incompleta del sistema, al cual se le van añadiendo características.
- Modelo incremental: En este modelo el primer sistema es una versión simplificada del producto final con una funcionalidad limitada. Por ejemplo, WhatsApp.
- Proceso unificado racional: Un paradigma de desarrollo de software que redefine los pasos de la fase de desarrollo del ciclo de vida del software y proporciona directrices para llevar a cabo esos pasos
- Prototipado rápido: Se construye rápidamente un ejemplo simple del sistema propuesto. Esto se hace durante las etapas iniciales de desarrollo. EL objetivo no es una versión funcional del producto sino conseguir una herramienta de demostración que puede utilizarse para aclarar requerimientos.
- Desarrollo de código fuente abierto (Open Source): Un único autor escribe una versión inicial del software y publica código fuente y su documentación en Internet. Desde allí puede ser descargado y modificado por otros usuarios sin ningún costo.
- Métodos ágiles: Implementación rápida y temprana basada en el concepto incremental, una adecuada capacidad de respuesta a las variaciones en requisitos y menor énfasis en la rigurosidad de análisis de requisitos y el diseño.
Métodos ágiles
¿Qué son?
El desarrollo ágil de software es un grupo de métodos de desarrollo de software basados en el desarrollo iterativo e incremental, donde los requisitos y las soluciones evolucionan a través de la colaboración entre equipos auto-organizados y multi-funcionales.
Promueve la planificación adaptativa, desarrollar y entregar de manera evolutiva, un enfoque iterativo de tiempo determinado y alienta a una respuesta rápida y flexible al cambio.
Retos que resuelve el método ágil
- Priorizar
- Reduce el alcance
- Cambia los requisitos en cualquier momento
- Incrementa el éxito del proyecto
Manifiesto por el Desarrollo Ágil de Software
Estamos descubriendo formas mejores de desarrollar software, tanto por nuestra propia experiencia como por ayudar a terceros. A través de este trabajo hemos aprendido a valorar:
- Individuos e interacciones > Procesos y herramientas
- Software funcionando > Documentación extensiva
- Colaboración con el cliente > Negociación contractual
- Respuesta ante el cambio > Seguir un plan
Aunque se valoran los elementos de la derecha, se valoran más los elementos de la izquierda (en negritas).
+ características de un método ágil
- La prioridad máxima es satisfacer al cliente a través de la entrega temprana y continua de software valioso.
- Aceptar los requisitos cambiantes, incluso en etapas avanzadas.
- Entregar software de trabajo con frecuencia, desde un par de semanas hasta un par de meses, con preferencia a menor tiempo.
- Los empresarios y desarrolladores deben trabajar juntos todos los días durante todo el proyecto.
- Construir proyectos alrededor de individuos motivados.
- El método más eficiente y efectivo para transmitir información a un equipo de desarrollo y dentro de este es la conversación cara a cara.
- El software de trabajo es la medida principal del progreso.
Mitos y realidades de los métodos ágiles
- Los métodos ágiles están siendo utilizados más que solamente una metodología de desarrollo de software
- Mitos:
- No hay planeación
- No hay gobernanza
- No hay documentación
- Respuestas rápidas y efectivas a un ambiente dinámico de negocios
- Puede salir mal
- Cambio de mentalidad
- Transformación organizacional