Professional Documents
Culture Documents
1.1
Ingeniera de Software
-1-
slo programas, lneas de cdigo que se producen en un determinado tiempo; esto es un error, ya
que nos llevar a tener montaas de cdigos que no se integrarn como sistema y que no
lograrn satisfacer las necesidades del cliente, aunque tcnicamente sean correctos.
Software es un conjunto de programas que se ejecutan en un ordenador y la documentacin
asociada, de este modo los productos de software pueden desarrollarse para un cliente en
particular o para un mercado particular o general.
Existen tres tipos bsicos de software:
System software
Utilitarios
Software de Aplicacin
Cualquiera sea el tipo de software, requiere de informacin que lo acompae para su correcto
entendimiento y uso para luego mantenerlo, caso contrario lo llevar a tener errores que no
podrn ser salvados en el tiempo.
El software tiene caractersticas que es importante conocer, veamos algunas de ellas.
Su Naturaleza y Cualidades:
El software es fcilmente modificable, lo que implica que el cdigo responde a una lgica y
normalmente es de quien lo construye, por lo que si cambia el actor es muy posible que
cambie el cdigo.
No es tangible, como otros productos. Al ser intangible no es fcil imaginarse el tamao o
la forma del software, muchas veces se cree que realizar una aplicacin o una nueva
funcionalidad es algo simple, pero la mayora de las veces implica un gran trabajo difcil de
visualizar.
Clasificacin de las Cualidades:
Externas versus internas, se pueden considerar como externas la usabilidad del software
por los usuarios, mientras que la interna es tcnica, la ven quienes codifican. Es posible
que un software est muy bien diseado y codificado pero al usuario le resulte difcil de
entender y usar, o totalmente al revs, el usuario solicita algo que mientras lo entienda y
sea fcil de usar no importa si tcnicamente est bien realizado. Lo ptimo es que cumpla
con ambas condiciones.
Cualidades de producto y proceso. El proceso de desarrollo de software dar un producto
final que se espera que sea de calidad y satisfaga las necesidades del cliente, para ello el
proyecto deber ser exitoso y el proceso de software tambin.
Cualidades Representativas:
Correctitud, confiabilidad y robustez
o Correctitud: un programa es funcionalmente correcto si se comporta acorde a la
especificacin de la funcin que debera proveer.
o Confiabilidad: un programa es confiable si el usuario puede depender de l. El
software no debe causar dao fsico o econmico si falla.
o Robustez: un programa es robusto si se comporta razonablemente, an en
situaciones que no fueron anticipadas en los requerimientos.
Performance: afecta la usabilidad de un sistema
Confiabilidad: El software no debera malgastar el uso de los recursos del sistema.
Amigabilidad: esto ocurre si los seres humanos lo encuentran fcil de usar
Verificabilidad: esto ocurre si sus propiedades pueden ser verificadas fcilmente
-2-
-3-
Es un software ms sofisticado
Es usado por personas distintas al desarrollador
Es extensivamente testeado antes de ser liberado
Su costo de desarrollo es 3 veces mayor al de un programa
-4-
-5-
Este tipo de prctica slo llev a vivir La crisis del software, clientes insatisfechos y prdida de
dinero para los dueos de las consultoras.
Esta forma de trabajar tiene un alto riesgo, cuando se carece de profesionalidad y calidad en el
producto final.
Para revertir esta situacin en un principio se incorpor una persona como intermediario entre el
cliente y el desarrollador, el Comercial quien tena la funcin de comunicar el requerimiento del
cliente a desarrollo, pero es evidente que entre lo que el cliente ve, necesita, piensa que ve o
piensa que necesita y lo que recepta el intermediario hay diferencias, de ms est decir que la
diferencia se ampla cuando se transmite, lo que lleva inevitablemente a no cubrir las expectativas
del cliente.
Cunto tiempo y dinero se pierde cada vez que se trata de resolver un error? Se cobra por
desarrollar un software y por mantenerlo pero no para solucionarlo, donde las horas de
recodificacin son a cargo del dueo de la consultora de software.
Por otro lado:
Quin prueba el software? El cliente? La respuesta debera ser no, ya que al cliente le debe
llegar el producto final funcionando correctamente, para lo cual se agrega el rol de Tester interno
en la empresa.
Con estas medidas podramos solucionar en parte los problemas, es comn escuchar expresiones
tales como, El problema es el cdigo, los que no saben son los desarrolladores, pero la verdad
no es sa.
Est comprobado que el mayor problema est en la captura del requerimiento, tarea que requiere
de conocimiento de negocio, de anlisis y diseo de interfaz grfica, porque es la persona
encargada de interpretar correctamente el problema, transmitirlo y documentarlo con la garanta
de que ste responde al requerimiento del cliente. Tan importante es esta tarea que hoy es tratada
como Ingeniera de Requerimiento.
La experiencia previa en la construccin de estos sistemas mostr que un enfoque informal para
el desarrollo del software no era bueno. Los grandes proyectos no se entregaban en trmino con
retrasos de aos, costaban mucho ms que lo presupuestado, totalmente irrealizables, difciles de
mantener y con pobre desempeo.
Mientras el hardware mostraba avances tecnolgicos que lo hacan superior y bajaban los costos,
el software sufra una evolucin totalmente al revs.
Estaba claro que se necesitaba revertir esta situacin y para ello haba que fijar los lineamientos
para que la produccin de software se convirtiera en una Ingeniera, nuevas tcnicas y mtodos
para controlar la complejidad inherente a los grandes sistemas.
Tomamos la definicin de Ingeniera de software de Fairley (Ingeniera de Software, 1987): La
Ingeniera de Software es la disciplina tecnolgica y de administracin que se ocupa de la
produccin y evolucin sistemtica de productos de software que son desarrollados y modificados
dentro de los tiempos y costos estimados.
En estos tiempos donde las empresas necesitan ser competitivas, responder al dinamismo de los
cambios en forma eficiente es sumamente importante, para ello se define un correcto proceso de
software, donde el cliente est al inicio y al final, desde el requerimiento hasta la entrega,
-6-
estableciendo las etapas mnimas que garantizan un producto de calidad y la satisfaccin del
cliente.
Sabemos que no hay un ideal de la Ingeniera de software, debido a la gran diversidad de tipos
de sistemas y organizaciones que los usan, por lo que necesitamos tener diversos enfoques para
el desarrollo de software, no obstante, las nociones fundamentales de procesos y organizacin del
sistema constituyen la base de todas las tcnicas y, a su vez, son la esencia de la Ingeniera de
software.
El desafo es ponerse en movimiento hacia el cambio en post de la mejora continua,
acompaando al crecimiento profesional y econmico de todos.
-7-
Significa que estos sistemas incluyen los procesos y procedimientos operativos, las
personas que lo operan, las reglas internas, de negocio, como tambin las reglas externas
que rigen su uso y funcionamiento. Como ejemplo podemos citar un sistema de facturacin
que incluye los procesos necesarios, las reglas impositivas que lo rigen y las reglas
internas de la organizacin.
Entre las caractersticas fundamentales de los sistemas socio-tcnicos encontramos las
siguientes:
Tienen propiedades emergentes, propiedades del sistema como un todo ms que
asociadas con las partes del sistema, que dependen tanto de los componentes como de
las relaciones entre ellos. Estas propiedades pueden ser evaluadas luego de ser
implementado el sistema.
Por lo general no son sistemas determinsticos. No siempre producen la misma salida con
una entrada especfica, ya que el comportamiento del sistema depende de operadores
humanos, de su uso y tratamiento. Adems, se debe contemplar la posibilidad de que el
sistema pueda proporcionar nuevas relaciones entre sus componentes.
El grado de apoyo a los objetivos organizacionales no depende solamente del sistema. La
concrecin de los objetivos dependen de la estabilidad de los mismos, conflictos entre
cmo son planteados e interpretados por las personas, as dependiendo de las personas
un sistema exitoso puede convertirse en un fracaso y no utilizarlo.
Teniendo en cuenta lo expresado anteriormente, las propiedades emergentes de un sistema se
dan en conjunto cuando el sistema ha sido implementado completamente e interactan sus
componentes de forma integral.
Estas propiedades emergentes pueden considerarse como funcionales y no funcionales:
Funcionales, cuando todos los componentes del sistemas trabajan conjuntamente para
lograr un objetivo comn.
No funcionales, se refieren al comportamiento de los sistemas en su entorno operativo.
Entre ellas encontramos, la fiabilidad, el rendimiento, la seguridad y la proteccin.
Entre estas propiedades no funcionales, la fiabilidad es quizs la ms importante ya que se puede
aplicar a los cinco componentes principales de los sistemas socio-tcnicos, fiabilidad del
hardware, del software, de las personas que lo operan, de los procesos definidos y de los datos
utilizados.
Cules son las diferencias entre el proceso de la ingeniera de sistemas y el proceso de
desarrollo de software?
El desarrollo de sistemas tiene un alcance limitado para rehacer el trabajo. Cuando se han
tomado las decisiones en la Ingeniera del sistema se han planteado las etapas y las
acciones de cada una, donde cada etapa verifica con la anterior si el camino es el correcto,
por lo que pensar en cambios a la mitad del proceso traera costos y riesgos muy grandes.
Las etapas que se identifican en el proceso de Ingeniera de sistemas son las siguientes:
o Definicin de requerimientos
o Diseo del sistema
o Desarrollo del subsistema
o Integracin del sistema
o Instalacin del sistema
o Evolucin del sistema
o Desmantelamiento del sistema
-8-
1.2
Ciclo de Vida
Person
as
Requerimientos
Ideas
Tiempo
Materiales
Energa
Equipamiento
Actividades
Procedimiento
s
Productos y
servicios
-9-
Especificacin del software. Se trata de definir las funcionalidades que deber tener el
software y las restricciones en su operacin.
Diseo e implementacin del software. Primero se disea la solucin y luego se produce el
software que cumpla con la especificacin.
Validacin del software. Se valida con el cliente la funcionalidad del software asegurando
que realiza lo que el cliente desea y necesita.
Evolucin del software. Las organizaciones son sistemas dinmicos que se acomodan a
los cambios, el software debe evolucionar para cubrir las necesidades de cambio que
plantea el cliente.
Cada empresa adopta el proceso con las etapas que considera mejor segn el equipo de gente
que dispone, siempre teniendo en cuenta estas 4 actividades fundamentales.
Todo proceso de construccin de software lleva un tiempo desde que es requerido por el cliente
hasta que se finaliza y se entrega el producto final, luego viene el mantenimiento del mismo. Este
tiempo es el Ciclo de Vida.
Como ciclo de vida, tiene un comienzo y puede tener un fin, de acuerdo al lmite que se determine,
en ese tiempo es que se dan las actividades fundamentales que vimos anteriormente.
Como determinamos que no existe un proceso ideal, es que este proceso ha tomado distintas
formas en el tiempo, de acuerdo a la respuesta obtenida y la retroalimentacin que se realiza del
mismo.
Existen modelos de procesos de desarrollo de software que han evolucionado en el tiempo y se
identifican con las caractersticas de la realidad de cada momento.
Dentro de una organizacin pueden existir sistemas que estn funcionando y que quizs no
cumplan con todas las necesidades del cliente, pero que no se pueden dejar de usar. Las nuevas
funcionalidades tendrn que tener en cuenta estos sistemas para su integracin. Estos sistemas
se consideran Sistemas heredados, en algunos casos no se pueden modificar, slo utilizar, en
otros casos se puede modificar, pero si no poseen documentacin es una tarea muy compleja.
Las nuevas funcionalidades o los sistemas completos se pueden desarrollar o adquirir, o sea que
en una organizacin pueden coexistir sistemas heredados, sistemas propios y sistemas
adquiridos; es necesaria la integracin de las partes para alcanzar la funcionalidad, el objetivo y el
trabajo como sistema.
- 10 -
- 11 -
Ms funcionalidad, ms sofisticacin
posibilidades de cometer errores.
Usuarios heterogneos.
mayor complejidad, ms
- 12 -
Especificacin de
Requerimiento
Definicin
Anlisis
Especific.
Diseo
Diseo
Implementacin y
Unidad de Testeo
Desarrollo
Integracin
Implementacin
Mantenimiento
- 13 -
Debido a las desventajas del modelo, muchos modelos nuevos de ciclo de vida han sido
propuestos, incluyendo modelos que pretenden desarrollar software ms rpidamente, ms
incrementalmente, de una forma ms evolutiva o precediendo el desarrollo a escala total con
algn conjunto de prototipos rpidos.
Desarrollo evolutivo
El desarrollo evolutivo consiste en desarrollar una implementacin inicial, entregada a los usuarios
para sus comentarios y refinndola a travs de la retroalimentacin y las versiones hasta lograr el
sistema adecuado.
Los requerimientos son cuidadosamente examinados y slo aquellos que son bien comprendidos
son seleccionados para el primer incremento. Los desarrolladores construyen una implementacin
parcial del sistema que recibe slo estos requerimientos. El cliente lo usa, basado en la
retroalimentacin y en los nuevos requerimientos se construye la nueva versin, as el proceso se
repite indefinidamente.
Note que el desarrollo evolutivo es 100% compatible con el modelo cascada.
Todo lo que uno tiene que hacer es construir un subconjunto de requerimientos conocidos
(incremental) y comprender que nuevos requerimientos aparecern cuando el sistema sea
desplegado o desarrollado.
Las actividades de especificacin, de desarrollo y validacin se entrelazan en vez de separarse,
con una rpida retroalimentacin entre stas.
Existen 2 tipos de desarrollo evolutivo:
Desarrollo exploratorio, donde se trabaja con el cliente para explorar sus requerimientos y
entregar un sistema final, comenzando siempre por los requerimientos del sistema que se
entienden mejor. El sistema crece, evoluciona con lo que el cliente va proponiendo.
Prototipos desechables, en este caso se centra en los requerimientos que no estn muy
claros, por lo que el objetivo es comprender los requerimientos del cliente para poder
desarrollar una definicin mejorada del sistema.
Visto desde la ingeniera de gestin, el modelo evolutivo tiene los siguientes problemas:
Carencia de Visibilidad del Proceso
Los sistemas frecuentemente son pobremente estructurados
Puede requerirse habilidades Especiales (Ej. En lenguajes de prototipacin rpida)
Es factible su aplicacin:
Para Sistemas interactivos de tamao pequeo o mediano.
Para partes de sistemas grandes (Ej. Interfaces de usuario).
Para sistemas de ciclo de vida corto.
Veamos el modelo representado en el siguiente grfico.
- 14 -
Especificacin
de Rqs.
Anlisis de
componentes
Modificacin
de Rqs.
Diseo de sistemas
con reutilizacin
Desarrollo e
integracin
Validacin
del sistema
- 15 -
Diseo de sistemas con reutilizacin: esta etapa se relaciona con el marco de trabajo, son los
diseadores los que tienen en cuenta los componentes que se reutilizan para organizar el marco
de trabajo que los satisfaga o bien disear nuevos componentes porque no se cuenta con los
necesarios.
Desarrollo e integracin: estas etapas no son independientes, es necesaria su integracin ya que
es parte del desarrollo tener en cuenta los componentes que existen, los que se adquieren
externamente y los que se desarrollan internamente para integrarlos en un todo.
Ventajas de la ingeniera de software basada en componentes:
Reducir la cantidad de software a desarrollar
Reducir costos
Reducir riesgos.
Permite una entrega ms rpida
Riesgos del uso de este modelo:
Si depende totalmente de los componentes a reutilizar puede ser que el producto no
cumpla con las necesidades del cliente.
Las nuevas versiones de los componentes pierden la especificidad de la organizacin, se
plantean generales, por lo que requiere de la necesidad de relevar las reglas de negocio
de cada cliente.
Este modelo tiene mucho en comn con el enfoque que est surgiendo en los ltimos aos para el
desarrollo de sistemas que se basan en la integracin de servicios Web.
Modelo incremental
Si el desarrollo de sistema es complejo y es un proyecto a largo plazo, implica que tiene asociado
demasiados riesgos, como por ejemplo que no se termine, que no cumpla con las necesidades del
cliente que cambiaron desde que lo solicit, que el costo sea muy elevado, entre otros.
Una forma de reducir estos riesgos es construir slo una parte de sistema, organizando por
versiones lo que se incrementa.
En el modelo incremental requiere del 100% de los requerimientos al comienzo del ciclo de vida,
se toman subconjuntos de requerimientos y se desarrollan en versiones siempre incrementando el
producto de software. El documento de requerimientos es escrito al capturar todos los
requerimientos necesarios para el sistema completo, es el que sirve de gua para los incrementos.
Este modelo es compatible con el modelo cascada, no obstante el modelo incremental provee
algunos beneficios significativos para los proyectos:
Construir un sistema pequeo es siempre menos riesgoso que construir un sistema
grande.
Al ir desarrollando parte de las funcionalidades, es ms fcil determinar si los
requerimientos planeados para los niveles subsiguientes son correctos.
Si un error importante es realizado, slo la ltima iteracin necesita ser descartada.
Reduciendo el tiempo de desarrollo de un sistema, decrecen las probabilidades que esos
requerimientos de usuarios puedan cambiar durante el desarrollo.
Si un error importante es realizado, el incremento previo puede ser usado.
Los errores de desarrollo realizados en un incremento, pueden ser arreglados antes del
comienzo del prximo incremento.
- 16 -
Requisitos
Diseo
Requisitos
Diseo de
Arquitectura
Diseo
detallado
Desarrollo
Codificacin
y pruebas
unitarias
Pruebas de
integracin
Pruebas de
sistema
Instalacin y
capacitacin
Implementacin
Aceptacin del
cliente
Tanto el modelo de desarrollo incremental como el modelo de desarrollo evolutivo construyen una
serie de grandes versiones sucesivas de un producto. La diferencia radica en el conocimiento de
los requerimientos, mientras que la aproximacin incremental presupone que el conjunto completo
de requerimientos es conocido al comenzar, el modelo evolutivo asume que los requerimientos no
son completamente conocidos al inicio del proyecto.
Modelos que derivan de los anteriores
Modelo de Prototipado de Requerimientos
El prototipado de requerimientos tiene el propsito explcito de aprender sobre los requerimientos
del sistema, para ello se crea una implementacin parcial del sistema.
- 17 -
- 18 -
Veamos su grfica:
- 19 -
Modelo de espiral
Cada proyecto es organizado y explotado en miniproyectos, es conveniente para modelos del ciclo
meta-vida, o sea que transcurren en el tiempo.
Es un modelo incremental con versiones, en cada una se respetan las etapas, se documenta y va
incluyendo a los productos anteriores.
Normalmente es utilizado en:
Sistemas de gran envergadura
Proyectos con un numeroso grupo de integrantes.
Problemas de Performance
Existencia de requerimientos pobres, poco entendibles
Arquitectura pobremente detallada
Una vez entendido el problema, continua como un proyecto en cascada
Algunas de las ventajas son:
Altos costos significan pocos riesgos
Para desarrollos rpidos
Provee ms controles que los sistemas tradicionales
Se pueden mostrar avances del proyecto
Netamente confiable
Las desventajas que se han manifestado son:
La administracin de los riesgos
Ante un proyecto complejo, requiere una administracin rigurosa (concientizada). Se deben
definir hitos de control de pase de una etapa a otra
Difcil de ser construidos con tiempos predeterminados
- 20 -
Veamos su grfica:
- 21 -
El modelo iterativo e incremental es utilizado por metodologas modernas y es adoptado por UML
(Lenguaje de modelado unificado). Su grfica es la siguiente (fuente: Book Racional Modeler)
El grfico del modelo iterativo e incremental presenta una tabla de dos entradas, las columnas
representan las Fases y las filas representan los Flujos de trabajo.
Las fases son cuatro: Inicio, Elaboracin, Construccin y Transicin.
Los flujos de trabajo representan las actividades y son 7: Requerimientos, Anlisis y Diseo,
Implementacin, Prueba, Administracin de configuracin, Administracin del proyecto y Entorno.
Las tres ltimas etapas se toman como acompaamiento de todo el proceso de desarrollo.
- 22 -
Integracin
Test de (8%)
Mod.(7%)
C od. De
Mdulos
(5%)
Mantenimiento
(67%)
Diseo (6%)
Especificacin (5%)
Requerimientos
(2%)
Gestin de Riesgos
Tal vez la tarea principal del administrador es minimizar el riesgo
El riesgo inherente en un activad es una medida de la incertidumbre de la salida de esa actividad.
Las actividades de alto riesgo causan excesos en los costos y la planificacin.
El riesgo est relacionado con la calidad y cantidad de informacin disponible.
Mientras menos informacin el riesgo es mayor.
Problemas de riesgos en los modelos
Cascada
Alto riesgo en sistemas nuevos debido a problemas de especificacin y diseo.
Bajo riesgo para desarrollos bien conocidos y utilizando tecnologa familiar.
Evolutivos
Bajo riesgo para nuevas aplicaciones debido a que la especificacin y la programacin
estn muy relacionados
Alto riesgo debido a la carencia de visibilidad para el proceso.
Transformacional
Alto riesgo debido a la necesidad de tecnologa avanzada y habilidades en el personal
Vista integral de los modelos
Trataremos entonces en conjunto los modelos integrando las caractersticas de cada uno para
lograr una visin general y particular de ellos, que ayude a la toma de decisiones a la hora de
tener que elegir uno a implementar en un proyecto.
Ciclo de vida
Cascada
Puro
Codificacin y
Arreglo
Espiral
Cascada
Modificado
Prototipacin
Evolutiva
Entrega por
Etapas
Diseo por
Fases
Pobre
Pobre
Excelente
Justo a
excelente
Excelente
Pobre
Pobre a
justo
Pobre
Pobre
Excelente
Justo a
excelente
Pobre a Justo
Pobre
Pobre
Excelente
Pobre
Excelente
Excelente
Justo
Excelente
Justo
- 23 -
Pobre a justo
Excelente
Excelente
Excelente
Excelente
Justo a
excelente
Administracin de riesgos
Pobre
Pobre
Excelente
Justo
Justo
Justo
Justo a
excelente
Justo
Pobre
Justo
Justo
Pobre
Justo
Excelente
Pobre
Excelente
Pobre a
excelente
Justo
Excelente
Justo
Justo
Justo
Justo
Excelente
Pobre
Justo
Pobre a
justo
Pobre
Justo
Excelente
Justo
Excelente
Justo
Justo
Justo
Pobre
Excelente
Justo a
excelente
Justo
Excelente
Excelente
Justo
Excelente
Pobre
Pobre a
Justo
Pobre
Justo
Pobre
Puede ajustarse a un
calendario predefinido
Tiene bajo perfil
Permite correcciones de
medio curso
Provee visibilidad en el
progreso (al cliente)
Provee visibilidad en el
progreso (al administrador)
Requiere poca
administracin o
sofisticacin de desarrollo
Pobre
Resumen:
Los temas tratados en este mdulo tienen que ver directamente con la Ingeniera de software y su
relacin con la Ingeniera de sistemas y la Ciencia de la computacin.
Dentro de los temas de la Ingeniera de software identificamos los conceptos de software,
producto, proceso de desarrollo de software, su ciclo de vida y los distintos modelos de desarrollo
de software y su ciclo de vida.
Tenga en cuenta los puntos clave que remarcamos a continuacin (Sommerville, Ian, captulo 1 y
3):
La Ingeniera en Software es una Ingeniera que abarca todos los aspectos de la
produccin de software.
Los productos de Software consisten en el desarrollo de programas y toda la
documentacin asociada a ellos. Los atributos esenciales son la mantenibilidad,
confiabilidad, eficiencia y usabilidad.
El proceso de software consiste en actividades las cuales involucran el desarrollo de
productos de software. Las actividades bsicas son especificacin, desarrollo, validacin y
evolucin.
Los mtodos son formas organizadas de producir software. Ellos incluyen sugerencias
para el cumplimento del mtodos, la notacin a ser usada, las reglas de validacin de
modelos y guas de diseo.
Las herramientas CASE son sistemas de software los cuales son diseados para auxiliar
en actividades de rutina en el proceso de desarrollo de software. Tales como edicin de
diagramas, verificar la consistencia de diagramas y mantener un registro de los testeos
efectuados.
Los ingenieros en Software tienen responsabilidades para con su profesin y para con la
sociedad. No estn simplemente involucrados en aspectos tcnicos
En cuanto a los sistemas y las Ingenieras puede destacar los siguientes puntos clave
(Sommerville, Ian, captulo 2):
- 24 -
Las propiedades emergentes de un sistema son las caractersticas que actan como un
todo no por partes o componentes del sistema. Incluyen propiedades como el rendimiento,
fiabilidad, usabilidad, seguridad y proteccin. El xito o fracaso de un sistema socio-tcnico
dependen de las propiedades en la mayora de los casos.
Dentro de una organizacin pueden existir ms de un tipo de sistemas, los heredados, los
propios y los adquiridos. Es posible que se planteen conflictos entre el proceso de
adquisicin, el proceso de desarrollo y los procesos operativos internos.
Proceso de Software
o Un conjunto coherente de actividades para especificar, disear, implementar y
testear un sistema de software.
Modelos de Ciclo de Vida
o Cascada demasiado inflexible
Orientado a documentos
o Modelos evolutivos y prototipos
Dependen de las decisiones tomadas antes del entendimiento del problema
o Una buena solucin es integrar protipado rpido y cascada
Puntos clave a tener en cuenta, Sommerville, Ian, (captulo 4 temas 4.1 y 4.2):
- 25 -
Aunque no fueron capaces de elaborar una ruta que guiase la nave hacia tierra firme, s
acuaron un nombre para esa lejana meta: ingeniera de software, ahora definida
formalmente como la aplicacin de mtodos sistemticos, disciplinados y cuantificables al
desarrollo, funcionamiento y mantenimiento del software.
Otro cuarto de siglo despus, la ingeniera de software sigue siendo una aspiracin.
La mayor parte del cdigo de computadoras se confecciona a mano por artesanos que
utilizan lenguajes de programacin bastante burdos tcnicas que ni se miden ni pueden
repetirse con consistencia. Para el profesor universitario Brad J. Cox Es algo as como la
fabricacin de arcabuces antes de Eli Whitney5. Dice Brad J. Cox, un profesor de la
Universidad George Mason, Antes de la revolucin industrial no existan mtodos
especializados de manufactura de productos, lo que entraaba un mximo de destreza
artesanal y un mnimo de intercambiabilidad. Si queremos vencer esta crisis del software ha
de acabarse con el secretismo y con los mtodos preindustriales, en los que cada
programador ha de construirlo todo desde cero.
Pero hay esperanzas. La intuicin va cediendo paso lentamente al anlisis y los
programadores comienzan a utilizar medidas cuantitativas de la calidad del software que
producen para mejorar la forma en que los producen. Los fundamentos matemticos de la
programacin se estn consolidando merced a la investigacin de mtodos para la
expresin algebraica de los diseos de programas, lo que ayuda a evitar la comisin de
errores graves. Los acadmicos de ciencias de la computacin empiezan a tratar de remediar
su fracaso en la generacin de profesionales de software competentes. Y, lo que quizs es
ms importante, muchas personas de la industria centran su atencin hacia la invencin de
las tecnolgicas y estructuras mercantiles necesarias para soportar las partes del software
que sean intercambiables y reutilizables.
Lamentablemente, la industria no aplica uniformemente lo que es reconocido como
mejor prctica, lamenta Larry E. Druffel, director de Software Engineering Institute de la
Universidad Carnegie Mellon. De hecho, una innovacin que genera la investigacin
requiere 18 aos en abrirse paso hasta el repertorio de tcnicas standard de programacin.
es posible que la combinacin de esfuerzos de la universidad, las empresas y la
administracin pblica logren elevar el desarrollo de software hasta el nivel de una
disciplina ingenieril propia de la era industrial en este decenio. Si no se consigue, la alocada
carrera de la sociedad hacia la era de la informacin se tornar, en el mejor de los casos,
espasmdica e impredecible.
Arenas movedizas
A lo largo de los prximos aos presenciaremos cambios enormes [en el uso de los
computadores] que en comparacin harn que la revolucin inicial causada por el
ordenador personal resulte insignificante, concluan el pasado mes de abril veintids
especialistas en el desarrollo de software, procedentes de la universidad, de las empresas y
de los laboratorios de investigacin. Estos expertos se reunieron en Hedson Parkn un lugar
cerca de Londres para conmemorar la conferencia de la OTAN y para considerar las
direcciones del software en el futuro. En 1968 sabamos lo que queramos construir, pero
no podamos hacerlo, rememora Cliff Jones, profesor de la universidad de Manchester.
Hoy pisamos arenas movedizas.
Las bases en que se asientan las prcticas tradicionales de programacin son
erosionadas rpidamente conforme los ingenieros de hardware van lanzando equipos cada
vez ms rpidos, ms pequeos y ms baratos. Muchos de los supuestos fundamentales de
los programadores (por ejemplo, su aceptacin de que sus productos siempre tendrn
defectos) deben de cambiar en consecuencia. Como indica la profesora Mary S. Shaw, de
Carnegie Mellon, cuando los interruptores de la luz incorporen computadoras es preciso
que el software funcione la primera vez, porque no habr posibilidades de revisarla.
La cantidad de cdigo instalada en la mayora de los productos de consumo se est
duplicando cada dos aos, segn Remi H. Bourgonjon, director de tecnologa de software
del Philips Research Laboratory, en Eindhoven. Un televisor actual puede incorporar hasta
500 Kb de software y una afeitadora elctrica, 2 Kb. Las transmisiones de los nuevos
automviles de General Motors ejecutan de 30.000 lneas de cdigo de computadora.
Lograr que el software funcione bien la primera vez les resulta difcil incluso a
quienes procurar conseguirlo. El Departamento de Defensa de los Estados Unidos (DoD)
aplica normas de ensayo muy estrictas- y costosas- para garantizar la confiabilidad de
software del que depende una misin. Esos standards fueron las utilizados en la
certificacin de Clementine, un satlite que el DoD junto con la NASA, queran situar en
rbita lunar la primavera pasada. Un aspecto principal de la misin consista en ensayar
software de seleccin de blanco, aptos para ser utilizados algn da en un sistema defensivo
antimisiles, instalado en el espacio. Pero cuando se hizo girar al satlite para que situara a la
Luna en su punto de mira, un bug del programa provoc que, en lugar de lo solicitado, la
nave mantuviera ininterrumpidamente encendidos sus motores de maniobra durante 11
minutos. El satlite, agotado su combustible y girando alocadamente sobre s, mismo no
pudo efectuar el encuentro previsto con el asteroide Geographos.
La deteccin de errores en sistemas de tiempo real, como el Clementine, resulta de
una dificultad diablica porque, lo mismo que pasa con ese ruidito sospechoso del motor de
nuestro coche, slo suelen manifestarse en circunstancias muy determinadas [vase Los
riesgos de la programacin, por Bev Littlewood y Lorenzo Strigini; INVESTIGACIN Y
CIENCIA, enero de 1993]. No est claro que los mtodos utilizados actualmente para la
produccin de software en los que la seguridad tiene importancia decisiva -caso de los
reactores nucleares o de los automviles- evolucionen y se amplen en la medida necesaria
para satisfacer nuestras expectativas futuras, adverta Gilles Kahn, director cientfico del
laboratorio de investigacin INRIA de Francia, en la reunin de Hedson Park. Me parece,
por el contrario, que en el caso de estos sistemas estamos en un punto de quiebre.
La software sufre tambin las presiones de la inexorablemente creciente demanda de
sistemas distribuidos, esto es, programas que operen conjuntamente en muchos
computadores integrados en una red. Las empresas estn volcando recursos a manos llenas
en sistemas de informacin distribuidos, que confan en poder utilizar como armas
estratgicas. La inconstancia del desarrollo del software pueden hacer de tales proyectos
una ruleta rusa.
Son muchas las empresas seducidas por metas de apariencia sencilla. Algunas tratan
de reencarnar en forma distribuida software obsoleto basado en mainframe. Otros desean
conectar entre s los sistemas de que ya disponen, o conectarlos a sistemas nuevos mediante
los que se pueda compartir datos y disponer de una interfaz ms amistosa para el usuario.
En la jerga tcnica, este tipo de interconexin de programas suele denominarse integracin
de sistemas. Pero Brian Randell un cientfico de la computacin de la Universidad de
Newcastle en Tyne, sugiere que hay una palabra ms adecuada que integracin, del slang
de la RAF: nominalmente to graunch, que significa hacer que algo encaje por aplicacin
de una fuerza excesiva.
El asunto es riesgoso, pues aunque el software pueda parecer cosa maleable, la
mayora de los programas son en realidad complicadas redes de estructuras lgicas muy
frgiles, a travs de los cuales solamente pueden pasar datos de naturaleza especfica. Al
igual que los arcabuces hachos a mano, diversos programas pueden realizar funciones
semejantes y ser, sin embargo, de diseo exclusivo. De aqu que sean difciles de modificar
y de reparar, y de aqu tambin que las tentativas de embutirlos unos en otros acaben a
menudo de mala manera.
Por poner un ejemplo. El Departamento de Vehculos Automotor de California
decidi en 1987 hacerles la vida ms fcil a los conductores, para lo que resolvi fundir en
uno los sistemas de permiso de conduccin para el personal y de circulacin de los
vehculos. Tarea sencilla, en apariencia. Los responsables confiaban en que en 1993
tendran en servicio quioscos donde se efectuasen cmodamente las renovaciones en una
sola parada. En vez de ello, lo que vieron era cmo se multiplicaba por 6,5 el costo previsto
y se pospona hasta 1998 la fecha de inauguracin. El pasado diciembre cerraron el grifo y
perdieron la inversin efectuada en los siete aos: 44,3 millones de dlares.
Hay veces que nada es tan catastrfico como el xito. En el decenio de 1970, la
compaa American Airlines construy el SABRE, un sistema de reserva de pasajes de
autentico virtuosismo, que costo 2000 millones de dlares y lleg a formar parte de la
infraestructura de la industria de viajes. SABRE constituy el ejemplo ms luminoso de
sistema estratgico de informacin, porque hizo que American Airlines se convirtiera en la
mayor lnea area del mundo, recuerda Bill Curtis, consultor del Software Engineering
Institute.
Decidida a valerse del software con igual efectividad en este decenio, American
Airlines trat de acoplar sus sistema de reserva de pasajes con los de reserva de hotel y de
alquiler de automviles de Marriott, Hilton y Budget. El proyecto colaps en 1992, en
medio de un montn de pleitos. Fue un fracaso aplastante, dice Curtis. American
Airlines tuvo que pasar a prdidas 165 millones de dlares por esta causa.
Mal puede decirse que la compaa area se encuentre sola en sus sufrimientos. El
Consulting Gropu de IBM hizo pblicos en junio los resultados de un estudio efectuado en
24 compaas lderes que haban desarrollado grandes sistemas distribuidos. Las cifras eras
inquietantes: el 55 por ciento de los proyectos cost ms de lo esperado, el 68 por ciento
incumpli los plazos previstos y el 88 por ciento tuvo que redisearse a fondo.
El informe no mencionaba, empero, un dato estadstico de la mayor importancia: la
confiabilidad del funcionamiento de los programas terminados. Los sistemas informticos
suelen estrellarse o quedarse colgados debido a su incapacidad de enfrentar lo inesperado.
Las redes amplan el problema, Los sistemas distribudos pueden consistir en un conjunto
muy grande de puntos individuales interconectados, en lo que cabe que se produzcan fallas
y muchos de los cuales no estn identificados de antemano, explica Randell. La
complejidad y la fragilidad de estos sistemas plantean un problema de primera magnitud.
El desafo de la complejidad no slo es grande sino que va en aumento. Lo que
recibe uno por cada unidad monetaria invertida en ordenadores se duplica cada 18 meses,
ms o menos. Lo que origina, entre otras cosas, un crecimiento de un orden de magnitud
en el tamao de los sistemas por decenio y, en ciertos sectores, cada cinco aos, segn
Curtis. Para no verse superados por semejante demanda, los programadores tendrn que
cambiar la forma en que trabajan. No se pueden construir rascacielos con carpinteros,
bromea.
Auxilio! !Socorro!
Cuando un sistema se vuelve tan complejo que ningn gerente lo comprende
individualmente por completo, los procesos tradicionales de desarrollo se vienen abajo. La
Administracin Federal de Aviacin estadounidense (FAA, Federal Aviation
Administration) ha tenido que afrontar este problema a lo largo de su intento- que ya dura
diez aos- de sustituir el sistema de control de trfico areo del pas, cada vez ms
anticuado.
En su sustituto, denominado Sistema Avanzado de Automacin (AAS, Advanced
Automation Systems), se combinan todos los problemas de la computacin de nuestro
decenio. El programa, cuyo tamao supera el milln de lneas, est distribuido en cientos de
ordenadores y empotrado en aparatos nuevos y muy complejos. Todo el sistema debe
responder instantneamente a acontecimientos impredecibles durante las veinticuatro horas
del da. Incluso un ligero bug puede constituir una amenaza para la seguridad pblica.
Para llevar a la prctica sus sueo tecnolgico, la FAA seleccion a Federal Systems
Company, de IBM, entidad de muy buena reputacin y lder en el desarrollo de software,
posteriormente adquirida por Loral. Los responsables de la FAA esperaban (aunque no lo
exigieron) que IBM aplicase las ltimas tcnicas disponibles para estimar el costo y la
duracin del proyecto, al igual que dieron por supuesto que revisara cuidadosamente
requerimientos y el diseo del sistema, para detectar los errores cuanto antes, cuando es
posible corregirlos en horas y no en das. Y aceptaron - conservadoramente - que tendran
que pagar unos 500 dlares por lnea de programa producida, unas cinco veces ms que el
costo medio normal para procesos de desarrollo bien gestionados.
software predecible y que solucionen las necesidades de sus clientes. El CMM aplica una
escala de cinco niveles, que van desde el caos en el nivel 1, hasta el parangn de una buena
gestin en el nivel 5. Las organizaciones evaluadas hasta ahora son 261.
La aplastante mayora- alrededor del 75 por ciento- siguen todava empantanadas
en el nivel 1, nos cuenta Curtis. Carecen de procesos formales, no miden lo que hacen y
no tienen forma de saber si van por el mal camino o si han descarrilado del todo. (El
Centro de Anlisis Naval concluy que el nivel del proyecto AAS en Federal Systems, de
IBM, como 1 bajo.) El 24 por ciento restante de los proyectos se encuentra entre los
niveles 2 y 3.
Tan slo dos grupos de elite han merecido la mxima puntuacin CMM, el nivel 5.
El equipo de programacin que Motorola tiene en Bangalore, India, ostenta uno de esos
ttulos. El otro ha sido el proyecto de software de a bordo para el transbordador espacial,
realizado por Loral (que antes perteneca a IBM). Tan perfectamente ha aprendido el equipo
de Loral a controlar los errores, que es capaz de pronosticar correctamente cuntos van a
descubrirse en cada nueva versin del software. Se trata de una a hazaa notable, habida
cuenta de que la mayora de los programadores ni siquiera llevan la cuenta de los bugs que
descubren, de acuerdo a Capers Jones, Chairman de Software Productivity Research. Y
entre quienes lo hacen, dice, son pocos quienes detectan ms de la tercera parte de los
existentes.
El director del proyecto de software para el transbordador espacial, Tom Peterson,
atribuye su xito a una cultura que se esfuerza por enmendar no slo los errores del
programa sino tambin las fallas del proceso de comprobacin, que permitieron que los
primeros pasaran desapercibidos. No obstante, siempre se cuela alguno. El primer
lanzamiento del transbordador espacial en 1981 tuvo que interrumpirse y posponerse dos
das debido a que una seal errnea impidi que los cinco ordenadores de a bordo quedaran
debidamente sincronizados. Otro fallo, esta vez en el programa de rendezvous del
transbordador, puso en peligro la misin de rescate del satlite Intelsat-6, en 1992.
Aunque el modelo CMM no es la panacea, la promocin que de l ha realizado el
SEI ha persuadido a algunas de las principales empresas de software de que, a largo plazo,
el control cuantitativo de la calidad puede resultar rentable. As, por ejemplo, la divisin de
equipos de Raytheon elabor en 1988 un iniciativa de ingeniera de software tras haber
fallado en una evaluacin del CMM. Empezaron a invertir un milln de dlares anuales
para refinar las guas de inspeccin y de verificacin rigurosa y para formar a sus 400
programadores para que las siguieran.
En el plazo de tres aos ya haban escalado dos niveles. El mes de junio pasado casi
todos los proyectos, entre ellos complejos sistema de radar y de control de trfico areo, se
estaban concluyendo antes de plazo y a costo inferior del presupuestado. La productividad
se ha duplicado con holgura. Los anlisis de costos de retrabajo han indicado ahorros de
7,80 dlares por cada dlar invertido en la iniciativa. Impresionada por semejantes xitos, la
Fuerza Area de los Estados Unidos ha establecido que quienes desarrollen programas para
ella han de alcanzar el nivel 3 de CMM en 1998. Se tienen noticias de que la NASA piensa
actuar de forma parecida.
Re- creaciones matemticas
En tanto los humanos creen programas, siempre se producirn errores; hasta los
diseos ms cuidados pueden desviarse. No obstante, los bugs detectados en los estadios
iniciales raramente amenazan los plazos y presupuestos de un programa. Los que provocan
efectos devastadores son casi siempre deslices cometidos en el diseo inicial que llegan
intactos hasta el producto definitivo.
Los fabricantes de programas para mercados masivos, que no han de complacer a un
cliente individual, pueden adoptar un enfoque a posteriori y de fuerza bruta para eliminar
los defectos: hacen circular el producto deficiente con el nombre de versin beta y dejan
que multitudes de usuarios se encarguen de descubrir las fallas. Segn Charles Simonyi, un
Arquitecto Jefe de Microsoft, la nueva versin del sistema operativo Windows ser objeto
de tests beta por veinte mil voluntarios. Tal sistema es muy eficaz, pero tambin oneroso,
ineficiente y poco prctico, dado que los productos masivos para computadores personales
slo suponen el diez por ciento del mercado de software en los Estados Unidos, que mueve
92.800 millones de dlares al ao.
En consecuencia, los investigadores formulan diversas para atacar los errores
tempranamente, e incluso para impedir que ocurran. Una ideas consiste en tener en cuenta
que el problema que se supone resuelve el sistema, siempre cambia a medida que se lo va
construyendo. Las planificaciones del aeropuerto de Denver cargaron sobre las espaldas de
BAE modificaciones por valor de 20 millones de dlares en el diseo del sistema de
equipajes mucho despus de haberse iniciado su construccin. IBM sufri de igual manera
las indecisiones de los directivos de la FAA. Ambas empresas haban dado por supuesto,
ingenuamente, que una vez aprobado su diseo, se las dejara en paz para construirlo.
Algunos desarrolladores estn abandonando esa ilusin y repensando al software
como algo que, ms que construirse, se cultiva. En un primer paso, se hilvana rpidamente
un prototipo merced a componentes estndar de interfases grficas. Lo mismo que las
maquetas utilizadas en arquitectura, el prototipo de un sistema puede servir para aclarar
malentendidos entre el programador y su cliente antes de empezar a establecer los cimientos
lgicos.
Pero los prototipos sirven de poco en la deteccin de inconsistencias lgicas del
diseo, pues slo remedan el aspecto externo de su comportamiento. La gran mayora en
software de gran envergadura son errores de omisin, nota Laszlo A. Belady, director de
Mitsubishi Electric Research Laboratory. Y una vez escrito el programa los modelos en
nada facilitan la deteccin de bugs.
Cuando la exigencia de correccin del programa es absoluta, dice Martyn Thomas,
gerente general de Paxis, una compaa britnica de software, los ingenieros recurren a
otra vez el mismo cdigo. Pero estos componentes dejan de funcionar al ser trasladados a
un lenguaje de programacin diferente, o a una plataforma de hardware o entorno operativo
de distinto tipo. La tragedia es que, al devenir obsoleto el hardware, resulta necesario
volver a escribir lo que era una excelente muestra de un algoritmo de clasificacin
conseguida en los aos sesenta, observa Simonyi de Microsoft.
Fisher ve una tragedia de diferente tipo. El verdadero precio que nosotros pagamos
es que como especialista en cualquier tecnologa de software usted no puede reflejar en un
producto esa peculiar destreza que posee. Y si tal cosa no es posible, tambin es imposible
ser especialista. Y no es que falten quienes lo hayan intentado. Antes de trasladarse a NIST
el ao pasado, Fisher fund y actu de mximo responsable de Incremental Systems. Sin
ninguna duda eramos world-class en tres de las tcnicas que intervienen en los
compiladores, pero no alcanzbamos el mismo nivel de calidad en las otras siete o as,
declara. Y descubrimos que no haba ninguna forma prctica de vender componentes de
compilador; era preciso que vendiramos compiladores completos.
As que ahora est tratando de ponerle remedio a esa situacin. NIST anunci en
abril que estaba preparando un Programa de Tecnologa Avanzada que contribuyera a
generar un mercado para software basado en componentes. En su calidad de director del
programa, Fisher distribuir 150 millones de dlares en subvenciones de investigacin a
compaas de software dispuestas a afrontar los obstculos tcnicos que actualmente hacen
inviable producir partes de software.
El mximo desafo consiste en encontrar formas de romper los lazos que ligan
indisolublemente los programas a computadores especficos y a otros programas. Los
investigadores estn estudiando varios mtodos prometedores, entre ellos un lenguaje
comn que podra servir para describir partes de software; programas capaces de reformar
los componentes, adaptndolos a un ambiente cualquiera; y componentes provistos de
mltiples opciones, que el usuario podra activar o no.
Fisher favorece la idea que las componentes deberan ser sintetizadas en la accin.
Los programadores deberan bsicamente capturar cmo hacer en lugar de hacindolo,
produciendo una reformulacin que cualquier computadora pueda comprender. Luego
cuando usted quiere ensamblar dos componentes, usted podra tomar esta reformulacin y
derivar versiones compatibles aadiendo elementos adicionales a sus interfaces. Todo
podra ser automatizado, explica.
Incluso con un incentivo de 150 US$ millones y presiones del mercado forzando a
las empresas a encontrar caminos ms baratos para producir software, no es inminente una
revolucin industrial en el software. Nosotros esperamos ver solamente ejemplos aislados
de estas tecnologas en cinco a siete aos - y eso en el caso que no fracase todo, se
resguarda Fisher. E incluso cuando la tecnologa est a punto, sern pocos quienes adopten
los componentes a menos que stos puedan producirse a un precio ventajoso. Y el costo de
los mdulos depender menos de la tecnologa utilizada que del tipo de mercado que pueda
surgir para producirlos y consumirlos.
Brad Cox, como Fisher tambin fue director de una compaa de componentes de
programacin y le result difcil sacarla adelante. Cree saber dnde est el problema...y su
solucin. Su empresa trataba de vender componentes de programas de bajo nivel, algo
anlogo a los microcircuitos de los ordenadores. La diferencia entre los circuitos
integrados de silicio y los circuitos integrados para software estriba en que los primeros
estn formados por tomos, y perduran por conservacin de la masa; en consecuencia la
gente sabe como comprarlos y venderlos con seguridad, dice Cox. Pero este proceso de
intercambio, que se encuentra en el corazn de todo el comercio, sencillamente no funciona
para cosas que se pueden copiar en nanosegundos. Cuando trat de vender los mdulos
creados por sus programadores, el precio que los clientes estaban dispuestos a pagar era
demasiado bajo para resarcirle de los costos de desarrollo.
Las razones eran dobles. La primera, que la adaptacin manual de los mdulos a las
necesidades de cada cliente era una operacin que consuma mucho tiempo; NIST confa en
salvar esta barrera con su Programa de Tecnologa Avanzada. El otro factor no era tanto
tcnico como cultural: lo que quieren los compradores es pagar por el componente una vez
y luego hacer copias gratis.
La industria de la msica ha tenido cerca de un siglo de experiencia con este grave
problema, observa Cox. Ellos solan vender objetos tangibles, como partituras y rollos de
pianola, pero llegaron la radio y la televisin y todo aquello se fue al garete. Las
compaas musicales se adaptaron a la radiodifusin estableciendo agencias encargadas de
percibir los derechos de autor cada vez que se emite una meloda y de encauzar esos fondos
hacia los artistas y los productores.
Cox propone que se les pase un cargo a los usuarios cada vez que utilicen un
componente de programacin. De hecho, dice, en el caso del software tal modelo podra
funcionar mejor que con la msica, gracias a las ventajas de infraestructura que
proporcionan los ordenadores y las comunicaciones. Los reproductores de grabaciones no
disponen de enlace a redes de alta velocidad que registren su utilizacin, peor los
ordenadores, si.
O, por lo menos, la tendrn en el futuro. Escudriando en el tiempo en que casi
todas las computadoras estn conectadas, Cox visualiza la distribucin de software de todos
los tipos a travs de redes que vinculen productores de componentes, usuarios finales e
instituciones financieras. Es anlogo a una operacin de tarjeta de crdito pero con
tentculos que penetran en cada PC, dice. Aunque a algunos pueda sonarle ominoso, Cox
argumenta que ahora Internet es ms un depsito de desperdicios que un mercado para
comprar. Necesitamos una gran infraestructura que pueda soportar la distribucin de todo
tipo de productos. Reconociendo la envergadura del cambio cultural que propone, Cox
espera empujar su causa por aos a travs de la Coalition for Electronic Markets, de la que
es presidente.
La combinacin de control industrial de procesos, herramientas tcnicamente
avanzadas y partes intercambiables promete transformar no slo la forma de realizar la
programacin, sino tambin a los encargados de efectuarla. Muchos de los expertos que
convergieron en Hedsor Park acuerdan con Belady que en el futuro, los profesionales de
muchos campos usarn la programacin como una herramienta de trabajo, pero ellos no
querrn llamarse a s mismos programadores ni creern estar dedicando su tiempo a la
programacin. Pensarn, en cambio, estar haciendo arquitectura, o control de trfico, o
pelculas de cine.
Esta posibilidad suscita la pregunta de quines estn capacitados para construir
sistemas importantes. En la actualidad cualquiera puede anunciarse como ingeniero de
software. Pero cuando se tengan cien millones de programadores-usuarios, ser frecuente
que se hagan cosas criticas para la vida, como, por ejemplo, construir programas para
extender recetas mdicas, hace notar Barry W.Boehm , director del Center for Software
Engineering de la Universidad de Southern California. Boehm es uno del creciente nmero
de quienes recomiendan que los ingenieros de software deben certificarse, como se hace en
otros campos de la ingeniera.
Tal certificacin slo servir de algo si los programadores reciben la formacin
adecuada. Actualmente slo 28 universidades ofrecen programas de posgrado en ingeniera
de software; cinco aos atrs haba slo 10. Ninguna ofrece ttulos de grado. Incluso
acadmicos tales como Shaw, DeMillo y Basili acuerdan que en general la curricula de
computer science ofrece por lo general una preparacin deficiente para el desarrollo
industrial de software. Pues aspectos fundamentales, como el diseo de inspecciones del
cdigo, la produccin de documentacin para el usuario y el mantenimiento de los
programas que van quedndose anticuados, no son cubiertos en la academia, se lamenta
Capers Jones.
Los ingenieros, la infantera de toda revolucin industrial, no se generan
espontneamente. Reciben una formacin tendiente a evitar los malos hbitos de los
artesanos que les precedieron. En tanto las lecciones de la ciencia de la computacin no
inculquen no slo el deseo de construir mejores cosas, sino el de construir mejor las cosas,
lo mejor que podemos esperar es que el desarrollo del software vaya pasando por una
evolucin industrial lenta y probablemente dolorosa.
Bibliografa complementaria
Encyclopedia of Software Engineering. Editada por John J. Marciniak. John Wiley & Sons,
1994.
Software 2000: A View of the Future. Editado por Brian Randell, Gill Ringland y Bill
Wulf. ICL y la Comisin de Comunidades Europeas, 1994.
Formal Methods: A Virtual Library. Jonathan Bowen. Disponible en hipertexto en Wide
World Web, con la referencia http://www.comlab.ox.ac.uk/archive/formal-methods.html
Traduccin del Scientific American aparecida en Investigacin y Ciencia, noviembre de 1994. Revisada por
Alejandro Oliveros. En lo que sigue las notas son comentarios de AO a fin de aclarar la traduccin.
2
Denver, Colorado, es un gran centro de esqu invernal de los Estados Unidos de Amrica
3
Da de Brujas, 2 de noviembre
4
Del hemisferio norte
5
El promotor de las piezas de recambio
6
Alude a un artculo clsico de la Ingeniera de Software, de Fred Brooks. El ttulo No silver bullets, recupera
una leyenda segn la cual al hombre lobo slo se lo puede matar con una bala de plata en el medio del
corazn.
Ahora consideremos los desarrollos tcnicos que son considerados como posibles
balas de plata con mas frecuencia. Qu problemas enfrentan, de esencia o de las
dificultades accidentales que permanecen? Ofrecen avances vanguardistas, o en
crecientes?
Ada y otros avances de lenguaje de alto nivel. Uno de los desarrollos recientes
mas anunciados es Ada, un lenguaje de los aos 80 de alto nivel y con propsitos
generales. Ada no solo refleja mejoras evolutivas en conceptos de lenguajes, sino
que de hecho
Tal vez la filosofa de Ada es ms de un anticipo que el lenguaje Ada, ya que es la
filosofa de la modularizacin, de los tipos abstractos de datos, de jerarquizacin.
Ada es excesivamente sustancioso, un resultado natural del proceso por el que se
establecen los requisitos de su diseo. Eso no es fatal, ya que el trabajo d estos
vocabularios subordinados puede resolver el problema de aprendizaje. Los
vocabularios de trabajo pueden resolver el problema de aprendizaje, y los avances
en hardware nos significaran MIPS ms baratos para pagar los costos de
compilacin. Avanzar en la estructuracin de sistemas de software es, en efecto, un
buen aprovechamiento para los incrementados MIPS que nuestros dlares
compraran. Los sistemas operativos, denunciados a toda voz en la dcada del 60
por su memoria y ciclo de sus costos, ha demostrado ser una excelente forma en la
cual usar algunos de los MIPS y bites de memoria baratos, del pasado surgimiento
de hardware.
No obstante, puede que Ada no resulte ser la bala de plata que mata al monstruo
de productividad de software. Es, despus de todo, slo otro lenguaje de alto nivel,
y el mayor rendimiento de estas lenguas provienen de la primera transicin; la
transicin de las complejidades accidentales en la maquina al orden mas abstracto
de las soluciones paso a paso. Una vez que esos accidentes han sido eliminados,
los restantes sern menores, y el costo de su remocin ser menor. Auguro que
dentro de una dcada a partir de ahora, cuando la eficacia de Ada sea evaluada, se
ver que han hecho una diferencia sustancial, pero no por alguna caracterstica
particular del lenguaje, ni siquiera por todas ellas en conjunto. Tampoco los nuevos
entornos de Ada probaran ser la causa de su mejora. La contribucin ms grande
de Ada ser que utilizarlo significara la capacitacin de los programadores a
modernas tcnicas de diseo de software.
Programacin orientada a objetos: Muchos estudiantes de la tcnica tienen mas
expectativas en cuanto a programacin orientada a objetos que cualquier otra
tcnica de moda. Yo estoy entre ellos. Mark Sherman de Darmouth nota en CSnet
News que uno debe ser cuidadoso para poder distinguir dos ideas separadas que
estn bajo el titulo tipos abstractos de datos y tipos jerrquicos. El concepto de
los tipos de dato abstractos se refiere a que un tipo de objeto debe ser definido con
un nombre, un conjunto de valores y un conjunto adecuado de operaciones y no
por su estructura de almacenamiento, la cual debe ser ocultada. Ejemplos de ello
son los paquetes Ada (con clases privadas) y los mdulos de Modula.
Los tipos jerrquicos, como la clase Simula-67, le permite a uno definir interfaces
generales que pueden ser mejoradas mas tarde administrndoles los tipos de
subordinacin. Los dos conceptos son diagonales; uno puede estar jerarquizado sin
disimulo o disimulo sin jerarquizacin. Ambos conceptos representan verdaderos
avances en el arte de crear un software.
Cada uno remueve otra dificultad accidental del proceso, permitindole al diseador
expresar la esencia del diseo sin tener que expresar una gran cantidad de material
sintctico cuyo contenido no aade informacin. Para ambos, tipos abstractos y
jerrquicos, el resultado es la eliminacin de una gran cantidad de dificultades
accidentales y la posibilidad de un gran numero de expresiones de diseo.
talvez la mas grande entre las disciplinas de la ingeniera. Una herramienta que
difunde las buenas prcticas sera importante.
Programacin Automtica: Por casi 40 aos la gente ha estado anticipando y
escribiendo acera de la programacin automtica o sobre la generacin de
programas resolviendo problemas del orden de la especificacin de problemas.
Algunos actualmente escriben como si esperaran que esta tecnologa proporcione el
prximo gran avance.
Parmas sugiere que el trmino es usado para el glamour, no por su contenido
semntico, afirmando:
En resumen, la programacin automtica siempre ha sido un eufemismo de
la programacin con un mayor nivel de lenguaje disponible actualmente para
el programador.
El argumenta, en esencia, que en la mayora de los casos tiene que ser dada la
explicacin del mtodo de solucin y no del problema en s.
Se pueden encontrar excepciones. La tcnica de creacin de los generadores es
muy potente, y es habitualmente utilizada para traer grandes beneficios en la
clasificacin de los programas. Algunos sistemas para la integracin de ecuaciones
diferenciales tambin han permitido la especificacin directa del problema, y los
sistemas han evaluado los parmetros, elegidos de una biblioteca de mtodos de
solucin, y los programas generados.
Estas aplicaciones tienen propiedades muy favorables:
Sin embargo, no creo que podamos subir un nivel. Ya sea que la diferencia entre
diseos pobres y conceptuales yazca en el mtodo de diseo, la diferencia entre
diseos buenos y excelentes seguramente no. Grandes diseos vienen de grandes
diseadores. La construccin de un software es un proceso creativo. Metodologas
slidas pueden fortalecer y liberar la mente creativa; no puede inspirar el trabajo
duro.
Las diferencias no son menores (son como las diferencias entre Salieri y Mozart).
Estudio tras estudio muestra que los mejores diseadores producen estructuras que
son mas rapidas, mas pequeas, mas simples, mas pulcras y son producidas con
menor esfuerzo. Las diferencias entre el gran diseador y el promedio son
enormes.
Un poco de retrospeccin muestra que aunque muchos software buenos y tiles
han sido diseados por comits y creados como parte de proyectos (multipartes),
esos sistemas software que han entusiasmado fans son el producto de una o pocas
mentes diseadoras. Consideremos Unix, APL, Pascal, Modula, la interfase
Smalltalk, incluso Fortran; y contrastmoslos con Cobol, PL/I, Algol, MVS/370, y
MS-DOS.
Por lo tanto, aunque yo apoyo fuertemente los esfuerzos en el desarrollo en el plan
de estudios que se estan desarrollando actualmente, creo que el esfuerzo mas
importante que podemos (trepar) es el desarrollo de mtodos para aumentar
grandes diseadores.
Ninguna organizacin software puede ignorar este desafi. Buenos gerentes no son
tan escasos como los buenos diseadores. Grandes gerentes y grandes diseadores
son ambos muy escasos. La mayora de las organizaciones hace considerables
esfuerzos por encontrar los prospectos administrativos; no conozco ninguna que
haga el mismo esfuerzo en encontrar grandes diseadores de los que la excelencia
de sus productos depende.
Mi primera propuesta es que cada organizacin software debe determinar y
proclamar que los grandes diseadores son tan importantes para su progreso como
lo son los gerentes, y que deben ser igualmente fomentados y recompensados. No
solo en cuanto al salario, tambin gratificaciones de reconocimiento deben ser
equivalentes: tamao de la oficina, amoblado, equipo tcnico personal, fondos de
viaje, equipo de apoyo.
Como aumentar a los grandes diseadores?
-Identificar sistemticamente a los mejores diseadores lo mas pronto posible. Los
mejores no siempre son los ms experimentados.
-asignar un orientador profesional para que se haga responsable por el desarrollo
del prospecto.
-desarrollar y mantener un plan profesional de desarrollo para cada prospecto
-dar oportunidades de crecimiento a los diseadores, para que interacten y se
estimulen entre si.
Definir y exigir las notas de proteccin del control de cdigo fuente, para que no se pierdan
versiones ni estn almacenadas en lugares que no son accesibles por todos los
integrantes del equipo.
-1-
Si lo que tenemos que representar es un proceso de negocio que tiene que ver con un
requerimiento funcional del sistema, tenemos que plasmarlo en la plantilla de procesos para que
quede documentado.
Qu diferencias existen entre proceso, procedimiento e instructivo?
No todas las empresas e instituciones tienen definidas las tareas necesarias para realizar una
actividad o ms grave an, no tienen el diseo de los procesos fundamentales. Por ejemplo, una
empresa que se dedica a la comercializacin de productos debera tener definido y diseado al
menos los procesos de compra y el de ventas, que son los centrales de su actividad.
Esto depende de la madurez de la empresa y de los empleados, ya que de ellos depende en gran
parte que se cumpla el proceso tal como est definido. Otras tantas empresas tienen establecidas
algunas formas para realizar el trabajo, desde tareas ligeramente organizadas hasta sistemas
enormemente formalizados. Estos mtodos o formas para realizar el trabajo se denominan
procesos.
Los procesos no pueden ser estticos, se van desarrollando a lo largo del tiempo para satisfacer
las necesidades de las empresas y contribuir a la eficiencia en su funcionamiento.
Un proceso est compuesto por macro actividades, las cuales contienen actividades organizadas,
si las actividades son varias y tienen algn orden lgico de ejecucin, alternativas o controles que
realizar, se pueden explotar en Procedimientos. Un procedimiento entonces es un conjunto de
tareas que nos indica qu debemos realizar para que se cumpla eficientemente la macro tarea del
proceso. Por ejemplo, en el Proceso de Venta de Productos, las actividades centrales las
podramos definir como:
1. Cliente: solicita el producto.
2. Vendedor: ofrece el producto
3. Cliente: define si lo compra.
4. Vendedor: realiza la factura.
5. Cliente: abona
6. Empaque: entrega el producto.
La actividad Ofrecer el producto implica una serie de actividades, como fijarse si hay en stock, el
precio, buscarlo, otros. Estas tareas definen el Procedimiento de Ofrecer el producto.
Si para la actividad de Fijarse si hay en stock, el vendedor debe realizar acciones bien definidas,
como por ejemplo, entrar al sistema, cargar el cdigo del producto, fijarse si hay stock libre o
comprometido o si no hay y tomar la decisin de ofrecer o no, es parte del Instructivo. De este
modo, el Instructivo indica cmo se debe realizar una accin de un procedimiento o proceso,
es la mnima expresin, la que tiene mayor detalle.
Plantillas de procesos
Cuando hablamos de plantillas de procesos no nos referimos slo a una sino a varias plantillas.
Estas plantillas indican cmo se configura el proyecto. Cada una de estas plantillas ofrece un
conjunto predeterminado de elementos de trabajo, segn estos, podremos encontrar las plantillas
de procesos, de procedimientos, de instructivos, de documentos, de informes, entre los ms
usados.
-2-
Recuerde que la plantilla es el marco para todos los procesos, donde cada registro llena los
campos con lo especfico del proceso que se est diseando.
Control de cambios
Con el uso de los procesos puede ser que necesite realizar algn cambio en la plantilla o en el
proceso; este cambio debe quedar documentado, para ello se establece una plantilla de Control
de cambio donde se deja asentado el documento en el que se est realizando el cambio, el texto
anterior y el nuevo texto.
Este control de cambio es fundamental para tener versionados los documentos y la trazabilidad de
los mismos.
Datos indispensables de la plantilla de Control de cambio:
Proceso.
Documento.
Razn de cambio.
Texto original.
Nuevo texto.
Pgina donde est el texto.
Estos datos se repiten en un mismo documento de Control de cambio por proceso o por
documento, quedando reflejado el historial de cambios.
-3-
Descripcin
Clasificacin
Grupos y permisos
Herramienta a utilizar
Seguimiento de
elementos de trabajo
Informes
Control de versiones
-4-
normalmente en etapas. Pero nos detenemos a pensar previamente, en cul es la diferencia que
existe entre tarea y actividad.
Veamos primero qu nos dice la Real Academia Espaola sobre estos significados.
Actividad:
1. f. Facultad de obrar.
2. f. Diligencia, eficacia.
3. f. Prontitud en el obrar.
4. f. Conjunto de operaciones o tareas propias de una persona o entidad.
Tarea:
1. f. Obra o trabajo.
2. f. Trabajo que debe hacerse en tiempo limitado.
Etapa:
3. f. Fase en el desarrollo de una accin u obra.
Accin:
1. f. Ejercicio de la posibilidad de hacer.
2. f. Resultado de hacer.
Como se puede apreciar, todos los trminos hacen referencia a realizar un trabajo, slo que en
diferentes grado de detalle o generalizacin. No es necesario filosofar sobre los conceptos de
accin y tarea, las dos llevan a la concrecin de una actividad.
De las definiciones de la Real Academia Espaola rescato los siguientes conceptos:
Actividad: Conjunto de operaciones o tareas propias de una persona o entidad, nos indica que
la actividad est compuesta por varias tareas, por ejemplo, la actividad realizar un dibujo,
implicar ver cules son las tareas o acciones que debe realizar para lograr el objetivo.
Tarea: Trabajo que debe hacerse en tiempo limitado. Esta definicin aporta el concepto de tiempo
asociado a la tarea, lo que indica que una tarea no puede disponer de infinito tiempo, nos sugiere
el concepto de eficiencia, tarea realizada en tiempo y forma.
Si la actividad lleva asociada un conjunto de numerosas a tareas, es conveniente organizarla de
forma que se vallan cumpliendo etapas. Estas etapas representan un flujo de trabajo.
Flujo de trabajo es el estudio de los aspectos operacionales de una actividad de trabajo.
Qu es Workflow?
Se define Workflow al flujo de trabajo a seguir para la consecucin de una tarea o trabajo
predeterminado. El flujo de trabajo determina cmo se estructuran las tareas, cmo se realizan,
-5-
cul es su orden correlativo, cmo se sincronizan, cmo fluye la informacin que soporta las
tareas y cmo se le hace seguimiento al cumplimiento de las tareas.
Tambin se puede definir como un sistema de secuencia de tareas de un proceso de negocio.
Su definicin y control puede ser manual, informatizado o mixto. Organiza y controla tareas,
recursos y reglas necesarias para completar el proceso de negocio.
Las nuevas tendencias en la regulacin de las organizaciones, hacen del Workflow una
herramienta clave para lograr mayor agilidad y aumentar la descentralizacin de las actividades
administrativas y comerciales.
La importancia del Workflow consiste en buscar la mxima automatizacin de los procesos de
trabajo y el control total de las diferentes etapas, durante las cuales los documentos, la
informacin o las tareas pasan de un participante a otro, o sea de un rol a otro, segn unas
normas o procedimientos previamente definidos.
En estos ltimos aos, se han ido desarrollando diversas aplicaciones de software, muchas de
ellas han evolucionado a partir de sistemas de gestin, ya sea de imagen, sistemas de gestin de
documentos, sistema de gestin administrativa, gestin comercial, sistemas de correo electrnico
o de bases de datos.
Comparemos ahora los sistemas tradicionales con los sistemas basados en Workflow:
Objetivos Sistemas de Informacin tradicional:
Mejorar la productividad
Aumentar la calidad del trabajo
Reducir costes
El mbito de un Sistema de Informacin tradicional est determinado por:
Modelo de datos
Funciones independientes.
La principal limitacin asociada a los Sistemas de Informacin (S.I.) tradicionales es que, no
contemplan los procedimientos, organizacin y mtodos de trabajo del sistema real.
Cuando las organizaciones no cuentan con el estudio de los procedimientos organizativos se
derivan los siguientes problemas:
Necesidad de adaptar los procedimientos organizativos al sistema de informacin
Posibilidad de conflicto entre los procedimientos organizativos y los mdulos funcionales
Falta de control sobre las actividades de la organizacin como un todo.
Recordemos que una aplicacin de Flujos de Trabajo (Workflow) permite automatizar la
secuencia de acciones, actividades o tareas utilizadas para la ejecucin del proceso, incluyendo el
seguimiento del estado de cada una de sus etapas y la aportacin de las herramientas necesarias
para su gestin.
Los objetivos de un sistema de Workflow son:
Reflejar, automatizar y mecanizar los mtodos y su organizacin en el sistema de
informacin
Establecer los mecanismos de control y de seguimiento de los procedimientos
organizativos
-6-
-7-
-8-
Por ejemplo, una empresa que se dedica a la comercializacin de productos, tendr como proceso
clave el de ventas, mientras que de apoyo puede ser el proceso de despacho o el administrativo.
Todo proceso tiene un inicio y un fin, puede decirse que el proceso de venta finaliza cuando el
cliente compr el producto solicitado. Pero ya hace unos aos que ha cobrado mucha importancia
el cliente y la relacin con la empresa; si se quiere atender a la calidad de la atencin al cliente es
conveniente ver el lmite del proceso ms all del momento de la facturacin y su partida, cobra
importancia el servicio de post venta, lo que implica un seguimiento considerando que el cliente
queda en relacin con la empresa.
Este tipo de proceso que se especializa puntualmente en algo, es considerado proceso
especializado, como lo es un CRM (Customer Relationship Management o en espaol,
Gerenciamiento Relacionado al Cliente.)
En todas las disciplinas existen Procesos especializados, es muy importante detectarlos y
tratarlos como tal, es decir, ser especialistas en una cosa, esto es lo que no se debe perder.
Plantilla
HERRAMIENTAS
PROYECTO
Automatizacin
Resultado
PRODUCTO
-9-
la tecnologa
las herramientas
la gente
los patrones organizacionales
Cul es el criterio que se debe tener para definir un proceso de desarrollo de software?
En la definicin de un proceso de desarrollo de software se identifican elementos del proceso que
responden a una pregunta bien definida, veamos algunos de los elementos ms importantes del
proceso:
Propsito,
Por qu se realiz el proceso?
Entrada,
Qu productos de trabajo se utilizan?
Salida,
Qu productos de trabajo se generan?
Rol,
Quin o qu realiza la actividad definida en el proceso?
Actividad,
Qu se hace?
Criterio de entrada, Cundo puede iniciarse el proceso?
Criterio de salida,
Cundo puede considerarse un proceso completo?
Procedimiento,
Cmo son implementadas las actividades?
- 10 -
- 11 -
disminuye y las algunas actividades se elimina, como por ejemplo, la especificacin abstracta y el
diseo de algoritmos.
Desarrollo
La actividad de desarrollo sigue naturalmente a la etapa de diseo. El desarrollo del software es el
proceso de codificacin en un lenguaje de computacin, de los requerimientos definidos,
analizados y diseados.
Al programador le llega la documentacin de los requerimientos y es su responsabilidad
transformarlos en un programa ejecutable.
Al finalizar su programacin es necesario que realice la comprobacin de su funcionamiento, es
decir, el chequeo de que su trabajo est bien realizado, que el programa funciona correctamente y
que cumple con las especificaciones, o sea verifica los requerimientos, que no se hayan
efectuados cambios.
Este es el momento en que se pueden encontrar errores, es el mismo programador el que los
depura hasta llegar a una versin confiable.
Las herramientas CASE se pueden utilizar para generar un programa esqueleto a partir del
diseo, esto incluye cdigo para definir e implementar las interfaces, necesitando el programador
solo agregar detalles de cdigo.
Etapa de Validacin del software
La validacin del software es la etapa en la que se realizan comprobaciones. En general se
conoce como V & V, verificacin y validacin, se utiliza para mostrar que el sistema se ajusta a su
especificacin y que cumple las expectativas del cliente.
Esta etapa implica procesos de comprobacin de requerimientos, en el seguimiento de las etapas.
Este proceso se puede realizar al final del proceso de desarrollo o bien despus de cada etapa,
como lo muestra el modelo V.
- 12 -
de la validacin para comprobar que el sistema cumple con los requerimientos funcionales
y no funcionales definidos en la etapa de especificacin.
3- Prueba de aceptacin, parte final del proceso donde se prueba con los datos
proporcionados por el cliente, antes de su aceptacin final.
Etapa de evolucin del software
Una vez entregado el producto de software al cliente se comienza a usar; esta etapa es muy
importante ya que el cliente se dar cuenta si hay algn requerimiento para refinar, agregar o
cambiar, estos sucesos hacen a la evolucin del software.
Si el software informatiza los procesos de negocio y estos son dinmicos es lgico pensar que el
software tambin debe serlo, es por ello que habr cambios en el software.
Es la etapa lleva ms tiempo en el proceso de desarrollo de software, porque se mantiene en el
tiempo. El problema de esta etapa es que muchas veces se confunde mantenimiento de la
evolucin del software con mantenimiento de arreglo de errores del software.
Si el software fue entregado al cliente con errores significa que no cumpli con las etapas del
proceso correctamente, sobre todo la de prueba de software, lo cual lleva a muchos problemas:
Cliente desconforme
Producto que no es de calidad
Tiempo perdido en recodificacin del software
Gasto operativo que se incrementa sin poder medir las prdidas
No se puede cobrar al cliente el costo de la resolucin de errores.
Nuevamente crisis del software.
Hagamos un breve resumen de los contenidos aprendidos hasta aqu.
Los temas tratados en este Mdulo tienen que ver directamente con la Ingeniera de software y su
relacin con los procesos.
Hemos visto el concepto de proceso desde la visin del negocio y del proceso de desarrollo de
software, con un enfoque tradicional y desde el enfoque de Workflow.
Tenga en cuenta los puntos clave que remarcamos a continuacin:
Todos los procesos representan algn flujo de trabajo que implica actividades
organizadas de algn modo con personas responsables de ejecutarlas.
Los flujos de trabajo como Workflow representan mejor la realidad de los procesos, dan
una vista horizontal del mismo, con lo que un actor no es slo responsable de su
actividad, sino que es responsable del proceso, en cuanto que hay otro actor que
depende de que su actividad est resuelta satisfactoriamente.
Los procesos de software son las actividades relacionadas con la produccin de un
sistema de software.
Todos los procesos de software incluyen las etapas fundamentales: especificacin,
implementacin, prueba y evolucin.
La validacin y verificacin de los requerimientos es necesaria para que el producto de
software a entregar cumpla con las expectativas del cliente.
- 13 -
- 14 -
Ya hemos presentado las definiciones de proceso, trabajador o rol, Workflow y actividad, slo
resta definir qu es un artefacto.
- 15 -
Un Artefacto, es una pieza de informacin que es producida, modificada o usada por un proceso.
- 16 -
- 17 -
La grfica del ciclo de vida nos muestra el esfuerzo de cada fase con los flujos de trabajo
relacionados en cada una de ellas. Tambin se tienen en cuenta los flujos de trabajo de soporte,
los cuales acompaan a todas las fases, como son la gestin de cambio y configuracin, la
gestin de proyectos y el entorno de trabajo.
Cmo sabemos que es un ciclo iterativo e incremental?
Para determinar si es un ciclo iterativo e incremental se deben reconocer las caractersticas a
cumplir:
Es planificado y controlado.
Es predicable
Acomoda los cambios a los requerimientos con menos alteraciones.
Est basado en prototipos ejecutables que evolucionan, no en la documentacin.
Involucra a clientes y usuarios a lo largo del proceso.
Es conducido por los riesgos.
- 18 -
Adems se necesita contar con las herramientas necesarias para automatizar las actividades
definidas en el proceso.
- 19 -
En la grfica anterior se identifican los Workflow que son parte del proceso unificado:
Modelo de negocio
Requerimientos
Anlisis
Diseo
Implementacin
Prueba.
Cada uno de ellos ha sido definido con anterioridad en este Mdulo.
Si relacionamos estos Workflow con el ciclo de vida, identificamos los flujos de trabajo en detalle
necesarios para cada uno de los planteados en dicho ciclo, como son:
La captura de requerimientos se realiza en las cuatro fases del proceso unificado, siendo de
mayor cantidad de trabajo en las dos primeras, o sea, en las fases de inicio y elaboracin.
Workflow de anlisis, tiene como objetivo realizar el anlisis de los requerimientos, sus
ventajas son:
o Permite una especificacin ms precisa de los requerimientos.
o Se describe en lenguaje tcnico, del programador.
o Le da estructura a los requerimientos.
o Puede verse como un primer corte de los requerimientos.
El anlisis se realiza en las tres primeras fases del proceso, o sea, inicio, elaboracin y
construccin obteniendo las clases de anlisis y el modelo de anlisis.
Workflow de diseo, su objetivo es obtener el diseo completo del sistema para lograr:
o Una comprensin completa de los requerimientos y sus restricciones.
o Refinar los requerimientos obteniendo clases e interfaces individuales
o Descomponer el trabajo de implementacin en piezas entendibles y manejables
por distintos actores del proceso.
o Capturar las interfaces de relacin entre sistemas.
o Crear una abstraccin de la implementacin del sistema.
- 20 -
o
o
o
o
o
Las pruebas se realizan en las cuatro fases, garantizando que cada una de ellas cumple con los
objetivos de calidad y con los requerimientos del cliente.
Para ampliar sobre los contenidos de esta lectura sugerimos recurrir al texto de Jacobson, Booch
y Rumbauch, El Proceso unificado de Desarrollo de Software, parte I y II, captulos 1 al 11
inclusive (bibliografa bsica).
- 21 -
RESUMEN
Actualmente se est retomando el concepto de Fbricas de Software (FS) donde la reutilizacin juega un rol
protagnico. Debido a la existencia de visiones diferentes en el rea y a pesar de que el concepto de FS no es nuevo en
la Ingeniera de Software, an no se cuenta con la madurez conceptual necesaria como para identificar claramente el
tratamiento de ciertas variables dentro del proceso. Por ello, en este artculo se realiza una revisin histrica del
concepto FS y se propone una ontologa basada en las definiciones ms recientes. Este artculo forma parte de una
investigacin en progreso que pretende precisar la calidad sistmica en compaas desarrolladoras de software que
decidan implantar una FS.
Palabras Claves: Fbricas de Software, ontologa, reutilizacin, mejores prcticas.
1. INTRODUCCIN
2. ANTECEDENTES
3. METODOLOGA UTILIZADA
En la Figura 1 se presenta un primer nivel de conceptos
en base a los antecedentes reseados.
Se observa que el trmino FS engloba una cantidad de
conceptos que conviene manejarlos ordenadamente y
este es justamente el fin de esta investigacin en
progreso. Segn [12] una ontologa es una descripcin
explcita y formal de conceptos en un dominio de
discurso. Estos autores en su metodologa para crear
ontologas, proponen los siguientes siete pasos:
1. Determinar el dominio y el alcance.
2. Considerar la reutilizacin de ontologas
existentes.
3. Enumerar los trminos importantes.
4. Definir las clases y su jerarqua
5. Definir las propiedades de las clases
6. Definir las relaciones de las clases
7. Crear las instancias
Para efectos de presentacin en este artculo, no se
detallan cada uno de los pasos propuestos; sin
embargo, a continuacin se resaltan las actividades
realizadas en cada uno de ellos: (1) para encontrar los
trminos relevantes se identificaron aquellos
y ambiente.
7. REFERENCIAS BIBLIOGRFICAS
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
http://www.microsoft.com/latam/prensa/2004/Oct
ubre/VisualStudio.asp
[12] N. Noy. y D. McGuinness. Ontology
Development 101: A Guide to Creating Your First
Ontology. in Protege Documentation. Stanford
University: Stanford, CA. 2001
[13] R. Pressman. Ingeniera del Software. Un
enfoque prctico. Quinta Edicin. Mc Graw Hill.
2002.
[14] OXE Open Source Software Factory, Open
Experience Environment. Tomado en Julio de
2005 de http://php.cin.ufpe.br/~oxe/
2.1
LA ITERACIN Y EL INCREMENTO
2.1.1 La iteracin. Una iteracin es un mini proyecto que tiene como resultado una
versin interna de cada uno de los artefactos que pueden ser generados en un proceso
de desarrollo de software. Se puede visualizar como un flujo de trabajo [JBR00]
compuesto por las actividades fundamentales del proceso (especificacin, anlisis,
diseo, implementacin, etc.) adoptado por un equipo de desarrollo para utilizar y
producir los artefactos en los que se puede dividir una solucin software.
12
La evolucin del software (proceso o producto) no sucede sin un plan que la preceda.
Se pretende con la iteracin en el desarrollo de software, ordenar cada flujo de trabajo
para obtener un camino directo en el cul las primeras iteraciones proporcionan la base
de conocimiento para las siguientes. Estas iteraciones dan como resultado un mayor
conocimiento de los requisitos, los problemas, los riesgos y el dominio de la solucin,
mientras que las siguientes dan como resultado una serie de incrementos aditivos que
conforman finalmente la versin externa, el producto final para el cliente. La secuencia
de iteraciones, que siempre avance, representar el xito de la aplicacin del modelo,
sin tener que volver nunca a los resultados de una iteracin previa para corregir el
modelo debido a algo descubierto en una iteracin posterior.
Las iteraciones pueden solaparse en el tiempo, en el sentido que una est a punto de
terminar cuando otra est comenzando. La planificacin para la siguiente iteracin debe
comenzar a medida que se va terminando y preparando la entrega de la anterior. La
entrega de una iteracin significa que se ha llegado finalmente a una conclusin dentro
del equipo de trabajo, que se ha integrado todo el software de la iteracin y puede
crearse la versin interna.
13
Una iteracin controlada se planifica y es una herramienta que pueden utilizar los
directores de proyecto para controlarlo, y al principio del ciclo de vida, reduce los
riesgos que pueden amenazar el progreso en el desarrollo. Las versiones internas
proporcionadas por cada iteracin posibilitan la retroalimentacin de los usuarios y esto
lleva a una correccin temprana de la trayectoria del proyecto.
2.2
14
Proceso dirigido por Casos de uso. Los Casos de uso son una tcnica de
modelado para la captura y representacin de requisitos que obliga a pensar en
trminos de importancia para el usuario y no slo en trminos de funciones a
contemplar. Se define un Caso de Uso como un fragmento de funcionalidad del sistema
que proporciona al usuario un valor agregado. Los Casos de uso representan los
requisitos funcionales del sistema.
En RUP los casos de uso no son slo una herramienta para especificar los requisitos
del sistema; tambin guan su diseo, implementacin y prueba. Los casos de uso
constituyen un elemento integrador y una gua de trabajo, que no slo inicia el proceso
de desarrollo sino que tambin proporcionan un hilo conductor, permitiendo establecer
trazabilidad entre los artefactos que son generados en las diferentes actividades del
proceso de desarrollo. Basndose en los casos de uso, se crean los modelos de
anlisis y diseo, luego la implementacin que los lleva a cabo, y se verifica que
efectivamente el producto implemente adecuadamente cada caso de uso, haciendo que
cada modelo est sincronizando con cada uno de ellos.
Proceso centrado en la arquitectura. La arquitectura de un sistema es la
organizacin o estructura de sus partes ms relevantes, lo que permite tener una visin
comn entre todos los involucrados en el proceso (desarrolladores y usuarios) y una
perspectiva ms clara del sistema completo, necesaria para controlar el desarrollo.
15
En el caso de RUP, adems de utilizar los Casos de uso para guiar el proceso se presta
especial atencin al temprano establecimiento de una buena arquitectura que no se vea
fuertemente impactada ante cambios posteriores presentados durante la construccin y
el mantenimiento. Existe una interaccin entre los Casos de uso y la arquitectura, los
Casos de uso deben encajar en la arquitectura cuando se llevan a cabo y la arquitectura
debe permitir el desarrollo de todos los Casos de uso requeridos, actualmente y en el
futuro. Esto provoca que tanto arquitectura como Casos de uso deban evolucionar en
paralelo durante todo el proceso de desarrollo de software.
16
Una iteracin puede realizarse por medio de una cascada pasando por los flujos
fundamentales de Requisitos, Anlisis, Diseo, Implementacin y Pruebas, como se
muestra en la figura 2.1. Tambin existe una planeacin de la iteracin, un anlisis de la
iteracin y algunas actividades especficas propias de cada iteracin. Al finalizarla se
realiza una integracin de los resultados con lo obtenido de realizar iteraciones
anteriores [Letelier02].
[Letelier02]
17
[Letelier02]
El eje horizontal representa la lnea del tiempo y es considerado el eje de los aspectos
dinmicos del proceso. Indica las caractersticas del ciclo de vida del proceso,
representado en fases (Inicio, Elaboracin, Construccin y Transicin), iteraciones e
hitos.
Eje vertical representa los aspectos estticos del proceso. Describe el proceso en
trminos de componentes de proceso, disciplinas o flujos de trabajo workflows,
artefactos, roles y actividades.
2.2.3.1 Estructura dinmica del proceso. RUP divide el proceso en cuatro fases:
Inicio, Elaboracin, Construccin y Transicin, dentro de las cuales se realizan varias
iteraciones en un nmero variable, segn el proyecto, y en las que se hace un mayor o
menor nfasis en las distintas disciplinas llamadas Workflows - Flujos de Trabajo. En
la Figura 2.2 se muestra cmo vara el esfuerzo asociado a las disciplinas segn la fase
en la que se encuentre el proyecto. Se observa que en cada fase participan todas las
disciplinas, pero que dependiendo de la fase, el esfuerzo dedicado a una disciplina
vara.
18
19
Artefactos. Los productos o artefactos son los resultados tangibles del proyecto, las
cosas que se van creando, modificado y usando hasta obtener el producto final durante
el proceso de desarrollo de software. Un artefacto puede ser cualquiera de los
siguientes: un documento, un modelo (como el de casos de uso), un elemento propio
del modelo (una clase o un caso de uso), un subsistema o componente.
Flujos de trabajo (Disciplinas). Con simplemente la enumeracin de roles,
actividades y artefactos no se define un proceso, se necesita contar con una secuencia
de actividades realizadas por los diferentes roles, as como la relacin entre los mismos.
Un flujo de trabajo es una relacin de actividades que producen unos resultados
observables, y en RUP son:
20
Despliegue. El objetivo de este flujo de trabajo es producir con xito entregables del
producto y distribuirlos a los usuarios.
Entorno. La finalidad de ste flujo de trabajo es dar soporte al proyecto con las
adecuadas herramientas, procesos y mtodos. Brinda una especificacin de las
herramientas que se van a necesitar en cada momento, as como definir el instante
concreto del proceso en el que han de ser empleados.
2.2.4 Prcticas. RUP identifica 6 mejores prcticas con las que define una forma
efectiva de trabajar en equipos de desarrollo de software.
21
22