Resumen 1er Parcial Ingenieria de Software
Resumen 1er Parcial Ingenieria de Software
Resumen 1er Parcial Ingenieria de Software
¿Cuál de estos componentes puede generar un factor diferencial o una ventaja competitiva?
1. HARDWARE: no, hoy es casi un “commodity” (bien producido en masa). Se consigue en el mercado, está
disponible para cualquier empresa, y no es necesario montar un centro de cómputo, se puede usar Cloud
Computing.
2. REDES: no, es poco probable que podamos montar una red de comunicaciones propia.
3. SOFTWARE: si, tener un mejor SW que un competidor permitirá dar un mejor servicio, reducir costos y/o
aportarle al producto un valor agregado (que lo hace más atractivo para los compradores). Un buen SW permite
generar ventajas competitivas y alimentar la cadena de valor. Ese desarrollo es propio y no podrán tenerlo
nuestros competidores. Y aun cuando contratemos software ya desarrollado, SAP, por ejemplo, las
personalizaciones y diferentes implementaciones que hagamos nos darán ventajas por sobre el resto.
Ingeniería de Software
Es el establecimiento y uso de principios solidos de la ingeniería para obtener económicamente un software confiable
y que funcione de modo eficiente en máquinas reales. Es una disciplina de la ingeniería que integra el proceso, los
métodos, y las herramientas para el desarrollo de software de computadora.
El proceso de ingeniería de software se define como “un conjunto de etapas parcialmente ordenadas con la intención
de lograr un objetivo, en este caso, la obtención de un producto de software de calidad”.
Etapas:
1. DEFINICIÓN INICIAL: se define globalmente el proyecto y los resultados esperados y se hacen los acuerdos
básicos (incluyendo un presupuesto inicial).
2. ANÁLISIS DE LOS REQUERIMIENTOS Y SU VIABILIDAD: se procede a recopilar, examinar y obtener todos los
requerimientos del cliente, y detectar las restricciones. Se decide la viabilidad del proyecto.
3. DISEÑO GENERAL Y DETALLADO: se diseña la aplicación informática que responderá a las necesidades del
cliente. Se plantean requisitos generales de la arquitectura de la aplicación y, luego, el detalle de c/componente
de la aplicación. Equivale a un plano.
4. CODIFICACIÓN: los componentes diseñados se programan en lenguaje de computación.
5. PRUEBAS: se verifica que no contenga errores y que cumpla con los requerimientos originalmente solicitados.
6. IMPLEMENTACIÓN: se instala en las computadoras del usuario y comienza a funcionar. Incluye la capacitación
necesaria para los usuarios.
7. EVOLUCIÓN: ya funcionando, el software requerirá cambios, para corrección o incorporación de nuevas
funcionalidades.
Gestión del riesgo: evalúa los riesgos que pueden afectar el resultado del proyecto o la calidad del producto y
las acciones que puedan realizarse para minimizar su probabilidad de ocurrencia o su impacto.
Aseguramiento de la calidad del software: se establecen normas, protocolos y estándares a cumplir a los
fines de que el producto final sea un producto de aceptable calidad.
Revisiones técnicas: evalúa los productos del trabajo de la ingeniería de software a fin de descubrir y eliminar
errores antes de que se propaguen a la siguiente actividad.
Mediciones y métricas: define y reúne mediciones para ayudar al equipo a conocer el estado del proyecto,
detectar eventuales necesidades de aplicar correcciones o servir al proceso de mejora continua.
Gestión de la configuración del software: administra los efectos del cambio a lo largo del proceso del
software.
Administración de la reutilización: define criterios para volver a usar el producto del trabajo y establece
mecanismos para obtener componentes reutilizables.
Preparación y producción del producto del trabajo: agrupa las actividades requeridas para crear productos
del trabajo: modelos, documentos, registros, formatos y listas.
2. DISEÑO E IMPLEMENTACIÓN: una descripción de la estructura del software que se va a implementar, los modelos
y las estructuras de datos utilizados por el sistema, las interfaces entre componentes del sistema y, en ocasiones,
los algoritmos usados.
3. VALIDACIÓN: en la que se buscará demostrar que un sistema cumple tanto con sus especificaciones como con las
expectativas del cliente.
4. EVOLUCIÓN: una vez implementado el software, este seguirá siendo modificado para que siga respondiendo a la
organización y su contexto durante su vida útil.
Desventajas: los proyectos de software rara vez son tan lineales, hay poca interacción con el cliente, los errores u
omisiones de una etapa se arrastran con facilidad a etapas posteriores, que los requerimientos deben obtenerse al
comienzo sin posibilidad de cambio, es difícil de aplicar en proyectos grandes o complejos.
2. Cuando la organización no se mueve en un escenario cambiante, está forma dirigida por un plan es la más
conveniente.
PROPUESTA INTEGRAL: el modelo tradicional no abarca todas las etapas existentes en un proyecto de
construcción, se lo mejora agregando/reformulando algunas etapas:
o Comunicación Inicial: primer contacto entre desarrollador y cliente. Se acuerdan lineamientos básicos del
proyecto y se presentan en forma global los problemas, las necesidades y las restricciones existentes.
o Estudio de Factibilidad: Es necesario entonces estudiar la factibilidad o no seguir adelante con el proyecto.
o Plan y presupuesto: Es necesario planificar el proyecto de desarrollo en su totalidad. Estimar recursos: Humanos
(contratación y/o asignación temporal de personal), de software (licencias, entornos de desarrollo, componentes
reutilizables, etc.) y de entorno (hardware, espacio físico de trabajo, etc.). En función del tipo de software a
desarrollar, se define el modelo de desarrollo de SW a utilizar, estimación de tiempos por c/etapas. Elaboración
de un primer presupuesto económico para presentarle al cliente, no será posible presupuestar de antemano la
totalidad del sistema (presupuesto parcial que alcance solo las próximas etapas).
o Construcción de la aplicación utilizando un modelo: Los modelos de desarrollo de software abarcan las etapas
de análisis, diseño, codificación, prueba y puesta en marcha.
o Garantía: es necesario contemplar una etapa en donde se solucionen los errores que pueda tener el software. El
costo de corregir los eventuales problemas debe ser contemplado dentro de los costos generales del proyecto.
o Mantenimiento: Ni los sistemas ni las organizaciones son estáticos. Una vez instalado un sistema es posible que
sean necesarios cambios o mejoras. Existen casos donde esta etapa no se lleva a cabo.
Complicaciones en el desarrollo de un software
1. El tamaño del software a desarrollar: es más difícil desarrollar un software de gran tamaño que uno pequeño.
Por otro lado, un software pequeño conlleva poco presupuesto, con lo cual el desarrollo debe ser lo más simple
posible.
2. La complejidad para obtener requerimientos: la comunicación entre los especialistas en informática y los
clientes no es tarea sencilla. Los usuarios no conocen de sistemas. Pueden no tener en claro sus necesidades o no
saberlas expresarlas correctamente. Los analistas, por su lado, suelen no comprender los términos propios de la
organización, o cómo funcionan sus procesos más complejos.
3. La complejidad técnica: muchas veces deben desarrollarse software para un nuevo sistema operativo; o con
nuevos lenguajes de programación; o vinculados con dispositivos de hardware especial. Estos pueden ser
desafíos adicionales para el desarrollador, que quizá no tiene la suficiente experiencia en esa tecnología.
4. El tiempo disponible: muchas veces las organizaciones requieren tener disponible el software para una fecha
específica.
5. El riesgo: existen situaciones propias del proyecto que implican riesgos concretos. Se debe prestar especial
atención a estas situaciones ya que pueden determinar la necesidad de redefinir o incluso de abandonar el
proyecto.
MODELOS:
“LINEAL SECUENCIAL” (EN CASCADA O CICLO DE VIDA)
Ingeniería de requerimientos: hace referencia a una actitud
activa en la búsqueda de todos los problemas y en tratar de
obtener los requerimientos de la manera más completa y
exacta posible, aun aquellos que los usuarios ocultan o
desconocen. Además de relevar usuarios debe también
analizarse la documentación, la normativa vigente y los procesos
internos de la organización.
Despliegue: el software ya probado es instalado en el entorno
productivo del cliente. Deben contemplarse todas las tareas
adicionales necesarias para que el sistema esté operativo,
incluyendo la instalación de servidores y redes, la configuración
de hardware y software de los equipos de trabajo, la entrega de
documentación y manuales y la provisión de todo aquel
material necesario para la operación del sistema, además de la
correcta capacitación.
Puede ocurrir que, por razones de tamaño, tiempo u operativas, sea conveniente construir y entregar el sistema en
partes. De este modo puede construirse una primera versión con algunas funcionalidades. Una vez implementada esta
versión, se vuelve a emplear el modelo lineal secuencial para producir una nueva versión más completa. En cada
iteración de entrega un sistema completo y operativo. El cliente puede probar el sistema en entornos productivos. No
debe confundirse con Desarrollo Ágil. En este modelo los componentes de la primera versión están todos planeados y
definidos al comienzo. En desarrollo ágil, las pequeñas mejoras se van incorporando en forma periódica. No existe una
planificación inicial.
Ventajas
Entregas parciales reducen complejidad y
mejoran estimaciones Desventajas
El usuario recibe rápidamente una primera Sigue siendo secuencial, aunque menos
versión para cubrir sus primeras necesidades estricto.
Requiere menos personal concurrente y los Errores se arrastran
recursos se asignan mejor en el tiempo Bloqueos por secuencialidad
Implementaciones parciales son más sencillas
que una total.
“PROTOTIPOS”
Este prototipo es una versión acotada del software, construida solamente a los fines de poder
interactuar con el cliente y poder tener una mejor visión de que es lo que se está planificando
hacer. Seguramente no todas las funciones, pantallas u opciones del software serán incluidas en
el prototipo, que podrá ser parcial e incluir sólo aquellas funciones más representativas. Puede
tener varias versiones, cambios o ajustes. Una vez que el prototipo es aprobado y que los
requerimientos han quedado finalmente claros, este debe desecharse para iniciar la
construcción del software real. Para ello, podrá utilizarse cualquiera de los modelos de
desarrollo, según las necesidades específicas del proyecto.
Etapas del modelo
a) Relevamiento rápido: esta etapa se realiza un relevamiento general y luego de relevan con
más detalle aquellas opciones que serán incluidas en el prototipo. No se hace de un modo tan exhaustivo.
b) Diseño del Prototipo: se diseña el prototipo, detallando el modo en el que se presentará y cuál será el alcance de
cada una de las opciones de este.
c) Generación del prototipo: para construirlo, puede utilizarse el mismo lenguaje de programación que luego se
utilizará para programar el sistema, usar alguna herramienta específica de desarrollo de prototipos, o incluso mostrar
ejemplos gráficos sin programación.
d) Prueba: si el prototipo es un software operable, el mismo deberá ser probado para buscar posibles errores.
e) Despliegue y retroalimentación: no se entrega el prototipo al cliente, sino que el desarrollador lo ejecuta y analiza
con él. A partir de este análisis, podría modificarse el prototipo, construirse uno nuevo o comenzar el desarrollo final.
f) Construcción de la aplicación utilizando un modelo: una vez definidos los requerimientos o probada alguna
funcionalidad específica, de utilizará el prototipo como un elemento de análisis y diseño y se generará la aplicación
final, utilizando alguno de los modelos.
Ventajas no es un producto para usarse
Permite una mejor definición y comprensión operativamente.
de los requerimientos iniciales. El desarrollador puede pretender ajustar el
Permite un testeo de aquellas funciones prototipo y entregarlo como producto final,
técnicamente complejas. incumpliendo pautas de calidad o seguridad
Reduce la incertidumbre al brindar al cliente en el desarrollo.
un modelo real de lo que será el futuro Algunas de las funcionalidades presentes en
sistema. el prototipo podrían no ser tenidas en cuenta
en la versión final o quizá sean imposibles de
construir en el entorno real.
Desventajas
Si es un software, el cliente puede pretender
usar el prototipo. Debe tenerse en claro que
“ESPIRAL”
Las primeras de estas iteraciones del espiral podrían corresponder a una
primera versión o bien al desarrollo de un prototipo. Luego aparecerán,
de modo similar al modelo lineal secuencial iterativo, diferentes
versiones operativas y más completas del software hasta que,
finalmente, se completa el software. La característica distintiva y saliente
del modelo consiste en que agrega a las etapas habituales un análisis de
riesgo. En cada una de estas iteraciones se evalúan los riesgos del
proyecto. A partir de dicho análisis el proyecto puede ser modificado,
acotado, puesto en pausa o incluso abortado sí las condiciones de riesgo
evaluado así lo imponen.
Ventajas
Las entregas sucesivas y el análisis de riesgo lo vuelven un modelo apto para desarrollos en entornos
riesgosos y con incertidumbre.
Como otros modelos incrementales, puede utilizarse durante todo el ciclo de vida útil de un sistema,
produciendo sucesivas versiones mejoradas del producto inicial.
Desventajas
No es simple medir los riesgos, mucho menos cuando de ellos depende o no la continuidad del proyecto. Un
análisis impreciso llevaría a decisiones equivocadas.
No siempre el cliente entiende que, a pesas de sus etapas y mejoras sucesivas, es un modelo controlado con
un final previamente planificado.
Puede resultar más caro que otros modelos por los costos de las actividades de medición de riesgos, aunque
también puede permitir ahorros si se toman medidas correctivas oportunamente.
“DESARROLLO RÁPIDO DE APLICACIONES”
0Los actuales entornos avanzados de desarrollo de aplicaciones proveen
a los desarrolladores de poderosas herramientas que permiten generar
código con gran rapidez y exactitud. Refiere a la posibilidad de generar
aplicaciones con mayor velocidad que los desarrollos tradicionales. Las
aplicaciones son conocidas como RAD. Para agilizar los tiempos de
desarrollo el software debe dividirse en partes, para que puedan ser
desarrolladas por varios equipos que trabajan en forma concurrente. Esta
división, más la reutilización de componentes y las herramientas RAD,
permiten construir piezas de software de calidad en tiempos que van de 30 a 90 días.
Metodología Ágil
Las organizaciones operan actualmente en entornos que cambian constantemente. Sus procesos deben ser flexibles y
adaptarse con rapidez al contexto. Las metodologías ágiles pueden producir rápidamente software útil, de calidad y
en periodos cortos de tiempo. El software se desarrolla como una serie de incrementos que agregan sucesivamente
nuevas funcionalidades a una aplicación que está operativa, pero a la vez en permanente cambio.
El desarrollo se realiza mediante equipos pequeños de gente altamente capacitada, que comparte inicialmente la
visión general del producto o servicio que se quiere implementar. Sobre ella, van ejecutando pequeños incrementos,
de acuerdo con las prioridades definidas por el cliente. Los ciclos breves de desarrollo se llaman Iteraciones, o sprints.
Cada iteración del ciclo de vida incluye:
- planificación - revisión
- análisis de requerimientos - implementación
- diseño - documentación
- codificación
Útiles para organizaciones que operan en entornos Útiles para organizaciones que operan en entornos
estables y con normas y procesos definidos y para cambiantes, con procesos flexibles y donde se privilegia tener
software con funcionalidades críticas. un software siempre listo y con posibilidad de cambios.
Requisitos definidos al inicio. No existe una especificación inicial detallada del sistema.
Sin posibilidad de cambios. Los cambios son frecuentes conforme se avanza con el
desarrollo.
El usuario no forma parte del equipo de desarrollo. La participación del usuario es vital ya que participa en la
especificación y evaluación de cada nueva versión.
El “Manifiesto Ágil” es un documento firmado en 2001 sobre técnicas y procesos para desarrollar software compuesto
por cuatro valores y doce principios de la filosofía de métodos ágiles. Los firmantes valoran:
1. La principal prioridad es satisfacer al cliente a través de la entrega temprana y continua de software de valor.
2. Son bienvenidos los requisitos cambiantes, incluso si llegan tarde al desarrollo. Los procesos ágiles se
doblegan al cambio como ventaja competitiva para el cliente.
4. Las personas del negocio y los desarrolladores deben trabajar juntos de forma cotidiana.
6. La forma más eficiente y efectiva de comunicar información de ida y vuelta dentro de un equipo de desarrollo
es la conversación cara a cara.
11. Las mejores arquitecturas, requisitos y diseños emergen de equipos que se auto-organizan.
12. En intervalos regulares, el equipo reflexiona sobre la forma de ser más efectivo y ajusta su conducta.
Ventajas
Ofrecen una rápida respuesta a cambios de requisitos a lo largo del desarrollo del proyecto gracias a su
proceso iterativo.
Los entregables parciales permiten ir atacando los objetivos más sencillos, ganando tiempo y experiencia para
atacar los más complejos.
Los cambios que requiera el cliente tendrán un menor impacto. Si el cliente quiere cambiar algo entregado,
solo se habrá perdido unas semanas de trabajo.
Dificultades
Si bien es atractivo el participar, los representantes del cliente a menudo tienen que seguir realizando sus
tareas habituales, con sus propios tiempos y presiones que los hace no poder estar a disposición del equipo de
desarrollo.
Algunos miembros del equipo pueden no tener la personalidad para trabajar e integrarse en equipo.
Priorizar los cambios sería difícil, sobre todo cuando son muchos participantes. Cada uno ofrece diversas
prioridades. Además, hay que consensuar las necesidades operativas con las políticas.
Mantener la simplicidad requiere trabajo adicional, que entra en conflicto con la presión de fechas de
entrego.
Muchas organizaciones pasan años cambiando su cultura, de tal modo que los procesos se definan y
continúen. Estas encuentran difícil moverse hacia un modelo de trabajo con procesos informales y definidos por
el equipo de desarrollo.
Limitaciones
Falta de procesos rigurosos y documentación escrita puede dificultad la certificación/auditoría del software.
El desarrollo no siempre tiene la misma secuencialidad ni necesidades que las prioridades fijadas.
Restricciones en cuanto a tamaño de los proyectos, para el desarrollo de software de seguridad crítica, o para
implementaciones dispersas geográficamente.
Los contratos son por tiempo insumido y no siempre fáciles de administrar ni de controlar.
PROGRAMACIÓN EXTREMA
Es un método ágil muy difundido que integra un rango de buenas prácticas de programación. Es una metodología
centrada en potenciar las relaciones interpersonales como clave para el éxito en desarrollo de software ,
promoviendo el trabajo en equipo, preocupándose por el aprendizaje de los desarrolladores, y propiciando un buen
clima de trabajo.
Valores
2. Comunicación: tanto en el equipo de trabajo como con el cliente. Fomenta un ambiente de cooperación y
unidad. Como el cliente es integrante del equipo, su opinión se conoce en tiempo real.
3. Retroalimentación: concreta y frecuente del cliente, del equipo y de los usuarios finales, para dirigir el
esfuerzo eficientemente.
4. Coraje: los programadores deben sentirse cómodos para reconstruir su código cuando sea necesario, o
desecharlo si es obsoleto, y persistir ante problemas complejos.
o Planeación incremental: Los requerimientos se registran en tarjetas de historia, que se van incluyendo en
liberaciones según el tiempo disponible y la prioridad relativa.
o Liberaciones pequeñas: Al principio se desarrolla el conjunto mínimo de funcionalidad útil, luego se agregan
funcionalidades incrementando las funcionalidades de la primera liberación.
o Desarrollo de la primera prueba: Las pruebas de unidad son frecuentes y continuas. Se escribe el código de la
prueba antes que la codificación, para tener de referencia.
o Refactorización: Se espera que todos los desarrolladores refactoricen de manera continúa el código y se
encuentren mejoras.
o Programación en pares: cada uno comprueba el trabajo del otro, y se ofrecen apoyo.
o Propiedad colectiva: no se desarrollan islas de experiencia, todos son responsables de todo el código.
o Integración continua: tan pronto como esté completa una tarea, se integra con todo el sistema y se prueba
unidad e integración.
o Ritmo sustentable: no se aceptan grandes cantidades de tiempo extra ya que reduce la calidad del código y la
productividad.
o Cliente en sitio: un representante del cliente tiene que dispones de tiempo completa para formar parte del
equipo XP. El cliente es miembro del equipo de desarrollo y responsable de llevar los requerimientos del sistema
al grupo para su implementación.
Roles en XP
Refinamiento del Product Backlog, se depura el listado pendiente y se completan, refinan o aclaran ciertas
historias de usuario que pudieron quedar pendientes.
Ventajas
Adaptabilidad: las entregas iterativas hacen que los proyectos sean adaptables y abiertos a cambios.
Transparencia: el Table hace visible el avance de cada Sprint y al ser compartido lleva a un ambiente de
trabajo abierto.
Retroalimentación continua: a través de reuniones diarias y revisiones al finalizar cada sprint.
Mejora continua: los entregables mejoran progresivamente a través del proceso de priorización del Product
Backlog.
Entrega continua de valor: los procesos iterativos permiten la entrega continua de valor tan frecuentemente
como el cliente lo requiere.
Ritmo sostenible: las personas pueden trabajar a un paso cómodo que puede continuar indefinidamente.
Motivación: las reuniones diarias y retro conducen a mayores niveles de motivación entre los empleados.
Resolución rápida de problemas: colaboración de equipos multi-funcionales conducen a la resolución de
problemas con mayor rapidez.
Entregables efectivos: la confección del PB y las revisiones periódicas de entregables aseguran las entregas
efectivas para el cliente.
Críticas
El equipo puede estresarse al estar de sprint en sprint inmerso en un ritmo muy intenso de trabajo.
El equipo puede tentarse a tomar el camino más corto para sumar los puntos del sprint, sacrificando calidad o
seguridad.
Es difícil de aplicar en grandes proyectos.
Se requiere de un experto en la metodología para monitorear su cumplimiento.
Es difícil de adoptar para proyectos restringidos a una fecha de entrega y precios cerrados por contrato.
Presupone que el equipo está muy formado y motivado.
Presupone que el cliente está muy involucrado en el desarrollo y revisa el avance de la funcionalidad.
Muchas reuniones, por cortas que sean, pueden ocasionar pérdidas de productividad.
Conclusión de Metodologías Agiles
Los modelos de desarrollo ágil tienden, como su nombre lo indica, a agilizar y acotar los procesos tradicionales. Sin
embargo, existen metodologías y procesos para seguir.
En estos casos debemos recordar que:
• Metodologías ágiles no implica ausencia de documentación.
• Metodología ágil no implica suprimir etapas del ciclo de vida, en especial las pruebas.
• Metodología ágil no significa hacer todo más rápido. Hacer un producto de lleva tiempo y la calidad no se negocia.
• Metodologías ágiles no implica dejar de desarrollar actividades protectoras de la calidad y una adecuada gestión
del proyecto.