SlideShare una empresa de Scribd logo
1 de 109
INGENIERÍA DEL
SOFTWARE
Javier Martín
Centro Asociado de Móstoles /
Tres Cantos
UNED
INGENIERÍA DEL SOFTWARE Javier Martín 2
Introducción
JAVIER MARTIN (jmartin@escet.urjc.es)
TUTORIAS: JUEVES/VIERNES de 7 a 9
PLAN DE TRABAJO
Exposición de los temas y mediante
transparencia, abundando en los puntos
más importantes.
Resolución de dudas
Propuesta y resolución de ejercicios y
problemas
INGENIERÍA DEL SOFTWARE Javier Martín 3
Temas
INTRODUCCIÓN
ESPECIFICACIÓN DEL SOFTWARE
FUNDAMENTOS DEL DISEÑO
SOFTAWARE
TÉCNICAS GENERALES DE DISEÑO
SOFTWARE
CODIFICACIÓN Y PRUEBAS
AUTOMATIZACIÓN Y PROCESO DE
DESARROLLO
INGENIERÍA DEL SOFTWARE Javier Martín 4
Tema 1: INTRODUCCIÓN
INGENIERÍA DEL SOFTWARE Javier Martín 5
Concepto de Ingeniería de Sistemas
Concepto de sistema, conjunto de cosas que ordenadamente
relacionadas entre sí contribuyen a un determinado objeto. De forma
recursiva, las partes de un sistema pueden ser consideradas como
nuevos sistemas (subsistemas).
Los sistemas informáticos están compuestos por ordenadores y sus
periféricos. Entre ellos podemos distinguir dos tipos de subsistemas:
Sistemas Hardware, son los elementos materiales, los que se
pueden tocar.
Sistemas Software, los programas que gobiernan el
funcionamiento del computador.
El objetivo de los sistemas informáticos es el tratamiento de la
información: almacenamiento, elaboración y presentación de datos. De
esta forma se automatizan determinadas acciones.
En la concepción del sistema informático no solo se decide el trabajo a
realizar, sino también cómo ha de ser utilizado por los usuarios.
INGENIERÍA DEL SOFTWARE Javier Martín 6
Concepto de Ingeniería del Software
Características del software (lo contrario para el hardware):
No se desgasta ni envejece, y por este motivo no requiere
reparaciones ocasionales
Su duplicación es poco costosa, lo caro es el desarrollo
Puede ser modificado fácilmente, tanto que es necesario un control
de versiones
La Ingeniería del Software comprende las técnicas y procedimientos
ingenieriles para el desarrollo del software.
La IS no se plantea solo una actividad de programación, previamente
son necesarias las fases de análisis y diseño y posteriormente la
integración y la verificación, incluso el manteniendo cuando el producto
ya está en explotación. (CICLO DE VIDA).
Inicialmente la tarea de desarrollo era realizada individualmente por
hábiles creativos, de forma poco disciplinada. El trabajo en equipo
supone la división y organización del trabajo utilizando metodologías
de desarrollo.
En los 70 y los 80 empiezan a usarse herramientas CASE (Computer
Aided Software Engineering). En los 90 IPSE e ICASE.
INGENIERÍA DEL SOFTWARE Javier Martín 7
La crisis del Software
Se produce cuando surge la necesidad de desarrollar
aplicaciones software demasiado complejas, a mediados
de los 60.
Para superar la crisis:
Aparición de metodologías concretas de desarrollo
Concepción de la Ingeniería del Software como disciplina
Trabajo en equipo y especialización (analistas,
programadores, ...)
No se ha llegado a una situación estable, sino a una
evolución permanente con avances continuos en la IS,
forzados por el rápido abaratamiento y aumento de
capacidad del hardware.
INGENIERÍA DEL SOFTWARE Javier Martín 8
Mitos del Software
El hardware es mucho más importante que el
software
El software es fácil de desarrollar
El software consiste exclusivamente en programas
ejecutables
El desarrollo del software es sólo una labor de
programación
Es natural que el software contenga errores
INGENIERÍA DEL SOFTWARE Javier Martín 9
Formalización del proceso de desarrollo
La ingeniería supone la existencia de procesos bien
establecidos para la realización de actividades de
desarrollo, construcción, fabricación, etc.
El ciclo de vida es el proceso de desarrollo y
mantenimiento del software. Según el modelo elegido se
describen un conjunto de actividades para llevar a cabo el
ciclo de vida,
Los modelos clásicos:
MODELO EN CASCADA
MODELO EN V
Prácticamente identifican actividades similares y sólo se
diferencian en la forma de presentación.
INGENIERÍA DEL SOFTWARE Javier Martín 10
MODELO EN CASCADA
INGENIERÍA DEL SOFTWARE Javier Martín 11
MODELO EN CASCADA
ANÁLISIS, determinar qué debe hacer el software ->
especificación
DISEÑO, descomponer y organizar el sistema para que los
módulos puedan ser desarrollados por separado
CODIFICACIÓN, escribir el código fuente de cada módulo
y realizar sobre ellos las pruebas necesarias
INTEGRACIÓN, combinar todos los módulos y probar el
sistema completo antes de pasar a su explotación
MANTENIMIENTO, durante la explotación es necesario
realizar cambios ocasionales bien para corregir errores o
para introducir mejoras,
Se trata de aislar cada fase de las otras, lo que facilita la
especialización de los desarrolladores. Al final de cada fase
se requiere un proceso de revisión`para evitar que los
errores se propaguen a fases posteriores provocando la
vuelta atrás.
INGENIERÍA DEL SOFTWARE Javier Martín 12
MODELO EN CASCADA AMPLIADO
INGENIERÍA DEL SOFTWARE Javier Martín 13
MODELO EN CASCADA
Cada fase debe generar una información de salida precisa
y suficiente:
DOCUMENTOS DE REQUISITOS DEL SOFTWARE (SRD),
es una especificación precisa y completa a partir de los
requisitos establecidos por el cliente.
DOCUMENTO DE DISEÑO DEL SOFTWARE
(SDD),descripción de la estructura global del sistema,
especificación de qué debe hacer cada uno de los módulos y
de cómo se combinan.
CÓDIGO FUENTE, el programa debidamente comentado
(documentación interna).
SISTEMA SOFTWARE, el ejecutable producto dela fase de
integración y la documentación de las pruebas realizadas.
DOCUMENTOS DE CAMBIOS, después de cada
modificación realizada en la fase de mantenimiento: problema
detectado y solución adoptada
INGENIERÍA DEL SOFTWARE Javier Martín 14
MODELO EN V
INGENIERÍA DEL SOFTWARE Javier Martín 15
MODELO EN V AMPLIADO
INGENIERÍA DEL SOFTWARE Javier Martín 16
MODELO EN V
Incluye fases similares a las del modelo en
cascada pero de forma jerárquica. En horizontal se
representa el avance en el desarrollo y en vertical
el nivel de detalle.
VERIFICACIÓN, comprobación de que una parte
del sistema cumple con sus especificaciones.
VALIDACIÓN, comprobación de que un elmento
satisface las necesidades del usuario identificadas
durante el análisis.
INGENIERÍA DEL SOFTWARE Javier Martín 17
PROTOTIPOS
En los modelos clásicos se insiste en las actividades de
revisión de resultados al final de cada fase para evitar la
vuelta atrás, que no se contempla de una forma organizada
y resulta muy costosa. Están orientados a una forma de
desarrollo lineal.
PROTOTIPO, es un sistema auxiliar que permite probar
experimentalmente soluciones parciales a los requisitos del
sistema
Para que el coste de desarrollo del prototipo sea bajo en
relación al del sistema final podemos:
Limitar las funciones
Limitar su capacidad
Limitar su eficiencia
Evitar limitaciones de diseño, utilizando un hardware más
potente que el que ejecutará el sistema final
Reducir la parte a desarrollar
INGENIERÍA DEL SOFTWARE Javier Martín 18
PROTOTIPOS RÁPIDOS
Su finalidad es solo adquirir experiencia, no se
aprovechan como producto (usar y tirar). Se
denominan maquetas cuando su funcionalidad o
capacidad es muy limitada.
El sistema final se codifica totalmente partiendo de
cero, no se aprovecha el código del prototipo
Lo importante de estos prototipos es que se
desarrollen en poco tiempo.
INGENIERÍA DEL SOFTWARE Javier Martín 19
PROTOTIPOS RÁPIDOS
INGENIERÍA DEL SOFTWARE Javier Martín 20
PROTOTIPOS EVOLUTIVOS
En este caso se intenta aprovechar al máximo el código del
prototipo, y para ello se emplea el mismo
hardware/software del sistema final.
Se realizan fases de análisis y diseño parcial, que se van
ampliando hasta construir el sistema final mediante
adiciones sucesivas.
Se puede considerar un modelo en cascada en bucle, de
manera que en cada iteración se va avanzando en el
desarrollo.
HERRAMIENTAS PARA EL DESARROLLO DE
PROTOTIPOS, se emplean lenguajes de 4ª generación,
que son de alto nivel y de tipo declarativo. También se
emplean lenguajes de especificación, como VDM y Z. Si
disponemos del compilador correspondiente podemos
obtener automáticamente el código del prototipo.
En el desarrollo de prototipos es clave la reutilización de
software.
INGENIERÍA DEL SOFTWARE Javier Martín 21
PROTOTIPOS EVOLUTIVOS
INGENIERÍA DEL SOFTWARE Javier Martín 22
MODELO EN ESPIRAL
Puede considerarse como un refinamiento del modelo
evolutivo general que introduce el análisis de riesgo como
elemento fundamental para guiar la evolución del proceso
de desarrollo.
En la dimensión radial se representa el esfuerzo realizado
en el desarrollo (siempre creciente)
En cada iteración 4 fases:
PLANIFICACIÓN, determina que parte del desarrollo se
abordará en ese ciclo.
ANALISIS DE RIESGO, evaluar diferentes alternativas para
esa parte del desarrollo seleccionando la más ventajosa y
tomando precauciones para evitar los posibles
inconvenientes.
INGENIERÍA, las actividades de los modelos clásicos
EVALUACIÓN, se analizan los resultados de la fase de
ingeniería.
INGENIERÍA DEL SOFTWARE Javier Martín 23
MODELO EN ESPIRAL
INGENIERÍA DEL SOFTWARE Javier Martín 24
MANTENIMIENTO DEL SOFTWARE
El mantenimiento no representa una actividad específica,
sino que consiste en rehacer parte de las actividades
correspondientes a las otras fases del desarrollo para
introducir cambios sobre una aplicación ya en fase de
explotación.
MANTENIMIENTO CORRECTIVO, su finalidad es corregir
errores que no fueron detectados en el desarrollo del
producto.
MANTENIMIENTO ADAPTATIVO, modificar una aplicación
para adaptarla a las nuevas necesidades del entorno.
MANTENIMIENTO PERFECTIVO, se trata de ir obteniendo
versiones mejoradas del producto
INGENIERÍA DEL SOFTWARE Javier Martín 25
GESTIÓN DE CAMBIOS
El mantenimiento supone la realización de una serie de
cambios sucesivos
Si afectan a la mayor parte del sistema se puede plantear
como un nuevo desarrollo.
Cada cambio debe ser documentado con:
INFORME DEL PROBLEMA, que ocasiona el cambio. Suele
ser propuesto por el cliente.
INFORME DE CAMBIO, describe la solución dada al
problema y el cambio realizado
REINGENIERÍA, es necesaria cuando el desarrollo de una
aplicación no está documentado y se dispone solamente
del código. Se llama también ingeniería inversa porque
supone reconstruir y documentar las fases de análisis y
diseño llegando a la estructura modular de la aplicación y
las dependencias entre módulos y funciones. Estas
actividades organizan y documentan un sistema deficiente.
INGENIERÍA DEL SOFTWARE Javier Martín 26
GARANTÍA DE CALIDAD
Para evaluar la calidad son necesarias técnicas de aplicación de métricas precisas
tanto sobre los productos software como a sus procesos de desarrollo.
McCall propone un esquema basado en valoraciones a 3 niveles:
FACTORES, valoración significativa de la calidad en base a los criterios
establecidos
CRITERIOS, aspectos de nivel intermedio que influyen en los factores de calidad
MÉTRICAS, mediciones puntuales de determinadas características del producto.
Entre los factores de calidad tenemos:
CORRECCIÓN, grado en que cumple con las especificaciones
FIABILIDAD, grado de ausencia de fallos
EFICIENCIA, reilación entre la cantidad de resultados y los recursos requeridos
SEGURIDAD, dificultad para el acceso a datos por personas no autorizadas
FACILIDAD DE USO, esfuerzo requerido para el aprendizaje de la aplicación
MANTENIBILIDAD. Facilidad para corregir el producto en caso necesario.
FLEXIBILIDAD, facilidad para modificar el producto
FACILIDAD DE PRUEBA, depende del esfuerzo requerido para comprobar su
corrección o fiabilidad
TRANSPORTABILIDAD, facilidad para adaptar el producto a otra plataforma
REUSABILIDAD, facilidad para usar partes del producto en otros desarrollos
INTEROPERATIVIDAD, facilidad del producto para trabajar con otros
INGENIERÍA DEL SOFTWARE Javier Martín 27
PLAN DE GARANTÍA DE CALIDAD (SQAP)
Es un documento formal para organizar el proceso de
desarrollo software de manera que se asegure la calidad
del producto final. Debe contemplar:
Organización, dirección y seguimiento de los equipos de
desarrollo
Modelo de ciclo de vida a seguir, detallando fases y
actividades
Documentación requerida, determinando contenido y guión
de cada documento
Revisiones y auditorias, para garantizar que las actividades y
los documentos son correctos
Organización de las pruebas, a distintos niveles
Organización de la etapa de mantenimiento, determinando
cómo gestionar la realización de cambios
INGENIERÍA DEL SOFTWARE Javier Martín 28
REVISIONES
Consiste en inspeccionar el resultado de una actividad para
determinar si es aceptable o contiene defectos que han de
ser subsanados.
Las revisiones deben ser formalizadas y contempladas en
el modelo de ciclo de vida:
Deben ser realizadas por un grupo de personas y no
individualmente
El grupo de be ser reducido
Debe ser imparcial, nada que ver con los desarrolladores
Se debe revisar el producto, pero no el productor ni el
proceso de producción
Se debe establecer de antemano una lista formal de
comprobaciones
Se debe levantar acta de la reunión de revisión, recogiendo
las decisiones tomadas
INGENIERÍA DEL SOFTWARE Javier Martín 29
PRUEBAS
Consiste en hacer funcionar el producto o una
parte de él y comprobar si los resultados son
correctos.
No permite garantizar la calidad del producto. En
general no es posible probar un producto de forma
exhaustiva, debido a su complejidad.
INGENIERÍA DEL SOFTWARE Javier Martín 30
GESTIÓN DE CONFIGURACIÓNCONFIGURACIÓN, disposición de las partes que componen una cosa y le
dan su peculiar figura.
La CONFIGURACÏÓN SOFTWARE se refiere a la manera en que diversos
elementos se combinan para construir un producto software.
Se han de combinar todos los elementos que intervienen en el desarrollo:
Documentos del desarrollo
Código fuente
Programas, datos y resultado de las pruebas
Manuales de usuario
Documentos de mantenimiento, informes de problemas y cambios
Prototipos intermedios
Normas particulares del proyecto
Dado que los elementos software van evolucionando a lo largo del
desarrollo se requiere:
Control de versiones, almacenar de forma organizada las sucesivas
versiones de cada elemento de la configuración.
Control de cambios, garantizar que las diferentes configuraciones del
software se componen de elementos compatibles entre sí (línea base).
INGENIERÍA DEL SOFTWARE Javier Martín 31
NORMAS Y ESTÁNDARES
IEEE, Institute of Electrical and Electronics
Engineer de USA [IEEE93]
DoD, Departament od Defense de USA [DoD88]
ESA, Agencia Europea del Espacio [ESA91]
ISO, organismo internacional de normalización
(International Standars Organization). En España
AENOR.
METRICA-2, desarrollada por el Consejo Superior
de Informática del MAP. Se basa en la
metodología de análisis y diseño de
Yourdon/DeMarco.
INGENIERÍA DEL SOFTWARE Javier Martín 32
Tema 2:
ESPECIFICACIÓN DE SOFTWARE
INGENIERÍA DEL SOFTWARE Javier Martín 33
MODELADO DE SISTEMAS
El análisis y la definición de los requisitos debe dar lugar a
la especificación software, en la que se concretan las
necesidades que se desean cubrir y se fijan las
restricciones con las que debe trabajar el software.
El modelado de los sistemas tiene como objetivo entender
mejor el comportamiento requerido y facilitar la
comprensión de los problemas planteados. Se trata de
establecer modelos conceptuales que reflejen la
organización de la información y las diversas
transformaciones que se deben llevar a cabo con dicha
información.
Las metodologías de análisis de requisitos tratan de
facilitara obtención de uno o varios modelos que detallen el
comportamiento deseado del sistema.
INGENIERÍA DEL SOFTWARE Javier Martín 34
CONCEPTO DE MODELO
Un modelo conceptual es una abstracción lógico-
matemática del mundo real que facilita la comprensión del
problema a resolver. Se trata de ofrecer una visión de lato
nivel, sin descender a explicar detalles concretos del
mismo. Indica QUÉ hace el sistema y no CÓMO lo debe
hacer.
Los OBJETIVOS a cubrir con los modelos son:
Facilitar la comprensión de l problema
Establecer un marco para la discusión que simplifique y
sistematice el análisis
Fijar las base para el diseño
Facilitar la verificación del cumplimiento de los objetivos del
sistema
INGENIERÍA DEL SOFTWARE Javier Martín 35
TÉCNICAS DE MODELADO (I)
DESCOMPOSICIÓN. MODELO JERARQUIZADO, aplica el “divide y
vencerás”, y así el problema queda dividido en un subconjunto de
subproblemas. Se trata de una descomposición funcional que se
denomina horizontal o bien se descompone tratando de detallar la
estructura, de forma vertical. Para completar el modelado es necesario
establecer los interfaces entre las partes del sistema para posibilitar el
funcionamiento del sistema global.
APROXIMACIONES SUCESIVAS, podemos tomar como partida el
modelo de un sistema similar, y luego mediante la experiencia del
analista y el conocimiento del problema que proporciona el experto se
irán proponiendo modelos intermedios, discutiendo sus ventajas e
inconvenientes.
EMPLEO DE DIVERSAS ANOTACIONES, el lenguaje natural
introduce imprecisiones, repeticiones e incluso incorrecciones en el
modelo. Es recomendable emplear notaciones gráficas que sean
entendibles por todos los que participan en el proyecto. Se suele
recurrir a notaciones precisas que combinan texto, tablas, diagramas y
gráficos.
INGENIERÍA DEL SOFTWARE Javier Martín 36
TÉCNICAS DE MODELADO (II)
CONSIDERAR DISITNTOS PUNTOS DE VISTA, en la
elaboración del modelo es necesario adoptar un determinado
punto de vista. Si así la descripción es insuficiente conviene
adoptar más de uno.
REALIZAR UN ANÁLISIS DEL DOMINIO, es decir en campo
de aplicación en que se enmarca el sistema a desarrollar. Hay
que considerar:
Normativa que afecta al sistema
Otros sistemas semejantes
Estudios recientes en el campo de la aplicación, bibliografía, etc.
Las ventajas de realizar un modelos más general son:
Facilitar la comunicación entre el analista y el usuario del sistema,
p.e. usando la misma terminología.
Creación de elementos realmente significativos del sistema, si se
ajusta a la normativa específica establecida.
Reutilización posterior del software desarrollado.
INGENIERÍA DEL SOFTWARE Javier Martín 37
ANÁLISIS DE REQUISITOS DE SOFTWARE
El análisis es la fase de definición del futuro sistema y tiene una importancia decisiva
en el desarrollo de todas las etapas posteriores.
Con el análisis de requisitos se trata de caracterizar el problema a resolver. El
“cliente” trabaja con el analista para elaborar las especificaciones y posteriormente
se encargarán de verificar el cumplimiento de las mismas (contrato).
El análisis debe producir un modelo válido necesario y suficiente para recoger todas
las necesidades y exigencias del sistema, así como las restricciones que los limiten.
Para una especificación correcta se requiere:
Completo y sin omisiones
Conciso y sin trivialidades
Sin ambigüedades
Sin detalles de diseño o implementación
Fácilmente entendible por el cliente
Separando requisitos funcionales u no funcionales (capacidades mínimas y
máximas, interfaces estándares, recursos necesarios, seguridad, fiabilidad,
mantenimiento, etc.
División y jerarquía del modelo global, con el fin de simplificar su comprensión
Incluyendo los criterios de validación del sistema, para comprobar si se ajusta al
contrato inicial.
INGENIERÍA DEL SOFTWARE Javier Martín 38
TAREAS DEL ANÁLISIS
Dependiendo de las características y complejidad del sistema
se podrán seguir los siguientes pasos:
ESTUDIO DEL SISTEMA EN SU CONTEXTO, análisis del
dominio en un contexto globalizador
IDENTIFICACIÓN DE NECESIDADES, detectar necesidades de
medios dentro de plazos y presupuestos
ANÁLISIS DE ALTERNATIVAS Y ESTUDIO DE VIABILIDAD,
tanto técnica como económica
ESTABLECIMIENTO DEL MODELO DEL SISTEMA, para lo que
podemos usar técnicas gráficas, texto, herramientas CASE, etc.
ELABORACIÓN DEL DOCUMENTO DE ESPECIFICACIÓN DE
REQUISITOS, dónde se recogen las conclusiones del análisis y
sirve de punto de partida para el diseñador.
REVISIÓN CONTINUADA DEL ANÁLISIS, a menudo en las
etapas de diseño e implementación se hace necesaria la revisión
de alguno de los requisitos, o bien por cambios de criterio del
cliente
INGENIERÍA DEL SOFTWARE Javier Martín 39
NOTACIONES PARA LA ESPECIFICACIÓN
La especificación es una descripción del modelo del
sistema a desarrollar.
Se debe usar una notación fácil de entender por el cliente:
Lenguaje natural, utilizando explicaciones más o menos
precisas y exhaustivas. Es posible limitar precisiones y
ambigüedades si se establecen reglas de uso del lenguaje.
Diagramas de flujo de datos
Diagramas de transición de estados
Descripciones funcionales. Pseudocódigo. Se emplea un
preciso lenguaje natural estructurado. No se debe detallar
demasiado el cómo, pues esto corresponde a la fase de
diseño, donde se usan lenguajes estructurados como PLD.
Descripción de datos, de trata de detallar la estructura interna
de los datos que maneja el sistema. En la metodología
Yourdon se conoce como diccionario de datos, incluyendo
nombre de cada dato, utilización y estructura.
Diagramas de modelos de datos
INGENIERÍA DEL SOFTWARE Javier Martín 40
DIAGRAMAS DE FLUJO DE DATOS (DFD)
Se trata de realizar un modelo gráfico para representar el flujo de datos
que entra en el sistema, las transformaciones que debe realizar y la
salida producida. También se representan las entidades externas la
sistema que producen o consumen datos. El DFD inicial es el de
contexto, posteriormente y de forma jerárquica se van desarrollando
otros DFD’s que detallan las transformaciones, las entradas y salidas
del diagrama detallado deben coincidir con el proceso correspondiente.
Recoge de forma estática los procesos, dónde en el último nivel de
refinamiento se especifican en lenguaje natural estructurado, y su
interrelación.
INGENIERÍA DEL SOFTWARE Javier Martín 41
DIAGRAMAS DE TRANSICIÓN DE ESTADOS
Describe el comportamiento dinámico del sistema
basándose en sus estados más importantes.
Al igual que en los autómatas de estados finitos,
los eventos motiva el cambio de estado del
sistema.
INGENIERÍA DEL SOFTWARE Javier Martín 42
DIAGRAMAS DE MODELO DE DATOS
Se trata de organizar e interrelacionar los datos
que utiliza el sistema.
El MODELO ENTIDAD-RELACIÓN permite definir
todos los datos y establecer las relaciones que
deben existir entre ellos.
INGENIERÍA DEL SOFTWARE Javier Martín 43
DOC. DE ESPECIFICACIÓN DE REQUISITOS
El documento o la especificación de requisitos (SRD o
SRS) recoge de forma integral los resultados del análisis.
Puede haber documentos previos al SRD, como estudios
de viabilidad o de alternativas posibles.
El SRD debe ser revisado con cierta frecuencia durante el
desarrollo y debe facilitar la varificación de las
especificaciones (contrato).
Diversos organismos de estandarización hacen propuestas
sobre la estructura del SRD: IEEE, DoD, etc. Vemos el
modelo de SRD de la Agencia Espacial Europea.
Dependiendo de las características y complejidad del
proceso tal vez no sea necesario cubrir todos los
apartados.
INGENIERÍA DEL SOFTWARE Javier Martín 44
MODELO DE SRD
1. Introducción
1. Objetivo: objetivos, participantes, calendario,...
2. Ámbito, identificará y dará nombre al producto
3. Definiciones, siglas y abreviaturas
4. Referencias, la descripción bibliográfica de los documentos referenciados.
5. Panorámica del documento
2. Descripción general
1. Relación con otros proyectos, similares o complementarios
2. Relación con proyectos anteriores o posteriores
3. Objetivo y funciones
4. Consideraciones de entorno
5. Relaciones con otros sistemas, que utilicen entradas o salidas indirectas de
información
6. Restricciones generales: metodologías, lenguajes, de hardware,...
7. Descripción del modelo, es el apartado más extenso y más importante. Se
utilizan todas las notaciones y herramientas disponibles
INGENIERÍA DEL SOFTWARE Javier Martín 45
MODELO DE SRD
3. Requisitos específicos, lista detallada y completa de los requisitos del sistema, indicando su
grado de cumplimiento (obligatorio, recomendable, opcional. No incluir aspectos de diseño o
desarrollo, ni tampoco soluciones particulares que no sean obligadas
1. Requisitos específicos, QUÉ debe hacer el sistema especificando el tratamiento de
la información.
2. Requisitos de interfase, conexión con otros sistemas con los que interactúa (bases
de datos, ficheros, SSOO,...).
3. Requisitos de operación, es decir, del interfaz de usuario
4. Requisitos de capacidad, volumen procesador, tiempo respuesta, tamaño ficheros.
Se debe cuantificar para el peor, el mejor y el caso más habitual.
5. Requisitos de verificación, que debe cumplir el sistema para que se posible verificar
su corrección
6. Requisitos de pruebas de aceptación
7. Requisitos de recursos, instalaciones y elementos necesarios para el
funcionamiento del sistema
8. Requisitos de documentación
9. Requisitos de transportabilidad, para adaptalo a otras plataformas
10. Requisitos de calidad, que no hayan sido recogidos en otros apartados
11. Requisitos de fiabilidad, imponiendo un límite aceptable de fallos
12. Requisitos de mantenibilidad
13. Requisitos de seguridad, contra utilización indebida
14. Requisitos de salvaguarda, para evitar consecuencias graves en equipos o en
personas
4. APENDICES, para complementar el contenido del documento
INGENIERÍA DEL SOFTWARE Javier Martín 46
VIDEOJUEGO DE LAS MINAS
INGENIERÍA DEL SOFTWARE Javier Martín 47
SISTEMA DE GESTIÓN DE BIBLIOTECA
INGENIERÍA DEL SOFTWARE Javier Martín 48
SISTEMA DE GESTIÓN DE BIBLIOTECA
INGENIERÍA DEL SOFTWARE Javier Martín 49
SISTEMA DE GESTIÓN DE BIBLIOTECA
INGENIERÍA DEL SOFTWARE Javier Martín 50
SISTEMA DE GESTIÓN DE BIBLIOTECA
INGENIERÍA DEL SOFTWARE Javier Martín 51
SISTEMA DE GESTIÓN DE BIBLIOTECA
INGENIERÍA DEL SOFTWARE Javier Martín 52
Tema 3:
FUNDAMENTOS DEL DISEÑO DEL
SOFTWARE
INGENIERÍA DEL SOFTWARE Javier Martín 53
CONCEPTO DE DISEÑO
Descripción o bosquejo de alguna cosa hecho por
palabras.
En un sistema software la realización del diseño parte del
SRD y no es nada trivial. Cuando no se tiene experiencia
en el desarrollo concreto se hace de forma iterativa
mediante ensayo y error, en caso contrario se aprovecha el
“know-how” (saber hacer).
Las técnicas para realizar diseños nuevos son empíricas y
no están suficientemente formalizadas, mientras que para
proyectos ya conocidos, como los de gestión, existen
herramientas tales como lenguajes de 4ª generación.
En el diseño se establece el CÓMO debe funcionar el
sistema, determinando la organización y la estructura del
software.
INGENIERÍA DEL SOFTWARE Javier Martín 54
ACTIVIDADES DE UN DISEÑO SISTEMÁTICO
DISEÑO ARQUITECTÓNICO, se abordan los aspectos
estructurales y de organización del sistema, y su posible
división en subsistemas
DISEÑO DETALLADO, organización y estructura de los
módulos
DISEÑO PROCEDIMENTAL, organización de las
operaciones o servicios que ofrecerá cada módulo. Se
suele realizar en pseudocódigo o PDL, pero desarrollando
sólo los aspectos más relevantes del algoritmo
DISEÑO DE DATOS, organización de la base d edatos del
sistema. Se parte de los diagramas E-R.
DISEÑO DE LA INTERFAZ DE USUARIO, organizar y
facilitar la utilización del sistema por parte del usuario
El resultado de estas actividades debe plasmarse en el
Documento d Diseño Software (SDD)
INGENIERÍA DEL SOFTWARE Javier Martín 55
CONCEPTOS PARA EL DISEÑOABSTACCIÓN, identificar los elementos significativos del sistema y abstraer la utilidad específica de cada uno
ABSTRACCIONES FUNCIONALES, sirven para crear expresiones parametrizadas usando funciones o
procedimientos
TIPOS ABSTRACTOS, junto con el tipo de datos se deben crear los métodos que manejan estos datos
MÁQUINAS ABSTRACTAS, definición formal del comportamiento de una máquina
MODULARIDAD, el diseño modular propone dividir el sistema en partes diferenciadas y definir sus interfaces. Sus
ventajas: claridad, reducción de costos y reutilización
REFINAMIENTO, a partir de una idea no muy concreta se va refinando mediante aproximaciones hasta el detalle
ESTRUCTURAS DE DATOS, para organizar la información que maneja el sistema: registros, conjuntos, listas, pilas,
colas, árboles, grafos, tablas, ficheros, ...
OCULTACIÓN, de la organización de los datos internos y de los detalles del algoritmo, se muestra en el interfaz sólo
aquello que resultará invariable ante cambios. Ventajas: depuración, mantenimiento, ...
GENERICIDAD, consiste en diseñar un elemento genérico, con las características comunes a todos los elementos
agrupados
HERENCIA, los elementos hijos heredan del padre su estructura y operaciones para ampliarlos, mejorarlos o
adaptarlos. Es conveniente utilizar un lenguaje de programación orientado a objetos
POLIMORFISMO, es la propiedad de los elementos que pueden variar su formar sin cambiar su naturaleza. Se
emplea el concepto de genericidad. En los hijos se puede producir la anulación de una operación. A veces en el
padre interesa declarar un método sin implementarlo, lo harán los hijos en diferido
CONCURRENCIA, se trata de aprovechar al máximo el procesador garantizando unos tiempos máximos de
respuesta para tareas críticas. Problemas de los sistemas con restricciones:
Tareas concurrentes, asegurar que todas cumplen sus restricciones
Sincronización de tareas, determinando los puntos de sincronización entre ellas
Comunicación entre tareas, unas serán productoras de datos y otras consumidoras. Para evitar la corrupción de
datos compartidos permitir sólo concurrencia en lectura con semáforos, monitores y regiones críticas
Interbloqueos (deadlock) cuando varias tareas esperan un evento que nunca se producirá
INGENIERÍA DEL SOFTWARE Javier Martín 56
NOTACIONES PARA EL DISEÑO
Debe resultar precisa, clara y fácil de interpretar.
Se emplean notaciones formales
cuasimatemáticas
NOTACIONES ESTRUCTURALES, se desglosa y
estructura el sistema en sus partes
DIAGRAMAS DE BLOQUES
CAJAS ADOSADAS
INGENIERÍA DEL SOFTWARE Javier Martín 57
DIAGRAMAS DE ESTRUCTURA
(Yourdon)
Describen la estructura de los sistemas software como una
jerarquía de módulos, reflejando sólo su organización
estática
RECTÁNGULO,
módulo
LÍNEA, relación
entre módulos, el
superior utiliza el
módulo inferior
ROMBO, opcional
ARCO, repetitiva
CIRCULO CON
FLECHA, envio de
datos o información
de control (correcto,
repetir, desconectar,
etc)
INGENIERÍA DEL SOFTWARE Javier Martín 58
DIAGRAMAS HIPO (Hierachy-Input-
Process-Output)
Se muestra primero la
jerarquía entre los
módulos del sistema
Y en los
diagramas HIPO
de detalle hay 3
zonas: Entrada,
Proceso y Salida
INGENIERÍA DEL SOFTWARE Javier Martín 59
DIAGRAMAS DE JACKSON
El proceso de diseño es sistemático y se
lleva a cabo en tres pasos:
•Especificación de la estructura de datos de
entrada y de salida
•Obtención de la estructura del programa
•Expansión de la estructura del programa
para lograr el diseño detallado
INGENIERÍA DEL SOFTWARE Javier Martín 60
NOTACIONES ESTÁTICAS
Describen las características estáticas del sistema, tales
como la organización de la información, sin tener en cuenta
su evolución durante el funcionamiento del sistema.
Las notaciones son las mismas que se emplean en la
especificación:
DICCIONARIO DE DATOS, dónde se detalla la estructura
interna de los datos que maneja el sistema. En el diseño se
amplía y se completa el diccionario de la especificación hasta
el nivel de detalle necesario para iniciar la codificación.
DIAGRAMAS ENTIDAD-RELACIÓN, definiendo las
relaciones entre datos y la organización de la información. Se
amplia y detalla el diagrama de la especificación con las
nuevas entidades y relaciones.
INGENIERÍA DEL SOFTWARE Javier Martín 61
NOTACIONES DINÁMICAS
Permiten describir el funcionamiento del sistema
durante su funcionamiento.
Las notaciones son las misma utilizadas en la
especificación:
DIAGRAMAS DE FLUJO DE DATOS, serán mucho
más exhaustivos que los de la especificación.
DIAGRAMAS DE TRANSICIÓN DE ESTADOS,
más detallados que reflejen las transiciones entre
estados internos.
LENGUAJE DE DESCRIPCIÓN DE PROGRAMAS
(PLD), permite realizar la especificación funcional
del sistema.
INGENIERÍA DEL SOFTWARE Javier Martín 62
NOTACIONES HIBRIDAS: DIAGRAMAS
DE ABSTRACCIONES
Permiten un enfoque globalizado del diseño atendiendo a aspectos estáticos (datos), dinámicos
(operaciones) y de estructura del sistema.
DIAGRAMAS DE ABSTRACCIONES, se contemplan dos tipos de abstracciones: las funciones y los tipos abstractos de
datos.
En una abstracción se distinguen 3 partes:
NOMBRE, es su identificador
CONTENIDO, dónde se define la organización de los datos
OPERACIONES, para manejar el contenido de la abstracción
Las abstracciones funcionales (funciones o procedimientos), sólo tiene la parte de operación.
El dato encapsulado tiene como el tipo abstracto contenido y operaciones, pero no permite declarar otras variables de su
mismo tipo.
En los diagramas se muestra la relación
jerárquica entre abstracciones, de manera
que la abstracción superior utiliza la
inferior.
INGENIERÍA DEL SOFTWARE Javier Martín 63
NOTACIONES HIBRIDAS: DIAGRAMAS
DE OBJETOS
Se emplea una terminología distinta, pero las similitudes con los diagramas de abstracciones es muy grande,
excepto que:
1. No existe nada equivalente a los datos encapsulados ni a las abstracciones funcionales en el modelo de
objetos
2. En los diagramas de objetos hay relaciones de herencia
De acuerdo con las propiedades de los objetos
podemos tener relaciones especiales entre ellos:
•CLASIFICACIÓN, ESPECIALIZACIÓN O HERENCIA
•COMPOSICIÓN, permite describir un objeto mediante
los elementos que lo forman
INGENIERÍA DEL SOFTWARE Javier Martín 64
DOCUMENTOS DE DISEÑO: ADD
1. INTRODUCCIÓN – Para dar una visión general de todo el documento. Los contenidos de los apartados como en el SRD
1.1 Objetivo ...
1.2 Ámbito
1.3 Definiciones, siglas y abreviaturas
1.4 Referencias
2. PANORÁMICA DEL SISTEMA, visión general de los requisitos funcionales y de otro tipo del sistema a diseñar
3. CONTEXTO DEL SISTEMA, si posee conexiones con otros
3.n Definición de interfaz externa
4. DISEÑO DEL SISTEMA, se describe el nivel superior del diseño del sistema
4.1 Metodología de diseño de alto nivel
4.2 Descomposición del sistema , primer nivel de descomposición del sistema en sus componentes principales
5. DISEÑO DE LOS COMPONENTES, se procede a la decripción detallada de l,os componentes mencionados en 4.2
5.n Identificador del componente
5.n.l Tipo (subprograma, módulo, procedimiento, proceso, datos
5.n.2 Objetivo, o necesidad de que exista el componente
5.n.3 Función , lo que hace el componente
5.n.4 Subordinados, se enumeran todos los componentes que utiliza
5.n.5 Dependencias y su naturaleza: invocación de operación, datos compartidos, inicialización, creación, etc.
5.n.6 Interfases, de cómo otros componentes interactúan con éste
5.n.7 Recursos , elementos usados por el componente
5.n.8 Referencias, que se han utilizado en el texto
5.n.9 Proceso, algoritmos o reglas que utiliza el componente para realizar su función
5.n.l0 Datos, descripción de los datos, su tipo, sus valores iniciales, se puede realizar con un diccionario de datos
6. VIABILIDAD y RECURSOS ESTIMADOS
7. MATRIZ REQUISITOS/COMPONENTES, se pone en las filas los requisitos y en las columnas los componentes
INGENIERÍA DEL SOFTWARE Javier Martín 65
DOCUMENTOS DE DISEÑO: DDD
Parte 1. DESCRIPCIÓN GENERAL
1. INTRODUCCIÓN
1.1 Objetivo
1.2 Ámbito
1.3 Definiciones, siglas y abreviaturas
1.4 Referencias
1.5 Panorámica
2. NORMAS, CONVENIOS y PROCEDIMIENTOS
2.1 Normas de diseño de bajo nivel
2.2 Normas y convenios de documentación
2.3 Convenios de nombres (ficheros, programas, módulos, etc.)
2.4 Normas de programación
2.5 Herramientas de desarrollo de software
Parte 2. ESPECIFICACIONES DE DISEÑO DETALLADO
n. Identificador del componente
n.l Identificador
n.2 Tipo
n.3 Objetivo
n.4 Función
n.5 Subordinados
n.6 Dependencias
n.7 Interfases
n.8 Recursos
n.9 Referencias
n.l0 Proceso
n.ll Datos
APÉNDICE A. LISTADOS FUENTE
APÉNDICE E. MATRIZ REQUISITOS/COMPONENTES
INGENIERÍA DEL SOFTWARE Javier Martín 66
Tema 4:
TÉCNICAS GENERALES DE
DISEÑO SOFTWARE
INGENIERÍA DEL SOFTWARE Javier Martín 67
TÉCNICAS DE DISEÑO
Los objetivos de las técnicas de diseño software son
fundamentalmente:
La descomposición modular del sistema
Los diseños de los algoritmos y estructuras de datos
fundamentales que se deben usar en el sistema
Primero veremos las características deseables de una
buena descomposición modular del sistema, y luego se
presentarán técnicas de diseño:
Diseño funcional descendente
Diseño orientado a objetos
Diseño de datos
INGENIERÍA DEL SOFTWARE Javier Martín 68
DESCOMPOSICIÓN MODULAR
Los pasos a seguir son:
1. Identificar los módulos
2. Describir cada módulo
3. Describir las relaciones entre módulos
Tipos de módulos:
1. Código fuente, en el lenguaje de programación usado
2. Tabla de datos, para datos de inicialización u otros
3. Configuración, se agrupa en un módulo toda la información de
configuración en el entorno de trabajo
4. Otros: ficheros de ayuda en línea, manuales, etc.
Una descomposición modular debe poseer ciertas cualidades mínimas
para que se pueda considerar suficientemente válida
Independencia fucional
Acoplamiento
Cohesión
Comprensibilidad
Adaptabilidad
INGENIERÍA DEL SOFTWARE Javier Martín 69
DESCOMPOSICIÓN MODULAR: INDEPENDENCIA FUNCIONAL
Al final de los documentos ADD y DDD debe haber una matriz
REQUISITOS/COMPONNETES. En principio, cada función será realizada en
un módulo distinto. Si las funciones son independientes los módulos tendrán
independencia funcional.
Cada módulo debe realizar una función concreta o un conjunto de funciones
afines. Es recomendable reducir las relaciones entre módulos al mínimo.
Para medir la independencia funcional hay dos criterios: acoplamiento y
cohesión.
DESCOMPOSICIÓN MODULAR: ACOPLAMIENTO
El grado de acoplamiento mide la interrelación entre dos módulos, según el tipo de conexión y la
complejidad de la interfase:
FUERTE,
POR CONTENIDO, cuando desde un módulo se pueden cambiar datos locales de otro
COMÚN, se emplea una zona común de datos a la que tienen acceso varios módulos
MODERADO,
DE CONTROL, la zona común es un dispositivo externo al que están ligados los módulos,
esto implica que un cambio en el formato de datos afecta a todos estos módulos
POR ETIQUETA, en ontercambio de datos se realiza mediante una referencia a la
estructura completa de datos (vector, pila, árbol, grafo, ...)
DÉBIL,
DE DATOS, viene dado por los datos que intercambian los módulos. Es el mejor posible
SIN ACOPLAMIENTO DIRECTO, es el acoplamiento que no existe
INGENIERÍA DEL SOFTWARE Javier Martín 70
DESCOMPOSICIÓN MODULAR: COHESIÓN
Es necesario lograr que el contenido de cada módulo tenga la máxima coherencia. Para que el nº de
módulos no sea demasiado elevado y complique el diseño se tratan de agrupar elementos afines y
relacionados en un mismo módulo.
ALTA
COHESIÓN ABSTRACCIONAL, se logra cuando se diseña el módulo como tipo abstracto
de datos o como una clase de objetos
COHESIÓN FUNCIONAL, el módulo realiza una función concreta y específica
MEDIA
COHESIÓN SECUENCIAL, los elementos del módulo trabajan de forma secuencial
COHESIÓN DE COMUNICACIÓN, elementos que operan con le mismo conjunto de datos
de entrada o de salida
COHESIÓN TEMPORAL, se agrupan elementos que se ejecutan en el mismo momento. Ej.
Arrancar o parar dispositivos
BAJA
COHESIÓN LÓGICA, se agrupan elementos que realizan funciones similares. Ejs.:
módulos de E/S o de tratamiento de errores
COHESIÓN COINCIDENTAL, es la peor y se produce cuando los elementos de un módulo
no guardan relación alguna
La descripción del comportamiento de un módulo permite establecer el grado de cohesión:
Si es una frase compuesta y contiene más de un verbo la cohesión será MEDIA
Si contiene expresiones secuenciales (primero, entonces, cuando...), será temporal o secuencial
Si la descripción no se refiere a algo específico (Ej. Todos los errores), cohesión lógica
Si aparece “inicializar”, “preparar”, “configurar”, probablemente sea temporal.
INGENIERÍA DEL SOFTWARE Javier Martín 71
DESCOMPOSICIÓN MODULAR: COMPRENSIBILIDAD
Para facilitar los cambios, el mantenimiento y la reutilización de módulos es
necesario que cada uno sea comprensible de forma aislada. Para ello es bueno
que posea independencia funcional, pero además es deseable:
IDENTIFICACIÓN, el nombre debe ser adecuado y descriptivo
DOCUMENTACIÓN, debe aclarar todos los detalles de diseño e
implementación que no queden de manifiesto en el propio código
SIMPLICIDAD, las soluciones sencillas son siempre las mejores
La adaptación de un sistema resulta más dificil cuando no hay independencia
funcional, es decir, con alto acoplamiento y baja cohesión, y cuando el diseño
es poco comprensible. Otros factores para facilitar la adaptabilidad:
PREVISIÓN, es necesario prever que aspectos del sistema pueden ser
susceptibles de cambios en el futuro, y poner estos elementos en módulos
independientes, de manera que su modificación afecte al menor número de
módulos posible
ACCESIBILIDAD, debe resultar sencillo el acceso a los documentos de
especificación, diseño, e implementación para obtener un conocimiento
suficiente del sistema antes de proceder a su adaptación
CONSISTENCIA, después de cualquier adaptación se debe mantener la
consistencia del sistema, incluidos los documentos afectados
DESCOMPOSICIÓN MODULAR: ADAPTABILIDAD
INGENIERÍA DEL SOFTWARE Javier Martín 72
TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE
La descomposición del sistema se hace desde un punto de vista funcional.
Desde el punto de vista de la codificación, cada módulo corresponde
esencialmente a un subprograma.
TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE:
DESARROLLO POR REFINAMIENTO PROGRESIVO
Esta técnica consiste en la aplicación de la fase de diseño de la programación
estructurada. Las estructuras básicas son la secuencia, la selección entre
alternativas y la iteración.
Cada paso en la descomposición consiste en refinar o detallar una parte del
programa global u operación, que a su vez podrá ser descompuesta en otras
operaciones. Los refinamientos se basan en la aplicación de estructuras de control
en el programa. Veamos como ejemplo “obtener las raíces de una ec. de 2º grado”:
Obtener raíces ->
Leer coeficientes
Resolver ecuación -->
Calcular discriminante
Calcular raíces -->
SI el discriminante es negativo ENTONCES
Calcular raíces complejas
SI-NO
Calcular raíces reales
FIN-SI
Imprimir raíces
INGENIERÍA DEL SOFTWARE Javier Martín 73
TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE:
PROGRAMACIÓN ESTRUCTURADA DE JACKSON
Esta técnica sigue las ideas de la programación estructurada (secuencia,
selección, iteración) y el método de refinamientos sucesivos pàra construir la
estructura del programa en forma descendente.
Se recomienda construir la estructura del programa de forma similar a las
estructuras de datos de entrada y de salida
Pasos de la técnica JSP:
1) Analizar el entorno del problema y describir las estructuras de datos a
procesar
2) Construir la estructura del programa basándose en las estructuras de
datos
3) Definir las tareas a realizar en cada módulo de la estructura del programa
Este tercer paso corresponde en su detalle a la fase de codificación
Ej.: Programa para justificar el texto, es decir, reagrupar las palabras en líneas
e intercalar los espacios adecuados para que se ajusten a los márgenes
PASO 1. Las estructuras de datos que reconocemos son
Texto de entrada = {[separador de párrafo | palabra]}
Texto de salida = {[línea ajustada | línea final | línea en blanco]}
INGENIERÍA DEL SOFTWARE Javier Martín 74
TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE:
PROGRAMACIÓN ESTRUCTURADA DE JACKSON
En el PASO 2 se trata de encontrar
una estructura del programa que se
ajuste a las estructuras de los datos
de entrada y salida
INGENIERÍA DEL SOFTWARE Javier Martín 75
TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE:
DISEÑO ESTRUCTURADO
Según esta técnica, la tarea de diseño consiste en pasar de los DFDs a los
diagramas de estructura.
Hay que establecer una jerarquía o estructura de control entre los diferentes
módulos, que no está implícita en el modelo funcional descrito en los DFDs
Para dos módulos relacionados en el DFD (A) tenemos 3 posibilidades de
organización modular diferentes.
INGENIERÍA DEL SOFTWARE Javier Martín 76
TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE:
DISEÑO ESTRUCTURADO
Para establecer la jerarquía de control entre módulos se recomienda hacer
ciertos análisis en el flujo de datos: de flujo de transformación y de flujo de
transacción. Para ello es recomendable construir un DFD con todos los
procesos contenidos en los primeros niveles prescindiendo de los almacenes.
El análisis de flujo de
transformación
consiste en identificar
un flujo global de
información desde los
elementos de entrada
hasta los de salida.
Los procesos se
agrupan en 23
regiones: flujo de
entrada, de
transformación y de
salida.
INGENIERÍA DEL SOFTWARE Javier Martín 77
TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE:
DISEÑO ESTRUCTURADO
El flujo de transacción es aplicable cuando el flujo de datos se puede descomponer en varias
líneas separadas. El análisis consiste en identificar el centro de transacción a partir del cual
se ramifican las líneas de flujo a las regiones correspondientes a cada una de las
transacciones
INGENIERÍA DEL SOFTWARE Javier Martín 78
TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE:
DISEÑO ESTRUCTURADO. EJ. GESTIÓN DE BIBLIOTECA
INGENIERÍA DEL SOFTWARE Javier Martín 79
TÉCNICAS DE DISEÑO BASADO EN ABSTRACCIONES
La idea es que los módulos corresponden a funciones o a tipos abstractos de datos.
Los lenguajes que dan más facilidades para la implementación son los orientados a
objetos
TÉCNICAS DE DISEÑO BASADO EN ABSTRACCIONES:
DESCOMPOSICIÓN MODULAR BASADA EN ABSTRACCIONES
Se trata de ampliar el lenguaje de programación con nuevas operaciones y tipos de
datos definidos por el usuario, de forma que se simplifique la escritura de los niveles
superiores del programa, basándose en módulos que realicen estas operaciones
Podemos identificar los tipos abstractos correspondientes a un número
complejo y a una ecuación de 2° grado y definir sobre dichos tipos abstractos las
siguientes operaciones:
Ecuación de 2° grado: Número complejo:
Leer ecuación Escribir
Escribir ecuación Sumar, Restar, etc..
Obtener raíces Raíz cuadrada
La estructura modular del programa sería:
INGENIERÍA DEL SOFTWARE Javier Martín 80
TÉCNICAS DE DISEÑO BASADO EN ABSTRACCIONES: MÉTODO DE
ABBOTT
A partir de la descripción o especificación de los módulos es posible identificar las palabras o términos que
puedan corresponder a elementos significativos del diseño:
Tipos de datos, que aparecen como sustantivos genéricos
Atributos, son sustantivos en general
Operaciones, tienen la forma de verbos o nombres de acciones
Se subrayan en la descripción las palabras significativas haciendo una lista de nombres y otra de verbos u
operaciones. Hay que eliminar los términos irrelevantes o los sinónimos de palabras ya aparecidas
DATO Atributos Operaciones
Palabra Caracteres Imprimir
Párrafo Separador
Línea salida
Iniciar párrafo
Poner palabra
Terminar párrafo
Separador de
párrafo
Líneas en blanco
Sangrado
Línea Sangrado
Palabras
Iniciar línea
¿cabe palabra?
Poner palabra
Imprimir sin ajustar
Imprimir ajustada
INGENIERÍA DEL SOFTWARE Javier Martín 81
TÉCNICAS DE DISEÑO ORIENTADAS A OBJETOS
Es esencialmente igual al diseño basado en abstracciones, añadiendo la
herencia y el polimorfismo.
En la descomposición modular del sistema cada módulo contiene la
descripción de una clase de objetos o de varias clases relacionadas entre
sí.
PASOS:
Estudiar y comprender el problema a resolver
Desarrollar en líneas generales uan posible solución, al menos
informal
Formalizar dicha estrategía en términos de clases, objetos y sus
relaciones:
Identificar los objetos, sus atributos y sus componentes
Identificar las operaciones sobre los objetos y asociarlas a la clase
adecuada
Aplicar herencia donde convenga
Describir cada operación en función de las otras, y subsanar posibles
omisiones
Asignar clases y objetos a los módulos del sistema
INGENIERÍA DEL SOFTWARE Javier Martín 82
TÉCNICAS DE DISEÑO DE DATOS
Muchas aplicaciones necesitan almacenar información de forma permanente y la
mejor forma de hacerlo es crear una base de datos subyacente
Podemos enfocar la organización de la base de datos de 3 formas:
Nivel externo Esquemas de usuario
Nivel conceptual Esquemas lógicos
Nivel interno Esquemas físicos
El nivel externo corresponde a la visión del usuario, en la fase de análisis de pasa
al nivel conceptual, que establece la organización de los datos, y finalmente en la
etapa de diseño se pasa al nivel interno.
DISEÑO DE BASES DE DATOS RELACIONALES, en este modelo la eficiencia se
basa en:
Las FORMAS NORMALES, que tienden a evitar las redundancias en los datos
almacenados
FN1, la información asociada a cada columna de la tabla es un único valor, y no
una colección
FN2, si hay una clave primaria que distingue e identifica cada fila, el resto de los
datos dependen de toda la clave primaria
FN3, el valor de cada columna que no es clave primaria depende directamente de
la clave primaria. Se puede conseguir si se separan las tablas.
Los INDICES, que mejoran la velocidad de acceso a los datos
INGENIERÍA DEL SOFTWARE Javier Martín 83
TÉCNICAS DE DISEÑO DE DATOS: DISEÑO DE LAS ENTIDADES
En el modelo relacional cada entidad
del modelo E-R se traduce en una
tabla por cada clase de entidad, con
una fila por cada elemento de esa
clase y una columna por cada atributo
de esa entidad.
Entre las entidades relacionadas se
puede incluir una columna con un
número de referencia o identificador
que las relaciona, sirve como clave
primaria.
En el modelo E-R todas las
relaciones se consideran de
asociación, y la manera de trasladar
esto a las tablas depende de la
cardinalidad de la relación. La
relación se convierte en una tabla que
contiene referencias a las tablas de
las entidades relacionadas, así como
los atributos de la relación (cale para
cualquier cardinalidad, incluso N:N).
Si es 1:N es posible incluir los datos
de la relación en la tabla con
cardinalidad 1. Si la cardinalidad es
1:1 se pueden fundir las tablas de las
dos entidades.
INGENIERÍA DEL SOFTWARE Javier Martín 84
TÉCNICAS DE DISEÑO DE DATOS: COMPOSICIÓN Y HERENCIA
Las relaciones de COMPOSICIÓN
se tratan como las de asociación, y
en ellas la cardinalidad del objeto
compuesto suele ser 1, por lo que
se puede aplicar la simplificación.
Cuando una clase tiene carias
subclases hay 3 formas de
amacenar las entidades ne tablas:
(a) Una tabla para la superclase con
los atributos comunes y una tabla
para cada subclase
(b) Desaparece la tabla de la
superclase y los atributos comunes
heredados se repiten en las
subclases
(c) Se prescinde de las tablas de la
subclase y se amplia la tabla de la
superclase con todos los atributos
de las subclases, de forma que
estos valores serán opcionales
para los elementos
INGENIERÍA DEL SOFTWARE Javier Martín 85
Tema 5:
CODIFICACIÓN Y PRUEBAS
INGENIERÍA DEL SOFTWARE Javier Martín 86
CODIFICACIÓN DEL DISEÑO
Nos vamos a referir a las últimas fases del ciclo de vida: codificación,
pruebas de unidades, integración y pruebas de sistema.
Cuando alguna de las pruebas no resulta positiva es necesario repetir
la codificación o la integración y probar de nuevo.
La fase de codificación constituye el núcleo central en cualquiera de los
modelos y tiene una importancia fundamental ya que elabora los
programas fuente.
Previamente a la codificación es necesario elegir el lenguaje que se
empleará así como la metodología de programación. También se
pueden establecer en el equipo unas normas y un estilo de
programación común, lo que mejorará la coordinación y facilitará el
trabajo. Además se consigue facilitar el mantenimiento y mejorar la
reusabilidad del software.
Cuando el resultado de las pruebas no sea satisfactorio será necesario
modificar el código, lo que podrá introducir nuevos errores. Si la
programación es estructurada será más fácil localizar la disfunción y la
posterior modificación y las pruebas del código, dónde podemos
introducir puntos de test.
INGENIERÍA DEL SOFTWARE Javier Martín 87
LENGUAJES DE PROGRAMACIÓN
Aunque los lenguajes han evolucionado mucho desde los años 50 todavía están más próximos a la máquina que al pensamiento humano.
Los lenguajes suelen adoptar los avances metodológicos que se producen en el desarrollo del software. Ej.: C y C++
DESARROLLO HISTÓRICO, muchos han sido desarrollados con fines experimentales y muy pocos han llegado a ser utilizados
industrialmente:
1ª GENERACIÓN: muy próximos al lenguaje máquina
Ensamblador, asocia a cada instrucción de la máquina un nemónico
2ª GENERACIÓN: no dependen de la CPU, se programa de manera simbólica, en “alto nivel”.
FORTRAN (FORula TRANslator), para aplicaciones científicas
COBOL, para procesamiento de información. Supone el 70 %
ALGOL, da gran importancia a la tipificación de datos
BASIC, sencillo y fácil de aprender. Desarrollado para el PC.
3ª GENERACIÓN: programación estructurada con declaración de tipos. Los últimos van asociados a otros paradigmas.
PASCAL, fue diseñado para la enseñanza de la programación estructurada. Tipificación rígida y no contempla la codificación
por separado
MÓDULA-2, descendiente de pascal, se incorpora la estructura de módulo. Se mejora modularidad, concurrencia,
abstracción y ocultación
C, desarrollado para la codificación del UNIX. Flexible y potente. No hay restricciones sobre las operaciones con distintos
tipos.
ADA, descendiente de pscal, mucho más potente y complejo. Incorpora modularidad, abstracción, ocultación, concurrencia y
sincronización entre tareas.
SMALLTALK, precursos de los lenguajes orientados a objetos
C++, incorpora en C los mecanismos de la POO: ocultación, clases, herencia y polimorfismo.
EIFFEL, permite la definición de clases genéricas, herencia múltiple y polimorfismo.
LISP, lenguaje funcional usado en IA y sistemas expertos. Basado en listas admite recursividad. Maneja bien los símbolos
PROLOG, lenguaje lógico en que se construye una base de conocimiento basada en reglas a partir de la cual podemos
inferir nuevos hechos o reglas.
4ª GENERACIÓN: mayor grado de abstracción. Se agrupan en:
BASES DE DATOS; como SQL permiten acceder y manipular la información.
GENERADORES DE PROGRAMAS, son eficientes en un dominio de aplicaciones limitado. La mayoría producen
aplicaciones de gestión y la salida va en cobol, aunque se han desarrollado herramientas CASE que generan programas en
C++ o ADA.
CÁLCULO, hojas de cálculo, herramientas de simulación y diseño para el control, etc.
OTROS: herramientas para la especificación y verificación formal de programas, lenguajes de simulación, de prototipos, etc.
INGENIERÍA DEL SOFTWARE Javier Martín 88
PRESTACIONES DE LOS LENGUAJES:
ESTRUCTURAS DE CONTROL
se incluyen aquí, además de las características propias de la programación estructurada, el
manejo de excepciones y la concurrencia.
Programación estructurada: secuencia, iteración y selección (verdadero-falso y por casos)
Manejo de excepciones: errores humanos, fallos hardware, errores software, datos de
entrada vacíos, valores fuera de rango, etc. (estructuras exception when y raise).
Concurrencia, tareas simultáneas, sincronización, comunicación e interbloqueos. Los
lenguajes han implementado la posibilidad de lanzar tareas concurrentes de distintas formas:
CORRUTINAS, tienen una estructura semejante a subprogramas pero con una transferencia del
control más flexible. El avance en la ejecución de las corrutinas se produce según el avance entre
ellas.
FORK-JOIN, es la propuesta de UNIX.
COBEGIN-COEND, entre estas palabras se inician todas las tareas y se finalizan. Es posible el
anidamiento.
PROCESOS; cada tarea se declara como un proceso y estos y se ejecutan concurrentemente. En
algunos casos es posible lanzar dinámicamente nuevos procesos una vez iniciado el programa.
PARA LA COMUNICACIÓN ENTRE TAREAS.
• VARIABLES COMPARTIDAS
– SEMÁFOROS
– REGIONES CRÍTICAS
– MONITORES
• PASO DE MENSAJES
– CSP
– LLAMADA A PROCEDIMIENTOS REMOTOS
– REDENZVOUS, DE ADA
INGENIERÍA DEL SOFTWARE Javier Martín 89
PRESTACIONES DE LOS LENGUAJES:
ESTRUCTURAS DE DATOS
DATOS SIMPLES. Para los eneros hay que tener en cuenta el rango posible y para los de coma flotante la
precisión. En ocasiones también permiten el manejo de complejos.
Otros tipos simples son char y string, para el manejo de cadenas. Los tipos enumerados también pueden
resultar útiles, un tipo enumerado muy frecuente son los booleanos.
En ocasiones los lenguajes permiten utilizar subrangos.
DATOS COMPUESTOS, son combinaciones de datos simples y compuestos ya definidos. Pueden ser
homogéneos como los ARRAYS y heterogéneos como los RECORDS o STRUCTS.
Para el manejo de estructuras dinámicas de datos muchos lenguajes incluyen punteros
CONSTANTES, en los lenguajes modernos se pueden declarar constantes simbólicas, sin indicar
directamente su valor numérico.
COMPROBACIÓN DE TIPOS, se pueden distinguir 5 niveles:
Nivel 0: sin tipos, no es posible declarar nuevos tipos y todos los datos deben pertenecer a tipos predefinidos
Nivel 1: tipado automático, el compilador decide cuál es el tipo más adecuado para cada dato.
Nivel 2: tipado débil, el compilador hace inferencias sobre los tipos y solo son posibles determinadas
conversiones
Nivel 3: tipado semirígido, todos los datos deben ser declarados con su tipo
Nivel 4: tipado fuerte, aquí además de declarar los tipos, el programador está obligado a hacer explícita
cualquier conversión de tipos.
ABSTRACCIONES Y OBJETOS.
ABSTRACCIONES FUNCIONALES
TIPOS ABSTRACTOS DE DATOS
OBJETOS
MOODULARIDAD. Se requiere la compilación por separado. Además se introducen de forma redundante la
declaración y la definición de cada módulo, para permitir al compilador hacer comprobaciones acerca de la
consistencia. C y modula-2 lo tienen, pero pascal es monolítico.
INGENIERÍA DEL SOFTWARE Javier Martín 90
CRITERIOS DE SELECCIÓN DEL LENGUAJE
El lenguaje es uno de los elementos más importantes de cualquier desarrollo y tiene una
influencia decisiva en la depuración y el mantenimiento dela aplicación. Criterios:
IMPOSICIÓN DEL CLIENTE, a veces para disminuir los costes de desarrollo y
mantenimiento que se producen cuando una empresa utiliza lenguajes diferentes.
TIPO DE APLICACIÓN, hay lenguajes orientados a un campo de aplicación concreto.
Aplicaciones tiempo real críticas -> ensamblador
Gestión -> cobol
Área científico-técnica -> Fortran, Pascal, C
Inteligencia artificial -> Lisp, Prolog
Orientado a objeots ->> Eifel, C++
DISPONIBILIDAD Y ENTORNO, hay que comprobar los compiladores existentes para
la plataforma elegida. Estudio comparativo de eficiencia con un programa de prueba.
Herramientas del entorno de desarrollo: editor, montador, depurador, control versiones,
manejo de librerías, etc.
EXPERIENCIA PREVIA, aprovechar la experiencia aumenta el rendimiento y disminuye
las posibilidades de error. La formación supone una fuerte inversión.
RESUABILIDAD, organización de librerías que faciliten la búsqueda y almacenamiento
de módulos reutilizables.
TRANSPORTABILIDAD, depende del lenguaje
USO DE VARIOS LENGUAJES, no es aconsejable a no ser que las distintas partes
sean más fáciles de desarrollar en lenguajes concretos. Hay que tener en cuenta la
compatibilidad de los compiladores
INGENIERÍA DEL SOFTWARE Javier Martín 91
ASPECTOS METODOLÓGICOS
Estos aspectos pueden mejorar la codificación bajo determinados puntos de vista: claridad, manejo de errores eficiencia
y transportabilidad.
Normas y estilo, para conseguir un trabajo del equipo homogéneo. Ejemplos:
Formato y contenido del as cabeceras de cada módulo
Formato y contenido para los comentarios
Uso del indentado
Elección de nombre y uso de mayúsculas
Restricciones sobre el tamaño del os módulos, evitar anidamiento excesivo, no usar goto, etc.
Manejo de errores. Las causas de los errores pueden estar en el hardware o en el software, incluso de pueden producir
por la introducción de datos incorrectos.
DEFECTO, incorrección en el software. Pueden permanecer ocultos hasta que no se ejecutan determinadas
partes del programa
FALLO, elemnto del programa que no funciona correctamente, produciendo un resultado erróneo
ERROR, estado no válido de un programa al que se llega como consecuencia de un fallo.
Al codificar podemos adoptar distintas actitudes ante los errores:
NO CONSIDERAR LOS ERRORES, no es realista esta postura
PREVENCIÓN DE ERRORES, consiste en detectar los fallos antes de que provoquen un error. Hay que
evitar la propagación de errores y tener siempre a la salida un resultado correcto o una señal de fallo.
RECUPERACIÓN DE ERRORES, Cuando no es posible depurar todos los fallos es necesario hacer un
tratamiento de errores para devolver al programa a un estado válido y evitar que el error se propague
1. Detección del error
2. Recuperación del error. Se pueden usar dos esquemas en general:
1. RECUPERACIÓN HACIA DELANTE, hay que programas un mecanismo de excepciones para
que cuando se detecte el error se corrija el estado y se continúe correctamente la ejecución.
2. RECUPERACIÓN HACIA ATRÁS, corrige el estado no válido restaurando el programa a un
estado correcto anterior,
• Una transacción es una operación que puede terminar con éxito o con fallo, en cuyo caso se
aborta y se restaura el estado de antes de comenzar dicha transacción.
INGENIERÍA DEL SOFTWARE Javier Martín 92
ASPECTOS METODOLÓGICOS: EFICIENCIA Y
TRANSPORTABILIDAD
La potencia de cálculo y la cantidad de memoria disponible en los computadores actuales
hacer preferible la claridad en el código que la EFICIENCIA.
EFICIENCIA EN MEMORIA, en la fase de diseño se estudian las posibles alternativas y
se opta por el algoritmo que optimiza el uso dela memoria.
EFICIENCIA DE TIEMPO, es importante en el desarrollo de sistemas de tiempo real
muy críticos. A veces se mejora la eficiencia de tiempo a costa de ocupar más memoria.
En el diseño se estudian las alternativas y se adopta el algoritmo más rápido. Técnicas
de codificación para aumentar la eficiencia de tiempo:
Tabular cálculo complejos
Expansión en línea, emplear macros en vez de subrutinas
Simplificar las expresiones aritméticas y lógicas
Sacar fuera de los bucles lo que no sea necesario repetir
Usar estructuras de datos de acceso rápido
Evitar operaciones en coma flotante, mejor en coma fija
Evitar conversiones innecesarias de tipos
TRANSPORTABILIDAD DEL SOFTWARE, no solo es rentable a corto plazo para obtener
versiones para diferentes plataformas, a medio y largo plazo facilita el mantenimiento y la
adaptación de la aplicación a las nuevas arquitecturas.
Los factores para la transportabilidad son:
Utilización de estándares
Aislar las peculiaridades, colocándolas en módulos separados. Se procurará evitar aquellos
elementos no consolidados y que pueden estar sujetos a futuros cambios o revisiones.
Las peculiaridades de los distintos tipos de computadores depende de la arquitectura y del
sistema operativo utilizado.
INGENIERÍA DEL SOFTWARE Javier Martín 93
TÉCNICAS DE PRUEBAS
Para garantizar su calidad es necesario someter al programa a diversas
pruebas para garantizar su funcionamiento correcto.
Se deben hacer pruebas a cada módulo, según avanza la codificación
del proyecto. Finalmente se harán las pruebas de integración entre
módulos y las pruebas de sistema
OBJETIVOS, el principal objetivo es conseguir que el programa funcione
incorrectamente para ir depurando los errores y que se descubran los
efectos. Para elaborar los casos de prueba:
Una buena prueba encuentra los errores y no los encubre
Para determinar si hubo error es necesario conocer el
resultado correcto
Deben participar codificador y diseñador
Al corregir un error se pueden introducir otros nuevos
No es posible demostrar la ausencia de defectos mediante
pruebas
No son posibles las pruebas exhaustivas. Con el menor
esfuerzo posible hay que detectar el máximo nº de defectos,
en especial los más graves.
Las pruebas se realizan en un entorno de ejecución
controlado, para asegurar la estabilidad en los pruebas y
automatizar en lo posible este proceso.
INGENIERÍA DEL SOFTWARE Javier Martín 94
TÉCNICAS DE PRUEBAS DE UNIDADES: CAJA NEGRA
Las técnicas de pruebas de unidades siguen dos estrategias fundamentales:
PRUEBAS DE CAJA NEGRA, se ignora por completo la estructura interna del programa y se
comprueba la corrección de entradas y salidas del programa.
Lo importante es la elaboración de los casos de prueba con el objetivo de descubrir los errores e
incorrecciones. Métodos:
•PARTICIÓN EN CLASES DE EQUIVALENCIA, se trata de ividir el espacio de ejecución del
programa en varios subestapacios o clases equivalentes desde el punto de vista del a caja negra. Hay
que:
•Determinar las clases equivalentes apropiadas
•Establecer pruebas para cada clase de equivalencia, con datos de entrada válidos y no
válidos. Se repiten las pruebas hasta cubrir todos los casos válidos de todas las clases.
•ANÁLISIS DE VALORES LÍMITE, los errores tienden a aparecer al operar en las fronteras.
Directrices para la elaboración de casos de pruebas:
•Entradas, probar los valores del límite y justo fuera del límite
•Salidas, probar los valores del límite y justo fuera del límite
•Memoria, probar tamaños nulos, límite superior y superior al límite de todas las estructuras
de datos del programa
•Recursos, probar límites. Si terminales=30, probar 0, 20 y 31
•Otros, probar los valores límite y establecer las pruebas
•COMPARACIÓN DE VERSIONES, se desarrollan varias versiones software para resolver la
especificación del módulo y se comparan los resultados con el fin de detectar errores.
•EMPLEO DELA INTUICIÓN, la intuición y la experiencia puede mejorar los casos de prueba,
también es conveniente que participen expertos ajenos al desarrollo.
INGENIERÍA DEL SOFTWARE Javier Martín 95
TÉCNICAS DE PRUEBAS DE UNIDADES: CAJA TRANSPARENTE
Se tiene en cuenta la estructura interna del módulo. Los
casos de prueba deben conseguir que:
Todas las decisiones se ejecuten en uno y otro sentido
Todos los bucles se ejecuten en los supuestos más
diversos posibles
Todas las estructuras de datos se modifiquen y
consulten alguna vez
La complejidad de los módulos dificulta realizar exhaustivas
pruebas de caja transparente. Conviene que participen
expertos con un conocimiento amplio de las estructura del
programa. Métodos:
CUBRIMIENTO LÓGICO, consiste en no dejar ninguna sección
del código sin ejecutar en pruebas. Se llama camino básico a
cualquier recorrido sobre el diagrama de flujo que nos permita
llegar al final desde el punto de entrada.
Hay que determinar el conjunto de caminos básicos
que recorran todas las líneas de flujo del programa al menos una
vez.
Nº máximo de caminos = Nº predicados + 1
En un segundo nivel de casos de prueba se trata de
que se ejecuten todas las combinaciones de caminos básicos por
parejas
A otros niveles se generan casos de pruebas para
que se ejecuten un nº significativo de combinaciones de caminos
básicos
PRUEBAS DE BUCLES, que son elemento esencial en
cualquier programa. Casos:
•Bucles con nº no acotado de repeticiones, probar 0, 1, 2,
bastantes y muchas iteraciones.
•Bucles con nº máximo de repeticiones, probar 0, 1, 2
bastantes, M-1, M y M+1 iteraciones
•Bucles anidados, el nº de pruebas para comprobar todas
las situaciones crece.
EMPLEO DE LA INTUICIÓN, conocer con detalle la
estructura del módulo y tener experiencia.
INGENIERÍA DEL SOFTWARE Javier Martín 96
TÉCNICAS DE PRUEBAS DE UNIDADES: CAJA TRANSPARENTE
Diagramas de flujo con 3 y con 4 predicados lógicos simples
INGENIERÍA DEL SOFTWARE Javier Martín 97
ESTIMACIÓN DE ERRORES NO DETECTADOS
Resulta imposible demostrar que un módulo carece de
defectos, pero podemos hacer una estimación estadísitca
de erratas que permanecen sin detectar:
Anotar el nº de errores que se producen inicialmente al pasar
los casos de prueba.
Corregir el módulo hasta que sdesaparezcan todos esos
errores
Introducir en el módulo, de forma aleatoria un nº razonable de
errores
Someter al módulo nuevamente a los casos de prueba y ver
el nº de errores que se detectan
De esta forma podemos estimar el nº de errores que han
permanecido sin ser detectados en el programa
En función de los resultados se valorará la necesidad de
preparar nuevos casos de prueba.
INGENIERÍA DEL SOFTWARE Javier Martín 98
ESTRATEGIAS DE INTEGRACIÓN
Se integran los módulos del sistema para conformar el sistema completo. Causas de error:
Desacuerdos en el interfaz entre módulos
Interacción indebida entre módulos
Imprecisiones acumuladas
Estrategias básicas para la integración:
INTEGRACIÓN BIG BANG, en un único paso se integran todos los módulos, de forma que
todos los defectos se manifiestan a la vez. Solo recomendable para sistemas pequeños.
INTEGRACIÓN DESCENDENTE, se parte de un módulo principal P, que se prueba con
“módulos de andamiaje”, los cuales van siendo sustituidos por los verdaderos de forma
progresiva por niveles. Los módulos de andamiaje;
No hacen nada y solo sirven para comprobar el interfaz
Imprimen un mensaje de seguimiento, con información de la llamada
Suministran un resultado fijo
Suministran un resultado aleatorio
Suministran un resultado tabulado u obtenido con un algoritmo simplificado
El trabajo de elaborar estos módulos puede ser aprovechado para hacer un prototipo y mostrar
al cliente un avance del programa. Inconvenientes:
Impide el trabajo en paralelo en las pruebas
Es difícil buscar los casos de pruebas especiales o dirigidas a los últimos módulos integrados
INTEGRACIÓN ASCENDENTE, se codifican por separado y en paralelo todos los módulos del
nivel más bajo. Para probarlos se codifican módulos gestores o conductores que los hacen
funcionar independientemente o en combinaciones sencillas. Las ventajas son:
Facilita el trabajo en paralelo
Facilita el ensayo de situaciones especiales
La Integración Sandwich consiste en realizar integración ascendente con los módulos de nivel
más bajo y descendente con los de nivel más alto.
INGENIERÍA DEL SOFTWARE Javier Martín 99
INTEGRACIÓN DESCENDENTE Y ASCENDENTE
INGENIERÍA DEL SOFTWARE Javier Martín 100
PRUEBAS DE SISTEMA
Se trata de probar el sistema completo para ver si realmente cumple las
especificaciones.
Se suelen emplear estrategias de caja negra. Podemos distinguir diferentes
clases de pruebas:
PRUEBAS DE RECUPERACIÓN, para comprobar la capacidad del sistema
para recuperarse ante fallos
PRUEBAS DE SEGURIDAD, par comprobar los mecanismos de protección
ante un acceso no autorizado
PRUEBAS DE RESISTENCIA, para comprobar el comportamiento del
sistema ante situaciones excepcionales
PRUEBAS DE SENSIBILIDAD, para comprobar el tratamiento que da el
sistema a ciertas singularidades relacionadas casi siempre con los
algoritmos matemáticos utilizados
PRUEBAS DE RENDIMIENTO, para comprobar las prestaciones del
sistema que son críticas en tiempo
PRUEBAS ALFA Y BETA. Los usuarios también deben intervenir en las
pruebas finales del sistema
Pruebas alfa, son las primeras pruebas que se realizan en un entorno
controlado donde el usuario tiene el apoyo de alguien del equipo de desarrollo
Pruebas beta, los usuarios trabajan con el sistema en un entorno real y sin
ayuda, anotando los problemas que se le presentan
INGENIERÍA DEL SOFTWARE Javier Martín 101
Tema 6:
AUTOMATIZACIÓN DE PROCESO
DE DESARROLLO
INGENIERÍA DEL SOFTWARE Javier Martín 102
ENTORNOS DE DESARROLLO SOFTWARE
Entorno se refiere al contexto dentro del cual se desarrolla una determinada
actividad, o también a la combinación de instrumentos utilizados.
El entorno de desarrollo software, SEE, cuenta con una serie de técnicas de
automatización denominadas CASE.
Las primeras herramientas se referían a la fase de codificación, así el entorno
de programación clásico consiste en un compilador con editor, montador de
enlaces, etc. Posteriormente con el empleo del término CASE se ha extendido
la automatización a las fases de análisis y diseño.
Para las pruebas de integración se puede disponer de herramientas de ensayo
y para la fase de mantenimiento se dispone de soporte de gestión de
configuración, que incluye la gestión de versiones y el control de cambios.
El futuro de las técnicas CASE está en el soporte completo de todo el ciclo de
vida. Se ha denominado IPSE, ICASE e ISEE.
FORMAS DE ORGANIZACIÓN:
En cadena, se combinan una serie de herramientas de manera que la
salida de cada una es la entrada de la siguiente. Ej.: editor-compilador-
montador
Con repositorio, las herramientas integradas guardan su información en
este almacén común. Una parte del repositorio es el diccionario de datos
Como una única herramienta global, capaz de realizar todas las
operaciones necesarias.
INGENIERÍA DEL SOFTWARE Javier Martín 103
OBJETIVO Y CLASIFICACIÓN DE ENTORNOS DE DESARROLLO
Dar soporte a la programación en un lenguaje concreto
Dar soporte a una metodología de desarrollo
Ayudar al desarrollo de entornos de desarrollo (meta-entornos)
CLASIFICACIÓN, desde un punto de vista pragmático:
ENTORNOS ASOCIADOS A UN LENGUAJE. Un primer paso lo constituyen los
intérpretes de los lenguajes de programación interactivos (BASIC, LISP, SmallTalk, ada).
ENTORNOS ASOCIADOS A ESTRUCTURA. En ellos se almacena la información
correspondiente al programa en forma estructurada y no simplemente como texto. La edición
del programa se consigue mediante un editor de estructura, que permite construir o modificar
un programa operando sobre los elementos de su estructura. El entorno se basa en plantillas
que describen las estructuras básicas (PL/).
ENTORNOS BASADOS EN HERRAMIENTAS. Consisten en una colección de
herramientas (toolkit o toolbox) relativamente independientes, aunque compatibles entre sí,
además deben de existir algún medio para hacerlas funcionar en forma combinada. Suele
presentar como ventaja el ser bastante abiertos, permitiendo la incorporación de nuevas
herramientas. Su inconveniente es la falta de una interfaz de usuario interactiva y uniforme.
ENTORNOS ASOCIADOS A UNA METODOLOGÍA. La integración de los distintos
elementos del entorno se suele conseguir mediante el empleo de un almacén único o
repositorio CASE para almacenar todos los elementos de información contemplados en la
metodología soportada. El repositorio contiene información de los diagramas de flujo de
datos, descripción de cada dato y de cada proceso.
ENTORNOS DE 4ª GENERACIÓN. Se apoyan en un sistema de gestión de base de datos
dotado de un lenguaje de consulta con herramientas complementarias.
INGENIERÍA DEL SOFTWARE Javier Martín 104
CLASIFICACIÓN DE ENTORNOS POR NIVELES
Nivel de servicio. Corresponde a un producto que realiza una función u
operación elemental, que una vez invocada no se interrumpe (compilador).
Nivel de herramienta. Producto software que permite invocar diferentes
servicios u operaciones correspondientes a una misma actividad individual.
(editor de textos).
Nivel de banco de trabajo o equipo de herramientas. Corresponde a un
producto CASE que automatiza o soporta un perfil concreto de actividad
profesional dentro del proceso de desarrollo. Un banco de trabajo suele
englobar varias herramientas, integradas con una interfaz de usuario uniforme.
En la actividad de codificación el banco de trabajo se denomina entorno de
programación.
Entorno de desarrollo. Producto CASE que soporta el proceso completo de
desarrollo de software (IPSE o ICASE).
Los dos primeros niveles se describen a veces como uno solo.
INGENIERÍA DEL SOFTWARE Javier Martín 105
HERRAMIENTAS DE SOFTWARE
Herramientas clásicas.
• Editor de texto.
• Compilador
• Montador de enlaces. Construye ejecutables combinando varios ficheros objeto.
• Gestor de librería. Combina ficheros objeto en una librería.
• Herramienta ‘MAKE’. Automatiza la actualización de los ficheros a partir de otros.
• Intérprete interactivo. Casi Constituye un entorno de programación completo (si lo es se debe clasificar a nivel de banco de trabajo y no de
herramienta). Engloba funciones equivalentes a las de edición, compilación, montaje y ejecución.
• Compilador/Intérprete. Procesador de un lenguaje interpretado de forma no interactiva.Incluye un compilador a código intermedio y un
intérprete de ejecución de dicho código intermedio con todas las librerías de soporte. No incluye funciones de editor de programas.
• Depurador absoluto. Ejecuta el programa de forma controlada. Resulta incomodo de usar ya que hace referencia a posiciones de memoria y a los
registros del procesador.
• Depurador simbólico. Realiza una función análoga al anterior pero con referencia al código fuente por lo que es más cómodo de usar.
Herramientas evolucionadas.
• Editores orientados al lenguaje. Son editores de estructura.
• Herramienta ‘MAKE’ automática. Se incorpora la función ‘MAKE’ al compilador.
• Manejador de versiones. Almacena de forma organizada y eficiente una serie de versiones del mismo elemento software. Se suelen usar desde las
utilidades MAKE al recompilar una aplicación en desarrollo.
• Procesadores/Analizadores de código fuente. Grupo en que se pueden incluir diferentes herramientas que procesan el texto fuente para obtener
mediciones, generar tablas de referencias, encolumnar …etc. Estas funciones podrían estar incorporadas en los compiladores.
• Procesadores de documentos. No son específicos del desarrollo pero son un soporte fundamental.
• Herramientas de control de pruebas. Ayudan a la realización de pruebas unitarias o de
integración.
• Herramientas de control de cambios. Ayudan a la realización del desarrollo y al mantenimiento de aplicaciones.
• Procesadores de ficheros de texto.
Herramientas de 4º generación.
Hojas de cálculo. Procesadores de documentos
Gestores de bases de datos Lenguajes de 4ª generación.
Generadores de programas.
INGENIERÍA DEL SOFTWARE Javier Martín 106
ENTORNOS INTEGRADOS
Integración de datos. Significa que la información almacenada en el entorno es gestionada de manera uniforme, con independencia de las
transformaciones que se hagan con cada elemento de información. Debe de conseguir:
¤ Interoperatividad entre herramientas.
¤ No redundancia de datos
¤ Consistencia de datos.
¤ Paso de datos de una herramienta a otra.
La integración de datos puede conseguirse de diversas maneras:
• Transferencia directa de datos de una herramienta a otra. Eficiente pero poco flexible. Complicada para integrar muchas
herramientas diferentes.
• Transferencia mediante ficheros. Es la más sencilla. Existe un formato normalizado (CDIF).
• Transferencia basada en comunicación. Alternativa a la anterior y puede ser usada en sistemas distribuidos y en sistemas
abiertos.
• Repositorio común. Se utiliza en los entornos modernos con un grado de integración elevado.
Integración de control. Consiste en la combinación flexible de funciones para cumplir con las particularidades del proceso y actividades que
hay que informatizar. El mayor grado se consigue cuando desde una herramienta se puede invocar funciones de otra herramienta. Exige
como paso previo la integración de los datos.
Integración de la presentación. Trata de realizar la interacción con el usuario de manera uniforme, con cierta independencia dela función o
herramienta en uso. Para ello se deben conseguir los objetivos de un sistema amigable:
• Limitar el número de formas de interacción diferentes.
• Usar formas de interacción y presentación adecuadas al modelo mental que el usuario tiene del entorno.
• Satisfacer los tiempos de respuesta esperados y dar indicación del avance del proceso en caso de tratamiento de larga duración.
• Mantener información útil a disposición del usuario.
Integración del proceso. Consiste en que las herramientas se combinan de manera que apoyan o fuerzan el uso de una metodología de
desarrollo definida. Este modo exige una buena integración de control y datos. El proceso de desarrollo puede definirse en base a los
siguientes elementos.
• Un paso del desarrollo es una unidad de trabajo concreta que produce un resultado (por ejemplo revisión del DDD).
• Un suceso o evento es un condición que ocurre durante la ejecución de un paso y que puede desencadenar la ejecución de una
acción asociada (compilación de un módulo).
• Una restricción del desarrollo es una limitación que debe cumplirse.
Un buen grado de integración del proceso exige que todo los pasos, eventos y restricciones que definen de forma natural la metodología de
desarrollo a utilizar, sean representables y tratables dentro del entorno.
INGENIERÍA DEL SOFTWARE Javier Martín 107
ENTORNOS INTEGRADOS: EL REPOSITORIO CASE
El repositorio CASE Es un almacén común en el que se guarda toda la información necesaria
para la operación de un grupo de herramientas o de un entorno de desarrollo. El repositorio
facilita las funciones de almacenamiento y recuperación de datos, normalmente en forma
concurrente multiusuario, y el mantenimiento de relaciones entre los datos. Además puede
suministrar funciones de gestión de versiones, de seguridad y de gestión de transacciones.
Para proporcionar las funciones de almacenamiento y recuperación de datos se requiere:
• Un servicio de metamodelo, que permita definir las estructuras de datos que han de
almacenarse en el repositorio.
• Un servicio de consulta y actualización (query) que permita acceder y manipular la
información contenida en el repositorio.
• Un servicio de vistas que permita definir subconjuntos de datos y operaciones que constituyan
el subentorno de trabajo de ciertas actividades y entre los que haya que mantener relaciones
concretas de consistencia.
• Un servicio de intercambio de datos, que facilite la importación y exportación de información
mediante ficheros externos.
INGENIERÍA DEL SOFTWARE Javier Martín 108
BANCOS O EQUIPOS DE TRABAJO
Un banco de trabajo debe integrar las herramientas necesarias para dar soporte a un determinado perfil profesional o
actividad general de desarrollo. Un banco de trabajo debe de conseguir:
• Integración de la presentación
• Integración de control
• Integración de datos (preferentemente con repositorio común).
Según la actividad soportada, tendremos distintos bancos o equipos de trabajo, entre ellos:
• Equipos de análisis y diseño: Herramienta CASE o CASE superior. Corresponde al entorno asociado a la
metodología. Muchos de ellos cubren las dos fases (análisis y diseño), mientras que otros sólo cubren una. El
repositorio común almacena todos los elementos definidos en la metodología soportada.
• Entorno de programación. Es el banco de trabajo para la actividad de codificación pudiéndose extender al
diseño detallado y a las pruebas de unidades.
• Equipo de verificación y validación: Capaz de facilitar las tareas de inspección y pruebas de módulos y
sistemas. Suelen estar ligados al entorno de programación. Pueden incluir funciones de:
¤ Análisis estático, con evaluación de métricas de calidad y generación de matrices o grafos de
llamadas entre funciones y módulos.
¤ Generación de tablas de referencias cruzadas.
¤ Gestión de pruebas, automatizando la realización de ensayos.
• Equipo de construcción de interfaz del usuario. Permite definir cómodamente el esquema de diálogo con
el usuario, así como los elementos de interacción.
• Equipo de gestión de configuración. Permite almacenar diferentes versiones de los elementos del
proyecto, definir distintas configuraciones y controlar los cambios sucesivos.
• Equipo de ingeniería inversa. Debe facilitar la extracción de información de diseño, los elementos
abstractos a partir de un código o sistema software existente.
• Equipo de gestión de proyectos. Facilita la confección de planes de trabajo, con la asignación de tiempos
y recursos a diferentes tareas, y el seguimiento de su realización.
INGENIERÍA DEL SOFTWARE Javier Martín 109
ENTORNOS ORIENTADOS AL PROCESO
Deben de ser capaces de soportar todas las actividades del ciclo de vida de desarrollo siguiendo un modelo definido. Un
entorno global de estas características se designa como IPSE, ICASE o ISEE. La característica principal que distingue
un entorno de esta clase de un banco de trabajo amplio es el soporte explícito de un modelo global de desarrollo. El
entorno debe poseer las características de integración del proceso, además de las de integración de datos, control y
presentación.
Para conseguir este nivel de integración es necesario contar con un modelo formal del proceso de desarrollo. A diferencia de
las metodologías parciales de análisis y diseño, este modelo suele construirse a medida de cada empresa productora de
software. Un ISEE de uso general deberá permitir:
• Construir la definición formal del modelo del proceso de desarrollo.
• Asegurar la aplicación práctica del modelo definido.
Aunque no existen entornos ISEE disponibles si existen esquemas generales de arquitectura de entornos orientados al
proceso, que en algunos casos han dado lugar a colecciones de herramientas que facilitan las funciones deseadas.
Algunas son:
¤ PCTE (Portable Common Tool Environment). Es una arquitectura de entorno integrado, basada en un repositorio
común. Su elemento principal es la definición de interfaz de acceso al repositorio. Sobre él pueden operar herramientas
que automaticen las actividades previstas en el modelo del proceso. Existen implementaciones de repositorio que
cumplen con la especificación PCTE, y también algunas colecciones de herramientas como las del proyecto PACT.
¤ ESF (Eureka Software Factory). Define otro modelo de arquitectura, cuyo elemento central de integración es el
denominado ‘software bus’, que es un interfaz normalizado para la interconexión de herramientas. Se distinguen dos
clases de herramientas: servidores y herramientas de interacción. Los servidores pueden realizar las funciones de
repositorio, tanto centralizado como distribuido, y suministrar servicios o funciones automatizadas. Las herramientas de
interacción permiten la comunicación con los usuarios, que pueden acceder a los repositorios y a los servicios a través
de ellas.
¤ Modelo NIST/ECMA. Contempla una estructura fija, compuesta por elementos que proporcionan una integración de
datos, basada en un repositorio común, integración de presentación mediante un soporte global de interfaz de usuario, e
integración del control, basada en la gestión de procesos y mensajes. El entorno puede particularizarse para un modelo
de desarrollo determinado instalando sobre estos elementos fijos una colección de herramientas.
Ante la ausencia de productos CASE listos para usar se debe de tomar el enfoque de combinar productos para construir un
entorno global.

Más contenido relacionado

La actualidad más candente

Ciclos de vida del software
Ciclos de vida del softwareCiclos de vida del software
Ciclos de vida del softwareGUEOVANNY20
 
Tecnicas de ingenieria de software
Tecnicas de ingenieria de softwareTecnicas de ingenieria de software
Tecnicas de ingenieria de software'Jorge Martinez
 
CICLOS DE VIDA DEL SOFTWARE
CICLOS DE VIDA DEL SOFTWARECICLOS DE VIDA DEL SOFTWARE
CICLOS DE VIDA DEL SOFTWAREFreider Linares
 
Ciclo de vida del software
Ciclo de vida del softwareCiclo de vida del software
Ciclo de vida del softwarearealisherrera
 
Trabajo ciclo de vida del software
Trabajo ciclo de vida del softwareTrabajo ciclo de vida del software
Trabajo ciclo de vida del softwareagtagt
 
Software & Hardware Erick
Software & Hardware ErickSoftware & Hardware Erick
Software & Hardware Erickerick
 
Expo modelocascada
Expo modelocascadaExpo modelocascada
Expo modelocascadamasilog
 
Modelos o Ciclos de vida de software
Modelos o Ciclos de vida de softwareModelos o Ciclos de vida de software
Modelos o Ciclos de vida de softwareWilliam Matamoros
 
Modelos de software ventajas y desventajas
Modelos de software ventajas y desventajasModelos de software ventajas y desventajas
Modelos de software ventajas y desventajasEdith Carreño
 
13. ingeniería del software
13. ingeniería del software13. ingeniería del software
13. ingeniería del softwareDaniel Merchan
 
Ciclo De Vida
Ciclo De VidaCiclo De Vida
Ciclo De VidaJgperez
 
Tipos de ciclos de vida
Tipos de ciclos de vidaTipos de ciclos de vida
Tipos de ciclos de vidasandrasig
 
Modelo Cascada y Espiral
Modelo Cascada y EspiralModelo Cascada y Espiral
Modelo Cascada y Espiraljuanksi28
 
Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Lis Pater
 
Metodologias modernas para el desarrollo de software
Metodologias modernas para el desarrollo de softwareMetodologias modernas para el desarrollo de software
Metodologias modernas para el desarrollo de softwareDeisy Sapaico
 
Introducción a la programación extrema (XP)
Introducción a la programación extrema (XP)Introducción a la programación extrema (XP)
Introducción a la programación extrema (XP)guestba5383
 

La actualidad más candente (18)

Ciclos de vida del software
Ciclos de vida del softwareCiclos de vida del software
Ciclos de vida del software
 
Tecnicas de ingenieria de software
Tecnicas de ingenieria de softwareTecnicas de ingenieria de software
Tecnicas de ingenieria de software
 
CICLOS DE VIDA DEL SOFTWARE
CICLOS DE VIDA DEL SOFTWARECICLOS DE VIDA DEL SOFTWARE
CICLOS DE VIDA DEL SOFTWARE
 
Ciclo de vida del software
Ciclo de vida del softwareCiclo de vida del software
Ciclo de vida del software
 
Trabajo ciclo de vida del software
Trabajo ciclo de vida del softwareTrabajo ciclo de vida del software
Trabajo ciclo de vida del software
 
Software & Hardware Erick
Software & Hardware ErickSoftware & Hardware Erick
Software & Hardware Erick
 
Expo modelocascada
Expo modelocascadaExpo modelocascada
Expo modelocascada
 
Modelos o Ciclos de vida de software
Modelos o Ciclos de vida de softwareModelos o Ciclos de vida de software
Modelos o Ciclos de vida de software
 
Modelos de software ventajas y desventajas
Modelos de software ventajas y desventajasModelos de software ventajas y desventajas
Modelos de software ventajas y desventajas
 
13. ingeniería del software
13. ingeniería del software13. ingeniería del software
13. ingeniería del software
 
Metodologia clasica en cascada
Metodologia clasica en cascadaMetodologia clasica en cascada
Metodologia clasica en cascada
 
Ciclo De Vida
Ciclo De VidaCiclo De Vida
Ciclo De Vida
 
Tipos de ciclos de vida
Tipos de ciclos de vidaTipos de ciclos de vida
Tipos de ciclos de vida
 
Modelo Cascada y Espiral
Modelo Cascada y EspiralModelo Cascada y Espiral
Modelo Cascada y Espiral
 
Ciclo de Vida del Software
Ciclo de Vida del SoftwareCiclo de Vida del Software
Ciclo de Vida del Software
 
Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema
 
Metodologias modernas para el desarrollo de software
Metodologias modernas para el desarrollo de softwareMetodologias modernas para el desarrollo de software
Metodologias modernas para el desarrollo de software
 
Introducción a la programación extrema (XP)
Introducción a la programación extrema (XP)Introducción a la programación extrema (XP)
Introducción a la programación extrema (XP)
 

Destacado

Destacado (20)

5 a bd_servidor
5 a bd_servidor5 a bd_servidor
5 a bd_servidor
 
Bucarasica
BucarasicaBucarasica
Bucarasica
 
Complejidad
ComplejidadComplejidad
Complejidad
 
Bucarasica
BucarasicaBucarasica
Bucarasica
 
Listasenlazadas 100517143015-phpapp02
Listasenlazadas 100517143015-phpapp02Listasenlazadas 100517143015-phpapp02
Listasenlazadas 100517143015-phpapp02
 
Gestion de Entrada y Salida
Gestion de Entrada y SalidaGestion de Entrada y Salida
Gestion de Entrada y Salida
 
Introducion uml
Introducion umlIntroducion uml
Introducion uml
 
Exploration network chapter5
Exploration network chapter5Exploration network chapter5
Exploration network chapter5
 
Exploration network chapter7
Exploration network chapter7Exploration network chapter7
Exploration network chapter7
 
Exploration network chapter4
Exploration network chapter4Exploration network chapter4
Exploration network chapter4
 
Exploration network chapter7
Exploration network chapter7Exploration network chapter7
Exploration network chapter7
 
Paradigma de la_ingenieria_de_sistemas_def
Paradigma de la_ingenieria_de_sistemas_defParadigma de la_ingenieria_de_sistemas_def
Paradigma de la_ingenieria_de_sistemas_def
 
Exploration network chapter1
Exploration network chapter1Exploration network chapter1
Exploration network chapter1
 
Introducción a los Sistemas Operativos
Introducción a los Sistemas OperativosIntroducción a los Sistemas Operativos
Introducción a los Sistemas Operativos
 
Exploration network chapter6
Exploration network chapter6Exploration network chapter6
Exploration network chapter6
 
Gestión de Almacenamiento
Gestión de AlmacenamientoGestión de Almacenamiento
Gestión de Almacenamiento
 
Exploration network chapter2
Exploration network chapter2Exploration network chapter2
Exploration network chapter2
 
Exploration network chapter9
Exploration network chapter9Exploration network chapter9
Exploration network chapter9
 
Exploration network chapter8
Exploration network chapter8Exploration network chapter8
Exploration network chapter8
 
Exploration network chapter3
Exploration network chapter3Exploration network chapter3
Exploration network chapter3
 

Similar a Is

Seleccion de tecnicas de ingenieria de software
Seleccion de tecnicas de ingenieria de softwareSeleccion de tecnicas de ingenieria de software
Seleccion de tecnicas de ingenieria de softwareIngris Argueta
 
García _Herrera_Victor_Eduardo_S9.pptx
García _Herrera_Victor_Eduardo_S9.pptxGarcía _Herrera_Victor_Eduardo_S9.pptx
García _Herrera_Victor_Eduardo_S9.pptxVictorEduardoHerrera3
 
Curso ingeniería de software parte i
Curso ingeniería de software parte iCurso ingeniería de software parte i
Curso ingeniería de software parte iparafernalico
 
Software Engineering Definitions
Software Engineering DefinitionsSoftware Engineering Definitions
Software Engineering DefinitionsApoklypsia
 
Ingeniería del software
Ingeniería del softwareIngeniería del software
Ingeniería del softwareJoxany Chávez
 
Análisis del Proyecto de Software
Análisis del Proyecto de SoftwareAnálisis del Proyecto de Software
Análisis del Proyecto de SoftwareMaricela Ramirez
 
Presentacion de ingenieria
Presentacion de ingenieriaPresentacion de ingenieria
Presentacion de ingenieriaAlexander Cruz
 
Administracion y Gestion de Proyectos
Administracion y Gestion de ProyectosAdministracion y Gestion de Proyectos
Administracion y Gestion de ProyectosRodolfoRojasEscalante
 
MODELO DE DESARRROLLO DE SOFTWARE
MODELO DE DESARRROLLO DE SOFTWAREMODELO DE DESARRROLLO DE SOFTWARE
MODELO DE DESARRROLLO DE SOFTWAREJesus Yepez
 
Presentacion modelos de proceso Grupo 3
Presentacion modelos de proceso Grupo 3Presentacion modelos de proceso Grupo 3
Presentacion modelos de proceso Grupo 3Bruno
 
Metodología de desarrollo de software
Metodología de desarrollo de softwareMetodología de desarrollo de software
Metodología de desarrollo de softwareAbner Garcia
 

Similar a Is (20)

Seleccion de tecnicas de ingenieria de software
Seleccion de tecnicas de ingenieria de softwareSeleccion de tecnicas de ingenieria de software
Seleccion de tecnicas de ingenieria de software
 
Ingenieria de software.
Ingenieria de software.Ingenieria de software.
Ingenieria de software.
 
García _Herrera_Victor_Eduardo_S9.pptx
García _Herrera_Victor_Eduardo_S9.pptxGarcía _Herrera_Victor_Eduardo_S9.pptx
García _Herrera_Victor_Eduardo_S9.pptx
 
Curso ingeniería de software parte i
Curso ingeniería de software parte iCurso ingeniería de software parte i
Curso ingeniería de software parte i
 
Modelo
ModeloModelo
Modelo
 
Software Engineering Definitions
Software Engineering DefinitionsSoftware Engineering Definitions
Software Engineering Definitions
 
Ingeniería del software
Ingeniería del softwareIngeniería del software
Ingeniería del software
 
Análisis del Proyecto de Software
Análisis del Proyecto de SoftwareAnálisis del Proyecto de Software
Análisis del Proyecto de Software
 
Modelo de procesos
Modelo de procesosModelo de procesos
Modelo de procesos
 
Presentacion de ingenieria
Presentacion de ingenieriaPresentacion de ingenieria
Presentacion de ingenieria
 
Gestion de Proyectos
Gestion de ProyectosGestion de Proyectos
Gestion de Proyectos
 
Cap1 gestion
Cap1 gestionCap1 gestion
Cap1 gestion
 
Administracion y Gestion de Proyectos
Administracion y Gestion de ProyectosAdministracion y Gestion de Proyectos
Administracion y Gestion de Proyectos
 
Trabajo de desarrollo desoftware
Trabajo de desarrollo desoftwareTrabajo de desarrollo desoftware
Trabajo de desarrollo desoftware
 
MODELO DE DESARRROLLO DE SOFTWARE
MODELO DE DESARRROLLO DE SOFTWAREMODELO DE DESARRROLLO DE SOFTWARE
MODELO DE DESARRROLLO DE SOFTWARE
 
Presentacion modelos de proceso Grupo 3
Presentacion modelos de proceso Grupo 3Presentacion modelos de proceso Grupo 3
Presentacion modelos de proceso Grupo 3
 
(Inmer)La Ingenieria de Software
(Inmer)La Ingenieria de Software(Inmer)La Ingenieria de Software
(Inmer)La Ingenieria de Software
 
Metodología de desarrollo de software
Metodología de desarrollo de softwareMetodología de desarrollo de software
Metodología de desarrollo de software
 
Ingenieria de software
Ingenieria de softwareIngenieria de software
Ingenieria de software
 
Ingenieria de software 1 u1 v2
Ingenieria de software 1 u1 v2Ingenieria de software 1 u1 v2
Ingenieria de software 1 u1 v2
 

Más de Henrry Eliseo Navarro Chinchilla (12)

Apuntes2
Apuntes2Apuntes2
Apuntes2
 
Apuntes2
Apuntes2Apuntes2
Apuntes2
 
Ingenieria de software
Ingenieria de softwareIngenieria de software
Ingenieria de software
 
Gestionde fichero
Gestionde ficheroGestionde fichero
Gestionde fichero
 
Metodos en php
Metodos en phpMetodos en php
Metodos en php
 
Grafos
GrafosGrafos
Grafos
 
Exploration network chapter11
Exploration network chapter11Exploration network chapter11
Exploration network chapter11
 
Exploration network chapter10
Exploration network chapter10Exploration network chapter10
Exploration network chapter10
 
Fichero
FicheroFichero
Fichero
 
Entrada salida
Entrada salidaEntrada salida
Entrada salida
 
Gestion de Entradas y Salidas
Gestion de Entradas y SalidasGestion de Entradas y Salidas
Gestion de Entradas y Salidas
 
Transmision de datos generalidades
Transmision de datos generalidadesTransmision de datos generalidades
Transmision de datos generalidades
 

Is

  • 1. INGENIERÍA DEL SOFTWARE Javier Martín Centro Asociado de Móstoles / Tres Cantos UNED
  • 2. INGENIERÍA DEL SOFTWARE Javier Martín 2 Introducción JAVIER MARTIN (jmartin@escet.urjc.es) TUTORIAS: JUEVES/VIERNES de 7 a 9 PLAN DE TRABAJO Exposición de los temas y mediante transparencia, abundando en los puntos más importantes. Resolución de dudas Propuesta y resolución de ejercicios y problemas
  • 3. INGENIERÍA DEL SOFTWARE Javier Martín 3 Temas INTRODUCCIÓN ESPECIFICACIÓN DEL SOFTWARE FUNDAMENTOS DEL DISEÑO SOFTAWARE TÉCNICAS GENERALES DE DISEÑO SOFTWARE CODIFICACIÓN Y PRUEBAS AUTOMATIZACIÓN Y PROCESO DE DESARROLLO
  • 4. INGENIERÍA DEL SOFTWARE Javier Martín 4 Tema 1: INTRODUCCIÓN
  • 5. INGENIERÍA DEL SOFTWARE Javier Martín 5 Concepto de Ingeniería de Sistemas Concepto de sistema, conjunto de cosas que ordenadamente relacionadas entre sí contribuyen a un determinado objeto. De forma recursiva, las partes de un sistema pueden ser consideradas como nuevos sistemas (subsistemas). Los sistemas informáticos están compuestos por ordenadores y sus periféricos. Entre ellos podemos distinguir dos tipos de subsistemas: Sistemas Hardware, son los elementos materiales, los que se pueden tocar. Sistemas Software, los programas que gobiernan el funcionamiento del computador. El objetivo de los sistemas informáticos es el tratamiento de la información: almacenamiento, elaboración y presentación de datos. De esta forma se automatizan determinadas acciones. En la concepción del sistema informático no solo se decide el trabajo a realizar, sino también cómo ha de ser utilizado por los usuarios.
  • 6. INGENIERÍA DEL SOFTWARE Javier Martín 6 Concepto de Ingeniería del Software Características del software (lo contrario para el hardware): No se desgasta ni envejece, y por este motivo no requiere reparaciones ocasionales Su duplicación es poco costosa, lo caro es el desarrollo Puede ser modificado fácilmente, tanto que es necesario un control de versiones La Ingeniería del Software comprende las técnicas y procedimientos ingenieriles para el desarrollo del software. La IS no se plantea solo una actividad de programación, previamente son necesarias las fases de análisis y diseño y posteriormente la integración y la verificación, incluso el manteniendo cuando el producto ya está en explotación. (CICLO DE VIDA). Inicialmente la tarea de desarrollo era realizada individualmente por hábiles creativos, de forma poco disciplinada. El trabajo en equipo supone la división y organización del trabajo utilizando metodologías de desarrollo. En los 70 y los 80 empiezan a usarse herramientas CASE (Computer Aided Software Engineering). En los 90 IPSE e ICASE.
  • 7. INGENIERÍA DEL SOFTWARE Javier Martín 7 La crisis del Software Se produce cuando surge la necesidad de desarrollar aplicaciones software demasiado complejas, a mediados de los 60. Para superar la crisis: Aparición de metodologías concretas de desarrollo Concepción de la Ingeniería del Software como disciplina Trabajo en equipo y especialización (analistas, programadores, ...) No se ha llegado a una situación estable, sino a una evolución permanente con avances continuos en la IS, forzados por el rápido abaratamiento y aumento de capacidad del hardware.
  • 8. INGENIERÍA DEL SOFTWARE Javier Martín 8 Mitos del Software El hardware es mucho más importante que el software El software es fácil de desarrollar El software consiste exclusivamente en programas ejecutables El desarrollo del software es sólo una labor de programación Es natural que el software contenga errores
  • 9. INGENIERÍA DEL SOFTWARE Javier Martín 9 Formalización del proceso de desarrollo La ingeniería supone la existencia de procesos bien establecidos para la realización de actividades de desarrollo, construcción, fabricación, etc. El ciclo de vida es el proceso de desarrollo y mantenimiento del software. Según el modelo elegido se describen un conjunto de actividades para llevar a cabo el ciclo de vida, Los modelos clásicos: MODELO EN CASCADA MODELO EN V Prácticamente identifican actividades similares y sólo se diferencian en la forma de presentación.
  • 10. INGENIERÍA DEL SOFTWARE Javier Martín 10 MODELO EN CASCADA
  • 11. INGENIERÍA DEL SOFTWARE Javier Martín 11 MODELO EN CASCADA ANÁLISIS, determinar qué debe hacer el software -> especificación DISEÑO, descomponer y organizar el sistema para que los módulos puedan ser desarrollados por separado CODIFICACIÓN, escribir el código fuente de cada módulo y realizar sobre ellos las pruebas necesarias INTEGRACIÓN, combinar todos los módulos y probar el sistema completo antes de pasar a su explotación MANTENIMIENTO, durante la explotación es necesario realizar cambios ocasionales bien para corregir errores o para introducir mejoras, Se trata de aislar cada fase de las otras, lo que facilita la especialización de los desarrolladores. Al final de cada fase se requiere un proceso de revisión`para evitar que los errores se propaguen a fases posteriores provocando la vuelta atrás.
  • 12. INGENIERÍA DEL SOFTWARE Javier Martín 12 MODELO EN CASCADA AMPLIADO
  • 13. INGENIERÍA DEL SOFTWARE Javier Martín 13 MODELO EN CASCADA Cada fase debe generar una información de salida precisa y suficiente: DOCUMENTOS DE REQUISITOS DEL SOFTWARE (SRD), es una especificación precisa y completa a partir de los requisitos establecidos por el cliente. DOCUMENTO DE DISEÑO DEL SOFTWARE (SDD),descripción de la estructura global del sistema, especificación de qué debe hacer cada uno de los módulos y de cómo se combinan. CÓDIGO FUENTE, el programa debidamente comentado (documentación interna). SISTEMA SOFTWARE, el ejecutable producto dela fase de integración y la documentación de las pruebas realizadas. DOCUMENTOS DE CAMBIOS, después de cada modificación realizada en la fase de mantenimiento: problema detectado y solución adoptada
  • 14. INGENIERÍA DEL SOFTWARE Javier Martín 14 MODELO EN V
  • 15. INGENIERÍA DEL SOFTWARE Javier Martín 15 MODELO EN V AMPLIADO
  • 16. INGENIERÍA DEL SOFTWARE Javier Martín 16 MODELO EN V Incluye fases similares a las del modelo en cascada pero de forma jerárquica. En horizontal se representa el avance en el desarrollo y en vertical el nivel de detalle. VERIFICACIÓN, comprobación de que una parte del sistema cumple con sus especificaciones. VALIDACIÓN, comprobación de que un elmento satisface las necesidades del usuario identificadas durante el análisis.
  • 17. INGENIERÍA DEL SOFTWARE Javier Martín 17 PROTOTIPOS En los modelos clásicos se insiste en las actividades de revisión de resultados al final de cada fase para evitar la vuelta atrás, que no se contempla de una forma organizada y resulta muy costosa. Están orientados a una forma de desarrollo lineal. PROTOTIPO, es un sistema auxiliar que permite probar experimentalmente soluciones parciales a los requisitos del sistema Para que el coste de desarrollo del prototipo sea bajo en relación al del sistema final podemos: Limitar las funciones Limitar su capacidad Limitar su eficiencia Evitar limitaciones de diseño, utilizando un hardware más potente que el que ejecutará el sistema final Reducir la parte a desarrollar
  • 18. INGENIERÍA DEL SOFTWARE Javier Martín 18 PROTOTIPOS RÁPIDOS Su finalidad es solo adquirir experiencia, no se aprovechan como producto (usar y tirar). Se denominan maquetas cuando su funcionalidad o capacidad es muy limitada. El sistema final se codifica totalmente partiendo de cero, no se aprovecha el código del prototipo Lo importante de estos prototipos es que se desarrollen en poco tiempo.
  • 19. INGENIERÍA DEL SOFTWARE Javier Martín 19 PROTOTIPOS RÁPIDOS
  • 20. INGENIERÍA DEL SOFTWARE Javier Martín 20 PROTOTIPOS EVOLUTIVOS En este caso se intenta aprovechar al máximo el código del prototipo, y para ello se emplea el mismo hardware/software del sistema final. Se realizan fases de análisis y diseño parcial, que se van ampliando hasta construir el sistema final mediante adiciones sucesivas. Se puede considerar un modelo en cascada en bucle, de manera que en cada iteración se va avanzando en el desarrollo. HERRAMIENTAS PARA EL DESARROLLO DE PROTOTIPOS, se emplean lenguajes de 4ª generación, que son de alto nivel y de tipo declarativo. También se emplean lenguajes de especificación, como VDM y Z. Si disponemos del compilador correspondiente podemos obtener automáticamente el código del prototipo. En el desarrollo de prototipos es clave la reutilización de software.
  • 21. INGENIERÍA DEL SOFTWARE Javier Martín 21 PROTOTIPOS EVOLUTIVOS
  • 22. INGENIERÍA DEL SOFTWARE Javier Martín 22 MODELO EN ESPIRAL Puede considerarse como un refinamiento del modelo evolutivo general que introduce el análisis de riesgo como elemento fundamental para guiar la evolución del proceso de desarrollo. En la dimensión radial se representa el esfuerzo realizado en el desarrollo (siempre creciente) En cada iteración 4 fases: PLANIFICACIÓN, determina que parte del desarrollo se abordará en ese ciclo. ANALISIS DE RIESGO, evaluar diferentes alternativas para esa parte del desarrollo seleccionando la más ventajosa y tomando precauciones para evitar los posibles inconvenientes. INGENIERÍA, las actividades de los modelos clásicos EVALUACIÓN, se analizan los resultados de la fase de ingeniería.
  • 23. INGENIERÍA DEL SOFTWARE Javier Martín 23 MODELO EN ESPIRAL
  • 24. INGENIERÍA DEL SOFTWARE Javier Martín 24 MANTENIMIENTO DEL SOFTWARE El mantenimiento no representa una actividad específica, sino que consiste en rehacer parte de las actividades correspondientes a las otras fases del desarrollo para introducir cambios sobre una aplicación ya en fase de explotación. MANTENIMIENTO CORRECTIVO, su finalidad es corregir errores que no fueron detectados en el desarrollo del producto. MANTENIMIENTO ADAPTATIVO, modificar una aplicación para adaptarla a las nuevas necesidades del entorno. MANTENIMIENTO PERFECTIVO, se trata de ir obteniendo versiones mejoradas del producto
  • 25. INGENIERÍA DEL SOFTWARE Javier Martín 25 GESTIÓN DE CAMBIOS El mantenimiento supone la realización de una serie de cambios sucesivos Si afectan a la mayor parte del sistema se puede plantear como un nuevo desarrollo. Cada cambio debe ser documentado con: INFORME DEL PROBLEMA, que ocasiona el cambio. Suele ser propuesto por el cliente. INFORME DE CAMBIO, describe la solución dada al problema y el cambio realizado REINGENIERÍA, es necesaria cuando el desarrollo de una aplicación no está documentado y se dispone solamente del código. Se llama también ingeniería inversa porque supone reconstruir y documentar las fases de análisis y diseño llegando a la estructura modular de la aplicación y las dependencias entre módulos y funciones. Estas actividades organizan y documentan un sistema deficiente.
  • 26. INGENIERÍA DEL SOFTWARE Javier Martín 26 GARANTÍA DE CALIDAD Para evaluar la calidad son necesarias técnicas de aplicación de métricas precisas tanto sobre los productos software como a sus procesos de desarrollo. McCall propone un esquema basado en valoraciones a 3 niveles: FACTORES, valoración significativa de la calidad en base a los criterios establecidos CRITERIOS, aspectos de nivel intermedio que influyen en los factores de calidad MÉTRICAS, mediciones puntuales de determinadas características del producto. Entre los factores de calidad tenemos: CORRECCIÓN, grado en que cumple con las especificaciones FIABILIDAD, grado de ausencia de fallos EFICIENCIA, reilación entre la cantidad de resultados y los recursos requeridos SEGURIDAD, dificultad para el acceso a datos por personas no autorizadas FACILIDAD DE USO, esfuerzo requerido para el aprendizaje de la aplicación MANTENIBILIDAD. Facilidad para corregir el producto en caso necesario. FLEXIBILIDAD, facilidad para modificar el producto FACILIDAD DE PRUEBA, depende del esfuerzo requerido para comprobar su corrección o fiabilidad TRANSPORTABILIDAD, facilidad para adaptar el producto a otra plataforma REUSABILIDAD, facilidad para usar partes del producto en otros desarrollos INTEROPERATIVIDAD, facilidad del producto para trabajar con otros
  • 27. INGENIERÍA DEL SOFTWARE Javier Martín 27 PLAN DE GARANTÍA DE CALIDAD (SQAP) Es un documento formal para organizar el proceso de desarrollo software de manera que se asegure la calidad del producto final. Debe contemplar: Organización, dirección y seguimiento de los equipos de desarrollo Modelo de ciclo de vida a seguir, detallando fases y actividades Documentación requerida, determinando contenido y guión de cada documento Revisiones y auditorias, para garantizar que las actividades y los documentos son correctos Organización de las pruebas, a distintos niveles Organización de la etapa de mantenimiento, determinando cómo gestionar la realización de cambios
  • 28. INGENIERÍA DEL SOFTWARE Javier Martín 28 REVISIONES Consiste en inspeccionar el resultado de una actividad para determinar si es aceptable o contiene defectos que han de ser subsanados. Las revisiones deben ser formalizadas y contempladas en el modelo de ciclo de vida: Deben ser realizadas por un grupo de personas y no individualmente El grupo de be ser reducido Debe ser imparcial, nada que ver con los desarrolladores Se debe revisar el producto, pero no el productor ni el proceso de producción Se debe establecer de antemano una lista formal de comprobaciones Se debe levantar acta de la reunión de revisión, recogiendo las decisiones tomadas
  • 29. INGENIERÍA DEL SOFTWARE Javier Martín 29 PRUEBAS Consiste en hacer funcionar el producto o una parte de él y comprobar si los resultados son correctos. No permite garantizar la calidad del producto. En general no es posible probar un producto de forma exhaustiva, debido a su complejidad.
  • 30. INGENIERÍA DEL SOFTWARE Javier Martín 30 GESTIÓN DE CONFIGURACIÓNCONFIGURACIÓN, disposición de las partes que componen una cosa y le dan su peculiar figura. La CONFIGURACÏÓN SOFTWARE se refiere a la manera en que diversos elementos se combinan para construir un producto software. Se han de combinar todos los elementos que intervienen en el desarrollo: Documentos del desarrollo Código fuente Programas, datos y resultado de las pruebas Manuales de usuario Documentos de mantenimiento, informes de problemas y cambios Prototipos intermedios Normas particulares del proyecto Dado que los elementos software van evolucionando a lo largo del desarrollo se requiere: Control de versiones, almacenar de forma organizada las sucesivas versiones de cada elemento de la configuración. Control de cambios, garantizar que las diferentes configuraciones del software se componen de elementos compatibles entre sí (línea base).
  • 31. INGENIERÍA DEL SOFTWARE Javier Martín 31 NORMAS Y ESTÁNDARES IEEE, Institute of Electrical and Electronics Engineer de USA [IEEE93] DoD, Departament od Defense de USA [DoD88] ESA, Agencia Europea del Espacio [ESA91] ISO, organismo internacional de normalización (International Standars Organization). En España AENOR. METRICA-2, desarrollada por el Consejo Superior de Informática del MAP. Se basa en la metodología de análisis y diseño de Yourdon/DeMarco.
  • 32. INGENIERÍA DEL SOFTWARE Javier Martín 32 Tema 2: ESPECIFICACIÓN DE SOFTWARE
  • 33. INGENIERÍA DEL SOFTWARE Javier Martín 33 MODELADO DE SISTEMAS El análisis y la definición de los requisitos debe dar lugar a la especificación software, en la que se concretan las necesidades que se desean cubrir y se fijan las restricciones con las que debe trabajar el software. El modelado de los sistemas tiene como objetivo entender mejor el comportamiento requerido y facilitar la comprensión de los problemas planteados. Se trata de establecer modelos conceptuales que reflejen la organización de la información y las diversas transformaciones que se deben llevar a cabo con dicha información. Las metodologías de análisis de requisitos tratan de facilitara obtención de uno o varios modelos que detallen el comportamiento deseado del sistema.
  • 34. INGENIERÍA DEL SOFTWARE Javier Martín 34 CONCEPTO DE MODELO Un modelo conceptual es una abstracción lógico- matemática del mundo real que facilita la comprensión del problema a resolver. Se trata de ofrecer una visión de lato nivel, sin descender a explicar detalles concretos del mismo. Indica QUÉ hace el sistema y no CÓMO lo debe hacer. Los OBJETIVOS a cubrir con los modelos son: Facilitar la comprensión de l problema Establecer un marco para la discusión que simplifique y sistematice el análisis Fijar las base para el diseño Facilitar la verificación del cumplimiento de los objetivos del sistema
  • 35. INGENIERÍA DEL SOFTWARE Javier Martín 35 TÉCNICAS DE MODELADO (I) DESCOMPOSICIÓN. MODELO JERARQUIZADO, aplica el “divide y vencerás”, y así el problema queda dividido en un subconjunto de subproblemas. Se trata de una descomposición funcional que se denomina horizontal o bien se descompone tratando de detallar la estructura, de forma vertical. Para completar el modelado es necesario establecer los interfaces entre las partes del sistema para posibilitar el funcionamiento del sistema global. APROXIMACIONES SUCESIVAS, podemos tomar como partida el modelo de un sistema similar, y luego mediante la experiencia del analista y el conocimiento del problema que proporciona el experto se irán proponiendo modelos intermedios, discutiendo sus ventajas e inconvenientes. EMPLEO DE DIVERSAS ANOTACIONES, el lenguaje natural introduce imprecisiones, repeticiones e incluso incorrecciones en el modelo. Es recomendable emplear notaciones gráficas que sean entendibles por todos los que participan en el proyecto. Se suele recurrir a notaciones precisas que combinan texto, tablas, diagramas y gráficos.
  • 36. INGENIERÍA DEL SOFTWARE Javier Martín 36 TÉCNICAS DE MODELADO (II) CONSIDERAR DISITNTOS PUNTOS DE VISTA, en la elaboración del modelo es necesario adoptar un determinado punto de vista. Si así la descripción es insuficiente conviene adoptar más de uno. REALIZAR UN ANÁLISIS DEL DOMINIO, es decir en campo de aplicación en que se enmarca el sistema a desarrollar. Hay que considerar: Normativa que afecta al sistema Otros sistemas semejantes Estudios recientes en el campo de la aplicación, bibliografía, etc. Las ventajas de realizar un modelos más general son: Facilitar la comunicación entre el analista y el usuario del sistema, p.e. usando la misma terminología. Creación de elementos realmente significativos del sistema, si se ajusta a la normativa específica establecida. Reutilización posterior del software desarrollado.
  • 37. INGENIERÍA DEL SOFTWARE Javier Martín 37 ANÁLISIS DE REQUISITOS DE SOFTWARE El análisis es la fase de definición del futuro sistema y tiene una importancia decisiva en el desarrollo de todas las etapas posteriores. Con el análisis de requisitos se trata de caracterizar el problema a resolver. El “cliente” trabaja con el analista para elaborar las especificaciones y posteriormente se encargarán de verificar el cumplimiento de las mismas (contrato). El análisis debe producir un modelo válido necesario y suficiente para recoger todas las necesidades y exigencias del sistema, así como las restricciones que los limiten. Para una especificación correcta se requiere: Completo y sin omisiones Conciso y sin trivialidades Sin ambigüedades Sin detalles de diseño o implementación Fácilmente entendible por el cliente Separando requisitos funcionales u no funcionales (capacidades mínimas y máximas, interfaces estándares, recursos necesarios, seguridad, fiabilidad, mantenimiento, etc. División y jerarquía del modelo global, con el fin de simplificar su comprensión Incluyendo los criterios de validación del sistema, para comprobar si se ajusta al contrato inicial.
  • 38. INGENIERÍA DEL SOFTWARE Javier Martín 38 TAREAS DEL ANÁLISIS Dependiendo de las características y complejidad del sistema se podrán seguir los siguientes pasos: ESTUDIO DEL SISTEMA EN SU CONTEXTO, análisis del dominio en un contexto globalizador IDENTIFICACIÓN DE NECESIDADES, detectar necesidades de medios dentro de plazos y presupuestos ANÁLISIS DE ALTERNATIVAS Y ESTUDIO DE VIABILIDAD, tanto técnica como económica ESTABLECIMIENTO DEL MODELO DEL SISTEMA, para lo que podemos usar técnicas gráficas, texto, herramientas CASE, etc. ELABORACIÓN DEL DOCUMENTO DE ESPECIFICACIÓN DE REQUISITOS, dónde se recogen las conclusiones del análisis y sirve de punto de partida para el diseñador. REVISIÓN CONTINUADA DEL ANÁLISIS, a menudo en las etapas de diseño e implementación se hace necesaria la revisión de alguno de los requisitos, o bien por cambios de criterio del cliente
  • 39. INGENIERÍA DEL SOFTWARE Javier Martín 39 NOTACIONES PARA LA ESPECIFICACIÓN La especificación es una descripción del modelo del sistema a desarrollar. Se debe usar una notación fácil de entender por el cliente: Lenguaje natural, utilizando explicaciones más o menos precisas y exhaustivas. Es posible limitar precisiones y ambigüedades si se establecen reglas de uso del lenguaje. Diagramas de flujo de datos Diagramas de transición de estados Descripciones funcionales. Pseudocódigo. Se emplea un preciso lenguaje natural estructurado. No se debe detallar demasiado el cómo, pues esto corresponde a la fase de diseño, donde se usan lenguajes estructurados como PLD. Descripción de datos, de trata de detallar la estructura interna de los datos que maneja el sistema. En la metodología Yourdon se conoce como diccionario de datos, incluyendo nombre de cada dato, utilización y estructura. Diagramas de modelos de datos
  • 40. INGENIERÍA DEL SOFTWARE Javier Martín 40 DIAGRAMAS DE FLUJO DE DATOS (DFD) Se trata de realizar un modelo gráfico para representar el flujo de datos que entra en el sistema, las transformaciones que debe realizar y la salida producida. También se representan las entidades externas la sistema que producen o consumen datos. El DFD inicial es el de contexto, posteriormente y de forma jerárquica se van desarrollando otros DFD’s que detallan las transformaciones, las entradas y salidas del diagrama detallado deben coincidir con el proceso correspondiente. Recoge de forma estática los procesos, dónde en el último nivel de refinamiento se especifican en lenguaje natural estructurado, y su interrelación.
  • 41. INGENIERÍA DEL SOFTWARE Javier Martín 41 DIAGRAMAS DE TRANSICIÓN DE ESTADOS Describe el comportamiento dinámico del sistema basándose en sus estados más importantes. Al igual que en los autómatas de estados finitos, los eventos motiva el cambio de estado del sistema.
  • 42. INGENIERÍA DEL SOFTWARE Javier Martín 42 DIAGRAMAS DE MODELO DE DATOS Se trata de organizar e interrelacionar los datos que utiliza el sistema. El MODELO ENTIDAD-RELACIÓN permite definir todos los datos y establecer las relaciones que deben existir entre ellos.
  • 43. INGENIERÍA DEL SOFTWARE Javier Martín 43 DOC. DE ESPECIFICACIÓN DE REQUISITOS El documento o la especificación de requisitos (SRD o SRS) recoge de forma integral los resultados del análisis. Puede haber documentos previos al SRD, como estudios de viabilidad o de alternativas posibles. El SRD debe ser revisado con cierta frecuencia durante el desarrollo y debe facilitar la varificación de las especificaciones (contrato). Diversos organismos de estandarización hacen propuestas sobre la estructura del SRD: IEEE, DoD, etc. Vemos el modelo de SRD de la Agencia Espacial Europea. Dependiendo de las características y complejidad del proceso tal vez no sea necesario cubrir todos los apartados.
  • 44. INGENIERÍA DEL SOFTWARE Javier Martín 44 MODELO DE SRD 1. Introducción 1. Objetivo: objetivos, participantes, calendario,... 2. Ámbito, identificará y dará nombre al producto 3. Definiciones, siglas y abreviaturas 4. Referencias, la descripción bibliográfica de los documentos referenciados. 5. Panorámica del documento 2. Descripción general 1. Relación con otros proyectos, similares o complementarios 2. Relación con proyectos anteriores o posteriores 3. Objetivo y funciones 4. Consideraciones de entorno 5. Relaciones con otros sistemas, que utilicen entradas o salidas indirectas de información 6. Restricciones generales: metodologías, lenguajes, de hardware,... 7. Descripción del modelo, es el apartado más extenso y más importante. Se utilizan todas las notaciones y herramientas disponibles
  • 45. INGENIERÍA DEL SOFTWARE Javier Martín 45 MODELO DE SRD 3. Requisitos específicos, lista detallada y completa de los requisitos del sistema, indicando su grado de cumplimiento (obligatorio, recomendable, opcional. No incluir aspectos de diseño o desarrollo, ni tampoco soluciones particulares que no sean obligadas 1. Requisitos específicos, QUÉ debe hacer el sistema especificando el tratamiento de la información. 2. Requisitos de interfase, conexión con otros sistemas con los que interactúa (bases de datos, ficheros, SSOO,...). 3. Requisitos de operación, es decir, del interfaz de usuario 4. Requisitos de capacidad, volumen procesador, tiempo respuesta, tamaño ficheros. Se debe cuantificar para el peor, el mejor y el caso más habitual. 5. Requisitos de verificación, que debe cumplir el sistema para que se posible verificar su corrección 6. Requisitos de pruebas de aceptación 7. Requisitos de recursos, instalaciones y elementos necesarios para el funcionamiento del sistema 8. Requisitos de documentación 9. Requisitos de transportabilidad, para adaptalo a otras plataformas 10. Requisitos de calidad, que no hayan sido recogidos en otros apartados 11. Requisitos de fiabilidad, imponiendo un límite aceptable de fallos 12. Requisitos de mantenibilidad 13. Requisitos de seguridad, contra utilización indebida 14. Requisitos de salvaguarda, para evitar consecuencias graves en equipos o en personas 4. APENDICES, para complementar el contenido del documento
  • 46. INGENIERÍA DEL SOFTWARE Javier Martín 46 VIDEOJUEGO DE LAS MINAS
  • 47. INGENIERÍA DEL SOFTWARE Javier Martín 47 SISTEMA DE GESTIÓN DE BIBLIOTECA
  • 48. INGENIERÍA DEL SOFTWARE Javier Martín 48 SISTEMA DE GESTIÓN DE BIBLIOTECA
  • 49. INGENIERÍA DEL SOFTWARE Javier Martín 49 SISTEMA DE GESTIÓN DE BIBLIOTECA
  • 50. INGENIERÍA DEL SOFTWARE Javier Martín 50 SISTEMA DE GESTIÓN DE BIBLIOTECA
  • 51. INGENIERÍA DEL SOFTWARE Javier Martín 51 SISTEMA DE GESTIÓN DE BIBLIOTECA
  • 52. INGENIERÍA DEL SOFTWARE Javier Martín 52 Tema 3: FUNDAMENTOS DEL DISEÑO DEL SOFTWARE
  • 53. INGENIERÍA DEL SOFTWARE Javier Martín 53 CONCEPTO DE DISEÑO Descripción o bosquejo de alguna cosa hecho por palabras. En un sistema software la realización del diseño parte del SRD y no es nada trivial. Cuando no se tiene experiencia en el desarrollo concreto se hace de forma iterativa mediante ensayo y error, en caso contrario se aprovecha el “know-how” (saber hacer). Las técnicas para realizar diseños nuevos son empíricas y no están suficientemente formalizadas, mientras que para proyectos ya conocidos, como los de gestión, existen herramientas tales como lenguajes de 4ª generación. En el diseño se establece el CÓMO debe funcionar el sistema, determinando la organización y la estructura del software.
  • 54. INGENIERÍA DEL SOFTWARE Javier Martín 54 ACTIVIDADES DE UN DISEÑO SISTEMÁTICO DISEÑO ARQUITECTÓNICO, se abordan los aspectos estructurales y de organización del sistema, y su posible división en subsistemas DISEÑO DETALLADO, organización y estructura de los módulos DISEÑO PROCEDIMENTAL, organización de las operaciones o servicios que ofrecerá cada módulo. Se suele realizar en pseudocódigo o PDL, pero desarrollando sólo los aspectos más relevantes del algoritmo DISEÑO DE DATOS, organización de la base d edatos del sistema. Se parte de los diagramas E-R. DISEÑO DE LA INTERFAZ DE USUARIO, organizar y facilitar la utilización del sistema por parte del usuario El resultado de estas actividades debe plasmarse en el Documento d Diseño Software (SDD)
  • 55. INGENIERÍA DEL SOFTWARE Javier Martín 55 CONCEPTOS PARA EL DISEÑOABSTACCIÓN, identificar los elementos significativos del sistema y abstraer la utilidad específica de cada uno ABSTRACCIONES FUNCIONALES, sirven para crear expresiones parametrizadas usando funciones o procedimientos TIPOS ABSTRACTOS, junto con el tipo de datos se deben crear los métodos que manejan estos datos MÁQUINAS ABSTRACTAS, definición formal del comportamiento de una máquina MODULARIDAD, el diseño modular propone dividir el sistema en partes diferenciadas y definir sus interfaces. Sus ventajas: claridad, reducción de costos y reutilización REFINAMIENTO, a partir de una idea no muy concreta se va refinando mediante aproximaciones hasta el detalle ESTRUCTURAS DE DATOS, para organizar la información que maneja el sistema: registros, conjuntos, listas, pilas, colas, árboles, grafos, tablas, ficheros, ... OCULTACIÓN, de la organización de los datos internos y de los detalles del algoritmo, se muestra en el interfaz sólo aquello que resultará invariable ante cambios. Ventajas: depuración, mantenimiento, ... GENERICIDAD, consiste en diseñar un elemento genérico, con las características comunes a todos los elementos agrupados HERENCIA, los elementos hijos heredan del padre su estructura y operaciones para ampliarlos, mejorarlos o adaptarlos. Es conveniente utilizar un lenguaje de programación orientado a objetos POLIMORFISMO, es la propiedad de los elementos que pueden variar su formar sin cambiar su naturaleza. Se emplea el concepto de genericidad. En los hijos se puede producir la anulación de una operación. A veces en el padre interesa declarar un método sin implementarlo, lo harán los hijos en diferido CONCURRENCIA, se trata de aprovechar al máximo el procesador garantizando unos tiempos máximos de respuesta para tareas críticas. Problemas de los sistemas con restricciones: Tareas concurrentes, asegurar que todas cumplen sus restricciones Sincronización de tareas, determinando los puntos de sincronización entre ellas Comunicación entre tareas, unas serán productoras de datos y otras consumidoras. Para evitar la corrupción de datos compartidos permitir sólo concurrencia en lectura con semáforos, monitores y regiones críticas Interbloqueos (deadlock) cuando varias tareas esperan un evento que nunca se producirá
  • 56. INGENIERÍA DEL SOFTWARE Javier Martín 56 NOTACIONES PARA EL DISEÑO Debe resultar precisa, clara y fácil de interpretar. Se emplean notaciones formales cuasimatemáticas NOTACIONES ESTRUCTURALES, se desglosa y estructura el sistema en sus partes DIAGRAMAS DE BLOQUES CAJAS ADOSADAS
  • 57. INGENIERÍA DEL SOFTWARE Javier Martín 57 DIAGRAMAS DE ESTRUCTURA (Yourdon) Describen la estructura de los sistemas software como una jerarquía de módulos, reflejando sólo su organización estática RECTÁNGULO, módulo LÍNEA, relación entre módulos, el superior utiliza el módulo inferior ROMBO, opcional ARCO, repetitiva CIRCULO CON FLECHA, envio de datos o información de control (correcto, repetir, desconectar, etc)
  • 58. INGENIERÍA DEL SOFTWARE Javier Martín 58 DIAGRAMAS HIPO (Hierachy-Input- Process-Output) Se muestra primero la jerarquía entre los módulos del sistema Y en los diagramas HIPO de detalle hay 3 zonas: Entrada, Proceso y Salida
  • 59. INGENIERÍA DEL SOFTWARE Javier Martín 59 DIAGRAMAS DE JACKSON El proceso de diseño es sistemático y se lleva a cabo en tres pasos: •Especificación de la estructura de datos de entrada y de salida •Obtención de la estructura del programa •Expansión de la estructura del programa para lograr el diseño detallado
  • 60. INGENIERÍA DEL SOFTWARE Javier Martín 60 NOTACIONES ESTÁTICAS Describen las características estáticas del sistema, tales como la organización de la información, sin tener en cuenta su evolución durante el funcionamiento del sistema. Las notaciones son las mismas que se emplean en la especificación: DICCIONARIO DE DATOS, dónde se detalla la estructura interna de los datos que maneja el sistema. En el diseño se amplía y se completa el diccionario de la especificación hasta el nivel de detalle necesario para iniciar la codificación. DIAGRAMAS ENTIDAD-RELACIÓN, definiendo las relaciones entre datos y la organización de la información. Se amplia y detalla el diagrama de la especificación con las nuevas entidades y relaciones.
  • 61. INGENIERÍA DEL SOFTWARE Javier Martín 61 NOTACIONES DINÁMICAS Permiten describir el funcionamiento del sistema durante su funcionamiento. Las notaciones son las misma utilizadas en la especificación: DIAGRAMAS DE FLUJO DE DATOS, serán mucho más exhaustivos que los de la especificación. DIAGRAMAS DE TRANSICIÓN DE ESTADOS, más detallados que reflejen las transiciones entre estados internos. LENGUAJE DE DESCRIPCIÓN DE PROGRAMAS (PLD), permite realizar la especificación funcional del sistema.
  • 62. INGENIERÍA DEL SOFTWARE Javier Martín 62 NOTACIONES HIBRIDAS: DIAGRAMAS DE ABSTRACCIONES Permiten un enfoque globalizado del diseño atendiendo a aspectos estáticos (datos), dinámicos (operaciones) y de estructura del sistema. DIAGRAMAS DE ABSTRACCIONES, se contemplan dos tipos de abstracciones: las funciones y los tipos abstractos de datos. En una abstracción se distinguen 3 partes: NOMBRE, es su identificador CONTENIDO, dónde se define la organización de los datos OPERACIONES, para manejar el contenido de la abstracción Las abstracciones funcionales (funciones o procedimientos), sólo tiene la parte de operación. El dato encapsulado tiene como el tipo abstracto contenido y operaciones, pero no permite declarar otras variables de su mismo tipo. En los diagramas se muestra la relación jerárquica entre abstracciones, de manera que la abstracción superior utiliza la inferior.
  • 63. INGENIERÍA DEL SOFTWARE Javier Martín 63 NOTACIONES HIBRIDAS: DIAGRAMAS DE OBJETOS Se emplea una terminología distinta, pero las similitudes con los diagramas de abstracciones es muy grande, excepto que: 1. No existe nada equivalente a los datos encapsulados ni a las abstracciones funcionales en el modelo de objetos 2. En los diagramas de objetos hay relaciones de herencia De acuerdo con las propiedades de los objetos podemos tener relaciones especiales entre ellos: •CLASIFICACIÓN, ESPECIALIZACIÓN O HERENCIA •COMPOSICIÓN, permite describir un objeto mediante los elementos que lo forman
  • 64. INGENIERÍA DEL SOFTWARE Javier Martín 64 DOCUMENTOS DE DISEÑO: ADD 1. INTRODUCCIÓN – Para dar una visión general de todo el documento. Los contenidos de los apartados como en el SRD 1.1 Objetivo ... 1.2 Ámbito 1.3 Definiciones, siglas y abreviaturas 1.4 Referencias 2. PANORÁMICA DEL SISTEMA, visión general de los requisitos funcionales y de otro tipo del sistema a diseñar 3. CONTEXTO DEL SISTEMA, si posee conexiones con otros 3.n Definición de interfaz externa 4. DISEÑO DEL SISTEMA, se describe el nivel superior del diseño del sistema 4.1 Metodología de diseño de alto nivel 4.2 Descomposición del sistema , primer nivel de descomposición del sistema en sus componentes principales 5. DISEÑO DE LOS COMPONENTES, se procede a la decripción detallada de l,os componentes mencionados en 4.2 5.n Identificador del componente 5.n.l Tipo (subprograma, módulo, procedimiento, proceso, datos 5.n.2 Objetivo, o necesidad de que exista el componente 5.n.3 Función , lo que hace el componente 5.n.4 Subordinados, se enumeran todos los componentes que utiliza 5.n.5 Dependencias y su naturaleza: invocación de operación, datos compartidos, inicialización, creación, etc. 5.n.6 Interfases, de cómo otros componentes interactúan con éste 5.n.7 Recursos , elementos usados por el componente 5.n.8 Referencias, que se han utilizado en el texto 5.n.9 Proceso, algoritmos o reglas que utiliza el componente para realizar su función 5.n.l0 Datos, descripción de los datos, su tipo, sus valores iniciales, se puede realizar con un diccionario de datos 6. VIABILIDAD y RECURSOS ESTIMADOS 7. MATRIZ REQUISITOS/COMPONENTES, se pone en las filas los requisitos y en las columnas los componentes
  • 65. INGENIERÍA DEL SOFTWARE Javier Martín 65 DOCUMENTOS DE DISEÑO: DDD Parte 1. DESCRIPCIÓN GENERAL 1. INTRODUCCIÓN 1.1 Objetivo 1.2 Ámbito 1.3 Definiciones, siglas y abreviaturas 1.4 Referencias 1.5 Panorámica 2. NORMAS, CONVENIOS y PROCEDIMIENTOS 2.1 Normas de diseño de bajo nivel 2.2 Normas y convenios de documentación 2.3 Convenios de nombres (ficheros, programas, módulos, etc.) 2.4 Normas de programación 2.5 Herramientas de desarrollo de software Parte 2. ESPECIFICACIONES DE DISEÑO DETALLADO n. Identificador del componente n.l Identificador n.2 Tipo n.3 Objetivo n.4 Función n.5 Subordinados n.6 Dependencias n.7 Interfases n.8 Recursos n.9 Referencias n.l0 Proceso n.ll Datos APÉNDICE A. LISTADOS FUENTE APÉNDICE E. MATRIZ REQUISITOS/COMPONENTES
  • 66. INGENIERÍA DEL SOFTWARE Javier Martín 66 Tema 4: TÉCNICAS GENERALES DE DISEÑO SOFTWARE
  • 67. INGENIERÍA DEL SOFTWARE Javier Martín 67 TÉCNICAS DE DISEÑO Los objetivos de las técnicas de diseño software son fundamentalmente: La descomposición modular del sistema Los diseños de los algoritmos y estructuras de datos fundamentales que se deben usar en el sistema Primero veremos las características deseables de una buena descomposición modular del sistema, y luego se presentarán técnicas de diseño: Diseño funcional descendente Diseño orientado a objetos Diseño de datos
  • 68. INGENIERÍA DEL SOFTWARE Javier Martín 68 DESCOMPOSICIÓN MODULAR Los pasos a seguir son: 1. Identificar los módulos 2. Describir cada módulo 3. Describir las relaciones entre módulos Tipos de módulos: 1. Código fuente, en el lenguaje de programación usado 2. Tabla de datos, para datos de inicialización u otros 3. Configuración, se agrupa en un módulo toda la información de configuración en el entorno de trabajo 4. Otros: ficheros de ayuda en línea, manuales, etc. Una descomposición modular debe poseer ciertas cualidades mínimas para que se pueda considerar suficientemente válida Independencia fucional Acoplamiento Cohesión Comprensibilidad Adaptabilidad
  • 69. INGENIERÍA DEL SOFTWARE Javier Martín 69 DESCOMPOSICIÓN MODULAR: INDEPENDENCIA FUNCIONAL Al final de los documentos ADD y DDD debe haber una matriz REQUISITOS/COMPONNETES. En principio, cada función será realizada en un módulo distinto. Si las funciones son independientes los módulos tendrán independencia funcional. Cada módulo debe realizar una función concreta o un conjunto de funciones afines. Es recomendable reducir las relaciones entre módulos al mínimo. Para medir la independencia funcional hay dos criterios: acoplamiento y cohesión. DESCOMPOSICIÓN MODULAR: ACOPLAMIENTO El grado de acoplamiento mide la interrelación entre dos módulos, según el tipo de conexión y la complejidad de la interfase: FUERTE, POR CONTENIDO, cuando desde un módulo se pueden cambiar datos locales de otro COMÚN, se emplea una zona común de datos a la que tienen acceso varios módulos MODERADO, DE CONTROL, la zona común es un dispositivo externo al que están ligados los módulos, esto implica que un cambio en el formato de datos afecta a todos estos módulos POR ETIQUETA, en ontercambio de datos se realiza mediante una referencia a la estructura completa de datos (vector, pila, árbol, grafo, ...) DÉBIL, DE DATOS, viene dado por los datos que intercambian los módulos. Es el mejor posible SIN ACOPLAMIENTO DIRECTO, es el acoplamiento que no existe
  • 70. INGENIERÍA DEL SOFTWARE Javier Martín 70 DESCOMPOSICIÓN MODULAR: COHESIÓN Es necesario lograr que el contenido de cada módulo tenga la máxima coherencia. Para que el nº de módulos no sea demasiado elevado y complique el diseño se tratan de agrupar elementos afines y relacionados en un mismo módulo. ALTA COHESIÓN ABSTRACCIONAL, se logra cuando se diseña el módulo como tipo abstracto de datos o como una clase de objetos COHESIÓN FUNCIONAL, el módulo realiza una función concreta y específica MEDIA COHESIÓN SECUENCIAL, los elementos del módulo trabajan de forma secuencial COHESIÓN DE COMUNICACIÓN, elementos que operan con le mismo conjunto de datos de entrada o de salida COHESIÓN TEMPORAL, se agrupan elementos que se ejecutan en el mismo momento. Ej. Arrancar o parar dispositivos BAJA COHESIÓN LÓGICA, se agrupan elementos que realizan funciones similares. Ejs.: módulos de E/S o de tratamiento de errores COHESIÓN COINCIDENTAL, es la peor y se produce cuando los elementos de un módulo no guardan relación alguna La descripción del comportamiento de un módulo permite establecer el grado de cohesión: Si es una frase compuesta y contiene más de un verbo la cohesión será MEDIA Si contiene expresiones secuenciales (primero, entonces, cuando...), será temporal o secuencial Si la descripción no se refiere a algo específico (Ej. Todos los errores), cohesión lógica Si aparece “inicializar”, “preparar”, “configurar”, probablemente sea temporal.
  • 71. INGENIERÍA DEL SOFTWARE Javier Martín 71 DESCOMPOSICIÓN MODULAR: COMPRENSIBILIDAD Para facilitar los cambios, el mantenimiento y la reutilización de módulos es necesario que cada uno sea comprensible de forma aislada. Para ello es bueno que posea independencia funcional, pero además es deseable: IDENTIFICACIÓN, el nombre debe ser adecuado y descriptivo DOCUMENTACIÓN, debe aclarar todos los detalles de diseño e implementación que no queden de manifiesto en el propio código SIMPLICIDAD, las soluciones sencillas son siempre las mejores La adaptación de un sistema resulta más dificil cuando no hay independencia funcional, es decir, con alto acoplamiento y baja cohesión, y cuando el diseño es poco comprensible. Otros factores para facilitar la adaptabilidad: PREVISIÓN, es necesario prever que aspectos del sistema pueden ser susceptibles de cambios en el futuro, y poner estos elementos en módulos independientes, de manera que su modificación afecte al menor número de módulos posible ACCESIBILIDAD, debe resultar sencillo el acceso a los documentos de especificación, diseño, e implementación para obtener un conocimiento suficiente del sistema antes de proceder a su adaptación CONSISTENCIA, después de cualquier adaptación se debe mantener la consistencia del sistema, incluidos los documentos afectados DESCOMPOSICIÓN MODULAR: ADAPTABILIDAD
  • 72. INGENIERÍA DEL SOFTWARE Javier Martín 72 TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE La descomposición del sistema se hace desde un punto de vista funcional. Desde el punto de vista de la codificación, cada módulo corresponde esencialmente a un subprograma. TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE: DESARROLLO POR REFINAMIENTO PROGRESIVO Esta técnica consiste en la aplicación de la fase de diseño de la programación estructurada. Las estructuras básicas son la secuencia, la selección entre alternativas y la iteración. Cada paso en la descomposición consiste en refinar o detallar una parte del programa global u operación, que a su vez podrá ser descompuesta en otras operaciones. Los refinamientos se basan en la aplicación de estructuras de control en el programa. Veamos como ejemplo “obtener las raíces de una ec. de 2º grado”: Obtener raíces -> Leer coeficientes Resolver ecuación --> Calcular discriminante Calcular raíces --> SI el discriminante es negativo ENTONCES Calcular raíces complejas SI-NO Calcular raíces reales FIN-SI Imprimir raíces
  • 73. INGENIERÍA DEL SOFTWARE Javier Martín 73 TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE: PROGRAMACIÓN ESTRUCTURADA DE JACKSON Esta técnica sigue las ideas de la programación estructurada (secuencia, selección, iteración) y el método de refinamientos sucesivos pàra construir la estructura del programa en forma descendente. Se recomienda construir la estructura del programa de forma similar a las estructuras de datos de entrada y de salida Pasos de la técnica JSP: 1) Analizar el entorno del problema y describir las estructuras de datos a procesar 2) Construir la estructura del programa basándose en las estructuras de datos 3) Definir las tareas a realizar en cada módulo de la estructura del programa Este tercer paso corresponde en su detalle a la fase de codificación Ej.: Programa para justificar el texto, es decir, reagrupar las palabras en líneas e intercalar los espacios adecuados para que se ajusten a los márgenes PASO 1. Las estructuras de datos que reconocemos son Texto de entrada = {[separador de párrafo | palabra]} Texto de salida = {[línea ajustada | línea final | línea en blanco]}
  • 74. INGENIERÍA DEL SOFTWARE Javier Martín 74 TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE: PROGRAMACIÓN ESTRUCTURADA DE JACKSON En el PASO 2 se trata de encontrar una estructura del programa que se ajuste a las estructuras de los datos de entrada y salida
  • 75. INGENIERÍA DEL SOFTWARE Javier Martín 75 TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE: DISEÑO ESTRUCTURADO Según esta técnica, la tarea de diseño consiste en pasar de los DFDs a los diagramas de estructura. Hay que establecer una jerarquía o estructura de control entre los diferentes módulos, que no está implícita en el modelo funcional descrito en los DFDs Para dos módulos relacionados en el DFD (A) tenemos 3 posibilidades de organización modular diferentes.
  • 76. INGENIERÍA DEL SOFTWARE Javier Martín 76 TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE: DISEÑO ESTRUCTURADO Para establecer la jerarquía de control entre módulos se recomienda hacer ciertos análisis en el flujo de datos: de flujo de transformación y de flujo de transacción. Para ello es recomendable construir un DFD con todos los procesos contenidos en los primeros niveles prescindiendo de los almacenes. El análisis de flujo de transformación consiste en identificar un flujo global de información desde los elementos de entrada hasta los de salida. Los procesos se agrupan en 23 regiones: flujo de entrada, de transformación y de salida.
  • 77. INGENIERÍA DEL SOFTWARE Javier Martín 77 TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE: DISEÑO ESTRUCTURADO El flujo de transacción es aplicable cuando el flujo de datos se puede descomponer en varias líneas separadas. El análisis consiste en identificar el centro de transacción a partir del cual se ramifican las líneas de flujo a las regiones correspondientes a cada una de las transacciones
  • 78. INGENIERÍA DEL SOFTWARE Javier Martín 78 TÉCNICAS DE DISEÑO FUNCIONAL DESCENDENTE: DISEÑO ESTRUCTURADO. EJ. GESTIÓN DE BIBLIOTECA
  • 79. INGENIERÍA DEL SOFTWARE Javier Martín 79 TÉCNICAS DE DISEÑO BASADO EN ABSTRACCIONES La idea es que los módulos corresponden a funciones o a tipos abstractos de datos. Los lenguajes que dan más facilidades para la implementación son los orientados a objetos TÉCNICAS DE DISEÑO BASADO EN ABSTRACCIONES: DESCOMPOSICIÓN MODULAR BASADA EN ABSTRACCIONES Se trata de ampliar el lenguaje de programación con nuevas operaciones y tipos de datos definidos por el usuario, de forma que se simplifique la escritura de los niveles superiores del programa, basándose en módulos que realicen estas operaciones Podemos identificar los tipos abstractos correspondientes a un número complejo y a una ecuación de 2° grado y definir sobre dichos tipos abstractos las siguientes operaciones: Ecuación de 2° grado: Número complejo: Leer ecuación Escribir Escribir ecuación Sumar, Restar, etc.. Obtener raíces Raíz cuadrada La estructura modular del programa sería:
  • 80. INGENIERÍA DEL SOFTWARE Javier Martín 80 TÉCNICAS DE DISEÑO BASADO EN ABSTRACCIONES: MÉTODO DE ABBOTT A partir de la descripción o especificación de los módulos es posible identificar las palabras o términos que puedan corresponder a elementos significativos del diseño: Tipos de datos, que aparecen como sustantivos genéricos Atributos, son sustantivos en general Operaciones, tienen la forma de verbos o nombres de acciones Se subrayan en la descripción las palabras significativas haciendo una lista de nombres y otra de verbos u operaciones. Hay que eliminar los términos irrelevantes o los sinónimos de palabras ya aparecidas DATO Atributos Operaciones Palabra Caracteres Imprimir Párrafo Separador Línea salida Iniciar párrafo Poner palabra Terminar párrafo Separador de párrafo Líneas en blanco Sangrado Línea Sangrado Palabras Iniciar línea ¿cabe palabra? Poner palabra Imprimir sin ajustar Imprimir ajustada
  • 81. INGENIERÍA DEL SOFTWARE Javier Martín 81 TÉCNICAS DE DISEÑO ORIENTADAS A OBJETOS Es esencialmente igual al diseño basado en abstracciones, añadiendo la herencia y el polimorfismo. En la descomposición modular del sistema cada módulo contiene la descripción de una clase de objetos o de varias clases relacionadas entre sí. PASOS: Estudiar y comprender el problema a resolver Desarrollar en líneas generales uan posible solución, al menos informal Formalizar dicha estrategía en términos de clases, objetos y sus relaciones: Identificar los objetos, sus atributos y sus componentes Identificar las operaciones sobre los objetos y asociarlas a la clase adecuada Aplicar herencia donde convenga Describir cada operación en función de las otras, y subsanar posibles omisiones Asignar clases y objetos a los módulos del sistema
  • 82. INGENIERÍA DEL SOFTWARE Javier Martín 82 TÉCNICAS DE DISEÑO DE DATOS Muchas aplicaciones necesitan almacenar información de forma permanente y la mejor forma de hacerlo es crear una base de datos subyacente Podemos enfocar la organización de la base de datos de 3 formas: Nivel externo Esquemas de usuario Nivel conceptual Esquemas lógicos Nivel interno Esquemas físicos El nivel externo corresponde a la visión del usuario, en la fase de análisis de pasa al nivel conceptual, que establece la organización de los datos, y finalmente en la etapa de diseño se pasa al nivel interno. DISEÑO DE BASES DE DATOS RELACIONALES, en este modelo la eficiencia se basa en: Las FORMAS NORMALES, que tienden a evitar las redundancias en los datos almacenados FN1, la información asociada a cada columna de la tabla es un único valor, y no una colección FN2, si hay una clave primaria que distingue e identifica cada fila, el resto de los datos dependen de toda la clave primaria FN3, el valor de cada columna que no es clave primaria depende directamente de la clave primaria. Se puede conseguir si se separan las tablas. Los INDICES, que mejoran la velocidad de acceso a los datos
  • 83. INGENIERÍA DEL SOFTWARE Javier Martín 83 TÉCNICAS DE DISEÑO DE DATOS: DISEÑO DE LAS ENTIDADES En el modelo relacional cada entidad del modelo E-R se traduce en una tabla por cada clase de entidad, con una fila por cada elemento de esa clase y una columna por cada atributo de esa entidad. Entre las entidades relacionadas se puede incluir una columna con un número de referencia o identificador que las relaciona, sirve como clave primaria. En el modelo E-R todas las relaciones se consideran de asociación, y la manera de trasladar esto a las tablas depende de la cardinalidad de la relación. La relación se convierte en una tabla que contiene referencias a las tablas de las entidades relacionadas, así como los atributos de la relación (cale para cualquier cardinalidad, incluso N:N). Si es 1:N es posible incluir los datos de la relación en la tabla con cardinalidad 1. Si la cardinalidad es 1:1 se pueden fundir las tablas de las dos entidades.
  • 84. INGENIERÍA DEL SOFTWARE Javier Martín 84 TÉCNICAS DE DISEÑO DE DATOS: COMPOSICIÓN Y HERENCIA Las relaciones de COMPOSICIÓN se tratan como las de asociación, y en ellas la cardinalidad del objeto compuesto suele ser 1, por lo que se puede aplicar la simplificación. Cuando una clase tiene carias subclases hay 3 formas de amacenar las entidades ne tablas: (a) Una tabla para la superclase con los atributos comunes y una tabla para cada subclase (b) Desaparece la tabla de la superclase y los atributos comunes heredados se repiten en las subclases (c) Se prescinde de las tablas de la subclase y se amplia la tabla de la superclase con todos los atributos de las subclases, de forma que estos valores serán opcionales para los elementos
  • 85. INGENIERÍA DEL SOFTWARE Javier Martín 85 Tema 5: CODIFICACIÓN Y PRUEBAS
  • 86. INGENIERÍA DEL SOFTWARE Javier Martín 86 CODIFICACIÓN DEL DISEÑO Nos vamos a referir a las últimas fases del ciclo de vida: codificación, pruebas de unidades, integración y pruebas de sistema. Cuando alguna de las pruebas no resulta positiva es necesario repetir la codificación o la integración y probar de nuevo. La fase de codificación constituye el núcleo central en cualquiera de los modelos y tiene una importancia fundamental ya que elabora los programas fuente. Previamente a la codificación es necesario elegir el lenguaje que se empleará así como la metodología de programación. También se pueden establecer en el equipo unas normas y un estilo de programación común, lo que mejorará la coordinación y facilitará el trabajo. Además se consigue facilitar el mantenimiento y mejorar la reusabilidad del software. Cuando el resultado de las pruebas no sea satisfactorio será necesario modificar el código, lo que podrá introducir nuevos errores. Si la programación es estructurada será más fácil localizar la disfunción y la posterior modificación y las pruebas del código, dónde podemos introducir puntos de test.
  • 87. INGENIERÍA DEL SOFTWARE Javier Martín 87 LENGUAJES DE PROGRAMACIÓN Aunque los lenguajes han evolucionado mucho desde los años 50 todavía están más próximos a la máquina que al pensamiento humano. Los lenguajes suelen adoptar los avances metodológicos que se producen en el desarrollo del software. Ej.: C y C++ DESARROLLO HISTÓRICO, muchos han sido desarrollados con fines experimentales y muy pocos han llegado a ser utilizados industrialmente: 1ª GENERACIÓN: muy próximos al lenguaje máquina Ensamblador, asocia a cada instrucción de la máquina un nemónico 2ª GENERACIÓN: no dependen de la CPU, se programa de manera simbólica, en “alto nivel”. FORTRAN (FORula TRANslator), para aplicaciones científicas COBOL, para procesamiento de información. Supone el 70 % ALGOL, da gran importancia a la tipificación de datos BASIC, sencillo y fácil de aprender. Desarrollado para el PC. 3ª GENERACIÓN: programación estructurada con declaración de tipos. Los últimos van asociados a otros paradigmas. PASCAL, fue diseñado para la enseñanza de la programación estructurada. Tipificación rígida y no contempla la codificación por separado MÓDULA-2, descendiente de pascal, se incorpora la estructura de módulo. Se mejora modularidad, concurrencia, abstracción y ocultación C, desarrollado para la codificación del UNIX. Flexible y potente. No hay restricciones sobre las operaciones con distintos tipos. ADA, descendiente de pscal, mucho más potente y complejo. Incorpora modularidad, abstracción, ocultación, concurrencia y sincronización entre tareas. SMALLTALK, precursos de los lenguajes orientados a objetos C++, incorpora en C los mecanismos de la POO: ocultación, clases, herencia y polimorfismo. EIFFEL, permite la definición de clases genéricas, herencia múltiple y polimorfismo. LISP, lenguaje funcional usado en IA y sistemas expertos. Basado en listas admite recursividad. Maneja bien los símbolos PROLOG, lenguaje lógico en que se construye una base de conocimiento basada en reglas a partir de la cual podemos inferir nuevos hechos o reglas. 4ª GENERACIÓN: mayor grado de abstracción. Se agrupan en: BASES DE DATOS; como SQL permiten acceder y manipular la información. GENERADORES DE PROGRAMAS, son eficientes en un dominio de aplicaciones limitado. La mayoría producen aplicaciones de gestión y la salida va en cobol, aunque se han desarrollado herramientas CASE que generan programas en C++ o ADA. CÁLCULO, hojas de cálculo, herramientas de simulación y diseño para el control, etc. OTROS: herramientas para la especificación y verificación formal de programas, lenguajes de simulación, de prototipos, etc.
  • 88. INGENIERÍA DEL SOFTWARE Javier Martín 88 PRESTACIONES DE LOS LENGUAJES: ESTRUCTURAS DE CONTROL se incluyen aquí, además de las características propias de la programación estructurada, el manejo de excepciones y la concurrencia. Programación estructurada: secuencia, iteración y selección (verdadero-falso y por casos) Manejo de excepciones: errores humanos, fallos hardware, errores software, datos de entrada vacíos, valores fuera de rango, etc. (estructuras exception when y raise). Concurrencia, tareas simultáneas, sincronización, comunicación e interbloqueos. Los lenguajes han implementado la posibilidad de lanzar tareas concurrentes de distintas formas: CORRUTINAS, tienen una estructura semejante a subprogramas pero con una transferencia del control más flexible. El avance en la ejecución de las corrutinas se produce según el avance entre ellas. FORK-JOIN, es la propuesta de UNIX. COBEGIN-COEND, entre estas palabras se inician todas las tareas y se finalizan. Es posible el anidamiento. PROCESOS; cada tarea se declara como un proceso y estos y se ejecutan concurrentemente. En algunos casos es posible lanzar dinámicamente nuevos procesos una vez iniciado el programa. PARA LA COMUNICACIÓN ENTRE TAREAS. • VARIABLES COMPARTIDAS – SEMÁFOROS – REGIONES CRÍTICAS – MONITORES • PASO DE MENSAJES – CSP – LLAMADA A PROCEDIMIENTOS REMOTOS – REDENZVOUS, DE ADA
  • 89. INGENIERÍA DEL SOFTWARE Javier Martín 89 PRESTACIONES DE LOS LENGUAJES: ESTRUCTURAS DE DATOS DATOS SIMPLES. Para los eneros hay que tener en cuenta el rango posible y para los de coma flotante la precisión. En ocasiones también permiten el manejo de complejos. Otros tipos simples son char y string, para el manejo de cadenas. Los tipos enumerados también pueden resultar útiles, un tipo enumerado muy frecuente son los booleanos. En ocasiones los lenguajes permiten utilizar subrangos. DATOS COMPUESTOS, son combinaciones de datos simples y compuestos ya definidos. Pueden ser homogéneos como los ARRAYS y heterogéneos como los RECORDS o STRUCTS. Para el manejo de estructuras dinámicas de datos muchos lenguajes incluyen punteros CONSTANTES, en los lenguajes modernos se pueden declarar constantes simbólicas, sin indicar directamente su valor numérico. COMPROBACIÓN DE TIPOS, se pueden distinguir 5 niveles: Nivel 0: sin tipos, no es posible declarar nuevos tipos y todos los datos deben pertenecer a tipos predefinidos Nivel 1: tipado automático, el compilador decide cuál es el tipo más adecuado para cada dato. Nivel 2: tipado débil, el compilador hace inferencias sobre los tipos y solo son posibles determinadas conversiones Nivel 3: tipado semirígido, todos los datos deben ser declarados con su tipo Nivel 4: tipado fuerte, aquí además de declarar los tipos, el programador está obligado a hacer explícita cualquier conversión de tipos. ABSTRACCIONES Y OBJETOS. ABSTRACCIONES FUNCIONALES TIPOS ABSTRACTOS DE DATOS OBJETOS MOODULARIDAD. Se requiere la compilación por separado. Además se introducen de forma redundante la declaración y la definición de cada módulo, para permitir al compilador hacer comprobaciones acerca de la consistencia. C y modula-2 lo tienen, pero pascal es monolítico.
  • 90. INGENIERÍA DEL SOFTWARE Javier Martín 90 CRITERIOS DE SELECCIÓN DEL LENGUAJE El lenguaje es uno de los elementos más importantes de cualquier desarrollo y tiene una influencia decisiva en la depuración y el mantenimiento dela aplicación. Criterios: IMPOSICIÓN DEL CLIENTE, a veces para disminuir los costes de desarrollo y mantenimiento que se producen cuando una empresa utiliza lenguajes diferentes. TIPO DE APLICACIÓN, hay lenguajes orientados a un campo de aplicación concreto. Aplicaciones tiempo real críticas -> ensamblador Gestión -> cobol Área científico-técnica -> Fortran, Pascal, C Inteligencia artificial -> Lisp, Prolog Orientado a objeots ->> Eifel, C++ DISPONIBILIDAD Y ENTORNO, hay que comprobar los compiladores existentes para la plataforma elegida. Estudio comparativo de eficiencia con un programa de prueba. Herramientas del entorno de desarrollo: editor, montador, depurador, control versiones, manejo de librerías, etc. EXPERIENCIA PREVIA, aprovechar la experiencia aumenta el rendimiento y disminuye las posibilidades de error. La formación supone una fuerte inversión. RESUABILIDAD, organización de librerías que faciliten la búsqueda y almacenamiento de módulos reutilizables. TRANSPORTABILIDAD, depende del lenguaje USO DE VARIOS LENGUAJES, no es aconsejable a no ser que las distintas partes sean más fáciles de desarrollar en lenguajes concretos. Hay que tener en cuenta la compatibilidad de los compiladores
  • 91. INGENIERÍA DEL SOFTWARE Javier Martín 91 ASPECTOS METODOLÓGICOS Estos aspectos pueden mejorar la codificación bajo determinados puntos de vista: claridad, manejo de errores eficiencia y transportabilidad. Normas y estilo, para conseguir un trabajo del equipo homogéneo. Ejemplos: Formato y contenido del as cabeceras de cada módulo Formato y contenido para los comentarios Uso del indentado Elección de nombre y uso de mayúsculas Restricciones sobre el tamaño del os módulos, evitar anidamiento excesivo, no usar goto, etc. Manejo de errores. Las causas de los errores pueden estar en el hardware o en el software, incluso de pueden producir por la introducción de datos incorrectos. DEFECTO, incorrección en el software. Pueden permanecer ocultos hasta que no se ejecutan determinadas partes del programa FALLO, elemnto del programa que no funciona correctamente, produciendo un resultado erróneo ERROR, estado no válido de un programa al que se llega como consecuencia de un fallo. Al codificar podemos adoptar distintas actitudes ante los errores: NO CONSIDERAR LOS ERRORES, no es realista esta postura PREVENCIÓN DE ERRORES, consiste en detectar los fallos antes de que provoquen un error. Hay que evitar la propagación de errores y tener siempre a la salida un resultado correcto o una señal de fallo. RECUPERACIÓN DE ERRORES, Cuando no es posible depurar todos los fallos es necesario hacer un tratamiento de errores para devolver al programa a un estado válido y evitar que el error se propague 1. Detección del error 2. Recuperación del error. Se pueden usar dos esquemas en general: 1. RECUPERACIÓN HACIA DELANTE, hay que programas un mecanismo de excepciones para que cuando se detecte el error se corrija el estado y se continúe correctamente la ejecución. 2. RECUPERACIÓN HACIA ATRÁS, corrige el estado no válido restaurando el programa a un estado correcto anterior, • Una transacción es una operación que puede terminar con éxito o con fallo, en cuyo caso se aborta y se restaura el estado de antes de comenzar dicha transacción.
  • 92. INGENIERÍA DEL SOFTWARE Javier Martín 92 ASPECTOS METODOLÓGICOS: EFICIENCIA Y TRANSPORTABILIDAD La potencia de cálculo y la cantidad de memoria disponible en los computadores actuales hacer preferible la claridad en el código que la EFICIENCIA. EFICIENCIA EN MEMORIA, en la fase de diseño se estudian las posibles alternativas y se opta por el algoritmo que optimiza el uso dela memoria. EFICIENCIA DE TIEMPO, es importante en el desarrollo de sistemas de tiempo real muy críticos. A veces se mejora la eficiencia de tiempo a costa de ocupar más memoria. En el diseño se estudian las alternativas y se adopta el algoritmo más rápido. Técnicas de codificación para aumentar la eficiencia de tiempo: Tabular cálculo complejos Expansión en línea, emplear macros en vez de subrutinas Simplificar las expresiones aritméticas y lógicas Sacar fuera de los bucles lo que no sea necesario repetir Usar estructuras de datos de acceso rápido Evitar operaciones en coma flotante, mejor en coma fija Evitar conversiones innecesarias de tipos TRANSPORTABILIDAD DEL SOFTWARE, no solo es rentable a corto plazo para obtener versiones para diferentes plataformas, a medio y largo plazo facilita el mantenimiento y la adaptación de la aplicación a las nuevas arquitecturas. Los factores para la transportabilidad son: Utilización de estándares Aislar las peculiaridades, colocándolas en módulos separados. Se procurará evitar aquellos elementos no consolidados y que pueden estar sujetos a futuros cambios o revisiones. Las peculiaridades de los distintos tipos de computadores depende de la arquitectura y del sistema operativo utilizado.
  • 93. INGENIERÍA DEL SOFTWARE Javier Martín 93 TÉCNICAS DE PRUEBAS Para garantizar su calidad es necesario someter al programa a diversas pruebas para garantizar su funcionamiento correcto. Se deben hacer pruebas a cada módulo, según avanza la codificación del proyecto. Finalmente se harán las pruebas de integración entre módulos y las pruebas de sistema OBJETIVOS, el principal objetivo es conseguir que el programa funcione incorrectamente para ir depurando los errores y que se descubran los efectos. Para elaborar los casos de prueba: Una buena prueba encuentra los errores y no los encubre Para determinar si hubo error es necesario conocer el resultado correcto Deben participar codificador y diseñador Al corregir un error se pueden introducir otros nuevos No es posible demostrar la ausencia de defectos mediante pruebas No son posibles las pruebas exhaustivas. Con el menor esfuerzo posible hay que detectar el máximo nº de defectos, en especial los más graves. Las pruebas se realizan en un entorno de ejecución controlado, para asegurar la estabilidad en los pruebas y automatizar en lo posible este proceso.
  • 94. INGENIERÍA DEL SOFTWARE Javier Martín 94 TÉCNICAS DE PRUEBAS DE UNIDADES: CAJA NEGRA Las técnicas de pruebas de unidades siguen dos estrategias fundamentales: PRUEBAS DE CAJA NEGRA, se ignora por completo la estructura interna del programa y se comprueba la corrección de entradas y salidas del programa. Lo importante es la elaboración de los casos de prueba con el objetivo de descubrir los errores e incorrecciones. Métodos: •PARTICIÓN EN CLASES DE EQUIVALENCIA, se trata de ividir el espacio de ejecución del programa en varios subestapacios o clases equivalentes desde el punto de vista del a caja negra. Hay que: •Determinar las clases equivalentes apropiadas •Establecer pruebas para cada clase de equivalencia, con datos de entrada válidos y no válidos. Se repiten las pruebas hasta cubrir todos los casos válidos de todas las clases. •ANÁLISIS DE VALORES LÍMITE, los errores tienden a aparecer al operar en las fronteras. Directrices para la elaboración de casos de pruebas: •Entradas, probar los valores del límite y justo fuera del límite •Salidas, probar los valores del límite y justo fuera del límite •Memoria, probar tamaños nulos, límite superior y superior al límite de todas las estructuras de datos del programa •Recursos, probar límites. Si terminales=30, probar 0, 20 y 31 •Otros, probar los valores límite y establecer las pruebas •COMPARACIÓN DE VERSIONES, se desarrollan varias versiones software para resolver la especificación del módulo y se comparan los resultados con el fin de detectar errores. •EMPLEO DELA INTUICIÓN, la intuición y la experiencia puede mejorar los casos de prueba, también es conveniente que participen expertos ajenos al desarrollo.
  • 95. INGENIERÍA DEL SOFTWARE Javier Martín 95 TÉCNICAS DE PRUEBAS DE UNIDADES: CAJA TRANSPARENTE Se tiene en cuenta la estructura interna del módulo. Los casos de prueba deben conseguir que: Todas las decisiones se ejecuten en uno y otro sentido Todos los bucles se ejecuten en los supuestos más diversos posibles Todas las estructuras de datos se modifiquen y consulten alguna vez La complejidad de los módulos dificulta realizar exhaustivas pruebas de caja transparente. Conviene que participen expertos con un conocimiento amplio de las estructura del programa. Métodos: CUBRIMIENTO LÓGICO, consiste en no dejar ninguna sección del código sin ejecutar en pruebas. Se llama camino básico a cualquier recorrido sobre el diagrama de flujo que nos permita llegar al final desde el punto de entrada. Hay que determinar el conjunto de caminos básicos que recorran todas las líneas de flujo del programa al menos una vez. Nº máximo de caminos = Nº predicados + 1 En un segundo nivel de casos de prueba se trata de que se ejecuten todas las combinaciones de caminos básicos por parejas A otros niveles se generan casos de pruebas para que se ejecuten un nº significativo de combinaciones de caminos básicos PRUEBAS DE BUCLES, que son elemento esencial en cualquier programa. Casos: •Bucles con nº no acotado de repeticiones, probar 0, 1, 2, bastantes y muchas iteraciones. •Bucles con nº máximo de repeticiones, probar 0, 1, 2 bastantes, M-1, M y M+1 iteraciones •Bucles anidados, el nº de pruebas para comprobar todas las situaciones crece. EMPLEO DE LA INTUICIÓN, conocer con detalle la estructura del módulo y tener experiencia.
  • 96. INGENIERÍA DEL SOFTWARE Javier Martín 96 TÉCNICAS DE PRUEBAS DE UNIDADES: CAJA TRANSPARENTE Diagramas de flujo con 3 y con 4 predicados lógicos simples
  • 97. INGENIERÍA DEL SOFTWARE Javier Martín 97 ESTIMACIÓN DE ERRORES NO DETECTADOS Resulta imposible demostrar que un módulo carece de defectos, pero podemos hacer una estimación estadísitca de erratas que permanecen sin detectar: Anotar el nº de errores que se producen inicialmente al pasar los casos de prueba. Corregir el módulo hasta que sdesaparezcan todos esos errores Introducir en el módulo, de forma aleatoria un nº razonable de errores Someter al módulo nuevamente a los casos de prueba y ver el nº de errores que se detectan De esta forma podemos estimar el nº de errores que han permanecido sin ser detectados en el programa En función de los resultados se valorará la necesidad de preparar nuevos casos de prueba.
  • 98. INGENIERÍA DEL SOFTWARE Javier Martín 98 ESTRATEGIAS DE INTEGRACIÓN Se integran los módulos del sistema para conformar el sistema completo. Causas de error: Desacuerdos en el interfaz entre módulos Interacción indebida entre módulos Imprecisiones acumuladas Estrategias básicas para la integración: INTEGRACIÓN BIG BANG, en un único paso se integran todos los módulos, de forma que todos los defectos se manifiestan a la vez. Solo recomendable para sistemas pequeños. INTEGRACIÓN DESCENDENTE, se parte de un módulo principal P, que se prueba con “módulos de andamiaje”, los cuales van siendo sustituidos por los verdaderos de forma progresiva por niveles. Los módulos de andamiaje; No hacen nada y solo sirven para comprobar el interfaz Imprimen un mensaje de seguimiento, con información de la llamada Suministran un resultado fijo Suministran un resultado aleatorio Suministran un resultado tabulado u obtenido con un algoritmo simplificado El trabajo de elaborar estos módulos puede ser aprovechado para hacer un prototipo y mostrar al cliente un avance del programa. Inconvenientes: Impide el trabajo en paralelo en las pruebas Es difícil buscar los casos de pruebas especiales o dirigidas a los últimos módulos integrados INTEGRACIÓN ASCENDENTE, se codifican por separado y en paralelo todos los módulos del nivel más bajo. Para probarlos se codifican módulos gestores o conductores que los hacen funcionar independientemente o en combinaciones sencillas. Las ventajas son: Facilita el trabajo en paralelo Facilita el ensayo de situaciones especiales La Integración Sandwich consiste en realizar integración ascendente con los módulos de nivel más bajo y descendente con los de nivel más alto.
  • 99. INGENIERÍA DEL SOFTWARE Javier Martín 99 INTEGRACIÓN DESCENDENTE Y ASCENDENTE
  • 100. INGENIERÍA DEL SOFTWARE Javier Martín 100 PRUEBAS DE SISTEMA Se trata de probar el sistema completo para ver si realmente cumple las especificaciones. Se suelen emplear estrategias de caja negra. Podemos distinguir diferentes clases de pruebas: PRUEBAS DE RECUPERACIÓN, para comprobar la capacidad del sistema para recuperarse ante fallos PRUEBAS DE SEGURIDAD, par comprobar los mecanismos de protección ante un acceso no autorizado PRUEBAS DE RESISTENCIA, para comprobar el comportamiento del sistema ante situaciones excepcionales PRUEBAS DE SENSIBILIDAD, para comprobar el tratamiento que da el sistema a ciertas singularidades relacionadas casi siempre con los algoritmos matemáticos utilizados PRUEBAS DE RENDIMIENTO, para comprobar las prestaciones del sistema que son críticas en tiempo PRUEBAS ALFA Y BETA. Los usuarios también deben intervenir en las pruebas finales del sistema Pruebas alfa, son las primeras pruebas que se realizan en un entorno controlado donde el usuario tiene el apoyo de alguien del equipo de desarrollo Pruebas beta, los usuarios trabajan con el sistema en un entorno real y sin ayuda, anotando los problemas que se le presentan
  • 101. INGENIERÍA DEL SOFTWARE Javier Martín 101 Tema 6: AUTOMATIZACIÓN DE PROCESO DE DESARROLLO
  • 102. INGENIERÍA DEL SOFTWARE Javier Martín 102 ENTORNOS DE DESARROLLO SOFTWARE Entorno se refiere al contexto dentro del cual se desarrolla una determinada actividad, o también a la combinación de instrumentos utilizados. El entorno de desarrollo software, SEE, cuenta con una serie de técnicas de automatización denominadas CASE. Las primeras herramientas se referían a la fase de codificación, así el entorno de programación clásico consiste en un compilador con editor, montador de enlaces, etc. Posteriormente con el empleo del término CASE se ha extendido la automatización a las fases de análisis y diseño. Para las pruebas de integración se puede disponer de herramientas de ensayo y para la fase de mantenimiento se dispone de soporte de gestión de configuración, que incluye la gestión de versiones y el control de cambios. El futuro de las técnicas CASE está en el soporte completo de todo el ciclo de vida. Se ha denominado IPSE, ICASE e ISEE. FORMAS DE ORGANIZACIÓN: En cadena, se combinan una serie de herramientas de manera que la salida de cada una es la entrada de la siguiente. Ej.: editor-compilador- montador Con repositorio, las herramientas integradas guardan su información en este almacén común. Una parte del repositorio es el diccionario de datos Como una única herramienta global, capaz de realizar todas las operaciones necesarias.
  • 103. INGENIERÍA DEL SOFTWARE Javier Martín 103 OBJETIVO Y CLASIFICACIÓN DE ENTORNOS DE DESARROLLO Dar soporte a la programación en un lenguaje concreto Dar soporte a una metodología de desarrollo Ayudar al desarrollo de entornos de desarrollo (meta-entornos) CLASIFICACIÓN, desde un punto de vista pragmático: ENTORNOS ASOCIADOS A UN LENGUAJE. Un primer paso lo constituyen los intérpretes de los lenguajes de programación interactivos (BASIC, LISP, SmallTalk, ada). ENTORNOS ASOCIADOS A ESTRUCTURA. En ellos se almacena la información correspondiente al programa en forma estructurada y no simplemente como texto. La edición del programa se consigue mediante un editor de estructura, que permite construir o modificar un programa operando sobre los elementos de su estructura. El entorno se basa en plantillas que describen las estructuras básicas (PL/). ENTORNOS BASADOS EN HERRAMIENTAS. Consisten en una colección de herramientas (toolkit o toolbox) relativamente independientes, aunque compatibles entre sí, además deben de existir algún medio para hacerlas funcionar en forma combinada. Suele presentar como ventaja el ser bastante abiertos, permitiendo la incorporación de nuevas herramientas. Su inconveniente es la falta de una interfaz de usuario interactiva y uniforme. ENTORNOS ASOCIADOS A UNA METODOLOGÍA. La integración de los distintos elementos del entorno se suele conseguir mediante el empleo de un almacén único o repositorio CASE para almacenar todos los elementos de información contemplados en la metodología soportada. El repositorio contiene información de los diagramas de flujo de datos, descripción de cada dato y de cada proceso. ENTORNOS DE 4ª GENERACIÓN. Se apoyan en un sistema de gestión de base de datos dotado de un lenguaje de consulta con herramientas complementarias.
  • 104. INGENIERÍA DEL SOFTWARE Javier Martín 104 CLASIFICACIÓN DE ENTORNOS POR NIVELES Nivel de servicio. Corresponde a un producto que realiza una función u operación elemental, que una vez invocada no se interrumpe (compilador). Nivel de herramienta. Producto software que permite invocar diferentes servicios u operaciones correspondientes a una misma actividad individual. (editor de textos). Nivel de banco de trabajo o equipo de herramientas. Corresponde a un producto CASE que automatiza o soporta un perfil concreto de actividad profesional dentro del proceso de desarrollo. Un banco de trabajo suele englobar varias herramientas, integradas con una interfaz de usuario uniforme. En la actividad de codificación el banco de trabajo se denomina entorno de programación. Entorno de desarrollo. Producto CASE que soporta el proceso completo de desarrollo de software (IPSE o ICASE). Los dos primeros niveles se describen a veces como uno solo.
  • 105. INGENIERÍA DEL SOFTWARE Javier Martín 105 HERRAMIENTAS DE SOFTWARE Herramientas clásicas. • Editor de texto. • Compilador • Montador de enlaces. Construye ejecutables combinando varios ficheros objeto. • Gestor de librería. Combina ficheros objeto en una librería. • Herramienta ‘MAKE’. Automatiza la actualización de los ficheros a partir de otros. • Intérprete interactivo. Casi Constituye un entorno de programación completo (si lo es se debe clasificar a nivel de banco de trabajo y no de herramienta). Engloba funciones equivalentes a las de edición, compilación, montaje y ejecución. • Compilador/Intérprete. Procesador de un lenguaje interpretado de forma no interactiva.Incluye un compilador a código intermedio y un intérprete de ejecución de dicho código intermedio con todas las librerías de soporte. No incluye funciones de editor de programas. • Depurador absoluto. Ejecuta el programa de forma controlada. Resulta incomodo de usar ya que hace referencia a posiciones de memoria y a los registros del procesador. • Depurador simbólico. Realiza una función análoga al anterior pero con referencia al código fuente por lo que es más cómodo de usar. Herramientas evolucionadas. • Editores orientados al lenguaje. Son editores de estructura. • Herramienta ‘MAKE’ automática. Se incorpora la función ‘MAKE’ al compilador. • Manejador de versiones. Almacena de forma organizada y eficiente una serie de versiones del mismo elemento software. Se suelen usar desde las utilidades MAKE al recompilar una aplicación en desarrollo. • Procesadores/Analizadores de código fuente. Grupo en que se pueden incluir diferentes herramientas que procesan el texto fuente para obtener mediciones, generar tablas de referencias, encolumnar …etc. Estas funciones podrían estar incorporadas en los compiladores. • Procesadores de documentos. No son específicos del desarrollo pero son un soporte fundamental. • Herramientas de control de pruebas. Ayudan a la realización de pruebas unitarias o de integración. • Herramientas de control de cambios. Ayudan a la realización del desarrollo y al mantenimiento de aplicaciones. • Procesadores de ficheros de texto. Herramientas de 4º generación. Hojas de cálculo. Procesadores de documentos Gestores de bases de datos Lenguajes de 4ª generación. Generadores de programas.
  • 106. INGENIERÍA DEL SOFTWARE Javier Martín 106 ENTORNOS INTEGRADOS Integración de datos. Significa que la información almacenada en el entorno es gestionada de manera uniforme, con independencia de las transformaciones que se hagan con cada elemento de información. Debe de conseguir: ¤ Interoperatividad entre herramientas. ¤ No redundancia de datos ¤ Consistencia de datos. ¤ Paso de datos de una herramienta a otra. La integración de datos puede conseguirse de diversas maneras: • Transferencia directa de datos de una herramienta a otra. Eficiente pero poco flexible. Complicada para integrar muchas herramientas diferentes. • Transferencia mediante ficheros. Es la más sencilla. Existe un formato normalizado (CDIF). • Transferencia basada en comunicación. Alternativa a la anterior y puede ser usada en sistemas distribuidos y en sistemas abiertos. • Repositorio común. Se utiliza en los entornos modernos con un grado de integración elevado. Integración de control. Consiste en la combinación flexible de funciones para cumplir con las particularidades del proceso y actividades que hay que informatizar. El mayor grado se consigue cuando desde una herramienta se puede invocar funciones de otra herramienta. Exige como paso previo la integración de los datos. Integración de la presentación. Trata de realizar la interacción con el usuario de manera uniforme, con cierta independencia dela función o herramienta en uso. Para ello se deben conseguir los objetivos de un sistema amigable: • Limitar el número de formas de interacción diferentes. • Usar formas de interacción y presentación adecuadas al modelo mental que el usuario tiene del entorno. • Satisfacer los tiempos de respuesta esperados y dar indicación del avance del proceso en caso de tratamiento de larga duración. • Mantener información útil a disposición del usuario. Integración del proceso. Consiste en que las herramientas se combinan de manera que apoyan o fuerzan el uso de una metodología de desarrollo definida. Este modo exige una buena integración de control y datos. El proceso de desarrollo puede definirse en base a los siguientes elementos. • Un paso del desarrollo es una unidad de trabajo concreta que produce un resultado (por ejemplo revisión del DDD). • Un suceso o evento es un condición que ocurre durante la ejecución de un paso y que puede desencadenar la ejecución de una acción asociada (compilación de un módulo). • Una restricción del desarrollo es una limitación que debe cumplirse. Un buen grado de integración del proceso exige que todo los pasos, eventos y restricciones que definen de forma natural la metodología de desarrollo a utilizar, sean representables y tratables dentro del entorno.
  • 107. INGENIERÍA DEL SOFTWARE Javier Martín 107 ENTORNOS INTEGRADOS: EL REPOSITORIO CASE El repositorio CASE Es un almacén común en el que se guarda toda la información necesaria para la operación de un grupo de herramientas o de un entorno de desarrollo. El repositorio facilita las funciones de almacenamiento y recuperación de datos, normalmente en forma concurrente multiusuario, y el mantenimiento de relaciones entre los datos. Además puede suministrar funciones de gestión de versiones, de seguridad y de gestión de transacciones. Para proporcionar las funciones de almacenamiento y recuperación de datos se requiere: • Un servicio de metamodelo, que permita definir las estructuras de datos que han de almacenarse en el repositorio. • Un servicio de consulta y actualización (query) que permita acceder y manipular la información contenida en el repositorio. • Un servicio de vistas que permita definir subconjuntos de datos y operaciones que constituyan el subentorno de trabajo de ciertas actividades y entre los que haya que mantener relaciones concretas de consistencia. • Un servicio de intercambio de datos, que facilite la importación y exportación de información mediante ficheros externos.
  • 108. INGENIERÍA DEL SOFTWARE Javier Martín 108 BANCOS O EQUIPOS DE TRABAJO Un banco de trabajo debe integrar las herramientas necesarias para dar soporte a un determinado perfil profesional o actividad general de desarrollo. Un banco de trabajo debe de conseguir: • Integración de la presentación • Integración de control • Integración de datos (preferentemente con repositorio común). Según la actividad soportada, tendremos distintos bancos o equipos de trabajo, entre ellos: • Equipos de análisis y diseño: Herramienta CASE o CASE superior. Corresponde al entorno asociado a la metodología. Muchos de ellos cubren las dos fases (análisis y diseño), mientras que otros sólo cubren una. El repositorio común almacena todos los elementos definidos en la metodología soportada. • Entorno de programación. Es el banco de trabajo para la actividad de codificación pudiéndose extender al diseño detallado y a las pruebas de unidades. • Equipo de verificación y validación: Capaz de facilitar las tareas de inspección y pruebas de módulos y sistemas. Suelen estar ligados al entorno de programación. Pueden incluir funciones de: ¤ Análisis estático, con evaluación de métricas de calidad y generación de matrices o grafos de llamadas entre funciones y módulos. ¤ Generación de tablas de referencias cruzadas. ¤ Gestión de pruebas, automatizando la realización de ensayos. • Equipo de construcción de interfaz del usuario. Permite definir cómodamente el esquema de diálogo con el usuario, así como los elementos de interacción. • Equipo de gestión de configuración. Permite almacenar diferentes versiones de los elementos del proyecto, definir distintas configuraciones y controlar los cambios sucesivos. • Equipo de ingeniería inversa. Debe facilitar la extracción de información de diseño, los elementos abstractos a partir de un código o sistema software existente. • Equipo de gestión de proyectos. Facilita la confección de planes de trabajo, con la asignación de tiempos y recursos a diferentes tareas, y el seguimiento de su realización.
  • 109. INGENIERÍA DEL SOFTWARE Javier Martín 109 ENTORNOS ORIENTADOS AL PROCESO Deben de ser capaces de soportar todas las actividades del ciclo de vida de desarrollo siguiendo un modelo definido. Un entorno global de estas características se designa como IPSE, ICASE o ISEE. La característica principal que distingue un entorno de esta clase de un banco de trabajo amplio es el soporte explícito de un modelo global de desarrollo. El entorno debe poseer las características de integración del proceso, además de las de integración de datos, control y presentación. Para conseguir este nivel de integración es necesario contar con un modelo formal del proceso de desarrollo. A diferencia de las metodologías parciales de análisis y diseño, este modelo suele construirse a medida de cada empresa productora de software. Un ISEE de uso general deberá permitir: • Construir la definición formal del modelo del proceso de desarrollo. • Asegurar la aplicación práctica del modelo definido. Aunque no existen entornos ISEE disponibles si existen esquemas generales de arquitectura de entornos orientados al proceso, que en algunos casos han dado lugar a colecciones de herramientas que facilitan las funciones deseadas. Algunas son: ¤ PCTE (Portable Common Tool Environment). Es una arquitectura de entorno integrado, basada en un repositorio común. Su elemento principal es la definición de interfaz de acceso al repositorio. Sobre él pueden operar herramientas que automaticen las actividades previstas en el modelo del proceso. Existen implementaciones de repositorio que cumplen con la especificación PCTE, y también algunas colecciones de herramientas como las del proyecto PACT. ¤ ESF (Eureka Software Factory). Define otro modelo de arquitectura, cuyo elemento central de integración es el denominado ‘software bus’, que es un interfaz normalizado para la interconexión de herramientas. Se distinguen dos clases de herramientas: servidores y herramientas de interacción. Los servidores pueden realizar las funciones de repositorio, tanto centralizado como distribuido, y suministrar servicios o funciones automatizadas. Las herramientas de interacción permiten la comunicación con los usuarios, que pueden acceder a los repositorios y a los servicios a través de ellas. ¤ Modelo NIST/ECMA. Contempla una estructura fija, compuesta por elementos que proporcionan una integración de datos, basada en un repositorio común, integración de presentación mediante un soporte global de interfaz de usuario, e integración del control, basada en la gestión de procesos y mensajes. El entorno puede particularizarse para un modelo de desarrollo determinado instalando sobre estos elementos fijos una colección de herramientas. Ante la ausencia de productos CASE listos para usar se debe de tomar el enfoque de combinar productos para construir un entorno global.

Notas del editor

  1. 11/05/13 ,