Vous êtes sur la page 1sur 7

Ingeniera del Software

Publicado en 28 Diciembre, 2010 por patponto

INTRODUCCIN
La ingeniera del software, segn la definicin de la IEEE en 1993, es la aplicacin de un enfoque sistemtico, disciplinado y
cuantificable al desarrollo, operacin y mantenimiento del software. La ingeniera del software ofrece mtodos o tcnicas para
desarrollar y mantener software de calidad que resuelven problemas de todo tipo, y trata reas muy diversas de la informtica y
de las ciencias computacionales.

ORGEN
El concepto de ingeniera del software surgi en 1968, tras una conferencia en Garmisch (Alemania) que tuvo como objetivo
resolver los problemas de la crisis del software. El trmino crisis del software se us desde finales de 1960 hasta mediados de
1980 para describir los frecuentes problemas que aparecan durante el proceso de desarrollo de nuevo software. Tras la
aparicin de nuevo hardware basado en circuitos integrados, comenzaron a desarrollarse sistemas y aplicaciones mucho ms
complejos que hasta entonces no era posible construir puesto que el hardware disponible no lo permita. Estos nuevos proyectos
de desarrollo de software, en la mayora de ocasiones, no se terminaban a tiempo, lo cual tambin provocaba que el presupuesto
final del software excediera de aquel que se haba pactado. Algunos de estos proyectos eran tan crticos (sistemas de control de
aeropuertos, equipos para medicina, etc) que sus implicaciones iban ms all de las prdidas millonarias que causaban. Adems,
en muchos casos el software no daba respuesta a las verdaderas necesidades del cliente o haba que ser un usuario experto para
poder utilizarlo, todo ello sumado a que el mantenimiento de los productos era complejo y muy costoso.

El software no se produca como el hardware, que tena un proceso de fabricacin definido y dividido en fases. El resultado eran
productos de psima calidad en los que se haban invertido mucho tiempo y dinero pero que o bien no llegaban a terminarse o
bien a la larga no daban el resultado que se esperaba. Se detect que los mtodos de desarrollo de software informales que hasta
entonces haban bastado para proyectos pequeos no eran suficientes para los nuevos y grandes proyectos, y que se necesitaban
profesionales especializados en esta nueva disciplina que fueran capaces de lidiar con la creciente complejidad de los nuevos
sistemas.
Una de las primeras y ms conocidas referencias a los conceptos crisis el software e ingeniera del software fue hecha por
Edsger Dijkstra, durante la presentacin de 1972 titulada The Humble Programmer en la Association for Computing
Machinery, cuando se le hizo entrega de un Premio Turing.

NO SILVER BULLET
Durante dcadas, resolver la crisis del software desencaden en que compaas e investigadores produjeran ms y ms
herramientas software. Cada nueva tecnologa o prctica que apareci entre 1970 y 1990 fue tratada como una bala de plata
(en ingls, silver bullet) que solucionara la crisis del software.
En 1986, Fred Brooks public el artculo No Silver Bullet, argumentando que ninguna tecnologa o prctica por s misma podra
mejorar en un diez por ciento la productividad en los siguientes diez aos. El debate sobre las balas de plata continu durante la
siguiente dcada, dando lugar a numerosas interpretaciones sobre el artculo de Brooks.

Los defensores de lenguajes como Ada, o de los procesos software continuaron apostando por que su tecnologa sera la que
solucionara la crisis. Sin embargo, hubo gente que interpret el hecho de que no se encontrara una solucin nica y efectiva al
cien por cien como un fracaso de la ingeniera del software.

Si bien es cierto que la bsqueda de una nica solucin no funcion, tambin haba que ser consciente de que tampoco
existan balas de plata en ninguna otra profesin. As, con el transcurso de los aos, casi todo el mundo acept que no se
encontrara ninguna bala de plata, pero se tom esto como una prueba de que la ingeniera del software finalmente haba
madurado y que los proyectos deban tener xito gracias al trabajo duro y al esfuerzo. El campo de la ingeniera del software es
demasiado complejo y diverso para que una nica solucin resuelva todos los problemas, pero el conjunto de todas las prcticas
que surgieron y de las que surgen hoy en da son las que, bien aplicadas, permiten que la ingeniera del software desarrolle
productos de calidad.

EVOLUCIN DE LA INGENIERA DEL SOFTWARE


