You are on page 1of 15

Una breve historia de la Ingeniera del Software

Este artculo examina las principales contribuciones al campo de la ingeniera de software e identifica los principales obstculos que persisten, incluso hasta el da de hoy.

El trmino programacin se utilizo comnmente desde mediados de 1960, y se refiere fundamentalmente a la tarea de codificacin de un ordenador. El trmino ingeniera de software, refirindose al enfoque disciplinado y sistemtico para el desarrollo y mantenimiento de software apareci despus de una conferencia patrocinada por la OTAN en 1968. En esa conferencia las dificultades de disear complejos sistemas fueron exploradas a profundidad y la bsqueda de soluciones se concentr en el uso de mejores tcnicas y herramientas. La ms prominente de estas herramientas son lenguajes que reflejan procedimientos, modulares y estilos de programacin orientados a objetos. Desde 1968, el desarrollo de ingeniera de software ha estado ntimamente ligada a estas herramientas, as como a la mejorara de los esfuerzos de sistematizacin y automatizacin de la documentacin del programa y las pruebas. En este artculo se explicar como el rpido crecimiento de la computacin ha hecho posible en pocos aos aplicarla en tareas cada vez ms complicadas. Esta tendencia ha aumentado espectacularmente la demanda en materia de ingenieros de software. Los programas y sistemas son cada vez ms complejo y casi imposibles de entender por un solo individuo en su totalidad. La abundancia de recursos informticos , junto con una disminucin significativa en su costo ha reducido inevitablemente la atencin que se debe dar a un buen diseo. El recompensa a la falta de calidad, la bsqueda del beneficio se convirti en

fundamental, pero debemos estar preocupados por el resultante deterioro de la calidad de programacin. Nuestras limitaciones en el diseo de sistemas complejos ya no estn determinadas por el hardware lento, pero si por nuestra capacidad intelectual. Por experiencia, sabemos que la mayora de los programas podran mejorarse de manera significativa, hacindolos ms fiable, ms econmico y ms fciles de usar.

La dcada de 1960 y el origen de ingeniera de software Es lamentable que personas que tratan con computadoras a menudo tengan poco inters en su historia. Como resultado, muchos conceptos e ideas se propagan y como publicidad nueva, cuando en realidad existan dcadas atrs, tal vez con un nombre diferente. Creo que vale la pena considerar en ocasiones el pasado y para investigar cmo los trminos de tecnologa y conceptos se originaron. Considero que a finales de 1950 fue un periodo esencial en la era de la informtica. En ese momento, las computadoras se volvieron a disposicin de las instituciones de investigacin y las universidades. Las computadoras eran entonces utilizadas principalmente en la ingeniera y las ciencias naturales, pero pronto se convirtieron en indispensables para los negocios, tambin. El tiempo cuando eran accesibles slo a unos pocos en los laboratorios, quedo en el pasado. El Surgimiento de los computadores se produce por el cierre de los laboratorios de los ingenieros elctricos, esto signific que el uso de las computadoras ", en particular, su programacin, se convirti en una actividad de muchos. Como resultado, una nueva profesin naci, y todo tipo de empresas empezaron a contratar a los programadores, los equipos reales, sin embargo, permanecian ocultos, encerrados en especiales habitaciones construidas para albergarlos en esas mismas empresas. Los programadores escribin el cdigo

y llevaban sus programas a un mostrador donde un despachador recoga los programas y los pona en cola para el procesamiento. Los resultados de los programas se obtenan horas o das despus. No hubo interactividad entre el hombre y la computadora: las tareas de programacin e informtica eran separadas. La programacin se entenda como una tarea que requiere una laboriosa y sofisticada la atencin al detalle, junto con el amor por los cdigos oscuros y lo que podra incluso ser llamado Trucos. Para facilitar esta codificacin, crearon notaciones formales lo que ahora llamamos lenguajes de programacin. La idea principal fue la de sustituir las secuencias de instrucciones especiales por frmulas matemticas. El primer lenguaje ampliamente conocido fue Fortran, se desarroll por IBM en 1957, seguida por el primera versin Algol en 1958 y su oficial sucesor en 1960. Mientras que las computadoras eran utilizada para el almacenamiento y comunicacin los datos, los primeros lenguajes estaban dirigidos principalmente a las matemticas.

