Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2008.04.30.tesis - Ingenieria Del Software
2008.04.30.tesis - Ingenieria Del Software
SEIT
CENTRO NACIONAL DE INVESTIGACION Y DESARROLLO TECNOLOGICO
DGIT
cenidet
GENERADOR DE CODIGO PARA LENGUAJE C UTILIZANDO UNA NOTACION DE DISEO DETALLADO
T
QUE PARA
E
E S
S
E
I
N T
S
A
C O M P UT A C I O N A L E S
P R
ALICIA
MARTINEZ
REBOLLAR
CUERNAVACA, MORELOS
AGOSTO DE 1997
RESUMEN
Este tema de tesis trata de resolver uno de los problemas que se presenta en el ciclo de vida del software: la falta de inters por parte de los desarrolladores en la fase de diseo detallado en el ciclo de vida del software[YOU92]. Este problema se intent resolver con un sistema de software que automatiza la etapa de diseo detallado, generando el cdigo acorde al diseo en el lenguaje de programacin C. Pretendiendo con esto, ahorrar tiempo en la etapa de diseo, ya que las revisiones y correcciones de un sistema de software sern mucho ms rpidas. La automatizacin de la fase de diseo detallado se realiz de una manera visual (se emple el paradigma de la programacin visual), formulando una gramtica posicional con los elementos de la notacin de diseo (se utiliz la metodologa Warnier), as como su implantacin en el lenguaje de programacin C para Windows. Los resultados que se obtuvieron fueron: 1. formulacin e implantacin de una gramtica posicional de la notacin de diseo detallado de Warnier. 2. construccin de un analizador sintctico y semntico de la gramtica, 3. el sistema permitir realizar diseos (que slo utilicen las construcciones bsicas de la notacin) sin conocer el lenguaje de programacin C. Adems de almacenar los diseos del usuario en disco. 5. el sistema permite generar cdigo en lenguaje C acorde al diseo detallado elaborado por el usuario. 4. el sistema cuenta con ayudas de hipertexto. [YOU92] Edward Yourdon Decline & Fall of American Programmer. 1992 by PTR Prentice Hall, inc.
A DIOS, por darme la vida... A mi MADRE a quien debo todo lo que soy... A mis hermanos por todo su apoyo... A mis cuados, por ser como son ... A mi sobrinos por sus risas y alegras... A mi esposo Hugo, porque eres todo lo que necesito para ser feliz, Gracias mi amor, TE AMO...
AGRADECIMIENTOS
A mi esposo Hugo Estrada Esquivel porque gracias a su apoyo y ayuda incondicional he logrado alcanzar esta meta. Agradezco a mi Asesor M.C. Mximo Lpez Snchez por su apoyo, orientacin y tiempo dedicado para lograr mucho ms de lo que nos propusimos, y sobre todo, por su amistad. Expreso mi ms sincero agradecimiento al Centro Nacional de Investigacin y Desarrollo Tecnolgico por darme la oportunidad de cursar mi maestra en computacin. Reconozco y agradezco el apoyo econmico brindado por (CONACYT) para lograr la terminacin de mis estudios de maestra. Agradezco al Dr. Javier Ortiz Hernndez por toda la ayuda y palabras de aliento que siempre me ha brindado, adems gracias por tu amistad. Agradezco al M.C. Ren Santaolaya Salgado y M.C. Olivia Fragoso Por la ayuda y orientacin brindada, y sobre todo por su amistad. Agradezco al grupo de Ingeniera de Software (Hugo Estrada, Carpio Tovilla, Leticia Santa Olalla, Eur Salgado, Teresa Cham (por tu gran ayuda en esta tesis), Carlos de la Cruz, Susana, Mirna, Liliana y Marco Aurelio) por los buenos y malos momentos, y sobre todas las cosas, gracias por que juntos hemos salido adelante. Agradezco a todos mis profesores del cenidet por sus conocimientos brindados. Agradezco a los profesores el Dr. Guillermo Rodrguez, al M.C. Felipe Alaniz y al Dr. Rodolfo Pazos Rangel y M.C. Mximo Lpez Snchez porque con sus comentarios y correcciones hicieron un mejor trabajo. Agradezco al M.C Manuel Jurez y al M.C. J. Luis Ramrez y Vernica Sotelo por su poyo, amistad y sobre todo, por ser como son. Agradezco a mis compaeros de generacin Hugo Estrada, Mario Flores, Vctor Garca, Eur Salgado, Zulma Snchez y William Zapata; a todos ellos, gracias por su amistad. Agradezco al grupo de bases de datos distribuidas (Anastacio, Jos Antonio, Miguel Mastache y Claudia Ibarra)
DEDICATORIAS
A DIOS Por darme la vida, permanecer siempre a mi lado y quererme tanto. Dedico este trabajo con todo mi amor y respeto a una gran mujer que toda la vida ha permanecido a mi lado, dndome todo lo mejor de ella: MI MADRE. Al recuerdo de mi padre, que est presente en todo momento. A MI ESPOSO Hugo Estrada Esquivel por ser todo mi mundo. Y con quien deseo compartir todos los momentos de mi vida. TE AMO. A MIS HERMANOS Mara del Rosario, Miguel Angel, Lucio y Ervin por su apoyo moral y econmico que me han brindado a lo largo de toda mi carrera. A MIS CUADOS Octavio y Celia por hacer tan felices a mis hermanos adems por ser como son. A MIS SOBRINOS Mayra, Daniela y Erick porque con su cario y alegra me han hecho muy feliz.
TABLA DE CONTENIDO
Lista de Figuras................................................................................................................ v
1 2 2 4 5 5 5 6 8 9 10 10 11 12 12 13 14 15 16 16 16 17 18 18 19 19 20 21 21 22 23 25
ii
iii
Referencias.................................................................................................................. Anexo 1. Cuestionario............................................................................................. Anexo 2. Reglas de produccin de la gramtica visual............................. Anexo 3. Diagrama de transicin de estados para la declaracin de una variable o un arreglo.................................................................... Anexo 4. Formato del archivo de diseo........................................................... Anexo 5. Demostracin de la ejecucin del GenCod....................................
iv
LISTA DE FIGURAS
No. Fig.
1.1 1.2 2.1 2.2 2.4 2.4 2.5 2.6 2.7 2.8 2.9 2.10 3.1 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16
Descripcin
Modelo de cascada del ciclo de vida del software Importancia del diseo Metodologas de diseo detallado ms conocidas Cuadro de frecuencia de las notaciones de diseo Metodologas de diseo ms utilizadas Uso de las metodologas de diseo entre los desarrolladores Construcciones en diagramas de flujo Estructuras bsicas del mtodo de Jackson Los tres smbolos grficos utilizados para dijar los diagramas de Nassi-Schneiderman Tabla visual de contenido para un paquete HIPO Simbologa utilizada para los diagramas de Warnier Construcciones bsicas de los diagramas de Warnier Una taxonoma de iconos Esquema conceptual por capas del AMASS-I Esquema conceptual del GenCod Principio de la organizacin jerrquica Tabla que muestra las modificaciones hechas a la notacin de diseode Warnier en la secuenciacin Tabla que muestra las modificaciones hechas a la notacin de diseo de Warnier en la bifurcacin. Tabla que muestra las modificaciones hechas a la notacin de diseo de Warnier en la repeticin Conjunto de smbolos no terminales Conjunto de smbolos terminales Tabla de smbolos grficos con su subndice asociado dependiendo del significado Ejemplo de una regla de produccin Estructura de datos del GenCod Modelo conceptual de los nodos de la lista de objetos Tabla de identificadores para el nmero de instrucciones Modelo conceptual de los nodos de la lista de variables Modelo conceptual de los nodos del arreglo de listas Autmata empleado en el GenCod
Pg.
3 6 13 13 14 15 17 18 19 20 21 22 28 35 36 38 39 40 41 43 44 44 46 51 51 52 54 55 56
4.17 4.18 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 5.21 5.22 5.23 5.24
Editor de un programa MDI Interfaz del GenCod Caja de dialogo que pide la informacin de una funcin del sistema GenCod Caja de dialogo que impide dar nombres inapropiados a las funciones Caja de dialogo que forza definir el tipo de una funcin Caja de dialogo de la declaracin de los parmetros de una funcin Cajas de dialogo para controlar el nombre y tipo de cada variable Ejemplo del anlisis en la insercin de un objeto en el diseo Ejemplo de un error en el anlisis con la insercin del objeto else Ejemplo de una funcin con tres funciones anidadas Coordenadas del primer objeto del diseo (a) Muestra la obtencin de las coordenadas de la izquierda de un objeto insertado despus de un objeto activo, (b) Muestra la obtencin de las coordenadas de arriba del mismo objeto Muestra la obtencin de las coordenadas abajo y derecha de un objeto insertado Muestra la insercin de un objeto en el mismo nivel de abstraccin Muestra la obtencin de las coordenadas de arriba de un objeto insertado en un nivel de abstraccin mayor Muestra la obtencin de las coordenadas de la izquierda de un objeto insertado en un nivel de abstraccin mayor Muestra la obtencin de las coordenadas de arriba del objeto while Muestra la obtencin de las coordenadas de arriba e izquierda del objeto scanf (a) Muestra la obtencin de las coordenadas de la izquierda del objeto scanf (b) Muestra la obtencin de las coordenadas de arriba del objeto Comparacin de las coordenadas obtenidas por el mouse contra los objetos que integran el diseo Insercin de un objeto despus de una funcin. Pantalla de comparacin de las coordenadas, para la insercin de un objeto Pantalla de comparacin de las coordenadas, para la insercin de un objeto Insercin de un objeto, despus de el objeto de terminacin de una sentencia Pantalla de comparacin de las coordenadas, para la insercin de un objeto Pantalla de la posicin elegida por el mouse para realizar la insercin de un objeto.
57 58 61 61 62 62 63 65 66 67 68 68 68 69 70 70 71 72 73 74 75 76 76 77 77 78
vi
5.25 5.26 5.27 5.28 5.29 5.30 5.31 5.32 5.33 5.34 5.35 5.36 5.37 5.38 5.39 5.40 5.41 6.1 6.2 6.3 6.4 6.5
Pantalla de comparacin de las coordenadas entre dos objetos 78 que se encuentran en el mismo nivel Pantalla de la insercin entre niveles (de mayor a menor abstracin) 79 Pantalla de comparacin de las coordenadas de la insercin entre niveles 80 Insercin de un objeto activo dentro de un diseo 80 Ubicacin del objeto activo ya insertado en el diseo 81 Ejemplo del ajuste de los objetos en el diseo detallado (externamente) 81 Ajuste de los objetos en el diseo detallado (internamente) 82 Modelo conceptual de los nodos de la lista temporal que sirve para realizar el ajuste de las coordenadas de objetos activos del diseo 83 Pantalla que muestra la eliminacin de objetos en el sistema GenCod 84 Pantalla que muestra la eliminacin del objeto if y la ubicacin de los objetos despus de la eliminacin 85 Pantalla que muestra la eliminacin del objeto fin de una sentencia y la ubicacin de los objetos despus de la eliminacin 85 El GenCod como un puente entre la etapa de diseo detallado y pruebas 86 Orden secuencial en el cual se recorren las estructuras de datos en el GenCod para la generacin de cdigo 87 Interfaz del GenCod que muestra la generacin de cdigo de dos funciones 88 Almacenamiento del archivo de diseo detallado del GenCod 89 Arquitectura del archivo de diseo 90 Navegacin entre las funciones de diseo 90 Informacin para calcular la medida de dispersin para el tiempo dedicado a desarrollar un sistema sin utilizar la herramienta Informacin para calcular la medida de dispersin para el tiempo dedicado a desarrollar un sistema utilizando la herramienta Informacin para calcular la medida de dispersin para el tiempo dedicado a desarrollar un sistema sin utilizar la herramienta Informacin para calcular la medida de dispersin para el tiempo dedicado a desarrollar un sistema utilizando la herramienta Resumen comparativo del tiempo utilizado en las cuatro pruebas 96 96 97 98 98
vii
CAPITULO 1
Captulo 1
Captulo 1
Modelizado a partir del ciclo convencional de una ingeniera, el paradigma del ciclo de vida abarca las siguientes actividades[PRE90]: Ingeniera del sistema. Debido a que el software es siempre parte de un sistema mayor, el trabajo comienza estableciendo los requisitos de todos los elementos del sistema y luego asignando algn subconjunto de estos requisitos al software. Anlisis. El proceso de recopilacin de los requisitos se centra e intensifica especialmente para el software. Para comprender la naturaleza de los programas que hay que construir, el ingeniero de software (analista) debe comprender el mbito de la informacin del software, as como la funcin, el rendimiento y las interfaces requeridos. Diseo. El diseo del software es realmente un proceso multipaso que se enfoca sobre cuatro atributos distintos del programa: la estructura de los datos, la arquitectura del software, el detalle procedimental y la caracterizacin de la interfaz. El proceso de diseo traduce los requisitos en una representacin del software que puede ser establecida de forma que se obtenga la calidad requerida antes de que comience la codificacin. Al igual que los requisitos, el diseo se documenta y forma parte de la configuracin del software.
Captulo 1
Codificacin. El diseo debe traducirse en una forma legible para la mquina. El paso de codificacin realiza esta tarea. Prueba. Una vez que se ha generado el cdigo, comienza la prueba del programa. La prueba se centra en la lgica interna del software, asegurando que todas las instrucciones se han probado, y en las funciones externas, realizando pruebas que aseguren que la entrada definida produce los resultados que realmente se requieren. Operacin. Algunos autores aaden esta fase en el modelo del ciclo de vida del software. En esta fase se identifican aciertos, en la medida en que los requerimientos de los programas de computadora satisfagan las necesidades del usuario, la arquitectura y los diseos se asocian a las caractersticas especficas del sistema de explotacin de cmputo, y en general la disciplina que haya sido empleada para la construccin del cdigo[GER85]. Mantenimiento. El software, indudablemente, sufrir cambios despus de que se entregue al cliente. Los cambios ocurrirn debido a que se hayan encontrado errores, a que el software deba adaptarse a cambios de entorno externo, o debido a que el cliente requiera ampliaciones funcionales o de rendimiento. Una vez que se ha analizado el ciclo de vida del software se hablar ms ampliamente de la fase de diseo.
Captulo 1
Diseo detallado: se refiere a detalles de: cmo empacar mdulos de procesamiento, y cmo
instrumentar los algoritmos, las estructuras de los datos y sus interconexiones. El diseo detallado est fuertemente influenciado por el lenguaje de implantacin, pero no es lo mismo que la instrumentacin, el diseo detallado tiene que ver ms con aspectos semnticos y menos con detalles sintcticos que es la instrumentacin, adems permite el diseo de algoritmos y representaciones de datos en un nivel ms alto de abstraccin y notacin que el que proporciona el lenguaje de implantacin, es decir el diseo de un algoritmo es susceptible a ser implantado en una amplia variedad de lenguajes de programacin. El diseo detallado separa las actividades de diseo a bajo nivel de instrumentacin, igual que las actividades de anlisis y diseo aslan las consideraciones de lo que se desea de la estructura que lograr los resultados deseados. Una especificacin adecuada de diseo detallado minimiza el nmero de sorpresas durante la instrumentacin del producto. A diferencia de Fairley, Pressman asienta el diseo de un programa en el diseo de datos, el diseo arquitectnico, el diseo procedimental y el diseo de la interfaz de usuario.
Diseo de datos: El diseo de datos es la primera (y de alguna forma podramos decir que la ms importante) de las tres actividades de diseo realizadas durante la ingeniera del software. El impacto de la estructura de datos sobre la estructura de programa y la complejidad procedimental, hace que el diseo de datos tenga una gran influencia en la calidad del software[PRE90]. En secciones posteriores se mostrarn algunas de las metodologas enfocadas a este tipo de diseo. Diseo arquitectnico: El objetivo principal del diseo arquitectnico es desarrollar una
estructura de programa modular y representar las relaciones de control entre los mdulos. Adems el diseo arquitectnico mezcla la estructura de programas y la estructura de datos y define las interfaces que facilitan el flujo de los datos a lo largo del programa [PRE90].
Diseo procedimental: El diseo procedimental se realiza despus de que se ha establecido la estructura del programa y de los datos. En un mundo ideal, la especificacin procedimental que define los detalles algortmicos debera explicarse en lenguaje natural. Desafortunadamente el diseo procedimental debe especificar los detalles de los procedimientos sin ambigedad y la falta de ambigedad en el lenguaje natural no es habitual. Por estas y muchas otras ms razones, se debe de usar una forma ms restringida para la representacin de los detalles procedimentales, las cuales se mostrarn en las secciones subsecuentes a este captulo. Este tipo de diseo es semejante o equivalente al diseo detallado del cual se habl anteriormente, slo que este autor lo denomina procedimental. Diseo de la intefaz de usuario: La interfaz del usuario es el mecanismo a travs del cual se establece un dilogo entre el programa y el humano. Tiene tanto que ver con el estudio de la gente como con aspectos de la tecnologa. Quin es el usuario? Cmo aprende el usuario a
5
Captulo 1
interaccionar con un sistema nuevo basado en computadora? Qu espera el usuario del sistema? Estas son slo unas pocas de las muchas preguntas que deben ser planteadas y respondidas como parte del diseo de la interfaz de usuario. Teniendo varios enfoques de la fase de diseo mencionaremos cul es la importancia que tiene ste dentro del ciclo de vida del software.
Sin diseo
En esta grfica se puede ver que el diseo es de primordial importancia para el desarrollo de cualquier sistema de software. Al igual que en las dems fases del ciclo de vida del software, en la etapa de diseo detallado se cuenta con un conjunto de herramientas que sirven para
Captulo 1
facilitar las distintas actividades asociadas con dicha etapa, a estas herramientas se les conoce como notaciones de diseo En este tema de tesis se plantea la construccin de un sistema de software que permita al usuario realizar la etapa de diseo detallado de una manera automatizada. En el capitulo 2 se analiza el por qu a pesar de que el diseo de sistemas tiene beneficios tan palpables, los desarrolladores no lo utilizan cotidianamente en el ciclo de desarrollo de sistemas. El GenCod se ide como una herramienta capaz de generar cdigo en el lenguaje de programacin C basndose en el diseo de un sistema. El reto de construir esta herramienta fue que el GenCod fuese tan fcil de utilizar que para los desarrolladores no lo vieran como un nuevo problema.
CAPITULO 2
Captulo 2
Captulo 2
Peor aun si no se utiliza formalismo y alguna metodologa para la realizacin del software, se continuar teniendo dependencia de los desarrolladores del software.
Captulo 2
La herramienta debe permitir realizar diseos (que slo utilicen las construciones bsicas de la notacin) sin conocer el lenguaje de programacin C. Adems de almacenar los diseos del usuario en disco.
10
Captulo 2
Se cuenta con un archivo de texto, donde se encuentra el cdigo generado por el sistema, de tal manera que este pueda ser utilizado posteriormente por el desarrollador si lo desea.
Una vez que se han visto algunos de los beneficios que aporta esta herramienta, se muestra a continuacin las investigaciones que se realizaron para saber cual es la notacin de diseo que se iba a implantar.
Captulo 2
h) 1 persona dijo que conoca la notacin de diseo de Bertini. Con estos resultados se puede ver claramente que las notaciones ms conocidas entre los programadores son: Warnier, Pseudocdigo y Flujo de datos. Para visualizar mejor esta informacin se construy la siguiente grfica de barras. La figura 2.1 muestra el comportamiento del cuestionario aplicado.
M e to d o lo g a s d e d is e o m s c o n o c id a s
25
20
15
10
Seudocdigo
Jackson
Con estos datos la figura 2.3 muestra un diagrama para representar la frecuencia de diseadores que eligi cierta notacin de diseo, en dnde la altura de cada barra representa el nmero de personas que eligi esa notacin, y cada una de las barras representa a la notacin.
12
Warnier
Yourdon
D. flujo
Bertini
Hipo
N-S
Captulo 2
M e to d o lo g a s d e d is e o m s u tiliz a d a s
1 2 1 0 8 6 4 2 0
Seudocdigo Warnier D. flujo
frecuencia * 100 N
N = sumatoria de todas las frecuencias. frecuencia = el nmero de personas que eligi cierta notacin. Aplicando esta ecuacin a cada uno de los datos que se encuentran en la figura 2.2 se obtuvo la muestra del ndice de utilizacin de las metodologas de diseo, aunque se debe recalcar que generalmente los desarrolladores no utilizan ninguna metodologa de diseo para desarrollar software, la siguiente grfica de la figura 2.4 muestra el porcentaje de utilizacin de las metodologas que ocasionalmente llegan a utilizar los desarrolladores.
Jackson
N-S
13
Captulo 2
Seudocdigo Warnier
14
Captulo 2
2.5.1 Pseudocdigo
Es un lenguaje chapurreado que utiliza el vocabulario de un lenguaje (p.ej.: ingls) y la sintaxis general de otro (p.ej.: un lenguaje de programacin estructurada) [CAI75]. A primera vista, el pseudocdigo se puede parecer a PASCAL o a Ada. La diferencia entre el pseudocdigo y un lenguaje de programacin de alto nivel se encuentra en el uso de texto descriptivo directamente dentro de las instrucciones del pseudocdigo. La desventaja que tiene esta notacin de diseo es que describe las instrucciones parecidas al lenguaje natural, y el diseo detallado debe especificar los detalles de los procedimientos sin ambigedad y la falta de ambigedad en un lenguaje natural no es habitual [PRE90].
15
Captulo 2
Tal vez la mejor razn para utilizar diagramas de flujo es que han sido utilizados histricamente. Quienes los han usado y han sido promovidos dentro de una compaa, con el tiempo llegan a entenderlos mejor que cualquier otra tcnica ms reciente.
Condicin
Siguiente tarea
Partethen
Secuencia
If-then-else
Tarea del bucle
F Parte del caso T Casos de condicin F T F Do-while Condicin del bucle T F T Repeat-Until
Repeticin Seleccin
Figura 2.5 Construcciones en diagramas de flujo.
16
Captulo 2
2.5.3 Jackson
Esta metodologa creada por el ingls Michael Jackson se basa en que la estructura de un programa est en funcin de la estructura de los datos que manipula. Jackson emplea mdulos segn su orden jerrquico dentro de los diferentes niveles donde se encuentra. Cada mdulo es un dato o un conjunto de datos [JOY88].
Con estas estructuras bsicas se puede obtener cualquier otra que intervenga en el diseo del programa. El uso del mtodo de Jackson supone lectura arriba-abajo y de izquierda a derecha.
N S e c u e n c ia l
R e p e t it iv a
A lte r n a tiv a
17
Captulo 2
Proceso
Decisin
Iteracin
Figura 2.7 Los tres smbolos grficos utilizados para dibujar los diagramas de Nassi-Schneiderman.
18
Captulo 2
PROCESO: est representado mediante un rectngulo y simboliza la inicializacin de variables, actividades de entrada y de salida y las llamadas para ejecutar otros procedimientos.
Un nombre descriptivo breve, escrito dentro del rectngulo, establece el propsito del proceso.
DECISION: el smbolo de decisin representa condiciones alternativas. Son equivalentes a las estructuras IF-THEN-ELSE. ITERACION: representa los ciclos y repeticiones de operaciones mientras se cumpla una condicin [KEN88].
Leyenda
.-.-.-..-.-.-..-.-.-.2 5 6 7
1 3 8 10 9 11 4 12
Contenido
1-.-.-.-.-.-. 6.-.-.-.-.2.-.-.-.-.-.- 7.-.-.-.-.3.-.-.-.-.-.- 8.-.-.-.-.4--.--.-.--- 9.---.-.-.5.-.-.-.-.-.- 10.-.-.-.-.
19
Captulo 2
2.5.6.1 Simbologa
A continuacin en la figura 2.9 se muestra un diagrama general de Warnier-Orr, as como el significado de los diferentes elementos que en l participan [SAN92].