Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Direccin postal:
Universidad ORT Uruguay
Facultad de Ingeniera
ORT Software Factory
Cuareim 1451
11100 Montevideo, Uruguay.
Telfono +598 +2 9021505
Direccin electrnica:
mfeder@netgate.com.uy
Resumen
Gestionar un proyecto de software, consiste en asegurar que se entregar un producto que cumpla
con las especificaciones dentro del plazo y costo acordados, con el nivel de calidad pactado.
Factores clave para lograrlo son la planificacin y organizacin adecuadas del proyecto.
Por otra parte, la definicin de la arquitectura del producto a desarrollar tiene un impacto muy
importante no slamente en el producto final del que es base, sino que tambin debera influir en la
forma en que el proyecto se enfoca desde el punto de vista de su gestin, facilitando as la
integracin de las disciplinas tcnicas y gerenciales que deben interactuar en todo proyecto exitoso.
El objetivo del presente trabajo es analizar la fase de planificacin y organizacin del proyecto y ver
cmo la misma se ve afectada por la arquitectura, o mejor dicho, se ve pautada por sta en forma
natural, en lo que se podra denominar planificacin y organizacin dirigidas por la arquitectura.
Palabras claves
Ingeniera de Software, Gestin de Proyectos, Arquitectura de Software, Planificacin,
Organizacin.
1. INTRODUCCIN
1.1. Qu es la Gestin de Proyectos
Gestionar un proyecto consiste en asegurar que se entregar un producto que cumpla con las
especificaciones dentro del plazo y costo acordados, con el nivel de calidad pactadoi.
Generalmente, los proyectos de software se desarrollan en un mundo de naturaleza cambiante, lo
que implica un nivel importante de incertidumbre relacionada a aspectos tales como recursos
humanos, tecnologa o de negocio.
Las actividades involucradas en la gestin de un proyecto van variando a lo largo del proceso de
desarrollo del ciclo de vida del proyecto1 en relacin directa con el proceso de desarrollo utilizado.ii
Ms all de las particularidades de los proyectos individuales, en su gran mayora los proyectos
evolucionan segn el siguiente ciclo de vida:
1
Me refiero al Ciclo de Vida del proyecto a diferencia del Ciclo de vida del desarrollo del producto que se
explicar ms adelante.
2
Ntese el uso del trmino magnitud en lugar de valor, ya que en este momento se pretende una
aproximacin que refleje el orden de magnitud de los elementos a estimar.
3
Volver sobre este tema ms adelante.
Planificacin Planificacin Administracin
general especfica Retroalimentacin
Ejecucin
Inicio Planificacin
Control
Produccin
Requerimientos
Requerimientos
Arquitectura
Arquitectura
Diseo
Diseo Diseo
Codificacin y testing
unitario Codificacin y Codificacin y
testing unitario testing unitario
Integracin Integracin Integracin
Operacin Operaci
Ciclo de vida en Cascada Operacin y
Mantenminiento
Ciclo de vida de desarrollo incremental
Planificar el proyecto antes de comenzar
Definir el comportamiento externo esperado del sistema antes de definir su funcionamiento
interno.
Documentar los resultados de cada actividad
Disear el sistema antes de codificarlo
Testear el sistema una vez que est construido.
Desarrollo incremental
Los riesgos asociados con sistemas grandes y complejos son muy altos. Una forma de reducir el
riesgo es construyendo solamente una parte del sistema y reservar el resto para sucesivas
liberaciones. El desarrollo incrementalvii plantea la construccin de partes del sistema en forma
secuencial, de forma de ir liberando y probando versiones en forma paulatina. Generalmente, se
parte de la lista de requerimientos de todo el sistema y de una definicin de la arquitectura de alto
nivel que contempla todos estos requerimientos, y luego se divide la funcionalidad en grupos que se
van diseando, implementado, testeando e integrando uno a uno.
Modelo Evolutivo
Como el desarrollo incremental, el modelo evolutivoviii construye una serie sucesiva de versiones
incluyendo en cada una de ellas ms funcionalidad que en la anterior, hasta completar el sistema. La
diferencia es que no se conocen a priori todos los requerimientos, sino que los mismos se van
descubriendo en cada una de las evoluciones. Por lo tanto, tampoco existe una arquitectura de alto
nivel definida desde el principio, sino que la misma va evolucionando hacia la arquitectura final.
En este modelo, los requerimientos son analizados, y slamente se implementan aquellos que se
entienden completamente. El sistema es implantado, los usuarios lo utilizan y retroalimentan al
equipo de desarrollo. En base a esta retroalimentacin se actualizan los requerimientos y comienza
el desarrollo de la versin siguiente y as sucesivamente.
Requerimientos Requerimientos
Diseo Diseo
Codificacin y testing
Codificacin y testing
unitario unitario
Integracin Integracin
Operacin
Operacin
Ciclo de Vida Evolutivo
Otros modelos
El modelo de prototipacinix de requerimientos implica la creacin de una implementacin parcial
del sistema con el propsito de aprender sobre los requerimientos. El prototipo se construye lo ms
rpido posible y luego los usuarios o quien corresponda experimenta con el prototipo y
retroalimenta al equipo que puede as especificar correctamente los requerimientos. Este modelo
puede combinarse con cualquiera de los anteriores, incluyendo la tarea de prototipacin y
validacin del prototipo como parte de las fases de requerimientos. La prototipacin se utiliz
mucho en los aos 90 porque la especificacin de requerimientos de sistemas complejos suele ser
difcil de entender, y es ms fcil para quien debe validar los requerimientos manipular un prototipo
en lugar de leer un documento tedioso y potencialmente ambiguo.
El modelo de espiral de Boehmx, es un meta ciclo de vida. En este modelo, el esfuerzo del
desarrollo es iterativo y guiado por el riesgo. Antes de cada vuelta en la espiral, se realiza un
anlisis de riesgo y se analizan las alternativas. Es adecuado para proyectos de alto riesgo. Sin
embargo, dentro de la espiral puede incluirse cualquiera de los ciclos de vida anteriores, y segn el
que se elija para esto, se configurarn las diferentes tareas de cada vuelta de la espiral.
El modelo concurrente tambin es una meta descripcin del proceso. Provee un mecanismo para
mostrar las actividades concurrentes. Tambin puede combinarse con cualquiera de los ciclos de
vida mencionados.
3.1 Estimacin
Paulishxiv sugiere el siguiente proceso:
Comenzar el proyecto con un pequeo equipo de diseadores que crearn la arquitectura de alto
nivel. En paralelo, utilizar mecanismos de estimacin top-down para estimar el total del proyecto
tales como Puntos Funcin de Albrecht, Cocomo de Boehm, SLIM, PRICE-S, etc., siendo el
gerente de proyecto el responsable de esta tarea.
Los componentes identificados en la arquitectura de software se convierten en las unidades para la
estimacin bottom-up. Estos componentes se deben identificar en el diseo lgico del sistema,
donde se identifican los subsistemas o componentes de alto nivel de abstraccin, en la vista lgica
propuesta en el modelo 4+1 de Krutchenxv o su equivalente si se usa otro modelo para representar la
arquitectura.
El arquitecto o los lderes del equipo de diseo deben ser los responsables de la estimacin bottom-
up ya que son quienes conocen la naturaleza y complejidad de cada una de las unidades. Luego el
gerente de proyecto debe integrar ambas estimaciones, comparando la suma de la estimacin de las
unidades contra la estimacin top-down y tratar de encontrar el punto de equilibrio.
En general, la estimacin bottom-up es ms precisa en relacin a cada uno de los componentes, pero
suelen olvidarse otras actividades que no forman parte del desarrollo de las unidades aisladas, tales
como las actividades de aseguramiento de la calidad (SQA), de integracin, test del sistema,
documentacin de usuarios, comunicacin, etc. Estos elementos s suelen estar incorporados en las
estimaciones top-down
Si bien es posible que existan diferencias entre ambas estimaciones debido a estos factores, ambas
deberan ser razonablemente compatible. De lo contrario debera revisarse el proceso de estimacin.
En general lo que no debe hacerse es aceptar estimaciones top-down menores que la suma de las
unidades, ya que esta ltima incluye ms actividades y no menos.
Considerando estos aspectos, y una vez obtenidas dos estimaciones compatibles, sugiero como
mecanismo de integracin, considerar el total de la estimacin top-down, y las proporciones entre
las unidades que surgen de la estimacin bottom-up.
Planificacin: Frente a los riesgos identificados, se puede decidir asumirlos, es decir, no tomar
ninguna accin para evitar que sucedan o que afecten al proyecto o mitigarlos. Mitigar un riesgo
significa realizar acciones para disminuir su probabilidad o su impacto, denominadas acciones
preventivas. Las acciones preventivas se transforman en tareas a realizar que deben ser incluidas en
el cronograma y en la planificacin del proyecto (ejemplo: realizar prototipo de comunicacin de
las plataformas); o en decisiones de gestin o de negocio (ejemplo: incrementar en un 20% el precio
de la propuesta para cubrir posibles prdidas identificadas).
Los riesgos asumidos siempre pueden materializarse. Debe tenerse en cuenta que tambin pueden
hacerlo aquellos que trataron de mitigarse, si las acciones preventivas no fueron exitosas, o quizs
hacerlo con un impacto menor. En ambos casos, debe planificarse un conjunto de acciones
correctivas o planes de contingencia en los que se establece cmo reaccionar frente al problema
previsto si este sucede. Ejemplos interesantes de planes de contingencia se vieron en muchas
organizaciones durante el cambio de siglo.
Evaluacin: Al fin del proyecto se realiza una evaluacin de la gestin de riesgos y sus resultados
de forma de extrapolar la experiencia obtenida a otros proyectos. En caso de haberla, es el momento
de alimentar la base de datos de conocimiento de la organizacin.
Identificacin
Anlisis
Planificacin
Seguimiento
4
Ver captulo Plan de Versiones
5
Stubs: Funciones o rutinas vacas, que nicamente implementan la interfase y generalmente devuelven
valores fijos, para que se puedan compilar y probar las funciones o rutinas que las invocan mientras no se
hayan desarrollado las verdaderas funciones o rutinas a invocar. Los stubs son temporales y luego se
reemplazan por las verdaderas funciones cuando estas son implementadas.
Combinacin: Como en tantos otros aspectos, en general no se utiliza solo uno de los criterios sino
que es posible utilizar opciones hbridas para distintos momentos en diferentes partes del producto.
La arquitectura del software es una entrada fundamental a la hora de confeccionar el plan de
versiones. En primer lugar, identifica los componentes que habrn de ser distribuidos a lo largo de
las versiones e identifica qu funcionalidad o requerimiento del usuario dicho componente
implementa (o colabora en su implementacin). De esta forma, es posible identificar qu paquetes o
componentes es necesario desarrollar para poder incluir cierta funcionalidad en una versin, y
aplicar el criterio dirigido por el usuario.
Por otra parte, tambin es de la arquitectura desde donde se identifican los componentes ms
crticos, los ms complejos y los ms importantes para el sistema en caso de utilizar el criterio
dirigido por el riesgo, o el nivel de prestacin de servicios entre componentes para aplicar el criterio
de secuencia lgica.
Como la arquitectura es el documento donde es posible identificar los componentes ms crticos o
complejos del software, sta no slo debe utilizarse para la confeccin del plan de versiones, sino
tambin para la definicin de las estrategias de pruebas e integracin.
La ventaja de esta organizacin es que cada uno de los equipos se vuelve un experto en el paquete o
capa en la que est trabajando. Adems, como slo un equipo trabaja en una capa o componente, el
mismo es diseado e implementado siguiendo siempre el mismo criterio, con lo que se logra que
sea ms uniforme y estandarizado.
Como desventajas, es necesario tener varios equipos trabajando simultneamente para realizar las
porciones de todas las capas o paquetes necesarios para implementar una versin.
Adems, los equipos tienen una vista parcial del sistema y es ms difcil encontrar luego
desarrolladores con una visin general del sistema para las fases de mantenimiento, en caso de que
se desee reducir los equipos que participarn en esta etapa
Equipo 2
Capa/componente 2
Capa/componente 2
Equipo 1
Capa/componente 1
Capa/componente 1
3.5 Cronograma
Las herramientas para representar cronogramas que se utilizan hoy en da, generalmente permiten
agrupar y desagrupar las tareas en distintos niveles de abstraccin, por lo que ofician tambin de
WBS (Work Breakdown Structure).6
Por lo tanto, se mencionarn en forma indistinta las formas de organizar el cronograma y la WBS,
ya que ambas se representan en forma conjunta.
Las alternativas a la hora de organizar una WBS o un cronograma siguen diferentes criterios xxvi:
Orientada a la fase: Permiten identificar las fases del desarrollo. Se divide el sistema primero en
grandes fases, luego dentro de las fases se detallan las tareas particulares.
Orientadas al producto: Permiten identificar los componentes. Se descompone el producto en
partes y luego se representan las tareas para realizar cada una de las partes del producto.
Orientadas a la funcin: Se organizan segn los distintos actores del sistema
Existen alternativas hbridas que permiten mezclar los dos criterios para distintas partes o diferentes
momentos en el desarrollo del producto.
La forma ms til de representar el cronograma es que el mismo se parezca lo ms posible al ciclo
de vida. Por ejemplo para los ciclos de vida iterativos o evolutivos, resulta muy conveniente que el
mismo refleje directamente el plan de versiones. De esta forma, se contarn con grandes tareas que
representan cada una de las versiones, que a su vez se descompondrn en tareas concretas para
alcanzar estas metas. De esta forma, es posible acceder al nivel de detalle de la fase o tarea del ciclo
de vida que se est ejecutando en este momento (por ejemplo, la iteracin que genera la versin X
del producto), y manejar el resto del proyecto con un nivel de abstraccin mayor. Por otra parte, los
hitos o mojones que marcan el fin de cada una de las fases identificadas en el ciclo de vida, se
corresponden con el fin de las tareas de mayor nivel de abstraccin del cronograma, que son a su
vez el primer nivel de la WBS asociada.
Una vez definida la estructura del cronograma deben planificarse las distintas iteraciones y dentro
de cada una de ellas deben identificarse los componentes sobre los que se va a trabajar y los
recursos que se asignarn a dichas tareas xxvii.
6
WBS= Work Breakdown Structure: Representacin grfica en forma de rbol donde se subdividen grandes
tareas en tareas ms concretas en forma recursiva, de forma de obtener unidades ms manejables que puedan
ser estimadas y asignadas a los responsables de ejecutarlas. Permite acceder a representaciones de distinto
nivel de agregacin para obtener vistas con distinto nivel de abstraccin.
enero f ebrero marzo abril may o junio julio agosto septiembre octubre nov iembre diciembre enero
Id Nombre de tarea F P M F P M F P M F P M F P M F P M F P M F P M F P M F P M F P M F P M F P M
1 Ing. 'Requerimient os
2 Arquitectura
3 Version pre-release 1
4 Componente 1
5 Componente 2
6 Integracin
7 Fin 26/06
8 Version release 2
9 Componente 4
10 Componente 5
11 Componente 6
12 Componente 7
13 Integracin
14 Fin 30/08
15 Version pre-release 3
3.6 Proceso
Como conclusin, el proceso que planteo para la planificacin y gestin de un proyecto dirigido por
la arquitectura es el siguiente (ver figura final):
Estimacin Bottom-
Arquitectura Up
Plan de
Versiones Confeccin del Ejecucin
cronograma
Anlisis de
Riesgo
Organizacin de
los equipos
i
A guide to the Project Management Body of Knowledge (PMBOK), Project Management Institute
ii
Humphrey, W.S, Managing the software process
iii
Bass, Clements y Kazman 1998. Software Architecture in Practice. Massachusetts, USA. Addison Wesley.
iv
Soni D, Nord R y Hofmeister C, Software Architecture in Industrial Applications, en Proceedings of the
17th International Conference on Software Engineering, New York: ACM Press, 1995.
v
Davis Alan M., Software Life Cycle Models. Software Engineering project management, editado por
Richard H Thayer, 2 edicin. IEEE Computer Society Press, 1988
vi
Royce W.W., Managing the Development of Large Software Systems: Concepts and Techniques, Proc.
1970 WESCON Technical Papers, Vol. 14, 1970
vii
Hirsch E., Evolutionary Acquisition of Command and Control Systems, Program Manager, Nov. 1985.
viii
Giddings R.V, Accommodating Uncertainty in Software Design, Comm ACM, Vol 27, N 5, May 1984.
ix
Gomaa H y Scott D, Prototyping as a Tool in the Specification of User Requirements, Proc. 5th IEEE
International Conference on Software Engineering, IEEE CS Press, Los Alamitos, California, 1981.
x
Boehm B.W. A Spiral Model of Software Development and Enhancement, Computer, May 1988.
xi
Paulish D.J, Architecture-Centric Software Project Management, A practical guide, Carnegie Mellon,
Software Engineering Institute, 2002.
xii
Boehm B, Software Engineering Economics, E Englewood Cliffs, NJ, Prentice Hall 1981.
xiii
Boehm B. et al, Software Cost Estimation with Cocomo II, Upper Saddel River, NJ, Prentice Hall, 2000.
xiv
Paulish D.J, Architecture-Centric Software Project Management, A practical guide, Carnegie Mellon,
Software Engineering Institute, 2002.
xv
KRUTCHEN Philippe. Noviembre 1995. The 4+1 View Model of Architecture. IEEE Software, 12(6).
xvi
Higuera R.P, Software Risk Management, CMU/SEI-96-TR-012 ESC-TR-96-012, Software Engineering
Institute (SEI), www.sei.cmu.edu
xvii
Grey S, Practical Risk Assessment for Project Management, John Wiley & Sons
xviii
Karolak D.W, Software Engineering Risk Management, IEEE Computer Society Press
xix
Michaels J.V, Technical Risk Management, Prentice Hall
xx
BASS L. et al. Quality Attribute Design Primitives. Technical Note CMU/SEI-2000-TN-017. Dic. 2000
xxi
BASS L., et al. Quality Attribute Design Primitives and the Attribute Drive Design Method. SEI, Carnegie
Mellon University, Pittsburgh.
xxii
MOUSQUES G. 2002. Transp. Curso de Arquitectura. Ing. de Sistemas, Universidad ORT, Uruguay.
xxiii
KAZMAN R. et al. Oct. 1999. Attribute Based Architectural Styles. Techn. Report CMU/SEI-99-TR022.
xxiv
Thayer R, Software Engineering Project Management
xxv
Rees F, Equipos de trabajo, Prentice Hall 1997
xxvi
Simons, Lucarelli, Work Breakdown Structures
xxvii
Gido, Clements, Network Planning and Scheduling
xxviii
Pinto J, Project Management Handbook, PMI