Con el transcurso de los aos se han desarrollado recursos que conforman la ingeniera del software, es decir, herramientas y
tcnicas de especificacin, diseo e implementacin del software: la programacin estructurada, la programacin orientada a
objetos, las herramientas CASE, la documentacin, los estndares, CORBA, los servicios web, el lenguaje UML, etc.

En combinacin con las herramientas, tambin se han hecho esfuerzos por incorporar los mtodos formales al desarrollo de
software, argumentando que si se probaba formalmente que los productos software hacan lo que se les requera, la industria del
software sera tan predecible como lo son otras ramas de la ingeniera.

La utilizacin de determinados recursos depende de la magnitud del proyecto, de la empresa a cargo, la experiencia de los
desarrolladores, el presupuesto con el que se cuenta, etc.
La ingeniera del software comprende:

Proceso de desarrollo de software (especificacin, implementacin y diseo, etc).


Metodologas para el desarrollo de software (RUP, patrones, framework).
Herramientas de desarrollo de software.

PROCESO SOFTWARE
El proceso de ingeniera de software se define como un conjunto de etapas parcialmente ordenadas con la intencin de lograr
un objetivo, en este caso, la obtencin de un producto de software de calidad. El proceso de desarrollo de software es aquel en
que las necesidades del usuario son traducidas en requerimientos de software, estos requerimientos transformados en diseo y el
diseo implementado en cdigo, el cdigo es probado, documentado y certificado para su uso operativo. Concretamente
define quin est haciendo qu, cundo hacerlo y cmo alcanzar un cierto objetivo [Jacobson 1998].
El proceso de desarrollo de software requiere por un lado un conjunto de conceptos, una metodologa y un lenguaje propio. A
este proceso tambin se le llama el ciclo de vida del software, que comprende las etapas por las que pasa un proyecto software
desde que es concebido, hasta que est listo para usarse.

Hay cuatro actividades fundamentales comunes a todo proceso software:

Especificacin: usuarios e ingenieros definen el software a producir y las restricciones en su funcionalidad.


Desarrollo: fase en la cual el software se disea y se programa.
Validacin: el software debe ser probado para asegurar que cumple con las necesidades del cliente.
Evolucin: el software debe poder ser modificado para adaptarse a cambios en el mercado y en las necesidades de los
usuarios.

Cada producto software necesita un proceso diferente. Por tanto, estas etapas genricas deben organizarse de diferente manera y
en diferentes niveles segn el tipo de software para el que se aplique el proceso. Un uso inapropiado del proceso software puede
reducir la calidad o la usabilidad del producto a ser desarrollado, e incluso incrementar los costes de desarrollo.

Los enfoques ms generales son los siguientes:

Modelo en cascada: ordena rigurosamente las etapas del ciclo de vida del software, de tal forma que el inicio de cada
etapa debe esperar a la finalizacin de la inmediatamente anterior. La primera descripcin formal la realiz en 1970
Winston W. Royce, en uno de sus artculos.

Prototipado: pertenece a los modelos de desarrollo evolutivo. El prototipo debe ser construido en poco tiempo, usando
los programas adecuados y no se deben utilizar muchos recursos, pues a partir de que ste sea aprobado se puede iniciar
el verdadero desarrollo del software.
Incremental e iterativo: Divide la funcionalidad del sistema en partes. En cada incremento, una parte de la
funcionalidad es desarrollada, desde el anlisis hasta las pruebas.
Espiral: Combinacin de procesos en cascada y prototipado. Fue definido por Barry Boehm en 1986 en el artculo A
Spiral Model of Software Development and Enhancement.

RAD (Rapid Application Development): emplea tcnicas iterativas y de prototipado. Lo introdujo James Martin en 1991.
RUP (Rationa Unified Process): El Rational Unified Process en ingls es un proceso de desarrollo de software iterativo y
junto con el Lenguaje Unificado de Modelado (UML), constituye la metodologa estndar ms utilizada para el anlisis,
implementacin y documentacin de sistemas orientados a objetos.
El RUP no es un sistema con pasos firmemente establecidos, sino un conjunto de metodologas adaptables al contexto y
necesidades de cada organizacin.
En 1987, Ivar Jacobson fund la compaa Objectory AB, que desarroll Objetory, un mtodo de desarrollo orientado a
objetos, extensin de lo que se conoca como aproximacin Ericsson. En 1995, Rational Software compr Objectory AB, y
en los siguientes aos desarrollaron y lanzaron el estndar UML (Unified Modeling Language), as como el Rational
Unified Process (RUP), que aunaba los esfuerzos y la experiencia de todas las compaas adquiridas por Rational Software.
En diciembre de 2002, IBM adquiri Rational Software.