En 1962, el lenguaje COBOL fue desarrollado por el Departamento de Defensa de EE.UU. especficamente para aplicaciones de negocios. Pero a medida que la capacidad de computacin creci, tambin lo hizo la demanda de programas y de los programadores. Fue lentamente reconocido que la programacin

era una difcil tarea, y que el dominio de complejos programas era trivial, a pesar de las computadoras eran tan poderosas. Se busc la salvacin en mejores lenguajes de programacin, en ms herramientas y en la automatizacin. Para ser considerado'' el
mejor lenguaje debera ser til en un rea ms amplia de aplicacin; debera ser ms como un lenguaje natural y tambin ofrecer ms facilidades. Por ejemplo, PL / 1, desarrollado por IBM a principios de 1960, fue diseado para unificar a la comunidad cientfica y comercial. Se anuncia bajo el lema '' Todo el mundo puede programar gracias a PL / 1.''. Los lenguajes de programacin y sus

compiladores se convirtieron en uno de los pilares principales de la informtica, pero encajados en las matemticas y la electrnica, dos de los sectores tradicionales donde las computadoras se utilizaron. Pronto surgi una nueva disciplina, que se llamaba ciencias de la computacin en los EE.UU. e

informtica Europa.
En 1963, el primer sistema de tiempo compartido apareci. Fue diseado por John McCarthy en el MIT y fue implementado en un simple equipo DEC PDP-1. Este

sistema de tiempo compartido provee la interactividad carecan los sistemas de procesamiento por lotes. Surgio la idea de los fabricantes de
ordenadores y anunciaron muy pronto sistemas de tiempo compartido para su gran mainframes (por ejemplo, la IBM360/67 y General Electric GE-645).

Result que la transicin de procesamiento por lotes a los sistemas de tiempo compartido era mucho ms difcil de lo que nadie haba previsto. Entre otras

dificultades, los sistemas se dieron a conocer pero luego no pudieron ser entregados a tiempo los problemas operativos eran demasiado compleos, la investigacin tuvo que ser llevado a cabo'' en el trabajo''.

Los temas de multiprocesamiento y programacin concurrente ingredientes centrales

de los sistemas de tiempo compartido no se haban encontrado antes y no se dominaban suficientemente. Estas dificultades llevaron a grandes empresas al borde del colapso. En medio de esta situacin, en 1968 La OTAN patrocin una conferencia dedicada a la el tema de la ingeniera de software, aunque comentarios crticos haba sido expresados anteriormente acerca de la profesin de programacin, no fue sino hasta la esta conferencia que las dificultades de los programadores eran abiertamente discutidas en foro pblico y que los trminos ingeniera de software y crisis del software se acuaron. Era reconocido que las tcnicas actuales de desarrollo de software eran inadecuados y que nuevas formas ms metdicas haba que adoptar.

La programacin como una disciplina

La crisis del software en el ao 1968 se dio a pesar de los esfuerzos realizados desde hace varios aos atrs en abordar la cuestin especfica de la complejidad cada vez mayor en la programacin. En el mundo acadmico, se trataba principalmente de Edsger W. Dijkstra y C.A.R. Hoare, que haba reconocido los problemas de la programacin y que ofreci nuevas ideas. En 1965, Dijkstra haba escrito su '' Notas en la programacin estructurada'' y declar que la programacin sea una disciplina. Tambin en 1965, Hoare public un importante documento sobre la estructura de datos,
Estas ideas tuvieron una profunda influencia en nuevos lenguajes de programacin, en particular, Pascal. Nuevos lenguajes fueron los

