INTRODUCCION
Modelos prescriptivos
¿Qué es prescriptivo?
Son aquellos textos cuyo mensaje se emite con el fin de regular o guiar el comportamiento del receptor en una situación determinada.
Cualquier organización de la ingeniería del software debe describir un conjunto único de actividades dentro del marco de trabajo para los procesos del software que adopto. También debe llenar cada actividad del marco del trabajo con un conjunto de acciones de ingeniería del software, y definir cada acción en cuanto a un conjunto de tareas que indique el trabajo que debe completarse para alcanzar la meta de desarrollo. Después de la organización debe adaptar los modelos del proceso resultante y ajustarlo a la naturaleza específica de cada proyecto, a las personas que lo realizaran, y el ambiente en que se ejecutara el trabajo. Sin importar el modelo del proceso seleccionado, los ingenieros los software han dirigido de manera tradicional un marco de trabajo genérico para el proceso, el cual incluye las siguientes actividades dentro del marco: comunicación, planeación, modelado, construcción y desarrollo.
Cualquier organización de la ingeniería del software debe describir un conjunto único de actividades dentro del marco de trabajo para el proceso del software que adopto. Cada organización escoge el modelo de proceso que se acondicione a sus necesidades, los ingenieros por su parte dentro del marco de trabajo deben apegarse a las siguientes actividades:
* Comunicación
* Planeación
* Modelado
* desarrollo.
Modelos prescriptivos
¿Qué es prescriptivo?
Son aquellos textos cuyo mensaje se emite con el fin de regular o guiar el comportamiento del receptor en una situación determinada.
Cualquier organización de la ingeniería del software debe describir un conjunto único de actividades dentro del marco de trabajo para los procesos del software que adopto. También debe llenar cada actividad del marco del trabajo con un conjunto de acciones de ingeniería del software, y definir cada acción en cuanto a un conjunto de tareas que indique el trabajo que debe completarse para alcanzar la meta de desarrollo. Después de la organización debe adaptar los modelos del proceso resultante y ajustarlo a la naturaleza específica de cada proyecto, a las personas que lo realizaran, y el ambiente en que se ejecutara el trabajo. Sin importar el modelo del proceso seleccionado, los ingenieros los software han dirigido de manera tradicional un marco de trabajo genérico para el proceso, el cual incluye las siguientes actividades dentro del marco: comunicación, planeación, modelado, construcción y desarrollo.
Cualquier organización de la ingeniería del software debe describir un conjunto único de actividades dentro del marco de trabajo para el proceso del software que adopto. Cada organización escoge el modelo de proceso que se acondicione a sus necesidades, los ingenieros por su parte dentro del marco de trabajo deben apegarse a las siguientes actividades:
* Comunicación
* Planeación
* Modelado
* desarrollo.
3.1 Modelos en cascada:
El modelo en cascada, es
el enfoque metodológico que ordena rigurosamente las etapas delproceso para el desarrollo de software, de tal
forma que el inicio de cada etapa debe esperar a la finalización de la etapa
anterior.
Un ejemplo de una metodología
de desarrollo en cascada es:
Análisis de requisitos.
Diseño del Sistema.
Diseño del Programa.
Codificación.
Pruebas.
Implantación.
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.
Análisis de requisitos:
En esta fase se analizan
las necesidades de los usuarios finales del software para determinar qué
objetivos debe cubrir. De esta fase surge una memoria llamada SRD (documento de
especificación de requisitos), que contiene la especificación completa de lo
que debe hacer el sistema sin entrar en detalles internos.
Es importante señalar
que en esta etapa se debe consensuar todo lo que se requiere del
sistema y será aquello lo que seguirá en las siguientes etapas, no pudiéndose
requerir nuevos resultados a mitad del proceso de elaboración del software.
Diseño del Sistema:
Descompone y organiza el
sistema en elementos que puedan elaborarse por separado, aprovechando las
ventajas del desarrollo en equipo. Como resultado surge el SDD (Documento de
Diseño del Software), que contiene la descripción de la estructura relacional
global del sistema y la especificación de lo que debe hacer cada una de sus
partes, así como la manera en que se combinan unas con otras.
Es conveniente
distinguir entre diseño de alto nivel o arquitectónico y diseño detallado. El
primero de ellos tiene como objetivo definir la estructura de la solución (una
vez que la fase de análisis ha descrito el problema) identificando grandes
módulos (conjuntos de funciones que van a estar asociadas) y sus relaciones.
Con ello se define la arquitectura de la solución elegida. El segundo define
los algoritmos empleados y la organización del código para comenzar la
implementación.
Diseño del Programa:
Es la fase en donde se
realizan los algoritmos necesarios para el cumplimiento de los requerimientos
del usuario así como también los análisis necesarios para saber que
herramientas usar en la etapa de Codificación.
Codificación:
Es la fase en donde se
implementa el código
fuente, haciendo uso de prototipos así como de pruebas y ensayos
para corregir errores.
Dependiendo del lenguaje
de programación y su versión se crean las bibliotecas y componentes
reutilizables dentro del mismo proyecto para hacer que la programación sea un
proceso mucho más rápido.
Pruebas:
Los elementos, ya
programados, se ensamblan para componer el sistema y se comprueba que funciona
correctamente y que cumple con los requisitos, antes de ser entregado al
usuario final.
Verificación:
Es la fase en donde el
usuario final ejecuta el sistema, para ello el o los programadores ya
realizaron exhaustivas pruebas para comprobar que el sistema no falle.
Mantenimiento:
Una de las etapas mas
criticas, ya que se destina un 75% de los recursos, es el mantenimiento del
Software ya que al utilizarlo como usuario final puede ser que no cumpla con
todas nuestras expectativas.

