Análisis Estructurado
Análisis de transacción
Consideraciones
Dependencia en
procesadores de transacción
Existen casos especiales donde el 
procesamiento y transmisión 
incorpora un proceso de decisión
estado-dependiente, el cual solo sucede
cuando la salida de una determinada
decisión depende neamente no de un 
solo dato de entrada, sino además de  
los valores ingresado con anterioridad
Procesamiento de transacciones
Estas tienden a ser muy semejantes 
a la mayoría de profesionales de EDP
La experiencia establece que dichos 
sistemas son mas eficientes y sencillos
de componer inicialmente, pero son mas
hostiles de modificar y poder mantener
en su posterioridad
Transacciones sintácticas 
y semánticas
Los elementos sintácticos son aquellos 
aspectos de procesamiento que se relacionan
a la forma en la que se manipula la transacción;
por otro lado tenemos el semántico el cual 
corresponde a las acciones resultantes de: 
el "que" y "el como"
Estrategias
Estas se componen por:
1. Identificar las fuentes de transacción
2. Especificación sobre la organización 
    centrada en la transacción apropiada
3. Identificar las transacciones y el modo
    por el cual están definidas
4. Poder identificar situaciones especificas
    por las cuales se puedan combinar los
    módulos
5. Para cada transacción o colección 
    especificar su respectivo módulo de 
    transacción para de esta manera poder
    procesarlo por completo
6. Para cada acción que se ejecute en una
    transacción, especificar un modulo de 
    detalle subordinado a algún modulo de
    acción que lo requiera 
7. Para cada paso de tallado en un modulo
    de acción, especificar un módulo de detalle
Centro de transacción
El centro de transacción se caracteriza 
principalmente por reconocer los DFD 
de la forma en la que se plantea y pre-
vialmente estos pueden mapearse como
una estructura en partícula
Una subestructura que se
encuentra por debajo del 
modulo de despacho y esta
puede ser modelada en un 
sistema de 4 niveles, los cuales
son los siguientes:
- Procesador de transacción (o nivel P)
- Nivel de transacción (o nivel T)
- Nivel de Acción (o nivel A)
- Nivel de Detalle (o nivel D)
Capacidades
Un sistema debe ser capaz de:
- Obtener o responder a las transacciones
  de forma "cruda"
- Analizar cada transacción para poder
  de esta manera definir su tipo 
- Despachar acorde al tipo de transacción
  que se realice
- Completar el procesamiento en cada una
  de sus respectivas transacciones
También poseemos algo que se
llama salidas y estas consisten en:
- Una versión de conversión o formateo de la 
  transacción entrante las cuales pueden ser 
  enviadas hacia arriba para de esta manera 
  poder alimentar los niveles superiores
- Usar una bandera como un indicador 
  para saber que al momento en el que entro
  la transacción esta fue valida
- Suministra formas de actualizar y/o modificar
  un elemento o elementos de la respectiva 
  base de datos independientemente de que 
  sean internos o externos
Subtopic
Análisis de transformación
Características principales
1. Plantear el problema a partir de un 
    diagrama de flujo de datos 
2. Identificar los elementos aferentes
    y eferentes
3. Factorizar el primer nivel
4. Factorizar las ramas aferente, eferente
    y de transmisión
Pasos para su realización
1. Obtención del diagrama de flujo de los
    datos del problema: Para ello habitualmente
    se emplea un diagrama de flujo de datos 
    conocido como (DFD) del sistema que se 
    esta desarrollando, es importante recalcar
    que un DFD no es un modelo porcentual, por
    lo general los diseñadores emplean el uso
    de entradas físicas para comenzar
2. Reconocimiento de los elementos de datos 
    Aferentes y Eferentes: Para este caso introducimos 
    los conceptos de flujo de datos aferente y eferente
    Los datos aferentes son aquellos elementos que
    representan datos de alto nivel que una vez son 
    removidos de sus respectivas entradas físicas
    todavía entran en consideración para la entrada de 
    un sistema
3. Factorización del primer nivel: Una vez identificados 
    los elementos aferentes y eferentes del sistema, 
    proseguimos a especificar el modulo principal, el cual
    una vez activado, se encargara de realizar todas
    las tareas del sistema invocado a sus subordinados
4. Factorización de los flujos Aferentes, Eferentes 
    y de transformación: Tras implementar distintas 
    estrategias comúnmente son usadas para 
    factorizar los tres tipos de módulos en módulos
    de bajo nivel. Por ende no existe una razón 
    particular para ser selectivo por el módulo que se 
    quiera implementar inicialmente
5. Desviaciones: Esa se encarga de asumir la ortodoxa 
    en la cual el flujo de datos es entrante y saliente 
    en cualquiera de sus ramas, por lo general se espera
    que los módulos aferentes tengan un solo 
    subordinado aferente y de transformación
6. Como finalizar la factorización: Para esta ultima etapa
    son varios los criterios que pueden llegar a implementarse
    o utilizar cuando la factorización funcional de los módulos
    debe terminarse. El principal fin de esta etapa es que pueda
    alcanzarse, a diferencia de una transformación sabiendo
    que para ella es mas difícil distinguir las subtareas