MTODOS
Un mtodo de ingeniera de software es un enfoque estructurado para desarrollar software cuyo objetivo es facilitar la
produccin de productos software de alta calidad a un coste razonable. Indican cmo construir tcnicamente el software. Los
mtodos abarcan un amplio espectro de tareas que incluyen: planificacin y estimacin de proyectos, anlisis de los
requerimientos del sistema y del software, diseo de procedimientos algortmicos, codificacin, prueba y mantenimiento.

Los mtodos de la ingeniera de software introducen frecuentemente una notacin especial orientada al lenguaje o grfica y a un
conjunto de criterios para la calidad del software.
A lo largo de los aos se han ido desarrollando una gran cantidad de metodologas para desarrollar software, a menudo
vinculadas a algn tipo de organizacin, que adems desarrolla, apoya el uso y promueve la metodologa. La metodologa es a
menudo documentada en algn tipo de documentacin formal.

Algunas de las metodologas ms conocidas se explican a continuacin.

Programacin estructurada

Tcnica en la cual la estructura de un programa tan solo emplea tres estructuras lgicas de control: secuencia, seleccin e
iteracin. La programacin estructurada se basa en el teorema del programa estructurado demostrado por Bhm-Jacopini, el
cual establece que cualquier programa con una entrada y una salida exclusivamente es equivalente a un programa que contiene
solamente las estructuras lgicas mencionadas anteriormente.

Esta nueva forma de programar que dio lugar a programas fiables y eficientes, que adems estaban escritos de manera que
facilitaba su comprensin posterior.

Programacin orientada a objetos o POO

Los conceptos de la programacin orientada a objetos tienen origen en Simula 67, un lenguaje diseado en 1967 para hacer
simulaciones de eventos discretos, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cmputo Noruego en Oslo.
Simula introdujo la nocin de clases e instancias como parte de un paradigma de programacin explcito. Las ideas de Simula
67 influenciaron muchos lenguajes posteriores, incluyendo Smalltalk, CLOS, Object Pascal, C++

Smalltalk fue desarrollado en Xerox PARC por Alan Kay, entre otros, en la dcada de los 70. Smalltalk introdujo el trmino
POO para representar el uso de objetos y mensajes como la base de la computacin. Smalltalk fue diseado para ser un sistema
completamente dinmico en el cual las clases se podran crear y modificar en tiempo de ejecucin en lugar de estticamente.

La programacin orientada a objetos fue el estilo de programacin dominante a principio y mediados de los aos noventa, en
gran parte debido a la influencia de lenguajes como C++. Su predominio fue consolidado gracias al auge de las interfaces
grficas de usuario, para las cuales la programacin orientada a objetos est particularmente bien adaptada. En este caso, se
habla tambin de programacin dirigida por eventos.

Las caractersticas de orientacin a objetos han sido agregadas a muchos lenguajes a lo largo de los aos, incluyendo Ada,
BASIC, Fortran, Pascal, entre otros. La adicin de estas caractersticas a los lenguajes que no fueron diseados inicialmente
para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del cdigo.

As como la programacin procedural introdujo tcnicas de mejora como la programacin estructurada, los mtodos modernos
de diseo de software orientados a objetos incluyen mejoras como el uso de patrones de diseo o lenguajes de modelado como
UML.

Extreme Programming

Enfoque formulado por Kent Beck en 1999, que se diferencia de las metodologas tradicionales principalmente en que pone ms
nfasis en la adaptabilidad que en la previsibilidad. Sus defensores consideran que ser capaz de adaptarse a los cambios de
requisitos en cualquier punto de la vida del proyecto es una aproximacin mejor y ms realista que definir todos los requisitos al
comienzo e invertir esfuerzos despus en controlar los cambios.

HERRAMIENTAS
Suministran un soporte automtico o semiautomtico para los mtodos. Cuando se integran las herramientas de forma que la
informacin creada por una herramienta pueda ser usada por otra, se establece un sistema para el soporte del desarrollo del
software llamado ingeniera de software asistido por computadora (Computer Aided Software Engineering o CASE).

