Ingeniería de Sistema de Software
Ingeniería de Sistema de Software
Ingeniería de Sistema de Software
Un sistema es una combinación de recursos integrados de forma tal que cumplan una función específica
en respuesta a una necesidad designada de un usuario.
Un recurso software es un programa o conjunto de programas ejecutables que proporcione algunas de las
funciones requeridas por el sistema.
Un sistema se considerará como sistema de software cuando sus recursos software constituyan su ele-
mento básico y la fuente de su funcionalidad básica. Dicho de otro modo, cuando en el proceso de
desarrollo sean los recursos software los que determinan el proceso general de desarrollo de todo el
sistema y cuando su ejecución pueda realizarse sobre una plataforma hardware genérica.
2. Perspectiva histórica
El término Ingeniería del Software o Ingeniería de Sistemas de Software fue acuñado en 1969 en el
transcurso de un curso de verano de la OTAN en Garmisch.
La programación como base del desarrollo (1955-1965): Énfasis absoluto en la tarea de escribir el código
en un lenguaje de programación. Alrededor de los nuevos lenguajes de alto nivel, los programadores se
alejan de la estructura de los ordenadores y comienzan a acercarse a la complejidad de las aplicaciones
de usuario.
La génesis (1965-1975).
Ligada a la crisis de la programación se plantea la necesidad de controlar el proceso de desarrollo. Se
definen modelos de ciclo de vida como una referencia en la que enmarcar las actividades requeridas. El
concepto de ciclo de vida en cascada surge de la necesidad del Departamento de Defensa de EE.UU. de
disponer de una documentación normalizada para todas las etapas del desarrollo y poder controlar en
base a ella a los suministradores de productos software.
La consolidación (1975-1985).
El control de las actividades de desarrollo debería permitir gestionar el proceso. Durante esta etapa
aparecen métricas para estimar a priori el coste o el tamaño del sistema; se difunde el uso de métodos de
desarrollo. Con ello, el programador se convierte en analista, diseñador o gestor. Se vislumbra la idea de
ingeniero (software).
A lo largo de estas etapas, han existido avances puntuales significativos tanto en la tecnología empleada
como en la propia percepción del proceso de desarrollo. El progreso hacia la ingeniería de sistemas de
software ha sido acumulativo en los años cubiertos por las etapas mencionadas y no se puede entender
ningún progreso sin la experiencia obtenida de éxitos y fracasos anteriores.
Si inicialmente la esperanza de una mejora de calidad del producto se centraba en el empleo de nuevos
lenguajes de programación, después se hizo necesario una mejor comprensión del ciclo de vida.
Posteriormente, fue necesario robustecer ese ciclo de vida en cascada con tecnologías de software que
facilitasen las primeras fases del ciclo de vida. Pero el empleo de métodos y herramientas software de
ayuda no hacía más predecible y eficiente el desarrollo de un gran sistema: el énfasis se situó de nuevo
sobre los aspectos de gestión con la mejora del proceso.
La ingeniería de software es una tecnologia con varias capas. Cualquier enfoque de ingeniería (incluso la
de software) debe basarse en un compromiso organizacional con la calidad. La administración total de la
calidad, alimentan la cultura de mejora continua, y es esta cultura la que lleva en última instancia al
desarrollo de enfoques cada vez más eficaces de la ingeniería de software. El fundamento en el que se
apoya la ingeniería de software es el compromiso con la calidad.
Los métodos de la ingeniería de software proporcionan la experiencia técnica para elaborar software.
Incluyen un conjunto amplio de tareas, como comunicación, análisis de los requeri-mientos, modelación
del diseño, construcción del programa, pruebas y apoyo. Los métodos de la ingeniería de software se
basan en un conjunto de principios fundamentales que gobiernan cada área de la tecnología e incluyen
actividades de modelación y otras técnicas descriptivas.
Un proceso es un conjunto de actividades, acciones y tareas que se ejecutan cuando va a crearse algún
producto del trabajo. Una actividad busca lograr un objetivo amplio (por ejemplo, comunicación con los
participantes) y se desarrolla sin importar el dominio de la aplicación, tamaño del proyecto, complejidad
del esfuerzo o grado de rigor con el que se usará la ingeniería de software. Una acción (diseño de la
arquitectura) es un conjunto de tareas que producen un producto importante del trabajo (por ejemplo, un
modelo del diseño de la arquitectura). Una tarea se centra en un objetivo pequeño pero bien definido (por
ejemplo, realizar una prueba unitaria)
que produce un resultado tangible.
La estructura del proceso establece el fundamento para el proceso completo de la ingeniería de software
por medio de la identificación de un número pequeño de actividades estructurales que sean aplicables a
todos los proyectos de software, sin importar su tamaño o complejidad.
Además, la estructura del proceso incluye un conjunto de actividades sombrilla que son aplicables a
través de todo el proceso del software. Una estructura de proceso general para la ingeniería de software
consta de cinco actividades:
Comunicación.
Antes de que comience cualquier trabajo técnico, tiene importancia crítica comunicarse y colaborar con el
cliente (y con otros participantes). Se busca entender los objetivos de los participantes respecto del
proyecto y reunir requerimientos que ayuden a definir las características y funciones del software.
Planeación.
Cualquier viaje complicado se simplifica si existe un mapa. Un proyecto de software es un viaje difícil, y la
actividad de planeación crea un "mapa" que guía al equipo mientras viaja. El mapa —llamado plan del
proyecto de software— define el trabajo de ingeniería de software al describir las tareas técnicas por
realizar, los riesgos probables, los recursos que se requieren, los productos del trabajo que se obtendrán
y una programación de las actividades.
Modelado
Ya sea usted diseñador de paisaje, constructor de puentes, ingeniero aeronáu-tico, carpintero o
arquitecto, a diario trabaja con modelos. Crea un "bosquejo" del objeto por hacer a fin de entender el
panorama general —cómo se verá arquitectónicamente, cómo ajustan entre si las partes constituyentes y
muchas caracteristicas más—. Si se requiere, refina el bosquejo con más y más detalles en un esfuerzo
por comprender mejor el problema y cómo resolverlo. Un ingeniero de software hace lo mismo al crear
modelos a fin de entender mejor los requerimientos del software y el diseño que los satisfará.
Construcción
Esta actividad combina la generación de código (ya sea manual o automatizada) y las pruebas que se
requieren para descubrir errores en este.
Estas cinco actividades estructurales genéricas se usan durante el desarrollo de programas pequeños y
sencillos, en la creación de aplicaciones web grandes y en la ingeniería de sistemas enormes y complejos
basados en computadoras. Los detalles del proceso de software serán distintos en cada caso, pero las
actividades estructurales son las mismas.
Para muchos proyectos de software, las actividades estructurales se aplican en forma iterativa a medida
que avanza el proyecto. Es decir, la comunicación, la planeación, el modelado, la construcción y el
despliegue se ejecutan a través de cierto número de repeticiones del proyecto. Cada iteración produce un
incremento del software que da a los participantes un subconjunto de características y funcionalidad
generales del software. Conforme se produce cada incremento, el software se hace más y más