Variantes:
Existen variantes de
este modelo; especialmente destacamos la que hace uso de prototiposy en la que se establece un ciclo antes de llegar a
la fase de mantenimiento, verificando que el sistema final este libre de
fallos.
Desventajas:
En la vida real, un
proyecto rara vez sigue una secuencia lineal, esto crea una mala implementación
del modelo, lo cual hace que lo lleve al fracaso.
El proceso de creación
del software tarda mucho tiempo ya que debe pasar por el proceso de prueba y
hasta que el software no esté completo no se opera. Esto es la base para que
funcione bien.
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 costos del desarrollo.
3.2.
MODELOS EVOLUTIVOS
El software evoluciona
con el tiempo, los requisitos del usuario y del producto suelen cambiar
conforme se desarrolla el mismo. Las fechas de mercado y la competencia hacen
que no sea posible esperar a poner en el mercado un producto absolutamente
completo, por lo que se aconsejable introducir una versión funcional limitada
de alguna forma para aliviar las presiones competitivas.
En esas u otras
situaciones similares los desarrolladores necesitan modelos de progreso que
estén diseñados para acomodarse a una evolución temporal o progresiva, donde
los requisitos centrales son conocidos de antemano, aunque no estén bien
definidos a nivel detalle.
En el modelo cascada y
cascada realimentado no se tiene demasiado en cuenta la naturaleza evolutiva
del software, se plantea como estático, con requisitos bien conocidos y
definidos desde el inicio.
Los evolutivos son
modelos iterativos, permiten desarrollar versiones cada vez más completas y
complejas, hasta llegar al objetivo final deseado; incluso evolucionar más allá,
durante la fase de operación.
Los modelos «iterativo
incremental» y «espiral» (entre otros) son dos de los más conocidos y
utilizados del tipo evolutivo.
Modelo iterativo
incremental: En términos generales, se puede distinguir, en la figura 4,
los pasos generales que sigue el proceso de desarrollo de un producto software.
En el modelo de ciclo de vida seleccionado, se identifican claramente dichos
pasos. La descripción del sistema es esencial para especificar y confeccionar
los distintos incrementos hasta llegar al producto global y final. Las
actividades concurrentes (especificación, desarrollo y validación) sintetizan
el desarrollo pormenorizado de los incrementos, que se hará posteriormente.
Muestra en forma muy
esquemática, el funcionamiento de un ciclo iterativo incremental, el cual
permite la entrega de versiones parciales a medida que se va construyendo el
producto final.6 Es decir, a medida
que cada incremento definido llega a su etapa de operación y mantenimiento.
Cada versión emitida incorpora a los anteriores incrementos las funcionalidades
y requisitos que fueron analizados como necesarios.
El incremental es
un modelo de tipo evolutivo que está basado en varios ciclos Cascada
Realimentados aplicados repetidamente, con una filosofía iterativa. En la
figura se muestra un refino del diagrama previo, bajo un esquema temporal, para
obtener finalmente el esquema del modelo de ciclo de vida Iterativo
Incremental, con sus actividades genéricas asociadas. Aquí se observa
claramente cada ciclo cascada que es aplicado para la obtención de un incremento;
estos últimos se van integrando para obtener el producto final completo. Cada
incremento es un ciclo Cascada Realimentado, aunque, por simplicidad, en la
figura se muestra como secuencial puro.
Se observa que existen
actividades de desarrollo (para cada incremento) que son realizadas en paralelo
o concurrentemente, así por ejemplo, en la figura, mientras se realiza el
diseño detalle del primer incremento ya se está realizando en análisis del
segundo. La figura es sólo esquemática, un incremento no necesariamente se
iniciará durante la fase de diseño del anterior, puede ser posterior (incluso
antes), en cualquier tiempo de la etapa previa. Cada incremento concluye con la
actividad de «operación y mantenimiento» (indicada como «Operación» en la
figura), que es donde se produce la entrega del producto parcial al cliente. El
momento de inicio de cada incremento es dependiente de varios factores: tipo de
sistema; independencia o dependencia entre incrementos (dos de ellos totalmente
independientes pueden ser fácilmente iniciados al mismo tiempo si se dispone de
personal suficiente); capacidad y cantidad de profesionales involucrados en el
desarrollo; etc.
Bajo este modelo se
entrega software «por partes funcionales más pequeñas», pero reutilizables,
llamadas incrementos. En general cada incremento se construye sobre aquel que
ya fue entregado.
Como se muestra en la
figura, se aplican secuencias Cascada en forma escalonada, mientras progresa el
tiempo calendario. Cada secuencia lineal o Cascada produce un incremento y a
menudo el primer incremento es un sistema básico, con muchas funciones
suplementarias (conocidas o no) sin entregar.
El cliente utiliza
inicialmente ese sistema básico, intertanto, el resultado de su uso y
evaluación puede aportar al plan para el desarrollo del/los siguientes
incrementos (o versiones). Además también aportan a ese plan otros factores,
como lo es la priorización (mayor o menor urgencia en la necesidad de cada
incremento en particular) y la dependencia entre incrementos (o independencia).
Luego de cada
integración se entrega un producto con mayor funcionalidad que el previo. El
proceso se repite hasta alcanzar el software final completo.
Siendo iterativo, con el
modelo incremental se entrega un producto parcial pero completamente operacional
en cada incremento, y no una parte que sea usada para reajustar los
requerimientos (como si ocurre en el modelo
de construcción de prototipos).
El enfoque incremental
resulta muy útil cuando se dispone de baja dotación de personal para el
desarrollo; también si no hay disponible fecha límite del proyecto por lo que
se entregan versiones incompletas pero que proporcionan al usuario
funcionalidad básica (y cada vez mayor). También es un modelo útil a los fines
de versiones de evaluación.
Nota: Puede ser
considerado y útil, en cualquier momento o incremento incorporar temporalmente
el paradigma MCP como
complemento, teniendo así una mixtura de modelos que mejoran el esquema y
desarrollo general.
Ejemplo:
Un procesador
de texto que sea desarrollado bajo el paradigma Incremental
podría aportar, en principio, funciones básicas de edición de archivos y
producción de documentos (algo como un editor simple). En un
segundo incremento se le podría agregar edición más sofisticada, y de
generación y mezcla de documentos.
En un tercer incremento podría considerarse el agregado de funciones de corrección
ortográfica, esquemas de paginado yplantillas; en un cuarto
capacidades de dibujo propias y ecuaciones matemáticas. Así sucesivamente hasta
llegar al procesador final requerido. Así, el producto va creciendo,
acercándose a su meta final, pero desde la entrega del primer incremento ya es
útil y funcional para el cliente, el cual observa una respuesta rápida en
cuanto a entrega temprana; sin notar que la fecha límite del proyecto puede no
estar acotada ni tan definida, lo que da margen de operación y alivia presiones
al equipo de desarrollo.
Como se dijo, el
Iterativo Incremental es un modelo del tipo evolutivo, es decir donde se
permiten y esperan probables cambios en los requisitos en tiempo de desarrollo;
se admite cierto margen para que el software pueda evolucionar9 . Aplicable cuando
los requisitos son medianamente bien conocidos pero no son completamente
estáticos y definidos, cuestión esa que si es indispensable para poder utilizar
un modelo Cascada.
El modelo es aconsejable
para el desarrollo de software en el cual se observe, en su etapa inicial de
análisis, que posee áreas bastante bien definidas a cubrir, con suficiente
independencia como para ser desarrolladas en etapas sucesivas. Tales áreas a
cubrir suelen tener distintos grados de apremio por lo cual las mismas se
deben priorizar en un análisis previo, es decir, definir cual será la primera,
la segunda, y así sucesivamente; esto se conoce como «definición de los
incrementos» con base en la priorización. Pueden no existir prioridades
funcionales por parte del cliente, pero el desarrollador debe fijarlas de todos
modos y con algún criterio, ya que basándose en ellas se desarrollarán y
entregarán los distintos incrementos.
El hecho de que existan
incrementos funcionales del software lleva inmediatamente a pensar en un
esquema de desarrollo modular,
por tanto este modelo facilita tal paradigma de diseño.
En resumen, un modelo
incremental lleva a pensar en un desarrollo modular, con entregas parciales del
producto software denominados «incrementos» del sistema, que son escogidos
según prioridades predefinidas de algún modo. El modelo permite una implementación
con refinamientos sucesivos (ampliación o mejora). Con cada incremento se
agrega nueva funcionalidad o se cubren nuevos requisitos o bien se mejora la
versión previamente implementada del producto software.
Este modelo brinda
cierta flexibilidad para que durante el desarrollo se incluyan cambios en los
requisitos por parte del usuario, un cambio de requisitos propuesto y aprobado
puede analizarse e implementarse como un nuevo incremento o, eventualmente,
podrá constituir una mejora/adecuación de uno ya planeado. Aunque si se produce
un cambio de requisitos por parte del cliente que afecte incrementos previos ya
terminados (detección/incorporación tardía) se debe evaluar la factibilidad y
realizar un acuerdo con el cliente, ya que puede impactar fuertemente en los
costos.
La selección de este
modelo permite realizar entregas funcionales tempranas al cliente (lo
cual es beneficioso tanto para él como para el grupo de desarrollo). Se
priorizan las entregas de aquellos módulos o incrementos en que surja la necesidad
operativa de hacerlo, por ejemplo para cargas previas de información,
indispensable para los incrementos siguientes.
El modelo iterativo
incremental no obliga a especificar con precisión y detalle absolutamente todo
lo que el sistema debe hacer, (y cómo), antes de ser construido (como el caso
del cascada, con requisitos congelados). Sólo se hace en el incremento en
desarrollo. Esto torna más manejable el proceso y reduce el impacto en los
costos. Esto es así, porque en caso de alterar o rehacer los requisitos, solo
afecta una parte del sistema. Aunque, lógicamente, esta situación se agrava si
se presenta en estado avanzado, es decir en los últimos incrementos. En
definitiva, el modelo facilita la incorporación de nuevos requisitos durante el
desarrollo.
Con un paradigma
incremental se reduce el tiempo de desarrollo inicial, ya que se implementa
funcionalidad parcial. También provee un impacto ventajoso frente al cliente,
que es la entrega temprana de partes operativas del software.
El modelo proporciona
todas las ventajas del modelo en cascada realimentado, reduciendo sus
desventajas sólo al ámbito de cada incremento.
El modelo incremental no
es recomendable para casos de sistemas de tiempo real, de alto nivel
de seguridad, de procesamiento
distribuido, o de alto índice de riesgos.