Ya en los aos 70 un proyecto llamado ISDOS (Information System Design and Optimization System) dise un lenguaje, y
por lo tanto un producto, que analizaba la relacin existente entre los requisitos de un problema y las necesidades que stos
generaban, el lenguaje en cuestin se denominaba PSL (Problem Statement Language) y la aplicacin que ayudaba a buscar las
necesidades de los diseadores PSA (Problem Statement Analyzer). PSL se empleaba para expresar requisitos de un sistema
mediante un lenguaje formal. El lenguaje se expresaba empleando objetos y relaciones entre ellos. Una vez compilado y sin
errores, el fichero generado era recibido por la aplicacin PSA, que generaba una base de datos con la informacin obtenida y
permita manipular el contenido y generar informes, entre otras cosas.

Aunque sos son los inicios de las herramientas informticas que ayudan a crear nuevos proyectos informticos, la primera
herramienta CASE fue Excelerator que sali a la luz en el ao 1984 y trabajaba bajo una plataforma PC.

Las herramientas CASE alcanzaron su techo a principios de los aos 90. En la poca en la que IBM haba conseguido una
alianza con la empresa de software AD/Cycle para trabajar con sus mainframes, estos dos gigantes trabajaban con herramientas
CASE que abarcaban todo el ciclo de vida del software. Pero poco a poco los mainframes han ido siendo menos utilizados y
actualmente el mercado de las Big CASE ha muerto completamente abriendo el mercado de diversas herramientas ms
especficas para cada fase del ciclo de vida del software. Por ejemplo, algunas herramientas CASE son MagicDraw (diseo),
ArchE (arquitectura) o MetaEdit (desarrollo).

Aunque no es fcil y no existe una forma nica de clasificarlas, las herramientas CASE se pueden clasificar teniendo en cuenta
los siguientes parmetros:

1. Las plataformas que soportan.


2. Las fases del ciclo de vida del desarrollo de sistemas que cubren.
3. La arquitectura de las aplicaciones que producen.
4. Su funcionalidad.

La siguiente clasificacin es la ms habitual basada en las fases del ciclo de desarrollo que cubren:

Upper CASE (U-CASE), herramientas que ayudan en las fases de planificacin, anlisis de requisitos y estrategia del
desarrollo, usando, entre otros diagramas UML.
Middle CASE (M-CASE), herramientas para automatizar tareas en el anlisis y diseo de la aplicacin.
Lower CASE (L-CASE), herramientas que semi-automatizan la generacin de cdigo, crean programas de deteccin de
errores, soportan la depuracin de programas y pruebas. Adems automatizan la documentacin completa de la aplicacin.

TENDENCIA ACTUAL
Las direcciones en las que evoluciona la ingeniera del software hoy en da pueden agruparse de la siguiente manera:

Metodologas giles: mtodos de desarrollo de software basados en procesos iterativos e incrementales, donde los
requisitos y soluciones evolucionan durante la colaboracin.
Metodologas como Scrum (1995), Extreme Programming (1999) o DSDM (1995) fueron evolucionando hasta que en
Febrero del 2001 se public Manifesto for Agile Software Development para definir la aproximacin ahora conocida
como metodologas giles.
Experimentacin: es una rama de la ingeniera del software interesada en realizar experimentos sobre software, recolectar
datos y deducir leyes y teoras de los mismos.
Desarrollo dirigido por modelos: primero se desarrollan modelos textuales grficos del software a construir, y
posteriormente se construye el software.
Lneas de productos software, en lugar de productos individuales.
A lo largo de los aos han surgido numerosas organizaciones y estndares que apoyan la ingeniera del software y que dan ms
fuerza y potencia a este mbito. Por ejemplo, el Software Engineering Institute (http://www.sei.cmu.edu/index.cfm), la IEEE
Computer Society (http://www.computer.org/portal/web/guest/home), o documentos como el Software Engineering Body of
Knowledge (SWEBOK).

En 2006, Money Magazine and Salary.com determine que la ingeniera del software era el mejor trabajo en Amrica en
trminos de crecimiento, remuneracin, nivel de estrs, flexibilidad horaria, creatividad, entorno de trabajo y capacidad de
ascenso.

A su vez, la conferencia Future of Software Engineering (FOSE) del 2000 document el estado de la ingeniera del software y
redact una lista con varios problemas para ser solucionados durante la prxima dcada.

Hoy en da, contamos con carreras universitarias, msteres, y una gran oferta formativa para profesionales del software. A pesar
de ser una disciplina joven y que sigue evolucionando, los resultados de todos los esfuerzos y mtodos desarrollados con el paso
de los aos, as como de la experiencia, permiten desarrollar productos de calidad al nivel de cualquier otra ingeniera.

REFERENCIAS

Vous aimerez peut-être aussi