vehculos en los que estas nuevas ideas iban a ser expresadas. La programacin estructurada se convirti en el apoyo por un lenguaje de programacin estructurado.

En 1966, Dijkstra, haba escrito un paper sobre procesos que han cooperado armnicamente para postular una disciplina basada en semforos. Semforos, primitivas para la sincronizacin de procesos concurrentes, puede ser considerado como un tipo de datos con los valores 0 y 1 y los operadores atmicos P y V . P(s) retrasos en la llamada al proceso hasta que s tiene la accin de otro proceso obtenido el valor 1 y a continuacin, establece el semforo a 0. V (s) coloca a 1 s.)

Todos estos esfuerzos en el campo de la programacin todava estaban en un estado de agitacin e incluso desorganizacin en el momento de la conferencia de la OTAN. Los acontecimientos importantes de Dijkstra, Hoare, y otros nopudo cambiar la situacin del software. La Industria no podra cambiar ni sus polticas ni sus herramientas lo suficientemente rpido como para ser de utilidad para los programadores, se

limitaban a trabajar con las herramientas y lenguajes disponibles, ninguno de los cuales incorporaban estos nuevas ideas en 1968.

Cursos intensivos de capacitacin sobre programacin estructurada se empezaron a organizar, en particular, por Harlan D. Mills en IBM. Incluso elDepartamento de Defensa de los EE.UU se dio cuenta de que los problemas de software eran urgentes y cada vez ms. Por su parte, el Departamento de Defensa inici un proyecto que en ltima instancia condujo al lenguaje de programacin Ada, un lenguaje altamente estructurado propicio para variedad de aplicaciones. El desarrollo de software dentro del Departamento de Defensa luego se basara exclusivamente en Ada, y lo sigue siendo en gran medida

UNIX y C Mientras que los conceptos de la programacin estructurada poco a poco ganaban la aceptacin, sobre todo en el mundo acadmico, otro movimiento comenz a invadir mundo de los programadores. Unix fue especficamente diseado para caber en las minicomputadores, ya que era lo suficientemente pequeo. En este camino llega el lenguaje C, que haba sido explcitamente diseado por Dennis Ritchie, Tambin en los Laboratorios Bell, para apoyar el desarrollo de Unix. Por lo tanto, fue obligatorio, el uso de C para el desarrollo de
aplicaciones que se ejecutaban bajo Unix que actu como un caballo de Troya para C.

Pero C no llevaba el espritu de la programacin estructurada, era ms bien como un ensamblador de cdigo con una sintaxis similar a Algol sintaxis. Tampoco se permitir la comprobacin estricta de tipos de datos. Desde el punto de vista de ingeniera de software, la rpida propagacin de C representa un gran salto hacia atrs

Abstraccin Un lenguaje representa en resumen a un equipo cuyos objetos y las construcciones se encuentran ms cerca, y reflejan de manera ms directa el problema a ser represento en la mquina. Por ejemplo, en un lenguaje de alto nivel se trabaja con nmeros, matrices indexadas tipos de datos, y sentencias condicionales y repetitivas; en lugar de bits y bytes, palabras dirigidas, jumpers y cdigos de condicin. Sin embargo, estas
abstracciones son beneficiosas slo se si son consistentemente y completamente definidas en trminos de sus propias propiedades. Si esto no es el caso, si

las abstracciones se pueden entender slo en trminos de la instalacin de la computadora, entonces los beneficios son mnimos.

Si se depura un programa, sin duda, la actividad ms generalizada en la ingeniera del software se requiere un volcado hexadecimal '', entonces el uso de un lenguaje de alto nivel o vale la pena.

El problema era que las reglas de C fcilmente se rompan, exactamente lo que muchos programadores valoraron. C hizo posible que los programadores.