Empaquetamiento 
(Paking)
Analisis procedural
Definición
Este se caracteriza principalmente por se un conjunto 
de criterios que se implementan con el fin de determinar 
que módulos deben permanecer a la misma unidad de carga
en pro de maximizar la eficiencia.
Es importante aclarar que no existen una reglas previamente
determinadas para realizar un empaquetado de módulos 
en unidades de carga, será propiamente el criterio del 
diseñador el que deberá tomar la decisión sobre como se 
compongan las unidades de carga.
Caracteristicas
Iteraciones
Estas deben incluirse obligatoriamente
en la misma unidad de carga de los módulos 
conectados mediante referencias iterativas o
también llamadas loops. 
Se estipula que siempre que sea posible, debe 
incluirse en la misma unidad de carga al 
módulo referenciado y al referenciante.
Volumen
Esta característica menciona que debe incluirse
en la misma unidad de carga los módulos con 
alto volumen de referencias de conexión 
propiamente entre ellos. 
Para realizar esto como primera acción debe 
estimarse la cantidad de veces que un módulo 
invocará a otro durante su ejecución
Frecuencia
Cuando hablamos de frecuencia de referencia nos 
referimos explícitamente a que es un criterio observable,
por ende la regla de pensamiento es que los módulos 
relacionados por referencias altamente frecuentes deben 
ubicarse en la misma unidad de carga a su vez que debe
observarse que las invocaciones condicionales reducen la
frecuencia de invocación
Intervalo
Para los intervalos se deben incluir en la misma unidad de carga los módulos con intervalos que sean cortos y breves en cuestión de tiempo entre activaciones.
También podemos observar que existen situaciones particulares donde será deseable que dos módulos no pertenezcan a la misma unidad de carga.
Estos criterios los definimos como:
Funciones Opcionales
Debe ubicarse obligatoriamente 
en una unidad de carga por 
separado cualquier función que 
este definida como opcional
Funciones por única vez
Estas deben ubicarse en
una unidad de carga por separado
de las funciones que se utilicen
una única vez en el sistema
Sorts
Se ubican en los módulos 
aplicados a la entrada y 
salida de un proceso sorts
en unidades de carga 
que se encuentra 
separadas
Optimización
La optimización posee diferentes 
enfoques y características,
 entre ellas encontramos:
Filosofías de optimización
La eficiencia de un sistema depende
depende completamente de la 
competencia del diseñador, en la 
mayoría de los casos el camino
mas simple es el mas eficiente
En ellos encontramos los
Sistemas Modulares Simples que pueden
ser optimizados con facilidad, el énfasis principal
de la optimización va dirigido a los objetivos 
del diseñador y por ultimo es importante recalcar
que la optimización es irrelevante si el programa
no funciona correctamente
Enfoque para la optimización
 de módulos
Existen dos enfoques para la optimización
de un sistema
Optimizar el código dentro de los módulos
Modificar la estructura del sistema
para mejorar su performance
Esquema general
Un esquema general consta de los siguientes
pasos
1.
Determina el tiempo de ejecución 
para cada uno de los módulos
o unidades de carga, para ello
se implementan monitores
de hardware y paquetes
para la medición de performance
2.
Examinar cada modulo
para así poder estimar
su potencial mejora.
Esto implica un proceso
de estimación y depende
precisamente del conocimiento
y la experiencia del programador
en el lenguaje, sistema operativo
y hardware
3. 
Estima el costo que involucra
cada mejora, esto encapsula 
el salario del programador o
analista, tiempo de computador,
y otros costos que van variando 
en la producción de una versión
mejor optimizada del sistema
4. 
Establece prioridades para realizar
las determinadas mejoras
Estas mejoras podemos establecerlas
como prioridad Pi mediante la siguiente
expresión:
Pi = A * li * Ti - B * Ci
Donde A y B son factores de peso
apropiado
5.
Optimizar los módulos con 
mayor prioridad
Cambios de estructuración
que garanticen eficiencia
Macro o código 
incluido lexicográficamente
Antes de llevar a cabo alguna modificación 
en la estructura actual, el diseñador debe
ser consiente de pensar en la posibilidad 
de cambiar el tipo de modulo preservando
su respectiva estructura.
El programador debe recordar que los macros 
(rutinas lexicográficamente incluidas en el 
cuerpo del modulo) y subrutinas representa 
el compromiso entre el tiempo de ejecución
y los requerimientos de la memoria.
Estructura Panqueque
Como regla general se entiende que las estructuras
que poseen una mayor profundidad( hacemos referencia
a niveles cuando hablamos de profundidad) tienen
a menudo una gran sobrecarga debido a los procedimientos
que invocaron intramedulares.
Sin embargo existe una gran cantidad de excepciones a esta
regla que no siempre puede ser aplicada con seguridad
Compresión
Esta es la mas ubicua de todas las manipulaciones
estructurales para mejorar la eficiencia, por ende
se conoce comúnmente como "desmodularización" 
ya que consiste esencialmente en comprimir todo
o parte de un modulo en otro.
Para representar el caso mas simple donde esto 
ocurre es a través de la inclusión lexicográfica
de un modulo en otro