Modelo espiral
El modelo espiral fue propuesto
inicialmente por Barry Boehm.
Es un modelo evolutivo que conjuga la naturaleza iterativa del modelo MCP con
los aspectos controlados y sistemáticos del Modelo Cascada. Proporciona
potencial para desarrollo rápido de versiones incrementales. En el modelo
Espiral el software se construye en una serie de versiones incrementales. En
las primeras iteraciones la versión incremental podría ser un modelo en papel o
bien un prototipo. En las últimas iteraciones se producen versiones cada vez
más completas del sistema diseñado.
El modelo se divide en
un número de Actividades de marco de trabajo, llamadas «regiones de tareas». En
general existen entre tres y seis regiones de tareas (hay variantes del
modelo). En la figura se muestra el esquema de un Modelo Espiral con 6 regiones.
En este caso se explica una variante del modelo original de Boehm, expuesto en
su tratado de 1988; en 1998 expuso un tratado más reciente.
Las regiones definidas en el modelo de la
figura son:
Región 1 - Tareas
requeridas para establecer la comunicación entre el cliente y el desarrollador.
Región 2 - Tareas
inherentes a la definición de los recursos, tiempo y otra información
relacionada con el proyecto.
Región 3 - Tareas
necesarias para evaluar los riesgos técnicos y de gestión del proyecto.
Región 4 - Tareas para
construir una o más representaciones de la aplicación software.
Región 5 - Tareas para
construir la aplicación, instalarla, probarla y proporcionar soporte al usuario
o cliente (Ej. documentación y práctica).
Región 6 - Tareas para
obtener la reacción del cliente, según la evaluación de lo creado e instalado
en los ciclos anteriores.
Las actividades
enunciadas para el marco de trabajo son generales y se aplican a cualquier
proyecto, grande, mediano o pequeño, complejo o no. Las regiones que definen
esas actividades comprenden un «conjunto de tareas» del trabajo: ese conjunto
sí se debe adaptar a las características del proyecto en particular a
emprender. Nótese que lo listado en los ítems de 1 a 6 son conjuntos de tareas,
algunas de las ellas normalmente dependen del proyecto o desarrollo en si.
Proyectos pequeños
requieren baja cantidad de tareas y también de formalidad. En proyectos mayores
o críticos cada región de tareas contiene labores de más alto nivel de
formalidad. En cualquier caso se aplican actividades de protección (por
ejemplo, gestión de configuración del software, garantía de calidad, etc.).
Al inicio del ciclo, o
proceso evolutivo, el equipo de ingeniería gira alrededor del espiral
(metafóricamente hablando) comenzando por el centro (marcado con ๑ en la figura 6) y en el sentido indicado; el primer circuito de la
espiral puede producir el desarrollo de unaespecificación del
producto; los pasos siguientes podrían generar un prototipo y
progresivamente versiones más sofisticadas del software.
Cada paso por la región
de planificación provoca ajustes en el plan del proyecto; el coste y
planificación se realimentan en función de la evaluación del cliente. El gestor
de proyectos debe ajustar el número de iteraciones requeridas para completar el
desarrollo.
El modelo espiral puede
ir adaptándose y aplicarse a lo largo de todo el Ciclo de vida del software (en el modelo clásico, o
cascada, el proceso termina a la entrega del software).
Una visión alternativa
del modelo puede observarse examinando el «eje de punto de entrada de
proyectos». Cada uno de los circulitos (๏) fijados a
lo largo del eje representan puntos de arranque de los distintos proyectos
(relacionados); a saber:
Un proyecto de
«desarrollo de conceptos» comienza al inicio de la espiral, hace múltiples
iteraciones hasta que se completa, es la zona marcada con verde.
Si lo anterior se va a
desarrollar como producto real, se inicia otro proyecto: «Desarrollo de nuevo
Producto». Que evolucionará con iteraciones hasta culminar; es la zona marcada
en color azul.
Eventual y análogamente
se generarán proyectos de «mejoras de productos» y de «mantenimiento de
productos», con las iteraciones necesarias en cada área (zonas roja y gris,
respectivamente).
Cuando la espiral se
caracteriza de esta forma, está operativa hasta que el software se retira,
eventualmente puede estar inactiva (el proceso), pero cuando se produce un
cambio el proceso arranca nuevamente en el punto de entrada apropiado (por
ejemplo, en «mejora del producto»).
El modelo espiral da un
enfoque realista, que evoluciona igual que el software; se adapta muy bien para
desarrollos a gran escala.
El Espiral utiliza el MCP para
reducir riesgos y permite aplicarlo en cualquier etapa de la evolución.
Mantiene el enfoque clásico (cascada) pero incorpora un marco de trabajo
iterativo que refleja mejor la realidad.
Este modelo requiere
considerar riesgos técnicos en todas las etapas del proyecto; aplicado
adecuadamente debe reducirlos antes de que sean un verdadero problema.
El Modelo evolutivo como
el Espiral es particularmente apto para el desarrollo de Sistemas Operativos
(complejos); también en sistemas de altos riesgos o críticos (Ej. navegadores y
controladores aeronáuticos) y en todos aquellos en que sea necesaria una fuerte
gestión del proyecto y sus riesgos, técnicos o de gestión.
Desventajas importantes:
Requiere mucha
experiencia y habilidad para la evaluación de los riesgos, lo cual es requisito
para el éxito del proyecto.
Es difícil convencer a
los grandes clientes que se podrá controlar este enfoque evolutivo.
Este modelo no se ha
usado tanto, como el Cascada (Incremental) o MCP,
por lo que no se tiene bien medida su eficacia, es un paradigma relativamente
nuevo y difícil de implementar y controlar.
Una variante interesante
del Modelo Espiral previamente visto en la Figura es el «Modelo espiral
Win-Win» (Barry Boehm). El Modelo
Espiral previo (clásico) sugiere la comunicación con el cliente para fijar los
requisitos, en que simplemente se pregunta al cliente qué necesita y él
proporciona la información para continuar; pero esto es en un contexto ideal
que rara vez ocurre. Normalmente cliente y desarrollador entran en una
negociación, se negocia coste frente a funcionalidad, rendimiento, calidad,
etc.
«Es así que la obtención
de requisitos requiere una negociación, que tiene éxito cuando ambas partes
ganan».
Las mejores
negociaciones se fuerzan en obtener «Victoria & Victoria» (Win & Win),
es decir que el cliente gane obteniendo el producto que lo satisfaga, y el
desarrollador también gane consiguiendo presupuesto y fecha de entrega
realista. Evidentemente, este modelo requiere fuertes habilidades de
negociación.
El modelo Win-Win define
un conjunto de actividades de negociación al principio de cada paso alrededor
de la espiral; se definen las siguientes actividades:
Identificación del
sistema o subsistemas clave de los directivos(*) (saber qué quieren).
Determinación de
«condiciones de victoria» de los directivos (saber qué necesitan y los
satisface)
Negociación de las
condiciones «victoria» de los directivos para obtener condiciones «Victoria
& Victoria» (negociar para que ambos ganen).
(*) Directivo: Cliente
escogido con interés directo en el producto, que puede ser premiado por la
organización si tiene éxito o criticado si no.
El modelo Win & Win
hace énfasis en la negociación inicial, también introduce 3 hitos en el proceso
llamados «puntos de fijación», que ayudan a establecer la completitud de un
ciclo de la espiral, y proporcionan hitos de decisión antes de continuar el
proyecto de desarrollo del software.
3.4 El
Proceso Unificado de Desarrollo de Software (RUP)
Introducción
El Proceso Unificado es
un proceso de software genérico que puede ser utilizado para una gran cantidad
de tipos de sistemas de software, para diferentes áreas de aplicación,
diferentes tipos de organizaciones, diferentes niveles de competencia y
diferentes tamaños de proyectos.
Provee un enfoque
disciplinado en la asignación de tareas y responsabilidades dentro de una
organización de desarrollo. Su meta es asegurar la producción de software de
muy alta calidad que satisfaga las necesidades de los usuarios finales, dentro
de un calendario y presupuesto predecible.
El Proceso Unificado
tiene dos dimensiones (Figura 1):
Un
eje horizontal que representa el tiempo y muestra los aspectos del ciclo de
vida del proceso a lo largo de su desenvolvimiento
Un
eje vertical que representa las disciplinas, las cuales agrupan actividades de
una manera lógica de acuerdo a su naturaleza.
La primera dimensión
representa el aspecto dinámico del proceso conforme se va desarrollando, se
expresa en términos de fases, iteraciones e hitos (milestones).
La segunda dimensión
representa el aspecto estático del proceso: cómo es descrito en términos de
componentes del proceso, disciplinas, actividades, flujos de trabajo,
artefactos y roles.
El Proceso Unificado se
basa en componentes (component-based), lo que significa que el sistema en
construcción está hecho de componentes de software interconectados por medio de
interfaces bien definidas (well-defined interfaces).
El Proceso Unificado usa
el Lenguaje de Modelado Unificado (UML) en la preparación de todos los planos
del sistema. De hecho, UML es una parte integral del Proceso Unificado, fueron
desarrollados a la par.
Los aspectos distintivos
del Proceso Unificado están capturados en tres conceptos clave: dirigido por
casos de uso (use-case driven), centrado en la arquitectura
(architecture-centric), iterativo e incremental. Esto es lo que hace único al
Proceso Unificado.
El Proceso Unificado es
dirigido por casos de uso
Un sistema de software
se crea para servir a sus usuarios. Por lo tanto, para construir un sistema
exitoso se debe conocer qué es lo que quieren y necesitan los usuarios
prospectos.
El término usuario se
refiere no solamente a los usuarios humanos, sino a otros sistemas. En este
contexto, el término usuario representa algo o alguien que interactúa con el
sistema por desarrollar.
Un caso de
uso es una pieza en la funcionalidad del sistema que le da al usuario un
resultado de valor. Los casos de uso capturan los requerimientos funcionales.
Todos los casos de uso juntos constituyen el modelo de casos de
uso el cual describe la funcionalidad completa del sistema. Este modelo
reemplaza la tradicional especificación funcional del sistema. Una
especificación funcional tradicional se concentra en responder la pregunta:
¿Qué se supone que el sistema debe hacer? La estrategia de casos de uso puede
ser definida agregando tres palabras al final de la pregunta: ¿por cada
usuario? Estas tres palabras tienen una implicación importante, nos fuerzan a
pensar en términos del valor a los usuarios y no solamente en términos de las
funciones que sería bueno que tuviera. Sin embargo, los casos de uso no son
solamente una herramienta para especificar los requerimientos del sistema,
también dirigen su diseño, implementación y pruebas, esto es, dirigen el
proceso de desarrollo.
Aún y cuando los casos
de uso dirigen el proceso, no son elegidos de manera aislada. Son desarrollados
a la par con la arquitectura del sistema, esto es, los casos de uso dirigen la
arquitectura del sistema y la arquitectura del sistema influencia la elección
de los casos de uso. Por lo tanto, al arquitectura del sistema y los casos de
uso maduran conforme avanza el ciclo de vida.
El Proceso Unificado
está centrado en la arquitectura
El papel del arquitecto
de sistemas es similar en naturaleza al papel que el arquitecto desempeña en la
construcción de edificios. El edificio se mira desde diferentes puntos de
vista: estructura, servicios, plomería, electricidad, etc. Esto le permite al
constructor ver una radiografía completa antes de empezar a construir.
Similarmente, la arquitectura en un sistema de software es descrita como
diferentes vistas del sistema que está siendo construido.
El concepto de
arquitectura de software involucra los aspectos estáticos y dinámicos más
significativos del sistema. La arquitectura surge de las necesidades de la
empresa, tal y como las interpretan los usuarios y otros stakeholders, y tal y
como están reflejadas en los casos de uso. Sin embargo, también está
influenciada por muchos otros factores, tales como la plataforma de software en
la que se ejecutará, la disponiblidad de componentes reutilizables,
consideraciones de instalación, sistemas legados, requerimientos no funcionales
(ej. desempeño, confiabilidad). La arquitectura es la vista del diseño completo
con las características más importantes hechas más visibles y dejando los
detalles de lado. Ya que lo importante depende en parte del criterio, el cual a
su vez viene con la experiencia, el valor de la arquitectura depende del
personal asignado a esta tarea. Sin embargo, el proceso ayuda al arquitecto a
enfocarse en las metas correctas, tales como claridad (understandability),
flexibilidad en los cambios futuros (resilience) y reuso.
¿Cómo se relacionan los
casos de uso con la arquitectura? Cada producto tiene función y forma. Uno sólo
de los dos no es suficiente. Estas dos fuerzas deben estar balanceadas para
obtener un producto exitoso. En este caso función corresponde a los casos de
uso y forma a la arquitectura. Existe la necesidad de intercalar entre casos de
uso y arquitectura. Es un problema del “huevo y la gallina”. Por una parte, los
casos de uso deben, cuando son realizados, acomodarse en la arquitectura. Por
otra parte, la arquitectura debe proveer espacio para la realización de todos
los casos de uso, hoy y en el futuro. En la realidad, ambos arquitectura y casos
de uso deben evolucionar en paralelo.
El Proceso Unificado es
Iterativo e Incremental
Desarrollar un producto
de software comercial es una tarea enorme que puede continuar por varios meses
o años. Es práctico dividir el trabajo en pequeños pedazos o mini-proyectos.
Cada mini-proyecto es una iteración que finaliza en un incremento. Las
iteraciones se refieren a pasos en el flujo de trabajo, los incrementos se
refieren a crecimiento en el producto. Para ser más efectivo, las iteraciones
deben estar controladas, esto es, deben ser seleccionadas y llevadas a cabo de
una manera planeada.
Los desarrolladores
basan su selección de qué van a implementar en una iteración en dos factores.
Primero, la iteración trata con un grupo de casos de uso que en conjunto extienden
la usabilidad del producto. Segundo, la iteración trata con los riesgos más
importantes. Las iteraciones sucesivas construyen los artefactos del desarrollo
a partir del estado en el que fueron dejados en la iteración anterior.
En cada iteración, los
desarrolladores identifican y especifican los casos de uso relevantes, crean el
diseño usando la arquitectura como guía, implementan el diseño en componentes y
verifican que los componentes satisfacen los casos de uso. Si una iteración
cumple sus metas – y usualmente lo hace – el desarrollo continúa con la
siguiente iteración. Cuando la iteración no cumple con sus metas, los
desarrolladores deben revisar sus decisiones previas y probar un nuevo enfoque.

