Ciclo de vida del desarrollo de SW (SDLC)
Tiene un conjunto de actividades que varía de acuerdo con el autor que las desarrolle, todos
describen el mismo proceso pero con distinta estructura de agrupamiento. Las actividades o
fases suelen ser 3, 5 u 8. El modelo que estudiamos es el de Pressman que incluye las
fases de comunicación, planeación, modelado, construcción y despliegue.
Comunicación: Antes de que comience cualquier trabajo técnico, tiene importancia crítica
comunicarse y colaborar con el cliente y otros stakeholders (interesados en el software) o
participantes. Se busca entender los objetivos de los interesados y reunir los requerimientos
que ayuden a definir características y funciones del software.
Los requisitos son de naturaleza cambiante.
Planeación: esta actividad crea un "mapa" para guíar al equipo. Este mapa es llamado plan
del proyecto de software y define:
- el trabajo de ingeniería de software al describir las tareas técnicas por realizar.
- riesgos probables.
- recursos requeridos.
- productos del trabajo que se obtendrán.
- programación de las actividades.
Modelado: nosotros trabajamos con modelos. Se crea un "bosquejo o boceto" del objeto por
hacer a fin de entender el panorama general. Si se requiere, se refina el bosquejo con más
detalle con el fin de entender mejor el problema y ver cómo resolverlo.
Un ingeniero de software tiene que hacer modelos para entender los requerimientos y
realizar el diseño que los satisfaga.
Construcción: combina la generación de código y las pruebas que se requieren para
descubrir errores en el mismo.
Despliegue: la implementación del sistema en el dominio definido que incluye las acciones
de entrega, capacitación, retroalimentación y mantenimiento.
Ciclos de vida (CV) tradicionales
Cascada
Es uno de los primeros CV que sirvió como base para el resto.
Después de cada etapa realiza una o varias revisiones para comprobar si se puede pasar a
la siguiente. Sus etapas son consecutivas y no pueden suceder simultáneamente.
Es un modelo rígido, poco flexible y con muchas restricciones.
Es una buena opción cuando no se van a modificar los requerimientos, los mismos deben
estar perfectamente definidos.
Ventajas:
- Define claramente las distintas etapas y su transición.
- Permite al PM controlar el avance.
- Es corto y económico.
- Permite validar las actividades dentro de una misma etapa.
Desventajas:
- Se congelan los requisitos al principio.
- Se entrega el producto al final.
- Desaprovechamiento de recursos.
- Si no cumple con las expectativas hay que iniciar de cero.
- Imposible retroceder.
Incremental
Deriva del CV en cascada, busca reducir el riesgo entre las necesidades del usuario y el
producto final causado por malentendidos en la etapa de requerimientos. Primero se analiza
y se determinan los incrementos en base al mismo. Las necesidades se plantean al
principio pero no se congelan por lo que el cliente puede mejorar los requerimientos pero no
agregar nuevos. La modificación sólo es posible si todavía no se realizó.
El proyecto se divide en mini proyectos con funcionalidades enteras (mini cascadas). En
cada uno de estos incrementos hago una pequeña cascada donde se entrega una versión
con mayor funcionalidad del producto final.
Es útil en particular cuando no se dispone de personal para la implementación completa del
proyecto en el plazo establecido por el negocio.
Ventajas:
- Aprovechamiento de los RRHH.
- Fácil entendimiento e implementación.
- Si el producto básico es bien recibido, entonces se agrega más personal (si es
requerido) para que participe del siguiente incremento.
Desventajas:
- Poca adaptación a cambios.
- No se pueden agregar funcionalidades ni cambiar las que ya están terminadas.
- Una primera entrega apresurada puede no satisfacer el producto fundamental y
condicionar el resto del desarrollo.
- Riesgo moderado de soslayar la arquitectura (puede ser endeble y colapsar en las
iteraciones posteriores).
Prototipado (evolutivo prototipo)
Los modelos evolutivos son iterativos, se caracterizan por la manera en la que permiten
desarrollar versiones cada vez más completas del software.
Suele utilizarse cuando el cliente no sabe bien que es lo que quiere, se arma entonces un
maqueta o prototipo. Hay 3 tipos de prototipo:
- Maqueta (no es CV): en papel o pantalla hueca, se hace solo para mejorar la
definición para luego elegir un CV.
- Desechable: tiene algo de funcionalidad para que lo vea el cliente y luego se
desecha para elegir un CV.
- Evolutivo: es un CV donde se comienza con el prototipo con funcionalidad y se
muestra al cliente, de acuerdo a las modificaciones que surgen va evolucionando.
Se hace sobre lo que más se entiende y evoluciona hasta que se complete el
proyecto.
En cada ciclo tengo una funcionalidad completa. Progresivamente se incrementa la
definición de funcionalidades manteniéndose el alcance en líneas generales constante.
Muy útil cuando hay que liberar entregas tempranas.
Ventajas:
- Permite agregar funcionalidades y cambiar algunas de las ya hechas (con buena
gestión de cambios).
- El cliente ve prontamente una parte del sistema.
- Permite que el grupo de desarrollo entienda mejor la funcionalidad y que el cliente
exprese mejor sus necesidades.
- Aprovecha los RRHH (cuando se termina el análisis de una parte del sistema se
empieza con la otra).
Desventajas:
- Es largo y costoso.
- Hay que controlar los cambios para que el sistema no se haga eterno.
- Grave riesgo de soslayar la arquitectura (puede ser endeble y colapsar en
interacciones posteriores).
Modelo evolutivo en espiral (Bohem 1988)
El modelo en espiral es un modelo evolutivo donde se hacen prototipos con aspectos
controlados y sistémicos del modelo de cascada.
Tiene potencial para hacer un desarrollo rápido de versiones cada vez más completas,
donde cobra importancia la gestión del riesgo (el único que hace esto).
Durante las primeras iteraciones lo que se entrega puede ser un modelo o prototipo. En las
posteriores se producen versiones más completas del sistema.
Cada vuelta es un planteo de necesidades y una parte del sistema. Luego se hace la
evaluación con el cliente para ver si satisface las primeras necesidades, sino se hace otra
vuelta con las mismas necesidades.
Este modelo combina más de un CV, una cascada dentro de la construcción del prototipo,
también puede haber un incremental o prototipo evolutivo si se hace parte de la
funcionalidad, función completa o si agrego nuevas funcionalidades. En la mayoría de los
casos hay un evolutivo.
Ventajas:
- Tiene en cuenta los riesgos durante todo el desarrollo del proyecto.
Desventajas:
- Es largo y más costoso que el evolutivo porque necesita de muchos expertos.
Modelo de ensamblaje de componentes (Nie 1992)
Es una evolución del modelo en espiral donde se aplica la reutilización de componentes.
Estos componentes se eligen en base a las necesidades de cada vuelta.
Ventajas:
- Optimiza tiempos y costos.
- Facilita el mantenimiento.
Desventajas:
- Pueden no disponerse los componentes adecuados para los requisitos del sistema.
- Si las nuevas versiones de los componentes no están bajo control de quien los
utiliza se pierde parte de la evolución del sistema.
Roles en el desarrollo de software
Administrador
Gestiona los recursos disponibles de un proyecto para poder alcanzar los objetivos. Tiene
total claridad de la visión y misión del proyecto, planifica las tareas del equipo.
Analista
Traduce la idea del cliente a un lenguaje que el resto del equipo pueda entender de forma
inequívoca. Lo logra especificando los requisitos del usuario y especificando los requisitos
de software. El éxito en gran parte depende de la correcta especificación de estos
requisitos.
Diseñador
Arma el diseño del sistema basándose en los requerimientos del analista. Busca la mejor
forma de implementarlos.
Desarrollador
Convierte las especificaciones definidas en código funcional. Debe usar las tecnologías
adecuadas y producir código de calidad.
Tester
Es el responsable de buscar, detectar y reportar cualquier error en el producto de software.
Cliente
No es lo mismo que un usuario final, el cliente hablará por las necesidades y expectativas
de la empresa que financia el proyecto y es quien valida las entregas del software. Conoce
el problema a resolver.
Entre sus responsabilidades están el comunicar y priorizar requisitos, revisar y aprobar
entregas, y compartir todo recurso necesario que el equipo pueda necesitar.
La entrevista
Entre las distintas formas de recopilar la información están la encuesta, la observación, los
cuestionarios y la entrevista.
La entrevista es una conversación entre 2 o más personas con el fin de obtener información
(contexto, conocimientos del trabajo y problemas presentes). Para hacer una entrevista se
requiere buena comunicación verbal, un guión estructurado y una finalidad específica.
Pasos de la entrevista:
1- Establecer objetivos de la entrevista.
2- Definir y preparar a quienes hay que entrevistar.
3- Decidir la estructura y los tipos de pregunta.
4- Crear los documentos que contengan los datos recopilados.
Tipos de pregunta
Abiertas 🔓 : permiten al entrevistado desarrollar su respuesta con opiniones y aspectos
subjetivos.
Beneficios:
- El entrevistado baja la guardia.
- El entrevistador puede percibir vocabulario que refleje características del
entrevistado.
- Proveen muchos detalles.
- Se descubren detalles que de otra forma no se hubiesen obtenido.
- El entrevistado se siente más interesado.
- Mayor espontaneidad.
- El entrevistador puede expresar mejor las preguntas.
- El entrevistador puede recurrir a ellas en caso de que deba improvisar.
Desventajas:
- Las respuestas pueden tener muchos detalles irrelevantes.
- Se puede perder el control de la entrevista.
- Se permiten respuestas que pueden durar mucho tiempo.
- Da la sensación de que el entrevistador no está preparado si se abusa de ellas.
Cerradas 🔐 : no le permiten al entrevistado desarrollarse y suelen ser preguntas de
respuestas fáciles como "Si", "No", "Tal vez".
Subtipo de cerradas "pregunta bipolar":
Beneficios:
- Ahorro del tiempo.
- Se pueden comparar entrevistas con mayor facilidad.
- Directo al grano.
- Se mantiene el control de la entrevista.
- Se cubre mucho terreno con rapidez.
- Se obtienen datos relevantes.
Desventajas:
- Son aburridas para el entrevistado.
- No dan detalles adicionales.
- Se pierden ideas principales.
- No hay una buena conversación entre los participantes.
Sondeo o seguimiento : saber un poco más de algún tema mencionado (no podemos
hacer un abuso de las mismas).
Estructura de la entrevista
Es la forma en la que se ordenan las preguntas mezclando los distintos tipos de preguntas
de una forma en la que la entrevista fluya de la mejor forma posible según las necesidades.
Piramidal 🔺 : Comienza con preguntas cerradas y termina con preguntas abiertas. Es
recomendada cuando el entrevistador necesita una introducción previa al tema y busca
llegar a una conclusión final de parte del entrevistado.
Embudo 🔻 : Comienza con preguntas abiertas y termina con preguntas cerradas. Es útil
cuando el entrevistado necesita más libertad para expresarse inicialmente y paulatinamente
se acota el alcance de las respuestas.
Diamante 💎 : Es una combinación de las otras, se comienza con preguntas cerradas a
abiertas y se termina con abiertas a cerradas. Tiene las ventajas de las otras entrevistas
pero como desventaja se demora más tiempo que con las otras.