La ingeniería de software es una tecnología multicapa,
cualquier enfoque de ingeniería debe apoyarse sobre un compromiso de organización de calidad.
El fundamento de la ingeniería de software es la capa del
proceso. el proceso de ingeniería de software es la unión que mantiene juntas
las capas dela tecnología y que permiten un desarrollo racional y oportuno de
la ingeniería de software.
El proceso de fine un marco de trabajo para un conjunto de áreas clave de proceso que deben establecer para la entrega de la tecnología de
la ingeniería de software. Los métodos de la ingeniería de software indican como
construir técnicamente el software. Los métodos abarcan una gama de tareas que
influyen análisis de requisito, diseño, construcción de programas, pruebas y
mantenimiento.
La ingeniería de software se divide en 4 capas que son:
HERRAMIENTAS: proporciona un enfoque automático o semiautomático para el proceso y para los métodos cuando se integran
herramientas para la información creada por una herramienta la puede utilizar
otra, se establece un sistema de soporte para el desarrollo de software llamado Ingeniería de Software asistida por computadora.
MÉTODO: Los métodos de la ingeniería de software indican
como se debe construir técnicamente el software. abarcan una gran gama de
tareas, que incluyen:
- Análisis de requisitos.
- Diseño
- Construcción de programas
- Pruebas
- Mantenimiento.
Dependen de un conjunto de principios básicos que gobiernan
cada área de la tecnología e incluyen actividades del modelado. otras técnicas descriptivas.
PROCESO: Define un marco del trabajo para un conjunto de áreas claves de proceso que se deben establecer para la entrega efectiva de la tecnología de la ingeniería de software. las áreas claves forman la base del
control del proyecto.
MODELOS DE DESARROLLO DE SOFTWARE
La ingeniería de software tiene varios modelos, paradigmas o
filosofías de desarrollo en los cuales se puede apoyar para la realización de
software, de los cuales podemos destacar a éstos por ser los más utilizados y
los más completos:
En Ingeniería de software el desarrollo en cascada, también
llamado modelo en cascada, es el enfoque metodológico que ordena rigurosamente
las etapas del ciclo de vida del software, de tal forma que el inicio de cada
etapa debe esperar a la finalización de la inmediatamente anterior.Un ejemplo
de una metodología de desarrollo en cascada es:
1. Análisis de requisitos
2. Diseño del Sistema
3. Diseño del Programa
4. Codificación
5. Pruebas
6. Implantación
7. Mantenimiento
De esta forma, cualquier error de diseño detectado en la
etapa de prueba conduce necesariamente al rediseño y nueva programación del
código afectado, aumentando los costes del desarrollo. La palabra cascada
sugiere, mediante la metáfora de la fuerza de la gravedad, el esfuerzo
necesario para introducir un cambio en las fases más avanzadas de un proyecto.
Si bien ha sido ampliamente criticado desde el ámbito
académico y la industria, sigue siendo el paradigma más seguido al día de hoy.
El desarrollo en espiral es un modelo de ciclo de vida del
software definido por primera vez por Barry Boehm en 1988, utilizado
generalmente en la Ingeniería de software. Las actividades de este modelo se
conforman en una espiral, en la que cada bucle o iteración representa un
conjunto de actividades. Las actividades no están fijadas a priori, sino que
las siguientes se eligen en función del análisis de riesgo, comenzando por el
bucle interior.
La Ingeniería de software, se vale y establece a partir de
una serie de modelos que establecen y muestran las distintas etapas y estados
por lo que pasa un producto software, desde su concepción inicial, pasando por
su desarrollo, puesta en marcha y posterior mantenimiento, hasta la retirada
del producto. A estos modelos se les denomina «modelos de ciclo de vida del
software». El primer modelo concebido fue el de Royce, más comunmente conocido
como desarrollo en cascada o desarrollo lineal secuencial. Este modelo
establece que las diversas actividades que se van realizando al desarrollar un
producto software se suceden de forma lineal.
El modelo de desarrollo de software por etapas es similar al
Modelo de prototipos ya que se muestra al cliente el software en diferentes
estados sucesivos de desarrollo, se diferencia en que las especificaciones no
son conocidas en detalle al inicio del proyecto y por tanto se van
desarrollando simultáneamente con las diferentes versiones del código.
Pueden distinguirse las siguientes fases:Especificación
conceptualAnálisis de requerimientosDiseño inicialDiseño detallado,
codificación, depuración y liberaciónEstas diferentes fases se van repitiendo
en cada etapa del diseño.Desarrollo iterativo y crecienteDesarrollo iterativo y
creciente (o incremental) es un proceso de desarrollo de software, creado en
respuesta a las debilidades del modelo tradicional de cascada.
Para apoyar el desarrollo de proyectos por medio de este
modelo se han creado frameworks (entornos de trabajo), de los cuales los dos
más famosos son el Rational Unified Process y el Dynamic Systems Development
Method. El desarrollo incremental e iterativo es también una parte esencial de
un tipo de programación conocido como Extreme Programming y los demás
frameworks de desarrollo rápido de software.
La idea principal detrás de mejoramiento iterativo es
desarrollar un sistema de programas de manera incremental, permitiéndole al
desarrollador sacar ventaja de lo que se ha aprendido a lo largo del desarrollo
anterior, incrementando, versiones entregables del sistema. El aprendizaje
viene de dos vertientes: el desarrollo del sistema, y su uso (mientras sea
posible). Los pasos claves en el proceso son comenzar con una implementación
simple de los requerimientos del sistema, e iterativa mente mejorar la secuencia
evolutiva de versiones hasta que el sistema completo esté implementado. En cada interacción se realizan cambios en el diseño y se agregan nuevas funcionalidades
y capacidades al sistema.
- Desarrollo rápido de aplicaciones
El desarrollo rápido de aplicaciones o RAD (acrónimo en
inglés de rapid application development) es un proceso de desarrollo de
software, desarrollado inicialmente por James Martin en 1980. El método
comprende el desarrollo iterativo, la construcción de prototipos y el uso de
utilidades CASE (Computer Aided Software Engineering).
Tradicionalmente, el desarrollo rápido de aplicaciones
tiende a englobar también la usabilidad, utilidad y la rapidez de ejecución.Hoy
en día se suele utilizar para referirnos al desarrollo rápido de interfaces
gráficas de usuario tales como Glade, o entornos de desarrollo integrado
completos. Algunas de las plataformas más conocidas son Visual Studio, Delphi,
Foxpro o Anjuta.
EL MODELO DE DESARROLLO CONCURRENTE
Es un modelo de tipo de red donde todas las personas actúan
simultáneamente o al mismo tiempo.
Davis Sitaram ha descrito el modelo de desarrollo
concurrente, llamado algunas veces ingeniería concurrente, de la siguiente
forma:
Los gestores de proyectos que siguen los pasos del estado
del proyecto en lo que se refiere a las fases importantes [del ciclo de vida
clásico] no tiene ideal del estado de sus proyectos. Estos son ejemplos de un
intento por seguir los pasos extremadamente simples. Tenga en cuenta que aunque
un proyecto [grande] este en la fase de codificación, hay personal de ese
proyecto implicado en actividades asociadas generalmente a muchas fases de
desarrollo simultáneamente. Por ejemplo,...el personal esta escribiendo
requisitos diseñando, codificando, haciendo pruebas y probando la integración
(todo al mismo tiempo). Los modelos de proceso de ingeniería del software de
Humphrey y Kellner han mostrado la concurrencia que existe para actividades que
ocurren para cualquier fase.
El trabajo más reciente de Kellner utiliza diagramas de
estado para representar la relación concurrente que existe entre actividades
asociadas a un acontecimiento especifico, pero falla en capturar la riqueza de
la concurrencia que existe en todas las actividades del desarrollo y de gestión
del software en mi proyecto...La mayoría de los modelos de procesos de desarrollo
del software son dirigido por el tiempo; cuanto más tarde sea, mas atrás se
encontrara en el proceso de desarrollo. (Un modelo de proceso concurrente) esta
dirigido por las necesidades del usuario, las decisiones de la gestión y los
resultados de las revisiones.El modelo de proceso concurrente se puede
representar en forma de esquema como una serie de actividades técnicas
importantes, tareas y estados asociados a ellas.
El Proceso Unificado de Rational
El Proceso Unificado de Racional (Rational Unified Process
en inglés, habitualmente resumido como RUP) es un proceso de desarrollo de
software y junto con el Lenguaje Unificado de Modelado UML, constituye la
metodología estándar más utilizada para el análisis, implementación y
documentación de sistemas orientados a objetos.
El RUP no es un sistema con pasos firmemente establecidos,
sino un conjunto de metodologías adaptables al contexto y necesidades de cada
organización.
También se conoce por este nombre al software desarrollado
por Rational, hoy propiedad de IBM, el cual incluye información entrelazada de
diversos artefactos y descripciones de las diversas actividades. Está incluido
en el Rational Method Composer (RMC), que permite la personalización de acuerdo
a necesidades.
Originalmente se diseñó un proceso genérico y de dominio
público, el Proceso Unificado, y una especificación más detallada, el Rational
Unified Process, que se vendiera como producto independiente.
El Proceso Unificado de Desarrollo Software o simplemente
Proceso Unificado es un marco de desarrollo de software que se caracteriza por
estar dirigido por casos de uso, centrado en la arquitectura y por ser
iterativo e incremental. El refinamiento más conocido y documentado del Proceso
Unificado es el Proceso Unificado de Rational o simplemente RUP.
El Proceso Unificado no es simplemente un proceso, sino un
marco de trabajo extensible que puede ser adaptado a organizaciones o proyectos
específicos. De la misma forma, el Proceso Unificado de Rational, también es un
marco de trabajo extensible, por lo que muchas veces resulta imposible decir si
un refinamiento particular del proceso ha sido derivado del Proceso Unificado o
del RUP. Por dicho motivo, los dos nombres suelen utilizarse para referirse a
un mismo concepto.
El nombre Proceso Unificado se usa para describir el proceso
genérico que incluye aquellos elementos que son comunes a la mayoría de los
refinamientos existentes. También permite evitar problemas legales ya que
Proceso Unificado de Rational o RUP son marcas registradas por IBM (desde su
compra de Rational Software Corporation en 2003). El primer libro sobre el tema
se denominó, en su versión española, El Proceso Unificado de Desarrollo de Software
(ISBN 84-7829-036-2) y fue publicado en 1999 por Ivar Jacobson, Grady Booch y
James Rumbaugh, conocidos también por ser los desarrolladores del UML, el
Lenguaje Unificado de Modelado. Desde entonces los autores que publican libros
sobre el tema y que no están afiliados a Rational utilizan el término Proceso
Unificado, mientras que los autores que pertenecen a Rational favorecen el
nombre de Proceso Unificado de Rational.
EL SOFTWARE COMO PRODUCTO
Hoy en día el software tiene un doble papel. Es un producto,
al mismo tiempo, un vehículo para entregarlo.
Como producto, hace entrega de la potencia que incorpora el
hardware informativo, o más ampliamente, una red de computadoras que es
accesible por hardware local. Si reside dentro de un teléfono celular o opera
dentro de una computadora central, el software es un transformador de
información, produciendo, gestionando, modificando, mostrando, adquiriendo o
transmitiendo información que puede ser tan simple como un solo bit, o tan
complejo como una presentació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).La
sostificacion y la complejidad pueden producir resultados deslumbrantes cuando
un sistema tiene éxito, pero también pueden suponer grandes problemas para
aquellos que deben construir sistemas complejos.
EL SOFTWARE COMO PROCESO
Construir software de computadora es un proceso de
aprendizaje iterativo, y el resultado, algo que Baetjer podría llamar “capital
de software”, es el conjunto de software reunido, depurado y organizado
mientras se desarrolla el proceso.Pero, ¿Qué es exactamente el proceso del
software desde un punto de vista técnico? Un proceso de software como un marco
de trabajo de las tareas que se requieren para construir software de calidad.
¿Es “proceso” sinónimo de ingeniería de software? La respuesta es sí y no. Un
proceso de software define el enfoque que se toma cuando el software es tratado
por la ingeniería.Pero la ingeniería de software también comprende las
tecnologías que tienen el proceso, métodos técnicos y herramientas
automatizadas.Aun más importante es que la ingeniería de software la realizan
personas creativas, con conocimiento, que deberían trabajar dentro de un
proceso del software definido y avanzado que es apropiado para los productos
que construyan y para las demandas de su mercado.
Marco de trabajo
DefiniciónSerie de tareas relacionadas que produce un
producto de trabajo en la ingeniería de software .
Actividades del marco de trabajo
Comunicación : intensa colaboración y comunicacion de los
clientes. Incluye la investigacion de requisitos.
Planeación: Establece un plan de trabajo de ingeniería de
software incluye tareas tecnicas, riesgos y recursos.
Modelado: Creacón de modelos que permiten al desarrollador y
al clente entender mejor los requisitos del software.
Construcción: Combina la generación de código y realizacion
de pruebas necesarias para descubrir errores.
Despliegue: Al entregar el software al clente este lo evalua
y proporciona información a partir de su evaluación.
Actividades Sombrias: Se aplican durante el proceso de
software.entre ellas estan:Seguimiento y control del proyecto de
software,Gestón de riesgo,Aseguramiento de la calidad del
software,Medición,Gestión de configuración,Gestión de reteutilización.