3.5 MODELO DE PROCESOS DE SOFTWARE IEEE
¿QUÉ ES UN PROCESO
SOFTWARE?
Es un conjunto de
actividades y resultados asociados que producen un producto desoftware. Es uno
de los componentes de un método de desarrollo de software.
Existen 4actividades
fundamentales de proceso, comunes para todos los procesos de software:
Especificación del
software
Desarrollo del software
Validación del software
Evolución del software
¿QUÉ ES IEEE?
IEEE: corresponde a las
siglas de (Institute of Electrical and Electronics Engineers) en español
Instituto de Ingenieros Eléctricos y Electrónicos.
Una asociación
técnico-profesional mundial dedicada a la estandarización, entre otras cosas.
Con cerca de 400.000 miembros y voluntarios en 160 países, es la mayor
asociación internacional sin ánimo de lucro formada por profesionales de las
nuevas tecnologías, tales como ingenieros eléctricos, ingenieros en
electrónica, científicos de la computación, ingenieros en informática,
ingenieros en biomédica, ingenieros en telecomunicación e ingenieros en
Mecatrónica.
Su creación se remonta
al año 1884, contando entre sus fundadores a personalidades de la talla de
Thomas Alva Edison, Alexander Graham Bell y Franklin Leonard Pope.
En 1963 adoptó el nombre
de IEEE al fusionarse asociaciones como el AIEE (American Institute of
Electrical Engineers) y el IRE (Institute of Radio Engineers).
Según el mismo IEEE, su
trabajo es promover la creatividad, el desarrollo y la integración, compartir y
aplicar los avances en las tecnologías de la información, electrónica y
ciencias en general para beneficio de la humanidad y de los mismos
profesionales.
Todo lo relacionado a
cableado, conectores, dispositivos de redes, y protocolos están regidos por
estándares de red, principalmente por el estándar IEEE (Institute of Electrical
and Electronics Engineers), desarrollo un conjunto de estándares de red, que
obligan a los fabricantes de tecnologías de redes a respectar los parámetros
exigidos, permitiendo con esto una compatibilidad del producto entre los
fabricantes. Debido a esto, es que vemos productos de redes, tales como: Hubs,
Routers; que sin importar su procedencia, tienen algo en común es que son
compatibles.
Los estándares son:
VHDL Es el acrónimo que
representa la combinación de VHSIC y HDL, donde VHSIC es el acrónimo de Very
High Speed Integrated Circuit y HDL es a su vez el acrónimo de Hardware
Description Language. Es un lenguaje
definido por el IEEE (Institute of Electrical and Electronics Engineers)
(ANSI/IEEE 1076-1993) usado por ingenieros para describir circuitos digitales.
POSIX Son una familia de
estándares de llamadas al sistema operativo definido por el IEEE y
especificados formalmente en el IEEE 1003. Persiguen generalizar las interfaces
de los sistemas operativos para que una misma aplicación pueda ejecutarse en
distintas plataformas. Estos estándares surgieron de un proyecto de
normalización de las API y describen un conjunto de interfaces de aplicación
adaptables a una gran variedad de implementaciones de sistemas operativos.
IEEE 1394 (Conocido como
FireWire por Apple Inc. y como i.Link por Sony) es un estándar multiplataforma
para la entrada y salida de datos en serie a gran velocidad. Suele utilizarse
para la interconexión de dispositivos digitales como cámaras digitales y
videocámaras a computadoras.
IEEE 488 Es un estándar
bus de datos digital de corto rango desarrollado por Hewlett- Packard en los
años 1970 para conectar dispositivos de test y medida con dispositivos que los
controlen como un ordenador
IEEE 802 Es un estudio
de estándares elaborado por el Instituto de Ingenieros Eléctricos y Electrónicos
(IEEE) que actúa sobre Redes de ordenadores. Concretamente y según su propia
definición sobre redes de área local (RAL, en inglés LAN) y redes de área
metropolitana (MAN en inglés)
IEEE 754 Es el estándar
más extendido para las computaciones en coma flotante, y es seguido por muchas
de las mejoras de CPU y FPU. El estándar define formatos para la representación
de números en coma flotante (incluyendo el cero) y valores desnormalizados, así
como valores especiales como infinito y NaN, con un conjunto de operaciones en
coma flotante que trabaja sobre estos valores. También especifica cuatro modos
de redondeo y cinco excepciones (incluyendo cuándo ocurren dichas excepciones y
qué sucede en esos momentos).

3.6 Herramienta CASE
CASE Spec
Esta herramienta está
desarrollada por la empresa Goda Software, siendo esta una aplicación comercial
de uso exclusivo para el sistema operativo Windows. Las principales
características que avalan a esta herramienta son las siguientes:
Especificación: posibilidad
de realizar las especificaciones tanto con las técnicas tradicionales como con
los diagramas de casos de uso. Además, nos permite crear diagramas UML y de
flujo de datos.
Seguimiento de los
requisitos: a través del uso combinado de un procesador de textos y una
hoja de cálculo, el usuario será capaz de realizar el seguimiento de los
requisitos así como hacer un informe acerca de los mismos.
Capacidad de rastreo: mediante
la existencia de una matriz se representan de manera sencilla las diferentes
relaciones existentes entre los requisitos definidos y otra serie de elementos
incidentes en el proyecto.
Capacidad de importar
y exportar archivos.
Generación automática de
la documentación del proyecto así como posibilidad de realizar amplios
informes.