Conceptos y Evolución de la Ingeniería del Software

Anuncio
Introducción
La Ingeniería del Software va a introducirse en la cuarta década de su existencia y sufre de los muchos puntos
fuertes y débiles. La Ingeniería del Software se va aproximando a su edad media con muchos logros a sus
espaldas, pero con un trabajo significativo todavía por hacer. Hoy en día, está reconocida como una disciplina
legítima, digna de tener una investigación seria, un estudio concienzudo y un grande y tumultuoso debate. En
la industria el Ingeniero del software ha sustituido al programador como titulo de trabajo preferente. Los
modelos de procesos de software, métodos de ingeniería de software y herramientas se han adoptado con éxito
en el amplio espectro de las aplicaciones industriales. Los gestores y usuarios reconocen la necesidad de un
enfoque más disciplinado del software.
La búsqueda de técnicas que mejorasen la calidad y permitiesen reducir los costos de las soluciones basadas
en computadoras ha sido uno de los objetivos más perseguidos desde los inicios de la informática. A
mediados de los 60, la creación de un producto software se convertía en una tarea angustiosa, se hizo por tanto
necesario introducir una serie de herramientas y procedimientos que facilitaran por un lado, la labor de
creación de nuevo software y por otro, la comprensión y el manejo del mismo. Estos fueron los inicios de la
Ingeniería del Software. Con el paso del tiempo, la evolución de estos métodos nos han llevado a reconocer la
Ingeniería del Software como una verdadera disciplina, derivada de una investigación seria y de un estudio
minucioso.
La evolución del Software
Durante los primeros años de la era de la computadora, el software se contemplaba como un añadido. La
programación de computadoras era un "arte de andar por casa" para el que existían pocos métodos
sistemáticos. El desarrollo del software se realizaba virtualmente sin ninguna planificación, hasta que los
planes comenzaron a descalabrarse y los costes a correr. Los programadores trataban de hacer las cosas bien,
y con un esfuerzo heroico, a menudo salían con éxito. El software se diseñaba a medida para cada aplicación y
tenia una distribución relativamente pequeña.
La mayoría del software se desarrollaba y era utilizado por la misma persona u organización. La misma
persona lo escribía, lo ejecutaba y, si fallaba, lo depuraba. Debido a este entorno personalizado del software,
el diseño era un proceso implícito, realizado en la mente de alguien y, la documentación normalmente no
existía.
La segunda era en la evolución de los sistemas de computadora se extienden desde la mitad de la década de
los sesenta hasta finales de los setenta. La multiprogramación y los sistemas multiusuario introdujeron nuevos
conceptos de interacción hombre − maquina. Las técnicas interactivas abrieron un nuevo mundo de
aplicaciones y nuevos niveles de sofisticación del hardware y del software. Los sistemas de tiempo real
podían recoger, analizar y transformar datos de múltiples fuentes, controlando así los procesos y produciendo
salidas en milisegundos en lugar de minutos. Los avances en los dispositivos de almacenamiento en línea
condujeron a la primera generación de sistemas de gestión de bases de datos.
La segunda era se caracterizo también por el establecimiento del software como producto y la llegada de las
"casas del software". Los patronos de la industria, del gobierno y de la universidad se aprestaban a
"desarrollar el mejor paquete de software" y ganar así mucho dinero.
Conforme crecía el numero de sistemas informáticos, comenzaron a extenderse las bibliotecas de software de
computadora. Las casas desarrollaban proyectos en los que se producían programas de decenas de miles de
sentencia fuente. Todos esos programas, todas esas sentencias fuente tenían que ser corregidos cuando se
detectaban fallos, modificados cuando cambiaban los requisitos de los usuarios o adaptados a nuevos
1
dispositivos hardware que se hubieran adquirido. Estas actividades se llamaron colectivamente mantenimiento
del software.
La tercera era en la evolución de los sistemas de computadora comenzó a mediados de los años setenta y
continuo mas allá de una década. El sistema distribuido, múltiples computadoras, cada una ejecutando
funciones concurrente y comunicándose con alguna otra, incrementó notablemente la complejidad de los
sistemas informáticos. Las redes de área local y de área global, las comunicaciones digitales de alto ancho de
banda y la creciente demanda de acceso "instantáneo" a los datos, supusieron una fuerte presión sobre los
desarrolladores del software.
La conclusión de la tercera era se caracterizo por la llegada y amplio uso de los microprocesadores. El
microprocesador ha producido un extenso grupo de productos inteligentes, desde automóviles hasta hornos
microondas, desde robots industriales a equipos de diagnósticos de suero sanguíneo.
La cuarta era de la evolución de los sistemas informáticos se aleja de las computadoras individuales y de los
programas de computadoras, dirigiéndose al impacto colectivo de las computadoras y del software. Potentes
maquinas personales controladas por sistemas operativos sofisticados, en redes globales y locales,
acompañadas por aplicaciones de software avanzadas se han convertido en la norma.
La industria del software ya es la cuna de la economía del mundo. Las técnicas de la cuarta generación para el
desarrollo del software están cambiando en la forma en que la comunidad del software construye programas
informáticos. Las tecnologías orientadas a objetos están desplazando rápidamente los enfoques de desarrollo
de software más convencionales en muchas áreas de aplicaciones.
Sin embargo, un conjunto de problemas relacionados con el software ha persistido a través de la evolución de
los sistemas basados en computadora, y estos problemas continúan aumentando.
• los avances del software continúan dejando atrás nuestra habilidad de construir software para alcanzar el
potencial del hardware.
• Nuestra habilidad de construir nuevos programas no pueden ir al mismo ritmo de la demanda de nuevos
programas, ni podemos construir programas lo suficientemente rápido como para cumplir las necesidades
del mercado y de los negocios.
• El uso extenso de computadoras ha hecho de la sociedad cada vez más dependiente de la operación fiable
del software. Cuando el software falla, pueden ocurrir daños económicos enormes y ocasionar sufrimiento
humano.
• Luchamos por construir software informático que tengan fiabilidad y alta calidad.
• Nuestra habilidad de soportar y mejorar los programas existentes se ve amenazada por diseños pobres y
recursos inadecuados.
En respuesta a estos problemas, las practicas de la Ingeniería del Software se están adoptando en toda la
industria.
Que es la Ingeniería del Software ?
La Ingeniería del software es una disciplina o área de la Informática o Ciencias de la Computación, que ofrece
métodos y técnicas para desarrollar y mantener software de calidad que resuelven problemas de todo tipo.
Hoy día es cada vez mas frecuente la consideración de la Ingeniería del Software como una nueva área de la
Ingeniería, y el Ingeniero del Software comienza a ser una profesión implantada en el mundo laboral
internacional, con derechos, deberes y responsabilidades que cumplir, junto a una, ya, reconocida
consideración social en el mundo empresarial y, por suerte, para esas personas con brillante futuro.
La ingeniería del software trata con áreas muy diversas de la Informática y de las Ciencias de la Computación,
2
tales como construcción de compiladores, sistemas operativos o desarrollos de Intranet/Internet, abordando
todas las fases del ciclo de vida del desarrollo de cualquier tipo de sistemas de información y aplicables a una
infinidad de áreas tales como: negocios, investigación científica, medicina, producción, logística, banca,
control de trafico, meteorología, el mundo del derecho, la red de redes Internet, redes Intranet y Extranet, etc.
Definición del termino Ingeniería del Software
El termino Ingeniería se define en el Diccionario de la Real Academia Española de la Lengua como: "1.
Conjunto de conocimientos y técnicas que permiten aplicar el saber científico a la utilización de la materia y
de las fuentes de energía. 2. Profesión y ejercicio del Ingeniero" y el termino Ingeniero se define como:
persona que profesa o ejerce la Ingeniería. De igual modo la Real Academia de Ciencias Exactas, Físicas y
Naturales de España define el termino Ingeniería como: " Un conjunto de conocimientos y técnicas cuya
aplicación permite la utilización racional de los materiales y de los recursos naturales, mediante invenciones,
construcciones u otras realizaciones provechosas para el hombre".
Evidentemente, si la Ingeniería del Software es una nueva Ingeniería, parece lógico que reúna las propiedades
citadas en las definiciones anteriores. Sin embargo ni el DRAE(Diccionario de la Real Academia Española de
la Lengua), ni la Real Academia Española de Ciencias han incluido todavía el termino en sus ultimas
ediciones; en consecuencia vamos a recurrir para su definición mas precisa a algunos de los autores mas
acreditados que comenzaron en su momento a utilizar el termino o bien en las definiciones dadas por
organismos internacionales profesionales de prestigio tales como IEEE o ACM, de los cuales se han
seleccionado las siguientes definiciones de Ingeniería del Software.
Definición 1:
Ingeniería del Software es el estudio de los principios y metodologías para desarrollo y mantenimiento de
sistemas de software [Zelkovits, 1978].
Definición 2:
Ingeniería del Software es la aplicación practica del conocimiento científico en el diseño y construcción de
programas de computadora y la documentación necesaria requerida para desarrollar, operar(funcionar) y
mantenerlos [Bohem, 1976].
Definición 3:
Ingeniería del Software trata del establecimiento de los principios y métodos de la Ingeniería a fin de obtener
software de modo rentable que sea fiable y trabaje en máquinas reales [Bauer, 1972].
Definición 4:
La aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación(funcionamiento)
y mantenimiento del software; es decir, la aplicación de Ingeniería al software [IEEE, 1993].
Una perspectiva industrial
En los primeros días de la informática, los sistemas basados en computadora se desarrollaban usando técnicas
de gestión orientadas a hardware. Los gestores del proyecto se centraban en el hardware, debido a que era el
factor principal del presupuesto en el desarrollo del sistema. Para controlar los costes del hardware, los
gestores instituyeron controles formales y estándares técnicos. Exigían un análisis y diseño completo antes de
que algo se construyera. Median el proceso para determinar donde podían hacerse mejoras. Dicho
sencillamente, aplicaban los controles, los métodos y las herramientas que reconocemos como Ingeniería del
3
Hardware. Desgraciadamente, el software no era normalmente mas que un añadido.
En los primeros días, la programación se veía como un arte. Existían pocos métodos formales y pocas
personas los usaban.
Hoy, la distribución de costes en el desarrollo de sistemas informáticos ha cambiado drásticamente. El
software, en lugar del hardware, es normalmente el elemento principal del coste.
En las décadas pasadas los ejecutivos y muchos aprendices técnicos se habían hechos las siguientes preguntas:
• Por qué lleva tanto tiempo terminar los programas?
• Por qué es tan elevado el coste?
• Por qué no podemos encontrar todos los errores antes de entregar el software a nuestros clientes?
• Por qué nos resulta difícil constatar el progreso conforme se desarrolla el software?
Estas y otras muchas cuestiones son una manifestación del carácter del software y de la forma en que se
desarrolla, un problema que ha llevado a la adopción de la Ingeniería del Software como practica.
Competitividad del Software
Durante muchos años, los desarrolladores de software empleados por grandes y pequeñas compañías eran los
únicos en este campo. Como todos los programas se construían de forma personalizada, los desarrolladores de
este software domestico dictaban los costes, planificación y calidad. Hoy, todo esto ha cambiado.
El software ahora es una empresa extremadamente competitiva. El software que se construía internamente
ahora se puede adquirir en tiendas. Muchas empresas que en su momento pagaban legiones de programadores
para crear aplicaciones especializadas ahora ofrecen a un tercero mucho del trabajo del software.
El Software
La descripción de software en un libro de texto podría tomar la forma siguiente: el software es (1)
instrucciones que cuando se ejecutan proporcionan la función y el rendimiento deseados, (2) estructuras de
datos que permiten a los programas manipular adecuadamente la información, y (3) documentos que
describen la operación y el uso de programas.
Características del Software
Para poder comprender lo que es el software (y consecuentemente la Ingeniería del Software), es importante
examinar las características del software que lo diferencian de otras cosas que los hombres pueden construir.
El software es un elemento del sistema que es lógico, en lugar de físico. Por lo tanto el software tiene unas
características considerablemente distintas a las del hardware:
• El software se desarrolla, no se fabrica en un sentido clásico. Aunque existen similitudes entre el
desarrollo del software y la construcción del hardware, ambas actividades son fundamentalmente diferentes.
En ambas actividades la buena calidad se adquiere mediante un buen diseño, pero la fase de construcción
del hardware puede introducir problemas de calidad que no existen (o son fácilmente corregibles) en el
software. Ambas actividades dependen de las personas, pero la relación entre las personas dedicadas y el
trabajo realizado es completamente diferente para el software. Ambas actividades requieren de la
construcción de un producto, pero los métodos son diferentes.
Los costes del software se encuentran en la ingeniería. Esto significa que los proyectos de software no se
4
pueden gestionar como si fueran proyectos de fabricación.
• El software no se estropea. El software no es susceptible a los males del entorno que hacen que el hardware
se estropee. Otro aspecto de ese deterioro ilustra la diferencia entre el hardware y el software. Cuando un
componente se estropea, se sustituye por una pieza de repuesto. No hay pieza de repuesto para el software.
Cada fallo en el software indica un error en el diseño o en el proceso mediante el que se tradujo el diseño a
código maquina ejecutable. Por tanto, el mantenimiento del software tiene una complejidad
considerablemente mayor que la del mantenimiento del hardware.
• La mayoría del software se construye a medida, en vez de ensamblar componentes existentes. No existen
catálogos de componentes de software. Se puede comprar software ya desarrollado, pero solo como una
unidad completa, no como componentes que pueden reensamblarse en nuevos programas.
importante para un componente de software de alta calidad. El componente debería diseñarse
Componentes del Software
La reutilización es una característica e implementarse para que pueda volver a ser reutilizado en muchos
programas diferentes.
Los componentes de software se construyen mediante un lenguaje de programación que tiene un vocabulario
limitado, una gramática definida explícitamente y reglas bien formadas de sintaxis y semántica.
Aplicaciones del Software
El software puede aplicarse en cualquier situación en la que se haya definido previamente un conjunto
especifico de pasos procedimentales (es decir, un algoritmo). (Excepciones notables a esta regla son el
software de los sistemas expertos y de redes neuronales).
Las siguientes áreas del software indican la amplitud de las aplicaciones potenciales:
• Software de Sistemas: El software de sistemas es un conjunto de programas que han sido escritos para
servir a otros programas. El área del Software de Sistemas se caracteriza por una fuerte interacción con el
hardware de la computadora; una gran utilización por múltiples usuarios; una operación concurrente que
requiere una planificación, una compartición de recursos y una sofisticada gestión de procesos; unas
estructuras de datos complejas y múltiples interfaces externas. (p. Ej.: compiladores, editores, utilidades,
ciertos componentes del sistema operativo, utilidades de manejo de periféricos, procesadores de
telecomunicaciones).
• Software de Tiempo Real: El software que mide/analiza/controla sucesos del mundo real conforme
ocurren, se denomina de tiempo real. Entre los elementos del software de tiempo real se incluyen: un
componente de adquisición de datos que recolecta y da formato a la información recibida del entorno
externo, un componente de análisis que transforma la información recibida del entorno externo, un
componente de análisis que transforma la información según lo requiera la aplicación, un componente de
control/salida que responda al entorno externo y un componente de monitorización que coordina todos los
demás componentes, de forma tal que pueda mantenerse la respuesta en tiempo real.
• Software de Gestión: El procesamiento de información comercial constituye la mayor de las áreas de
aplicación del software. Los sistemas discretos (p. Ej.: nominas, cuentas de haberes/débitos, inventarios,
etc.), han evolucionado hacia el software de sistemas de información de gestión (SIG), que accede a una o
más bases de datos grandes que contienen información comercial. Las aplicaciones en esta área
reestructuran los datos existentes para facilitar las operaciones comerciales o gestionar la toma de
decisiones. Además de las tareas convencionales de procesamiento de datos, las aplicaciones de software de
gestión también realizan calculo interactivo (p. Ej. : el procesamiento de transacciones en puntos de ventas).
• Software de Ingeniería y Científico: El software de Ingeniería y Científico está caracterizado por los
5
algoritmos de manejo de números. Las aplicaciones van desde la astronomía a la vulcanología, desde el
análisis de la presión de los automotores a la dinámica orbital de los lanzadores espaciales y desde la
biología molecular a la fabricación automática.
• Software Empotrado: El software Empotrado reside en memoria de solo lectura y se utiliza para controlar
productos y sistemas de los mercados industriales y de consumo. El software empotrado puede ejecutar
funciones muy limitadas y curiosas (p. Ej.: el control de las teclas de un horno de microondas) o suministrar
una función significativa y con capacidad de control (p. Ej.: funciones digitales en un automóvil, tales como
control de la gasolina, indicaciones en el salpicadero, sistemas de frenado, etc.).
• Software de Computadoras Personales: El mercado del software de computadoras personales ha
germinado en la pasada década. El procesamiento de textos, las hojas de calculo, los gráficos por
computadora, multimedia, entretenimientos, gestión de bases de datos, aplicaciones financieras de negocios
y personales, y redes o acceso a bases de datos externas son algunas de los cientos de aplicaciones.
• Software de Inteligencia Artificial: El software de inteligencia artificial (IA) hace uso de algoritmos no
numéricos para resolver problemas complejos para los que no son adecuados el calculo o el análisis directo.
El área más activa de la IA es la de los sistemas expertos, también llamados sistemas basados en el
conocimiento.
Hoy en día el software tiene un doble papel. Es un producto y, al mismo tiempo, el vehículo para hacer
entrega de un producto. Como producto, hace entrega de la potencia informática del hardware informático. Si
reside dentro de un teléfono celular u opera dentro de una computadora central, el software es un
transformador de información, produciendo, gestionando, adquiriendo, modificando, mostrando o
transmitiendo información que puede ser tan simple como un solo bit, o tan compleja como una simulación en
multimedia. Como vehículo utilizado para hacer entrega del producto, el software actúa como la base de
control de la computadora (sistemas operativos), la comunicación de información (redes), y la creación y
control de otros programas (herramientas de software y entornos).
El software de computadora, se ha convertido en el alma mater. Es la maquina que conduce a la toma de
decisiones comerciales. Sirve como la base de investigación científica moderna y de resolución de problemas
de ingeniería. Es el factor clave que diferencia los productos y servicios modernos. Está inmerso en sistemas
de todo tipo: de transportes, médicos, de telecomunicaciones, militares, procesos industriales,
entretenimientos, productos de oficina, etc. El software será el que nos lleve de la mano en los avances en
todo desde la educación elemental a la Ingeniería Genética.
Evolución de la Ingeniería del Software
Inicialmente la programación de las computadoras era un arte que no disponía de métodos sistemáticos en los
que poder basarse para la realización de productos software. Se realizaban sin ninguna planificación.
Evolución y Perspectivas de la Ingeniería del Software Posteriormente, desde mediados de los 60 hasta finales
de los 70 se caracterizó por el establecimiento del software como un producto que se desarrollaba para una
distribución general. En esta época nació lo que se conoce como el mantenimiento del software que se da
cuando cambian los requisitos de los usuarios y se hace necesaria la modificación del software. El esfuerzo
requerido para este mantenimiento era en la mayoría de los casos tan elevado que se hacía imposible su
mantenimiento. A continuación, surge una etapa que se caracteriza por la aparición de una serie de técnicas
como la Programación Estructurada y las Metodologías de Diseño que solucionan los problemas anteriores. A
finales de esta etapa aparecen las herramientas CASE, aunque como podemos imaginar eran muy
rudimentarias.
Conclusión
El software se ha convertido en el elemento clave de la evolución de los sistemas y productos informáticos.
En las pasadas cuatro décadas, el software ha pasado de ser una resolución de problemas especializadas y una
herramienta de análisis de información, a ser una industria por si misma. Pero la temprana cultura e historia de
6
la programación ha creado un conjunto de problemas que persisten todavía. El software se ha convertido en un
factor que limita la evolución de los sistemas informáticos. El software se compone de programas, datos y
documentos. Cada uno de estos elementos componen una configuración que se crea como parte del proceso de
la Ingeniería del Software. El intento de la Ingeniería del Software es proporcionar un marco de trabajo para
construir software con mayor calidad.
INGENIERIA DEL SOFTWARE I
Introducción
Concepto
Evolución
7
Descargar