Академический Документы
Профессиональный Документы
Культура Документы
El software
♦ Características
• Producto lógico, no físico
• Se desarrolla, no se fabrica
• No se deteriora.
• Construcción a medida.
• Mantenimiento complicado
Z)[)\^]Y_ ` aYb"cYd
"!#%$'&)(+*
?
,.-)/%021'-)/+3 = >
; <
: GH
6
: EF
6 798 CD T"UV"WYX
45 @BA
IKJ LMNOPLQSRO
Departamento de Informática 1
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
♦ 1ª Época (1950)
• La programación de las computadores era un arte
• No se disponía de métodos sistemáticos para desarrollar
software
• No había planificación
♦ 2ª Época (60-70)
• El software como producto de distribución genérica
• Aparece el concepto de mantenimiento del software
• Aumento de la complejidad del código
♦ 3ª Época (72-85)
• Sistemas multiusuario
• Sistemas en tiempo real
• Bases de datos
• Producto de software
♦ 4ª Época (85-)
• Sistemas personales potentes
• Tecnologías orientadas a objetos
• Sistemas expertos
• Redes neuronales
• Computación en paralelo
• Redes de computadoras
• Biocomputación
Departamento de Informática 2
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
♦ Definición:
Según Bauer (1969), entendemos por ingeniería del software
“el establecimiento y uso de principios de ingeniería robustos,
orientados a obtener software económico, que sea fiable y funcione
eficientemente sobre máquinas reales”
Departamento de Informática 3
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Departamento de Informática 4
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
♦ Definición:
1. Se centra en el QUÉ.
2. Intenta identificar:
• Información a procesar
• Función, rendimiento y comportamiento del sistema
deseados
• Interfaces a establecer
• Restricciones de diseño existentes
• Criterios de validación que se necesitan para definir un
sistema correcto
♦ Desarrollo:
1. Se centra en el CÓMO
2. Se define la forma de:
• Diseñar e implementar de las estructuras de datos
• Implementar la funcionalidad como una arquitectura del
software
• Implementar los detalles procedimentales
• Traducir el diseño a un lenguaje de programación
• Realizar las pruebas sobre el software resultante
♦ Mantenimiento:
1. Se centra en los cambios asociados a:
• La corrección de errores
• Adaptaciones requeridas por la evolución del entorno
• Mejoras producidas por los requerimientos del cliente
Departamento de Informática 5
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Actividades:
1.- Ingeniería y análisis del Sistema/Información
- Ubicación del software en el ámbito donde va a
funcionar, es decir, se analiza el software como parte
de un sistema mayor
- Se resuelve el problema en términos formales
mediante el uso de alguna herramienta de
especificación formal
- Objetivos:
o Identificar las necesidades del cliente
o Evaluar la viabilidad del sistema (técnica,
económica y legal)
o Asignar funciones al software, al hardware, a la
gente, a la base de datos y a otros elementos del
sistema
o Establecer restricciones de coste y tiempo
o Crear una definición del sistema que sea la base
de todo el trabajo posterior
Departamento de Informática 6
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Departamento de Informática 8
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Documentación
- Todo software debe ir acompañado de una documentación que
permita a sus usuarios aprender a utilizarlo y mantenerlo
- Su correcto desarrollo es una parte importante en la Ingeniería
del Software
- Podemos distinguir los siguientes documentos que deben
acompañar a cualquier desarrollo software, si bien, su extensión
dependerá del alcance del proyecto
Documento de Análisis
1. Análisis básico del sistema
Definición del problema
Estrategia de solución y objetivos del software
Documento de Diseño
1. Especificación de las representación de la información
2. Diseño Arquitectónico
Descomposición modular, interfaces de los módulos e
interrelación entre ellos
3. Diseño Detallado
Descripción detallada de la funcionalidad de cada módulo
utilizando pseudocódigo o lenguaje natural no ambiguo
4. Documento de pruebas
Plan de pruebas a realizar sobre el software para
detectar fallos
Departamento de Informática 9
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
NO parafrasear código
9. Buen manejo de errores
Controlar errores en los datos de entrada y en las operaciones
Departamento de Informática 10
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Normas Particulares
Constantes:
• Utilización de mayúsculas para todo el identificador
Ejemplo: const int PI = 3.14159;
Declaración de Tipos:
• Comenzar todos los tipos definidos por el usuario por una T mayúscula
Ejemplo: Talumno, Tvehiculo,
TdiaDeLaSemana, Tfecha
Variables o parámetros:
• Utilizar la primera letra del identificador en minúscula
Ejemplo: float temperatura;
• Las palabras que los componen suelen ser sustantivos y adjetivos. No
tienen sentido las formas verbales
• Diferenciar las variables que contienen tipos básicos de las que tienen
tipos referenciales (punteros)
Ejemplo: float temperatura, float *Ptemperatura
Departamento de Informática 12
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Procedimientos y funciones:
• Utilizar la primera letra del identificador en mayúscula
Ejemplo: LeerTemperatura
Departamento de Informática 13
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
• Entrada de datos:
- Dispositivos de entrada de datos:
- Teclado, archivos, etc
- Petición de entradas interactivas:
- Etiquetar las peticiones
- Usar indicativos de “fin de dato”
- No agobiar al usuario
- Uso intensivo de las posibilidades del compilador
- Posibilidad de almacenamiento para volver a ejecutar
el programa con los mismos datos o modificandolos
- Advertencia de valores “peligrosos”
- Validación de datos:
- Comprobación de rangos
- Comprobación de tipos
- Lectura de opciones (Menú):
- Opciones independientes de minúsculas o mayúsculas
- Dar la posibilidad de introducir la opción por alguna
inicial o por un número
- Aconsejable utilizar un sistema de cursores
• Salida de datos
- Etiquetar las salidas de datos
- Posibilitar la salida a otros dispositivos: archivos,
impresora, etc
- Salida ordenada y “elegante”
- Utilización de gráficos
- Evitar la superposición de resultados
- El programa siempre debe aparentar estar “vivo”
Departamento de Informática 14
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Departamento de Informática 15
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
(* --------------------------------------------------- *)
Function Media_Datos(VAR V:datos; tam:integer);
(* Función que calcula la Media Aritmética de los
‘tam’ números enteros del vector ‘V’ *)
var
acum:integer;
begin
acum:=0;
for i:=1 to tam do
acum:= acum + V[i];
Media_Datos:= acum / tam;
end;
(* --------------------------------------------------- *)
begin {Programa Principal}
randomize; (*Inicializador del Generador de
Números Aleatorios del T.P. *)
repeat
writeln(‘Introduce el número de elementos
entre (1-‘,MAX,’): ‘);
readln(num);
until ((num>0) and (num <=MAX));
Generar_Datos(almacen,num);
Mostrar_Datos(almacen,num);
writeln (‘La media de los ‘ ,num,‘valores es:‘,
Media_Datos(almacen,num);
readln;
end.
Departamento de Informática 16
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Desarrollo Estructurado
• Existen diferentes metodologías de diseño
• Nosotros nos centraremos en una metodología de diseño
sencilla denominada Desarrollo Estructurado, que se apoya
esencialmente en el uso de la Programación Estructurada y en
el Diseño Modular
Programación estructurada
• Es la metodología más utilizada
• Fue propuesta por Dijkstra a principios de los años 70
• Fue implementada por Wirth en el lenguaje Pascal
Departamento de Informática 17
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
♦ Teorema de Bohm-Jacopini
También conocido como Teorema general de la Programación
Estructurada:
Departamento de Informática 18
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Diseño Modular
• Objetivo: Conseguir una visión del C os te total
C os te
software como una estructura
jerárquica de módulos R e gión de
cos to m ím im o
C os te de la
in te rfaz
E(P1∪P2)>E(P1)+E(P2)
Departamento de Informática 19
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Diseño Estructurado
Concepto
Es el proceso de definición de la arquitectura software:
componentes, módulos, interfaces, procedimientos de prueba
y datos de un sistema, que se crean para satisfacer unos
requisitos previamente especificados
Objetivos
• Obtener una estructura modular y los detalles de proceso
del sistema partiendo solamente de la información obtenida
en la fase de Análisis del Sistema
• Especificar cómo se va a construir el sistema
• Obtener un diseño que funcione, que sea fácil de mantener,
favorezca la reutilización y se pueda probar y comprender
fácilmente
• Utilizar métodos gráficos (diagramas de estructuras) para
representar la estructura modular del sistema
Fases
Atendiendo al nivel de detalle con que abordemos esta fase,
distinguiremos tres fases:
• Diseño procedural o arquitectónico
Proceso de definición de la colección de componentes
del sistema y sus interfaces
• Diseño de la Interfaz
Establecer la forma de comunicación con las entidades
externas ya sean humanas o no humanas
• Diseño detallado
Descripción más detallada de la lógica del proceso
(pseudocódigo) y de las estructuras de datos
Departamento de Informática 20
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Tareas
• Determinar qué módulos implementarán los procesos
terminales obtenidos en la fase de análisis
• Organizar la estructura de estos módulos y definir las
conexiones entre los mismos
• Describir el pseudocódigo para cada módulo
"$#&%('*),+-/.1023#
¿ &¾ ÀuÁ 8¼ ¶·Â Ãe ¾&À
´ §&¨u¯*°8µ²© £© §&¨ ´ §&¨(¯*°^¢¤£¥?¦§&¨ ¿ ¾&ÀuÁ ¼ÄÅÃÆÇ ¾&À
¶8·¸!¹º8»/¼» ¶8·3¸!¹bº8»¼»
´ §&¨(¯*°8µ²© £© §&¨ ½¾ ¸¼!»
½¾ ¸¼!»
TUWVX/Y8Z[U i1j kBl/monpj q!mr
45687619;:3<5>=(973:?53@ABA*=C9;687 s m&nut*vk/w8xyj z*j mon|{k~}
DFE G8G&HJILKENMO8P8QBR S*R KE ^
\
] &
_ b
`
a e
c f
d
\
g
_ h
?B;
&!*;8
¿ ¾&À(Á ¼ÄÅÃÆÇ ¾&À
ÈÊÉËÌÍÎË/Ï&ÐÑÒÉÓÔ ¶8·¸!¹º8»/¼»
! ÕÖ8×ØÚÙ ÛÖ!Û ½¾ ¸¼»
! ¤¢ £¥?¦§o¨ª©|«§¬®/§o¨u¯*°±
/& ¡ ©(²?£y¬b±&³±1²;¥3§¬~£y°&²¥3§¯°¬b±8
Departamento de Informática 21
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
!"#%$'&)(*,+-/.012143653!.7389:3
;<>=@?BADC EFGHBI@JK#L!M7NH6OQP!F#RTSULV
WX2YZQ[\^]`_ a2bdc
egfih@jklnmpo
qrjsQjit^u`v w x y{z | }~2~2~
>
B` 1)7B2d#76i!"#%')U¡ -#
¢ £1¤¦¥1§4¨©¨!¥¢7¨ª9«:¨¡¢1¬!¥'¬¤)ª¨!¢«¬!¥7¤®B¯!¤¤2¥1§ª°¨#¯-¨2±
²1³2´µ¶!³·¶-¸¸!¹¸¦º1»µ¼1½
¾¿ÀÁ@ÀÃÂ-Ä^ÅÆÀÃÇ ÈÉ Ê Ë
ÌBÍ
ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÏ#Ð
#include <stdio.h>
#include <conio.h>
ÑÒ!Ó2ÔÕ1Ö×ÔØrÙUÚÛBÜÃÙÞÝßØiÔ2Ù*ÚiÛ"àá1Ý-â7Ûã4Ô!â1ãÚÛ1Ò#Ñ
const iva=0.16;
äåææææææææææææææææææææææææææææææææææ æææææ
ç èßéêìëêîíêï-ë7èiðBñ-è¡éò#ëíêï!ë7èð"ó¡ô#õï!í7è!ñ
êdöBê×è2ë1÷7ïð
øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøù#ú
void S_Inicial (float *inicial);
void Proceso (float inicial, float *actual, int *pag,
int *ing);
void Informe (float inicial, float actual, int ing,
int pag);
void Leer (char *tipo, float *cantidad);
void Actualizar (char tipoOper, float cantidad, float
*actual, int *ing, int *pag);
Departamento de Informática 22
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
void main (void) {
float saldoInicial, saldoActual;
int ingresos, pagos;
!#"$%"&'"(")*,+.-0/21'&34$5361)7982-:'73!/36")
S_Inicial (&saldoInicial);
; < =!=#>?%>@'>(>)=A,B.C0D2E'@F4?5F6E)G9H2CIBJC'D2EKLC(<;
Proceso (saldoInicial, &saldoActual, &ingresos, &pagos);
; <MFN?OA,BPEKFQC'GO@0EBREK S'TVUXWY[Z\]0^!_9`aZb2c%d\Oef
Informe (saldoInicial, saldoActual, ingresos, pagos)
};
fe ghgighgighghgighgighghgighgighghgighgighghgighgighghgighgighghgighgighghgighgighghgighgighghgighgighghgighgighghgighgighghgighgighghgighgighghgighgighghgig
jlk6mn9o)pQkNqLoMksr2mLtuvnwwkQx'r2ymOo)pn9mn9ou9kQx{z|p}yymo)pV~[xMk!rkswk6o)p
h hihihhihihhihihhihihhihihhihihhihihhih hhihihhihihhihihhihihhihihhihihhihihh
void S_Inicial (float *inicial) {
printf ("Control de una cuenta corriente\n\n");
printf ("Opciones a introducir en cada caso\n");
printf ("i (Ingreso), p (Pago), f (Fin
programa)\n\n");
printf ("Introduzca saldo inicial ");
scanf ("%f",inicial)
};
's6)}
Departamento de Informática 23
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
!"$#%
&
'#% &
()!&*++,-+.#)0/1
02345627
8.#%&+
9:+;<+9.=>?=@=%AB91AC=:+DE+;F
D.=GAC=E<H7AF
DGAID&JAF(9:K)DE L&M
N NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
O P
void Proceso (float inicial, float *actual, int *pag, int
*ing) {
*ing = 0;
*pag = 0;
*actual = inicial;
Departamento de Informática 24
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
!
void Leer (char *tipo, float *cantidad) {
clrscr();
printf("i (ingreso); p (pago); f (fin) \n");
do {
scanf("%c",tipo);
} while ((*tipo!= 'i')&&(*tipo!='p')&&(*tipo!='f'));
if (*tipo != 'f') {
printf ("Cantidad a procesar \n");
scanf("%.0f",cantidad)
};
}; "$#&%('&'*)#+"
,- ..............................................................................
/1032457698;:<5>=?5
6A@B50245
6CD8FE0GCHICE25CJ603BE235@ KLNM7OQP7L?RSKSIKTUPKS
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV WX
void Actualizar ( char tipoOper, float cantidad, float
*actual, int *ing, int *pag ) {
switch (tipoOper) {
case 'i':
*actual = *actual + cantidad;
*ing =*ing + 1;
printf ("Ingreso la cantidad %.1f \n",cantidad);
printf ("Saldo actual : %.1f \f \n", *actual);
break;
case 'P':
*actual = *actual - cantidad;
*pag = *pag + 1;
printf ("Pago efectuado: %.0f \n",cantidad);
printf ("Saldo Actual : %.0f \n", *actual);
break;
default: printf ("Operacion %c no válida, ignorada\n"
, tipoOper);
};
};
if (*actual < 0)
printf ("Precaucion, descubierto en cuenta \n");
}; Y$Z&[]\J^$_J`Iacbedf`&gZ+Y
Departamento de Informática 25
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
El diagrama de estructura
La arquitectura de un programa representa la organización jerárquica entre
sus distintos componentes o módulos, es decir, representa la jerarquía de
control
m ó d u lo
m ó d u lo
b ib lio tec a
B C D B
o bte n e r
d atos
La comunicación entre módulos se representa clie nte
Departamento de Informática 26
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Composición de módulos
♦ Secuencia
Indica cuando un módulo llama a varios y esto A
♦ Iteración
A
Ocurre cuando se llama a los módulos
subordinados varias veces. El arco engloba a los
módulos implicados
B C D
♦ Decisión
A
Representa una elección del módulo superior
sobre el módulo subordinado al que llamará
B C D
♦ División de un diagrama 1
A
Estos símbolos se utilizan para descomponer un
diagrama en varios subconjuntos. Ayuda a D
clarificar el diagrama B C
♦ Almacén de datos 1
♦ Dispositivo Físico
Cualquier dispositivo por el que se puede recibir o
Dispositiv o
enviar información que necesite el sistema
Departamento de Informática 27
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Ejemplo 1
Sistema de gestión de pagos
Departamento de Informática 28
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Ejemplo 2
Sistema de gestión de notas de alumnos
G e s tió n
A lum no s
o pc i ó n po s
po s po s c o dO p
Departamento de Informática 29
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
• Acoplamiento
independientes
Objetivo: Reducir la complejidad de la Interfaz entre
• Cohesión
Regla de diseño:
Asegurar que los módulos tienen una buena cohesión es la
mejor manera de minimizar el acoplamiento
Departamento de Informática 30
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Clases de Acoplamiento
Normal Mejor
Por datos
Por estampado
Por control
Común
♦ Acoplamiento Normal A
• Por Datos
Acoplamiento normal donde solo hay un paso de parámetros sin estructura
interna (carácter, entero, real o tabla homogénea)
Bu s ca r
• Por estampado tra n sis to r
obte ne r
• Por control datos
transistor
Departamento de Informática 31
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
♦ Acoplamiento Común A B
• Por variables globales
x
x
Ocurre cuando varios módulos utilizan una misma
área de datos de ámbito global Ár ea d e
d ato s g lo b a l
Inconvenientes
• Un defecto en un módulo que utilice un área de datos global puede
transmitirse a otros que también la utilicen
• Limita la capacidad de los módulos al trabajar sobre datos con un
único nombre. Frente a esto, los parámetros pueden hacer
referencia a cualquier elemento de datos
• Puede ser difícil conocer qué módulo fue el que actualizó por última
vez el área de datos global
C lu ster
Por ejemplo al acceder a un área de datos muy Escribir Lee r
grande (array) o el acceso a un fichero. En este Transistor Transistor
caso se define un cluster que es un conjunto de
módulos que permiten el acceso al área de datos
Ar ea d e d a to s
global pero que ocultan al resto del sistema su
representación
Inconvenientes
• Lejanía entre la creación de un error y su posterior descubrimiento
• Los errores pueden transmitirse entre módulos
Departamento de Informática 32
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
x
B C
Cuando ocurre hay que descomponer el
módulo al que se accede o duplicar esa parte
de código en el módulo que realiza la llamada
♦ Datos vagabundos
• Son aquellos que pasan por la mayor parte de los módulos sin ser
usados por estos
Departamento de Informática 33
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Clases de Cohesión
1. Funcional
2. Secuencial Mejor
3. Comunicacional
4. Procedural
5. Temporal Cohesión débil
6. Lógica
7. Casual (Coincidental)
(peor mantenimiento)
♦ Cohesión Funcional
Los elementos del módulo contribuyen a la realización de una tarea única del
sistema. Ejemplo: RaizCuadrada, ActivarAlarma
♦ Cohesión Sencuencial
El módulo realiza diversas tareas de forma secuencial (importa el orden). La
salida de una tarea sirve de entrada para la siguiente. Ejemplo: Módulo que
lee un registro y valida los datos
Departamento de Informática 34
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
♦ Cohesión Procedural
clie nte
Ejemplos:
♦ Cohesión Temporal
Las tareas del módulo realizan actividades relacionadas en el tiempo. No
importa el orden de realización
Ejemplo:
Módulo GuardarInformación:
AbrirArchivoA, AbrirArchivoB, GuardarTransistores,
GuardarConfiguración, CerrarArchivoA, CerrarArchivoB
♦ Cohesión Lógica
Un módulo contiene diferentes taréas similares que son seleccionadas desde
fuera del módulo
Ejemplo:
CrearLista, ModificarElemento, InsertarElemento, etc.
Departamento de Informática 35
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
♦ Cohesión Casual
Las tareas del módulo no están relacionadas de forma significativa. Ocurre
cuando se intenta englobar un conjunto de instrucciones parecidas, que no
se van a ejecutar a la vez, dentro de un mismo módulo
Características:
• Difíciles de entender y mantener
• Los módulos que los utilizan deben utilizar datos de control totalmente
artificiales para seleccionar la parte que se desea utilizar
Ejemplo:
SuperMódulo (opcion,...)
En caso de que opcion valga
1: AbrirArchivo
2: CrearLista
3: Buscar Elemento en la Lista
4: Calcular el Factor de Amplificación del transistor
Fin_en_caso
Departamento de Informática 36
Metodología y Tecnología de la Programación II
Programación Estructurada. Diseño Modular
Eficiencia
Buen uso de los recursos de la máquina: CPU y memoria
Portabilidad
Facilidad para adaptar el software a diversas plataformas
Verificabilidad
Facilidad a la hora de soportar procedimentos de prueba
Integridad
Protección de los recursos propios frente a efectos externos
Facilidad de utilización
Interfaz de usuario clara y eficaz
Corrección (exactitud)
Realización de las tareas especificadas por el cliente
Robustez
Funcionamiento frente a situaciones anómalas
Extensibilidad
Facilidad de adaptarse a cambios
Reutilización
Volver a utilizar todo o en parte en otros productos
Compatibilidad
Facilidad para interaccionar con otros productos
Departamento de Informática 37