Las mejores prácticas de la Ingeniería de software se pueden sintetizar en los seis puntos que
aparecen a continuación:
Desarrollo Iterativo del Software Modelado Visual del Software
Gestión de Requerimientos Verificación de Calidad del Software
Uso de arquitecturas basadas en componentes Control de Cambios
A continuación realicemos un breve recorrido por cada una de las Mejores Prácticas de la
Ingeniería del Software planteadas.
Requerimiento
Análisis
Diseño
Codificación
Prueba
TIEMPO
Es importante considerar que “... si no atacamos en forma activa los riesgos ellos nos atacaran a
nosotros...”, (Tom, 1988: p.73).
05/03/02 p. 1
Como una alternativa más moderna al ciclo de desarrollo en cascada ha surgido uno que se basa en
la evolución a través del tiempo, del producto de software a obtener. Con cada iteración el producto que se
obtiene adquiere nuevo valor agregado, y cada iteración se enfoca a abordar cada vez aquellos aspectos de
interés para la iteración.
En este modelo el resultado final del desarrollo se alcanza por medio de sucesivas aproximaciones,
incorporando al producto de software nuevas características, haciéndolo crecer en valor hasta alcanzar el
producto final, listo para la implementación completa en la comunidad de usuarios finales.
Este enfoque de desarrollo permite alcanzar una serie de ventajas y soluciones a problemas claves
del desarrollo de software (Krutchen, 1999: 8).
1. Mal entendimiento serio se hacen evidente 5. Se detectan en forma temprana las
en forma temprana del ciclo de vida, inconsistencia entre requerimientos, diseño e
momento en el cual resulta posible implementación.
reaccionar ante ellos.
6. La carga de trabajo del equipo, en especial
2. Garantiza una retro alimentación directa de de los que efectúan las pruebas se esparce
los usuarios, garantizando la identificación más equitativamente a través del ciclo de
de los requerimientos reales del sistema de vida.
software
7. El equipo puede aplicar las lecciones
3. Se fuerza al equipo de desarrollo a enfocarse aprendidas y mejorar continuamente el
en los requerimientos más críticos para el proceso.
proyecto, y permiten escudarse de aquellos
8. Se le puede proporcionar evidencia concreta
que les distraen de los riesgos reales del
sobre el avance del proyecto a los
proyecto.
interesados en el proyecto, a través del ciclo
4. Prueba continuas e iterativas que permiten de vida del desarrollo.
la evaluación objetiva del estado del
proyecto.
Gestión de Requerimientos
Un requerimiento representa una condición o capacidad que un sistema debe tener. El desafío actual
en la gestión de los requerimientos reside en el hecho de que ellos son dinámicos o cambiantes en el tiempo.
“Donde yo vivo, los clientes no saben lo que quieren, ellos especifican requerimientos en forma
mutuamente excluyente, cambian de opinión tan pronto como ven el primer sistema, discuten entre ellos
05/03/02 p. 2
mismo acerca del significado y que es más importante. Donde yo vivo la tecnología cambia, de tal forma
que lo que parece ser el mejor diseño para un sistema no resulta obvio a priori, y se encuentra sujeto a
cambios en el tiempo” (Sharon, 2000).
Pudiéramos considerar dos alternativas diferentes para enfrentar el problema anterior. Ellas se
definen a continuación.
Una posible solución al problema anterior puede ser contar con un proceso de documentación
detallada que no posee esa propiedad indeseable, y hacer que los clientes firmen el documento
de forma que no puedan sentirse inconforme con el producto de software una vez terminado,
luego se produciría un diseño detallado de cómo debería ser construido el sistema.
De otra parte podríamos aceptar que los requerimientos son cambiantes por naturaleza, y
desarrollar un proceso que se acomode a la razón con que cambien los requerimientos
(posiblemente semanal, o en algunos casos hasta diario), el cual siga siendo predecible, de bajo
riesgo y de fácil ejecución. Ese proceso deberá ser capaz de permitir evolucionar el diseño del
sistema en la dirección que se desee. No deberíamos sentirnos sorprendidos por la dirección que
tome el diseño, pues a priori estaríamos preparados para ello.
La última alternativa me parece que es mucho más razonable si partimos del hecho de que los
requerimientos son cambiantes por naturaleza.
Excepto para aquellos sistemas simples y triviales, resulta prácticamente imposible completar y
exhaustivamente definir los requerimientos de un sistema antes de iniciar el desarrollo del mismo
(Krunchten, 1999: 8).
La arquitectura de un sistema constituye posiblemente el resultado más importante que puede ser
usado para gestionar los diferentes puntos de vistas de los stakeholders (usuarios finales, analistas,
programadores, integradores, expertos, y otros), y por ende controla el desarrollo iterativo e incremental del
sistema de software a través de su ciclo de vida.
La arquitectura del software no solo está relaciona con la estructura y el comportamiento, sino
además con restricción sobre su uso, seguridad, funcionalidad, rendimiento, reuso, facilidad de comprensión,
economía y tecnológica (Krunchten, 1999: 9-10).
05/03/02 p. 3
Modelado Visual del Software
Un modelo es una simplificación de la realidad que describe a un sistema desde una perspectiva
particular. Los modelos se construyen a fin de que los investigadores e interesados, tengan una mejor
comprensión del sistema que estemos modelando(Krunchten, 1999: 11). Se elaboran modelos de sistemas
complejos por el mero hecho de que resulta poco práctico presentar el sistema como un todo.
El modelado de un sistema reviste vital importancia por cuanto nos ayuda a visualizar, especificar,
construir y documentar el comportamiento y estructura de la arquitectura de un sistema. Formalmente esto se
realiza a través de un lenguaje formal de modelación como puede ser UML (Unified Modeling Language),
OML (Object Modeling Language) u otros, que permitan que los stakeholders puedan comunicarse los unos
con los otros en forma efectiva y eficaz.
El modelamiento visual del software nos permite dar solución a los problemas básicos del desarrollo
intensivo de sistemas de software. Entre las soluciones podemos citar:
Especificación no ambigua de comportamiento a través de los escenarios y de los casos de usos.
Captura del Diseño del Software en forma no ambigua.
Exposición de arquitecturas no modulares y e inflexibles
Los detalles pueden aparecen solo cuando sean necesarios
Diseños no ambiguos revelan sus inconsistencias mar rápidamente.
La aplicación de calidad empieza con un buen diseño.
Uso de herramientas CASE para la modelación visual basadas en los lenguajes de modelación.
05/03/02 p. 4
Control de Cambios
Un desafío importante que como desarrolladores trabajamos en múltiples equipos, trabajando
posiblemente en diferentes sitios, juntos en múltiples iteraciones, múltiples lanzamientos, productos, y
plataformas. Si en ese infierno de trabajo caótico no existe una fuerza que imponga orden, resultaría casi
imposible alcanzar la meta del desarrollo que es justamente la de obtener un producto ajustado a los
requerimientos de los usuarios. Esa fuerza lo constituye justamente un control disciplinado de cambios y
configuración.
El control de los cambios al software ofrece una variedad de soluciones a las causas principales de
los problemas del desarrollo de software. Algunas soluciones importantes son las que a continuación se
indican:
El flujo de trabajo de cambio de requerimientos es definido y repetido.
Los requerimientos de cambios facilitan la comunicación clara
Espacios de trabajos independientes reducen interferencias entre miembros de equipos
trabajando en paralelo
Las estadísticas de razón de cambios proporcionan una muy buena métrica para evaluar en
forma objetiva el estado del proyecto.
Los espacios de trabajo contienen todos los artefactos, facilitando la consistencia.
La propagación del cambio es evaluable y controlable.
Los cambios pueden mantenerse e un sistema robusto y personalizable.
Cada una de las iteraciones anteriores tienen objetivos específicos a cumplir una vez que ellas
culminan. Los objetivos o hitos para cada una son los que aparecen la siguiente tabla.
TABLA 1. Fase Hito Principal
HITOS POR
Planeación Especificación de la visión del producto final y
FASES definición del alcance del proyecto. Concluye con la
especificación de los objetivos: el producto.
05/03/02 p. 5
Elaboración Planeamiento de las actividades y los recursos
requeridas. Especificar las características del producto y
diseñar la arquitectura. La fase termina con la
especificación de la arquitectura.
Construcción Construcción del producto y evolución de la visión, la
arquitectura, y el plan hasta que el producto esté listo
para la distribución final a la comunidad de usuarios. La
fase culmina con la capacidad operacional inicial.
Transición Transición del producto a la comunidad de usuarios
finales, lo que incluye la manufactura, entrega,
entrenamiento, soporte y mantenimiento del producto
hasta que los usuarios finales se sientan conformes con
la solución. Termina el ciclo con el lanzamiento del
producto.
Lo anterior constituye la base para la realización de un plan de proyecto dividido en dos partes
fundamentales:
Plan Global del Proyecto
Plan Detallado de la Iteración
Cada uno de los cuales está orientado a determinados aspectos específicos, dado el momento en que
ellos se realizan.
Su objetivo principal es el de definir las actividades de desarrollo en término de las fases y las
iteraciones requeridas para implementar el sistema. Este plan se recomienda actualizarlo por lo menos una
vez en cada fase.
Para planear cada una de las fases en el ciclo de desarrollo inicial (planeamiento) se deben realizar
algunas adivinanzas “educadas” sobres los hitos principales sobre la base de:
Experiencia con proyectos similares en naturaleza y dominio.
El grado de novedad
Restricciones específicas del entorno, tales como: tiempos de respuestas, distribución, y
seguridad, entre otras.
La madurez de la organización
No todas las fases son idénticas en términos de esfuerzo y cronograma de realización. A pesar de
que estas varían considerablemente en dependencia de las características propias de cada proyecto, un ciclo
típico inicial de desarrollo para un proyecto de mediano tamaño puede anticipar la siguiente distribución
entre esfuerzo y cronograma tal y como se presenta en la tabla siguiente:
05/03/02 p. 6
TABLA 2. Planeación Elaboración Construcción Transición
DISTRIBUCIÓN DE
Esfuerzo ~5 % 20 % 65 % 10 %
ESFUERZO Y
CRONOGRAMA PARA
CICLO DE DESARROLLO Cronograma 10 % 30 % 50 % 10 %
INICIAL TÍPICO
Gráficamente la distribución anterior puede ser vista de acuerdo a como se muestra en el gráfico que
aparece a continuación (RATIONAL SOFTWARE, 2000a).
70
50
60
40
50
30
40
20
30
20 10 Cronogram a
Esfuerzo 0
10
0
Por cada una de las fases del proceso de desarrollo se deberá estimar el número de iteraciones a
desarrollar, así como la fecha de inicio y de terminación de cada una, tal y como se presenta en la tabla.
Se pueden tener muchas variaciones dependiendo de los riesgos, tamaño y complejidad del
producto:
Si el producto está orientado para un dominio completamente nuevo se necesitará
adicionar algunas iteraciones en la fase de planeación / iniciación para consolidar los
conceptos, mostrar algunos prototipos de dominio a los clientes o usuarios finales, elaborar
una respuesta sólida a la Solicitud Propuesta.
Si una arquitectura nueva debe desarrollarse o existe una gran cantidad de
modelamiento de casos de uso, o existen muchos riesgos desafiantes, deberá planear tener
dos o tres iteraciones en la fase de elaboración.
Si el producto es grande y complejo y a desarrollarse a través de un período largo de
tiempo, se debe planear tener tres o mas iteraciones en la fase de construcción.
05/03/02 p. 8
Si se debe minimizar el tiempo de entrega o se desea mayor tiempo para adaptarse a
los usuarios finales después de un cierto periodo de uso se deberá planear tener varias
iteraciones en la fase de transición, debido a que posiblemente se vayan incorporando un
conjunto reducido de funcionalidades.
¿Cómo estimar la duración de la iteración? Una iteración se inicia con la planeación y los
requerimientos, y culmina con una entrega externa o interna.
La rapidez con que se puede iterar depende fundamentalmente del tamaño de la organización de
desarrollo. En ocasiones el tamaño de la organización o del grupo de desarrollo puede convertirse en un
obstáculo, que impida obtener el resultado esperado.
A continuación se relacionan algunos datos empíricos que pueden tomarse como base para las
estimaciones:
TABLA 7. SLOC1 NO DE DESARROLLADORES DURACIÓN DE LA ITERACIÓN
DURACIÓN PARA
10,000 5 1 semana
PROYECTOS DE
TAMAÑOS TÍPICOS 50,000 15 1 mes
500,000 45 6 meses
1,000,000 100 1 año
Para cada una de las fases se debe definir cuales son los principales hitos que marcan el conclusión
de la fase. La tabla siguiente muestra la especificación de hitos por fases.
TABLA 8. HITOS FASE DESCRIPCIÓN HITOS
POR FASES
Planeación
Elaboración
Construcción
Transición
Posteriormente cada una de las fases anteriores se dividen en iteraciones, reflejando los hitos
principales y los riesgos a tener en cuenta en cada iteración. La tabla siguiente presenta una propuesta para
reflejar la información requerida (6 3 iteraciones):
TABLA 9. FASE ITERACIÓN DESCRIPCIÓN HITOS RIESGOS
ITERACIONES ASOCIADOS IDENTIFICADOS
POR FASES
Planeación Iteración
Preliminar
05/03/02 p. 9
Elaboración Iteración E1-
Iteración E2 -
Construcción Iteración C1 -
Iteración C2 -
Iteración C3 -
Transición Iteración T1 -
Iteración T2 -
El cronograma de plan de la iteración puede desarrollarse usando el Microsoft Project (ver anexo 1)
"Plan de
Proyecto.mpp"
Los entregables para cada iteración determinan aquellos productos o sub productos que como
resultado de las actividades de la iteración deberán obtenerse al finalizar la misma.
Se deberá estimar los requerimientos de equipamientos y Recursos requeridos para el soporte de las
actividades de la iteración.
Durante la Fase de Planeación, el centro de atención está ubicado en la definición del alcance del
proyecto, y del desarrollo del Caso del Negocio (viabilidad económica del proyecto). Por consiguiente, el
tamaño del equipo resulta relativamente pequeño y puede componerse de los siguientes roles:
Un Gerente de Proyecto;
05/03/02 p. 10
Un Arquitecto; y
Uno o Dos Desarrolladores (cuando se requiera de la elaboración de prototipo técnicos para
pruebas de conceptos, que permitan esclarecer los requerimientos o construir soportes para el
producto).
Durante las iteraciones entre fase, la mayor parte del esfuerzo proviene del equipo de arquitectos y
de un equipo que se designe para el desarrollo de prototipos. El equipo de desarrollo de prototipos
usualmente debe conformarse con los programadores mas experimentados. Se cuenta además con un equipo
de diseño pequeño enfocado a los mecanismos, componentes y tecnologías genéricas. Por su parte el equipo
de prueba se centra en la construcción del ambiente para pruebas, así como la aplicación de pruebas a los
casos de usos primarios.
El equipo de arquitectos debe conformarse con mucho cuidado, tratando no solo de colocar a los
mas habilidosos en análisis y diseño, sino además a aquellos que poseen una buena capacidad para ejercer
liderazgo.
Ya para la Fase de Construcción debemos intentar realizar una distribución de los miembros del
equipo de arquitecto en los equipos de construcción, con la finalidad de comunicar la arquitectura a dichos
equipos. Normalmente un equipo de construcción es responsable de uno o mas subsistemas con interfaces
bien definidas, los cambios que se le realicen a dicha interfaz provocan cambios en la arquitectura y deberán
ser revisados con mucho cuidado. Dentro de un subsistemas se tiene cierta libertad para diseñar e
implementar, por la comunicación cruzada entre equipos es necesaria para asegurar que los equipos no se
encuentren construyendo los mismo en forma paralela.
05/03/02 p. 11
TABLAS DE ILUSTRACIONES
KRUCHTEN, Philippe
1999 The Rational Unified Process. UK: Adisson-Wesley. ISBN 0201604590
GILB, Tom
1988 Principles of Software Engineering Management. Harlow, UK: Adisson-Wesley,
1988, p.73.
SHARON, Yonat
2000 Lightweight OO Development Process, ObjetiveView URL (www.ratio.co.uk)
RATIONAL SOFTWARE
2000a Rational Unified Process 5.1, Rational Suite 2000
2000b Rational Unified Process 5.5, Rational Suite 2000
BOEHM, Barry
1995 Anchoring the Software Process, IEEE Software.
BOEHM, Barry; Clark Bradford; Horowits, Ellis; Westland, Chris; Madachy, Ray; Selby, Richard
2000a Cost Models for Future Software Life Cycle Processes: COCOMO 2.0 *
2000b The COCOMO 2.0 Software Cost Estimation Model
TABLA DE CONTENIDO
Aspectos Generales..................................................................................................................................................1
2000