La naturaleza de C era efectivamente una invitacin a los programadores a usar trucos y lagunas que haban sido necesarios para lograr eficiencia en los primeros das de las computadoras, pero que ahora eran trampas que han hecho de los grandes sistemas propensos a errores y costos para depurar y mantener.

Los lenguajes que aparecieron alrededor de 1985, como Ada y C + +, trataron de poner remedio a este defecto y se enfrentaron de inmediato a una variedad mucho ms amplia de aplicaciones. Los compiladores y herramientas de apoyo se convirtieron en voluminosos y complejos. En ltima instancia, en lugar de resolver problemas, estos nuevos lenguajes se convirtieron en problemas para s mismos, Como Dijkstra dice con frecuencia: Pertenecan al problema en lugar de configurar la solucin.

En consecuencia, los avances en ingeniera de software pareca estancarse. Las

dificultades crecieron ms rpido de lo que las nuevas herramientas podran resolver. Pseudo herramientas como las mtricas de software, para contar el nmero de lneas de cdigo en un programa, se haban desvelado sin ninguna ayuda, pero por lo menos Los ingenieros de software ya no eran juzgados por el nmero de lneas de cdigo producidos por hora.

El advenimiento de la microcomputadora La propagacin de la ingeniera de software y Pascal en particular no se produjo en la industria pero si en otros frentes: en las
escuelas y el hogar, en gran parte como consecuencia de la aparicin de microcomputadoras. Los microordenadores aparecieron por primera vez en el mercado en 1975 , mucho ms tarde, entr en IBM el mercado. Se

basaban en un solo procesador (tal como el Intel 8080, Motorola 6800, y Rockwell 6502) con buses de datos de 8-bits, 32 Kbytes de memoria o menos y el reloj frecuencias menos de 1MHz. Estos avances hicieron a las computadoras accesibles para las personas, en contraste con las grandes organizaciones: empresas y universidades

