Ingenieria de Software 1
Ingenieria de Software 1
Ingenieria de Software 1
UNIDAD Nº I
Procesos de desarrollo del sofware bajo el enfoque clásico.
1
SEMANA 1
Introducción
La asignatura pretende proveer una visión general de la ingeniería del software, poniendo
especial acento en las fases de especificación y de diseño. Se pretende que al terminar la
asignatura el alumno sea capaz de especificar un sistema sencillo mediante la notación
UML y de diseñarlo usando la misma notación y aplicando el patrón arquitectónico domain
model y alguno de los patrones de diseño más conocido.
En esta área, se adscriben diversas disciplinas técnicas y metodologías que dicen relación
con las actividades relaconadas con la fabricación de software y su gestión, presentadas
desde el punto de vista de la ingeniería.
2
Ideas Fuerza
3
Desarrollo
1. Ingeniería de software
Con objeto de elaborar software listo para enfrentar los retos del siglo XXI, se hace
necesario aceptar algunas realidades sencillas [1]:
4
basados en computadora demanda atención cuidadosa a las interacciones
de todos los elementos del sistema. Se concluye que el diseño se ha vuelto
una actividad crucial.
• Los individuos, negocios y gobiernos dependen cada vez más del software
para tomar decisiones estratégicas y tácticas, así como para sus operaciones
y control cotidianos. Si el software falla, las personas y empresas grandes
pueden experimentar desde un inconveniente menor hasta fallas
catastróficas. Se concluye que el software debe tener alta calidad.
• A medida que aumenta el valor percibido de una aplicación específica se
incrementa la probabilidad de que su base de usuarios y longevidad también
crezcan. Conforme se extienda su base de usuarios y el tiempo de uso, las
demandas para adaptarla y mejorarla también crecerán. Se concluye que el
software debe tener facilidad para recibir mantenimiento.
5
La ingeniería de software es una tecnología con varias capas. Como se aprecia en
la figura 1, cualquier enfoque de ingeniería (incluso la de software) debe basarse
en un compromiso organizacional con la calidad.
6
Compromiso con La administración total de la calidad, Six Sigma y otras
la calidad: filosofías similares alimentan la cultura de mejora continua, y
es esta cultura la que lleva en última instancia al desarrollo de
enfoques cada vez más eficaces de la ingeniería de software.
El fundamento en el que se apoya la ingeniería de software
es el compromiso con la calidad.
7
Las herramientas de la ingeniería de software proporcionan
Herramientas: un apoyo automatizado o semiautomatizado para el proceso
y los métodos. Cuando se integran las herramientas de modo
que la información creada por una pueda ser utilizada por
otra, queda establecido un sistema
8
Al proceso de desarrollo de software también se le conoce como ciclo de vida del
software porque describe la vida de un producto de software; primero nace con la
especificación de los requerimientos, luego se lleva a cabo su implantación, que
consiste en su diseño, codificación y validación, posteriormente el producto se
entrega y sigue viviendo durante su utilización y mantenimiento. En este ciclo se
establece una comunicación interactiva entre cliente y desarrollador en la que el
primero solicita servicios y el segundo propone soluciones. El ciclo de vida del
sistema de software termina cuando éste se deja de utilizar.
Especificación de
Explotación y
Requerimientos__ ________________Implantación___________________
__Mantenimiento_
Análisis Diseño Programación Pruebas Manteni-
miento
1
Fuente propia
9
Análisis: También llamada Especificación de requisitos. Se definen los
requisitos del software; debe quedar claro qué tiene que hacer el
software para satisfacer las necesidades del cliente ( o de
usuarios).
Diseño: Se define cómo da respuesta el software a lo que se tiene que
hacer, definido en la etapa anterior. El cómo depende en arte de
qué tecnología (lenguaje, plataforma…) se escoja para la
implementación posterior del sistema (por ejemplo el diseño varía
según si se opta por utilizar una base de datos relacional o un
sistema de ficheros para guardar los datos que el software tiene
que gestionar)..
Programación: O Codificación, se implementa el diseño previo
Pruebas: Se verifica el buen funcionamiento de cada componente del
software aisladamente (pruebas unitarias) y en interacción con el
resto de los componentes (pruebas de integración).
Mantenimiento: Se ocupa de los cambios en el software causados por errores,
peticiones de mejoras solicitadas por el cliente o simplemente por
variaciones en elementos externos (como cambios del sistema
operativo o del sistema gestos de la base de datos) que obliga a
hacer una adaptación del software desarrollado.
10
Lo que tienes que saber de los Modelos de desarrollo de software
11
2.2.1. Modelo de Ciclo de vida en cascada (lineal secuencial)
Análisis
Diseño
Codificación
Pruebas
Manteni-
miento
Ventajas Desventajas
• Introduce el concepto de • La mayoría de los ciclos propuestos
interactividad son inviables
• Introduce el concepto de iteración
Figura 3: Ciclo de vida en cascada
Explota-
Codifica- ción y
Análisis Diseño Pruebas
ción Manteni
-miento
Explota-
Codifica- ción y
Análisis Diseño Pruebas
ción Manteni
-miento
Explota-
Codifica- ción y
Análisis Diseño Pruebas
ción Manteni
-miento
Ventajas Desventajas
• Introduce el concepto de • Escasa capacidad para absorber el
incrementalidad concepto de prototipo
• Más flexible que el Lineal • Evidencia cierta ineficiencia en la
Secuencial utilización de los recursos
12
2.2.3. Modelo de Ciclo de vida de Desarrollo Rápido (RAD)
Modelado
Equipo del Negocio Modelado
Modelado de
de Datos Prototipo de
1 Aplicaciones
Aplicaciones Desarrollo de Implantación y
Aplicaciones Pruebas
Modelado
Equipo del Negocio Modelado
Modelado de
de Datos Prototipo de
2 Aplicaciones
Aplicaciones Desarrollo de Implantación y
Aplicaciones Pruebas
Modelado
Equipo del Negocio Modelado
Modelado de
de Datos Prototipo de
3 Aplicaciones
Aplicaciones Desarrollo de Implantación y
Aplicaciones Pruebas
Ventajas Desventajas
• Incremento significativo de la • Tentación de no alcanzar
productividad niveles de robustez y
• Compatible con métodos más confiabilidad aceptable
sofisticados y potentes que los
métodos estructurados
Proyecto de desarrollo de
conceptos
Proyecto de desarrollo de
nuevos productos
Proyecto de mejora de
productos
Proyecto de mantenimiento
de productos
Figura 6: Ciclo de vida Espiral
13
Ventajas Desventajas
• Como el software evoluciona a • Resulta difícil convencer a
medida que progresa el proceso, el grandes clientes de que el
desarrollador y el cliente enfoque evolutivo es controlable.
comprenden y reaccionan mejor ante • Debido a su elevada complejidad
riesgos en cada nivel evolutivo no se aconseja utilizarlo en
• Demanda una consideración directa pequeños sistemas.
de los riesgos técnicos en las etapas • Requiere experiencia en la
del proyecto y si se aplica identificación de riesgos
adecuadamente reduce los riesgos
antes de convertirse en problemas.
14
2.2.5. Modelo de Ciclo de vida de Proceso Unificado (UP)
Análisis y Diseño
Implementación
Pruebas
Despliegue
Flujos de apoyo al
trabajo
Configuración y cambios
Administración del
proyecto
Ambiente
Figura 7: Ciclo de Proceso unificado
Ventajas Desventajas
• Reducción de riesgos en el • Requiere una gran previsión sobre lo
proyecto que va a ocurrir (para poder
• La garantía de calidad, y controlarlo)
• La integración entre lo que es • Genera abundante trabajo adicional
propiamente desarrollo con de documentación y comunicación,
mantenimiento de software por tanto no es práctico para
proyectos pequeños
15
2.3. Metodología y modelos de proceso de desarrollo de software
16
La Metodología normalmente consistirá en un conjunto de fases, descompuestas
en sub-fases (en base a un modelo de desarrollo de software). Esta
descomposición guía a los desarrolladores en la elección de las técnicas que se
deben elegir para cada estado del proyecto.
Las Metodologías Ágiles: Su nombre lo toma debido a que son usadas para
atender a problemas que requieren de una respuesta
ágil en un ambiente flexible y con cambios constantes,
y donde la documentación es la mínima indispensable.
Roger S. Pressman define al “proceso del software” como una estructura para las
actividades, acciones y tareas que se requieren a fin de construir software de alta
calidad.
En el contexto de la ingeniería de software, un proceso no es una prescripción
rígida de cómo elaborar software de cómputo. Por el contrario, es un enfoque
adaptable que permite que las personas que hacen el trabajo (el equipo de
software) busquen y elijan el conjunto apropiado de acciones y tareas para el
trabajo. Se busca siempre entregar el software en forma oportuna y con calidad
suficiente para satisfacer a quienes patrocinaron su creación y a aquellos que lo
usarán.
17
Revisión de modelos de desarrollo
18
TABLA COMPARATIVA ENTRE MODELOS DE PROCESOS PESADOS Y ÁGILES PARA DESARROLLAR SOFTWARE
Modelos abstractos Modelos concretos Modelo del Modelo cuándo Algunas
proceso usarlo Metodologías
asociadas al
Modelo
En cascada • Pura Proceso • Grandes • Clásica
Modelos • Con fases realizado en proyectos de • Estructurada
Tradicional solapadas fases software • Otras
es o • Con secuenciale • Requisitos
Pesados subproyectos s que se estables
Metodologías:
• Con reducción pueden • Hay experiencia
Estos • Clásica superponer
de riesgos en el modelo
• Estructurada
modelos • Hay experiencia
promueven • Otras
en la
la disciplina Metodología
por medio • Alto nivel
de la documentación
planificació
Evolutivos • Espiral Proceso • Grandes • Prototipo
n y la
• Entrega por desarrolla proyectos de • Espiral
comunicaci
etapas o un modelo software • Diseño rápido de
ón escrita
incremental (prototipo) • Requisitos poco aplicaciones
• Entrega evolutiva que permite claros al inicio • IWEB
o iterativo ver la • Incursiona en • OOHDM
• Cascada en V funcionalida nuevas • OMT, OMT++
• Componentes d básica de experiencias • Otras
Reutilizables la misma
Híbridos • Proceso Proceso que • Pequeños • RUP
19
Unificado implica el equipos • UP
Racional desarrollo • Medianos y • Otras
• Otros iterativo y la pequeños
construcción proyectos
de • Requisitos que
prototipos pueden cambiar
Modelos Ágiles • Programación • Incursiona en • XP
Estos modelos dan prioridad a la interacción extrema nuevas • SCRUM
entre los individuos y a la comunicación con el • Desarrollo experiencias • CRYSTAL
cliente dirigido por • Otras
pruebas
• Desarrollo
dirigido por
Características
• Agile, Lean, …,
etc.
figura 8. Clasificación de los modelos y metodologías concretos más citados en la literatura2
2
Fuente propia
20
2.4. ¿Qué hay que saber para decidir una metodología de desarrollo de
software?
www.iplacex.cl
usuario la permitirá la toma de decisiones correctas. Para involucrar al usuario
en el análisis, diseño y administración de datos, es aconsejable el empleo de
técnicas estructuradas lo más sencillas posible. Para esto, es esencial contar
una buena técnica de diagramación.
• La metodología debe especificar claramente los responsables de
resultados. Debe especificar claramente quienes son los participantes de cada
tarea a desarrollar, debe detallar de una manera clara los resultados de los que
serán responsables.
• La metodología debe servir para sistemas de distinta complejidad, es decir
puede abarcar un departamento, varios de departamentos o varias empresas.
Entorno. La metodología debe servir con independencia de la tecnología
disponible en la empresa.
Hay veces en las que los requerimientos para cierto problema se comprenden bien:
cuando el trabajo desde la comunicación hasta el despliegue fluye en forma
razonablemente lineal. Esta situación se encuentra en ocasiones cuando deben
hacerse adaptaciones o mejoras bien definidas a un sistema ya existente (por ejemplo,
una adaptación para software de contabilidad que es obligatorio hacer debido a
cambios en las regulaciones gubernamentales). También ocurre en cierto número
limitado de nuevos esfuerzos de desarrollo, pero sólo cuando los requerimientos están
bien definidos y tienen una estabilidad razonable.
Comunicaci
ón Planeación
Inicio del Estimación
proyecto recabar programación Modelado
los seguimiento Análisis Construcci
requerimientos diseño ón Despliegue
Código Entrega
pruebas Asistencia
retroalimentació
n
22 www.iplacex.cl
Figura 8. Ciclo de vida clásico
24 www.iplacex.cl
5. Fase Despliegue. El software (como entidad completa o como un incremento
parcialmente terminado) se entrega al consumidor que lo evalúa y que le da
retroalimentación, misma que se basa en dicha evaluación.
Examinar el resultado. No se puede estar seguro de que la solución sea
perfecta, pero sí de que se ha diseñado un número suficiente de pruebas para
descubrir tantos errores como sea posible.
• ¿Puede probarse cada parte componente de la solución?
• ¿Se ha implementado una estrategia razonable para hacer pruebas?
• ¿La solución produce resultados que se apegan a los datos, funciones y
características que se requieren?
• ¿El software se ha validado contra todos los requerimientos de los
participantes?
A medida que el equipo de software avanza hacia abajo desde el lado izquierdo de la
V, los requerimientos básicos del problema mejoran hacia representaciones técnicas
cada vez más detalladas del problema y de su solución. Una vez que se ha generado el
código, el equipo sube por el lado derecho de la V, y en esencia ejecuta una serie de
pruebas (acciones para asegurar la calidad) que validan cada uno de los modelos
creados cuando el equipo fue hacia abajo por el lado izquierdo. En realidad, no hay
diferencias fundamentales entre el ciclo de vida clásico y el modelo en V. Este último
proporciona una forma de visualizar el modo de aplicación de las acciones de
verificación y validación al trabajo de ingeniería inicial.
25 www.iplacex.cl
Modelado de los Pruebas de
requerimientos aceptación
Diseño de la
Diseño de la arquitectura
arquitectura
Generación de Generación de
código código
Software
ejecutable
1. Es raro que los proyectos reales sigan el flujo secuencial propuesto por el
modelo. Aunque el modelo lineal acepta repeticiones, lo hace en forma indirecta.
Como resultado, los cambios generan confusión conforme el equipo del proyecto
avanza.
2. A menudo, es difícil para el cliente enunciar en forma explícita todos los
requerimientos. El modelo de la cascada necesita que se haga y tiene
dificultades para aceptar la incertidumbre natural que existe al principio de
muchos proyectos.
3. El cliente debe tener paciencia. No se dispondrá de una versión funcional del(de
los) programa(s) hasta que el proyecto esté muy avanzado. Un error grande
sería desastroso si se detectara hasta revisar el programa en funcionamiento.
26 www.iplacex.cl
En un análisis interesante de proyectos reales, Bradac [Bra94] encontró que la
naturaleza lineal del ciclo de vida clásico llega a “estados de bloqueo” en los que
ciertos miembros del equipo de proyecto deben esperar a otros a fin de terminar tareas
interdependientes. En realidad, ¡el tiempo de espera llega a superar al dedicado al
trabajo productivo! Los estados de bloqueo tienden a ocurrir más al principio y al final
de un proceso secuencial lineal. Hoy en día, el trabajo de software es acelerado y está
sujeto a una corriente sin fin de cambios (en las características, funciones y contenido
de información). El modelo de la cascada suele ser inapropiado para ese tipo de labor.
No obstante, sirve como un modelo de proceso útil en situaciones en las que los
requerimientos son fijos y el trabajo avanza en forma lineal hacia el final.
Su éxito probablemente se deba, entre otras causas, a la gran facilidad con que se
calcula, a que su significado es intuitivamente sencillo de asimilar, y a que estudios
3 Fuente: https://www.quizover.com/course/section/ejemplo-de-calcular-la-complejidad-ciclomatica-by-openstax
4 Fuente: McCabe,T.J., y A.H. Watson, “Solftware Complexity”, Crosstalk.
5 Fuente: Halstead, M., “Elements of Software Science”, Holland.
27 www.iplacex.cl
sobre programas reales avalan su relación con el tiempo de desarrollo, la dificultad de
mantenimiento, etc.
v(G) = e - n + 2
6
Fuente: Ingeniería de software. Un enfoque práctico. Roger S. Pressman
28 www.iplacex.cl
A continuación,] se presenta un procedimiento que calcula el promedio de 100 o menos
números que se encuentran entre valores frontera; también calcula la suma y el
número total válido7.
1. i = 1; 1
2. total.input = total.valid = 0;
3. sum = 0;
2
4. DO WHILE value[i] <> –999 AND
total.input < 100
5. increment total.input by 1; 3
6. IF value[i] > = minimum AND value[i] < =
maximum 4
7. THEN increment total.valid by 1;
8. sum = s sum + value[i] 5
9. ELSE skip
ENDIF
6
10. increment i by 1;
ENDDO
11. IF total.valid > 0 7 9
12. THEN average = sum / total.valid
13. ELSE average = –999; 8
ENDIF
END average
Fin do
while
1
0
1
1
1 13
2
Fin
7
Fuente: Ingeniería de software. Un enfoque práctico. Roger S. Pressman
29 www.iplacex.cl
Si se realizase el grafo, se observaría que se encuentran 6 caminos posibles para
llegar de la sentencia 1 a la sentencia 13:
e = 17 aristas
n = 13 nodos (cantidad de instrucciones).
v(G)= 1
30 www.iplacex.cl
4.2. Ciencia del software de Halstead
Durante el final de los años 70 y principios de los 80, Maurice Halstead desarrolla un
conjunto de métricas llamadas Halstead Software Science, métricas basadas en el
cálculo de palabras clave (reservadas) y variables.
Su teoría está basada en una simple cuenta (muy fácil de automatizar) de operadores y
operandos en un programa:
• Los operadores son las palabras reservadas del lenguaje, tales como IF-THEN,
READ, FOR,...; los operadores aritméticos +, -, *,..... los de asignación y los
operadores lógicos AND, EQUAL TO,....
• Los operandos son las variables, literales y las constantes del programa.
Las métricas de la Ciencia del Software para cualquier programa escrito en cualquier
lenguaje pueden ser derivadas de estas cuatro cuentas. A partir de ellas han sido
elaboradas diferentes medidas para diversas propiedades de los programas, tales
como longitud, volumen, etc...
31 www.iplacex.cl
Medida de la longitud de un programa
N = N1 + N2
N es una simple medida del tamaño de un programa. Cuanto más grande sea el
tamaño de N, mayor será la dificultad para comprender el programa y mayor el
esfuerzo para mantenerlo. N es una medida alternativa al simple conteo de líneas de
código. Aunque es casi igual de fácil de calcular, N es más sensible a la complejidad
que el contar el número de líneas porque N no asume que todas las instrucciones son
igual de fácil o de difícil de entender.
donde n = n1 + n2n = n1 + n2
El esfuerzo es otra medida estudiada por Halstead que ofrece una medida del trabajo
requerido para desarrollar un programa. Desde el punto de vista del mantenimiento, el
esfuerzo se puede interpretar como una medida del trabajo requerido para comprender
un software ya desarrollado.
La fórmula es la siguiente:
32 www.iplacex.cl
E=VLE=VL
Éste indica si se está utilizando un lenguaje de alto o bajo nivel. Por ejemplo, una
simple llamada a un procedimiento podría tener un valor L de 1; el COBOL podría tener
0,1 y el ensamblador podría tener un L de 0,01. Así pues el esfuerzo aumenta
proporcionalmente con el volumen, pero decrece con la utilización de lenguajes de alto
nivel. Atendiendo a varios estudios empíricos, el esfuerzo, E, es incluso una medida
mejor de la entendibilidad (comprensión) que N.
33 www.iplacex.cl
Ejemplo para calcular las medidas de Halstead
La longitud es
N = N1 + N2 = 6 + 6 = 12
El volumen es
V = N x log2(n)= 12 x log2 (6+4)= 12 x 3,322= 39,864
El Nivel de Dificultad es
D = (n1/2) * (N2/n2)= (6/2) * (6/4)=3*1,5 = 4,5
El Nivel de Programa es
L = 1/D = 1/4,5 = 0,222
El Esfuerzo de Implementación es
E = V*D = 39,864* 4,5 = 179,388
El Tiempo de Entendimiento es
T = E/18 (18 es el número que Halstead encontró experimentalmente para
34 www.iplacex.cl
expresar esta magnitud en segundos) = 179,388/18 = 9,966
35 www.iplacex.cl
Bibliografía:
• [1] Ingeniería de software. Un enfoque práctico. Roger S. Pressman
36 www.iplacex.cl
Conclusión
37 www.iplacex.cl
Bibliografía
Modelo de madurez de ingeniería del software | Pino Correa, Francisco Javier |E-LIBRO
38 www.iplacex.cl
39 www.iplacex.cl