CONOCIMIENTO TECNOLÓGICO:

Anuncio
CONOCIMIENTO TECNOLÓGICO:
EL CASO DE LA INGENIERÍA DEL SOFTWARE1
Rodolfo Fernández González
Dpto. Lógica UCM
En los últimos años, el tema de la realidad virtual ha atraído una considerable atención,
tanto por parte del público interesado en las novedades tecnológicas, como de algunos
intelectuales preocupados por el impacto social y cultural que esta tecnología puede tener2.
Pero en todas las discusiones al respecto se ha pasado por alto el hecho de que la realidad
virtual no es sino la conversión en espectáculo de una tarea que siempre ha estado
asociada al núcleo de la tecnología de la información, la ingeniería de software. Dicha tarea
es requerida para el desarrollo de cualquier sistema informático, hasta tal punto que cabe
caracterizar el tipo de conocimiento requerido por la ingeniería del software no como un
saber-cómo (know-how), sino como un saber-que (know-that). Según la opinión más
común3, el saber tecnológico4 es un saber-cómo. Me interesa explorar aquí la consideración
de las tecnologías de la información, y más específicamente de la ingeniería del software,
como una actividad en cuyo núcleo se requiere la explícita construcción ad-hoc de un saberque. Esta consideración ha sido adelantada por Naur5, en el sentido de que la ingeniería de
software parece exigir una modelización -un saber-que- del proceso de computación,
dependiente del objetivo que se pretende alcanzar. En esta nota trato de llevar más allá esta
perspectiva, destacando el hecho de que esta modelización implica también la construcción,
en el uso de la tecnología, de un saber-que relativo a las entidades del dominio del
problema, que, en los últimos años, se tiende a hacer lo más independiente posible del
propósito para el que se desarrolla una aplicación determinada.
1
Esta trabajo se preparó para el Simposio de Filosofía de la Técnica: Mundos Virtuales realizado en
Salamanca, el 18 de Febrero de 1998
2
3
4
Ver, por ejemplo, [Wooley 1994].
Ver, por ejemplo, Jarvie, l. C. (1983).
En lo que sigue, supondremos que una "destreza" (skill) es una estrategia de solución de problemas
que los individuos aprenden mediante una actividad informal de prueba y error para la ejecución de
tareas cotidianas. Una "técnica" de resolución de problemas en un dominio dado es una destreza que
el individuo adquiere, mediante una actividad formal de enseñanza/aprendizaje, bajo la forma de un
con- junto de reglas obtenidas empíricamente (expertise). En este sentido, una técnica no es sino una
extensión de los sentidos, y de las destrezas, naturales- Shallis, M. (1991), p. 26.-, que en ocasiones
se materializa en "artefactos"- Skolimowski, H. (1966), p. 44.-. Una "tecnología" es una técnica que
incluye en el conjunto de reglas que la codifican, y en el diseño y desarrollo de los artefactos que la
materializan, partes relevantes del conocimiento científico disponible. Sobre la naturaleza de la
tecnología y su relación con la teoría científica, ver Feibleman, J. K. (1961), Bunge, M. (1966),
Mosterín, J. (1978), Quintanilla, M. A. (1979).
5
Ver Naur, P. (1985).
1
1. Ingeniería de Software como saber-cómo
Bajo la etiqueta de "tecnologías de la información" nos referimos normalmente a tecnologías
de tres tipos distintos:
a) Las tecnologías del hardware, que nos pernliten diseñar y construir dispositivos
electrónicos -computadoras digitales u "ordenadores"- para representar
electrónicamente, almacenar y manipular información.
b) Las tecnologías de la comunicación, que nos permiten diseñar y construir
sistemas de transmisión de la información entre puntos arbitrariamente separados en
el espacio.
c) La ingeniería del software, que nos permite diseñar y desarrollar algoritmos,
inteligibles para los ordenadores, con el objetivo de facilitar al máximo la
manipulación de la información, intentando, a la vez, que dicha manipulación se
realice de la forma más eficiente posible.
La ingeniería de software, en tanto que saber-cómo, se codifica bajo la forma de un "ciclo de
vida". Este no es más que un registro que indica a los analistas y programadores cuáles son
las tareas que han de llevar a cabo, y en qué orden. Habitualmente, tenemos en un ciclo de
vida las siguientes tareas:
•
•
•
•
•
•
•
Análisis de requerimientos -funcionales y no funcionales-.
Análisis funcional, que constituye una definición o especificación detallada de las
estructuras en las que se organizarán los datos que hay que manipular, así como los
algoritmos que han de ejecutar las manipulaciones de datos requeridas, teniendo en
cuenta, asimismo, algunas de las especificaciones no funcionales. Se definen las
arquitecturas funcionales y de flujo de datos, y se construyen algunos prototipos o
maquetas tanto de los procesos a ejecutar como de los interfaces de usuario.
Diseño técnico, en el que el análisis funcional se ajusta a las plataformas hardware y
software elegidas. Asimismo, en esta fase se elabora la arquitectura software del
sistema, identificando módulos y programas, y se ponen a punto baterías de
pruebas.
Codificación o construcción de programas en el lenguaje de programación elegido - o
requerido- para la aplicación.
Pruebas unitarias, en las que se revisa el funcionamiento de cada programa o
módulo por separado.
Integración y pruebas integradas.
Validación del sistema por parte de los expertos en el dominio del problema y de los
usuarios de la aplicación.
Cada una de estas fases incluye, asimismo, tareas de generación de documentos, y puede
dar lugar a revisiones de fases anteriores, y a repeticiones parciales del ciclo. Además,
normalmente se llevan a cabo otras tareas, también incluidas en el ciclo de vida, pero cuyo
papel en el desarrollo es menos directo:
2
•
•
•
•
•
Planificación del proyecto, incluyendo una especificación de la estrategia de gestión
y control del proyecto y, especialmente, de los recursos humanos y de tiempo
disponibles.
Constitución y entrenamiento del equipo de proyecto.
Determinación de plataformas hardware y herramientas software
Implantación del sistema desarrollado en el entorno de trabajo piloto o final. Esta
fase suele incluir actividades de entrenamiento de los usuarios.
Mantenimiento de la aplicación a lo largo de su vida útil, lo que suele incluir
correcciones, modificaciones, ampliaciones, etc.
Cada una de las actividades y tareas del ciclo de vida está regulada por conjuntos de reglas
heurísticas que tratan de garantizar que el resultado final de cada proyecto se ajuste a los
requerimientos especificados inicialmente. Estas reglas se codifican en distintas
metodologías de análisis, programación y pruebas6.
2. La ingeniería de software como saber-que: Modelización del proceso de
computación
Lo que hace de estas actividades una tecnología, y no simplemente una técnica, en el
sentido especificado anteriormente, es el uso reiterado que en ellas se hace de notacio- nes
simbólicas o lenguajes formales, y de mecanismos computacionales, deductivos y
algoritmicos asociados a dichas notaciones o lenguajes. El complejo formado por estos
lenguajes y mecanismos es objeto de estudio por parte de distintas disciplinas matemáticas
(teoría de autómatas y lenguajes formales, algoritmética, lógica), con el propósito de
establecer las propiedades matemáticas de las correspondientes teorías formales. Dichos
resultados matemáticos ilustran distintos aspectos de las actividades de computación, y
constituyen una reconstrucción formal de las mismas7.
Pero el núcleo crítico de conocimiento requerido para la puesta a punto de métodos
computacionales de resolución de problemas no consiste en la aplicación de las reglas
heurísticas a las que me he referido en la sección anterior, sino en una destreza mucho más
elusiva, y difícilmente codificable, la destreza de modelización, normalmente ligada a las
actividades de análisis funcional y diseño técnico del ciclo de vida. Modelizar consiste en
identificar partes y aspectos relevantes del dominio del problema, del mundo real, que
puedan ser representados simbólicamente, de forma que esta representación pueda ser
organizada en estructuras y procesos manipulables computacionalmente para obtener la
solución requerida por el problema planteado. Aunque tradicionalmente el concepto de
modelo ha estado vinculado a las actividades de simulación computacional8, Naur ha
señalado recientemente que el producto cognitivo que constituye el núcleo de cualquier
actividad de análisis y diseño es, en realidad, un modelo del proceso de computación que
6
Algunas de las más conocidas son, en el ámbito del análisis y la programación
estructurada, [DeMarco, 1979], [Yourdon, 1979], [Jackson, 1983], [Yourdon, 1989], y en el
ámbito del análisis y la programación orientada a objetos, [Cox, 1986], [Coad, 1990],
[Rumbaugh, 1991], [Booch, 1991].
7
8
Ver [Naur, 1990], especialmente las secciones 4 y 5.
Sigue siendo de gran interés el tratamiento teórico de la modelización presentado en el
clásico [Zeigler, 1976].
3
resuelve el problema planteado en la especificación de requerimientos9. Más exactamente,
Naur nos dice que lo que elabora el analista es una teoría acerca del proceso computacional
en cuestión. En este mismo sentido, pero de forma quizás más indirecta, afirmaba Shallis
hace algún tiempo que estas tecnologías de la información pertenecen a una familia de
tecnologías que no se limitan a aumentar la potencia de las facultades humanas, sino que,
además, reflejan ideas o abstracciones. Así como el reloj es un modelo autónomo del
decurso temporal, basado en un modelo previo del movimiento planetario, el ordenador
"modela la noción de racionalidad pura, la visión ideal que el hombre tiene de su propia
inteligencia”10.
El concepto de teoría que Naur trae explícitamente a colación es el de Ryle11 al que me
hemos referido más arriba. Una persona que tiene una teoría en este sentido sabe cómo
hacer determinadas cosas y, además, puede justificar y explicar lo que hace. El analista,
desde esta perspectiva12, construye una hipótesis acerca del proceso computacional que, en
su opinión resolverá el problema especificado. El modelo de análisis será refinado y
completado operacionalmente en la fase de diseño, y transformado en un programa
ejecutable en la fase de codificación. Todo en este proceso, y desde la perspectiva que
considera al programa como una teoría, nos recuerda la clásica postulación de la
contrastación de una hipótesis teórica mediante la comparación de sus consecuencias
observacionales (en este caso, los resultados de la ejecución del programa) con los datos
recogidos en el dominio del problema de forma independiente (especificados en este caso
bajo la forma de un protocolo de pruebas que incluya condiciones límites de resolución del
problema). Es en este sentido en el que podemos afirmar que el núcleo de la ingeniería del
software lo constituye una actividad de teorización o modelización, un saber-que.
Es importante reparar en el hecho de que esta observación de Naur cubre absolutamente
todas las actividades de computación, y no sólo aquéllas que explícitamente se reclaman
como intentos de construcción de modelos computacionales como hipótesis teóricas en un
campo determinado13. Lo que en cada caso se trata, cuando se diseña una aplicación
informática, no es tanto de averiguar cuál es el proceso computacional que resuelve el
problema planteado, sino de encontrar -o construir- uno que lo resuelva con la eficiencia
requerida. Se da por supuesto, en cada caso, que el problema es computacionalmente
soluble y que, dada su complejidad, es un problema tratable. Pero ésta es toda la base
teórica disponible. No obstante, en los últimos años se han llevado a cabo algunos intentos
por incorporar a la tecnología, de forma normalizada, partes de ese conocimiento específico
especialmente relevantes para la modelización computacional, los llamados modelos
genéricos14.
Un modelo genérico es un método computacional de resolución de problemas de una clase
dada, que representa una racionalización del comportamiento de solución de problemas que
exhiben los expertos que solucionan problemas de esa clase. Cada tipo de problema
(diagnóstico, planificación, predicción, diseño, etc.) tiene un modelo distinto. Cada modelo
genérico proporciona al modelizador, conocimiento de tres tipos distintos:
9
Ver [Naur ,1985, 37-39].
Shallis, M. (1991), p. 31.
10
11
12
Ver Ryle, G. (1949).
Que Naur denomina la Theory Building View. ibid., p. 41.
13
Por ejemplo, en el caso de las ciencias cognitivas. Ver [Femández, 1981], [Fernández,
1984].
14
O "modelo de conocimiento experto". Ver [Breuker, 1994]. El concepto guarda una
estrecha relación con el de "tarea genérica" recogido en [Chandrasekaran, 1987].
4
a) Conocimiento de la tarea, que nos dice cómo se descompone recursivamente la tarea en
subtareas, cuáles son los objetivos de cada una de ellas, y cómo se ordenan entre sí
(control).
b) Conocimiento inferencial, que especifica cuáles son los tipos de razonamiento básicos
-entendiendo por tal el repertorio de las operaciones primitivas que se ejecutan sobre los
datos-, cuál es el tipo de conocimiento del dominio utilizado en cada tipo de inferencia
requerido (knowledge role), y cómo se articulan entre sí los distintos tipos de
razonamiento (estructura inferencial).
c) Además, el modelo genérico puede, y debe incluir metaconocimiento, es decir, una
justificación del modelo que incluye una guía para la estructuración de un dominio,
estrategias de ajuste de las soluciones genéricas a las situaciones específicas, y
métodos genéricos de solución de problemas.
Por otro lado, todo modelo genérico incluye una determinada categorización o conceptualización del dominio del problema, a la que se suele dar el nombre de "ontología".
Dado que su papel es relevante para mi argumento en tomo a la naturaleza de la ingeniería
de software como un conocimiento del tipo saber-que, dedicaré la siguiente sección a
examinarla brevemente.
3. Modelización de las entidades del dominio del problema: Ontologías
Aunque, explícitamente, parece como si Naur sólo hablara del aspecto procedural de la
modelización computacional, no se puede entender ésta sin tener en cuenta eso que
tradicionalmente se ha llamado el "modelo de datos". Evidentemente, para resolver
computacionalmente un problema, no sólo se requiere una adecuada implementación del
algoritmo, sino también una adecuada representación de los datos sobre los que el
algoritmo se aplica15. Las dos técnicas de modelización más relevantes de este componente
no-procedural del modelo computacional son el modelo entidad-relación del paradigma
relacional16, y el modelo de objetos del paradigma de la orientación a objetos17. En ambos
casos, los datos se modelizan teniendo en cuenta los procesos que han de ejecutarse sobre
ellos, por lo que resulta determinante el manteniento, durante el diseño de dicho modelo, de
la perspectiva funcional, esto es, qué es lo que el diseñador quiere hacer con el sistema que
está diseñando. De ello se infiere que la conceptualización de un mismo dominio puede
cambiar en función de cuál sea el propósito del sistema que estamos diseñando.
En los últimos años se ha producido un cambio importante en este aspecto, impuesto
también por el requerimiento general de la eficiencia tecnológica, especificado en este caso
como el requerimiento de reusabilidad, que ha encontrado su fuerza en el paradigma de la
orientación a objetos. Al igual que existen librerías de algoritmos que un diseñador puede
utilizar como ladrillos o piezas básicas de su aplicación, puede disponerse de librerías de
15
Así, Wirth ha sintetizado 10 que es la informática diciendo que se trata de "algoritmo s +
datos".
16
17
Ver [Date, 1986].
Ver [Rumbaugh, 1991]
5
categorizaciones de dominios, que podrían utilizarse en muchas aplicaciones distintas. Cada
una de estas librerías recibe el nombre de ontología.
Una ontología es el conjunto de entidades o tipos naturales de un dominio o de una
determinada perspectiva sobre dicho dominio. En el sentido en que aquí empleamos el
término, una ontología es, como dice Gruber18, una especificación explícita de una
conceptualización. A su vez, ésta no es sino una visión abstracta o simplificada del mundo,
que se expresa en una ontología como un vocabulario representacional que podemos
utilizar para referirnos a las entidades de un universo dado (clases, relaciones, funciones,
etc.). Cada término de ese vocabulario va asociado a una definición. Pero a diferencia de lo
que sucede con una entrada de un diccionario de datos o una especificación de una clase
de objetos, cada definición "informal" va acompañada, en el caso de una ontología, de un
conjunto de axiomas que restringen las interpretaciones posibles de los términos. En ese
sentido, dice Gruber que establecer una ontología equivale a "formular una teoría lógica”19.
Lo más llamativo de una ontología, desde el punto de vista de nuestra tarea de
caracterización del tipo de conocimiento tecnológico asociado con la ingeniería del software,
es que, a pesar de que Gruber manifiesta que el criterio fundamental para el diseño de una
ontología es el impuesto por "el propósito del artefacto resultante", esto es, por el objetivo de
la aplicación, y no por ninguna "noción a priori de naturalidad o Verdad", en su posterior
definición de las condiciones que ha de cumplir toda ontología, este criterio básico pierde
fuerza.
Efectivamente, para Gruber, toda ontología de este tipo ha de ser clara, coherente,
monótonamente extendible; y su sesgo representacional, y su compromiso ontológico,
deben ser mínimos. Pero las exigencias de extensibilidad monótona y de minimización del
compromiso ontológico, que han de permitir que una ontología pueda ser utilizada para un
rango dado de aplicaciones potenciales, que extiendan y especialicen la ontología en la
forma en que se requiera en cada aplicación, llevan a Gruber a concluir que esa ontología
ha de ser formulada como la teoría más débil, en el sentido de que sea la teoría que permita
el mayor número de modelos posibles. Inevitablemente, ello debilita el punto de vista
funcional proclamado al principio como fundamental, lo que queda de relieve en la propia
afirmación de Gruber de que lo que distingue básicamente a una ontología de una base de
conocimiento es que esta última "puede incluir el conocimiento necesario para resolver un
problema o para responder preguntas sobre un dominio", mientras que la ontología se limita
a describir un vocabulario útil para hablar acerca de ese dominio. Pero esto supone, de
hecho, defender que esa separación de la perspectiva funcional es efectivamente posible
cuando se describe un dominio o, lo que es lo mismo, que se puede adoptar, en la
descripción de éste, un punto de vista privilegiado, desde el que la aplicación del
conocimiento se pone entre paréntesis. Dicha postura se ha encarnado, efectivamente, en la
elaboración de una ontología "genérica" o "formal", concebida como un corpus de
"distinciones a priori" sancionadas filosófica y lógicamente20.
Sin entrar a considerar la validez del aserto de la independencia funcional -mi impresión es
que en la modelización computacional es imposible proceder así21- , la consecuencia de la
18
19
20
21
Ver [Gruber, 1993], [Gruber, 1993a].
[Gruber, 1993a], p.2
Ver [Guarino, 1993a], [Gruber, 1991] , [Cocchiarella, 1991].
En un reciente proyecto (Ver [CARES, 1997]) hemos podido comprobar que el hecho de
que el modelo de objetos (en este caso, un modelo del lenguaje Ensamblador del IBM 370)
preceda a una adecuada especificación de las funcionalidades del sistema a desarrollar (en
este caso, un sistema de ayuda a la modificación extensiva y al mantenimiento de grandes
6
proliferación cada vez mayor de librerías de clases, y de ontologías, en la ingeniería del
software, es un hecho que pone de relieve, más claramente que en la formulación de Naur,
que, en la naturaleza de esta tecnología se encuentra un tipo de conocimiento que no es un
mero know-how, sino un know-that. Evidentemente, puesto que la aplicación de la
tecnología exige la adopción de determinadas decisiones acerca de qué herramientas
-medios de desarrollo, algoritmos, ontologías, etc.- utilizar, en qué grado, en qué
combinación, etc, el resultado final es, como en el caso de cualquier otra tecnología, un
saber-cómo, aunque en este caso, se requiere la realización de una tarea de modelización
que resulta en un saber-que. Lo que podríamos planteamos a partir de aquí es si este saberque, y cualquier otro -típicamente, el conocimiento científico-, es, o no, funcionalmente
independiente. Pero ésta es otra cuestión.
Referencias
[Allen,1991] Allen, J., Fikes, R., Sandewall, E. (eds.), PrincipIes of Knowledge
Representation and Reasoning, M. Kaufmann, 1991.
[Booch,1991] Booch, G., Object-oriented Design, Benjamin/ Cummings, 1991.
[Breuker, 1994] Breuker, J., Van de Velde, W., CommonKADS Library for Expertise
Modelling, lOS Press, 1994.
[Bunge, 1966] Bunge, M., "Technology as Applied Science", Technology and Culture, 7, 329347, 1966.
[Burkhardt,1991] Burkhardt, H., Smith, B. (eds.), Handbook of Metaphysics and Ontology,
Philosophia V., 1991.
[CARES, 1997] CARES Final Report, Esprit 20344. INDRA/ IBERlA / University of Limerick,
1997.
[Chandrasekaran, 1987] Chandrasekaran, B., "Towards a functional architecture for
intelligence based on generic information processing tasks", en Procs. of the 10th lnt. J Conf.
on Al, Milano, 1183-1192, 1987.
[Cox,1986] Cox, B. J., Object-oriented Programming, Addison-Wesley, 1986.
[Coad,1990] Coad, P., Yourdon, E., Object-oriented Analysis, Yourdon Press, 1990.
[Cochiarella, 1991] Cochiarella, N. B., "Formal Ontology", en [Burkhardt, 1991]. [Date, 1986]
Date, C. J., An Introduction to Database Systems, Addison-Wesley,1986.
[DeMarco, 1979] DeMarco, T., Structured Analysis and System Specification, Prentice Hall,
1979.
[Feibleman, 1961] Feibleman, J. K., "Pure Science, Applied Science, and Technology", en
Technology and Culture, ll, 4, 1961. Incluido en [Mitcham, 1983,33- 41].
[Femández, 1981] Femández, R., "Notas para la discusión en tomo a la consideración de los
programas de ordenador como teorías", en [Jáñez, 1981], 10-24.
[Femández, 1984] Femández, R., "Autómatas como modelos teóricos", en Actas I Simposio
Hispano-Mexicano de Filosofía, Edic. Universidad de Salamanca, Vol. I,334-356, 1984.
aplicaciones programadas en ese lenguaje) dificulta considerablemente la especificación e
implementación de procedimientos de explotación de los datos, aun siendo aparentemente
este dominio –el del análisis estático de programas- un dominio extremadamente neutro
respecto a posibles interpretaciones.
7
[Gruber,1991] Gruber, T. R., "The role of common ontology in achieving shareable, reusable
knowledge bases", en [Allen, 1991],601-602.
[Gruber,1993] Gruber, T. R., "A Translation Approach to Portable Ontology Specification", en
Knowledge Acquisition, 5 (2), 199-220, 1993.
[Gruber,1993a] Gruber, T. R., "Toward Principies for fue Design of Ontologies Used for
Knowledge Sharing", Technical Report KSL 93-04, Knowledge Systems Laboratory,
Standford University, 1993.
[Guarino, 1993] Guarino, N., Poli, R. (eds.), Formal Ontology in Conceptual Analysis and
Knowledge Representation. Workshop Preprints, 17-19 Marzo 1993. LADSEB-CNR Int. Rep.
01/93.
[Guarino, 1993a] Guarino, N., Boldrin, L., "Concepts and Relations", en [Guarino, 1993].
[Jackson, 1983] Jackson, M. A., System Development, Prentice Hall Int., 1983.
[Jáñez, 1981] Jáñez, L. (ed.), Simulación en Psicología, Publ. del Dpto. de Psicología
Matemática, UCM, 1981.
[Jarvie, 1983] Jarvie, l. C., "Technology and fue Structure of Knowledge", en [Mitcham,
1983,54-61]. Revisión de la primera versión de 1967.
[Knuth, 1968, 1973] Knuth, D. E. The Art of Computer Programming, Addison- Wesley, 1968,
1973,
[Mitcham,1983] Mitcham, C, Mackey, R. (eds.), Philosophy and Technology, The Free Press,
1983.
[Mosterín, 1978] Mosterín, J., Racionalidad y Acción Humana, Alianza, 1978.
[Naur, 1985] Naur, P., "Programming as theory building", Microprocessing and
Microprogramming, 15, pp. 253-261, 1985. Recogido en [Naur, 1992,37- 49].
[Naur, 1990] Naur, P., "Computing and the so-called foundations of the so-called sciences",
Informatics Curricula for the 1990s, IFIP Working Group 3.2 Workshop, Providence, Rhode
Island. April 6, 1990. Recogido en [Naur, 1992,49-63].
[Naur, 1992] Naur, P., Computing: A Human Activity, ACM Press, 1992. [Quintanilla, 1979]
Quintanilla, M. A., "El problema de la racionalidad tecnológica", 107-131, (1979).
[Rochlin, 1997] Rochlin, G. l., Trapped in the Net, Princeton U. P., 1997.
[Rumbaugh, 1991] Rumbaugh, J. et al., Object-oriented Modeling and Design, Prentice Hall,
1991
[Ryle,1949] Ryle, G., The Concept of Mind. Reed. Penguin, 1963.
[Shallis, 1991] Shallis, M., "The Silicon Idol", en [Zerzan, 1991].
[Skolimowski, 1966] Skolimowski, H., "The Structure of Thinking in Technology", en
Technology and Culture, VII, 3, 1966. Incluído en [Mitcham, 1983,42-49].
[Wooley, 1994] Wooley, B., El universo virtual, Acento, 1994.
[Yourdon, 1979] Yourdon, E. y Constantine, L. L., Structured Design, Yourdon Press, 1979.
[Yourdon, 1989] Yourdon, E., Modern Structured Analysis, Yourdon Press, 1989.
[Zeigler, 1976] Zeigler, B. P., Theory of Modelling and Simulation, J. Wiley, 1976.
[Zerzan, 1991] Zerzan, J., Carnes, A. (eds.) Questioning Technology: Too/, Toy, or Tyran?,
New Society Publishers, 1991.
8
Descargar