Académique Documents
Professionnel Documents
Culture Documents
divido en esencia, las dificultades inherentes a la naturaleza del software y los accidentes, las
dificultades que hoy asisten a la produccin, pero no son inherentes.
La esencia de una entidad de software es una construccin de los conceptos entrelazados: los
conjuntos de datos, las relaciones entre los elementos de datos, algoritmos, y las invocaciones
de funciones. Esta esencia se resumen en que tal construccin conceptual es el mismo en
muchas representaciones diferentes. Sin embargo, es altamente preciso y rico en detalles.
Creo que la parte ms difcil de la construccin de software para ser la especificacin, diseo y
ensayo de este constructo conceptual, no es el trabajo de representar y probar la fidelidad de la
representacin.
Todava cometemos errores de sintaxis, sin duda, pero son demasiadas complicaciones en
comparacin con los errores conceptuales en la mayora de los sistemas. Si esto es cierto, la
construccin de software siempre va a ser difcil. No es de por s hay una frmula mgica.
Vamos a considerar las propiedades inherentes de esta esencia irreducible de los sistemas de
software moderno: la complejidad, la conformidad, la mutabilidad y la invisibilidad.
Complejidad
Entidades de software son ms complejos por su tamao que quizs cualquier otra
construccin humana, porque no hay dos piezas iguales (al menos por encima del nivel de los
estados). Si es as, hacemos las dos partes similares en una subrutina - abierto o cerrado. En
este sentido, los sistemas de software difieren profundamente de los ordenadores, edificios o
automviles, donde abundan los elementos repetidos.
Computadoras digitales son de forma ms compleja de lo que la mayora de cosas que las
personas construyen: Tienen gran nmero de estados. Esto hace concebir, describir y probar
con fuerza. Los sistemas de software tienen rdenes de magnitud ms estados que las
computadoras hacen.
Del mismo modo, una ampliacin de una entidad de software no es meramente la repeticin del
mismo elemento en tamaos ms grandes, que es necesariamente un aumento en el nmero
de diferentes elementos. En la mayora de los casos, los elementos interactan unos con otros
de alguna manera no lineal, y la complejidad del conjunto aumenta mucho ms que
linealmente.
La complejidad de software es una propiedad esencial, no una accidentales. Por lo tanto, la
descripcin de una entidad software que abstrae la complejidad a menudo abstraer su
esencia. Durante tres siglos, las matemticas y las ciencias fsicas hicieron grandes avances en
la construccin de modelos simplificados de fenmenos complejos, las propiedades de los
modelos derivados, y la verificacin de las propiedades mediante experimentos. Este
paradigma funcion porque las complejidades ignorados en los modelos no eran las
propiedades esenciales de los fenmenos. No funciona cuando la complejidad es la esencia.
Muchos de los problemas clsicos de desarrollo de productos de software se derivan de esta
complejidad esencial y sus no lineales aumenta con el tamao. De la complejidad viene de la
dificultad de comunicacin entre los miembros del equipo, lo que conduce a defectos del
producto, los sobrecostos, retrasos en el programa. De la complejidad viene la dificultad de
enumerar, mucho menos comprensin, todos los estados posibles del programa, y de que
vienen de la falta de fiabilidad. A partir de la complejidad de la funcin viene la dificultad de la
invocacin de la funcin, lo que hace que los programas sean difciles de usar. De la
complejidad de la estructura viene la dificultad de extender los programas a las nuevas
funciones sin crear efectos secundarios. De la complejidad de la estructura vienen los estados
unvisualized que constituyen trampas de seguridad.
flujos de trfico, vistas. Las contradicciones y omisiones se vuelven obvias. Dibujos a escala de
las partes mecnicas y modelos de figuras de palo de molculas, aunque abstracciones, tienen
el mismo propsito. Una realidad geomtrica es capturado en una abstraccin geomtrica.
La realidad de software no est inherentemente incrustado en el espacio. Por lo tanto, no tiene
representacin geomtrica preparados en la forma en que la tierra tiene mapas, fichas sillicon
tienen diagramas, las computadoras tienen esquemas de conectividad. Tan pronto como
tratamos de estructura de software grfico, nos encontramos con que se constituya no slo
una, sino varias grficas, dirigida generales superpuestas una sobre otra. Los varios grficos
pueden representar el flujo de control, el flujo de datos, los patrones de dependencia,
secuencia Tiem, las relaciones de espacio de nombres. Estos grficos son por lo general ni
siquiera plana, mucho menos jerrquica. En efecto, una de las maneras de establecer el control
conceptual sobre dicha estructura es hacer cumplir de corte hasta que enlace uno o ms de los
grficos se convierte jerrquica [1].
A pesar de los avances en la restriccin y la simplificacin de las estructuras de software,
siguen siendo intrnsecamente unvisualizable, y por lo tanto no permiten a la mente para utilizar
algunos de sus ms poderosas herramientas conceptuales.Esta falta no slo impide el proceso
de diseo dentro de un mismo sentir, que dificulta gravemente la comunicacin entre las
mentes.
Sin embargo, Ada no resultar ser la bala de plata que mata al monstruo de la productividad del
software. Es, despus de todo, slo un lenguaje de alto nivel, y la mayor rentabilidad de estas
lenguas lleg a la primera transicin - la transicin a partir de la complejidad accidental de la
mquina en el estado ms abstracto de soluciones paso a paso. Una vez que los accidentes se
han eliminado, los restantes sern menores, y la recompensa de su retiro que seguramente
ser menos.
Mi prediccin es que dentro de una dcada, cuando se evaluar la eficacia de Ada, se ve que
han hecho una diferencia sustancial, pero no por ninguna caracterstica del lenguaje en
particular, ni tampoco a causa de todos ellos juntos. Tampoco sern los nuevos entornos Ada
llegar a ser la causa de las mejoras. La mayor contribucin de Ada ser que el cambio a que
los programadores de formacin ocasionados en las tcnicas de software de diseo moderno.
Programacin orientada a objetos
Muchos estudiosos de la materia tienen ms esperanza para la programacin orientada a
objetos que para otros caprichos tcnicos del da [2]. Yo estoy en medio de ellos. Marcos
Sherman de notas Dartmouth en CSnet News que uno debe tener cuidado de distinguir dos
ideas separadas que van con ese nombre:tipos abstractos de datos y tipos jerrquicos . El
concepto de tipo abstracto de datos es el de un tipo de objeto debe ser definido por un nombre,
un conjunto de valores propios, y un conjunto de operaciones propias en lugar de por su
estructura de almacenamiento que debe ser ocultado. Ejemplos de ello son los paquetes Ada
(con tipos particulares) y los mdulos de Modula.
Tipos jerrquicas, como las clases de Simula-67, le permiten a uno para definir las interfaces
generales que pueden ser an ms refinada, proporcionando tipos subordinados. Los dos
conceptos son ortogonales - uno puede tener jerarquas sin esconder y ocultar sin
jerarquas. Ambos conceptos representan avances reales en el arte de la construccin de
software.
Cada quita todava otra dificultad accidental del proceso, que permite al diseador para
expresar la esencia del diseo sin tener que expresar grandes cantidades de material sintctica
que no aaden ningn contenido de informacin. Para ambos tipos abstractos y tipos
jerrquicos, el resultado es para eliminar una especie de orden superior de dificultad accidental
y permitir que un espression de orden superior de diseo.
Sin embargo, como se puede hacer nada ms que para eliminar todas las dificultades
accidentales de la expresin del diseo. La complejidad del diseo en s mismo es esencial, y
este tipo de ataques hacer ningn cambio en lo que. Un aumento de un orden de magnitud se
puede hacer mediante la programacin orientada a objetos nicamente si la maleza tipo de
especificacin innecesaria todava en nuestro lenguaje de programacin es en s misma nueve
dcimas partes de las tareas realizadas en el diseo de un producto de programa. Lo dudo.
Inteligencia artificial
Muchas personas esperan avances en inteligencia artificial para proporcionar el avance
revolucionario que le dar ganancias de un orden de magnitud en la productividad y la calidad
del software [3]. No lo hago. Para ver por qu, debemos analizar qu se entiende por
"inteligencia artificial".
DL Parnas ha aclarado el caos terminolgico [4]:
Dos definiciones muy diferentes de AI son de uso comn hoy en da. AI-1: El uso de las
computadoras para resolver problemas que antes slo podan ser resueltos mediante
la aplicacin de la inteligencia humana. AI-2: El uso de un conjunto especfico de
tcnicas de programacin que se conoce como heurstica o programacin basada en
reglas. En este enfoque, los expertos humanos son estudiados para determinar qu
heursticas o reglas generales que utilizan en la solucin de problemas ... El programa
est diseado para resolver un problema en la forma en que los seres humanos
parecen resolverlo.
La primera definicin tiene un significado deslizante ... Algo que puede ajustarse a la
definicin de la IA-1 hoy, pero, una vez que vea cmo funciona el programa y entender
el problema, no vamos a pensar en l como AI ms ... Lamentablemente no puedo
identificar un conjunto de tecnologas que es nico en este campo ... La mayor parte
del trabajo es un problema especfico y se requiere una abstraccin o la creatividad
para ver cmo transferirlo.
Estoy completamente de acuerdo con esta crtica. Las tcnicas utilizadas para el
reconocimiento de voz parecen tener poco en comn con los utilizados para el reconocimiento
de imgenes, y ambos son diferentes de los utilizados en los sistemas expertos. Tengo un
tiempo difcil ver cmo el reconocimiento de imgenes, por ejemplo, har que una diferencia
apreciable en la prctica de programacin. El mismo problema es el caso de reconocimiento de
voz. Lo difcil acerca de la construccin de software es decidir lo que se quiere decir, no lo
dice.No ayuda a la expresin puede dar ms que ganancias marginales.
Tecnologa de sistemas expertos, AI-2, se merece una seccin propia.
Sistemas Expertos
La parte ms avanzada de la inteligencia artificial, y la ms ampliamente aplicada, es la
tecnologa para la construccin de sistemas expertos. Muchos cientficos de software estn
trabajando duro en la aplicacin de esta tecnologa en el entorno de software de capacidad
[3,5]. Cul es el concepto, y cules son las perspectivas?
Un sistema experto es un programa que contiene un motor de inferencia generalizada y una
base de reglas, toma los datos y supuestos, explora las consecuencias derivables de la base
de reglas, ofrece conclusiones y recomendaciones, y ofrece para explicar sus resultados por
volver sobre sus motivos para el usuario . El motor de inferencia tpicamente puede tratar con
datos y reglas difusas o probabilstico, adems de la lgica puramente determinista.
Estos sistemas ofrecen algunas ventajas claras sobre los algoritmos programados diseados
para llegar a las mismas soluciones a los mismos problemas:
permitido especificacin directa del problema, y los sistemas han evaluado los parmetros,
elegido a partir de una biblioteca de mtodos de solucin, y los programas generados.
Estas aplicaciones tienen propiedades muy favorables:
Es difcil ver cmo estas tcnicas se generalizan al resto del mundo del sistema de software
comn, donde los casos con tales propiedades ordenadas son la excepcin. Es difcil de
imaginar cmo podra ocurrir este gran avance en la generalizacin.
Programacin Grfica
Un tema favorito de tesis doctorales en ingeniera de software es grfico o visual, programacin
- la aplicacin de los grficos de computadora para el diseo de software [6,7]. A veces, la
promesa que por este enfoque se postula con una analoga con el diseo de chips VLSI, en el
que los grficos por ordenador juegan un papel tan fructfera. A veces, el terico que justifica el
enfoque al considerar diagramas de flujo como el medio de programas de diseo ideal y
proporcionando instalaciones poderosas para la construccin de ellos.
Nada siquiera convincente, mucho menos emocionante, pero ha surgido de tales
esfuerzos. Estoy persuadido de que nada lo har.
En primer lugar, como he argumentado en otra parte [8], el diagrama de flujo es una muy mala
abstraccin de la estructura del software. De hecho, se ve mejor como Burks, von Neumann, y
el intento de Goldstine para proporcionar un lenguaje de control de alto nivel que necesita
desesperadamente para su equipo propuesto. En el, varias pginas, forma de conexin en caja
lamentable que el organigrama actual se ha elaborado, se ha demostrado ser intil como una
herramienta de diseo - programadores dibujar diagramas de flujo despus, no antes, escribir
los programas que describen.
En segundo lugar, las pantallas de hoy en da son demasiado pequeas, en pxeles, para
mostrar tanto el alcance como la resolucin de cualquier diagrama detallado grave software. La
denominada "metfora de escritorio" de estacin de trabajo de hoy es ms bien una metfora
"avin-asiento". Cualquier persona que ha barajado una vuelta completa de los documentos
mientras se est sentado entre dos pasajeros corpulentos reconocer la diferencia - se puede
ver slo unas pocas cosas a la vez. El verdadero escritorio proporciona panorama general y un
acceso aleatorio a una veintena de pginas. Por otra parte, cuando se ajusta la creatividad son
fuertes, ms de un programador o un escritor se ha conocido a abandonar el escritorio para el
ms amplio piso. La tecnologa de hardware tendr que avanzar de forma sustancial antes de
que el alcance de nuestros mbitos es suficiente para la tarea de software-diseo.
Ms fundamentalmente, como he sealado anteriormente, el software es muy difcil de
visualizar. Si un flujo de control de diagramas, variable alcance de anidacin, variable de
referencias cruzadas, flujo de datos, estructuras de datos jerrquicos, o lo que sea, se siente
slo una dimensin del elefante software intrincadamente entrelazada. Si se superpone todos
los diagramas generados por los muchos puntos de vista relevantes, es difcil extraer cualquier
visin global. La analoga VLSI es fundamentalmente engaoso - un diseo de chip es una
descripcin de dos dimensiones en capas cuya geometra refleja su realizacin en el espacio
de 3 dimensiones. Un sistema de software no lo es.
Programa de Verificacin
Gran parte del esfuerzo en la programacin moderna entra en prueba y reparacin de
errores. Existe tal vez una bala de plata que se encuentran al eliminar los errores en la fuente,
en la fase de diseo del sistema? Puede la productividad y la fiabilidad del producto ser
radicalmente mejorada siguiendo el profundamente diferente estrategia de probar diseos
correctos antes de que el inmenso esfuerzo se vierte en la implementacin y prueba de ellos?
No creo que vamos a encontrar la magia de la productividad aqu. Programa de verificacin es
un concepto muy poderoso, y que ser muy importante para tal cosa como la seguridad
ncleos del sistema operativo. La tecnologa no promete, sin embargo, para ahorrar mano de
obra. Las verificaciones son mucho trabajo que se han verificado siempre slo unos pocos
programas importantes.
Programa de verificacin no significa programas de prueba de errores. No hay magia aqu,
tampoco. Pruebas matemticas tambin pueden estar defectuosos.As que el control puede
reducir la carga de la programacin de pruebas, no puede eliminarlo.
Ms en serio, incluso la verificacin programa perfecto slo puede demostrar que el programa
cumple con su especificacin. La parte ms difcil de la tarea de software est llegando a una
especificacin completa y consistente, y gran parte de la esencia de la construccin de un
programa, de hecho, la depuracin de la especificacin.
Entornos y herramientas
Cunto se puede esperar ms de ganancia de las investigaciones de la explosin en mejores
entornos de programacin? De una reaccin instintiva es que los problemas de gran
rentabilidad - sistemas de archivos jerrquicos, formatos de archivo uniformes para hacer
posibles interfaces de programa de uniformes y herramientas generalizadas - fueron el primer
ataque, y han sido resueltos. Editores inteligentes especficos del idioma son avances an no
se utiliza ampliamente en la prctica, pero la mayora de ellos prometen es la ausencia de
errores sintcticos y errores semnticos simples.
Tal vez el mayor beneficio an no se ha dado cuenta de entornos de programacin es el uso de
sistemas de bases de datos integradas para realizar un seguimiento de la gran cantidad de
detalles que hay que recordar con precisin por el programador individual y se mantienen en
curso para un grupo de colaboradores en un solo sistema.
Sin duda, este trabajo vale la pena, y seguramente va a dar frutos en la productividad y la
fiabilidad. Pero, por su propia naturaleza, el regreso a partir de ahora debe ser marginal.
Estaciones de Trabajo
Qu ganancias son de esperar para la tcnica de software desde cierta y rpido aumento de
la capacidad de potencia y la memoria de la estacin de trabajo individual? Bueno, cuntos
MIPS se puede utilizar provechosamente? La composicin y edicin de programas y
documentos es totalmente compatible con velocidades de hoy en da. Compilar poda soportar
un impulso, sino un factor de 10 en la velocidad de la mquina, sin duda, dejar pensar a tiempo
la actividad dominante en el da del programador. De hecho, parece ser ahora.
Workstation ms poderosa que sin duda bienvenida. Mejoras mgicas de ellos no pueden
esperar.
Si, como creo, los componentes conceptuales de la tarea que estn tomando la mayor parte del
tiempo, entonces ninguna cantidad de actividad de los componentes de tareas que no son ms
que la expresin de los conceptos puede dar grandes ganancias de productividad.
Por lo tanto, debemos tener en cuenta los ataques que se ocupan de la esencia del problema
de software, la formulacin de estas estructuras conceptuales complejas.Afortunadamente,
algunos de estos ataques son muy prometedores.
Compre frente Construir
La solucin ms radical posible fro construir software no es construir en absoluto.
Cada da esto se vuelve ms fcil, ya que cada vez ms proveedores ofrecen ms y mejores
productos de software para una vertiginosa variedad de aplicaciones.Mientras nosotros, los
ingenieros de software han trabajado en la metodologa de produccin, la revolucin de las
computadoras personales ha creado no uno, sino muchos, los mercados masivos de
software. Cada quiosco lleva revistas mensuales, segn tipo de mquina, publicidad y revisar
decenas de productos a un precio de unos pocos dlares a unos pocos cientos de
dlares. Fuentes ms especializadas ofrecen productos muy potentes para la estacin de
trabajo y en otros mercados de Unix. Incluso las herramientas y entornos de software se
pueden comprar fuera de la plataforma. He propuesto en otro lugar un mercado para los
mdulos individuales [9].
Cualquier producto es ms barato comprar que construir de nuevo. Incluso a un costo de cien
mil dlares, una pieza de software comprado cuesta slo alrededor tanto como un programador
aos. Y ofrecer es inmediato! Inmediata, al menos, para los productos que realmente existen,
productos cuyos desarrollador puede consultar los productos a un usuario feliz. Por otra parte,
estos productos tienden a ser mucho mejor documentado y mantenido un poco mejor que el
software de cosecha propia.
El desarrollo del mercado de masas es, creo, la ms profunda tendencia a largo plazo en la
ingeniera de software. El costo del software siempre ha sido el coste de desarrollo, no cuesta
replicacin. Compartir ese costo, incluso entre algunos usuarios corta radicalmente el costo por
usuario. Otra forma de verlo es que el uso de n copias de un sistema de software multiplica
efectivamente la productividad de sus desarrolladores por n . Eso es una mejora de la
productividad de la disciplina y de la nacin.
La cuestin clave, por supuesto, es de aplicacin. Puedo utilizar un paquete off-the-shelf
disponible para realizar mi tarea? Algo sorprendente ha sucedido aqu.Durante los aos 1950 y
1960, estudio tras estudio muestra que el usuario no utilice paquetes off-the-shelf de nmina,
control de inventarios, cuentas por cobrar, etc. Los requisitos eran demasiado especializados,
la variacin caso por caso demasiado alto. Durante la dcada de 1980, nos encontramos con
este tipo de paquetes en alta demanda y uso generalizado. Qu ha cambiado?
No los paquetes, de verdad. Ellos pueden ser algo ms generalizado y algo ms personalizable
que en otro tiempo, pero no mucho. No las aplicaciones, ya sea. En todo caso, las necesidades
de las empresas y cientficos de hoy en da son ms diversos y complicados que los de hace
20 aos.
El gran cambio ha sido en el ratio de eficiencia del hardware / software. En 1960, el comprador
de una mquina de dos millones de dlares senta que l poda pagar 250.000 dlares ms
para un programa de nmina personalizada, que se desliz con facilidad un sin interrupciones
en el entorno social hostil ordenador. Hoy en da, el comprador de una mquina de oficina $
50,000 no puede permitirse concebir un programa de nmina personalizada, por lo que se
adapta el procedimiento de la nmina de los paquetes disponibles. Las computadoras son
ahora tan comn, si no es sin embargo tan querida, que las adaptaciones se aceptan como
algo natural.
Hay excepciones dramticas a mi argumento de que la generalizacin de los paquetes de
software ha cambiado poco en los ltimos aos: las hojas de clculo electrnicas y sistemas de
bases de datos simples. Estas herramientas de gran alcance, tan evidente en retrospectiva ya
la vez tan tarde en aparecer, se prestan a miles de usos, algunos de ellos muy poco
ortodoxo. Artculos e incluso libros ahora abundan en la manera de abordar las tareas
inesperadas con la hoja de clculo. Un gran nmero de aplicaciones que anteriormente se han
escrito los programas personalizados en Cobol o generador de informes del programa son
ahora rutinariamente hacen con estas herramientas.
Muchos usuarios ahora tienen sus propios ordenadores en da tras da en diversas aplicaciones
sin tener que escribir un programa. De hecho, muchos de estos usuarios no pueden escribir
nuevos programas para sus mquinas, sin embargo, son expertos en la resolucin de nuevos
problemas con ellos.
Creo que la estrategia de software de productividad ms poderosa para muchas
organizaciones hoy en da es equipar a los trabajadores intelectuales ordenador ingenuos que
estn en la lnea de fuego con las computadoras personales y la buena escritura generalizada,
dibujos, archivos y hojas de clculo y luego soltarlos.La misma estrategia, llevada a cabo con
los paquetes de matemticas y estadsticas y algunas capacidades de programacin simples,
tambin trabajar para cientos de cientficos de laboratorio.
Requisitos, Rapid Prototyping Refinamiento y
La parte ms difcil de la construccin de un nico sistema de software es decidir exactamente
qu construir. Ninguna otra parte del trabajo conceptual es tan difcil como la que se establecen
los requisitos tcnicos detallados, incluyendo todas las interfaces con las personas, a las
mquinas, as como a otros sistemas de software. Ninguna otra parte de la obra por lo paraliza
el sistema resultante si se hace mal. Ninguna otra parte es ms difcil de corregir ms adelante.
Por lo tanto, la funcin ms importante que el constructor de software realiza para el cliente es
la extraccin y refinamiento de los requisitos del producto iterativo.Pues la verdad es que el
cliente no sabe lo que quiere. El cliente generalmente no sabe qu preguntas deben ser
contestadas, y tiene casi nunca, aunque el problema con el detalle necesario para la
especificacin. Incluso la respuesta simple - "Hacer que el nuevo sistema funcione software
como nuestro antiguo sistema de procesamiento de informacin manual" - es, de hecho,
demasiado simple. Uno nunca quiere exactamente eso. Sistemas de software complejos son,
por otra parte, las cosas que actan, que se mueven, que funcionan. La dinmica de la accin
es difcil de imaginar. As que en la planificacin de cualquier actividad de software-diseo, es
necesario para permitir una amplia iteracin entre el cliente y el diseador como parte de la
definicin del sistema.
Me gustara ir un paso ms all y afirmar que es realmente imposible para un cliente, incluso
trabajando con un ingeniero de software, para especificar completamente, precisa y
correctamente los requisitos exactos de un producto de software moderno antes de probar
algunas versiones del producto.
Por lo tanto, uno de los ms prometedores de los actuales esfuerzos tecnolgicos, y uno que
ataca a la esencia, no los accidentes, del problema de software, es el desarrollo de mtodos y
herramientas para la creacin rpida de prototipos de sistemas como la creacin de un
prototipo es parte de la especificacin iterativo de requisitos.
Un sistema de software prototipo es uno que simula las interfaces importantes y realiza las
principales funciones del sistema de destino, aunque no necesariamente estar limitado por la
misma velocidad de hardware, tamao o limitaciones de costo.Los prototipos suelen realizar las
tareas de la lnea principal de la aplicacin, pero no tratan de manejar las tareas excepcionales,
responder correctamente a las entradas no vlidas, o abortar limpiamente. El propsito del
prototipo es de hacer realidad la estructura conceptual especificado, de modo que el cliente
puede probar que para la consistencia y facilidad de uso.
Gran parte del proceso de adquisicin de software de hoy en da se basa en la suposicin de
que se puede especificar un sistema satisfactorio de antemano, obtener ofertas para su
construccin, lo han construido, e instalarlo. Creo que esta suposicin es un error fundamental,
y que muchos programas de adquisicin de los problemas surgen de la falacia. Por lo tanto, no
pueden ser fijados sin la revisin fundamental - revisin que proporciona para el desarrollo y
especificacin de prototipos y productos iterativo.
Desarrollo Incremental - Crecer, no construyen, Software
Todava recuerdo la sacudida que sent en 1958 cuando por primera vez o a un amigo hablar
de la construccin de un programa, en lugar de escribir una. En un instante, ampli toda mi
visin del proceso de software. El cambio de metfora era poderoso y preciso. Hoy
entendemos cmo al igual que otros procesos de construccin, la construccin de software es,
y libremente usar otros elementos de la metfora, como especificaciones , montaje de
componentes y andamios .
La metfora de la construccin ha dejado de ser til. Es el momento de cambiar de nuevo. Si,
como creo, las estructuras conceptuales que construimos hoy son demasiado complejos para
ser especificado con precisin de antemano, y demasiado complejos para ser construido sin
errores, entonces tenemos que adoptar un enfoque radical diferente.
Volvamos a la naturaleza y complejidad estudio de los seres vivos, en lugar de las obras de
muerte del hombre. Aqu nos encontramos con construcciones cuyas complejidades
emocionarnos con asombro. El cerebro es el nico intrincada all de la cartografa, poderosos
ms all de la imitacin, rico en diversidad, la auto-proteccin y auto-renovacin. El secreto es
que ha crecido, no se construye.
Y as debe ser con nuestros sistemas de software. Harlan Mills hace algunos aos propusieron
que cualquier sistema de software debe ser cultivado por desarrollo incremental [10]. Es decir,
el sistema primero debe ser obligado a correr, incluso si no hace nada til, excepto llame el
conjunto adecuado de subprogramas ficticias.Luego, poco a poco, debe concretarse, con los
subprogramas a su vez, se estn desarrollando en acciones o llamadas a los talones vacos en
el nivel inferior.
He visto los resultados ms dramticos desde que comenz a instar a esta tcnica en los
constructores del proyecto en mi clase de Laboratorio de Ingeniera de Software. Nada en la
ltima dcada ha cambiado radicalmente mi propia prctica, o su eficacia. El enfoque requiere
el diseo de arriba hacia abajo, ya que es un crecimiento de arriba hacia abajo del
software. Permite una fcil dar marcha atrs.Se presta a los primeros prototipos. Cada funcin
de agregado y la nueva disposicin de los datos o circunstancias ms complejas crece
orgnicamente a partir de lo que ya est ah.
Los efectos de nimo son sorprendentes. Saltos de entusiasmo cuando hay un sistema
runnign, incluso simple. Los esfuerzos de re-doblar cuando la primera imagen de un nuevo
sistema de software de grficos en la pantalla, incluso si es slo un rectngulo. Uno siempre
tiene, en cada etapa del proceso, un sistema de trabajo. Me parece que los equipos
pueden crecer las entidades ms complejas en cuatro meses lo que pueden construir .
Tha mismos beneficios que se pueden realizar en los grandes proyectos como en mis
pequeos [11].
Grandes diseadores
La cuestin central en la forma de mejorar los centros de arte de software, como siempre, en
las personas.
Podemos conseguir buenos diseos, siguiendo las buenas prcticas en lugar de los
pobres. Buenas prcticas diseos se pueden ensear. Los programadores se encuentran entre
la parte ms inteligente de la poblacin, para que puedan aprender las buenas prcticas. Por lo
tanto, un impulso importante en los Estados Unidos es promulgar buenas prcticas
moderna. Nuevos planes de estudio, la nueva literatura, nuevas organizaciones, como el
Instituto de Ingeniera de Software, todos han llegado a ser con el fin de elevar el nivel de
nuestra prctica de mala a buena. Esto es totalmente adecuada.
Sin embargo, no creo que podamos dar el siguiente paso hacia arriba de la misma
manera. Considerando que las diferencias entre los diseos conceptuales pobres y buenos
puede estar en la solidez del mtodo de diseo, la diferencia entre los buenos diseos y
grandes diseos seguramente no lo hace. Grandes diseos provienen de grandes
diseadores. Construccin de software es un creativoproceso. Metodologa de sonido puede
potenciar y liberar la mente creativa, no puede inflamar o inspirar el esclavo.
Las diferencias no son menores - son algo as como las diferencias entre Salieri y
Mozart. Estudio tras estudio muestra que los mejores diseadores producen estructuras que
son ms rpidos, ms pequeos, ms simple, ms limpio, y producidos con menos esfuerzo
[12]. Las diferencias entre el grande y el enfoque de media son un orden de magnitud.
Un poco de retrospectiva muestra que aunque muchos sistemas de software finas, tiles han
sido diseados por los comits y construido como parte de los proyectos de varias partes, los
sistemas de software que se han emocionado los fanticos son los que son los productos de
una o unas pocas mentes diseo, grandes diseadores. Considere la posibilidad de Unix, APL,
Pascal, Modula, la interfaz de Smalltalk, incluso Fortran, y constraste con Cobol, PL / 1, Algol,
MVS/370 y MS-DOS.
Productos Interesantes
No
Unix
APL
Pascal
Modula
Smalltalk
Fortran
Cobol
PL / 1
Algol
MVS/370
MS-DOS
Tabla 1. Productos de software emocionantes vs til pero aburrida
Por lo tanto, a pesar de que apoyo firmemente los esfuerzos de transferencia de tecnologa y el
plan de estudios de desarrollo en curso, creo que el ms importante esfuerzo solo podemos
montar es desarrollar maneras de hacer crecer grandes diseadores.
Ninguna organizacin software puede ignorar este reto. Los buenos gerentes, escasos que
sean, no son ms escasos que los buenos diseadores. Grandes diseadores y grandes
gerentes son muy raros. La mayora de las organizaciones gastan considerable esfuerzo en la
bsqueda y el cultivo de las perspectivas de gestin: no conozco ninguno que pasa el mismo
Agradecimientos
Doy las gracias a Gordon Bell, Bruce Buchanan, Rick Hayes-Roth, Robert Patrick, y, muy
especialmente, David Parnas por sus puntos de vista e ideas estimulantes, y Rebeca Bierly
para la produccin tcnica del artculo.
Referencias
1. DL Parnas, "Software de diseo para la facilidad de extensin y contraccin", IEEE
Trans. Ingeniera del Software , Vol.5 No.2, marzo 1979, pp 128-138
9. Junta de Ciencias de Defensa, Informe del Grupo de Trabajo sobre Software Militar , en
prensa
11. BW Boehm, "Un Modelo Espiral de Desarrollo de Software y Mejora", 1985, TRW
tecnologa. informe 21-371-85, TRW, Inc., 1 plaza, Redondo Beach, CA 90278