El avance de las microcomputadoras, en el contexto de desarrollo de software, vino cuando se demostr que lenguajes de alto nivel podra ser utilizado en conjuncin con los microordenadores. Esto ocurri en 1975 cuando el grupo que Ken Bowles de la Universidad de California, construy un editor de texto, un archivo sistema, y un depurador usando el Compilador de Pascal (cdigo P), desarrollado en la ETH de Zurich, y lo distribuy por $ 50. Al poco tiempo, Borland Software sali con su versin (Turbo Pascal) de un compilador de alto nivel. Este fue en un momento en el que otros compiladores eran muy costoso, por lo que la aparicin de estos comparativamente econmicos involucraron implementaciones de Pascal nada menos que un punto de inflexin en la comercializacin de software con fines de desarrollo Mientras tanto, los requisitos de los sistemas de software continu creciendo y, a su vez, lo hizo la complejidad de los programas. El arte de la programacin se dirigi a la piratera'''' en muchos casos. Se trat de sistematizar los mtodos, si no de la construccin, al menos de las pruebas y documentacin. A pesar de que era til, los problemas reales de
programacin agitado

Programacin como una disciplina matemtica

En 1975, Dijkstra deduce el clculo de predicados que la programacin fue obtenida de una base matemtica. Los programas ya no eran slo el cdigo para controlar computadoras, los textos estticos podan ser sometidos al razonamiento matemtico. A pesar de estos avances fueron reconocidos en algunas universidades, pasaron casi desapercibido en la industria. De hecho, la lgica de Hoare y la transformacin de predicados de Dijkstra, se explic en algoritmos interesantes, pero pequeos como la multiplicacin

de enteros, bsqueda binaria, y mximo comn divisor. Pero la industria estaba plagada de grandes, incluso gigantescos sistemas. Era evidente que las teoras matemticas no podan resolver problemas reales cuando el anlisis de algoritmos simples fue lo suficientemente exigente. Una posible solucin al dilema del rigor matemtico para los pequeos programas contra la inflexibilidad de los programas de grandes, emergi de una manera disciplinada de la programacin, en lugar que la teora cientfica rigurosa.

Una de las principales contribuciones a la programacin estructurada fue hecha por David Parnas en 1972 con el concepto de ocultacin de informacin, y en al mismo tiempo por Barbara Liskov con el concepto de los tipos abstractos de datos. Ambos conceptos encarnan la idea de romper los sistemas de grandes en partes llamadas mdulos, y definen con claridad sus interfaces.

El principio de modularizacin, probablemente constituye la contribucin ms importante para ingeniera de software, es decir, a la construccin de los sistemas de grandes grupos de personas. El concepto de modularizacin es en gran medida realzado por la tcnica de la compilacin en la comprobacin automtica de la compatibilidad de la interfaz.

As como la programacin estructurada haba sido el espritu rector de Pascal, la modularizacin era la idea principal detrs del lenguaje Modula-2, el sucesor de Pascal, publicado en 1979. El concepto de modularizacin y la compilacin por separado tambin fue adoptado por el lenguaje Ada (1984), que se basaba en gran medida de Pascal. En Ada, los mdulos fueron llamados paquetes

Era de las estaciones de trabajo Sin embargo, otro acontecimiento influy el campo de la computacin ms profundamente que todos los lenguajes de programacin, era la estacin de trabajo, que fue construido en 1975 por el laboratorio Xerox PARC. A diferencia de las microcomputadoras, las estaciones de trabajo era lo suficientemente poderoso para permitir el desarrollo de software, complejos clculos, y el uso de un compilador para un lenguaje de programacin avanzada. Lo ms importante, de la estacin de trabajo Alto fue el ser pionera en el mapa de bits de alta resolucin de la pantalla y en el dispositivo sealador llamado un ratn, que provocaron un cambio revolucionario en el uso del ordenador. Junto con Alto, el concepto de una red de rea local se introdujo, y los servidores centrales para impresin lacre, el almacenamiento de archivos a gran escala y el servicio de correo electrnico.

No es exagerado en absoluto afirmar que la era de la computacin moderna se inici en 1975 con el Alto. El Alto caus
nada menos que un revolucin, aunque lentamente, y como resultado, mucha gente de hoy no tienen idea de cmo la tecnologa se hizo antes de 1975, sin estaciones de trabajo altamente interactivas. La influencia de estos desarrollos en

ingeniera de software no puede ser sobrestimada. Como la


demanda de software complejo de cada vez ms creci, y como las dificultades se hicieron ms amenazantes, ilustrados por algunos fracasos espectaculares (de los cuales el ms notable fue la cada de un cohete que termin abruptamente una misin espacial), la bsqueda de panaceas comenz. Muchas curas se ofrecieron y se olvidaron pronto. Una de ellos, sin embargo, result fructfera y ha sobrevivido: programacin orientada a objetos. Muchos curas se les ofreci,

vendido, y se olvida pronto. Uno de ellos, sin embargo, result fructfera y ha sobrevivido: programacin orientada a objetos.

Otro modelo gano terreno en la dcada de 1960, procedente de la simulacin de eventos discretos (como supermercados, lneas de montaje y logstica)

Algunos lenguajes de programacin fueron diseadas sobre la base de este modelo, pero estos lenguajes permanecieron encerrados en el campo de la simulacin de los sistemas de eventos discretos. Slo despus de la aparicin de las poderosas computadoras personales el modelo OO modelo consigui una mayor aceptacin. Ahora los sistemas de computacin cuentan con ventanas, iconos, mens, botones, barras de herramientas, todos los objetos fcilmente identificables con su estado y comportamiento individual. Luego aparecieron los lenguajes apoyados
en este modelo, entre ellos: Smalltalk (desarrollado por Adele Goldberg y Alan Kay en 1980), Object-Pascal (Larry Tesler, 1985), C + + (Bjarne Stroustrup, 1985), Obern (Niklaus Wirth, 1988), Java (Sun Microsystems, 1995), y C # (Microsoft, 2000). La orientacin a objetos se convirti tanto en una
tendencia y una palabra de moda. De hecho, la eleccin del modelo adecuado para una aplicacin es importante. No obstante, OO no es adecuado para todas las aplicaciones

La abundancia de potencia de los ordenadores El perodo desde 1985 hasta hace pocos aos se caracteriza por un enorme avance en la tecnologa de hardware. Hoy en da equipos pequeos, como telfonos mviles, tienen un poder y capacidad 100 veces ms que el mayor de hace 20 aos. Este rpido desarrollo se ha ampliado enormemente el rea de aplicaciones informticas y ha sucedido en particular en la tecnologa de las comunicaciones. Se crea antes de 1975 que el computador y las tecnologas de comunicaciones eran reas separadas. Los Electronicos han hecho de Internet omnipresente, con un ancho de banda que es de apariencia ilimitada.

En la dcada de 1990, el fenmeno de cdigo abierto se arraig y comenz a extenderse. La desconfianza con la que los programadores consideran el diseado de los sistemas grandes en el secreto industrial se convirti en manifiesto.

Aunque los programadores tenan con anterioridad una cantidad limitada de software disponible de forma gratuita, una vez que Internet se convirti en una comunidad ms amplia, los los programadores decidieron construir software de manera ms sistemtica para la distribucin de sus productos de forma gratuita a travs de Internet.

Las nociones de la calidad y la responsabilidad en caso de fallo parecan irrelevantes. El cdigo abierto aparece como la alternativa a la hegemona industrial y tambin contra la dependencia desamparada en el software comercial. A menudo es difcil en ingeniera de software distinguir entre las estrategias de negocio y las ideas cientficas. La escritura de cdigo complicado y el descifrado desagradable es aparentemente considerada ms fcil o ms econmico que el diseo cuidadoso y la descripcin de interfaces limpias.

Despilfarro de software Considerando que el increble aumento en el poder de hardware era muy beneficioso para una amplio espectro de aplicaciones (pensamos en las administraciones, bancos, ferrocarriles, lneas areas, la orientacin sistemas, la ingeniera, la ciencia), la misma no puede ser reclamada por la ingeniera de software. Sin duda, la ingeniera de software se ha beneficiado tambin desde el desarrollo sofisticado que

muchos instrumentos. Sin embargo, la calidad de sus productos apenas refleja signos de un gran progreso.
Despus de todo, el aumento de poder en s mismo fue la razn para el crecimiento aterrador de la complejidad, lo que se avanz en la metodologa de

software fue rpidamente compensado por una mayor complejidad en las tareas del software. De hecho, nuevos problemas
han sido abordados, los cuales son tan difciles que los ingenieros a menudo tienen que ser admirados ms por su optimismo y el valor para su

xito.

Lo que ha ocurrido en ingeniera de software era predecible, porque inherente en un campo de la ingeniera, donde el aumento de la demanda, el trabajo se realiza bajo presin de tiempo, y el costo de Materiales dramticamente cae. La consecuencia es un verdadero desperdicio de recursos econmicos tanto de poder de cmputo y capacidad de almacenamiento, resulta en el cdigo ineficiente y datos voluminosos. Estos residuos se han representan una grave falta de preocupacin por la calidad del software. La ineficiencia de los programas se puede cubrir fcilmente por el uso de procesadores ms rpidos, y diseo pobre mediante el uso de dispositivos para mayor almacenamiento de datos. Sin embargo, su efecto secundario es una disminucin de la calidad de la fiabilidad, robustez y facilidad de uso.

Un diseo cuidadoso consume mucho tiempo, y es costoso. Es, todava ms barato que el software poco confiable, difcil, cuando el costo de mantenimiento se tiene en cuenta. La tendencia es inquietante, y tambin lo es la complacencia de clientes.

You might also like