Академический Документы
Профессиональный Документы
Культура Документы
Jos Ramn lvarez Snchez y Manuel Arias Calleja Dpto. de Inteligencia Articial - ETSI Informtica - UNED
10 Diciembre 2002
II
ndice general
Gua de estudio de la asignatura Presentacin y objetivos . . . . . . Contexto y conocimientos previos Esquema y resumen de contenidos Material y medios de estudio . . .
VII
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
1. Contexto de la asignatura en la Ingeniera de Software 1.1. Necesidad de una metodologa . . . . . . . . . . . . 1.1.1. Sistemas . . . . . . . . . . . . . . . . . . . 1.1.2. La crisis del software . . . . . . . . . . . . . 1.1.3. Denicin de metodologa . . . . . . . . . . 1.1.4. Finalidad de una metodologa . . . . . . . . 1.1.5. Taxonoma de las metodologas . . . . . . . 1.2. Ciclo de vida del software . . . . . . . . . . . . . . 1.2.1. Ciclos de vida en cascada . . . . . . . . . . 1.2.2. Modelo de ciclo de vida en espiral . . . . . . 1.2.3. Ciclos de vida orientados a objetos . . . . . . 1.3. Notaciones de especicacin y diseo (UML) . . . . 1.3.1. Introduccin . . . . . . . . . . . . . . . . . 1.3.2. Elementos del lenguaje UML . . . . . . . . 1.3.3. Diagrama de clases . . . . . . . . . . . . . . 1.3.4. Diagrama de objetos . . . . . . . . . . . . . 1.3.5. Diagrama de casos de uso . . . . . . . . . . 1.3.6. Diagrama de estados . . . . . . . . . . . . . 1.3.7. Diagrama de secuencias . . . . . . . . . . . 1.3.8. Diagrama de actividades . . . . . . . . . . . 1.3.9. Diagrama de componentes . . . . . . . . . . 1.3.10. Diagrama de colaboracin . . . . . . . . . . 1.3.11. Diagrama de distribucin . . . . . . . . . . . Ejercicios y actividades . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
1 2 2 2 2 3 3 4 4 7 9 9 10 10 14 15 15 17 17 19 19 20 20 22 23 23 24 26 26 27 28 28 30 33 34 34 34 42 42 42 42 43 46
2. Descripcin de ejemplos gua 2.1. Ejemplo A: Aplicacin de comercio en Web . . . . . . . . . . . . . . . 2.2. Plantilla de solucin propuesta para el ejemplo A . . . . . . . . . . . . 2.3. Ejemplo B: Gestin de proceso en una fbrica de productos electrnicos 2.4. Plantilla de solucin propuesta para el ejemplo B . . . . . . . . . . . . 2.5. Ejemplo C: Agenda electrnica personal . . . . . . . . . . . . . . . . . 2.6. Plantilla de solucin propuesta para el ejemplo C . . . . . . . . . . . . 2.6.1. Casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejercicios y actividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Fase de requisitos 3.1. Obtencin de requisitos . . . . . . . . . . . 3.1.1. Introduccin . . . . . . . . . . . . 3.1.2. Tcnicas de obtencin de requisitos 3.2. Anlisis de requisitos . . . . . . . . . . . . 3.3. Representacin de requisitos . . . . . . . . 3.4. Anlisis orientado a objetos . . . . . . . . . 3.5. Validacin de requisitos . . . . . . . . . . . 3.6. Bases de documentacin . . . . . . . . . . Ejercicios y actividades . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
III
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
IV
ndice general
4. Fase de diseo 4.1. Conceptos y elementos del diseo . . . . 4.2. Diseo estructurado . . . . . . . . . . . . 4.3. Diseo orientado a objetos . . . . . . . . 4.4. Validacin y conrmacin del diseo . . . 4.4.1. Revisin del diseo . . . . . . . . 4.4.2. Vericacin del diseo . . . . . . 4.4.3. Validacin del diseo . . . . . . . 4.5. Documentacin: especicacin del diseo Ejercicios y actividades . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
5. Fase de implementacin 5.1. Guas de estilo de codicacin . . . . . . . . . . . 5.1.1. Traduccin del diseo a la implementacin 5.1.2. Estilo de programacin orientado a objetos 5.1.3. Normas para programadores en C . . . . . 5.1.4. Normas para programadores en C++ . . . . 5.1.5. Normas para programadores en Java . . . 5.2. Tcnicas de depuracin . . . . . . . . . . . . . . . 5.3. Documentacin del cdigo . . . . . . . . . . . . . 5.3.1. Tipos de comentarios . . . . . . . . . . . . 5.3.2. Consideraciones generales . . . . . . . . . Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . 6. Fases de pruebas 6.1. Vericacin y validacin a lo largo del ciclo de vida 6.2. Tcnicas y mtodos de prueba . . . . . . . . . . . 6.3. Documentacin de pruebas . . . . . . . . . . . . . Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
7. Fase de entrega y mantenimiento 7.1. Finalizacin del proyecto . . . . . . . . . . . . . . . . . . . . 7.1.1. Aceptacin . . . . . . . . . . . . . . . . . . . . . . . 7.1.2. Informe de cierre del proyecto . . . . . . . . . . . . . 7.1.3. Indicadores del proyecto . . . . . . . . . . . . . . . . 7.2. Planicacin de revisiones y organizacin del mantenimiento . 7.3. Recopilacin y organizacin de documentacin . . . . . . . . 7.3.1. Motivos de la documentacin . . . . . . . . . . . . . 7.3.2. Directrices a seguir para la redaccin de un documento 7.3.3. Tipos de documentos . . . . . . . . . . . . . . . . . . 7.3.4. Manual de usuario . . . . . . . . . . . . . . . . . . . 7.3.5. Manual del sistema . . . . . . . . . . . . . . . . . . . 7.3.6. Manual de mantenimiento . . . . . . . . . . . . . . . Ejercicios y actividades . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
8. Metodologas de desarrollo 8.1. Introduccin a las metodologas de desarrollo . . . . . . . . . . . . 8.2. Proceso unicado de Rational . . . . . . . . . . . . . . . . . . . . 8.2.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.2. Las cuatro P: Personas, Proyecto, Producto y Proceso . . 8.2.3. Proceso dirigido por casos de uso . . . . . . . . . . . . . . 8.2.4. Proceso centrado en la arquitectura . . . . . . . . . . . . . 8.2.5. Proceso iterativo e incremental . . . . . . . . . . . . . . . . 8.2.6. Captura de requisitos . . . . . . . . . . . . . . . . . . . . . 8.2.7. Diseo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.8. Implementacin . . . . . . . . . . . . . . . . . . . . . . . . 8.2.9. Prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3. Mtodo extreme programming . . . . . . . . . . . . . . . . . . . . 8.3.1. Historias de usuario . . . . . . . . . . . . . . . . . . . . . . 8.3.2. Plan de publicacin de versiones . . . . . . . . . . . . . . 8.3.3. Tarjetas CRC: Clases, Responsabilidades y Colaboraciones 8.3.4. Planicacin de cada iteracin . . . . . . . . . . . . . . . . 8.3.5. Integracin . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3.6. Codicacin de cada unidad . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
ndice general
8.3.7. Recomendaciones generales . . . . . . . . 8.4. Mtrica 3 . . . . . . . . . . . . . . . . . . . . . . 8.4.1. Introduccin . . . . . . . . . . . . . . . . 8.4.2. Objetivos . . . . . . . . . . . . . . . . . . 8.4.3. Estructura . . . . . . . . . . . . . . . . . . 8.4.4. Procesos . . . . . . . . . . . . . . . . . . 8.4.5. Interfaces . . . . . . . . . . . . . . . . . . 8.5. Mtodos de software libre: cathedral vs. bazaar 8.5.1. La catedral . . . . . . . . . . . . . . . . . 8.5.2. El bazar . . . . . . . . . . . . . . . . . . . Ejercicios y actividades . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
102 103 103 103 103 104 112 117 117 117 119 121 122 122 122 122 122 124 124 125 125 127 127 128 128 128 129 129 130 130 130 131 131 133 139 141
9. Herramientas de desarrollo y validacin 9.1. Herramientas CASE . . . . . . . . . . . . . . . . . . . . . . . 9.2. Gestin de la conguracin . . . . . . . . . . . . . . . . . . . 9.2.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . 9.2.2. Objetivos de la gestin de conguracin . . . . . . . . 9.2.3. Terminologa . . . . . . . . . . . . . . . . . . . . . . 9.2.4. Control de cambios . . . . . . . . . . . . . . . . . . 9.2.5. Generacin de cambios de estado . . . . . . . . . . . 9.2.6. Plan de gestin de la conguracin . . . . . . . . . . 9.2.7. CVS (Concurrent Versioning System) . . . . . . . . . 9.2.8. Software libre . . . . . . . . . . . . . . . . . . . . . 9.2.9. Sourceforge: Un ejemplo de almacn de software libre 9.3. Entornos de desarrollo de interfaces . . . . . . . . . . . . . . 9.3.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . 9.3.2. Componentes . . . . . . . . . . . . . . . . . . . . . 9.3.3. Creacin de interfaces de usuario . . . . . . . . . . . 9.3.4. Metodologa . . . . . . . . . . . . . . . . . . . . . . 9.3.5. Heursticas de usabilidad . . . . . . . . . . . . . . . 9.3.6. Glade . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.7. GTK+ . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.8. Anjuta . . . . . . . . . . . . . . . . . . . . . . . . . Ejercicios y actividades . . . . . . . . . . . . . . . . . . . . . . . . A. Glosario de trminos Bibliografa ndice alfabtico
VI
ndice general
Presentacin y objetivos
En esta asignatura de Anlisis, Diseo y Mantenimiento del Software se van a estudiar los mtodos, herramientas y elementos que nos permiten analizar y denir los requisitos incluidos en las especicaciones para producir un programa o aplicacin informtica. Este proceso se realizar mediante la utilizacin de tcnicas, metodologas y herramientas que en general se componen de un conjunto de fases comunes: extraccin de requisitos, diseo, implementacin, pruebas y mantenimiento. Para entender cmo se aplican estas fases, se desarrollarn a lo largo del temario unos ejemplos de aplicacin que se utilizarn para ilustrar cmo se aplican y cul es el resultado de estas fases en casos particulares. Una vez que se conocen los elementos del desarrollo, es necesario aglutinar estas fases en forma de metodologas que las aplican con diferentes criterios de secuenciacin. Al mismo tiempo es conveniente conocer algunas de las herramientas disponibles que ayudan en la aplicacin de las tcnicas descritas. Esta asignatura est orientada en una doble vertiente: por un lado est la ingeniera del software clsica y por otro la orientada a objetos, hacindose ms incapi en esta ltima. A lo largo de todos los temas existe un doble tratamiento de estas dos vertientes.
VIII
ndice general
nmero de crditos) y se estudia en el cuarto curso de la titulacin. Los descriptores generales de esta asignatura simultnea son: Anlisis de aplicaciones. Gestin de conguraciones. Planicacin y gestin de proyectos informticos.. Esa asignatura simultnea est estructurada por cuatrimestres. El primer cuatrimestre est dedicado al Proceso Software Personal (PSP). El objetivo del PSP es adquirir una correcta disciplina personal para el desarrollo de un software de calidad en los plazos y costes comprometidos. El segundo cuatrimestre est dedicado a la gestin global del proceso de desarrollo software en el que intervienen decenas o centenares de ingenieros. Tambin es un objetivo obtener un software de calidad en los plazos y costes planicados. Sin embargo en este caso es muy importante la problemtica y las tcnicas de trabajo en equipo. Dicha asignatura y la asignatura objeto de esta gua se complementan para dar una visin general del proceso completo de la produccin de software (Ingeniera de Software), tanto desde el punto de vista tcnico del propio software como de su integracin con el equipo humano, igual que en cualquier proceso productivo industrial. Por tanto, es evidente que la relacin con esta asignatura ser muy importante en cuanto al estudio en paralelo de ambas. Ya que los conceptos estudiados en esa asignatura son aplicados o evaluados sobre los conceptos estudiados en la que es objeto de esta gua. Como ya se ha comentado en el apartado anterior, simultneamente se cursa tambin la asignatura Inteligencia Articial e Ingeniera del Conocimiento que est ms relacionada con esta por la va de la frontera entre la Ingeniera del Conocimiento y la Ingeniera del Software.
Esquema:
Tema 1: Contexto de la Asignatura en la IS
Necesidad de una metodologa Ciclo de vida del software Notaciones de especicacin y diseo
Aplicacin de comercio en Web Gestin del control de proceso de una empresa Agenda electrnica personal
ndice general
IX
Obtencin de requisitos Anlisis de requisitos Representacin de requisitos Validacin de requisitos Bases de documentacin
Conceptos y elementos del diseo Mtodos de diseo Validacin y conrmacin del diseo Documentacin: especicacin del diseo
Vericacin y validacin a lo largo del ciclo de vida Tcnicas y mtodos de prueba Documentacin de pruebas
Finalizacin del proyecto Planicacin de revisiones y organizacin del mantenimiento Recopilacin y organizacin de documentacin
Proceso Unicado de Rational Mtodo Extreme Programming Mtodos de software libre: catedral vs. bazar
edicin anterior (4a ed. de 1997) tambin es utilizable, puesto que los cambios son pequeos. Adems al nal del libro base [Pre01] hay un apndice que recopila todas las siglas en ingles y castellano usadas profusamente en Ingeniera del Software.
ndice general
Medios Adicionales
Adicionalmente a esta gua, el alumno dispondr de los medios de comunicacin habituales con su Profesor Tutor en el Centro Asociado o a travs de las Tutoras Telemticas (o Cursos Virtuales) de la UNED http://virtualdb.uned.es/, y tambin con el Equipo Docente en la Sede Central (en las direcciones, telfonos y horarios indicados en la Gua de Curso). Esto se complementa con los canales de comunicacin y recopilacin de informacin tanto en soporte fsico (CDROM) como en lnea a travs de la pgina de Internet de la asignatura en la UNED http://www.ii.uned.es/superior/cuarto/ADMSoft.html. En todos estos medios se incluir la informacin particular de referencias y contenidos que se detallan en los captulos de esta gua, con la ventaja adicional de que en los medios en lnea los enlaces de direcciones en Internet y otros materiales se irn ampliando y actualizando ms frecuentemente. Adems del libro base (que contiene al nal de cada captulo otras lecturas y fuentes de informacin) y del material incluido en esta gua, tambin se recomiendan como bibliografa complementaria general los libros [Som98] (o la edicin en ingls ms reciente [Som01]) y [RBP 96]:
Ian Sommerville. Ingeniera de Software. Addison-Wesley Iberoamericana, 1998 James Rumbaugh, Michael Blaha, William Premerlani, Frederick Eddy, and William Lorensen. Modelado y diseo orientado a objetos. Metodologa OMT y OMT II. Prentice Hall, 1996
Evaluacin
La evaluacin ocial de la asignatura se har por medio de las pruebas presenciales habituales de la UNED. Se harn dos pruebas parciales, una para cada cuatrimestre. Las pruebas subjetivas consistirn en una parte de preguntas (1 2) tericas breves sobre aspectos relevantes del temario correspondiente, ms otra parte prctica compuesta de 1 2 ejercicios con supuestos prcticos que describirn parcialmente un problema de diseo de software sobre el cual se pedir al alumno completar o extender algunos aspectos relacionados con el temario correspondiente. La puntuacin correspondiente a cada pregunta se especicar en el enunciado. En la nota nal se tendr en cuenta la compensacin entre preguntas dentro de un mismo examen parcial as como la compensacin de ambos parciales. En algunos captulos puede haber propuestas para realizar prcticas por el propio alumno, estas sern totalmente voluntarias (y que por tanto no podrn ser tenidas en cuenta para la puntuacin de la nota nal), pero se recomienda al alumno su realizacin para ayudarle a una mejor comprensin de los temas.
Captulo 1
Para los ciclos de vida se da una descripcin de en qu consiste cada uno y una lista de ventajas e inconvenientes. Tambin este apartado est en esta gua y, se puede aadir el estudio en el libro base [Pre01, secs. 2.3 a 2.12]. Notaciones de especicacin y diseo (UML): La mejor forma de asimilar esta parte consiste en ir haciendo ejemplos. En esta gua se incluye este apartado a estudiar junto con el apartado del libro base [Pre01, sec. 22.5]. Tambin puede ser conveniente una lectura somera del captulo 20 en el mismo [Pre01, cap. 20] (o bien [Pre97, cap. 19] en la 4 a edicin).
1.1.1. Sistemas
La Ingeniera de Sistemas es el contexto genrico en el que se pueden situar las herramientas y metodologas usadas para crear sistemas. Un sistema puede estar formado por subsistemas de diferentes tipos. La ingeniera de sistemas es el primer paso que se da y proporciona una visin global del sistema en su conjunto, posteriormente, se analiza cada subsistema con la rama de la ingeniera adecuada. Una de esas ramas es la ingeniera del software. La Ingeniera del Software trata, segn Bauer [Bau72], del establecimiento de los principios y mtodos de la ingeniera, orientados a obtener software econmico, que sea able y funcione de manera eciente sobre mquinas reales. El sistema es un conjunto de elementos que cooperan entre s para proporcionar una funcionalidad. En el caso de un sistema informtico hay dos tipos de elementos: Hardware y Software.
Los procesos individuales se pueden a su vez descomponer en otros DFD de nivel superior. Especicaciones de procesos: Es lo que se escribe para uno de los procesos denidos en el DFD cuando no se puede descomponer ms. Puede hacerse en pseudocdigo, con tablas de decisin o en un lenguaje de programacin. Diccionario de datos: Son los nombres de todos los tipos de datos y almacenes de datos junto con sus deniciones. La informacin que se incluye en l se puede ver en [Pre01, sec. 12.7]. Diagramas de transicin de estados: Modelan procesos que dependen del tiempo Diagramas entidad-relacin: Los elementos del modelo E/R se corresponden con almacenes de datos en el DFD. En este diagrama se muestran las relaciones entre dichos elementos Los lenguajes de programacin tambin reejan esta dicotoma que existe entre la metodologas, as existen lenguajes para la programacin estructurada. Los ms famosos son: Cobol, Fortran, C, Pascal y Modula 2. Metodologa orientada a objetos Es una aproximacin posterior.La orientacin a objetos al ser ms reciente cuenta con mayor nmero de adeptos y es previsible que termine sustituyendo a la anterior. Adems cuenta con una serie de ventajas: 1. Estn basadas en componentes, lo que signica que es ms fcil reutilizar cdigo hecho por terceras personas. 2. Es fcil de mantener debido a que los cambios estn ms localizados. La mentalidad que subyace al diseo estructurado es: Cmo se puede dividir el sistema en partes ms pequeas que puedan ser resueltas por algoritmos sencillos y qu informacin se intercambian?. En el diseo orientado a objetos la idea es sin embargo: Cuales son los tipos de datos que hay que utilizar, que caractersticas tienen y como se relacionan?. La orientacin a objetos supone un paradigma distinto del tradicional (no necesariamente mejor o peor) que supone focalizar la atencin en las estructuras de datos. El concepto de objetos tuvo sus orgenes en la inteligencia articial como un modo de representacin del conocimiento. El primer lenguaje orientado a objetos fue Simula67, desarrollado por Kristen Nggaard y OleJohan Dahl en el centro de clculo noruego, pero el que se considera el primer lenguaje orientado a objetos puro fue Smaltalk, donde todos los elementos del lenguaje son objetos. El lenguaje C++ fue una ampliacin de C para que soportara objetos, result muy eciente y tambin muy complejo. Java es otro lenguaje orientado a objetos derivado del C++ pero con la idea de ser ms sencillo.
Objetos y clases Un objeto consta de una estructura de datos y de una coleccin de mtodos (antes llamados procedimientos o funciones) que manipulan esos datos. Los datos denidos dentro de un objeto son sus atributos. Un objeto solo puede ser manipulado a travs de su interfaz, esto es, una coleccin de funciones que implementa y que son visibles al exterior. Las clases y objetos tienen muchas caractersticas: 1. Herencia: Es una relacin de generalizacin, cuando varias clases comparten caractersticas comunes, estas se ponen en una clase antecesora. 2. Polimorsmo: Es la capacidad de un objeto de presentar varios comportamientos diferentes en funcin de como se utilice, por ejemplo, se pueden denir varios mtodos con el mismo nombre pero diferentes argumentos. Durante la etapa de anlisis se identican los objetos del dominio del problema. En el diseo se denen cuales son las caractersticas de los objetos.
Etapa
Salida
Figura 1.1: Etapa genrica Algunos autores dividen la fase del diseo en dos partes: Diseo global o arquitectnico y diseo detallado. En el primero se transforman los requisitos en una arquitectura de alto nivel, se denen las pruebas que debe satisfacer el sistema en su conjunto, se esboza la documentacin y se planica la integracin. En el detallado para cada mdulo se rena el diseo, se denen los requisitos del mdulo y su documentacin. Las formas de organizar y estructurar la secuencia de ejecucin de las tareas en las diferentes fases de cada uno de los mtodos puede dar lugar a un tipo de ciclo de vida diferente. Los principales ciclos de vida que se van a presentar a continuacin realizan estas tareas. Cada uno de ellos tiene sus ventajas e inconvenientes.
Diseo
Codificacion
Pruebas
Mantenimiento
Figura 1.2: Ciclo de vida en cascada Descripcin Este modelo admite la posibilidad de hacer iteraciones, es decir, durante las modicaciones que se hacen en el mantenimiento se puede ver por ejemplo la necesidad de cambiar algo en el diseo, lo cual signica que se harn los cambios necesarios en la codicacin y se tendrn que realizar de nuevo las pruebas, es decir, si se tiene que volver a una de las etapas anteriores al mantenimiento hay que recorrer de nuevo el resto de las etapas. Despus de cada etapa se realiza una revisin para comprobar si se puede pasar a la siguiente. Trabaja en base a documentos, es decir, la entrada y la salida de cada fase es un tipo de documento especco. Idealmente, cada fase podra hacerla un equipo diferente gracias a la documentacin generada entre las fases. Los documentos son: Anlisis: Toma como entrada una descripcin en lenguaje natural de lo que quiere el cliente. Produce el S.R.D. (Software Requirements Document). Diseo: Su entrada es el S.R.D. Produce el S.D.D. (Software Design Document) Codicacin: A partir del S.D.D. produce mdulos. En esta fase se hacen tambin pruebas de unidad. Pruebas: A partir de los mdulos probados se realiza la integracin y pruebas de todo el sistema. El resultado de las pruebas es el producto nal listo para entregar. Ventajas La planicacin es sencilla. La calidad del producto resultante es alta. Permite trabajar con personal poco cualicado. Inconvenientes Lo peor es la necesidad de tener todos los requisitos al principio. Lo normal es que el cliente no tenga perfectamente denidas las especicaciones del sistema, o puede ser que surjan necesidades imprevistas. Si se han cometido errores en una fase es difcil volver atrs. No se tiene el producto hasta el nal, esto quiere decir que:
Si se comete un error en la fase de anlisis no lo descubrimos hasta la entrega, con el consiguiente gasto intil de recursos. El cliente no ver resultados hasta el nal, con lo que puede impacientarse .
No se tienen indicadores ables del progreso del trabajo (sndrome del 90 %). 1 Es comparativamente ms lento que los dems y el coste es mayor tambin. Tipos de proyectos para los que es adecuado Aquellos para los que se dispone de todas las especicaciones desde el principio, por ejemplo, los de reingeniera. Se est desarrollando un tipo de producto que no es novedoso. Proyectos complejos que se entienden bien desde el principio.
1 Consiste en creer que ya se ha completado el 90 % del trabajo, pero en realidad queda mucho ms porque el 10 % del cdigo da la mayor parte de los problemas
Como el modelo en cascada ha sido muy popular ha generado algunas variantes. Ahora veremos algunas. Ciclo de vida en V Propuesto por Alan Davis, tiene las mismas fases que el anterior pero se considera el nivel de abstraccin de cada una. Una fase adems de utilizarse como entrada para la siguiente, sirve para validar o vericar otras fases posteriores. Su estructura est representada en la gura 1.3.
Validacion
Mantenimiento
Verficacion
Pruebas
Codificacion
Tiempo
Ciclo de vida tipo sashimi Segn el modelo en cascada puro una fase solo puede empezar cuando ha terminado la anterior. En este caso sin embargo, se permite un solapamiento entre fases. Por ejemplo, sin tener terminado del todo el diseo se comienza a implementar. El nombre sashimi deriva del modo del estilo de presentacin de rodajas de pescado crudo en Japn. Una ventaja de este modelo es que no necesita generar tanta documentacin como el ciclo de vida en cascada puro debido a la continuidad del mismo personal entre fases. Los problemas planteados son: Es an ms difcil controlar el progreso del proyecto debido a que los nales de fase ya no son un punto de referencia claro. Al hacer cosas en paralelo si hay problemas de comunicacin pueden surgir inconsistencias. La fase de concepto consiste en denir los objetivos del proyecto, benecios, tipo de tecnologa y el tipo de ciclo de vida. El diseo arquitectnico es el de alto nivel, el detallado el de bajo nivel. En la gura 1.4 se ha representado la estructura del ciclo de vida sashimi.
Concepto Analisis Diseo arquitectonico Diseo detallado Codificacion Pruebas
Ciclo de vida en cascada con subproyectos Si una vez que se ha llegado al diseo arquitectnico, se comprueba que el sistema se divide en varios subsistemas independientes entre s, sera razonable suponer que a partir de ese punto cada uno se puede desarrollar por separado y en consecuencia en paralelo con los dems. Cada uno tendr seguramente fechas de terminacin distintas. Una vez que han terminado todos se integran y se prueba el sistema en su conjunto. La ventaja es que se puede tener a ms gente trabajando en paralelo de forma eciente. El riesgo es que existan interdependencias entre los subproyectos.
Ciclo de vida en cascada incremental En este caso se va creando el sistema aadiendo pequeas funcionalidades. Cada uno de los pequeos incrementos es parecido a lo que ocurre dentro de la fase de mantenimiento. La ventaja de este mtodo es que no es necesario tener todos los requisitos en un principio. El inconveniente es que los errores en la deteccin de requisitos se encuentran tarde. Hay dos partes en el ciclo de vida, similares al anterior. Por un lado est el anlisis y el diseo global. Por otra parte estn los pequeos incrementos, con las fases de diseo detallado, codicacin y mantenimiento. En la gura 1.5 se puede ver su estructura.
Analisis
Diseno preliminar
Iteracion 1
Iteracion n
Diseno detallado
Diseno detallado
Codificacion y pruebas
. . . .
Codificacion y pruebas
Mantenimiento
Mantenimiento
Ciclo de vida en cascada con reduccin de riesgos Como se ha comentado anteriormente, uno de los problemas del ciclo de vida en cascada es que si se entienden mal los requisitos esto slo se descubrir cuando se entregue el producto. Para evitar este problema se puede hacer un desarrollo iterativo durante las fases de anlisis y diseo global. Esto consistira en: 1. Preguntar al usuario. 2. Hacer el diseo global que se desprende del punto 1. 3. Hacer un prototipo de interfaz de usuario, entrevistas con los usuarios, etc y volver con ello al punto 1 para identicar ms requisitos o corregir malentendidos. El resto es igual al ciclo de vida en cascada.
Analisis de riesgos Analisis de riesgos Analisis de riesgos Analisis de riesgos Plan del ciclo de vida Plan de requisitos Prototipo 4 Prototipo 3
Concepto de operacion Requisitos Sw. Validacion de requisitos Diseno Producto Sw. Diseno detallado Codigo Pruebas unitarias
Plan de desarrollo
Plan de integracion Verificacion y validacion y pruebas del diseno Planificar fases siguientes Imple mentacion
Prueba de aceptacion
Integracion y prueba
Restricciones:
Desde el punto de vista del producto: Interfaces de tal o cual manera, rendimiento, etc. Desde el punto de vista organizativo: Coste, tiempo, personal, etc.
Riesgos: Lista de riesgos identicados. Resolucin de riesgos: La tcnica ms usada es la construccin de prototipos. Resultados: Son lo que realmente ha ocurrido despus de la resolucin de riesgos. Planes: Lo que se va a hacer en la siguiente fase. Compromiso: Decisiones de gestin sobre como continuar. Al terminar una iteracin se comprueba que lo que se ha hecho efectivamente cumple con los requisitos establecidos, tambin se verica que funciona correctamente. El propio cliente evala el producto. No existe una diferencia muy clara entre cuando termina el proyecto y cuando empieza la fase de mantenimiento. Cuando hay que hacer un cambio, este puede consistir en un nuevo ciclo. Ventajas No necesita una denicin completa de los requisitos para empezar a funcionar. Al entregar productos desde el nal de la primera iteracin es ms fcil validar los requisitos. El riesgo en general es menor, porque si todo se hace mal, solo se ha perdido el tiempo y recursos invertidos en una iteracin (las anteriores iteraciones estn bien). El riesgo de sufrir retrasos es menor, ya que al identicar los problemas en etapas tempranas hay tiempo de subsanarlos. Inconvenientes Es difcil evaluar los riesgos. Necesita de la participacin continua por parte del cliente. Cuando se subcontrata hay que producir previamente una especicacin completa de lo que se necesita, y esto lleva tiempo.
Dnde es adecuado Sistemas de gran tamao. Proyectos donde sea importante el factor riesgo. Cuando no sea posible denir al principio todos los requisitos.
Fases
Actividades
10
1.3.1. Introduccin
Modelos Cuando alguien intenta resolver un problema complejo lo primero que hace es estudiarlo: Ver cuales son sus componentes, establecer relaciones entre las partes, comprender sus propiedades e imaginar como funciona de un modo dinmico. Pero como la mente humana es perezosa, no estarn todos los detalles, slo los esenciales. Esto no es importante, con tal de que la representacin mental funcione igual que el problema real los detalles se pueden abstraer. El resultado de este proceso es un modelo. Por tanto, modelo es una representacin de la realidad donde se abstrae lo no esencial. Para un mismo sistema se puede establecer ms de un modelo diferente en funcin de que aspecto interese resaltar o del nivel de detalle que se quiera conseguir. UML son las siglas de Unied Modeling Language y como su nombre indica es un lenguaje de modelado, es decir, su utilidad est en que sirve para expresar modelos. No es nada ms que eso, no indica cmo se debe hacer el anlisis o el desarrollo orientados a objetos y en consecuencia, no es una metodologa de desarrollo, tan solo es una notacin, ahora bien, es la notacin que se ha convertido en el estndar de facto de la mayor parte de las metodologas de desarrollo orientado a objetos que existen hoy en da. Su utilidad est en la especicacin, visualizacin, construccin y documentacin. De esta frase, la palabra visualizacin es la ms importante; UML es un lenguaje basado en diagramas y est pensado para entrar por los ojos, tanto a los desarrolladores como a los clientes. Este captulo no pretende ser exhaustivo, debe entenderse ms bien como una introduccin inicial abreviada. Historia Grady Booch, Jim Rumbaugh e Ivar Jacobson (los tres amigos) desarrollaron las tres metodologas de desarrollo orientado a objetos ms seguidas de la industria. Rumbaugh con su OMT (Object Modeling Technique) y Booch unicaron sus mtodos, de ello naci la primera versin del UML en el ao 1994. Posteriormente, Jacobson, creador del mtodo OOSE (Object-Oriented Software Engineering) se uni al grupo. Actualmente el UML va por la versin 1.3 y la 2.0 est en preparacin.
...
+ Mover(int,int) # CalcularRuta(integer) AlarmaExcesoPeso()
...
Mueve gente de un piso a otro Responsabilidades Calcula ruta que optimiza tiempo
Figura 1.8: Plantilla para una clase en UML 1. Nombre: Si aparece en cursiva la clase es abstracta. 2. Atributos: Pueden mostrar mucha informacin.
11
a) Tipo: Atributo:Tipo b) Valor predeterminado: Atributo:Tipo=Valor Atributo=Valor c) Restricciones: Las restricciones se pueden poner como se ha visto en el grco, pero UML cuenta con un mtodo an ms formal que es el lenguaje OCL. d) Alcance: Un atributo puede ser pblico(+), protegido(#) o privado(-). e) mbito: Hay dos tipos Instancia: Cada objeto tiene su propio valor. Archivador: Solo hay un valor en todas las instancias de una clase (como las variables static en Java). Estos atributos aparecen subrayados. Toda esta informacin es opcional, de hecho la mayora de las veces se pone slo el nombre del atributo. 3. Mtodos: Al igual que los atributos tambin pueden especicar su alcance o mbito. Adems pueden indicar el tipo de los argumentos que reciben y el tipo del valor devuelto. Tanto si tienen parmetros como si no deben llevar un parntesis abierto y otro cerrado al nal del nombre. 4. Responsabilidades: Es una descripcin de lo que hace la clase en su conjunto. Est informacin casi nunca est en los diagramas. La informacin que se ha puesto en la gura de ejemplo es mucho ms de la que se suele mostrar, una clase puede representarse con un simple rectngulo con su nombre, como se ve en la gura 1.9.
Nombre de la clase
Figura 1.9: La clase ms sencilla posible Adems se puede omitir parte de la informacin de un apartado. Los puntos suspensivos que hay en el ejemplo al nal de las secciones de atributos y mtodos indican que la clase est abreviada, o lo que es lo mismo, faltan atributos y mtodos. Slo se pone lo necesario para expresar la idea del diagrama. Los estereotipos son una forma de introducir nuevos trminos sobre el vocabulario propio de un dominio. Los paquetes son agrupaciones de clases relacionadas de alguna forma entre s (su representacin se ilustra en la gura 1.10). Las notas son un texto explicativo de algn elemento y se representa de la forma indicada en la gura 1.11.
AWT
Button
Canvas
Label
Checkbox
Ascensor
Objetos Los objetos son instancias de clases (sus atributos tienen valores especcos) y, como se indica en la gura 1.12, se representan poniendo el nombre de la instancia a la izquierda, dos puntos y el nombre de la clase de la que deriva a la derecha.
12
AscensorA : Ascensor
Figura 1.12: Smbolo en UML de un objeto Relaciones Las clases no estn aisladas, entre ellas pueden relacionarse de muchas maneras. La representacin bsica de las relaciones es una lnea (con otros elementos adicionales como echas, rombos, texto, etc.) entre las clases relacionadas. Asociaciones Es una relacin conceptual, que no es inherente a la naturaleza de las clases, sino al papel que juegan en el modelo y especica que las instancias de una clase estn conectadas con las de otra. No es una relacin fuerte, es decir, el tiempo de vida de un objeto no depende del otro. Como se puede ver en la gura 1.13, la relacin tiene un nombre que indica en que consiste y su direccin, indicada con un tringulo relleno. Se puede indicar adems (de forma opcional) cual es el papel (rol) que representa cada una de las partes en la relacin.
Nombre de la relacion
Empresa
Programador
Figura 1.13: Ejemplo de una asociacin Es posible que dos clases estn relacionadas entre s por ms de una relacin en ambos sentidos o que una clase est relacionada con muchas. Se dice que una relacin es reexiva cuando una clase est asociada consigo misma. Es posible que una instancia de una clase pueda estar relacionada con un nmero variable de instancias de otra. La notacin para expresar esa multiplicidad es exible: 1. Nmeros concretos. Un nmero exacto: A. Por ejemplo: 5 (signica exactamente 5). 2. Intervalos. Entre A y B, ambos incluidos: A..B. Por ejemplo: 2..6 (es entre 2 y 6). 3. Asterisco. El smbolo * signica muchos. Si est en un intervalo se pone en el extremo superior. A..* se lee: A o ms. Por ejemplo: 3..* (es 3 o ms). Si el * est solo signica que puede ser un nmero cualquiera, cero incluido. 4. Combinacin de los elementos anteriores: Por ejemplo: 1..4,6,9..* (que signica entre 1 y 4, 6, 9 ms de 9, es decir, los valores 0, 5, 7 u 8 no estaran permitidos); 2,4,6 (es los valores 2, 4 6 y ninguno ms). En el siguiente ejemplo, representado en la gura 1.14, se hacen las siguientes suposiciones:
1 Alumno * hace practicas con 1 matriculado en 1..* Asignatura
1..11
0,1
Profesor
Figura 1.14: Relaciones entre alumnos, asignaturas y profesores Un alumno puede estar matriculado como mnimo en una asignatura (si no est en ninguna no es alumno) y como mximo en 11. En una asignatura se pueden matricular un nmero ilimitado de alumnos pero tiene que haber al menos uno o de lo contrario la asignatura no existe. Un alumno puede estar haciendo o no el proyecto n de carrera. En caso armativo tendr un profesor asignado como coordinador. Existen asignaturas que tienen prcticas y algunas de ellas son entre varios. Un alumno puede estar asociado con un nmero variable de compaero para hacerlas, puede ser que con nadie, uno, dos, ...
13
Navegabilidad Es una propiedad del rol. Indica la posibilidad de ir desde el objeto fuente al objeto destino. Signica visibilidad, o sea que generalmente se ven los atributos. Por defecto la navegabilidad es bidireccional, pero a veces no ser posible viajar en ambas direcciones. Por ejemplo, en el caso de la gura 1.15 no es posible la bidireccionalidad debido a que dado un password no se puede conocer el usuario al que pertenece (al menos en principio).
Login * 1 Password
Calicacin Cuando se tiene una relacin uno a muchos existe el problema de la bsqueda, es decir, localizar la instancia correcta en el lado muchos. Para reducir el nmero de instancias a uno se utiliza un atributo de la relacin, representado como se ve en la gura 1.16.
1..* Cursa 1..11
Estudiante
Asignatura
1 Estudiante N. Matricula
Cursa
1..11
Asignatura
Agregacin Es un tipo de relacin del tipo todo/parte y se representa como se muestra en la gura 1.17. Sirve para modelar elementos que se relacionan utilizando expresiones como: es parte de, tiene un, consta de, etc. Todo lo que se ha dicho antes acerca de la multiplicidad es vlido aqu.
Continente 1 1..* Pais
Composicin Es un tipo de agregacin donde cada componente pertenece a un todo y slo a uno (en el ejemplo anterior no se cumple esto, por ejemplo, la antigua Unin Sovitica tena una parte europea y una parte asitica). En la gura 1.18 vemos un ejemplo de este tipo de relacin. Herencia y generalizacin Indica que una subclase o clase secundaria hereda los mtodos y atributos denidos en una superclase o clase principal. La superclase es ms genrica que la subclase. Este tipo de conexin se lee como es un tipo de. En UML se utiliza el trmino generalizacin en vez de herencia, pero es lo mismo. En la gura 1.19 se muestra un ejemplo de representacin. Dependencias Es un tipo de relacin en la que una clase usa a la otra. Por ejemplo: Una interfaz de un programa de dibujo tiene varios objetos en la pantalla. La clase Pantalla tiene el mtodo DibujarObjetoGrafico(o:OG) y dibujar una recta, un punto, etc en funcin de lo que sea ese objeto. Esta relacin se representa como en la gura 1.20. Interfaces Son un conjunto de operaciones que especican parte de la funcionalidad proporcionada por una clase. Una interfaz es como una clase pero sin atributos. Se representa de dos formas como se muestra en la gura 1.21. En una como una clase con el estereotipo interfaz y en otra abreviada, sin mostrar los mtodos. Entre los interfaces tambin existe herencia. Una clase puede implementar varios interfaces, y un interfaz puede ser implementado por ms de una clase. Todos los mtodos de un interfaz son pblicos.
14
1 Motor
1 Ascensor 1 1 Cabina
1 Cable
Profesor
P.Asociado
P.Ayudante
P.Interino
P.Titular
Pantalla
DibujarObjeto
ObjetoGrafico
15
ObjetoGrafico
Dibujable ObjetoGrafico
Libro traducido
> citado en
Diccionario
Libro hipermedia
video Anexo
Escuchar
Anexo
16
: Motor miCoche : Coche matricula = WWW 1234 modelo = Citroen ZX 1.9 D color = verde
: AsientoDelantero
: Carroceria
: AsientoDelantero
: AsientoTrasero
: Salpicadero
Figura 1.23: Diagrama de objetos funcionales. Los casos de uso se escriben desde el punto de vista del actor, que es el usuario o sistema externo que interacta con el sistema.
LLamar ascensor
Figura 1.24: Caso de uso Relaciones que nos podemos encontrar en los casos de uso (ver gura 1.25):
Realizar venta pedido <<extend>> <<include>> Comprobar producto
1. Include: Es el concepto de subrutina. Si por ejemplo tenemos dos casos de uso A y B que tienen una serie de pasos en comn se ponen esos pasos en un tercer caso de uso C y A y B lo incluyen para usarlo. 2. Extends: Signica que un caso de uso B es igual al A al cual extiende aadiendo algunos pasos. 3. Comunicates: Comunica un actor con un caso de uso o con otro actor. Modelado del contexto Hay que modelar la relacin que tiene el sistema con los elementos externos. Los pasos a seguir son: 1. Identicar los actores que interactan con el sistema. 2. Organizar los actores. 3. Especicar las vas de comunicacin con el sistema. Modelado de requisitos Esto signica incorporar los casos de uso necesarios, tanto los que son visibles externamente como los que no. Para ello las actividades a seguir son: 1. Establecer su contexto. 2. Identicar las necesidades de los elementos del contexto. 3. Nombrar esas necesidades y darles nombre de casos de uso.
17
4. Identicar que casos de uso pueden ser especializaciones de otros y buscar especializaciones comunes para los casos de uso ya encontrados. Los casos de uso se vern con detalle ms adelante.
Acciones. Programadas por los desarrolladores Eventos: Sucesos a los que reacciona el sistema. Pueden ser de tres tipos:
Entry: Actividades que se realizan al entrar al estado. Exit: Eventos al abandonar el estado. Do: Actividades mientras se est en el estado.
Guard condition: Expresin lgica que habilita o no la transicin. Accin: Accin interna a ser ejecutada. Mensaje: Evento enviado a otro objeto (o a varios).
Las transiciones entre estados pueden tener parmetros. Cada transicin tiene un evento asociado. Cuando se terminan las actividades de un estado hay una transicin. Por ejemplo, supongamos que tenemos un ascensor que cuando est en el stano (rea restringida a la que slo se puede acceder con llave) sube a los pocos segundos para evitar que si alguien se ha colado pueda acceder a las viviendas. Por otra parte el ascensor puede estar subiendo, bajando o parado. Cuando se est bajando al stano se considera como un estado especial y el hecho de estar en el stano tambin. Esto se puede representar como en la gura 1.26.
llegar Subiendo subir bajar_stano timeout Stano llegar Bajando al stano Parado llegar bajar Bajando
18
obj 1: Clase A [X] msg [no X] msg obj 2: Clase B
Figura 1.27: Diagrama de secuencias. Condicionales 6. Iteracin: Se pone el smbolo * previo a la condicin. Se repite la accin mientras la condicin es verdadera (ver gura 1.28).
:Agenda *[hayMasElementos()]siguiente():Elemento :Lista
Figura 1.28: Diagrama de secuencias. Iteracin 7. Creacin y destruccin de un objeto: La creacin de un objeto se representa con un mensaje de creacin sobre un rectngulo. La destruccin se representa con un aspa al nal de su lnea de vida (ver gura 1.29). 8. Mtodos recursivos: Se representan poniendo un rectngulo superpuesto al que est activo en el momento (ver gura 1.29).
obj1:Clase 1 obj2:Clase 1 obj3:Clase 2
create
obj4:Clase 3
destroy
Figura 1.29: Diagrama de secuencias. Mtodos recursivos y destruccin de objetos Las boundary classes, o clases de frontera, sirven para capturar y documentar los requisitos de interfaz. Muestran la interaccin con el usuario o con un sistema externo. Las clases de entidad son las inherentes al modelo del dominio y las de control son las que gestionan el caso de uso asociado al diagrama de secuencias. Reglas a seguir: La primera columna debe corresponder al actor que inicia el caso de uso. La segunda columna debe ser un objeto de frontera, que se comunica con el actor. La tercera columna debe ser un objeto de control que gestiona el caso de uso. Los objetos de control son creados por el objeto de frontera que inicia el caso de uso. Los objetos de frontera son creados por objetos de control. Los objetos de entidad son accedidos por objetos de control y frontera. Los objetos de entidad nunca tienen acceso a los objetos de frontera o control. De esta forma estos objetos pueden ser reutilizados en varios casos de uso distintos.
19
Ducha
Desayuno
Esperar 30 segundos [quiero andar] Ir andando [no quiero andar] Usar mando apertura garaje Abrir puerta
abrir(puerta)
abrir(puerta)
Conducir
1. 2. 3. 4. 5.
Punto inicial. Se representa por un crculo negro. Punto nal. Es una diana. Actividades. Son rectngulos con bordes redondeados. Transiciones. Son el paso de una actividad a otra. Se representan con echas. Actividades concurrentes. Se representan por sus correspondientes actividades y una barra negra de la cual parten las echas que las inician. 6. Bifurcaciones: Se representan con un rombo o sencillamente con dos echas que salen de una actividad a otras dos. En cualquier caso, la condicin se indica en cada uno de los ramales entre corchetes. 7. Indicaciones: Se pueden enviar o recibir. El envo se representa con un rectngulo acabado en echa. El que las recibe con una gura complementaria de la anterior. Una indicacin modela el envo y recepcin de eventos.
20
Componente
Interface
Figura 1.32: Ejecutable que usa una librera de manipulacin de listas Ejecutables Para modelarlos (ver ejemplo en la gura 1.32) los pasos a seguir son: 1. Identicar los componentes, particiones del sistema, cuales son factibles de ser reutilizadas, agruparlas por nodos y realizar un diagrama por cada nodo que se quiera modelar. 2. Identicar cada componente con su estereotipo correspondiente (executable, library, etc). 3. Relacionar los componentes entre s. Cdigo fuente Podemos usar estos diagramas (ver ejemplo en la gura 1.33) para expresar las dependencias que existen entre los mdulos para formar libreras o programas ejecutables.
<<file>> A.h <<file>> B.h
<<file>> Agenda.h
<<file>> Agenda.exe
Tutorial posterior
Resumen de contenidos
ste es el captulo introductorio donde se aborda cmo es la divisin en fases de un proyecto (ciclos de vida), las caractersticas de las metodologas que ordenan esas fases y una notacin muy habitual actualmente que se utiliza a lo largo de todo el ciclo de vida de un proyecto.
21
2:r2:=lanzar()
d2:Dado
Servidor BD Oracle
Figura 1.35: Diagrama de distribucin 1. Metodologas: Es una justicacin del porqu de la ingeniera del software. Se dene lo que se entiende por sistema y por metodologa (una forma podra decirse burocrtica de producir un sistema con costes y tiempos controlados). Se establece tambin una clasicacin de las metodologas que, al igual que como se ver con los ciclos de vida, pertenecen a dos tipos principales: estructurada y orientada a objetos. 2. Ciclos de vida: Se explica lo que es un ciclo de vida, las fases de las que se compone y la forma en la que se ordenan estas fases. Hay una clasicacin de los distintos ciclos de vida que se pueden dar en un proyecto. Bsicamente, hay dos tipos principales que son: el ciclo de vida en cascada (el ms antiguo y preferido en la metodologa estructurada) y el ciclo de vida en espiral (el ms nuevo, preferido en la metodologa orientada a objetos) que se dividen a su vez en varios subtipos para cumplir diferente propsitos. Los ciclos de vida son: a) Ciclo de vida en cascada. Subtipos: ciclo de vida en V, Sashimi, cascada con subproyectos, cascada incremental y cascada con reduccin de riesgos. b) Ciclo de vida en espiral. Subtipos: Fuente y adems los subtipos cascada incremental y cascada con reduccin de riesgos que tambin se pueden considerar como ciclos de vida en espiral. 3. Notaciones de especicacin y diseo (UML): Se da una introduccin breve a la notacin UML. Existen libros muy completos al respecto, aqu solo se dan nociones bsicas para comprender un diagrama. El motivo de explicarlo en este tema es que se trata de una notacin que se puede seguir a lo largo de todas las fases del ciclo de vida. Previamente se denen los elementos de los que constan los diagramas. Despus se detallan los diagramas que lo componen. a) Diagrama de casos de uso: Es la forma en la que se lleva a cabo la especicacin, que puede servir tanto para metodologas clsicas (estructuradas) como orientadas a objetos. A partir de este diagrama se pueden sacar un esbozo de las clases de las que consta el sistema y las relaciones entre ellas. b) Diagrama de clases: Es el ms importante, muestra las clases en las que se divide el sistema o subsistema, informacin acerca de las mismas (atributos y mtodos), notas (comentarios) y las relaciones que existen entre ellas (herencia, asociacin, agregacin). El diagrama de clases junto con el de casos de uso es la piedra angular del resto de diagramas. c) Diagrama de estados: Bsicamente es un autmata nito como los que se estudiaron en la asignatura Teora de autmatas I y II. Consiste en una serie de estados y transiciones entre ellos. Usados para representar el cambio de estado de una clase en funcin de eventos. d) Diagrama de objetos: Muestra objetos (instancias de clases) en un momento concreto de la ejecucin de un programa, como si de una foto se tratara. e) Diagrama de secuencias: Muestra los objetos y los intercambios de mensajes entre ellos teniendo en cuenta la temporalidad con la que ocurren. f ) Diagrama de actividades: Modelan el comportamiento interno de una clase.
22
g) Diagrama de componentes: Un componente es algn tipo de documento del sistema, como por ejemplo cdigo fuente, una tabla, etc. Este diagrama modela la organizacin y dependencias entre ellos. h) Diagrama de colaboracin: Dibuja las interacciones entre objetos organizadas a travs de los objetos y los enlaces que hay entre ellos. Es equivalente a los diagramas de secuencia. i) Diagrama de distribucin: Reeja la organizacin del hardware. El elemento principal es el nodo. Uno nodo puede o no ejecutar componentes. Los enlaces entre nodos representan lneas de comunicaciones.
Extensin de conocimientos
Este tema tambin se puede estudiar en [Som98, cap. 1], [Haw98, caps. 1 al 3] [Sch92, caps. 1 y 2]. Se pueden refrescar conocimientos previos en [CCEG00] y otros libros especcos de asignaturas previas o simultneas sobre Ingeniera del Software, por ejemplo en [Hum95] [Hum01]. La revista en lnea Software Development http://www.sdmagazine.com/, puede ser una buena fuente para encontrar artculos (en ingls) sobre temas de IS en general. Para una extensa coleccin clasicada y con buscador de bibliografas (mayoritariamente en ingls) sobre Ingeniera del Software en general, se puede consultar la pgina http://liinwww.ira.uka.de/ bibliography/SE/ dentro de The Collection of Computer Science Bibliographies. Tambin puede ser interesante la gua al SWEBOK (Software Engineering Body of Knowledge) en http://www.swebok.org/ que es una iniciativa conjunta del IEEE y la ACM para expresar el conjunto de conocimientos bsicos en Ingeniera del Software. Sobre el lenguaje UML se pueden extender conocimientos en varios libros especcos del tema como [JBR00a, JBR00b, Fow97] [Sch01b], o bien a travs de las pginas de Internet: http://www.omg.org/technology/uml/ del Object Managenemt Group (OMG). En la pgina http://usuarios.lycos..es/oopere/uml.htm se puede encontrar una introduccin a UML de Pere Martra muy interesante. Hay una herramienta de libre distribucin para la representacin mediante diversos mtodos (incluido UML) en http:// wwwhome.cs.utwente.nl/~tcm/ llamada TCM (Toolkit for Conceptual Modeling). En http://www.argouml.org/ se puede encontrar A RGO UML que es una herramienta libre (implementada en Java y licencia BSD) especca para la representacin en UML. Tambin se puede encontrar informacin en http://uml.sourceforge.net/index.php sobre el programa UML Object Modeller (para KDE en GNU/Linux) para dibujar diagramas de UML.
Captulo 2
24
gestin comercial de la empresa para simplicar el problema, pero por otro lado aporta sucientes dicultades que se han de ir desentraando en cada una de las fases del desarrollo. Uno de los requisitos de la aplicacin es que sea segura, es decir, que no puedan existir terceras personas escuchando, para ello se puede utilizar el protocolo https. La aplicacin tiene dos partes: Oferta 1. Cada producto tiene: Foto, descripcin, Cdigo, PVP. 2. Ofertas (p. ej.: Lleve dos y pague tres, etc): Las ofertas son diferentes en funcin de que el cliente sea una persona o una empresa, y tambin dependiendo de si es o no un buen cliente, por tanto hay que guardar toda la informacin relativa a cada venta. 3. Forma de hacer pedidos: Se rellena un formulario. Si es la primera vez que se hace el pedido, el cliente rellena un formulario de datos personales y bancarios que se almacenan en una base de datos. Demanda 1. Hay una lista de artculos demandados con el mximo nmero de unidades que se admiten y que los mayoristas pueden consultar. 2. La oferta de un mayorista consiste en una lista de: a) Nombre de artculo. b) Precio unitario. c) Cantidad de artculos a partir de la cual se tiene ese precio unitario. (Cuantos ms artculos se compren menor es ese precio) 3. Una vez hecha una oferta se almacena en una base de datos. 4. Existe la posibilidad de que el mayorista ofrezca artculos que no estn en la base de datos (novedades). Cada una de estas ofertas es un lote de productos que el mayorista vende juntos. Un mayorista puede hacer mltiples ofertas. En funcin de las ofertas de los proveedores se toman las decisiones de seleccionar uno u otro. Las ofertas pueden ser complejas, pudiendo ofertar un mismo artculo a precios diferentes en funcin de la cantidad de artculos o en ofertas que consisten en un lote de productos.
25
Caso de uso: Recogiendo pedido de cliente Actor: Cliente Curso normal Alternativas 1) El cliente se identica correctamente 1.1) El cliente no est en la BD. Fin 2) El cliente selecciona de la lista de productos las cantidades que necesita. 3) El sistema registra el pedido 3.1) No hay suciente cantidad de algn producto . Se llama a Solicitando reposicin 4) El sistema informa de la fecha de entrega 5) El usuario conrma el pedido 5.1) El usuario rechaza el pedido Cuadro 2.3: Caso de uso para recoger pedido de cliente Caso de uso: Recogiendo oferta de proveedor Actor: Proveedor Curso normal Alternativas 1) El proveedor se identica correctamente 1.1) El proveedor no est en la BD. Fin 2) El proveedor escribe la lista de productos ofertados y precios 3) El sistema graba la informacin en la base de datos Cuadro 2.4: Caso de uso para recoger oferta de un proveedor 3. Recogiendo pedido de cliente (ver tabla 2.3). 4. Recogiendo oferta de proveedor (ver tabla 2.4). 5. Actualizando contenido de la pgina (ver tabla 2.5). . Caso de uso: Actualizando contenidos Actor: Gestor Curso normal Alternativas 1) El gestor se identica correctamente 1.1 ) El gestor no se identica correctamente. Se anota la incidencia. Fin 2) El gestor introduce nuevos elementos en la B.D. de productos con sus cantidades y precios de venta al pblico. Cambia las cantidades de algunos productos 3) El sistema actualiza la B.D. de productos y registra fecha, gestor, y cambios realizados Cuadro 2.5: Caso de uso para actualizar contenido de pgina 6. Solicitando reposicin (ver tabla 2.6). 7. Seleccionando proveedor (ver tabla 2.7). Clases Las clases necesarias para realizar el primer caso de uso Dando de alta cliente seran: 1. Objetos de entidad Cliente: Es un objeto del mundo real que el sistema tiene que tener en cuenta para almacenar sus datos. Sirve para almacenar los datos del cliente. TablaClientes: Proporciona un conjunto de accesos a la tabla de clientes de la base de datos. Sirve para saber si un objeto Cliente existe y para insertarlo. 2. Objetos de frontera FormularioAlta: Para preguntar los datos al cliente. MensajeError: Para mostrar si el cliente ya estaba registrado. PreguntaPeticin: Para preguntar si se inicia el caso de uso RecogiendoPedidoCliente. 3. Objetos de control ControlAltaCliente: Es el objeto que gestionar la comunicacin entre los diferentes objetos. El resto de los casos de uso tendran un proceso similar.
26
Cuadro 2.6: Caso de uso de solicitar reposicin Caso de uso: Solicitando reposicin Actor: Sistema Curso normal Alternativas 1) El nmero de items de algn producto baja de su umbral 2) El sistema selecciona un proveedor 2.1 No se encuentra proveedor. Se escribe la incidencia en la base de datos. Fin del caso de uso. 3) Se establece comunicacin con el proveedor 4) La aplicacin del proveedor est disponible 4.1 La aplicacin del proveedor no est disponible. Se elimina de la lista de proveedores y se vuelve al punto 2 5) El proveedor registra la peticin 6) El proveedor notica la entrega 7) El sistema inserta en la base de datos fecha, producto, cantidad, precio y proveedor Caso de uso: Seleccionando proveedor Actor: Gestor Curso normal Alternativas 1) El usuario introduce un tipo de producto y cantidad 2) El sistema busca el proveedor que 2.1 El sistema no encuentra un suministre el producto a menor precio y proveedor de ese producto lo comunica al usuario y lo comunica al usuario Cuadro 2.7: Caso de uso de seleccionar proveedor Diseo arquitectnico Las partes en las que se divide esta aplicacin son las siguientes: 1. 2. 3. 4. Base de datos Servidor Clientes Una aplicacin en el lado del proveedor que dialoga con la nuestra
En el cliente estaran todos los formularios y se mandara el contenido en la forma de los objetos adecuados al servidor.
27
Personas
Aptitudes
Empresa chips
Productos Tareas
Produccion
Pedidos
Clientes
Produccion
Productos
Gestion Almacen 1
Pedidos
Clientes
Tareas
Gestion Personas 2
Aptitudes
Personas
Figura 2.2: DFD 1 La gestin del almacn se puede descomponer de este modo: 1. Gestin de entradas. Items que entran al almacn. No se tiene en cuenta cual es el proceso que causa la peticin a los proveedores de estos items. 2. Gestin de salidas. Items que salen al almacn como consecuencia de pedidos. Ambos procesos actualizarn la base de datos y dejarn un registro de cada entrada y salida. La gestin de personas se podra descomponer de esta forma: 1. Actualizar plantilla. En el caso de una persona que se ponga enferma o se desplace. 2. Asignacin de tareas. Se selecciona una persona para cubrir esa baja, que es un tipo de obrero cualicado para cubrir cualquiera de los puestos de una lnea de produccin. 3. Planicacin global. Este proceso se encarga de la replanicacin global en el caso de un nuevo plan de produccin.
28
Adems se va a dividir la informacin en dos tipos: Pblica y privada. La informacin pblica est a la vista de cualquier persona que utilice el programa. La informacin privada slo la puede recuperar la persona que la ha introducido, para lo cual ser necesario que cada persona tenga un login y un password (slo si esa persona quiere introducir o leer informacin en un rea privada). Esto signica que hay que hacer una gestin de usuarios. Se desea tambin que exista algn mecanismo para dividir los tipos de personas en categoras, de forma que se distinga entre compaeros del trabajo, amigos, familiares, etc. Esto puede implementarse como un atributo ms de los relativos a la persona, pero debe usarse tambin de algn modo en la interfaz de usuario de tal forma que sea fcil seleccionar entre los diferentes tipos de personas (el usuario no sabe SQL ni similares). Se cuenta tambin con la posibilidad de recuperar elementos borrados. Cada vez que se borra un elemento no queda borrado del todo, se almacena en un rea conocida como limbo, del cual se puede recuperar. Si un elemento es eliminado del limbo desaparece denitivamente. Los datos se pueden guardar de dos formas: en una base de datos o en cheros. Ambos mtodos tienen sus ventajas e inconvenientes. En cualquier caso los datos que se guarden como secretos deben ser cifrados (usando alguno de los algoritmos criptogrcos que hay publicados) con la clave que se pide al usuario para de esa forma evitar cualquier tipo de intrusin. En algn lugar de la interfaz de usuario hay que poner un reloj (no se especica si analgico o digital) y la fecha. El reloj tiene precisin de segundos.
Caso de uso: Buscar persona 2. 1. 2. 3. 4. El usuario selecciona la opcin de personas en la pestaa adecuada. El sistema cambia la pantalla para mostrar ese tipo de elementos. El usuario pulsa el icono de bsqueda o selecciona esa opcin del men. El sistema muestra una pantalla donde se pregunta el nombre y apellidos de la persona a buscar.
29
5. El usuario escribe la informacin. 6. Pueden ocurrir tres cosas: No existen personas con ese nombre. El sistema pone un mensaje. Fin del caso de uso. Slo existe una persona. Se resalta el nombre de esa persona en la lista de personas y se pone su informacin en las casillas correspondientes de la ventana. Fin del caso de uso. Existe ms de una persona que se corresponde con ese nombre (puede pasar porque si slo se ha escrito el nombre o parte de l puede haber varias personas distintas que se correspondan, aunque sea la clave de esta tabla). El sistema hace una lista de las personas mostradas y esa lista se recorre igual que en el caso de uso buscar persona 1. Fin del caso de uso. Al igual que antes, los casos de uso para libros, discos, etc seran idnticos a este. Borrado En este caso necesitamos hacer una bsqueda primero y luego un borrado. Veamos cmo se borrara una persona. Puede hacerse de dos formas, como en el buscar persona. Caso de uso: Borrar persona 1. 1. 2. 3. 4. 5. El usuario selecciona una persona con el caso de uso Buscar persona 1. El usuario pulsa el icono de borrado o selecciona esa opcin del men. El sistema pide conrmacin con la ventana correspondiente. El usuario conrma el borrado o lo rechaza, en cuyo caso termina el caso de uso. El sistema pone la informacin en el limbo.
Caso de uso: Borrar persona 2. 1. 2. 3. 4. 5. Se utiliza el caso de uso de buscar personas 2. El usuario pulsa el icono de borrado o selecciona esa opcin del men. El sistema pide conrmacin con la ventana correspondiente. El usuario conrma el borrado o lo rechaza, en cuyo caso termina el caso de uso. El sistema pone la informacin en el limbo.
Como estos dos casos de uso son prcticamente idnticos podramos pensar en utilizar la parte comn. Divisin del sistema Veamos cmo sera la divisin del sistema. Las entidades externas seran los usuarios (ver gura 2.3). Los procesos que hay que hacer son:
Insercion Consulta Borrado Modificacion Usuario Creacion Borrado Acceder como Agenda
Gestin de personas (telfonos y direcciones). Insercin, borrado, consulta y modicacin. Gestin de libros, msica y vdeos (dem que el anterior) Gestin de usuarios (login, password). Acceder como, Crear usuario, Borrar usuario. Adems cada uno de estos apartados denira un almacn propio para guardar cada uno de sus tipos de datos. Como se puede ver (gura 2.4), cada uno de los procesos es totalmente independiente de los dems, no necesitan comunicarse informacin, excepto en el caso de la gestin de usuarios, que dene el usuario actualmente conectado y correctamente identicado por el sistema. Esta informacin se deja en un almacn al cual pueden acceder el resto de los procesos.
30
Insercion Consulta Borrado Insercion
Gestion Libros
Consulta Borrado
Gestion Musica
Modificacion
Borrar Usuario
Gestion Usuarios
Usuario
Gestion Videos
Consulta
Gestion Personas
Diseo de la interfaz de usuario Puede hacerse de muchas formas perfectamente vlidas, la solucin propuesta es slo una de ellas. Las opciones que el usuario tiene que ver claramente son: Gestin usuarios, Personas, Libros, Msica y Vdeos. La interfaz puede hacerse de muchas formas: Men, Barra de iconos, o un componente con varias pestaas con cada opcin. Una barra de iconos quizs sea la mejor opcin desde el punto de vista de la vistosidad, pero hay que tener cuidado de que esos iconos sean realmente signicativos. Es aconsejable adems que exista algn tipo de ayuda, como los mensajes de ayuda emergentes que salen cuando se pasa el ratn por encima. Cada vez que se pulse una de las opciones, el diseo de la pantalla debera cambiar para mostrar un conjunto de elementos visuales relativos a la opcin seleccionada, por otra parte, cada una de las opciones del men, barra o componente, tendra que poder mostrar en cada una de ellas las opciones de Insercin, Borrado, etc. Si la opcin escogida es un men esto podra hacerse con submens. Si se escoge una barra de iconos, se puede poner en la pantalla un botn con cada una de las opciones, etc. Distribucin de la informacin dentro de la pantalla: El objetivo es que encontrar la informacin sea fcil y rpido. Una forma es tener una lista de Personas, Libros, etc a la izquierda y la lista de atributos de uno de ellos a la derecha y ocupando el resto de la pantalla. Cada vez que se selecciona una Persona, Libro, etc. cambia el contenido de los atributos mostrando el seleccionado.
Tutorial posterior
Resumen de contenidos
Este captulo consiste simplemente en un conjunto de tres ejemplos que se plantean, tanto en su descripcin, como en el diseo o preparacin de plantillas de su posible solucin. Estos ejemplos podrn ser utilizados a lo largo del resto de los temas para ilustrar algunos aspectos de los mismos. Los ejemplos elegidos son: una aplicacin de comercio en Web, la gestin de proceso en una fbrica de productos elctricos y una agenda electrnica personal.
31
Extensin de conocimientos
En [Pre01, sec. 28.5] se encuentra una descripcin de un sistema de comercio electrnico, que puede usarse para extraer ms informacin y descripciones para el primer ejemplo de este captulo. En el apndice A.3 del libro [Som98], se puede encontrar un conjunto de ejemplos gua alternativos desarrollados en las diferentes fases que pueden resultar muy tiles. Hay una aplicacin para tienda electrnica de libre distribucin (fuentes incluidos), desarrollado en modo open source (licencia GPL) por O NRICA por encargo de BANESTO, en http://www.cibertienda.org/ que puede servir de gua para el ejemplo aqu presentado.
32
Captulo 3
Fase de requisitos
Tutorial previo
Introduccin
El primer paso para atacar un problema es conocer cul es el problema y por tanto se necesita saber cules son los requisitos del problema. La extraccin u obtencin de requisitos es el primer paso que va seguido del anlisis de esos requisitos en base a un modelo del problema. De ese anlisis obtendremos una especicacin de requisitos que debemos validar frente a las especicaciones iniciales. Esta fase es la primera que se acomete en el desarrollo del proyecto y es la ms importante, sobre todo, si se tienen en cuenta las consecuencias de una mala obtencin de requisitos: hacer un sistema que no hace lo que el cliente espera de l. Ocurre que no es tan sencillo como se puede pensar en un principio, pues muchas veces el propio cliente no tiene una imagen clara del sistema nal o surgen nuevas necesidades a mitad del desarrollo. Para hacer frente a estos problemas hay que: comunicarse de forma efectiva con el cliente para obtener los requisitos, comprender el problema a resolver, crear un modelo del problema real y, por ltimo, revisin de la especicacin. Todos estos pasos deben dejar un rastro que se pueda seguir en caso de problemas posteriores, por lo cual se debe empezar a guardar registro, documentar, ya desde el principio.
34
Fase de requisitos
3.1.1. Introduccin
Un requisito es una capacidad que el sistema debe tener porque el cliente lo ha pedido explcita o implcitamente, lgicamente, la determinacin del conjunto de requisitos es el primer paso a dar en la construccin de una aplicacin. Existen dos subtareas en la obtencin de los requisitos antes de pasar a la fase de diseo: Anlisis: El problema a resolver es la comprensin del problema del cliente y que caractersticas debe tener el producto. Especicacin: Traducir los requisitos a un documento con un formato concreto que pueda servir de entrada a la fase siguiente. La obtencin de requisitos es difcil por varias razones: La naturaleza de los requisitos es cambiante. Surgen nuevos requisitos en cualquier momento. El cliente puede no tenerlos claros. Pueden existir malos entendidos debidos a:
Falta de conocimientos por parte del equipo desarrollador sobre el problema. Falta de conocimientos tcnicos (informticos) por parte del cliente para expresarse con claridad.
Anlisis La clave es la comunicacin con el cliente. Para facilitar esta comunicacin se han desarrollado varias tcnicas: entrevistas, prototipos, desarrollo conjunto de aplicaciones (Joint Application Development, JAD), planicacin conjunta de requisitos (Joint Requirements Planning, JRP) y casos de uso del UML. Especicacin Lo que se consigue aqu es un documento que especica todos los requisitos, este documento tiene que tener estas propiedades: Completitud: Estn todos los requisitos. Concisin: Es importante no hacer una novela, hay que contar lo que hay pero pensando que quien se lea el documento cobra por horas. Legibilidad: Es similar al punto anterior, pero el sentido de este es la claridad. Consistencia: No existen contradicciones internas. Facilidades de prueba: De algn modo se debe poder comprobar cada uno de los requisitos. Facilidades de cambio: Es bastante probable que el documento cambie a lo largo del ciclo de vida. Facilidades de seguimiento: Debe ser posible comprobar si se van cumpliendo los objetivos. Factibilidad: Los objetivos denidos deben ser conseguibles a un coste razonable. Tipos de requisitos Requisitos funcionales: Dicen qu debe hacer el sistema, en el sentido de servicios proporcionados al usuario. Requisitos no funcionales: Hablan de caractersticas del sistema, como pueda ser la abilidad, mantenibilidad, sistema operativo, plataforma hardware, etc.
35
Entrevistas Todo el mundo pasa por una entrevista en algn momento de su vida ya sea para un proceso de seleccin de personal, un examen de oposicin o incluso una conversacin con el jefe se podra considerar como una entrevista. Aunque tambin existan otras tcnicas, esta siempre la tendremos, al menos al inicio del proyecto. Una entrevista tiene tres fases: Preparacin, Desarrollo y Anlisis. Preparacin Hay cuatro cuestiones que se han de tener en cuenta:
1. Documentacin: El entrevistador se informa acerca del tema a tratar. Puede hacerlo de varias formas: Estudiar la bibliografa sobre el tema. Estudiar documentos sobre proyectos similares. Inmersin dentro de la organizacin para la que se desarrolla el proyecto 2. Personal: Se seleccionan las personas a las que se va a entrevistar. Directivos: Dan una imagen de alto nivel de la empresa. Puede ser til para determinar la estructura arquitectnica de la aplicacin. Empleados: Dan una imagen de un grano ms no. Son los que pueden concretar las funciones a implementar. 3. Determinar el objetivo de la entrevista. Previamente a la entrevista se pueden distribuir a los entrevistados cuestionarios sobre el tema a tratar y una introduccin. 4. Logstica: Temas prcticos acerca de como discurre la entrevista: lugar, hora, minimizar interrupciones, encontrar un momento en el que todos puedan ir, etc. Desarrollo Hay tres etapas [PV96]: 1. Apertura: El entrevistador se presenta e informa al entrevistado de cuales van a ser los puntos tratados en la entrevista. 2. Desarrollo: No debe durar ms de dos horas. El entrevistado debera hablar el 80 % del tiempo. Tcnicas utilizadas: Preguntas abiertas, tambin conocidas como de contexto libre. No se pueden contestar con Si o No. Por ejemplo: Cul es la lista de pasos para dar de baja un producto?. Ms tarde se pasa a preguntas ms concretas. Forma de expresarse: Se deben evitar los tecnicismos que el entrevistado pueda no conocer. Psicologa: El problema fundamental de las entrevistas es que se trata con personas en vez de con mquinas, por eso la comunicacin es de peor calidad. Hay que tener en cuenta las siguientes reglas entre muchas otras de la comunicacin no verbal.
No insinuar que el entrevistado debera saber algo que no sabe para que no se ponga a la defensiva. Tambin hay que dejar claro que los intereses del entrevistador son nicamente la adquisicin de requisitos, no hacer un examen de conocimientos, y por tanto las lagunas que pueda tener no trascendern a sus superiores. Lenguaje del cuerpo: Dicen los psiclogos que el 90 % de la comunicacin es no verbal. Se debe estar atento a los signos que puedan denotar inseguridad en algunos temas para preguntar a otras personas. Usar tcnicas para mantener la atencin del entrevistado.
3. Terminacin: Se hace un resumen de la informacin recogida (para validar que es correcta) y, de ser necesario, se cita para la siguiente entrevista. En cualquier caso se debe poder contactar de nuevo con el interesado, por ejemplo para aclarar algunos puntos. Se agradece al entrevistado que nos haya dedicado su tiempo. Anlisis Se trata de ver como utilizar los conocimientos adquiridos. Para ello las actividades son:
1. Burocracia, como por ejemplo, pasar a limpio la entrevista. 2. Asimilacin de la informacin: Se contrasta con otras entrevistas, bibliografa, etc. Se llega a conclusiones. 3. Evaluacin de la entrevista: Qu se quera conseguir y qu se ha conseguido? Para validar una vez ms la entrevista se puede mandar la documentacin generada al entrevistado. Desarrollo conjunto de aplicaciones (JAD) En el apartado anterior se vio una somera introduccin a una entrevista clsica desde el punto de vista de que existe un entrevistador y un entrevistado. Ahora se contempla un tipo de entrevista desarrollada por IBM que se apoya en la dinmica de grupos. Consiste en un conjunto de reuniones en un periodo de entre dos y cuatro das. Se basa en cuatro principios: 1. Dinmica de grupo.
36
Fase de requisitos
2. Uso de ayudas audiovisuales: Diagramas, transparencias, pizarras, etc. 3. Modo de trabajo sistemtico. 4. Filosofa de documentacin WYSIWYG (What You See Is What You Get). Existen dos tipos de sesiones JAD: JAD/Plan, para obtencin de requisitos y JAD/Design, para el diseo. Veremos el primero. Ventajas del JAD: 1. La informacin obtenida se puede contrastar in situ porque estn todos los interesados. En las entrevistas individuales este es un proceso lento. Adems en esta contrastacin participan tanto los usuarios como los desarrolladores, esto quiere decir que los requisitos que se obtienen son los correctos. 2. Los clientes se sienten involucrados en el proceso de desarrollo porque ellos mismos participan en la exploracin de los problemas que se plantean, con lo cual la resistencia al cambio ser menor. Inconvenientes: 1. Al ser un grupo de personas es difcil encontrar un hueco en la agenda de todos para estas reuniones. 2. Es una tcnica difcil. Participantes: Participan de ocho a doce usuarios a parte de los analistas. Hay seis tipos: 1. Jefe del JAD: Debe tener las caractersticas clsicas de una persona que dirige una reunin: Dotes de comunicacin y liderazgo. Son deseables tambin conocimientos de psicologa para por ejemplo conseguir que todo el mundo participe o evitar conictos, pero sobre todo, para dirigir la sesin a sus objetivos. 2. Analista: La funcin realizada es la de secretario de la sesin. Es la persona encargada de poner por escrito la informacin. No es una tarea tan trivial como parece, tiene que ser alguien que haya comprendido el tema y lo pueda expresar bien con las herramientas que se empleen. 3. Patrocinador: A efectos prcticos es el jefe de la empresa contratante porque es quien toma la decisin de seguir o no con el desarrollo. Debe informar de cuales son las necesidades que cubrir el producto. 4. Representantes de los usuarios: En el JAD/Plan son directivos porque proporcionan una visin global del sistema. En el JAD/Design son usuarios. 5. Desarrolladores: Son las personas que pueden informar de las dicultades de implementacin de ciertas caractersticas. 6. Especialistas: Son la autoridad a consultar sobre aspectos puntuales tanto por parte de los usuarios como por parte de los desarrolladores. Fases: 1. Adaptacin: El jefe del JAD es quien debe adaptar la sesin a las caractersticas propias del proyecto en curso. Para ello debe: Documentarse sobre la organizacin y el proyecto. Decidir cuestiones organizativas sobre las sesiones JAD: Nmero y duracin, lugar (mejor si es fuera de la empresa para evitar interrupciones), fechas, etc. Seleccionar a los participantes adecuados para cada reunin. 2. Sesin JAD: Est dividida en una serie de pasos: Presentacin: Al igual que en la entrevista individual, el jefe del JAD y el patrocinador ejecutivo se presentan. El patrocinador explica los motivos del proyecto. El jefe del JAD explica la mecnica de la reunin. Denicin de requisitos de alto nivel: Esto ya es parte del trabajo productivo. El jefe del JAD hace preguntas del tipo: Qu benecios se esperan del sistema? Cules son los recursos disponibles? Estos requisitos se van escribiendo en algn medio que permita que todo el mundo lo pueda ver, por ejemplo transparencias. Delimitar el mbito del sistema: Cuando se ha reunido un conjunto de requisitos lo sucientemente grande se les puede organizar y decidir el mbito del sistemaDocumentar temas abiertos: Si un tema queda sin resolver se debe documentar para otra sesin y asignar una persona responsable de su solucin. Concluir la sesin: El jefe del JAD hace un repaso de la informacin obtenida con los participantes. Es el momento de hacer correcciones o aadidos. 3. Organizacin de la documentacin: Se trata de producir un documento con la informacin recabada en la fase anterior. Hay tres partes que se siguen secuencialmente. Compilar la documentacin: La documentacin recogida se redacta en un documento normalizado. Revisar la documentacin: Se enva la documentacin a los participantes para que efecten correcciones. Validar la documentacin: El patrocinador ejecutivo da su aprobacin.
37
Planicacin conjunta de requisitos (JRP) Es un subconjunto de las sesiones JAD. Se caracterizan por estar dirigidas a la alta direccin y en consecuencia los productos resultantes son los requisitos de alto nivel o estratgicos. La planicacin de una sesin consiste en tres pasos: 1. Iniciacin: Se delimita el alcance del plan de sistemas de informacin, unidades organizativas afectadas y perles necesarios para la reunin. 2. Bsqueda: Se identican objetivos, situacin actual e informacin al respecto. 3. Lugar: Es importante que al igual que en la sesin JAD sea fuera de la organizacin para evitar interrupciones. La sala de reuniones debe ser adems confortable y equipada con el mobiliario adecuado. Las ayudas audiovisuales pueden ser pizarras, proyectores, etc. Se debe contar adems con ordenadores equipados con herramientas CASE, procesadores de texto, hojas de clculo y herramientas de prototipado. 4. Seleccionar a los participantes, cuyos perles son los siguientes: Jefe JRP: Debe tener las mismas aptitudes que en el caso del JAD. Patrocinador: El que respalda econmicamente el proyecto. Director del proyecto Consultores: Traduce los requisitos de usuario a informacin estructurada inteligible por los usuarios. Especialista en modelizacin: Elabora los modelos en la reunin. Usuarios de alto nivel: Denen los procesos organizativos y los sistemas de informacin afectados por el plan de sistemas de informacin y las prioridades de implantacin. 5. Redactar la agenda de asuntos a tratar. Esta agenda debe ser planicada asignando tiempos para cada cuestin. 6. Realizacin: Discurre igual que la sesin JAD. Brainstorming Este es otro tipo de entrevista de grupo. A diferencia del JAD que est fuertemente estructurada, el brainstorming (tormenta de ideas) se caracteriza precisamente por lo contrario, porque aunque existe un jefe del grupo, su funcin es meramente anecdtica. El objetivo es la generacin de ideas novedosas para la resolucin de un problema. Su utilizacin es adecuada al principio del proyecto, pues puede explorar un problema desde muchos puntos de vista. Ventajas del brainstorming: 1. Es fcil (la nica norma es que vale todo y no se puede criticar a nadie). 2. No est tan formalizado como el JAD. Inconvenientes: 1. No proporciona resultados con mucho nivel de detalle. 2. Es difcil reunir a todo el mundo. Fases del Brainstorming: 1. Preparacin Se selecciona a las personas involucradas, es decir: Jefe de la reunin, usuarios y desarrolladores. Se les convoca a una hora y en un lugar determinados. 2. Desarrollo: El jefe expone el problema a resolver, entonces cada persona expone sus ideas para la solucin. El jefe da la palabra a una persona u otra. Cuando se han generado sucientes ideas se termina la reunin. Normas a seguir: No se permite la crtica a ningn participante, diga lo que diga. Se promueven las ideas ms creativas aunque no sean factibles para estimular la creatividad del resto del grupo. Cuantas ms ideas salgan mejor. Los participantes pueden aadir cosas de su cosecha a las ideas de otros. 3. Consolidacin: Es como la fase de anlisis en la entrevista individual o la fase de organizacin de la documentacin de JAD. Se divide en tres partes Clasicar ideas para agruparlas o fusionarlas. Descartar ideas peregrinas o poco factibles. Priorizar ideas en funcin de su importancia. 4. Documentacin: El jefe pone por escrito la informacin que sale de la fase de consolidacin.
38
Fase de requisitos
Prototipos Un prototipo es una versin reducida de la aplicacin nal. Se puede construir con dos losofas[Som98]: 1. Prototipos de desarrollo rpido. Sirven para obtener y validar requisitos. Cuando han cumplido esta nalidad se desechan. 2. Prototipo inicial: Se desarrolla el sistema de un modo incremental partiendo de una versin inicial. El segundo caso se ha discutido ya en el captulo dedicado a ciclos de vida. El primer caso sigue el proceso indicado en la gura 3.1.
Requisitos iniciales
Desarrollo prototipo
Evaluacion
Especificacion
Desarrollo sistema
Validacion
Figura 3.1: Obtencin y validacin de requisitos a partir de prototipos [Som98] Un prototipo no es utilizable como sistema nal porque se ha desarrollado con la mxima rapidez y en consecuencia: 1. Los requisitos no funcionales tales como rendimiento, seguridad, etc no se implementan. 2. No hay documentacin. 3. El sistema ser caro de mantener porque el prototipo habr sufrido muchos cambios a lo largo del desarrollo y su estructura estar en mal estado. 4. La calidad del cdigo es mala. Para el desarrollo rpido de prototipos [Som98] existen tres tcnicas de desarrollo rpido de prototipos que se pueden usar conjuntamente: Lenguajes de alto nivel, Programacin de bases de datos y Componentes reutilizables. Lenguajes de alto nivel Son lenguajes de gran nivel de abstraccin que necesitan menos lneas de cdigo para hacer lo mismo que en un lenguaje de bajo nivel como C. Ejemplos de lenguajes de alto nivel son: Lisp, Smaltalk, Prolog y Java. Los lenguajes de alto nivel tienen el handicap de cargar mucho al sistema, razn por la cual no estn ms extendidas, aunque este motivo es cada vez menos importante dada la potencia de las mquinas actuales. Cuando se desarrolla un prototipo hay que responder algunas cuestiones para escoger el lenguaje, tales como cual es el mejor lenguaje para el dominio del problema que se est abordando. Por ejemplo, Lisp y Prolog pueden ser adecuados para inteligencia articial, Java si se necesita un software multiplataforma, etc. Se deben tener en cuenta asimismo factores tales como las facilidades suministradas por la herramienta para la construccin automatizada de interfaces de usuario, la experiencia que tiene con dichas herramientas el personal con el que contamos, si se puede conectar o forma parte de una herramienta CASE, etc. Programacin de bases de datos Una base de datos tiene un lenguaje de programacin que permite manipularla y utilidades. Un lenguaje de cuarta generacin es el lenguaje de programacin de la base de datos y su entorno. Son interesantes las herramientas que permiten acceder a la base de datos a travs de un navegador ya que as se puede acceder desde cualquier punto. Componentes reutilizables El principio en el que descansan los componentes es que es ms rpido usar software hecho que hacerlo, por ejemplo, los beans de Java. Si adems existe algn mecanismo que permita que esos componentes se comuniquen y se integren fcilmente, mejor. Problemas que se pueden presentar:
39
1. No existen todos los componentes necesarios para el prototipo que se quiere desarrollar, con lo que hay que desarrollarlos. 2. Los componentes existen, pero no son exactamente lo que se necesita y hay que adaptarlos. El desarrollo de prototipos con reutilizacin se puede hacer a dos niveles: 1. Nivel de aplicacin: Los sistemas que componen la aplicacin pueden ser compartidos por otras aplicaciones, por ejemplo se puede insertar un grco desarrollado con una aplicacin en otra. Las aplicaciones actan como si estuvieran conectadas entre si al estilo de las tuberas de Unix. 2. Nivel de componente: Los componentes estn integrados en un armazn estndar, como puede ser un lenguaje de desarrollo de componentes, por ejemplo: P YTHON o P ERL o algo ms general como CORBA, DCOM o JAVA B EANS. JAVA B EANS es un ejemplo de componentes reutilizables. Son un tipo de componentes escritos en Java, que generalmente tienen algn tipo de interfaz grca (Enterprise-JavaBeans sin embargo no es as, pues se ocupa ms de la lgica de la aplicacin). Sus caractersticas son: 1. Tienen un constructor predeterminado sin parmetros (es decir, un bean es una clase que cumple una serie de restricciones) 2. Son persistentes. La persistencia es la capacidad de un objeto de convertirse en un ujo de bytes para por ejemplo poder ser escrito en disco o recuperado del mismo. 3. No son nunca clases abstractas, es decir, siempre se pueden crear instancias de ellos. 4. Para escuchar un evento se usan estas dos funciones: public void addEventListenerType(EventListenerType evento) public void removeEventListenerType(EventListenerType evento) 5. La forma de dar valor o conocer el valor de una propiedad es con mtodos de la forma: getX() y setX(Propiedad propiedad). Si la propiedad es booleana en vez de getX() se usa isX(). Si la propiedad es indexada se utiliza: getX(int index) getX() que devuelve un array y los mtodos para asignar valor seran: setX(int index, propiedad) setX(Propiedad[] propiedad). Casos de uso Son una forma de especicar los requisitos de un sistema, un caso de uso consiste en una interaccin de algo externo al sistema y el sistema. Fueron introducidos por Jacobson en 1992. Aunque es una tcnica denida dentro del ambiente del anlisis orientado a objetos no tiene que ver con objetos, se podra utilizar perfectamente dentro del anlisis estructurado. Ms adelante veremos la tcnica de los casos de uso con el ejemplo gua (ver tema 2) de la aplicacin web. Un caso de uso: Describe la interaccin entre un actor externo al sistema y el sistema con texto en lenguaje natural. Representa los requisitos funcionales desde el punto de vista del usuario y por lo tanto produce un resultado observable por l. Es iniciado por un nico actor. Realiza una funcionalidad concreta. Los objetivos de los casos de uso son: Comprender la funcionalidad del sistema. Discutir con el usuario nuestra visin de esa funcionalidad. Identicar conceptos del sistema, clases, atributos y operaciones. Validar el anlisis y el modelo del diseo. Proporcionar informacin para las pruebas del sistema y de aceptacin. Existen dos tipos de elementos: 1. Actores: El actor puede ser tanto una persona como otro sistema que juega un rol en la interaccin con el mismo. Un mismo rol puede ser desempeado por varias personas y una persona puede desempear ms de un rol. Un usuario no es un actor, sino que asume un rol cuando interacta con el sistema y por lo tanto funciona como un tipo de actor. 2. Caso de uso: Es la interaccin que se quiere modelar. Pueden agruparse en paquetes y tener relaciones entre ellos. Identicar actores Un caso de uso se compone de actores y de interacciones de esos actores sobre el sistema. por lo tanto, lo primero es buscar actores. Teniendo en cuenta lo que es un actor, hay que encontrar la siguiente informacin: 1. Identicar los usuarios del sistema. Para ello tener en cuenta para quien se est diseando o con que personas va a interactuar de un modo directo (actores principales) y quienes va a tener un papel de supervisin o mantenimiento del sistema (actores secundarios). 2. Identicar los roles que juegan esos usuarios desde el punto de vista del sistema. Hay varios tipos, gestores de alto nivel, gente que introduce datos, etc. 3. Identicar otros sistemas con los cuales exista comunicacin. Estos sistemas tambin se consideran como actores dado que son algo externo a nuestro sistema.
40
Fase de requisitos
Identicar operaciones Una vez que se tienen los actores se trata de encontrar los casos de uso, como lo que tenemos en este momento son los actores, partimos de esta base para encontrar la informacin que falta. Los actores interactuaran con el sistema realizando un conjunto de tareas que tendremos que enumerar y manejarn informacin, tanto la que suministren al sistema como la que el sistema les suministre a ellos. Una vez que se dispone de los actores y de los casos de uso hay que encontrar las relaciones que hay entre ellos. Las relaciones que hay entre casos de uso son de dos tipos: Aquellas en las que uno extiende a otro: Son muy parecidos (comparten muchos pasos) pero tienen ligeras diferencias adaptadas a la forma particular en la que se realiza una tarea. Aquellas en las que uno usa a otro: En esta situacin un caso de uso es similar a una funcin o subrutina que es llamada por otro. Otra forma de hallar casos de uso es hacer una lista de eventos. Un evento es una ocurrencia a la que el sistema tiene que responder. No supone un dilogo como un caso de uso porque ocurre de un modo atmico. Los pasos a seguir en este caso son por un lado identicar todos los eventos a los que el sistema tiene que responder y luego relacionarlos con los actores adecuados. Una vez identicados estos casos de uso podemos sacar otros nuevos de varias formas: 1. Por variaciones respecto a casos de uso existentes si: Existen diferentes actores que puedan utilizar un mismo caso de uso pero con variaciones signicativas. Existen diferentes versiones del mismo caso de uso con variaciones signicativas. 2. Buscando el caso de uso opuesto a uno dado, por ejemplo, si tengo dando de alta cliente podra existir el caso de uso dando de baja cliente 3. Preguntarnos que tiene que ocurrir para que se cumplan las precondiciones de un caso de uso, por ejemplo, para hacer un pedido es necesario que el cliente entre con su password, con lo que tiene que existir un caso de uso para dar de alta. Dar detalle a los casos de uso descritos Esto que se ha descrito hasta ahora es la forma de construir un armazn de casos de uso, veamos como se pueden concretar un poco ms. Para cada caso de uso hay que: Describir la informacin de entrada y de salida. La descripcin detallada del caso de uso contiene:
Una descripcin textual de su objetivo. Variantes posibles para realizar este caso de uso. Diagramas de interaccin de detalle (de secuencia o colaboracin). Errores y excepciones posibles.
Relacionar el caso de uso con la interfaz de usuario que lo representa. Especicar el dilogo que da solucin al caso de uso. La descripcin de un caso de uso consta de los siguientes elementos: Descripcin del escenario. Suposiciones acerca del escenario. Condiciones previas para el caso de uso. Se expresa en una tabla con la secuencia de interacciones. La tabla puede tener una columna con el curso normal de acontecimientos y otra con posibles alternativas. Cada alternativa representa un error o excepcin y no tienen suciente entidad como para ser un caso de uso al que se llegue con una relacin extiende. 5. El nombre del caso de uso se pone en gerundio. 6. Se pone el actor responsable. 7. Resultado una vez terminado el caso de uso. Aplicacin al Ejemplo A del captulo 2: Veamos primero el caso de uso Dando de alta cliente del ejemplo A en el captulo 2 (ver tabla 3.1). El cliente se relaciona con el sistema con un navegador y lo hace desde su empresa. Una vez terminado, el cliente queda registrado en la base de datos de la empresa propietaria de la pgina web. En este ejemplo vemos un caso de uso que opcionalmente puede utilizar a otro (Recogiendo pedido de cliente). En el ejemplo de la aplicacin web los casos de uso podran ser: Dando de alta cliente, Dando de alta proveedor, Recogiendo pedido de cliente, Recogiendo oferta de proveedor, Actualizando contenido de la pgina, Solicitando reposicin y Seleccionando proveedor. El caso de uso seleccionando proveedor puede ser utilizado por otro caso de uso o por el actor Gerente. En la gura 3.2 tenemos la representacin de las relaciones entre casos de uso. 1. 2. 3. 4.
41
Caso de uso: Dando de alta cliente Actor: Cliente Curso normal Alternativas 1) El cliente comunica sus datos 2) El sistema asigna una 2.1) Si e cliente ya est contrasea al cliente registrado se informa del error 3) Si el cliente lo desea inicia por primera vez el caso de uso Recogiendo pedido de cliente Cuadro 3.1: Caso de uso para dar de alta un cliente en el ejemplo gua A
Dando de alta proveedor Dando de alta cliente Extiende Recogiendo pedido de cliente Seleccionando proveedor Actualizando contenidos
Usa
Proveedor
Cliente
Solicitando reposicion
Gestor
Figura 3.2: Casos de uso de la aplicacin web Actores y casos de uso abstractos Un caso de uso que slo exista para ser utilizado por otros casos de uso se dice que es abstracto. Como ese caso de uso no tiene un actor que lo utilice, nos inventamos un actor cticio (abstracto). En el ejemplo A del captulo 2 tenemos el caso de uso abstracto Seleccionando proveedor. El actor abstracto que creamos para este caso le damos el nombre: Seleccionador de proveedor. La manera en la que se relaciona este nuevo actor cticio con los de verdad es por medio de la herencia. Por lo tanto, todos los actores que utilicen un caso de uso que a su vez utiliza un caso de uso abstracto heredarn de l. En nuestro ejemplo, Proveedor hereda de Seleccionador de proveedor (ver gura 3.3). Un actor puede heredar de cualquier otro, tanto si es abstracto como si no, con lo que hereda tambin todas las funcionalidades a las que puede acceder.
Seleccionador de proveedor
Proveedor
Otras clasicaciones de los casos de uso Casos de uso esenciales y de implementacin Cuando se est en la fase inicial de recopilar todos los casos de uso, no se ponen en detalle, se indica su nombre y poco ms (casos de uso esenciales, o de trazo grueso). Cuando se va a implementar el
42
Fase de requisitos
caso de uso hay que denirlo con ms detalle (caso de uso de implementacin o trazo no). Casos de uso temporales Son aquellos iniciados no por un actor, sino por un evento de reloj. Se debe indicar el momento en el que esto ocurre, p. ej.: cada 500 milisegundos. La notacin consiste en poner el caso de uso en un valo con lnea de puntos o con smbolo de reloj. Casos de uso primarios y secundarios Los casos de uso secundarios son aquellos que existen por que son necesarios para que el sistema funcione pero que no son inherentes a su funcionalidad.
Denicin
La validacin de los requisitos comprueba que estos son correctos. Esta fase debe realizarse o de lo contrario se corre el riesgo de implementar una mala especicacin, con el costo que eso conlleva. Los parmetros a comprobar por la especicacin son [Som01]: 1. Validez: No basta con preguntar a un usuario, todos los potenciales usuarios pueden tener puntos de vista distintos y necesitar otros requisitos. 2. Consistencia: No debe haber contradicciones entre unos requisitos y otros. 3. Completitud: Deben estar todos los requisitos. Esto es imposible en un desarrollo iterativo, pero, al menos, deben estar disponibles todos los requisitos de la iteracin en curso. 4. Realismo: Se pueden implementar con la tecnologa actual. 5. Vericabilidad: Tiene que existir alguna forma de comprobar que cada requisito se cumple. El contenido de este apartado se completa con [Pre01, sec. 11.6].
43
Para cada producto se debe incluir: Nombre, Mnemnico, Nmero de versin y Fabricante. Para cada interfaz se debe desarrollar en: Motivos para interactuar con el producto y Denicin de la interfaz acerca de contenido de los mensajes y formatos. 3) Interfaces de comunicaciones. Por ejemplo protocolos de comunicaciones.
a b
c) Restricciones de memoria. d) Operaciones normales y especcas tales como: 1) Modos de operacin en la empresa del usuario. 2) Operaciones interactivas y no interactivas.
44
Fase de requisitos
3) Funciones de proceso de datos. 4) Operaciones de backup. e) Requisitos de instalacin. Se denen: 1) Requisitos para datos y secuencias de inicializacin especcos para un emplazamiento, misin o modo de operacin. 2) Caractersticas necesarias para adaptar el software a un entorno concreto. f ) Funciones del producto: Es un resumen de las funciones que proporciona el software. A veces esta lista puede copiarse de las especicaciones de alto nivel. Este resumen: Debe ser inteligible por el cliente con una sola lectura. Se pueden utilizar elementos textuales o grcos para mostrar las diferentes funciones y sus relaciones. No es un grco del diseo, slo muestra relaciones lgicas entre funciones y variables. g) Caractersticas del usuario: Es una lista de aptitudes y motivos para ellas. h) Restricciones: Descripcin general de limitaciones que afectarn a los desarrolladores tales como: Polticas, Limitaciones de hardware, Interfaces con otras aplicaciones, Operaciones en paralelo, etc. i) Suposiciones y dependencias: Lista de cada uno de los factores que afectan a los requisitos. No son restricciones de diseo pero un cambio en ellos afectara a los requisitos. j) Requisitos no implementados: Lista de requisitos que se dejan para futuras versiones. 3. Requisitos especcos: Es una lista de los requisitos a un nivel de detalle lo sucientemente no que permita a los desarrolladores disear un sistema que los satisfaga. Deben incluir las entradas, las salidas y las funciones suministradas en respuesta a entradas o para suministrar una salida. a) Interfaces externos: Es una lista detallada de todas las entradas y salidas. Complementa las descripciones de interfaz en el apartado 2b pero sin repetir informacin. b) Requisitos funcionales: Denen las acciones que el software tiene que tomar para producir las salidas a partir de las entradas. Ejemplos: Comprobar la correccin de la entrada. Secuencia correcta de las operaciones. Respuestas a situaciones anormales. Relaciones entre entradas y salidas. c) Requisitos de rendimiento: Especica requisitos estticos y dinmicos. Un requisito esttico de rendimiento puede ser el nmero de usuarios conectados simultneamente. Un requisito dinmico sera por ejemplo el nmero de transacciones por minuto. Estos requisitos deben especicarse en unidades medibles. d) Requisitos relativos a bases de datos: Requisitos lgicos que tiene que tener la informacin que se deje en la base de datos. Por ejemplo: Tipos de informacin, frecuencia de uso, etc. e) Restricciones de diseo: Restricciones de diseo que pueden ser impuestas por otros estndares, limitaciones de hardware, etc. 1) Conformidad con los estndares: Requisitos derivados de la existencia de estndares. Por ejemplo: Formato de los informes, nombre de los datos, procedimientos de contabilidad o auditoras. f ) Atributos del sistema software: Son propiedades del sistema. El hecho de tenerlas constituye un requisito. Los ms importantes son: Fiabilidad, Disponibilidad, Seguridad, Mantenibilidad y Portabilidad. g) Organizacin de los requisitos. Los requisitos deben ser presentados de un modo jerrquico para que la cantidad de informacin no sea abrumadora para el lector y se puedan comprender con facilidad. No existe un modo ptimo para presentarlos. Esto es una lista de posibles criterios. Modo del sistema: Es el modo de operacin. Algunos sistemas se comportan de un modo muy distinto en funcin del modo en el que estn. Clases de usuario: En funcin de a quin est dirigido interesar resaltar unas funciones u otras. Objetos: Se pueden agrupar las funciones en trminos de las suministradas por jerarquas de objetos. Caractersticas: Son servicios observables externamente que puede requerir una secuencia de entradas y salidas en un orden concreto. Estmulo: Algunos sistemas se describen mejor en trminos de estmulo - respuesta. Respuesta: Clasicacin en funcin del tipo de respuesta que da el sistema. Jerarqua funcional: Se trata de organizar el sistema en trminos de funciones con entradas y salidas similares. h) Comentarios adicionales.
45
4. Gestin del cambio del proceso: Seleccionar la gestin del proceso de cambio que deba ser usada para identicar, registrar, evaluar y actualizar el SRS para que reeje el alcance de los cambios en el proyecto y sus requisitos. 5. Aprobacin del documento: Identicar a las personas que deben dar su visto bueno. Deben constar su nombre, rma y fecha. 6. Informacin de soporte. Hace que este documento sea ms fcil de usar. Incluye ndice y apndices.
Tutorial posterior
Resumen de contenidos
En este captulo se ven las formas de captura de requisitos y de su representacin. La nalidad de esta fase es producir un documento que represente los requisitos y que sirva de entrada para la fase de diseo. El anlisis es la forma de conseguir los requisitos y la especicacin la forma de representarlos. Tcnicas de obtencin de requisitos 1. Entrevistas: Consiste en hablar con el cliente. Hay que tener sobre todo conocimientos de psicologa. 2. JAD: Consiste en un tipo de entrevista muy estructurada aplicable a grupos de personas. Cada persona juega un papel concreto y todo lo que se hace est reglamentado. 3. JRP: Es un subconjunto de JAD. 4. Brainstorming: Es un tipo de entrevista que se caracteriza precisamente por lo contrario que la anterior. No tiene ningn tipo de estructura. 5. Prototipos: Se trata de construir una mini-aplicacin inicial para claricar algunos puntos y luego tirarla o bien para usarla como base para aadir ms cosas. 6. Casos de uso: Es la tcnica denida en UML. No est necesariamente asociada a la programacin orientada a objetos, puede usarse tambin con metodologas ms clsicas. Anlisis de requisitos Caractersticas del anlisis antes de la existencia de tcnica alguna del tema: Monoltico, ambiguo, difcil de mantener y redundante. Posteriormente (aos 70 y 80) surge el anlisis estructurado moderno que es grco y soluciona algunos de los problemas anteriores. Su objetivo es modelar por separado los datos, procesos y el control usando como nexo comn el diccionario de datos. Tcnicas de representacin de requisitos 1. Diagramas de ujo de datos: Se describen los elementos de los que consta, lo que es el diagrama de contexto y heursticas para desarrollarlo. 2. Diagramas de ujo de control: Es similar a los DFD. 3. Diagramas de estados: Son un tipo de modelizacin matemtica usada tambin en diseo de circuitos, compiladores, etc. 4. Modelo Entidad / Relacin: Usado para representar los datos y la forma en la que se relacionan entre ellos. 5. Diccionario de datos: Se puede denir como el pegamento que mantiene unido a todo lo anterior. Es una descripcin detallada de los datos. Anlisis orientado a objetos Es la otra forma de ver el problema. Se representa el mundo en funcin sobre todo de los datos, caractersticas e interrelaciones entre ellos en vez de en funcin de los algoritmos o funciones. Propiedades de un sistema orientado a objetos: Abstraccin, Encapsulamiento, Modularidad, Jerarqua, Polimorsmo, Persistencia. Conceptos importantes: Clase, Objeto y Atributos. Sesin CRC: Es una simulacin hecha por personas del funcionamiento dinmico de un sistema orientado a objetos. Se basa en que cada persona representa una clase y su interaccin con las dems. Cada clase tiene escritas sus propiedades en una tarjeta. Identicacin de clases, atributos y relaciones entre clases. Renamiento del modelo: Consiste en otro conjunto de heursticas para eliminar elementos sobrantes o identicar otros nuevos en el modelo anterior.
46
Fase de requisitos
Validacin de requisitos Es la comprobacin de que todo el trabajo anterior se ha realizado bien. Bases de documentacin Es el documento que resulta de todo lo anterior pero orientado al cliente, es decir, a las obligaciones contradas con l, la idea no consiste en usar este documento como entrada para otra fase. Se ha tomado la plantilla de documento denida por el estndar IEEE 830.
Extensin de conocimientos
Sobre la obtencin, anlisis y representacin de requisitos tambin se puede estudiar en [Som98, cap. 2 y 3], [Haw98, caps. 5 al 10] [Sch92, caps. 3 y 4]. Sobre el anlisis orientado a objetos tambin se puede ver [RBP 96]. El libro [GW89] completo es especco sobre requisitos. O UTREACH P ROJECT T OOL es una plataforma de libre distribucin para gestin de proyectos a travs de Web muy orientada al manejo de los requisitos y la comunicacin entre desarrolladores y clientes. Ver en http://outreach.sourceforge.net/ (hay enlace a una demo interactiva).
Captulo 4
Fase de diseo
Tutorial Previo
Introduccin
Una vez que se han identicado los requisitos para el problema, es necesario idear y componer la forma de la solucin para el problema. El diseo es la fase en la que se estudia el problema, se identican las caractersticas que tendra una solucin y se analiza a su vez cada una de esas caractersticas. En la fase de diseo es ms efectivo utilizar patrones y modelos conocidos para ir resolviendo partes del problema, es decir modularizar el problema y proyectarlo en mdulos en la solucin. Aunque, el proceso de diseo es en gran medida ad hoc, es decir, no est tan formalizado como las otras fases y por tanto se apoya bastante en la experiencia e intuicin de los diseadores. En este tema se van a proponer las formas de diseo convencionales, una comparacin de los ms utilizados y la validacin o comprobacin de su adecuacin, junto con la parte correspondiente de documentacin de todo el proceso. Principalmente hay dos tipos de diseo: Diseo funcional: Parte de una vista de alto nivel que se va renando progresivamente. En este caso la atencin se focaliza en la forma de procesar los datos. Diseo orientado a objetos: Se entiende el sistema como un conjunto de objetos. Para distinguirlos se identican los tipos de datos, sus operaciones y atributos asociados. Los objetos se comunican entre ellos envindose mensajes. La validacin del diseo comprueba si se siguen las especicaciones del diseo y se cumplen requisitos de calidad. La mejor forma de redactar la documentacin consiste en seguir una plantilla de un documento estndar rellenando varias secciones.
48
Fase de diseo
Validacin y conrmacin del diseo. Este apartado se incluye en esta misma gua. Documentacin: especicacin del diseo. Este apartado est contenido en [Pre97, sec. 13.8].
49
Tutorial posterior
Resumen de contenidos
El diseo es la fase que sigue a la especicacin y el anlisis. Consiste en aadir a la representacin anterior los detalle necesarios para pasar a la implementacin. Al igual que en el captulo anterior, existen 2 tipos de diseo: orientado a objetos y estructurado. Tambin existen diferentes formas de realizarlo en funcin de caractersticas del sistema (tiempo real, distribuido, etc.) Diseo arquitectnico: Independientemente del tipo de diseo (estructurado u orientado a objetos) hay una primera fase que consiste en la divisin del sistema en subsistemas. Los apartados a tener en cuenta son: 1. Descomposicin estructural: Descomposicin en subsistemas 2. Intercambio de informacin entre subsistemas: Hay dos opciones: con una base de datos central o por medio de mensajes. 3. Forma de realizar el control: Centralizado o basado en eventos. Sistemas distribuidos: Son un tipo especial de sistema que merece un tratamiento aparte debido a que parece ser la tendencia actual. Hay varios tipos de arquitecturas: 1. Arquitectura cliente-servidor: Puede ser de dos o de tres capas. 2. CORBA: Es un sistema de objetos distribuidos. Utiliza IDL como lenguaje de denicin de interfaces. {ATENCIN: CORBA No se trata en este curso, ver en [Pre01, cap. 28]} Diseo estructurado Es el anlisis clsico. Esta basado en el ujo de los datos a travs del sistema. En una primera fase se hace un diseo preliminar y posteriormente un diseo detallado. Objetivos: Comprensin, mantenibilidad, facilidad de pruebas e integracin con otras aplicaciones. Principios: Abstraccin, modularizacin, independencia, arquitectura, ocultamiento de la informacin y renamiento paso a paso. Sus elementos importantes son: 1. 2. 3. 4. 5. Mdulo: El rbol de mdulos dene las relaciones entre los mismos. Tabla de interfaz: Especica como son las comunicaciones inter-mdulos. Cohesin: Un mdulo es cohesivo si sus tareas se realizan con independencia del sistema pero relacionadas entre s. Acoplamiento: Media de la complejidad de las interfaces de un mdulo. Diagrama de estructuras: Es un mtodo de descomposicin funcional donde el bloque bsico es el mdulo. Es un rbol o diagrama jerrquico. Se denen en l: bucles, alternativas y subrutinas. 6. Heursticas de diseo: Consejos a aplicar. 7. Tipos de ujos de informacin: Flujos de transformacin y de transaccin.
Diseo detallado: Es una especicacin con mayor nivel de detalle de las estructuras de datos y algoritmos. Otras notaciones que forman parte de metodologas pensadas en torno al diseo estructurado son: 1. Diagramas HIPO: Muestran entradas, salidas y funciones. Muestran lo que hace el sistema pero no el cmo. {ATENCIN: los diagramas HIPO No se tratan en este curso}
50
Fase de diseo
2. Diagramas de Warnier-Orr: Son una representacin jerrquica de los programas, sistemas y estructuras de datos. Puede representar iteraciones, secuencias y alternativas. 3. Diagramas de Jackson: Produce un programa a partir de su especicacin. Las entradas y salidas son secuenciales al igual que el proceso. Diseo orientado a objetos Como se ha dicho antes, es la otra forma de hacer el diseo. Se incluye tambin en este resumen el diseo arquitectnico por ser parte integrante de la metodologa, aunque lo dicho en el apartado anterior dedicado al tema es igualmente vlido. Hay dos partes: 1. Diseo del sistema = (Diseo arquitectnico) 2. Diseo de objetos = (Diseo detallado) Patrones: Consisten en la identicacin de problemas usuales en el anlisis, diseo, codicacin, etc e incluir una plantilla de solucin. Frameworks: Son otro mecanismo de reutilizacin pero un framework se puede componer de varios patrones. Generan aplicaciones para un dominio. Validacin y conrmacin del diseo Son un conjunto de actividades que garantizan que el producto se est construyendo de la forma adecuada. Se compone de la revisin, la vericacin y la validacin del diseo. Documentacin Se incluye una plantilla para redactar el documento correspondiente al igual que en la fase anterior.
Extensin de conocimientos
Los contenidos de este tema tambin pueden estudiarse en [Som98, cap. 4], [Haw98, caps. 11 al 14] [Sch92, caps. 5 al 8]. Se puede profundizar en el diseo orientado a objetos, por ejemplo, en los libros [RBP 96, Mey98, Boo94, Jac92, WBWW90]. En http://www.nist.gov/dads/ se puede encontrar una recopilacin en forma de diccionario (en ingls) de descripciones y enlaces sobre algoritmos, estructuras de datos y problemas. Se puede encontrar informacin sobre CORBA (Arquitectura comn de distribucin de objetos) en [Pre01, sec. 28.9.5] y tambin en un curso (muy completo) en la pgina web http://www.openresources.com/es/magazine/tutoriales/corba/, aparte, por supuesto, de la pgina propia de CORBA http://www.corba.org/.
Captulo 5
Fase de implementacin
Tutorial Previo
Introduccin
Una vez que se dispone de un diseo para la solucin del problema, incluso en una fase temprana o provisional del diseo, ya se puede comenzar a plasmar ese diseo en el cdigo que permita realizarlo o implementarlo. En esta fase el programador recibe las especicaciones del diseo y transforma esas especicaciones, que pueden estar en formatos mezclados formales, semiformales o manuales, en un programa o mdulo que las efecte. Esta tarea de modicacin puede estar semi-automatizada en algunos casos o realizarse de forma completamente manual. En cualquiera de los casos se requiere que esa transformacin se haga de manera sistemtica y coherente. Las particularidades propias de lenguajes de programacin concretos se estudian en otras asignaturas y por tanto no se incluirn en este tema. Lo que s se estudiarn son las tcnicas o estilos de codicacin formal. Durante la implementacin se escribe el cdigo de la aplicacin. Existen una serie de "vicios" en el estilo de codicacin que pueden hacer que el cdigo sea confuso para terceras personas y en consecuencia difcil de mantener; adems, algunas prcticas pueden inducir errores. Es especialmente recomendable para esta parte seguir las recomendaciones del PSP (Personal Software Process). Para realizar el trabajo este debe ser dividido en pequeos mdulos que se reparte entre individuos o pequeos grupos atendiendo a un grco de dependencias entre tareas y con la idea en mente de paralelizar tanto trabajo como sea posible. A medida que se van haciendo los mdulos hay que comprobar que cumplen con una cierta calidad, para ello existen varios tipos de pruebas. En este capitulo se estudia la necesidad de comprobar la ejecucin correcta del mdulo, por tanto interesan las pruebas que se hacen a nivel de mdulo, tambin llamadas pruebas unitarias. Adems de todo ello hay dos tipos de manuales importantes que hay que producir en esta etapa: el manual de usuario y el manual tcnico.
52
Fase de implementacin
Tcnicas de depuracin. El contenido de este apartado se encuentra en [Pre01, cap. 17] (o bien [Pre97, cap. 16] en la 4 a edicin). Documentacin del cdigo. El contenido se encuentra en esta gua.
Casos de uso Los casos de uso son una descripcin del funcionamiento de un sistema. No se les puede aplicar la ingeniera directa o inversa para generar cdigo o para obtener casos de uso a partir del cdigo como al resto de diagramas en UML, pero veremos un conjunto de instrucciones para averiguar cules son los casos de uso de un sistema a partir de su comportamiento (ingeniera inversa). Se identican los actores que interactan con el sistema. Se investiga la forma en la que el actor interacta con el sistema. Puede cambiar su estado o el de su entorno o responde a un evento. Se traza el ujo de eventos de un sistema relativos a cada actor. Primero se consideran los ujos principales y luego los alternativos. Identicar casos de uso que se puedan fusionar y los que tengan relaciones de uso o de extensin entre ellos. Se representan los actores y casos de uso identicados en un diagrama. Deniciones de clases Es el primer paso para implementar el diseo. En general, para convertir un diagrama de clases en su equivalente en un lenguaje, lo primero es identicar las reglas de correspondencia al lenguaje de programacin. Puede ocurrir que no exista una forma de hacer la correspondencia, por ejemplo, en Java no existe la herencia mltiple, con lo que, o bien se prohibe a los diseadores usarla, o bien se busca algn subterfugio para poder implementar esa caracterstica, lo que aadir complejidad. Los atributos y operaciones que se han denido en el diseo se tienen que denir dentro de la clase correspondiente como pblicos, privados o protegidos, aunque este aspecto es probable que se haya denido en el diseo. Hay que denir tambin su tipo. Denicin de clases en C++ Una ejemplo de clase en C++:
53
// Ninguna otra clase puede acceder a ellos. int x; // Variables privadas int y; protected: // Variables y mtodos protegidos. Solo la propia clase // y las que hereden de ella pueden acceder a ellos. public: // Variables y mtodos pblicos. Accesibles por todos. Punto() { ... } // constructor Punto(int x,int y) // otro constructor ~Punto() { ... } // destructor } No puede haber atributos o mtodos con el mismo nombre. Los atributos y mtodos de un tipo (privado, protegido o pblico) se declaran juntos en su bloque correspondiente. Existe un mtodo pblico sin valor de retorno llamado constructor que tiene el mismo nombre de la clase y debe ser denido obligatoriamente. Denicin de clases en Java Una clase en Java: class Punto { private int x; // Variables privadas private int y; public Punto(int x,int y);// Constructor public Punto(); // Otro constructor } Creacin y destruccin de objetos Un objeto es una instancia de una clase y cuando se crea una se reserva espacio de memoria. Cuando el objeto deja de existir, o bien se programa explcitamente la secuencia de acciones que hay que realizar, lo cual es una actividad propensa a errores, o bien existe un mecanismo automtico que va eliminando los objetos que no estn referenciados por ningn otro. Creacin y destruccin de objetos en C++ Los constructores son los mtodos que inicializan un objeto una vez que se ha reservado memoria para l. Puede haber varios que reciben diferente nmero y tipo de parmetros. La asignacin de memoria se puede hacer de tres formas: Preasignados en memoria global ja (static), en la pila (automatic) y en el cmulo o heap (dynamic). Ejemplo: Punto *p=new Punto(100,30); // Memoria dinmica Punto p(100,30); // Memoria de pila static int j; // Memoria global fija Puede existir un mtodo antagnico al constructor llamado destructor, tambin con el mismo nombre que el constructor pero precedido de ~ y que es invocado de forma automtica antes de liberar la memoria que ocupa el objeto. Creacin y destruccin de objetos en java Hay pocas diferencias respecto a C++; los constructores siguen las mismas reglas y para destruir un objeto se invoca un recolector de basura cuando no queda memoria para liberar la de los objetos que ya no estn referenciados por ningn otro objeto. Tambin se puede implementar un destructor utilizando la palabra finalize, que se invoca justo antes de ser destruido por el recolector de basura (garbage collector). Ejemplos: Un objeto se crea del siguiente modo: Punto p = new Punto(100,30); Un destructor en Java: protected void finalize() { System.out.println(Este objeto ser procesado por el garbage collector); }; Invocacin de mtodos Para llamar a un mtodo se indica al menos el nombre del objeto y el del mtodo, que puede tener parmetros o no.
54
Fase de implementacin
Punto *p1, p2; ... // Invocacin de los mtodos p1->DesplazarHorizontalmente(10); p2.DesplazarHorizontalmente(25); Existe un puntero this que hace referencia al propio objeto. Si se recibe un parmetro con el mismo nombre que una variable denida en el objeto, se puede acceder a la variable del objeto utilizando ese puntero this: void Punto::DesplazarHorizontalmente(int x) { this->x = this->x + x; } Invocacin de mtodos en Java La notacin en java es igual pero sin la versin con punteros.
p.DesplazarHorizontalmente(10); Uso de la herencia La herencia es esttica si se determina en el momento de la compilacin, como ocurre en la mayora de los lenguajes, es implcita si el comportamiento de un objeto depende de su clase y no se puede cambiar y es por grupos si las caractersticas de herencia se especican para una clase, no para objetos concretos. Herencia en C++ Una clase puede heredar de varias clases que se especican en la declaracin. La subclase se llama derivada. La forma de heredar puede ser privada, protegida o pblica. El resultado de esto es que los mtodos y variables de la clase antecesora se heredan con el tipo de acceso de menor grado, por ejemplo, una variable pblica que pertenece a una clase que se hereda de modo protected se convierte en protected. Ejemplo de la sintaxis: class Punto: public ObjetoGrafico { ... } Herencia en Java Est mucho ms limitada. Slo existe herencia simple, aunque una clase puede implementar mltiples interfaces y las interfaces pueden heredar de mltiples interfaces. Ejemplo: class Punto extends ObjetoGrafico { ... } Implementacin de asociaciones Existen dos formas: punteros y objetos de asociacin. Lo normal es que el lenguaje no tenga denida esta ltima opcin. Ejemplo: Supongamos que tenemos denido un objeto Recta, que se forma a partir de dos objetos Punto que dene el usuario pinchando en la pantalla, y queremos asociar los dos puntos a la recta. El objeto recibe los dos puntos en su constructor (ver gura 5.1).
Recta Consta de 1 2 Punto
En la implementacin del constructor se copian a los dos punteros de la clase las direcciones de los
class Recta { private: Punto *p1,*p2; public: Recta(Punto *p1,Punto *p2) {this->p1=p1; this->p2=p2; }; ... }
55
Implementacin en java El puntero est en el lado de la asociacin que necesita acceder a la otra clase, es decir, si es navegable en ambos sentidos estar en ambas clases: class Recta { Punto p1,p2; Recta(Punto p1,Punto p2) this->p1=p1; this->p2=p2; } ... } El problema ahora es: Qu se hace si se tiene una relacin con una cardinalidad indeterminada, o lo que es lo mismo, puede haber muchos objetos en el otro lado relacionados con una clase dada?. La respuesta es que si la cardinalidad es alta pero est acotada se puede implementar con un array de punteros. Si no est acotada se puede tener un conjunto de punteros en una clase contenedora que puede crecer de forma arbitraria.
Reusabilidad La ventaja de la reutilizacin es que la cantidad de cdigo se reduce por lo que la comprensin del mismo tambin es ms sencilla. Es ms sencillo reutilizar cdigo en lenguajes orientados a objetos debido a que los mdulos son ms cohesivos y menos acoplados. El inconveniente es que escribir cdigo reutilizable es ms difcil y siempre va a requerir un esfuerzo adicional. Existen dos tipos de reutilizacin: Dentro de un mismo proyecto pueden existir partes redundantes, se trata de descubrirlas y compartirlas por los mdulos que las usen. Reutilizar cdigo de un proyecto antiguo en proyectos nuevos. Es ms complicado que el punto anterior, requiere que el cdigo haya sido escrito siguiendo una pautas que ahora veremos. Reglas generales de estilo para escribir cdigo reutilizable: Construir mtodos cohesivos. Un mtodo es cohesivo si realiza una nica funcin o varias ntimamente relacionadas. En caso contrario hay que dividirlo. Mtodos pequeos. Un mtodo es grande si sobrepasa una o dos pginas, en cuyo caso habr que dividirlo, con lo que adems de hacerlo ms sencillo puede que uno de los trozos sea reutilizable. Mantener la congruencia de los mtodos. Un mtodo se dice que es congruente si tiene un nombre similar a mtodos similares, condiciones, orden de argumentos, valor proporcionado y condiciones de error. Separar la poltica de la implementacin. Los mtodos de poltica son los de alto nivel y toman decisiones de control. Son dependientes de la aplicacin, se entienden y se escriben fcilmente. Son los mdulos que deben comprobar el estado y los errores. Los mtodos de implementacin son los que hacen el trabajo sucio, es decir, son los que tienen denidos los algoritmos, pero no son los que toman la decisin de ejecutar o no esos algoritmos. Si encuentran un error durante la ejecucin deben dar un informe a los mdulos superiores, pero no deben tomar acciones por su cuenta, como son mtodos autocontenidos son fcilmente reutilizables. Proporcionar una cobertura uniforme. Consiste en redactar mtodos que sean capaces de tratar todas las combinaciones de las posibles entradas que se puedan dar, y no slo las actuales. Generalizar los mtodos. Es similar al punto anterior pero en referencia al modo de funcionamiento y al contexto. Cuando los valores estn vacos o sean extremos o estn un poco ms all del lmite. Evitar el acoplamiento. Por ejemplo, el que se da cuando se accede a objetos globales y hay que tener conocimiento de los mismos para poder utilizarlos. Evitar los modos. Una operacin con modos tiene una forma de funcionamiento segn el modo en el que est. Lo aconsejable es tener un mtodo distinto para cada modo. Herencia Otra forma de reutilizar es escribir cdigo de forma que se pueda heredar. Las reglas de estilo en este sentido son: Mtodos comunes: Se pone el cdigo comn en un mtodo al que invocan los diferentes mtodos. Si ese cdigo comn est en varias clases se pone en un mtodo de una clase antecesora. Factorizacin. Cuando tenemos dos mtodos muy parecidos de clases diferentes se puede utilizar otra aproximacin: El cdigo comn se pone en un mtodo distinto de una clase antecesora, y es ese mtodo el que, en funcin de la clase en la que estemos llama a un mtodo u otro. Es corriente utilizar la factorizacin con clases abstractas. En el siguiente ejemplo de C++, los mtodos A y C son comunes, pero el B es propio de cada clase:
56
Fase de implementacin
class Comun { public: A() { ... } C() { ... } virtual B() { ... } MetodoComun() { A(); B(); C(); } } class X:public Comun { B() { ... } } class Y:public Comun { B() { ... } } Delegacin. Si se tiene que ejecutar un mtodo en una clase A que ya est implementado en la clase B, heredar de B slo para poder utilizar su mtodo es un error, en vez de eso se delega enviando la operacin a B desde A. Cdigo externo encapsulado. Si se utiliza cdigo de otra aplicacin con una interfaz diferente, en vez de hacer llamadas directas a ese cdigo es mejor hacer un mtodo o una clase que se encargue de ello. De esta forma, si hay que hacer modicaciones, estas estarn ms localizadas. Extensibilidad Consiste en aadir nuevas funcionalidades al cdigo. Veamos un conjunto de normas a seguir para facilitarla. Encapsular las clases. Esto signica que slo una clase puede acceder a sus propios datos e implementacin. Ocultar las estructuras de datos. El motivo es que las estructuras de datos son propias de los algoritmos. Si se hacen pblicas ser ms difcil cambiar el algoritmo ms adelante. Ley de Demeter : Evitar recorrer mltiples enlaces o mtodos. Si a travs de las asociaciones un mtodo llega a una clase vecina, no deben utilizar los enlaces de sta para acceder a una tercera clase, ms bien debera utilizar un mtodo de su clase vecina para esta operacin, de esta forma no es necesario que el mtodo tenga conocimiento de todas las asociaciones del modelo, slo de las clases relacionadas con la propia. Evitar sentencias case basadas en el tipo de objeto. En su lugar se pueden utilizar mtodos. Solo se deben usar esas sentencias si van a tener en cuenta los atributos de cada objeto. Distinguir los mtodos pblicos de los privados. Se debe minimizar el nmero de mtodos pblicos para disminuir la complejidad de la interfaz y porque si se modican esto afectar a las clases que los utilicen, por eso deben ser diseados con ms cuidado. Los mtodos privados aaden modularidad, dependen de la implementacin de la clase y pueden modicarse sin que cause efectos secundarios fuera de la clase. Robustez Un mtodo es robusto si no falla incluso ante parmetros incorrectos. Directrices para construir programas robustos: Proteccin contra errores. Debe tenerse en cuenta que el usuario puede producir entradas incorrectas. El sistema debera dar un mensaje de error y no colgarse. El sistema operativo, el hardware u otra librera pueden contener errores tambin, para lo cual se deben instalar comprobaciones internas. Las comprobaciones de errores aumentan el tamao y la lentitud del cdigo. Las relativas al usuario deberan estar siempre, las dems pueden eliminarse en la versin nal que se entregue. Optimizar despus de que funcione el programa. Evitar los lmites predenidos. Es decir, utilizar memoria dinmica en vez de estructuras de datos de tamao jo. Esto da ms exibilidad (y algn que otro error). Disponer el programa para la depuracin y la monitorizacin del rendimiento. En funcin de las facilidades suministradas por la herramienta de programacin, tendremos que aadir sentencias de depuracin, que se ejecutan en funcin de una variable que indique el nivel de depuracin. Tambin es posible aadir cdigo que recoja estadsticas sobre por ejemplo el nmero de invocaciones a una funcin. Grandes sistemas No es lo mismo trabajar solo que en un grupo, hay que pensar en que son otras personas las que van a utilizar, depurar, modicar o mantener el cdigo. Las directrices que se indican son aplicables tambin para un proyecto unipersonal. No empezar a programar de forma prematura. Es decir, antes de empezar el proceso de implementacin hay otras cosas como la especicacin o el diseo.
57
Crear mtodos comprensibles. Un mtodo es comprensible si terceras personas pueden entender lo que hace. Hacer que los mtodos sean legibles. Esto signica:
Que los nombres de las variables sean signicativos (mejor no utilizar abreviaturas). Evitar un nivel de anidamiento excesivo. No utilizar una misma variable temporal para diferentes propsitos en lugares diferentes. Comprobar la ortografa de los nombres.
Utilizar los mismos nombres que en el modelo de objetos Seleccionar cuidadosamente los nombres. Deben ser descriptivos y no ambiguos para no llevar a confusin. No se debe asignar nombres iguales a mtodos semnticamente distintos. Para los mtodos se puede tomar como procedimiento de asignacin de nombres el formato nombre_objeto, por ejemplo, borrar_pantalla. Dos clases que tengan mtodos con el mismo nombre deberan tener un mismo ancestro y los mtodos la misma signatura, es decir, el mismo nmero y tipo de parmetros. Utilizar normas comunes de programacin. En referencia a cosas tales como la indentacin de prrafos, forma de hacer los comentarios, poner todos los nombres en minsculas, etc. Documentar las clases y mtodos. Deben existir comentarios en la cabecera de cada clase o mtodo para explicar su cometido, precondiciones y postcondiciones. As mismo debe haber aclaraciones dentro de cada mtodo acerca de los pasos seguidos en los algoritmos. En los apartados siguientes se presentan una serie de normas de estilo para lenguajes concretos.
58
Fase de implementacin
3. Las cabeceras que denen funciones o variables externas deben ser incluidas en los cheros que las denen para de esta forma hacer comprobacin de tipos y que las variables externas siempre sean consistentes con la denicin. 4. No se deben denir variables en un chero de cabecera. 5. No debera haber cheros de cabecera anidados. Si es as, se debe poner en el prlogo que cheros de cabecera son necesarios. 6. Para evitar incluir la misma cabecera ms de una vez se debe usar la siguiente estructura: #ifndef EJEMPLO_H #define EJEMPLO_H /* Cuerpo de EJEMPLO.H */ #endif Otros cheros El chero README debe tener una descripcin del proyecto completo. Puede tambin explicar detalles tcnicos acerca del Makele, una lista de cheros dependientes del hardware especco de la mquina, etc. Comentarios Cuando el cdigo y los datos se contradicen probablemente ambos estn mal - Norm Schryer 1. Los comentarios deben describir qu est pasando, cmo se est haciendo, qu signican los parmetros, qu variables globales se estn usando y cualquier restriccin o error. Los comentarios cortos (una lnea) son para expresar el qu. El cmo se escribe en unas cuantas lneas que preceden al algoritmo. 2. Los comentarios deben justicar el cdigo que parezca errneo o poco razonable. 3. Las descripciones de estructuras de datos o algoritmos deben hacerse en bloques de comentario de esta forma: /* * Comentario */ 4. Los comentarios dentro de una funcin deben estar correctamente indentados con el cdigo que comentan. Pueden usarse tanto comentarios de una lnea como de varias. Si el comentario es muy corto se puede poner seguido a una lnea de cdigo, y si aparecen varios comentarios de este tipo deben estar a la misma altura. Declaracin de variables 1. Las declaraciones globales se ponen en la primera columna. Las declaraciones externas de datos deben ir precedidas por la palabra extern. Los lmites de los arrays hay que repetirlos en la declaracin extern. 2. El * de la declaracin de punteros debe estar junto a la variable y no en el tipo. Mal: char* s,t,v; Bien: char *s, *t, *v; 3. Las declaraciones de cosas que no tengan que ver entre s deben hacerse por separado. 4. Las llaves para abrir { deben ir en la misma lnea que en los struct typedef y la llave para cerrar } en la lnea siguiente. Ejemplo: struct complejo { real a, b; }; 5. Las variables que deban tener un valor inicial se deben inicializar todas de forma explcita. 6. Cuando un chero es parte de un todo en vez de ser un programa autocontenido se debe utilizar la palabra static para hacer las funciones y las variables locales a los cheros. Una variable debe poder ser accedida desde otro chero slo cuando sea realmente muy necesario y se deber comentar. 7. Los tipos ms importantes deben ser remarcados usando typedef. 8. El tipo de retorno se debe declarar siempre. Declaracin de funciones Cada funcin debe llevar un prlogo que indique lo que hace la funcin y cmo usarla. Tambin es conveniente aclarar decisiones de diseo no triviales. Se debe poner un tipo de retorno para cada funcin. No usar el tipo int por defecto. Si hay que explicar ese tipo, se hace en el prlogo.
59
Los diez mandamientos para los programadores en C Estas son una serie de normas para no cometer (demasiados) errores. 1. Se debe utilizar alguna herramienta como lint 1 de vez en cuando. 2. Comprobar siempre si un puntero es NULL. 3. Siempre se debe hacer un casting de los argumentos de las funciones a los tipos esperados, incluso cuando creas que no es necesario. 4. Se debe declarar con mucho cuidado los tipos de retorno de las funciones en los cheros .h. 5. Comprobar que el tamao de las cadenas es lo sucientemente grande como para que quepa cualquier cosa (si se prueba una cadena con hola ten la seguridad que llegar el da en el que alguien escribir supercalifragilisticoespialidoso. 6. Si una funcin puede devolver un cdigo de error, lo comprobars cada vez que llames a esa funcin, aunque tripliques el tamao del cdigo. 7. Estudiars las libreras para asegurarte de no inventar nada que ya exista, as tu cdigo ser corto y legible. 8. Indentars (sangrars) correctamente tus programas para que su estructura sea clara. 9. Los identicadores externos debern ser nicos desde sus primeros seis caracteres. 10. Escribirs cdigo independiente del hardware de la mquina especca en la que programes, porque los das de esa mquina llegarn a su n antes que los de tu programa.
Dar siempre nombre de cheros que sean nicos en un contexto tan grande como sea posible. El nombre de un chero include de una clase debera ser: NombreClase + extensin. Respetar las maysculas y minsculas del nombre de la clase en el nombre del chero.
1 Utilidad para programadores en C en UNIX que permite detectar declaraciones no usadas, inconsistencias entre tipos, uso de variables antes de su denicin, cdigo no alcanzable, caminos de ejecucin sin retorno, etc
60
Fase de implementacin
Comentarios
Reglas:
Cada chero con cdigo fuente debe tener una introduccin con informacin sobre el contenido de ese mdulo. Todos los cheros deben tener copyright. Todos los comentarios se deben escribir en Espaol. Recomendaciones: Escribir un breve comentario antes de cada funcin. Es mejor usar // para los comentarios. Hay que tener en cuenta que los comentarios de los cheros include van dirigidos a los usuarios de las funciones o clases, y los de los cheros de implementacin a los que mantienen el cdigo. Ficheros include Reglas:
Todos los cheros include tienen que contar con algn medio que impida mltiples inclusiones de ese archivo. Los siguientes tipos de deniciones deben estar en cheros include separados:
Clases que se usan como clases base. Clases que se usan como variables miembro. Clases que aparecen como tipos de retorno o como tipos de argumento en prototipos de funciones o funciones miembro. Prototipos de funciones para funciones o funciones miembro usados en funciones inline miembro que estn denidas en el chero.
Las deniciones de clases a las que slo se accede va puntero (*) o referencia (&) no sern incluidas como include. Nunca especicar las rutas completas en las directivas #include. Cada chero de implementacin deber incluir:
Declaraciones de tipos y funciones usados en las funciones que se implementen en el chero. Declaraciones de variables y funciones miembro usados en las funciones que se implementen en el chero.
Recomendaciones: Usar la directiva #include nombre_de_fichero.hh para los include denidos por el usuario. Usar la directiva #include <nombre_de_fichero.hh> para los include de las libreras. Cada chero de implementacin debera declarar una constante con una variable de cadena que describa el chero, as, en un sistema UNIX el comando what podr ser usado para obtener informacin del chero. Nunca incluir otros cheros en un chero inline. Asignacin de nombres Un identicador consta de: Prejo, Nombre y Sujo. El prejo y el sujo son opcionales. El sujo suele ser utilizado por herramientas que generan cdigo. Reglas: El identicador de cada clase, tipo enumerado, funcin, constante o variable globales en una librera de clases debe empezar con un prejo que sea nico para cada librera. Los nombres de las variables, constantes y funciones deben empezar en minsculas. Los nombres de los tipos abstractos de datos, estructuras, typedef y tipos enumerados deben empezar en maysculas Los nombres que consistan en ms de una palabra, las palabras deben ir juntas y la inicial de cada palabra debe ir en maysculas. No usar identicadores que comienzan con _. Si un nombre comienza por mayscula aparece despus de un prejo. Si un nombre no empieza por mayscula estar separado de su prejo por _. Recomendaciones: No usar nombres que slo dieran en que una letra sea mayscula o minscula. Los nombres no deben incluir abreviaturas que no sean aceptadas por todo el mundo. Una variable visible en un trozo grande de cdigo debe tener un nombre largo. Los nombres de las variables deberan recordar para qu sirven. Se debe escribir el cdigo de forma que sea fcil cambiar los prejos de los identicadores globales. Encapsular en una clase: las variables y constantes globales, tipos enumerados y typedef.
61
Las partes de una clase de declaran en este orden: Pblico, protegido y privado. Este es adems el orden que interesa a la gente. La parte privada la va a leer cualquiera que use la clase, la parte protegida quien quiera heredar y la privada en general nadie. No se denen funciones miembro dentro de la denicin de la clase. Funciones Recomendaciones:
Dar siempre explcitamente el tipo de retorno de cada funcin. El primer parmetro de la funcin va en la misma lnea que el nombre y si todos los dems caben en esa lnea se ponen, en caso contrario se escribe uno por lnea. Escribir el tipo de retorno de cada funcin en una lnea aparte. Escribir el parntesis izquierdo despus del nombre de la funcin, es decir, que no haya un carcter en blanco. Ejemplo: int buscarLista(int intElementos, cadena *cadenaPunteroLista, cadena cadenaBuscada); Bloques Recomendacin: Los corchetes que delimitan el comienzo ({) o el nal (}) de un bloque deben ir en lneas aparte.
Sentencias de control de ujo Recomendacin: Todas las sentencias de control de ujo (if, else, while, for) deben ir seguidas de un bloque incluso aunque sea vaco. Ejemplo: for (char *c=charCadena; *c!=A && *c; c++) { } Punteros y referencias Recomendacin: Los operadores * y & deben estar conectados directamente con el tipo de la variable y no con la variable misma. Ntese que la recomendacin para el lenguaje C es justamente la contraria. Miscelnea Recomendacin: No usar espacios alrededor de . -> ni entre operadores u operandos unarios. Clases Derechos de acceso Regla: No especicar nunca un dato como pblico o protegido. Los motivos son que: Slo la propia clase podr manipular esa variable (encapsulacin). Cualquier funcin del programa podra cambiar ese valor provocando errores. Evitando que se modique externamente una variable, se evita tambin que quien modique esa variable deba tener en cuenta la implementacin de la clase. Funciones inline Una funcin inline es aquella cuyo cdigo compilado se sita donde se utiliza, de esta forma no se hace la llamada y se consigue ms eciencia. Recomendaciones: Las funciones de acceso deben ser inline. (Una funcin de acceso slo devuelve un valor de un dato miembro). Las funciones que slo llaman a otra funcin deben ser inline. Los constructores y destructores no deben ser inline. Funciones friend de la clase. Recomendacin: Las funciones amigas estn para proporcionar funciones adicionales que estn mejor fuera
Funciones miembro const Reglas: Una funcin miembro que no cambie las variables de instancia de un objeto se debe declarar const. Si el comportamiento de un objeto depende de datos externos al objeto, estos datos no deben ser modicados por funciones miembro const.
62
Fase de implementacin
Constructores y destructores
Reglas:
Una clase que use new para crear instancias gestionadas por la clase debe denir un constructor de copia. Excepciones: Si una clase tiene un rea de datos compartida no es necesario tener un constructor de copia, tan slo hay asegurarse de que no se destruya el rea mientras haya punteros que la referencien. Todas las clases que sean usadas como clase base y que tengan funciones virtuales deben denir un destructor virtual. No usar objetos globales en constructores y destructores. Operadores de asignacin Reglas:
Una clase que usa new para crear instancias gestionadas por la clase debe denir un operador de asignacin. Excepcin: Si los objetos de una clase tienen un rea de datos compartida no es necesario denir un operador de asignacin. Hay que asegurarse de que el rea de datos no se destruye mientras haya punteros que la referencien. Un operador de asignacin que hace una operacin destructiva debe protegerse de realizar esta accin en el objeto en el que est operando. Recomendacin: Un operador de asignacin debe devolver una referencia const al objeto que est siendo asignado. Sobrecarga de operadores Recomendaciones:
Usar la sobrecarga de operadores de un modo uniforme a lo largo de todo el programa. Cuando se dene un operador y tambin se usa la funcin opuesta es conveniente denir ambos (por ejemplo, == y !=). Tipos de retorno de las funciones miembro Reglas: Una funcin pblica miembro no debe devolver nunca una referencia no constante o un puntero a datos miembro. Una funcin pblica miembro nunca debe devolver una referencia no constante o punteros a datos fuera del objeto a menos que el objeto comparta datos con otros objetos. Herencia Recomendaciones: Si un objeto se compone de otros, no utilizar la herencia para reejar este tipo de relaciones. Dar acceso a las clases derivadas a los tipos de datos miembro con funciones protected de acceso. Clases plantillas Recomendaciones: Hay clases plantilla que no pueden ser creadas usando un tipo determinado por incompatibilidades con la implementacin de los mtodos. Como el compilador no detecta este tipo de cosas, hay que tener cuidado. Hay que tener cuidado con las deniciones mltiples de funciones sobrecargadas junto con la instanciacin de clases plantilla. Por ejemplo, si denimos una funcin con un tipo determinado y esa misma funcin la sobrecargamos con el tipo denido en la plantilla podramos tener dos funciones idnticas. Funciones Estas reglas son aplicables a las funciones miembro. Argumentos de las funciones Recomendaciones: Regla: No usar argumentos sin especicar (elipsis).
Evitar funciones con muchos argumentos. Si una funcin almacena un puntero a un objeto que es accedido a travs de un argumento, dejar que el argumento sea del tipo del puntero. Usar referencias constantes (const &) en vez de llamadas por valor a menos que se estn usando tipos de datos predenidos o punteros Sobrecarga de funciones Recomendacin: Cuando se sobrecargan funciones, todas las variaciones deben tener la misma semntica (son usadas para el mismo propsito). Argumentos formales en la declaracin. Regla: Los nombres de los argumentos de las funciones tienen que ser los mismos en la denicin y
63
Tipos de retorno y valores Reglas: Especicar siempre el tipo de retorno de una funcin explcitamente. Una funcin pblica nunca debe devolver una referencia o un puntero a una variable local. Funciones Inline Regla: No usar la directiva del preprocesador #define para obtener cdigo ms eciente. En lugar de eso usar funciones inline. Recomendacin: Usar funciones inline slo cuando sean realmente necesarias. Objetos temporales Recomendacin: Minimizar el nmero de objetos temporales que son creados como valores de retorno de funciones o como argumentos a funciones. General Recomendacin: Evitar funciones largas y complejas. Constantes Reglas: Las constantes deben ser denidas con const o enum. Nunca usando #dene En lugar de utilizar valores numricos en el cdigo usar valores simblicos. La excepcin seran los valores numricos comnmente utilizados y con signicado claro tales como 0, 1, true false. Variables Reglas: Las variables deben ser declaradas con el mnimo alcance posible. Cada variable debe ser declarada en una sentencia distinta. Se debe dar un valor a cada variable que sea declarada antes de usarla. Si es posible usar siempre la inicializacin en vez de la asignacin. Excepcin: Cuando se asigna a una variable el valor de una expresin complicada puede no ser necesario dar un valor inicial. Punteros y referencias Reglas: No comparar un puntero con NULL o asignar NULL a un puntero. Usar 0 en su lugar. Deben evitarse en la medida de lo posible los punteros a punteros. Usar typedef para simplicar la sintaxis cuando se declaren punteros a funciones. Conversiones de tipos Reglas: Nunca usar conversiones explcitas de tipo (cast). Excepciones:
Una conversin explcita es preferible a una conversin implcita. Para convertir un puntero a una clase base a un puntero a una clase derivada en un contenedor implementado en una clase contenedora heterognea. Se debe usar para convertir una corriente de bits a un objeto. Ocurre cuando se desempaqueta un mensaje en un buffer. Como regla general la generacin explcita de tipos es necesaria para leer la representacin externa de un objeto.
No escribir cdigo que dependa de funciones que usen conversiones implcitas de tipos. Nunca convertir punteros a objetos de una clase derivada a punteros a objetos de una clase base virtual. Excepcin: Si una clase base virtual contiene una funcin virtual pura que convierte un puntero a clase base virtual a un puntero a clase derivada, esto puede funcionar deniendo la funcin en la clase derivada. Esto signica que todas las clases derivadas deben ser conocidas en la clase base virtual. Nunca convertir un const a un no const.
64
Fase de implementacin
Estructuras de control de ujo Reglas: El cdigo que va despus de un case siempre debe terminar con un break. Las sentencias switch siempre deben tener una rama default para tratar casos inesperados. Nunca usar goto. Recomendaciones: La eleccin del tipo de bucle (for, while, do-while) debe depender de las siguientes consideraciones:
for: Se usa cuando hay una variable que se incrementa en una cantidad constante cada iteracin y la terminacin depende de una expresin constante. while: Cuando la condicin de terminacin se evala al principio de la iteracin. do-while: Si la condicin de terminacin es mejor evaluarla al nal.
Usar siempre unsigned para las variables que no pueden tener valores negativos. Usar lmites inferiores incluyentes (>=) y lmites superiores excluyentes (<). Evitar el uso de continue. Usar break para salir de un bucle si esto evita usar ags. No usar expresiones lgicas del tipo if(test) if(!test) cuando test es un puntero. Expresiones Recomendacin: Usar parntesis para claricar el orden de evaluacin de los operadores en las expresiones. Reserva de memoria Reglas: No usar malloc, realloc o free. Usar siempre corchetes ([ ]) cuando se liberan arrays con delete. Recomendaciones: Evitar usar datos globales. No liberar memoria, esperar que algn otro lo libere ms tarde. Asignar siempre un nuevo valor a un puntero que apunte a memoria liberada. Manejo de errores Recomendaciones: Asegurarse de que el manejo de fallos se ha hecho de tal modo que sea fcil convertirlo al manejo de excepciones. Comprobar los cdigos de fallo que se pueden recibir de funciones de librera incluso si esas funciones parecen seguras. Cdigo portable (multiplataforma) Abstracciones de datos Recomendacin: No usar directamente los tipos de datos predenidos en las declaraciones. Tamao de los tipos Recomendaciones: No suponer que un int y un long tienen el mismo tamao. No suponer que un int tiene 32 bits (quizs tiene slo 16). No suponer que un char es signed o unsigned. Poner siempre unsigned char si se usa ASCII de 8 bits. Conversiones de tipo Recomendaciones: Sea cuidadoso cuando haga conversiones de tipo desde uno corto a uno ms largo. No suponer que los punteros y los enteros tienen el mismo tamao. Usar conversiones explcitas de tipo para operaciones aritmticas usando valores con signo y sin signo.
65
Representacin de datos Recomendaciones: No suponer que se conoce como se representa en memoria la instancia de un objeto. No suponer que los tipos long, oat, double o long double van a comenzar en direcciones de memoria arbitrarias o ajustadas. Underow / Overow Recomendacin: No depender del funcionamiento del underow u overow de ningn modo.
Orden de ejecucin Recomendaciones: No suponer que los operandos de una expresin van a ser evaluados en un orden denido. No suponer que se conoce como han sido implementados los mecanismos de invocacin de una funcin. No asumir que un objeto es inicializado en un orden concreto en los constructores. No asumir que los objetos estticos son inicializados en ningn orden concreto. Objetos temporales Recomendacin: No escribir cdigo que dependa del tiempo de vida de un objeto temporal. Aritmtica de punteros Recomendaciones: Evitar usar las operaciones de desplazamiento en lugar de la aritmtica de punteros. Evitar la aritmtica de punteros.
Comentarios generales acerca de la clase o interfaz (comentarios de documentacin). Sentencia class o interface. Comentarios acerca de la implementacin de las clases (comentarios de implementacin). Variables estticas. Variables de instancia. Tanto las variables estticas como las de instancia se agrupan por su alcance, es decir, por este orden: pblicas, protegidas y privadas. Constructores. Mtodos. Se agrupan por su funcionalidad, no por su alcance.
Formato del texto S UN dene una serie de principios generales: El sangrado determinado para un bloque es de cuatro espacios. La longitud de las lneas de cdigo no debe ser superior a 80 caracteres. La longitud de las lneas de comentarios no debe ser superior a 70 caracteres. Normas para partir lneas demasiado grandes:
66
Fase de implementacin
Es preferible romper a alto nivel que a bajo nivel. Ejemplo: Bien: x = MetodoLargo (Par1, Par2, MetodoBajoNivel(Par31,Par32,Par33) Mal: x = MetodoLargo (Par1, Par2, MetodoBajoNivel(Par31, Par32,Par33)
Alinear la nueva lnea al comienzo de la anterior. Si esto pudiera causar confusin indentar (sangrar) con 8 espacios.
Comentarios En Java hay dos tipos de comentarios: De documentacin y de implementacin. Los comentarios de documentacin tienen la forma: /* ... */. Existe una herramienta llamada Javadoc que genera pginas HTML partiendo de este tipo de comentarios. El tema de los comentarios se trata en profundidad en el tercer apartado de este captulo. Declaraciones La recomendacin en este sentido es que no se declare ms de una variable por lnea, poniendo el nombre de la variable indentada y con un comentario. Deben estar localizadas al principio del bloque. Ejemplo: int numPuntos = 3; // Puntos que definen la figura Es conveniente inicializar las variables en el lugar en el que se declaran, a menos que esta inicializacin dependa de un clculo posterior. Las clases e interfaces deben usar la siguiente convencin: No se ponen espacios entre el nombre de los mtodos y el parntesis (. La llave de apertura { aparece en la misma lnea que el nombre del mtodo o clase. La llave de cierre de bloque } aparece en una lnea a parte del bloque, excepto cuando el bloque est vaco. Los mtodos se separan por una lnea en blanco. Ejemplo: class Punto extends ObjetoGrafico { int x; int y; Punto(a,b) { x=a; y=b; } Sentencias Debe haber una y slo una sentencia por lnea. Si hay un bloque de sentencias, ste debe ser sangrado con respecto a la sentencia que lo genera y debe estar entre llaves aunque slo tenga una sentencia para de este modo evitar errores cuando se aaden otras sentencias al bloque. Ejemplo: if (x>1) { y++; z=CalcularZ(x,y); } else { y=y-2; } Sentencias if-else, if else-if else. A los bloques denidos por estas sentencias se les aplican las normas denidas en puntos anteriores. Todos los bloques tienen el mismo nivel de sangrado. Bucles. Denen un bloque, que sigue las normas anteriores. Si el bucle es vaco (no tiene sentencias) no se abren ni se cierran llaves. Las sentencias return no deben usar parntesis.
67
Separaciones Incrementan la legibilidad del cdigo. La regla general es que cuanto ms importante sean las partes a separar tanto mayor debe ser la separacin. En este sentido el criterio es: Dos lneas: Entre clases e interfaces. Una lnea: Entre mtodos, declaraciones de variables y la primera instruccin, secciones lgicas diferentes de un mtodo y antes de un comentario de lnea o de bloque. Un carcter en blanco: Entre una palabra y un parntesis, despus de una coma, los operadores binarios menos el ., las expresiones del for, y entre un cast y la variable. Ejemplo: class X { ... } class Y extends X{ /* Declaraciones */ int x; int y; /** Desplaza la figura pixel a pixel horizontalmente */ int desplazarHorizontal(int h) { int inc; if (h<0) { h = -h; inc = -1; } else { inc = 1; } for (int i=0; i<h; i++) { x = x + inc; if (!Dibujar()) { return -1; } } return 0; } /** Desplaza la figura pixel a pixel verticalmente */ int desplazarVertical(int h) { ... Nombres Las normas de asignacin de nombres son: Paquetes: Nombres en minsculas separados por puntos. Ejemplo: java.io. Clases e interfaces: Dos o tres nombres con la primera letra en maysculas, sin usar abreviaturas. Ejemplo: ObjetoGrafico. Mtodos: La primera palabra debera ser un verbo y en minsculas. Ejemplo: desplazarHorizontal. Variables: Deben ser cortas (pueden ser de una letra) y signicativas. Si son varias palabras la primera en minscula. Ejemplos: i, j, k, unTriangulo. Constantes: Se escriben en maysculas y si son varias palabras van unidas por un carcter de subrayado. Ejemplo: MAX_LONG = 1000
68
Fase de implementacin
Tutorial posterior
Resumen de contenidos
La implementacin en teora se puede hacer de un modo totalmente automatizado a partir del diseo. Pero como esto en realidad no es as, se dan una serie de consejos para pasar el diseo a cdigo y como redactar este cdigo en un conjunto de lenguajes. Traduccin del diseo a la implementacin Ingeniera inversa: Consiste en averiguar las especicaciones de un sistema a partir de su funcionamiento. Se dan algunas heursticas para averiguar los casos de uso de un sistema: deniciones de clases, creacin y destruccin de objetos, invocacin de mtodos, herencia e implementacin de asociaciones.
69
Estilo de programacin orientado a objetos: Son un conjunto de consejos para conseguir: reusabilidad, reconocer la herencia, construir mtodos extensibles, cdigo robusto y trabajo en grupo ecaz. Normas para programadores en C: Son un conjunto de normas que cubren todos los apartados de la codicacin, tanto del tamao de los cheros, como de la eleccin de nombres (quizs lo ms importante), indentacin, etc. Normas para programadores en C++: Es una recopilacin similar para el lenguaje C++. Es ms extenso debido a la complejidad del lenguaje. Estas normas fueron compiladas por Ellmentel Telecomunications System Laboratories. Normas para programadores en Java: Es un resumen de las normas publicadas por S UN para el lenguaje Java. Tcnicas de depuracin Consiste en un conjunto de tcnicas para descubrir errores de codicacin. Incluye tambin un pequeo apartado para procesos concurrentes. Documentacin del cdigo Al igual que el diseo el anlisis producen documentos segn una plantilla estndar, el cdigo tiene que tener una documentacin interna. Se distinguen los tipos de comentarios (Directorio, prlogo y explicativo), donde se colocan, que informacin se incluye en cada uno de ellos y la forma de redaccin de la informacin.
Extensin de conocimientos
Tambin se puede estudiar parte de los contenidos de este tema en [Som98, caps. 5 y 6], [RBP 96], [BMP87, caps. 10 al 15] [Sch92, caps. 9 y 10]. En la pgina http://www.bagley.org/~doug/shootout/ se puede encontrar una recopilacin comparativa de ejemplos de implementacin (con fuentes) para varias funciones sencillas conocidas en muchos lenguajes de programacin diferentes. Como curiosidad anecdtica, otro tipo de pgina similar, aunque menos formal, es http://internet.ls-la.net/mirrors/ 99bottles/, que recopila el mismo programa ilustrativo simple en ms de 400 lenguajes distintos. Usando cualquier buscador estndar de Internet (como p. ej. http://google.com/) se pueden encontrar innidad de pginas relacionadas con cualquier lenguaje de programacin. La herramienta de anlisis y modelado de software A LMA http://www.memoire.com/ guillaume-desnoix/alma/, permite el anlisis de cdigo fuente orientado a objetos para su representacin y modelado o su transformacin a otros lenguajes. Esta herramienta, A LMA, es muy interesante y al estar implementada en Java es fcilmente instalable en cualquier entorno. Es interesante hacer notar que existen ciertos lenguajes de programacin que facilitan y promueven con su sintaxis una codicacin ms clara, ordenada, sistemtica y autodocumentada. Tal es el caso, por ejemplo, del lenguaje P YTHON que, normalmente, es interpretado pero que auto-precompila cada chero fuente ejecutado y reutiliza esa versin precompilada
70
Fase de implementacin
(preanalizada) si no cambia el fuente. Este lenguaje es muy til para hacer prototipos rpidos, pero tambin para aplicaciones ms grandes (por ejemplo vase Z OPE http://www.zope.org/). Prcticamente todas las implementaciones de P YTHON son de libre distribucin. Se puede ver ms informacin en las siguientes pginas Web: http://www.python.org/, http://www.freenetpages.co.uk/hp/alan.gauld/spanish/ es una traduccin al espaol del libro [Gau01] (un tutorial bsico), el libro de libre distribucin (licencia FDL) [DEM02] en http://www.ibiblio.org/obp/thinkCSpy/ o un libro en lnea http://diveintopython.org/es/ (traduccin al castellano de Dive into Python) con varias referencias a otra informacin en espaol, aparte de la pgina http://users.servicios.retecal.es/tjavier/python/Un_poco_de_Python.html sobre P YTHON de Toms Javier Robles Prado. Existe una tcnica de escribir la documentacin incluida dentro del cdigo fuente, conocida por el nombre en ingls de Literate Programming. Se puede encontrar extensa informacin sobre este tema en la FAQ especca: http://shelob.ce. ttu.edu/daves/lpfaq/faq.html. Adems hay algunas otras herramientas de ayuda en la generacin de referencias cruzadas y documentacin a partir del cdigo fuente, como por ejemplo C XREF http://www.gedanken.demon.co.uk/cxref/, la ms reciente y completa D OXYGEN http://www.doxygen.org/ (que se puede utilizar para otros lenguajes adems de C). Tambin es interesante ver el ejemplo de cmo un proyecto enorme, como es el kernel del sistema operativo Linux, tiene un sistema de referencias cruzadas: http://lxr.linux.no/.
Captulo 6
Fases de pruebas
Tutorial Previo
Introduccin
Este tema incluye en su denominacin Fases, en plural, debido a que realmente no hay una nica fase de pruebas, sino que las pruebas se van realizado en todas las dems fases. Las pruebas en este caso consisten en la comprobacin de que la salida obtenida en cada fase corresponde a las especicaciones de entrada correspondientes. Las pruebas consumen mucho tiempo, pero deben hacerse de un modo sistemtico para asegurar que el resultado cumple con el grado de calidad exigido (densidad de errores por KLDC, etc). Para medir esta calidad existen algunas mtricas. En esta parte del desarrollo se trata de encontrar errores, no slo de codicacin, sino tambin los relativos a la especicacin o el diseo, en este sentido se puede distinguir entre vericacin y validacin. La vericacin trata de comprobar si se est construyendo el producto correctamente, la validacin si es el producto correcto. Las pruebas que se van haciendo durante el ciclo de vida son: ingeniera del sistema (prueba del sistema), especicacin (prueba de validacin), diseo (prueba de integracin) y codicacin (prueba de unidad). Los tipos de pruebas tienen naturaleza diferente y en consecuencia, las tcnicas para cada una de ellas son diferentes; tambin se har un recorrido por cada una de ellas. Inevitablemente tambin hay que aadir la correspondiente documentacin de las pruebas realizadas.
72
Fases de pruebas
El contenido de este apartado se estudia en [Pre01, cap. 18] (o bien [Pre97, cap. 17] en la 4 a edicin).
Plan de pruebas
Son un conjunto de actividades que pretenden demostrar que el producto cumple con lo estipulado en el contrato. En el plan de pruebas se especica: 1. Identicador del plan: Debera ser una palabra que lo identicase con su alcance. Hay que incluir adems la versin y fecha. 2. Alcance: Tipo de prueba y propiedades del software a ser probado. 3. Items a probar: Conguracin a probar y condiciones que se deben satisfacer para ello. 4. Estrategia: Tcnica y herramientas a utilizar. Hay que indicar el nmero mnimo de casos de prueba a realizar y el grado de automatizacin tanto en la generacin de casos de prueba como en la ejecucin 5. Categorizacin de la conguracin: Condiciones bajo las cuales el plan debe ser: Suspendido: Si se presentan demasiados defectos o fallos. Repetido. Dado por terminado: Si se cumple el nmero mnimo de casos de prueba. 6. Documentacin: Segn el estndar IEEE 829-1983 hay que producir los siguientes documentos: Plan de prueba. Especicacin de los requerimientos para el diseo de los casos de prueba. Casos de prueba. Para cada uno se especican: Descripcin del procedimiento de prueba y Descripcin del tem a probar. Bitcora de pruebas. Informe de incidentes de prueba. Resumen de pruebas. 7. Procedimientos especiales: Grafo de las tareas necesarias para preparar y ejecutar las pruebas, as como habilidades necesarias. 8. Recursos: Pueden ser muy variados Caractersticas de hardware y software. Software necesario para hacer las pruebas. El software a ser probado. Conguracin del software de apoyo. Recursos humanos necesarios para el proceso. Requerimientos especiales: Actualizacin de licencias, espacio de ocina, tiempo de mquina, seguridad, etc. 9. Calendario: Hitos del proceso y grafo de dependencias. 10. Riesgos: Riesgos del plan, acciones para mitigarlos y planes de contingencia. 11. Responsables: Lista de personas y tareas asignadas. Existen cuatro tipos de pruebas que deben superarse Pruebas funcionales: Se realizan con los datos de entrada normales en el uso diario del sistema. Se comprueban sobre todo valores en los lmites de las variables y un poco ms all de los lmites. Tambin algunos valores especiales.
73
Pruebas de desempeo: Miden el rendimiento del sistema. Tiempos de respuesta, utilizacin de la memoria, trco generado en las comunicaciones, etc. Estas pruebas nos van a indicar donde estn los cuellos de botella del sistema. Pruebas de tensin: Se trata de sobrepasar los lmites de tolerancia del sistema de varias maneras: Conectar ms usuarios al sistema de los permitidos, si tiene que gestionar x mega-bits por segundo de una lnea de comunicaciones probar a aumentar ese ancho de banda, etc. Pruebas estructurales: Es un anlisis de la lgica interna de un programa.
Tutorial posterior
Resumen de contenidos
Vericacin y validacin La Vericacin y validacin se debe llevar a cabo a lo largo de todo el ciclo de vida. Vericacin es comprobar si el producto se est construyendo correctamente. Validacin es comprobar si estamos construyendo el producto que se nos ha pedido. Se abordan un conjunto de actividades y tareas para garantizar que se da una respuesta positiva a esas dos cuestiones. Uno de los puntos importantes es que la V&V debe ser independiente, es decir, no pueden hacerlo las mismas personas que estn construyendo el producto. Esta independencia se debe dar tanto en la gestin como en la nanciacin. Las tareas de V&V se contemplan desde tres perspectivas: sistemas genricos, sistemas expertos y software reutilizado, y en todas y cada una de las etapas del ciclo de vida. Tcnicas y mtodos de prueba Se trata en esta seccin de realizar las pruebas que den una garanta acerca del cdigo. Se introducen los conceptos de Error, Defecto y Fallo. Se denen un conjunto de principios que debe seguir toda prueba: Casos de prueba: Es un conjunto de entradas y salidas esperadas para ellas. Existen dos tipos de pruebas: de caja blanca y de caja negra. Existe un mtodo para crear casos de prueba para casos de uso. Pruebas de caja blanca. Tcnicas y medidas: grafo de ujo, complejidad ciclomtica y criterios de cobertura del grafo. Pruebas de caja negra. Tcnicas: particiones o clases de equivalencia y anlisis de valores lmite. Cleanroom: Es una metodologa de desarrollo pensada para producir software muy able. Revisiones sin ejecucin de cdigo: wallthroughs, inspecciones y auditoras, Calidad del software: El modelo de McCall tiene en cuenta una serie de factores de calidad. Documentacin de pruebas Como en los dems captulos este es el apartado donde se pone sobre el papel el trabajo realizado con un documento llamado plan de pruebas que es un documento que pretende demostrar que el producto cumple con lo estipulado en el contrato.
Ejercicios
1. Cules son los motivos por los que es conveniente que las actividades de V&V sean realizadas por un equipo independiente? 2. Cundo es mejor hacer la V&V, despus de construir el producto, antes, despus de una etapa concreta, ...? 3. En el programa de la gura 6.1: Represntelo en algn lenguaje de programacin. Halle los valores de a y b para cobertura de sentencias, decisiones, condiciones y decisin/condicin. Hay algn bucle? De qu tipo? Cuntas veces conviene ejecutarlo?
Extensin de conocimientos
Este tema tambin se puede consultar en [Som98, cap. 7] [BMP87, cap. 16 y 17]. Sobre calidad, pruebas y evaluacin del software, el NIST en Estados Unidos mantiene una pgina muy interesante: http: //hissa.nist.gov/.
74
Fases de pruebas
Write(msg)
Captulo 7
76
4. 5. 6. 7.
Derechos de propiedad y asuntos de licencia, sealamientos y acuerdos. Custodia de los programas del sistema, incluyendo planes de recuperacin y de contingencia por desastres. Instalacin. Las responsabilidades y obligaciones del personal encargado de informtica y de los usuarios nales deben denirse teniendo en cuenta lo siguiente: Acceso a las instalaciones del nuevo usuario. Disponibilidad y acceso a los sistemas y equipo del usuario nal. Disponibilidad de personal experto en las reas correspondientes. La necesidad de validacin como parte de cada instalacin debe ser determinada. Se debe validar el funcionamiento de todo el sistema despus de cada instalacin. Un procedimiento formal para aprobar cada instalacin al complementarla.
7.1.1. Aceptacin
Se dice que el proyecto ha nalizado cuando todas las actividades tcnicas han terminado o se ha agotado su plazo y se han facturado todos los conceptos al cliente (se hayan cobrado o no). Para evitar problemas en el momento en el que se pide que al cliente su aceptacin se debe redactar un documento que especique claramente los requisitos (lgicamente este documento se redacta en la fase de especicacin). Una vez que el cliente lo rma acepta que est conforme.
Valores positivos: Gastos superiores ->Menos benecio. Valores negativos: Ahorro ->Ms benecio.
Datos del proyecto: Nombre, duracin, etc. Resumen de las incidencias: Modicaciones, problemas, soluciones, sugerencias futuras, etc.
Lista de documentacin generada. Lista de productos generados. La documentacin es tambin un modo de preservar el conocimiento de la empresa independientemente de la permanencia de los empleados, asimismo detecta tendencias en el tipo de requisitos demandados, tipos de errores ms comunes, etc.
Valor relativo del esfuerzo propio. Valor relativo de las subcontrataciones. Valor relativo de los suministros.
2. Indicadores nancieros
77
Porcentaje de endeudamiento externo (ajeno): Es el montante que hay que afrontar en caso de impago. Es el porcentaje dedicado a subcontrataciones, suministros, viajes y gastos varios. Porcentaje de endeudamiento interno (propio): Son los gastos que en caso de impago la empresa debera satisfacerse a si misma. Es el complementario del anterior. Porcentaje de endeudamiento externo + Porcentaje de endeudamiento propio = 1. Valor actual neto del proyecto: n Fi (7.1) VA 1 r n i 1
Donde: Fi son los ujos monetarios del proyecto, n es el nmero de aos o meses desde que se produjo el ujo monetario y r es la inacin anual o mensual acumulada desde entonces. Tasa de rendimiento (R) interno del proyecto. R
Margen Tiempo
(7.2)
3. Indicadores de ocupacin laboral. Indican la cantidad de personal para cada proyecto, su tasa de ocupacin y como consecuencia si sobra o falta gente. Carga de trabajo: Nmero de horas para realizar un trabajo. Nmero de personas necesarias para el proyecto. ndice de ocupacin. 4. Indicadores de gestin. Hay cuatro indicadores de la calidad de este apartado: Plazo de ejecucin. Coste (global y por partidas) Margen. Contingencias.
78
79
9. Especicaciones del programa: Es otro documento dirigido a los desarrolladores. Son los requisitos, entorno operativo y caractersticas de diseo de cada uno de los ejecutables. 10. Especicaciones de la base de datos: Descripcin fsica y lgica de la base de datos junto a las especicaciones de seguridad y control. 11. Pruebas: Estrategia de pruebas del sistema, con especicaciones detalladas, descripciones y procedimientos, as como datos de prueba y criterios de evaluacin. 12. Manual de usuario: Describe las funciones del sistema. No debe usar jerga tcnica. 13. Manual de operacin: Descripcin del software y del entorno operativo para que pueda funcionar el software. 14. Manual de mantenimiento: Informacin acerca del cdigo fuente, sistemas y subsistemas para que el equipo de mantenimiento pueda entender el funcionamiento del programa y hacer cambios. 15. Plan de instalacin: Una vez que el sistema haya superado todas las pruebas est listo para ser instalado. Este manual describe como se realiza el proceso en diferentes entornos. 16. Anlisis de la prueba e informe de evaluacin de seguridad: Son el resultado de las pruebas. Se muestran las fortalezas y debilidades del sistema. Debe incluir un informe de evaluacin de seguridad para certicar el sistema.
Es importante tener en cuenta a qu personas va dirigido el manual, no se redacta igual para un directivo, que probablemente est ms interesado en una visin general del sistema que no va a usar directamente que a un empleado de base que se dedica a introducir algunos datos o que un miembro administrativo que usar el sistema para por ejemplo sacar estadsticas de ventas. Como existen diferentes perles de utilizacin el manual de usuario deber reejar esto estructurndose en mdulos dirigidos a tipos diferentes de personas. Dentro de cada uno de los mdulos deberan existir procedimientos especcos para funcionalidades concretas. Un procedimiento sera una lista ordenada de acciones para conseguir algo. Las posibles bifurcaciones de cada procedimiento respecto al camino principal debern documentarse igualmente. Existen estndares de documentacin que especican el ndice del manual (y algunos como el de GNU incluso el formato, que debe ser T EXINFO para as poder ser traducido automticamente a otros formatos). En cualquier caso, el ndice deber contener los siguientes puntos: 1. Instalacin del producto. Se indicarn los requisitos, tanto software como hardware. 2. Conguraciones posibles, teniendo en cuenta los diferentes perles de usuario. 3. Si el manual tiene varios mdulos en funcin de los perles de usuario, para cada uno de ellos: Se indica un procedimiento para obtener cada funcionalidad. Debe indicarse la secuencia en la que se ejecutan las acciones y las posibles bifurcaciones. Cada procedimiento se entiende mucho mejor si tiene ejemplos.
80
Es deseable que exista un tutorial, ya sea en la aplicacin o en el manual. Si se manejan documentos de entrada y/o salida se dar si ha lugar una breve explicacin sobre su nombre, formato, origen, localizacin, usuarios que lo manejan y procesos de backup. 4. Manual de referencia: Es el documento que contiene toda la informacin en detalle. 5. Lista de errores con su signicado y posible solucin, el usuario no tendr que recurrir a esta parte del manual si esta informacin est disponible en la propia aplicacin. Esta parte puede estar en el manual de referencia. 6. Glosario de trminos. Procedimientos y tutoriales Formularios de entrada/salida: Especica las normas para rellenar los formularios de entrada/salida (si es que existen). Pantallas y mensajes: Contiene las instrucciones de operacin para los procesos on-line, incluyendo el ujo de pantalla para cada uno de ellos, los mensajes del sistema y las asignaciones de las teclas de funcin. Confeccionar un glosario, preferentemente on-line, con todos los mensajes de error que puede generar el sistema. Informes del sistema: Presenta el inventario, el ejemplo y la descripcin detallada de los informes del sistema, incluyendo su ordenamiento, cortes de control, frecuencia de emisin, nmero de copias y forma de distribucin. Dividirlos en categoras de acuerdo al nivel de los usuarios a quienes estn orientados. Procedimientos de control: Describe la estructura general de los controles del sistema y dene su relacin con los controles manuales. Incluye la descripcin de los mecanismos para efectuar controles cualitativos y cuantitativos sobre los datos que ingresan al sistema, los que se transeren entre los distintos programas y sobre la informacin de salida, asegurando su integridad y conabilidad. Procedimientos de usuario: Son los procedimientos requeridos para el uso del sistema. Deben quedar reejadas las responsabilidades de cada sector usuario, en cuanto al envo y/o carga de informacin (tiempos y oportunidad de proceso), como tambin sus responsabilidades en cuanto al control y aprobacin de las salidas del sistema. Procedimientos de reabastecimiento: Son los procedimientos requeridos para la provisin de los insumos para utilizar el sistema, como: formularios preimpresos, etiquetas, recargas para impresoras, diskettes, cintas, etc. Soporte a usuarios: Son los procedimientos disponibles para obtener ayuda sobre el uso del sistema. Deben quedar reejadas las opciones que tiene el usuario para solucionar una duda identicando el o los sectores responsables del servicio. Material de capacitacin: Inventario de cada una de las opciones disponibles para capacitacin, ya sea autoasistida o a travs de cursos, tutoriales, etc.
Objetivos Documentar en forma detallada las caractersticas de cada componente de la arquitectura tcnica del sistema. Servir como base para el mantenimiento futuro de los procesos y programas del sistema. Contenidos 1. Descripcin general del sistema Identicacin del sistema: Nombre y siglas que lo identican. Objetivos: Descripcin breve del objetivo general del nuevo sistema, incluyendo referencia a las funciones del negocio (planicacin, gestin, etc) qu cubre y cmo lo hace. Alcance: Diagrama de contexto que muestre la interaccin del sistema con el resto de los sistemas de la organizacin. Caractersticas generales. Descripcin breve de las siguientes especicaciones funcionales y/o tcnicas:
Enfoque de desarrollo (a medida, paquete de software, etc). Herramientas de desarrollo. Tipo de procesos. Tecnologa de implementacin (hardware, software, comunicaciones, etc).
81
Polticas relacionadas con su uso. Siguiendo las polticas, normas y estndares vigentes, se debern adjuntar:
Identicacin del responsable de los datos. Identicacin de informacin condencial y pblica para su tratamiento. Principales sectores usuarios. Perles de usuarios y esquema general de seguridad. Plan de contingencia que explique los mtodos de trabajo alternativos ante fallas. Plan de recuperacin que explique los procesos de recuperacin y reinicio ante los casos eventuales de destruccin o desastre.
Principales funciones: Narrativa breve que describa las principales funciones del sistema. Se podr acompaar de un esquema donde se identiquen las actividades del negocio cubiertas por el sistema y sus necesidades de informacin. Observaciones: Cualquier informacin que no haya sido especicada antes y que se considere de inters. 2. Arquitectura general del sistema Requisitos funcionales: Expresar los requisitos funcionales que debe satisfacer el sistema Eventos del sistema: Extraer del modelo de eventos una lista conteniendo todas aquellas funciones ejecutadas por los distintos usuarios que originan una entrada al sistema. Indicando: a) b) c) d) e) Nmero de evento. Descripcin. Origen de la informacin. Destino de la informacin. Flujo de datos.
Procesos del sistema: Contiene el inventario y la descripcin general de cada una de las opciones de la aplicacin, incluyendo imgenes de las pantallas utilizadas. Dilogo del sistema: Muestra la comunicacin entre las distintas pantallas de la aplicacin identicando las condiciones que provocan la navegacin entre las mismas. Modelo de procesadores: Muestra de manera grca los distintos dispositivos fsicos requeridos, la asignacin de tareas y la conectividad entre ellos. Esquema de mdulos:Esquema donde se visualice el sistema como un conjunto de bloques, cada uno de los cuales representa un mdulo o subsistema del mismo. 3. Especicaciones de los mdulos. Por cada mdulo deber tenerse la siguiente informacin: Nombre del mdulo. Descripcin detallada del mdulo y sus funciones. Diagrama general del mdulo. Flujo de pantallas (si corresponde) Lista de componentes que lo implementan. Lista de bases de datos. Lista de archivos y tablas que utiliza. Lista de las vistas lgicas de los datos. Lista de los informes que genera. 4. Especicaciones de los procesos Inventario general de procesos del sistema: Es una lista de todos los procesos, la cual contendr los siguientes datos: Nombre del proceso, Descripcin breve y Mdulo al que pertenece mdulos que incluye. Dejar documentado que para obtener informacin particular de cada proceso se deber relacionar este manual con el manual de operaciones. 5. Especicaciones de programacin: Para cada componente de programacin del sistema (dependiendo del lenguaje a utilizar: programa, subrutina, procedimiento o funcin), deber incluirse la siguiente informacin: Nombre del componente. Descripcin y objetivos. Diagrama general del componente. 6. Especicaciones de los datos
82
Modelo conceptual de datos: Permite visualizar las entidades de datos requeridas por el sistema y sus relaciones. Se debern adjuntar:
Diagrama general. Diagrama de las distintas vistas (si fuese necesario). Denicin de las entidades. Diccionario de datos.
Diseo lgico de base de datos: Documenta la base de datos segn la perspectiva de los desarrolladores de aplicaciones y los usuarios nales, sin preocuparse por su implementacin fsica en un DBMS (Database Management System) particular. Se debern adjuntar:
Diagrama de tablas y sus relaciones. Diagrama de las distintas vistas (si fuese necesario). Denicin de atributos y dominios.
Diseo fsico de base de datos: Contiene las deniciones detalladas de todos los archivos y/o bases de datos del sistema y cada uno de sus componentes (tablas, columnas, claves, ndices, integridad referencial, triggers, etc). Adjuntar la forma en que cada programa los accede y procesa sus datos, su localizacin fsica y la descripcin de su sistema de backup. Para aquellos que tengan proceso de mantenimiento independiente del sistema, se deber adjuntar la forma de acceso al men correspondiente y las instrucciones para su uso.
Tutorial posterior
Resumen de contenidos
Finalizacin del proyecto El objetivo llegados a este punto consiste en entregar el producto al cliente y ponerlo en condiciones de funcionar. La aceptacin ocurre cuando han terminado todas las actividades. Se adjunta una plantilla para el informe de cierre del proyecto. Los indicadores del proyecto son un conjunto de medidas para evaluar de un modo objetivo los resultados. Son de varios tipos: econmicos, nancieros, de ocupacin laboral y de gestin.
83
Planicacin de revisiones y organizacin del mantenimiento Se denen los 4 tipos de mantenimiento (perfectivo, correctivo, adaptativo y preventivo) y la problemtica asociada. Se dene el concepto de cdigo heredado (legacy code) y se da una descripcin de como se debe gestionar el mantenimiento. Se dene a su vez una plantilla de documento para esta tarea. El objetivo de la planicacin del mantenimiento es asignar recursos lo antes posible para que estn disponibles en su momento, para ello se dene un plan de mantenimiento. Las tcnicas de mantenimiento son: ingeniera inversa, identicacin de componentes funcionales, reestructuracin y reingeniera. Recopilacin y organizacin de la documentacin Se exponen los motivos para documentar, directrices genricas a seguir para la redaccin de un documento, una clasicacin de los documentos y una plantilla a seguir para los ms importantes. El tipo de documentos que se contemplan aqu son los dirigidos a usuarios o mantenedores. Se hace hincapi en el manual de usuario, el manual del sistema y el manual de mantenimiento.
Extensin de conocimientos
Los contenidos de este tema tambin se puede estudiar en [Som98, cap. 8], [Haw98, cap. 19] [Sch92, cap. 11].
84
Captulo 8
Metodologas de desarrollo
Tutorial Previo
Introduccin
Una vez que hemos visto las fases ms habituales del proceso de anlisis, diseo y mantenimiento del software, es necesario estudiar algunas formas de agrupar, organizar, secuenciar y distribuir temporalmente las tareas estudiadas, segn los detalles de diferentes metodologas. Una metodologa constituye, en denitiva, el manual o gua que realmente se pone en prctica al abordar la construccin de un sistema. Las metodologas de desarrollo puede decirse que consisten en poner orden en todo lo que se ha ido viendo hasta ahora, es decir, utilizan un ciclo de vida determinado y siguen las fases de especicacin, diseo, etc. de un modo concreto; algunas incluso estn apoyadas por herramientas hechas a medida (por ejemplo el mtodo Rational). El tipo de metodologas que se van a ver estn orientadas a objetos que son del tipo que demanda el mercado actualmente y adems dan buenos resultados. Se estudia en primer lugar el Proceso Unicado de Rational por su amplia difusin y consideracin de metodologa tradicional. A continuacin se presenta una metodologa alternativa muy reciente, llamada Extreme Programming, que tiene caractersticas muy interesantes. A continuacin se presenta la metodologa de planicacin, desarrollo y mantenimiento de sistemas de informacin del Ministerio de las Administraciones Pblicas denominada Mtrica (versin 3). Finalmente se hace una aproximacin hacia nuevos enfoques de desarrollo de software surgidos a raz del movimiento del Software Libre.
85
86
Metodologas de desarrollo
8.2.1. Introduccin
Toda esta seccin es un resumen de los 11 primeros captulos del libro [JBR00c]. El Proceso Unicado de Rational es una metodologa de desarrollo de software orientada a objetos creada por Rational Software Corporation. Los creadores de la metodologa son los mismos que los del UML: Ivar Jacobson, Grady Booch y James Rumbaugh, que respectivamente eran autores de las metodologas: Process Objectory, el mtodo Booch y la metodologa OMT. Como toda metodologa de desarrollo software su nalidad es convertir las especicaciones que da el cliente en un sistema software. Las caractersticas que tiene el R.U.P. son: 1. 2. 3. 4. 5. Est basado en componentes. Estos componentes a su vez estn conectados entre s a travs de interfaces. Utiliza el UML como notacin bsica. Dirigido por casos de uso. Centrado en la arquitectura. Ciclo de vida iterativo e incremental.
El proceso unicado est dirigido por casos de uso Los casos de uso se vieron en el apartado dedicado a UML. Lo importante acerca de ellos son dos cosas: 1. Representan los requisitos funcionales del sistema desde el punto de vista del usuario. 2. Se usan como gua para el proceso de diseo, implementacin y pruebas, por eso se dice que el RUP est dirigido por casos de uso. El proceso unicado es iterativo e incremental El proyecto se divide en una serie de partes o mini-proyectos. Cada uno de esos mini-proyectos va a ser una iteracin. En cada iteracin se trata: un conjunto de casos de uso y los riesgos ms importantes. La vida del proceso unicado El proceso unicado consiste en una serie de ciclos. Al nal de cada ciclo se tiene una versin del producto. Las fases de cada ciclo son: Inicio, Elaboracin, Construccin y Transicin. Cada fase termina con un hito (ver gura 8.1), que se determina por la disponibilidad de un conjunto de artefactos (modelos o documentos desarrollados hasta cierto punto). 1. Inicio: Se describe el producto nal. Se responde a las preguntas: Cules son las principales funciones del sistema para sus usuarios ms importantes?. La respuesta est en el modelo de casos de uso simplicado. Cmo podra ser la arquitectura del sistema?
87
Version 2
Version n Ciclo n
. . .
Elaboracion
Construccion
Transicion
. . .
. . .
. . .
. . .
. . .
Iter. n
Figura 8.1: La vida del proceso unicado Cul es el plan del proyecto y cunto costar desarrollar el producto? 2. Elaboracin: Se especican en detalle la mayora de los casos de uso y se disea la arquitectura del sistema. La arquitectura se especica en forma de vistas de todos los modelos del sistema y todas ellas especican el sistema entero. 3. Construccin: Se construye el producto. Se utilizan la mayor parte de los recursos. Al nalizar se cubren todos los casos de uso. La pregunta es: Cubre el producto las necesidades de los usuarios como para hacer una primera entrega? 4. Transicin: El producto existe en versin Beta. Unos pocos usuarios experimentados prueban el producto. Tipos de defectos: a) Los que tienen importancia como para justicar una versin incremental (versin delta) b) Los que se pueden corregir en la siguiente versin. A su vez, cada fase puede tener varias iteraciones, cada una con cinco ujos de trabajo: Requisitos, Anlisis, Diseo, Implementacin y Prueba. El producto El producto terminado debe incluir ms cosas que el cdigo ejecutable: Requisitos, casos de uso, especicaciones no funcionales y casos de prueba. Para llevar a cabo un ciclo se necesitan todas las representaciones del producto software: 1. Modelo de casos de uso. 2. Modelo de anlisis para: a) Renar los casos de uso b) Establecer la asignacin inicial de funcionalidad del sistema a un conjunto de objetos que proporcionan el comportamiento. 3. Modelo de diseo, que dene: a) Estructura esttica del sistema en la forma de subsistemas, clases e interfaces. b) Casos de uso reejados como colaboraciones.
88
Metodologas de desarrollo
4. Modelo de implementacin, que incluye: a) Componentes (que representan al cdigo fuente). b) Correspondencia de las clases con los componentes. 5. Modelo de despliegue, que dene: a) Nodos fsicos (ordenadores). b) La correspondencia de los componentes con esos nodos. 6. Modelo de prueba, que describe los casos de prueba que denen los casos de uso. 7. Una representacin de la arquitectura.
Es una abstraccin semnticamente cerrada del sistema, es decir, para poder interpretarlo no se necesita informacin de otros modelos. Siempre identica al sistema que est modelando. El sistema est formado a parte de sus modelos por las inter-relaciones que se establecen entre estos.
4. Proceso: Un proceso es una plantilla que sirve para hacer proyectos igual que de una clase se derivan instancias. Las actividades relacionadas conforman ujos de trabajo, en UML se representan como estereotipos de colaboracin en el cual los trabajadores y los artefactos son los participantes. El proceso unicado se adapta en funcin de las necesidades del proyecto segn factores: organizativos, de dominio, del ciclo de vida y tcnicos. Las herramientas: El RUP est soportado por herramientas CASE. Es mejor esto al proceso manual para evitar trabajo repetitivo. La herramienta escogida deber dar soporte a todo el ciclo de vida y usar UML. Las herramientas son importantes porque inuyen en el proceso, el cual a su vez dirige a las herramientas.
89
variantes, muchas de ellas pueden ser recogidas en un nico caso de uso. Durante el anlisis y el diseo el modelo de casos de uso se transforma en un modelo de diseo a travs de un modelo de anlisis. Motivacin de los casos de uso: 1. Proporcionan un medio sistemtico de capturar requisitos funcionales centrndose en el valor aadido para el usuario. 2. Dirigen el proceso de desarrollo porque el anlisis, diseo y prueba se planican en trminos de casos de uso. 3. Para idear la arquitectura (cada iteracin implementa un conjunto de casos de uso proporcionando un incremento).
Para integrar todas estas necesidades primero se hace un diseo de alto nivel para la arquitectura, a modo de arquitectura de capas (una capa es una parte bien denida de un sistema a partir de paquetes o subsistemas). Despus formamos la arquitectura en un par de construcciones (Versin ejecutable del sistema o de una parte del mismo). Todo esto dentro de la primera iteracin. Al principio se trabaja con las partes generales de la aplicacin y requisitos generales no funcionales. En esta primera pasada se trata de tener una visin general. Segunda construccin: Se trabaja con requisitos especcos a base de escoger unos cuantos casos de uso relevantes. Se implementan subsistemas a travs de una serie de iteraciones. Al nal de debera conseguir una arquitectura estable. Con una arquitectura estable se implementan los casos de uso que quedan para proporcionar toda la funcionalidad.
90
Metodologas de desarrollo
2. La arquitectura se establece en la fase de elaboracin y eso permite cambiarla si se considera necesario en una etapa temprana del desarrollo, por tanto con pocos costes. En el ciclo de vida en cascada esto se descubre ms tarde. 3. Gestin de requisitos cambiantes: Gracias a que se hace una integracin continua los usuarios disponen desde las primeras iteraciones de versiones ejecutables que permiten un cambio de impresiones en este sentido. 4. Fallos: Al igual que en los puntos anteriores, la ventaja de este ciclo de vida es que los fallos se van descubriendo a medida que se implementan nuevas funcionalidades; esto signica que no hay una avalancha de problemas al nal. 5. Aprendizaje: Con un par de iteraciones es suciente para que todo el mundo comprenda los diferentes ujos de trabajo. Gestin de riesgos Un riesgo es cualquier cosa que pone en peligro el xito del proyecto. Las iteraciones se organizan para reducir riesgos. Tipos de riesgos: 1. Tcnicos: a) Relacionados con nuevas tecnologas: Distribuir procesos en muchos nodos Tcnicas an incompletas como reconocimiento de lenguaje natural. b) Relativos a la arquitectura. Una arquitectura robusta se adapta a los cambios y muestra donde encajan los componentes reutilizables. c) Identicar los requisitos correctos. d) Mal rendimiento. 2. No tcnicos: La direccin es responsable de ellos. Tratamiento de los riesgos Para cada riesgo hay cuatro alternativas, a saber: Evitarlo: Replanicando o cambiando los requisitos. Limitarlo: Que solo afecte a una parte del proyecto. Atenuarlo: Mediante pruebas se aisla y se aprende sobre l. Controlarlo: Si no se puede evitar se disea un plan de contingencia. Iteraciones Cuando una iteracin termina se analiza para ver si han aparecido nuevos requisitos. Se examinan tambin los riesgos que quedan. Las pruebas de regresin comprueban que no se han introducido errores sobre partes anteriores a las de la iteracin en curso. La planicacin de cada iteracin solo se puede hacer en detalle para la prxima iteracin a la actual y con menos detalle para las siguientes. Secuenciacin: Los casos de uso establecen una meta y la arquitectura un patrn. Con esto en mente se planica la secuencia de iteraciones. Las primeras se centran en los requisitos, problemas y riesgos y las siguientes en la visin externa. Es posible que las iteraciones se solapen un poco en el tiempo. El orden de las iteraciones es el que permita que las decisiones importantes se tomen antes. El conjunto de modelos que representa al sistema en un momento dado se llama lnea base. En la fase de elaboracin se identican los casos de uso que tienen un impacto sobre la arquitectura y se representan como colaboraciones. De esta forma se construye la lnea base. El resultado de una iteracin es un incremento, y consiste en la diferencia entre dos lneas base sucesivas. Cada fase termina con un hito, el desarrollo iterativo supone un cambio de actitud: Es necesario dejar de valorar tanto las lineas de cdigo y valorar ms la reduccin de riesgos y la lnea base.
91
a) Modelado del dominio: Describir los objetos importantes del contexto como objetos del dominio (clases) y enlazarlos. Se modela en UML. Estos objetos se pueden educir gracias a reuniones con expertos del dominio. Los productos son: Un glosario de trminos y los objetos. Tipos de objetos: Objetos del negocio (p. ej: pedidos, cuentas, contratos), Objetos del mundo real y Sucesos. El glosario y los objetos se usarn al descubrir casos de uso y describir la interfaz de usuario y para sugerir clases internas del sistema en desarrollo. b) Modelado del negocio: Describir los objetos para comprenderlos. No es exclusivo de los negocios, es una forma de llamar a este tipo de modelado. Est soportado en UML por el modelo de casos de uso y el modelo de objetos (modelo interno). Lo que hace es describir los procesos en trminos de casos de uso y actores del negocio. Se desarrolla en dos pasos: 1) Se crea un modelo de casos de uso que identique a los actores. 2) Se desarrolla un modelo de objetos del negocio que realiza los casos de uso anteriores compuesto por trabajadores, entidades del negocio y unidades de trabajo. Bsqueda de casos de uso a partir de un modelo del negocio: Un actor es un trabajador o cliente del negocio. Cada trabajador cumple un papel en cada caso de uso. Despus se buscan los casos de uso de los actores del sistema. 3. Capturar requisitos funcionales: Se hace con casos de uso. Aparte de esto hay que especicar como ser la interfaz de usuario. 4. Capturar requisitos no funcionales. Por ejemplo: Requisito de interfaz: Especica como se relaciona con un elemento externo. Requisito fsico: Caractersticas como forma, tamao, peso, etc. Restriccin de diseo: Extensibilidad, mantenibilidad o reutilizacin. Restriccin de implementacin: Normas de codicacin, lenguaje, etc. En la fase de inicio se capturan los casos de uso para delimitar el sistema y el alcance del proyecto. En la fase de elaboracin se capturan los requisitos para delimitar el esfuerzo. Al nalizar esta fase se deben haber capturado el 80 %.
Artefactos Veamos los artefactos utilizados en la captura de requisitos. 1. Modelo de casos de uso: Es un modelo con actores, casos de uso y relaciones entre ellos. Pueden agruparse en paquetes y se puede ver desde distintos puntos de vista. 2. Actor: Un actor es cualquier cosa externa al sistema, desde un usuario hasta otro sistema. El conjunto de actores delimitan todo lo externo. Puede jugar varios roles y para cada uno de ellos tendr un caso de uso. 3. Caso de uso: Cada uno es una especicacin, una secuencia de acciones que el sistema lleva a cabo para realizar una funcionalidad. Puede incluir diagramas de estados, diagramas de actividad, colaboraciones y diagramas de secuencia. Cada caso de uso tiene atributos. Una instancia de caso de uso es la ejecucin de un caso de uso, que estar desencadenada por un evento o por la instancia de un actor. El ujo de sucesos de un caso de uso especica cmo interacta el sistema con los actores. Consta de secuencias de acciones. 4. Descripcin de la arquitectura: Es una vista de los casos de uso signicativos para la arquitectura. Usada para decidir que casos de uso se implementan en cada iteracin. 5. Glosario: Conjunto de trminos comunes en el sistema. Sirve para evitar confusiones. Sale del modelo de negocio o del modelo del dominio. 6. Prototipo de interfaz de usuario: tiles para depurar los casos de uso.
Trabajadores Entendemos por trabajador como una persona real que desempea una funcin dentro del proyecto. Una misma persona puede ser varios trabajadores. Tipos de trabajadores: 1. Analista de sistemas: Modela los casos de uso, encuentra los actores y redacta el glosario. Tambin es la persona que se encarga de capturar los requisitos. 2. Especicador de casos de uso: Es un asistente del anterior. Realiza cada caso de uso en detalle trabajando con el usuario. 3. Diseador de interfaz de usuario: Se suelen usar prototipos, uno por cada actor. 4. Arquitecto
92
Metodologas de desarrollo
Flujo de trabajo Se representa mediante un diagrama (ver gura 8.2). El diagrama tiene calles, en la cabecera se sitan los actores y en las calles las actividades. Cuando un trabajador ejecuta una actividad crea y modica artefactos. Se representa el ujo lgico, pero las actividades reales no tienen porque ser secuenciales. Veamos las actividades una a una.
Analista de sistemas
Arquitecto
1. Encontrar actores y casos de uso: Se realiza por un equipo de analistas y usuarios. La actividad consta de cuatro pasos: a) Encontrar los actores. Hay dos estrategias para ello: Encontrar un usuario que represente al actor. Encontrar roles iguales y fusionarlos en un nico actor. b) Encontrar los casos de uso: Si se parte del modelo del negocio cada rol de cada trabajador se corresponder con un caso de uso. En otro caso se identican hablando con los usuarios. Por otra parte, los casos de uso se caracterizan por proporcionar algn servicio de utilidad al actor y es mejor que el actor sea una persona real. c) Describir brevemente cada caso de uso: Una vez identicados los casos de uso se les da una descripcin breve o con los pasos a seguir. d) Describir el modelo de casos de uso completo: Se trata de dar una visin general de los casos de uso. Se puede utilizar cualquier conjunto de diagramas que se consideren oportunos. 2. Priorizar casos de uso: Se trata de ver qu casos de uso se hacen en qu iteraciones, para ello hay que tener en cuenta consideraciones econmicas y en general no tcnicas. El resultado se pone en la vista del modelo de casos de uso. 3. Detallar un caso de uso. Para ello hay tres actividades a realizar: Estructuracin de la descripcin de casos de uso: Un caso de uso incluye estados y transiciones entre ellos y el grco resultante puede ser complicado. Se puede describir primero el camino bsico (el ms normal) de principio a n y luego el resto de caminos alternativos. La descripcin debe incluir: Estado inicial como precondicin, posibles estados nales como postcondicin, la primera accin a ejecutar, orden (si existe) numerada de la acciones, caminos de ejecucin no permitidos, descripcin de caminos alternativos, la interaccin con los actores, utilizacin de recursos y acciones ejecutadas. Formalizacin de la descripcin: Un caso de uso se puede representar como una mquina de estados y si es demasiado complejo se puede utilizar alguno de los diagramas de UML: diagramas de estados, de actividad o de interaccin. 4. Prototipar la interfaz de usuario: Se trata de crear una interfaz que permita la interaccin del usuario para poder realizar los casos de uso. Se hace en dos pasos: Crear el diseo lgico: Se identican todos los elementos de la interfaz con los que va a interactuar el usuario. Cada elemento puede jugar varios roles porque puede estar en varios casos de uso. Crear el diseo y prototipo fsico: Se identican los elementos necesarios y su conguracin. 5. Estructurar el modelo de casos de uso: La nalidad es extraer descripciones de funcionalidad de dos tipos:
93
Generales y compartidas: Se buscan funcionalidades de casos de uso compartidas. La reutilizacin en los casos de uso supone un tipo de herencia, porque es necesario que exista una instancia tanto del caso que reutiliza como del que es reutilizado Adicionales y opcionales: La relacin de extensin entre casos de uso consiste en que un caso de uso A aade una secuencia de acciones a un caso de uso B. La extensin se ejecuta en funcin de que se cumpla una condicin. Anlisis Durante el anlisis se estructura el conocimiento que se ha conseguido de los usuarios por clases y paquetes en vez de casos de uso, de modo que no contenga inconsistencias. El anlisis est pensado para dar la visin interna del sistema (en vez de la externa de los casos de uso) a los desarrolladores y por eso est descrito con su lenguaje. Es una primera aproximacin al diseo y dene realizaciones de casos de uso. El resultado del anlisis es el modelo de anlisis. Se debe hacer anlisis cuando: 1. 2. 3. 4. Se quiere planicar cada una de las iteraciones. Para dar una visin general del sistema. Si se tienen varias opciones de diseo, el anlisis da una visin unicadora de todas ellas. Se utiliza un sistema heredado complicado.
El modelo de anlisis describe los resultados del anlisis y mantiene la consistencia de este modelo durante el ciclo de vida. En las primeras iteraciones se hace nfasis en este modelo, ms adelante se deja de actualizar. Artefactos 1. Modelo del anlisis: Consiste en una jerarqua de paquetes, que son abstracciones de subsistemas o capas de diseo. Los paquetes contienen clases del anlisis y realizaciones de casos de uso. 2. Clase del anlisis: Es una abstraccin de una o varias clases y/o subsistemas del diseo del sistema. Se centra en los requisitos funcionales. Su comportamiento en vez de con interfaces se dene con responsabilidades, que son una descripcin textual. Estas clases tienen atributos del dominio del problema, que en el diseo pueden pasar a ser clases. Se pueden corresponder con tres estereotipos: de interfaz, de control o de entidad. 3. Realizacin de caso de uso-anlisis: Explica como se lleva a cabo un caso de uso. Utiliza para ello diagramas de clases, diagramas de interaccin y una descripcin textual del ujo de sucesos. 4. Paquete del anlisis: Incluye clases del anlisis, realizaciones de casos de uso y posiblemente otros paquetes de anlisis. Los paquetes deben tener cohesin fuerte y acoplamiento dbil. Cada paquete representa cosas distintas, reconocibles por los conocedores del dominio. 5. Paquete de servicio: Es un tipo de paquete de anlisis, pero indivisible. Un servicio es un paquete de funcionalidad que puede ser utilizado en varios casos de uso y los casos de uso funcionan utilizando varios servicios. Un paquete de servicio puede contener una o ms clases relacionadas funcionalmente. 6. Descripcin de la arquitectura: Es la vista del modelo de anlisis. Contiene la descomposicin del modelo y sus dependencias, las clases de entidad, de interfaz, de control y las de anlisis. Tambin las realizaciones de casos de uso. Trabajadores 1. Arquitecto: Es el responsable de la integridad del modelo de anlisis y de la descripcin de la arquitectura. Un modelo de anlisis es correcto si realiza la funcionalidad de los casos de uso. 2. Ingeniero de casos de uso: Es responsable de que cada caso de uso responda a la funcionalidad requerida, tanto en el anlisis como en el diseo. 3. Ingeniero de componentes: Comprueba que cada clase del anlisis cumpla los requisitos que se esperan de ella. Mantiene la integridad de los paquetes del anlisis. El ingeniero de componentes de un paquete lo es tambin de las clases del anlisis contenidas en l. Flujo de trabajo Diagrama del ujo de trabajo en el anlisis (ver gura 8.3) que muestra las actividades, los artefactos y los participantes. Veamos las actividades: 1. Anlisis de la arquitectura: Para esbozar la arquitectura se realizan tres tareas: a) Identicar los paquetes de anlisis. Una forma es asignar casos de uso a un paquete y realizar esa funcionalidad en el paquete. Si hay clases comunes entre diferentes paquetes se pueden sacar a otro paquete o fuera de cualquier paquete. Los paquetes de servicio se identican cuando el anlisis ya est avanzado. La forma de identicarlos es: Hay uno por cada servicio opcional. Por cada servicio que pueda hacerse opcional o por clases que estn relacionadas funcionalmente.
94
Metodologas de desarrollo
Arquitecto
Analisis de la arquitectura
Ingeniero de componentes
Analizar un paquete
Figura 8.3: Flujo de trabajo del anlisis b) Identicar clases de entidad obvias. Se trata de identicar las clases necesarias para esbozar la arquitectura y no ms. Las agregaciones y asociaciones entre clases del dominio pueden identicar asociaciones entre las clases de entidad. c) Identicacin de requisitos especiales comunes. Los requisitos especiales son los que aparecen durante el anlisis. 2. Analizar un caso de uso. Se analiza un caso de uso con tres nalidades: Identicacin de clases de anlisis. Descripcin de interacciones entre objetos del anlisis. Captura de requisitos especiales. 3. Analizar una clase. Los objetivos son: Identicar y mantener las responsabilidades de una clase del anlisis. Identicar y mantener los atributos y relaciones de la clase de anlisis. Capturar requisitos especiales sobre la realizacin de la clase de anlisis. 4. Analizar un paquete: Cada paquete debe realizar algunas clases del dominio o casos de uso, adems, se trata de que cada paquete sea tan independiente de los dems como sea posible y deben documentarse las dependencias entre paquetes para el mantenimiento. Las normas que se deben seguir con los paquetes respecto a cohesin y acoplamiento son las mismas que con los mdulos en la programacin estructurada, es deseable que el paquete sea cohesivo, es decir, que solo tenga clases relacionadas funcionalmente.
8.2.7. Diseo
La entrada del diseo es la salida de la fase anterior y la salida del diseo es un modelo directamente implementable. Debido a esta proximidad con la implementacin hay que comprender aspectos no funcionales como lenguajes de programacin, sistema operativo, etc. Tambin es necesario tener el sistema dividido en trozos manejables por equipos de trabajo. Los interfaces entre los diferentes subsistemas deberan estar claros. La implementacin debera seguir la misma estructura que el diseo y de esta forma se podra hacer un camino de ida y vuelta automatizado. Papel del diseo en el ciclo de vida Se realiza sobre todo en las fases de elaboracin y de construccin. Los artefactos son: 1. Modelo de diseo: Es un modelo de objetos que describe como los casos de uso inuyen en el sistema. Es tambin una abstraccin de la implementacin. Cada subsistema o clase del diseo representa una abstraccin con una correspondencia con la implementacin. Los casos de uso se realizan por clases de diseo, lo cual se representa por colaboraciones en el modelo del diseo. 2. Clase del diseo: Tiene una correspondencia directa con una clase en la implementacin. Se utilizan caractersticas del lenguaje de programacin para describirlas. 3. Realizacin de caso de uso-diseo: Es una colaboracin que describe como se realiza un caso de uso del diseo, el cual tiene una relacin directa con un caso de uso del anlisis. Se compone de: Descripcin textual del ujo de eventos, diagrama de clases de diseo, diagramas de interaccin y requisitos de implementacin. 4. Subsistema de diseo: Representa una parte del sistema. Debe tener alta cohesin y bajo acoplamiento. Consta de clases del diseo, realizaciones de casos de uso, interfaces y posiblemente otros subsistemas. Un subsistema de servicio se corresponde con un paquete de servicio del anlisis que ofrece sus servicios en trminos de interfaces y tiene en cuenta requisitos no funcionales.
95
5. Interfaz: Una interfaz separa la especicacin de la funcionalidad en trminos de sus implementaciones. Son importantes porque describen las interacciones entre subsistemas. 6. Vista de la arquitectura del modelo de diseo. Consta de los siguientes elementos: Descomposicin del modelo de diseo en subsistemas, interfaces e interdependencias. Clases importantes del diseo. Realizaciones de caso-de-uso-diseo importantes. 7. Modelo de despliegue: Describe como se reparte la funcionalidad entre los nodos fsicos. Tiene nodos, que son procesadores o recursos hardware, relaciones entre ellos que son los modos de comunicacin (intranet, bus, etc). Describe la conguracin de la red. La funcionalidad de un nodo depende de los componentes que estn en l. 8. Vista de la arquitectura del modelo de despliegue: Muestra los artefactos relevantes para la arquitectura, como la correspondencia entre los componentes y los nodos. Trabajadores 1. Arquitecto: Es responsable de la integridad y de la arquitectura de los modelos de diseo y de despliegue. Un modelo es correcto si realiza la funcionalidad descrita en los casos de uso y nada ms. La arquitectura es correcta si estn presentes sus partes signicativas. 2. Ingeniero de casos de uso: Responsable de la integridad de las realizaciones de casos de uso-diseo y su comportamiento. Tambin es responsable de las descripciones textuales de los casos de uso. 3. Ingeniero de componentes: Garantiza que las clases del diseo estn correctamente denidas, as como el los subsistemas y sus interrelaciones. Flujo de trabajo Las actividades y sus relaciones de precedencia temporal estn reejadas en el grco de la gura 8.4:
Arquitecto
Diseo de la arquitectura
Ingeniero de componentes
Disear un subsistema
Figura 8.4: Flujo de trabajo del diseo 1. Diseo de la arquitectura: Se trata de esbozar los modelos de diseo y despliegue y su arquitectura identicando los elementos necesarios para estos modelos: Nodos y conguraciones de red. Subsistemas e interfaces. Clases de diseo relevantes para la arquitectura. Identicacin de mecanismos genricos de diseo. 2. Diseo de un caso de uso. Los objetivos son: Identicar las clases del diseo y subsistemas necesarios para el ujo de sucesos. Distribuir el comportamiento entre los objetos del diseo y los subsistemas. Denir los requisitos sobre las operaciones de las clases del diseo, subsistemas e interfaces. Capturar requisitos de implementacin del caso de uso. 3. Diseo de una clase. Las actividades a realizar son: Esbozar la clase del diseo. Una clase puede ser de interfaz, de entidad o de control.
96
Metodologas de desarrollo
Identicar operaciones. Identicar atributos. Identicar asociaciones y agregaciones. Identicar las generalizaciones. Describir los mtodos. Describir estados. Tratar requisitos especiales. 4. Diseo de un subsistema. Las actividades para ello son: Mantener las dependencias entre subsistemas. Mantener interfaces proporcionadas por el subsistema. Mantener los contenidos de los subsistemas.
8.2.8. Implementacin
La implementacin tiene como nalidades: Planicar las integraciones. Se sigue un enfoque incremental. Distribuir el sistema entre los nodos. Implementar clases y subsistemas del diseo. Probar los componentes individuales hasta donde sea posible. Artefactos 1. Modelo de implementacin: Describe la implementacin de las clases y la organizacin de los componentes. Se compone de un sistema de implementacin, que a su vez consta de varios subsistemas. Cada sistema o subsistema consta de interfaces y componentes. 2. Componente: Es el empaquetamiento fsico de los elementos de un modelo. Algunos estereotipos son: < <executable> >, < <file> >, < <library> >, < <table> >, < <document> >. Un stub es el esqueleto de un componente de propsito especial utilizado para desarrollar o probar otro componente. 3. Subsistema de implementacin: Es una forma de organizar los artefactos del modelo de implementacin. El mecanismo de empaquetamiento depende de la herramienta de implementacin. Cada subsistema de implementacin se puede trazar hasta un subsistema de diseo (dependencias, interfaces, clases de diseo y subsistemas de diseo). 4. Interfaz: Los componentes y subsistemas de implementacin pueden utilizar las mismas interfaces y tener dependencias de uso sobre ellas. Cuando un componente proporciona una interfaz debe implementar todas sus operaciones. 5. Vista de la arquitectura del modelo de implementacin. Consta de los siguientes elementos: Descomposicin del modelo de implementacin, subsistemas e interfaces. Componentes clave. 6. Plan de integracin de construcciones: La forma de hacer la integracin es incremental. El plan describe la funcionalidad implementada en cada construccin y las partes del modelo de implementacin que estn afectadas por la construccin. Trabajadores 1. Arquitecto: Responsable de la integridad del modelo de implementacin, que es correcto si implementa la funcionalidad descrita en el modelo de diseo. Tambin es responsable de la arquitectura del modelo de implementacin y de la asignacin de componentes a nodos. 2. Ingeniero de componentes: Se encarga del cdigo fuente de uno o varios componentes y de uno o varios subsistemas de implementacin y de los elementos del modelo contenidos en l. 3. Integrador de sistemas: Planica la secuencia de construcciones necesarias en cada implementacin y la integracin de cada construccin. Flujo de trabajo La gura 8.5 es una representacin dinmica de las actividades con sus respectivos trabajadores. Vemoslas una a una. 1. Implementacin de la arquitectura: Esboza el modelo de implementacin identicando componentes signicativos y asignndolos a nodos 2. Integrar el sistema: Se crea un plan de integracin de construcciones y se integra cada construccin antes de que sea sometida a pruebas de integracin.
97
Arquitecto
Implementacion de la arquitectura
Integrador de sistema
Integrar sistemas
Implementar una clase Ingeniero de componentes Implementar un subsistema Realizar prueba de unidad
Figura 8.5: Flujo de trabajo de la implementacin 3. Implementar un subsistema. Se trata de asegurar que los requisitos implementados en la construccin y los que afectan al subsistema son implementados correctamente. 4. Implementar una clase. Para ello es necesario: Esbozar un componente chero que contiene la clase. Generar el cdigo fuente a partir de la clase de diseo y sus relaciones. Implementar sus operaciones. Comprobar que el componente proporciona las mismas interfaces que la clase de diseo. 5. Realizar prueba de unidad. Hay dos tipos de pruebas: Prueba de especicacin (caja negra) Prueba de estructura (caja blanca)
8.2.9. Prueba
La nalidad de esta fase es planicar, disear, implementar las pruebas de cada iteracin. Artefactos 1. Modelo de pruebas: Especica cmo son las pruebas de integracin y de sistema para los ejecutables. Pueden probarse tambin componentes como manuales de usuario o interfaces. 2. Caso de prueba: Especica la prueba que se hace sobre un requisito o conjunto de requisitos de un caso de uso o de una realizacin de un caso de uso-diseo. 3. Procedimiento de prueba: Especica cmo se lleva a cabo una realizacin de un conjunto de casos de prueba. 4. Componente de prueba: Es la automatizacin de un caso de prueba. 5. Plan de prueba 6. Defecto 7. Evaluacin de prueba Trabajadores 1. Diseador de pruebas: Responsable de la integridad del modelo de pruebas, de los objetivos y la planicacin de las pruebas. 2. Ingeniero de componentes: Responsable de la automatizacin de algunos procedimientos de prueba. 3. Ingeniero de pruebas de integracin: Las pruebas de integracin verican que los componentes integrados funcionan bien juntos. 4. Ingeniero de pruebas de sistema: Realiza las pruebas sobre el resultado de una iteracin y documenta los defectos encontrados.
98
Metodologas de desarrollo
Ingeniero de pruebas
Planificar prueba
Disear prueba
Evaluar prueba
Ingeniero de componentes
Implementar pruebas
Figura 8.6: Flujo de trabajo de las pruebas 1. Planicar prueba: Para esta planicacin se describe primero una estrategia de prueba, se estiman los recursos necesarios y entonces se planica el esfuerzo de la prueba. 2. Disear prueba. Las actividades son: Identicar y denir los casos de prueba para cada construccin, que se subdivide en:
Diseo de los casos de prueba de integracin. Diseo de los casos de prueba del sistema. Diseo de los casos de prueba de regresin.
Identicacin y estructuracin de los casos de prueba. 3. Implementar prueba: Se trata de automatizar los procedimientos de prueba en la medida de lo posible creando procedimientos de prueba. 4. Realizar pruebas de integracin. Consta de los siguientes pasos: Realizar los procedimientos de prueba para cada caso de prueba. Contrastar los resultados con lo esperado. Informar de los defectos a los responsables de los componentes involucrados. Informar de los defectos a los diseadores de pruebas. 5. Realizar prueba de sistema. Se realiza despus de la anterior y de un modo similar. 6. Evaluar prueba: Se comparan los resultados obtenidos con los objetivos del plan de prueba. Se tienen en cuenta dos factores: Terminacin de la prueba: Nmero de casos de prueba y cantidad de cdigo comprobado. Fiabilidad: Anlisis de las tendencias de las pruebas y defectos observados.
99
Historias de usuario
Requisitos Metafora del sistema
Prototipo arquitectonico
Plan de liberacion
Iteracion
Test de aceptacion
Pequenas entregas
Estimacion mala
Estimacion mejor
Proxima iteracion
Ptototipo
Figura 8.7: Etapas de extreme programming Permite introducir nuevos requisitos o cambiar los anteriores de un modo dinmico. Publica pronto versiones que implementan parte de los requisitos. Es adecuado para proyectos pequeos y medianos. Tambin es adecuado para proyectos con alto riesgo. Su ciclo de vida es iterativo e incremental. Cada iteracin dura entre una y tres semanas. Un defecto de extreme programming es que necesita una continua interaccin con el usuario, y no con cualquiera, sino con alguien que conozca la empresa y sus necesidades. Otra crtica que se ha hecho a esta metodologa es que no produce demasiada documentacin acerca del diseo o la planicacin.
Estimar el tiempo de desarrollo. Se puede hacer un test de aceptacin partiendo de una historia de usuario.
Los desarrolladores estiman cuanto tiempo es necesario para implementar cada una. Si ese tiempo supera en alguna las tres semanas se debe desglosar en otras ms pequeas. Si es inferior a una semana, la historia de usuario ha descendido a un nivel de detalle excesivo y habr que combinarla con otra. Una historia de usuario debe durar idealmente entre una y tres semanas. Idealmente signica no tener distracciones, saber exactamente lo que hay que implementar y sin otras asignaciones. Diferencias entre las historias de usuario y la especicacin tradicional: Nivel de detalle: En principio, el usuario solo cuenta lo necesario para poder hacer una estimacin del tiempo que va a tomar la implementacin. Cuando llega el momento de implementar se vuelve a preguntar. La atencin se centra en las necesidades del usuario, no se usa tecno-jerga.
100
Metodologas de desarrollo
Los proyectos estn condicionados por cuatro variables: 1. 2. 3. 4. Alcance: Lo que hay que hacer Recursos: Gente disponible Tiempo: Fecha de entrega Calidad: Cantidad de errores
La cuarta est condicionada por las tres primeras y es inversamente proporcional al coste del proyecto.
Proxima iteracion
Plan de iteraciones
Ultima version
Errores
Figura 8.8: Planicacin de iteracin Lo primero es decidir cuales son las historias de usuario que hay que implementar en esta iteracin. Esta decisin le corresponde en su mayor parte al usuario. En total la iteracin dura entre una y tres semanas. Se escriben los tests de aceptacin que tendrn que ser satisfechos por cada historia de usuario. Las historias de usuario y los tests se traducen en tareas, que se escriben en tarjetas. Cada una debera durar entre uno y tres das. El plan detallado para cada iteracin consiste en ese conjunto de tareas. Al igual que ocurre con las historias de usuario, las tareas ms cortas de un da se agrupan con otras, y las ms largas que tres das se dividen en otras ms pequeas. Las tareas se asignan a programadores concretos y son estos los que estiman el tiempo que puede tardar la implementacin de la tarea que se compromete a hacer. Si la iteracin va retrasada con respecto a lo proyectado se escogen algunas historias de usuario y se dejar para la siguiente iteracin. Igualmente, si va adelantado se escoge historias de usuario y se introducen en la iteracin actual. La velocidad a la que va el proyecto se estima en funcin del tiempo que han tardado en implementarse las historias de usuario que ya estn hechas. Cada tres a cinco iteraciones habr que reestimar el tiempo de las historias que quedan. Es importante que no se planique en detalle ms que lo que se va a hacer en la iteracin en curso. Motivo: Es perder el tiempo, el proyecto cambiar. No se deben aadir funcionalidades extras antes de tiempo, es decir, no implementar funcionalidades que no son necesarias en el momento. Motivo: El 90 % no sern usadas.
101
8.3.5. Integracin
En la integracin se juntan los pequeos mdulos de software que tenemos y que parece que funcionan, pero resulta que esos pequeos trozos solo han superado pruebas de unidad donde no han tenido que interactuar con otros mdulos. El problema es que existen errores que solo surgen en esa interaccin, y ese es precisamente el problema de la integracin. Formas de afrontarlo: 1. Cada desarrollador es propietario de algunas clases y se responsabiliza de corregir los errores que surjan en la integracin. 2. Tener un equipo que se dedique a eso. Adems lo tpico es hacer la integracin una sola vez al nal. En extreme programming se hace una integracin secuencial. En un mismo momento slo puede existir una pareja de programadores integrando su cdigo. Para que otra pareja pueda hacer lo mismo le tienen que pasar el testigo. El cdigo est todo l en el almacn (repository) y la pareja que est integrando es la que puede hacer test y publicar los cambios al almacn. Tambin es posible que una pareja pueda integrar su trabajo en la ltima versin en el momento que quiera con tal de que exista un mecanismo de bloqueo (p.ej. un token que se pasen de unos a otros). La integracin debe hacerse cada poco tiempo, idealmente, cada pocas horas hay que dejar cdigo nuevo en el almacn. Todo el mundo debe hacer integraciones con la ltima versin disponible, de esta forma se evita trabajar con cdigo obsoleto. Haciendo muchas mini-integraciones los problemas que surgan al nal cuando se haca la nica integracin se van resolviendo sobre la marcha.
Codigo sencillo
Codigo complicado
Codicacin de la prueba de unidad Lo primero que se hace antes programar un mdulo es la preparar la prueba de unidad. Esto indica al programador que es lo que tiene que hacer cuando codica. Los requisitos aparecen en forma de pruebas de unidad. Se sabe cuando se ha terminado porque se superan todos los tests de unidad. El benecio que tiene de ello el diseo, es que en los tests de unidad se pone aquello que es importante para el cliente. Una forma de hacer esto es a base de pequeos incrementos: 1. 2. 3. 4. 5. Se crea una prueba de unidad pequea que reeja parte de los requisitos. Se hace el cdigo que satisface ese test. Se crea una segunda prueba. Se aade el cdigo correspondiente. ...
Prueba de unidad Veamos ahora como se hace una prueba de unidad. Hay tres pasos a seguir: 1. Se crea un armazn o patrn para poder hacer partiendo de l las pruebas de unidad de un modo automatizado. 2. Se hace un test de todas las clases del sistema. 3. Se debe escribir el test antes de codicar el mdulo. La idea de hacer el test antes del cdigo es importante, porque si se deja para el nal, es posible que se encuentren problemas inesperados y se necesite ms tiempo del inicialmente previsto. Adems, en realidad el test no se hace antes sino durante porque se construye de forma incremental, pero siempre el test antes del cdigo. Cuando se publica un mdulo al almacn debe ir obligatoriamente acompaado del test correspondiente, y no se puede publicar cdigo que no haya pasado todos los tests. Como el cdigo no tiene un propietario jo y todo el mundo puede hacer modicaciones, esta norma es bastante razonable, cualquiera puede modicar una lnea de cdigo que haya escrito otra persona, ahora bien, la modicacin tiene que pasar todos los tests asociados a la unidad.
102
Metodologas de desarrollo
Los tests de unidad permiten tambin rehacer el cdigo porque pueden comprobar si un cambio en la estructura supone un cambio en la funcionalidad. Un pequeo problema es que los tests en si mismos pueden tener errores. Por otra parte, una de las cosas deseables es poder hacer frecuentemente integraciones de todo el cdigo. Si se construye un conjunto de tests globales para comprobar el producto nal, ser posible comprobar rpidamente si los cambios hechos en una unidad se integran bien y de esta forma no dejarlo todo para el nal. Test de aceptacin El test de aceptacin tambin se conoce como test funcional en otros sitios. Los tests de aceptacin son cajas negras que comprueban el funcionamiento del sistema. Son escritos por el cliente, y es el cliente el responsable de que sea correcto. Tambin es el cliente el que decide la prioridad de cada test fallido. Tambin se usan como test de regresin. Para que se pueda comprobar con rapidez y muchas veces si las historias de usuario cumplen con los tests de aceptacin, estos deberan estar automatizados. Los resultados se comunican al grupo, que debe gestionar el tiempo para corregir errores. A partir de las historias de usuario se hacen los tests de aceptacin y a cada una le puede corresponder uno o varios. No se considera que una historia ha sido completada hasta que no pase todos sus tests de aceptacin. Al igual que con los tests de unidad, los tests de aceptacin deben hacerse antes de empezar a depurar. La diferencia entre un test de aceptacin y un test de unidad est clara: un test de aceptacin comprueba los requisitos expresados en las historias de usuario y un test de unidad comprueba que el cdigo de una unidad es correcto. Errores Si se encuentra un error lo que se hace es crear un test de aceptacin para ese error. De esta forma es fcil para el equipo saber cuando se ha corregido. Un error en un test de aceptacin puede verse en varios mdulos diferentes en sus tests de unidad. Cuando todos los tests de unidad funcionan perfectamente se puede correr otra vez el test de aceptacin para comprobar si el error ha sido realmente corregido.
Acerca del cdigo 1. Rehacer lo viejo: A veces mantener cdigo antiguo no solo no supone un ahorro de tiempo, sino un serio inconveniente. Si es necesario se debe eliminar la redundancia, las funcionalidades que no se usan ya o cambiar diseos antiguos. 2. Optimizaciones: No se debe optimizar el cdigo hasta que est funcionando todo. Esto se deja para el nal. 3. Nomenclatura: La nomenclatura es la forma en la que se escoge el nombre de las cosas. De cara a comprender bien el diseo general del sistema y poder reutilizar el cdigo hay que escoger una forma de dar nombre a las clases y mtodos de forma que todo el mundo lo pueda comprender fcilmente y que sea consistente. 4. Estndares de codicacin: Hay publicadas algunas normas sobre como se debe codicar en un lenguaje. Es conveniente seguir alguno de esos estndares por todos los miembros del equipo para que el cdigo sea luego fcil de comprender y de mantener por todos. Personal Este es posiblemente el factor ms importante. Los proyectos informticos funcionan a base de mano de obra, todo lo que se ha dicho hasta ahora consiste en realidad en buscar formas de trabajar que sean adecuadas para que el componente humano funcione bien. Ahora veremos cuatro caractersticas propias de la metodologa extreme programming a este respecto.
8.4 Mtrica 3
103
1. Reuniones diarias: Todos los das por la maana se hace una reunin de 15 minutos en la que se da cita todo el personal desarrollador. Lo que se busca es promover la comunicacin entre todos los miembros del grupo. La gente cuenta los problemas que se han encontrado y cualquiera puede proponer soluciones. Este tipo de reuniones tiene algunas ventajas: a) Como todo el mundo asiste es ms fcil encontrar soluciones. b) Se pueden evitar otras reuniones. 2. Propiedad compartida del cdigo: Cualquiera puede corregir errores, aadir funcionalidades, etc de cualquier parte del proyecto (no slo de su cdigo, sino tambin del de los dems). Lo que se pretende es que cualquiera pueda aportar algo. Esto signica que la arquitectura del sistema en cierto modo la decide el equipo en su conjunto, lo cual resulta chocante para la mentalidad de la programacin estructurada. Ventajas: a) El cdigo es ms able. b) Si una persona se atasca en un problema, se le ayuda y su parte no se convierte en un problema para otros. 3. Programacin por parejas (pair programming): Est basado en el principio de que dos personas trabajando juntas pueden hacer ms que por separado. El resultado de esto es una mejora en la calidad del cdigo, adems no supone tardar ms tiempo. La forma de ponerla en prctica es: Dos personas se sientan juntas ante el mismo ordenador. Una teclea y piensa en el problema desde el punto de vista tctico. La otra piensa desde el punto de vista estratgico. 4. Mover a la gente: No se puede permitir que todo el equipo dependa de que la nica persona que conoce algo est disponible o no. Puede ocurrir que esa persona deje la empresa o que est sobrecargada en un momento dado. Lo que se hace es que la gente trabaje en una parte del sistema distinta en cada iteracin (o en parte de ella). Esto en combinacin con la programacin en parejas permite que no se pierda productividad en la parte que se deja. Ventajas: a) Se evitan las islas de conocimiento b) El equipo es ms exible c) Si una parte del proyecto tiene problemas es posible reasignar gente a esa parte.
8.4. Mtrica 3
8.4.1. Introduccin
Mtrica 3 es la metodologa ocial de desarrollo de aplicaciones informticas en la administracin. Caractersticas 1 : 1. 2. 3. 4. 5. Su punto de partida es la versin anterior (la 2.1). La redaccin comenz en 1996. Cubre los dos tipos de desarrollo, tanto el estructurado como el orientado a objetos, luego es una metodologa mixta. Sigue el ciclo de vida denido en la norma ISO-2.207. Incluye los procesos que no forman parte de lo que se entiende como ciclo de vida a los que llama interfaces. Tiene en cuenta la tecnologa cliente/servidor y el desarrollo de interfaces grcas de usuario (IGU).
8.4.2. Objetivos
Como toda metodologa lo que se hace es sistematizar todas las actividades del ciclo de vida y las que no son parte del ciclo de vida pero inuyen de algn modo en ste (como puede ser la planicacin) para de esa forma conseguir los siguientes objetivos: 1. Dar un marco estratgico para el desarrollo de los sistemas de informacin dentro de las organizaciones. 2. Enfatizar el anlisis de requisitos para que de esta forma los productos satisfagan las necesidades de los usuarios. 3. Mejorar la productividad del departamento de sistemas de informacin permitiendo una mayor adaptabilidad a los cambios y reutilizacin. 4. Que los procesos que permitan una comunicacin ms uida entre todos los miembros involucrados en la produccin de software. 5. Facilitar la operacin y mantenimiento de los productos obtenidos.
8.4.3. Estructura
Mtrica 3 se divide por una parte en procesos principales, que son los relativos a la planicacin, desarrollo y mantenimiento e interfaces, que son procesos asociados al desarrollo (gestin de la conguracin, de proyectos y aseguramiento de la calidad). Cada proceso se divide en actividades y cada actividad tiene una descripcin y una tabla de tareas propias de la actividad. Cada tarea tiene la correspondiente descripcin y dene los productos que necesita de entrada, los que produce de salida, las prcticas necesarias para llevar a cabo la tarea y los participantes. Mtrica 3 es exible en su estructura (ver gura 8.10) porque no es obligatorio seguir todos los procesos o actividades, se adapta en funcin de las necesidades de cada proyecto. Tampoco es necesario seguir las actividades secuencialmente, en
1
104
Metodologas de desarrollo
Procesos
Metrica V3
Interfaces
Plancacion (PSI) Estudio de viabilidad (EVS) Analisis del S.I. (ASI) Desarrollo Diseo del S.I. (DSI) Construccion del S.I. (CSI) Implant. y acept. del sistema (IAS) Mantenimiento (MSI) Gestion de la conguracion (GC) Gestion de proyectos (GP) Aseguramiento de la calidad (CAL) Seguridad (SEG)
Entradas externas
Solicitud formal del PSI Estructura organizativa Informacion relevante Entorno tecnologico actual y estandar
P.S.I.
Plan de accion
* Plan de proyectos * Plan de mantenimiento
Figura 8.11: Planicacin de sistemas de informacin ocasiones ser factible su ejecucin en paralelo. Los procesos correspondientes al desarrollo son los contemplados por el ciclo de vida ISO 12.207.
8.4.4. Procesos
Planicacin de sistemas de informacin (PSI) El objetivo es obtener un marco de referencia para desarrollar el sistema de informacin (ver gura 8.11). El marco de referencia consta de: 1. Descripcin de la situacin actual, que incluye: Un anlisis tcnico de puntos fuertes y riesgos. Un anlisis de servicio a los objetivos de la organizacin. 2. Un conjunto de modelos que constituyen la arquitectura de informacin. 3. Una propuesta de proyectos a realizar en los prximos aos con: Sus prioridades. Un calendario. Estimacin de los recursos necesarios para cada proyecto, que ser ms detallada cuanto ms cercano en el tiempo. Un plan de seguimiento de los proyectos. El plan de sistemas de informacin se disea a partir de consideraciones de tipo estratgico, y no tcnico. Debido a esto es necesario la implicacin de la alta direccin en el proceso. El plan se elabora en funcin de las necesidades de informacin de los procesos afectados, con estas necesidades se elaboran modelos conceptuales de informacin. El PSI se divide en las siguientes actividades y tareas: 1. Inicio del plan de sistemas de informacin. Anlisis de la necesidad del PSI. Identicacin del alcance del PSI. Determinacin de responsabilidades. 2. Denicin y organizacin del PSI. Especicacin del mbito y alcance. Organizacin del PSI.
8.4 Mtrica 3
105
Denicin del plan de trabajo. Comunicacin del plan de trabajo. 3. Estudio de la organizacin relevante. Seleccin y anlisis de antecedentes. Valoracin de antecedentes 4. Identicacin de requisitos. Estudio de los procesos del PSI. Anlisis de las necesidades de la informacin. Catalogacin de requisitos. 5. Estudio de los sistemas de informacin actuales. Alcance y objetivos del estudio de los sistemas de informacin actuales. Anlisis de los sistemas de informacin actuales. Valoracin de los sistemas de informacin actuales. 6. Diseo del modelo de sistemas de informacin. Diagnstico de la situacin actual. Denicin del modelo de sistemas de informacin. 7. Denicin de la arquitectura tecnolgica. Identicacin de las necesidades de infraestructura tecnolgica. Seleccin de la arquitectura tecnolgica. 8. Denicin del plan de accin. Denicin de proyectos a realizar. Elaboracin del plan de mantenimiento del PSI. 9. Revisin y aprobacin del PSI. Convocatoria de la presentacin. Evaluacin y mejora de la propuesta. Aprobacin del PSI. Estudio de la viabilidad del sistema (EVS) La nalidad es proponer una solucin a las necesidades que tenga en cuenta restricciones tcnicas, econmicas, legales y operativas. Los proyectos que se propongan como solucin pueden afectar a los sistemas en funcionamiento. Para la denicin de esos proyectos se identican los requisitos a satisfacer y se estudia la situacin actual. A partir del estado inicial, la situacin actual y los requisitos se estudian las alternativas de solucin y se describen indicando sus requisitos. Para seleccionar la mejor se tienen en cuenta varios factores: Inversin, riesgos, impacto en la organizacin. Actividades y tareas en las que se divide: 1. Establecimiento del alcance del sistema. Estudio de la solucin. Identicacin del alcance del sistema. Especicacin del alcance del EVS. 2. Estudio de la situacin actual. Valoracin del estudio de la situacin actual. Identicacin de los usuarios participantes en el estudio de la situacin actual. Descripcin de los sistemas de informacin existentes. Realizacin del diagnstico de la situacin actual. 3. Denicin de requisitos del sistema. Identicacin de las directrices y tcnicas de gestin. Identicacin de requisitos. Catalogacin de requisitos.
106
Metodologas de desarrollo
4. Estudio de alternativas de solucin. Preseleccin de alternativas de solucin. Descripcin de las alternativas de solucin. 5. Valoracin de las alternativas. Estudio de la inversin. Estudio de los riesgos. Planicacin de alternativas. 6. Seleccin de la solucin. Convocatoria de presentacin. Evaluacin de alternativas y seleccin. Aprobacin de la solucin. Anlisis de sistemas de informacin (ASI) El objetivo es obtener una especicacin que responda a las necesidades de los usuarios y se pueda emplear como entrada para el diseo. La denicin del sistema (ASI 1) se lleva a cabo a partir de los productos generados en el estudio de viabilidad del sistema (EVS). Se delimita el alcance del sistema, se genera un catlogo de requisitos generales y se describe el sistema mediante unos modelos iniciales de alto nivel. Tambin se identica a los usuarios que formarn parte del equipo de anlisis deniendo sus responsabilidades. Se elabora el plan de trabajo a seguir. En el establecimiento de requisitos (ASI 2) se dene un catlogo de requisitos que permite describir el sistema de informacin y sirve para comprobar la completitud de la especicacin de los modelos obtenidos por otras tcnicas del anlisis. Como consecuencia se puede actualizar el catlogo. Para la obtencin de requisitos: 1. Se toma como punto de partida el catlogo de requisitos y los modelos elaborados en la actividad de denicin del sistema (ASI 1), que se complementarn mediante sesiones de trabajo con los usuarios. 2. Las sesiones de trabajo tienen como objetivo obtener la informacin necesaria para la especicacin detallada del sistema. Las tcnicas son las que se vieron en el captulo de especicacin. 3. Se identican tambin los requisitos no funcionales del sistema, es decir, restricciones de rendimiento, seguridad, etc. Esto forma parte tambin del catlogo de requisitos. En la actividad la identicacin de subsistemas de anlisis (ASI 3) el sistema de informacin se estructura en subsistemas de anlisis para facilitar la especicacin de los distintos modelos y la traza de requisitos. Simultneamente se crean los modelos que sirven de base para el diseo. Se elabora la descripcin detallada del modelo de datos y el de procesos. Se especican las interfaces entre el sistema y el usuario. En la actividad de anlisis de consistencia y especicacin de requisitos (ASI 9) se realiza una vericacin y validacin de los modelos para asegurar que son completos, consistentes y correctos. La especicacin del plan de pruebas se inicia en la actividad (ASI 10) y se termina en el proceso de diseo de sistemas de informacin (DSI). Actividades y tareas: 1. Denicin de sistema. Determinacin del alcance del sistema. Identicacin del entorno tecnolgico. Especicacin de estndares y normas. Identicacin de usuarios participantes y nales. 2. Establecimiento de requisitos. Obtencin de requisitos. Especicacin de casos de uso. Anlisis de requisitos. Validacin de requisitos. 3. Identicacin de subsistemas de anlisis. Determinacin de subsistemas de anlisis. Integracin de subsistemas de anlisis. 4. Anlisis de los casos de uso (anlisis orientado a objetos). Identicacin de clases asociadas a un caso de uso.
8.4 Mtrica 3
107
Descripcin de la interaccin de objetos. 5. Anlisis de clases (anlisis orientado a objetos). Identicacin de responsabilidades y atributos. Identicacin de asociaciones y agregaciones. Identicacin de generalizaciones. 6. Elaboracin del modelo de datos (anlisis estructurado). Elaboracin del modelo conceptual de datos. Elaboracin del modelo lgico de datos. Normalizacin del modelo lgico de datos. Especicacin de necesidades de migracin de datos y carga inicial. 7. Elaboracin del modelo de procesos (anlisis estructurado). Obtencin del modelo de procesos del sistema. Especicaciones de interfaces con otros sistemas. 8. Denicin de interfaces de usuario. Especicacin de principios generales de la interfaz. Identicacin de perles y dilogos (slo para anlisis estructurado) Especicacin de formatos individuales de la interfaz de pantalla. Especicacin del comportamiento dinmico de la interfaz. Especicacin del formatos de impresin. 9. Anlisis de consistencia y especicacin de requisitos. Vericacin de los modelos. Anlisis de consistencia de los modelos. Validacin de los modelos. Elaboracin de la especicacin de requisitos software (ERS). 10. Especicacin del plan de pruebas. Denicin del alcance de las pruebas. Denicin de requisitos del entorno de pruebas. Denicin de las pruebas de aceptacin del sistema. 11. Presentacin y especicacin del anlisis del sistema de informacin. Presentacin y aprobacin del anlisis del sistema de informacin. Proceso de diseo de sistemas de informacin (DSI) Los objetivos del diseo son denir: 1. Denir la arquitectura. 2. Denir el entorno tecnolgico. 3. Especicar los componentes del sistema de informacin. Hay dos bloques de actividades: 1. Diseo de detalle: Esta parte necesita realimentacin. Establece el particionamiento fsico del sistema de informacin (DSI 1) y su organizacin en subsistemas de diseo. Los subsistemas pueden ser de dos tipos: De soporte: Elementos o servicios comunes al sistema. Especcos: Elementos propios del sistema de informacin. Otras actividades que se llevan a cabo en paralelo a la denicin de la arquitectura del sistema son: Diseo de la arquitectura de soporte (DSI 2). Diseo de la arquitectura de mdulos del sistema (DSI 5). Diseo fsico de datos (DSI 6).
108
Metodologas de desarrollo
En el diseo orientado a objetos el diseo detallado se realiza en paralelo con la actividad de diseo de la arquitectura de soporte (DSI 2). Las actividades que lo realizan son: Diseo de casos de uso reales (DSI 3). Diseo de clases (DSI 4) Cuando se tiene el modelo de clases se comienza el diseo fsico de datos (DSI 6) segn el enfoque del diseo estructurado. El ltimo paso de este bloque es la actividad de vericacin y aceptacin de la arquitectura del sistema (DSI 7). 2. Completar el proceso de diseo. Se generan las siguientes especicaciones: Generacin de especicaciones de construccin (DSI 8). Diseo de migracin y carga inicial de datos (DSI 9). Especicacin tcnica del plan de pruebas (DSI 10). Establecimiento de requisitos de implantacin (DSI 11). El proceso de diseo puede parecer un tanto catico con la mezcla de procesos orientados a objetos y estructurados y con la divisin en las dos fases. El grco de actividades en la gura 8.12 puede que aclare un poco esta estructura. Actividades y tareas relacionadas:
DSI 1 Definicion de la Arquitectura del sistema Actividad comun Actividad solo orientada a objetos Actividad solo estructurado
1. Denicin de la arquitectura del sistema: Se establecen las particiones fsicas, la descomposicin lgica en subsistemas de diseo y la ubicacin de cada subsistema en cada particin, as como la especicacin detallada de la infraestructura tecnolgica. Las tareas a realizar son: Denicin de niveles de arquitectura. Identicacin de requisitos de diseo y construccin. Especicacin de excepciones. Especicacin de estndares y normas de diseo y construccin. Identicacin de subsistemas de diseo. Especicacin del entorno tecnolgico. Especicacin de requisitos de operacin y seguridad. 2. Diseo de la arquitectura de soporte. Diseo de subsistemas de soporte. Identicacin de mecanismos genricos de diseo. 3. Diseo de casos de uso reales (diseo orientado a objetos). Identicacin de clases asociadas a un caso de uso. Diseo de la realizacin de los casos de uso. Revisin de la interfaz de usuario.
8.4 Mtrica 3
109
Revisin de subsistemas de diseo e interfaces. 4. Diseo de clases (diseo orientado a objetos). Identicacin de clases adicionales. Diseo de asociaciones y agregaciones. Identicacin de atributos de las clases. Identicacin de operaciones de las clases. Diseo de la jerarqua. Descripcin de mtodos de las operaciones. 5. Diseo de la arquitectura de mdulos del sistema (desarrollo estructurado). Diseo de mdulos del sistema. Diseo de comunicaciones entre mdulos. Revisin de la interfaz de usuario. 6. Diseo fsico del sistema (desarrollo estructurado). Diseo del modelo fsico de datos. Especicacin de los caminos de acceso a los datos. Optimizacin del modelo fsico de datos. Especicacin de la distribucin de datos. 7. Vericacin y aceptacin de la arquitectura del sistema (desarrollo estructurado). Vericacin de las especicaciones de diseo. Anlisis de consistencia de las especicaciones de diseo. Aceptacin de la arquitectura del sistema. 8. Generacin de especicaciones de construccin. Especicacin del entorno de construccin. Denicin de componentes y subsistemas de construccin. Elaboracin de especicaciones de construccin. Elaboracin de especicaciones del modelo fsico de datos. 9. Diseo de la migracin y carga inicial de datos. Especicacin del entorno de migracin. Diseo de procedimientos de migracin y carga inicial. Diseo detallado de componentes de migracin y carga inicial. Revisin de la planicacin de la migracin. 10. Especicacin tcnica del plan de pruebas. Especicacin del entorno de pruebas. Especicacin tcnica de niveles de prueba. Revisin de la planicacin de pruebas. 11. Establecimiento de requisitos de implantacin. Especicacin de requisitos de documentacin de usuario. Especicacin de requisitos de implantacin. 12. Aprobacin del diseo del sistema de informacin. Presentacin y aprobacin del diseo del sistema de informacin. Proceso de construccin de sistemas de informacin (CSI) Este es el proceso a seguir: 1. Se escribe el cdigo del sistema. 2. Se desarrollan los procedimientos de operacin y seguridad. 3. Se escriben los manuales de usuario y de explotacin.
110
Metodologas de desarrollo
4. Se realizan las pruebas: Unitarias, de integracin y de sistema. 5. Se dene la formacin del usuario. 6. Se construyen los procedimientos de migracin y de carga de datos. La base para la construccin del sistema est en la salida producida por la actividad Generacin de especicaciones de construccin (DSI 8). Por otra parte, la actividad de preparacin del entorno de generacin y construccin (CSI 1) es necesaria para asegurar que se tiene el entorno de programacin adecuado. La codicacin y pruebas se realizan en las actividades: Generacin del cdigo de los componentes y procedimientos (CSI 2). Ejecucin de las pruebas unitarias (CSI 3). Ejecucin de las pruebas de integracin (CSI 4). Ejecucin de las pruebas del sistema (CSI 5). Los manuales de usuario y la formacin necesaria se denen respectivamente en las actividades Elaboracin de manuales de usuario (CSI 6) y Denicin de la formacin de usuarios nales (CSI 7). La lista de actividades con sus tareas es: 1. Preparacin del entorno de generacin y construccin. Implantacin de las base de datos fsica o cheros. Preparacin del entorno de construccin. 2. Generacin del cdigo de los componentes y procedimientos. Generacin del cdigo de componentes. Generacin del cdigo de los procedimientos de operacin y seguridad. 3. Ejecucin de las pruebas unitarias. Preparacin del entorno de las pruebas unitarias. Realizacin y evaluacin de las pruebas unitarias. 4. Ejecucin de las pruebas de integracin. Preparacin del entorno de las pruebas de integracin. Realizacin de las pruebas de integracin. Evaluacin del resultado de las pruebas de integracin. 5. Ejecucin de las pruebas del sistema. Preparacin del entorno de las pruebas del sistema. Realizacin de las pruebas del sistema. Evaluacin del resultado de las pruebas del sistema. 6. Elaboracin de los manuales de usuario. Elaboracin de los manuales de usuario. 7. Denicin de la formacin de usuarios nales. Denicin del esquema de formacin. Especicacin de los recursos y entornos de formacin. 8. Construccin de los componentes y procedimientos de migracin y carga inicial de datos. Preparacin del entorno de migracin y carga inicial de datos. Generacin del cdigo de los componentes y procedimientos de migracin y carga inicial de datos. Realizacin y evaluacin de las pruebas de migracin y carga inicial de datos. 9. Aprobacin del sistema de informacin. Presentacin y aprobacin del sistema de informacin. Proceso de implantacin de sistemas de informacin (CSI) El objetivo es que el sistema sea aceptado por el cliente y que empiece a funcionar. 1. Establecimiento del plan de implantacin.
8.4 Mtrica 3
111
Denicin del plan de implantacin. Especicacin del equipo de implantacin. 2. Formacin necesaria de la implantacin. Preparacin de la formacin del equipo de implantacin. Formacin del equipo de implantacin. Preparacin de la formacin a usuarios nales. Seguimiento de la informacin a usuarios nales. 3. Incorporacin del sistema al entorno de operacin. Preparacin de la instalacin. Realizacin de la instalacin. 4. Carga de datos al entorno de operacin. Migracin y carga inicial de datos. 5. Pruebas de implantacin del sistema. Preparacin de las pruebas de implantacin. Realizacin de las pruebas de implantacin. Evaluacin del resultado de las pruebas de implantacin. 6. Pruebas de aceptacin del sistema. Preparacin de las pruebas de aceptacin. Realizacin de las pruebas de aceptacin. Evaluacin del resultado de las pruebas de aceptacin. 7. Preparacin del mantenimiento del sistema. Establecimiento de la infraestructura para el mantenimiento. Formalizacin del plan de mantenimiento. 8. Establecimiento del acuerdo de nivel de servicio. Identicacin de los servicios. Descripcin de las propiedades de cada servicio. Determinacin del acuerdo de nivel de servicio. 9. Presentacin y aprobacin del sistema. Convocatoria de la presentacin del sistema. Aprobacin del sistema. 10. Paso a produccin. Preparacin del entorno de produccin. Activacin del sistema en produccin. Proceso de mantenimiento de sistemas de informacin (IAS) 1. Registro de la peticin. Registro de la peticin. Asignacin de la peticin. 2. Anlisis de la peticin. Vericacin y estudio de la peticin. Estudio de la propuesta de solucin. 3. Preparacin de la implementacin de la modicacin. Identicacin de elementos afectados. Establecimiento del plan de accin.
112
Metodologas de desarrollo
Especicacin del plan de pruebas de regresin. 4. Seguimiento y evaluacin de los cambios hasta la aceptacin. Seguimiento de los cambios. Realizacin de las pruebas de regresin. Aprobacin y cierre de la peticin.
8.4.5. Interfaces
Gestin de proyectos (GP) El objetivo de la gestin de proyectos es el control de recursos humanos y materiales. Existen tres grupos de actividades: de inicio del proyecto, de seguimiento y control y de nalizacin del proyecto. Actividades de inicio del proyecto Tienen dos objetivos: Estimar el esfuerzo identicando los elementos a desarrollar y planicar las actividades (recursos, planicacin de tareas y calendario). Lista de tareas: 1. Estimacin de esfuerzo. Tareas: Identicacin de elementos a desarrollar. Clculo del esfuerzo. 2. Planicacin. Tareas: Seleccin de la estrategia de desarrollo. Seleccin de la estructura de actividades, tareas y productos. Establecimiento del calendario de hitos y entregas. Planicacin detallada de actividades y recursos necesarios. Presentacin y aceptacin de la planicacin general del proyecto. Actividades de seguimiento y control El objetivo es vigilar todas las actividades de desarrollo. El jefe de proyecto vigila cada tarea, centrndose en las que estn retrasadas, caso de que esto ocurra se averiguan las causas. Estas actividades de seguimiento se llevan a cabo a lo largo de todo el ciclo de vida. Actividades: 1. Asignacin detallada de tareas. Asignacin de tarea. 2. Comunicacin al equipo del proyecto. Informar al equipo de proyecto. 3. Seguimiento de tareas. Seguimiento de tareas. Gestin de incidencias: Es un grupo de actividades de seguimiento y control. Una incidencia es un hecho inesperado que produce desviaciones respecto a lo planicado. Un caso especial son los cambios de requisitos. 4. Anlisis y registro de la incidencia. Tarea: Analizar impacto. Propuesta de solucin de la incidencia. Registrar la incidencia. Gestin de cambios en los requisitos: Es mejor que estos cambios no ocurren, pero si as es, se plantean al comit de seguimiento. El impacto del cambio del requisito en trminos de plazos y presupuestos se debe pactar con el cliente. Deber existir un registro de cambios que reeje para cada cambio: Formulario de peticin de cambio. Catlogo de necesidades. Anlisis funcional del cambio. Estimacin de esfuerzo. Variaciones en coste y plazos. El control y seguimiento de los cambios forma parte de las actividades de seguimiento y control de todo el proyecto.
8.4 Mtrica 3
113
5. Peticin de cambio de requisitos. Tarea: Registro de la peticin de cambio de requisitos. 6. Anlisis de la peticin de cambio de requisitos. Tareas: Estudio de la peticin de cambio de requisitos. Impacto de la peticin de cambio de requisitos. Estudio de alternativas y propuesta de solucin. 7. Aprobacin de la solucin. Tarea: Aprobacin de la solucin. 8. Estimacin del esfuerzo y planicacin de la solucin. Tarea: Estimacin de esfuerzo para el cambio. Planicacin de los cambios. 9. Registro del cambio de requisitos. Tarea: Registro del cambio de requisitos. 10. Finalizacin de la tarea. Tareas: Comprobacin de la tarea. 11. Actualizacin de la planicacin. Tareas: Actualizacin de tareas. Obtencin de la extrapolacin. Elaboracin del informe de seguimiento. 12. Reuniones de seguimiento. Tarea: Reunin interna de seguimiento. 13. Aceptacin. Tarea: Vericacin de aceptacin interna. Actividades de nalizacin La nalizacin ocurre cuando el cliente expresa su conformidad. 14. Cierre del proyecto. Tareas: Inclusin en histrico de proyectos. Archivo de la documentacin de gestin del proyecto. Aseguramiento de la calidad (CAL) El objetivo es garantizar que el sistema resultante cumpla con unos requisitos mnimos de calidad. Se llega a este objetivo haciendo revisiones exhaustivas de todos los documentos producidos. El equipo que participa en el aseguramiento de la calidad es independiente al de desarrollo. Sus funciones son: 1. Identicar desviaciones respecto a los estndares aplicados, de los requisitos y de los procedimientos especicados. 2. Comprobar que se han llevado a cabo las medidas preventivas o correctoras necesarias. El aseguramiento de la calidad est dividido en seis reas, cada una de ellas cuenta con sus actividades y cada actividad con sus tareas. Estas reas se corresponden con las etapas del desarrollo, es decir, el aseguramiento de la calidad se lleva a cabo durante todos los procesos del ciclo de vida. Veamos cada una de estas reas una a una. Estudio de viabilidad del sistema Se analizan las condiciones de desarrollo de cada una de las alternativas propuestas y las caractersticas que deben cumplir. Los riesgos especcos de los sistemas a desarrollar pueden inuir en la forma concreta en la que se aplique el plan de calidad, que puede estar denido en alguna norma de la propia empresa o seguir un estndar publicado. Actividades: 1. Identicacin de las propiedades de calidad para el sistema. Constitucin del equipo de aseguramiento de la calidad.
114
Metodologas de desarrollo
Determinacin de los sistemas de informacin objeto de aseguramiento de calidad. Identicacin de las propuestas de calidad. 2. Establecimiento del plan de aseguramiento de calidad. Necesidad del plan de aseguramiento de calidad para las alternativas propuestas. Alcance del plan de aseguramiento de calidad. Impacto en el coste del sistema. 3. Adecuacin del plan de aseguramiento de calidad. Ajuste del plan de aseguramiento de calidad. Aprobacin del plan de aseguramiento de calidad. Anlisis del sistema de informacin Se detalla el plan de calidad y los estndares o normas a seguir. El grupo encargado de esta tarea revisa: catlogo de requisitos, modelos resultantes del anlisis y plan de pruebas. Actividades: 1. Especicacin inicial del plan de aseguramiento de la calidad. Denicin del plan de aseguramiento de calidad para el sistema de informacin. 2. Especicacin detallada del plan de aseguramiento de calidad. Contenido del plan de aseguramiento de calidad para el sistema de informacin. 3. Revisin del anlisis de consistencia. Revisin del catlogo de requisitos. Revisin de la consistencia entre productos. 4. Revisin del plan de pruebas. Revisin del plan de pruebas. 5. Registro de la aprobacin del anlisis del sistema. Registro de la aprobacin del anlisis del sistema de informacin. Diseo del sistema de informacin Se revisan los siguientes conjuntos de requisitos: los especicados en el anlisis, los de las pruebas y los no funcionales. Actividades: 1. Revisin de la vericacin de la arquitectura del sistema. Revisin de la consistencia entre productos del diseo. Registro de la aceptacin de la arquitectura del sistema. 2. Revisin de la especicacin tcnica del plan de pruebas. Revisin del diseo de las pruebas unitarias, de integracin y del sistema. Revisin del plan de pruebas. 3. Revisin de los requisitos de implantacin. Revisin de los requisitos de documentacin de usuario. Revisin de los requisitos de implantacin. 4. Registro de la aprobacin del diseo del sistema de informacin. Registro de la aprobacin del diseo del sistema de informacin. Construccin del sistema de informacin Se revisan los estndares de codicacin, de evaluacin de las pruebas, manuales de usuario y formacin. Se comprueba que las pruebas se han llevado a cabo segn los criterios del plan de aseguramiento de la calidad. 1. Revisin del cdigo de componentes y procedimientos. Revisin de normas de construccin. 2. Revisin de las pruebas unitarias, de integracin y del sistema.
8.4 Mtrica 3
115
Revisin de la realizacin de las pruebas unitarias. Revisin de la realizacin de las pruebas de integracin. Revisin de la realizacin de las pruebas del sistema. 3. Revisin de los manuales de usuario. Revisin de los manuales de usuario. 4. Revisin de la formalizacin a usuarios nales. Revisin de la formalizacin a usuarios nales. 5. Registro de la aprobacin del sistema de informacin. Registro de la aprobacin del sistema de informacin. Implantacin y aceptacin del sistema Hay que comprobar que efectivamente existe un plan de implantacin y que se han realizado las pruebas de implantacin y de aceptacin del estudio de viabilidad y la normalizacin del plan de aseguramiento de la calidad. Se debe vericar que se entrega el sistema a los responsables del mantenimiento en condiciones para que ste se pueda realizar. Lista de actividades y tareas: 1. Revisin del plan de implantacin del sistema. Revisin del plan de implantacin del sistema. 2. Revisin de las pruebas de implantacin del sistema. Revisin de la realizacin de las pruebas de implantacin del sistema. Registro de la aprobacin de las pruebas de implantacin del sistema. 3. Revisin de las pruebas de aceptacin del sistema. Revisin de la realizacin de las pruebas de aceptacin del sistema. Revisin de la aprobacin de las pruebas de aceptacin del sistema. 4. Revisin del plan de mantenimiento del sistema. Revisin del plan de mantenimiento del sistema. 5. Registro de la aprobacin de la implantacin del sistema. Registro de la aprobacin de la implantacin del sistema. Mantenimiento del sistema de informacin Se realizan revisiones peridicas para constatar que el mantenimiento se lleva a cabo del modo correcto. Puede ser necesario revisar: El contenido del plan de pruebas de regresin. La ejecucin de las pruebas de regresin. En este caso se registra la aprobacin de las pruebas. Las vericaciones y casos de prueba del plan de pruebas correspondientes a un cambio. Las incidencias. Lista de actividades y tareas: 1. Revisin del mantenimiento del sistema de informacin. Revisin del mantenimiento. 2. Revisin del plan de pruebas de regresin. Comprobacin de la existencia del plan de pruebas de la regresin. 3. Revisin de la realizacin de las pruebas de regresin. Revisin de la realizacin de las pruebas de regresin. Gestin de la conguracin (GC) La gestin de la conguracin se ve en el captulo de Herramientas de desarrollo y validacin y sera redundante incluirlo aqu.
116
Metodologas de desarrollo
Seguridad (SEG) La palabra seguridad hace referencia a la gestin de riesgos. Esta interfaz pretende dotar a Mtrica 3 de mecanismos de seguridad adicionales a los que tiene de por si la metodologa. Hay dos tipos de actividades diferenciadas: 1. Actividades relacionadas con la seguridad intrnseca del sistema de informacin. 2. Actividades relacionadas con la seguridad del proceso de desarrollo. Planicacin de sistemas de informacin Si la organizacin no tiene denida una poltica en materia de seguridad habr que hacerlo. Esa poltica inuir en las decisiones adoptadas en el proceso de planicacin de sistemas de informacin. 1. 2. 3. 4. Planicacin de la seguridad requerida en el proceso planicacin de sistemas de informacin. Evaluacin del riesgo para la arquitectura tecnolgica. Determinacin de la seguridad en el plan de accin. Catalogacin de los productos generados durante el proceso de planicacin de sistemas de informacin.
Estudio de viabilidad del sistema En funcin de la seguridad requerida se selecciona el equipo de seguridad, que se basar en la poltica de seguridad de la organizacin. 1. 2. 3. 4. 5. 6. Estudio de la seguridad requerida en el proceso estudio de viabilidad del sistema. Seleccin del equipo de seguridad. Recomendaciones adicionales de seguridad para el sistema de informacin. Evaluacin de la seguridad de las alternativas de solucin. Evaluacin detallada de la seguridad de la solucin propuesta. Catalogacin de los productos generados durante el proceso de estudio de viabilidad del sistema.
Anlisis del sistema de informacin Las funciones de seguridad son un servicio que garantiza la seguridad del sistema de informacin. Un mecanismo de seguridad el la lgica o algoritmo que lo implementa. Actividades: 1. 2. 3. 4. Estudio de la seguridad requerida en el proceso de anlisis del sistema de informacin. Descripcin de las funciones y mecanismos de seguridad. Denicin de los criterios de aceptacin de la seguridad. Catalogacin de los productos generados durante el proceso de diseo del sistema de informacin.
Diseo del sistema de informacin Se minimizan los riesgos intrnsecos al sistema de informacin. Determinar el entorno tecnolgico es importante porque sobre el se implementan las medidas de seguridad. 1. 2. 3. 4. 5. Estudio de la seguridad requerida en el proceso de diseo del sistema de informacin. Especicacin de requisitos de seguridad del entorno tecnolgico. Requisitos de seguridad del entorno de construccin. Diseo de pruebas de seguridad. Catalogacin de los productos generados durante el proceso de construccin del sistema de informacin.
Construccin del sistema de informacin Se debe evitar que se ltren datos relativos al sistema de informacin. Se verica el resultado de las pruebas de las funciones y mecanismos adicionales de seguridad. Tambin se completa la denicin de formacin a usuarios nales. Actividades: 1. 2. 3. 4. Estudio de la seguridad requerida durante el proceso de construccin del sistema de informacin. Evaluacin de los resultados de pruebas de seguridad. Elaboracin del plan de formacin de seguridad. Catalogacin de los productos generados durante el proceso de construccin del sistema de informacin.
Implantacin y aceptacin del sistema Se especican las actividades que tienen que ver con la seguridad del sistema construido, tanto intrnseca como las que tienen que ver con la seguridad del proceso. Asegura que se cubran los requisitos de seguridad a travs de las pruebas de implantacin. Lista de actividades: 1. 2. 3. 4. 5. Estudio de la seguridad requerida en el proceso de implantacin y aceptacin del sistema. Revisin de medidas de seguridad del entorno de operacin. Evaluacin de resultados de pruebas de seguridad de implantacin del sistema. Catalogacin de los productos generados durante el proceso de implantacin y aceptacin del sistema. Revisin de medidas de seguridad en el entorno de produccin.
117
Mantenimiento de sistemas de informacin Actividades: 1. Estudio de la seguridad requerida en el proceso de mantenimiento de sistemas de informacin. 2. Especicacin e identicacin de las funciones y mecanismos de seguridad. 3. Catalogacin de los productos generados durante el proceso de mantenimiento de sistemas de informacin.
8.5.1. La catedral
Es el mtodo tradicional y seguido por la mayor parte de los fabricantes de software hoy en da. Caractersticas: 1. El software de gran tamao se construye como las catedrales, es decir, cuidadosamente planicado por equipos de expertos que se comunican lo justo entre s. 2. Hay poco personal y bien escogido. Aumentar mucho el nmero de personas es caro y pasado cierto punto no acelera el desarrollo, sino que lo ralentiza. 3. No se publican versiones beta hasta poco antes de terminar. 4. El motivo de que las versiones se publiquen tarde en este modelo es que de lo contrario estaran plagadas de errores. 5. Los errores son difciles de encontrar, requieren una fase de pruebas que se hace al nal. 6. El cdigo fuente se guarda a cal y canto. 7. Subyace a l una estructura organizativa piramidal. 8. El jefe de proyecto debe tener gran talento para el diseo.
8.5.2. El bazar
Es diferente al anterior en todos los puntos anteriores: 1. 2. 3. 4. En un principio hay una idea, pero no se tiene una imagen clara de en que se convertir al nal. Existe una ingente cantidad de personas en su elaboracin y cuantos ms mejor. En el momento en el que se puede publicar una versin se hace, aunque est muy incompleta. Los errores se encuentran con facilidad porque hay muchas personas trabajando simultneamente en ello. Su descubrimiento se pone en marcha desde el principio. 5. El cdigo es abierto, o lo que es lo mismo, cualquiera puede leerlo y modicarlo. 6. La estructura organizativa es difusa, hay una serie de normas para participar pero no una jerarqua claramente denida. Una persona puede contribuir durante toda la vida del proyecto o de un modo fugaz. 7. El coordinador del proyecto ms que tener talento tiene que tener olfato para ver cuando una idea de otro es buena e incorporarla.
El kernel de Linux es el paradigma nmero uno que sigue la losofa del bazar. Es un software de gran tamao y complejidad, iniciado en principio como un pequeo proyecto por Linus Torvalds tomando como base el sistema operativo Minix (un antiguo
118
Metodologas de desarrollo
UNIX para clnicos de IBM-PC). El proyecto sigue en la actualidad mas vivo que nunca y cada da va ganando cuota de mercado a sus competidores (a algunos los ha dejado atrs ya, p. ej: SCO-Unix. Segn Eric S. Raymond en su libro [Ray99]: La Catedral y el Bazar, las conclusiones que se sacan del mtodo bazar son: 1. Todo trabajo de software comienza a partir de las necesidades personales del programador. No es lo mismo trabajar para un proyecto a cambio de un salario que trabajar gratis en algo en lo que se encuentra una satisfaccin personal o se cubre una necesidad. Lo segundo motiva ms. 2. Los buenos programadores saben que escribir. Los mejores que reescribir (y reutilizar). Es ms fcil partir de una solucin aunque sea incompleta y mala que de cero. Linus lo que hizo no fue construir un sistema operativo desde la primera lnea de cdigo hasta el nal (probablemente an estara en ello), en lugar de eso, tom como punto de partida Minix. Por tanto, una forma de iniciar un proyecto puede ser buscar un proyecto similar ya hecho y tomarlo como gua. 3. Contemple desecharlo, de todas formas tendr que hacerlo. Al nal todo el cdigo de Minix fue reemplazado, pero mientras existi fue un armazn a partir del cual pudo ir cambiando partes. El cdigo de partida no es importante, de hecho seguro que tiene un montn de errores y no es adecuado a nuestras necesidades, solo sirve para comprender el problema. 4. Si tienes la actitud adecuada, encontrars problemas interesantes. 5. Cuando se pierde el inters en un programa, el ltimo deber es dejarlo en herencia a un sucesor competente. 6. Tratar a los usuarios como colaboradores es la forma ms apropiada de mejorar el cdigo, y la ms efectiva de depurarlo. 7. Publique rpido y a menudo, y escuche a sus clientes. 8. Dada una base suciente de desarrolladores asistentes y beta-testers, casi cualquier problema puede ser caracterizado rpidamente, y su solucin ser obvia al menos para alguien. 9. Las estructuras de datos inteligentes y el cdigo burdo funcionan mucho mejor que en el caso inverso. 10. Si usted trata a sus analistas (beta-testers) como si fueran su recurso ms valioso, ellos le respondern convirtindose en su recurso ms valioso. 11. Lo ms grande despus de tener buenas ideas es reconocer las buenas ideas de sus usuarios. Esto ltimo es a veces lo mejor. 12. Frecuentemente, las soluciones ms innovadoras y espectaculares provienen de comprender que la concepcin del problema era errnea. 13. La perfeccin (en diseo) se alcanza no cuando ya no hay nada que agregar, sino cuando ya no hay algo que quitar. 14. Toda herramienta es til emplendose de la forma prevista, pero una gran herramienta es la que se presta a ser utilizada de la manera menos esperada. 15. Cuando se escribe software para una puerta de enlace de cualquier tipo, hay que tomar la precaucin de alterar el ujo de datos lo menos posible, y nunca eliminar informacin a menos que los receptores obliguen a hacerlo. 16. Cuando su lenguaje est lejos de uno Turing-completo, entonces las ayudas sintcticas pueden ser su mejor amigo. 17. Un sistema de seguridad es tan seguro como secreto. Cudese de los secretos a medias. 18. Para resolver un problema interesante, comience por encontrar un problema que le resulte interesante.
Tutorial posterior
Resumen de contenidos
Una metodologa es una forma de concretar todo lo que se ha visto hasta ahora, que es ms que nada una enumeracin ordenada de tcnicas. Las metodologas tienen un ciclo de vida concreto, son o bien orientadas a objetos o estructuradas, realizan las pruebas de un modo, etc.
Proceso Unicado de Rational (RUP) Es una metodologa desarrollada por las personas que han creado el UML, por lo tanto este se usa a lo largo de todas las etapas. La documentacin recomendada es el libro [JBR00c].
Extreme Programming Es otra metodologa de desarrollo orientado a objetos pensada para proyectos de tamao pequeo o mediano donde se tiene contacto muy directo con el cliente. Contiene conceptos muy interesantes: la programacin por parejas, la publicacin de versiones cada muy poco tiempo, la codicacin de las pruebas para cada unidad antes que la propia unidad, breves reuniones diarias, la integracin secuencial prcticamente a diario, la propiedad compartida del cdigo (todo el mundo puede modicar cualquier parte del cdigo).
119
Mtrica 3 Es la metodologa denida ocialmente en este pas por el Ministerio de Administraciones Pblicas, por lo tanto, es especialmente recomendada para aquellas personas que tengan pensado hacer oposiciones. Su punto de partida es la versin anterior (2.1). Es en parte orientada a objetos y en parte estructurada. Su ciclo de vida es el denido en la norma ISO-12.207. Incluye un conjunto de procesos que no forman parte del ciclo de vida a los que llama interfaces. Tiene en cuenta la tecnologa cliente servidor y el desarrollo de interfaces grcas de usuario (IGU). Mtodos de software libre: Cathedral vs. Bazaar Este apartado es ms que nada una comparacin entre las metodologas de desarrollo seguidas por empresas que ocultan el cdigo fuente (cathedral) y el fenmeno del software libre (bazaar) donde el cdigo est a la vista de todos (open source) y puede contribuir mucha gente.
Extensin de conocimientos
Uno de los libros ms recomendables sobre el Proceso Unicado de Rational es el de los autores originales [JBR00c]. Tambin se puede acceder a otra informacin adicional a travs de las pginas de R ATIONAL en http://www.rational.com/ products/rup/. El proyecto sobre la metodologa Extreme-Programming tiene una pgina muy didctica en http://www.c2.com/cgi/ wiki?ExtremeProgramming, y otra con bastantes descripciones en http://www.extremeprogramming.org/. Tambin se puede encontrar mucha informacin y enlaces relativos al mismo tema en http://www.xprogramming.com/, desde donde adems se puede descargar el libro [JAH00] en formato PDF (de la seccin publications). Tambin se pueden consultar, adems del primero [Bec99], otro libro ms reciente [BF00]. El Ministerio de las Administraciones Pblicas mantiene la informacin relativa a la metodologa Mtrica 3 para la planicacin, desarrollo y mantenimiento de los sistemas de informacin en la pgina http://www.map.es/csi/metrica3/. La direccin donde se pueden encontrar los textos originales y traducciones sobre el libro The Cathedral & the Bazaar es http://tuxedo.org/~esr/writings/cathedral-bazaar/ que corresponde con el libro de Eric S. Raymond del mismo ttulo [Ray99]. Adicionalmente se pueden visitar algunos centros de desarrollo de software libre como: http://www. gnu.org/, http://savannah.gnu.org/,http://sourceforge.net/, http://www.gnome.org/, http://www.kde.org/ http://www.mozilla.org/ donde se puede conseguir una visin de los mtodos usados en el desarrollo del software de libre distribucin y de cdigo abierto.
120
Metodologas de desarrollo
Captulo 9
121
122
9.2.1. Introduccin
Suponga que tiene un proyecto de 1.000.000 de horas donde trabajan 1.000 ingenieros en distintos pases. La pregunta es: Cmo se puede gestionar esto?. Pueden surgir muchos problemas, por ejemplo: un equipo necesita un mdulo que otro equipo est haciendo pero que an no ha terminado, y lo necesita para probar el suyo. Como no lo tienen todava lo simulan, pero puede ocurrir que esta simulacin no se comporte igual al mdulo del otro equipo. Pueden surgir tambin inconsistencias entre los diferentes subsistemas debidas a malos entendidos acerca de los servicios que ofrecen unos a otros, etc. La gestin de la conguracin se realiza desde que comienza el proyecto hasta que termina e involucra la recoleccin y el mantenimiento de toda la informacin sobre hardware y software de los sistemas que se usen. Forma parte de un proceso ms general de gestin de la calidad del software, de hecho, la misma persona o grupo que se encarga de la calidad del software puede encargarse tambin de este apartado. La nalidad de todo esto es tener controlados todos los cambios que se hacen sobre el software y tener toda la informacin necesaria en el momento del mantenimiento. Es conveniente que la gestin de conguracin est basada en algn estndar como el IEEE 828-1983. El problema que plantean la mayora de los estndares publicados es que estn pensados para gestionar un sistema que siga el ciclo de vida en cascada. Para realizar esta gestin existen en el mercado varias herramientas especcas y en muchas herramientas CASE esta actividad tambin est soportada. La primera parte de esta seccin es un resumen del documento de Gestin de conguracin por Anglica de Antonio, que se encuentra en http://www.ls.fi.upm.es/udis/docencia/plani/G_Configuracion.pdf.
9.2.3. Terminologa
Conguracin del software es el conjunto de elementos de conguracin software (ECS) controlados. Cada uno puede tener varias versiones que se suceden en el tiempo.
123
Lnea base es un conjunto de puntos de referencia o hitos que quedan marcados por la aprobacin de uno o varios elementos de conguracin del software mediante una revisin tcnica formal. Versin es un elemento de conguracin en un instante dado. Revisiones son las distintas versiones que van apareciendo. Si una versin y sus revisiones se representan con un grafo, forman una cadena de revisin (ver gura 9.1).
3.0.0
3.0.1
3.0.2
Cadena de revision
3.1.0
3.1.1
Variante
Figura 9.1: Revisiones y variantes Variante es una versin que coexiste con otra y que se diferencia de ella en algunos aspectos. Tipos de variantes: Temporal: Su destino nal es fusionarse con la rama principal. El motivo de su existencia es tener a gente trabajando en paralelo sin que ocurran conictos. La fusin debe hacerse pronto para evitar divergencias. Experimentales: Son prototipos para explorar vas. Nos quedamos con el mejor y tiramos los dems. Pruebas: Se construyen para realizar pruebas. Permanentes: No se mezclan, sirven para distintos tipos de requisitos. Hay dos tipos.
Variantes de requisitos de usuario: Cada variante sirve a un tipo de requisito de usuario. Variantes de plataforma: Por ejemplo para distinto sistema operativo.
Conguracin alternativa es la que compone de un conjunto diferente de elementos de conguracin. Release es una conguracin del sistema que se va a entregar al cliente. Almacenamiento de versiones Hay dos opciones: Guardar la ltima versin de cada ECS. Ventaja: Simplicidad. Inconveniente: No se puede volver atrs despus de un cambio. Guardar las versiones antiguas. Ventaja: Se puede volver atrs. Inconveniente: Es ms complicado de gestionar. Hay que resolver el problema del espacio que ocupa cada cadena de revisin. Interesa minimizar el nmero de revisiones, por eso no se debe crear una nueva con cada mnima modicacin, sino despus de unas cuantas. En un momento dado se congela la versin actual. No se guarda una copia de cada versin, se guarda una copia de una y cada vez que se hace un ckeckout se guardan solo las diferencias entre versiones consecutivas. El conjunto de operaciones que se calcula esas diferencias se llama delta. Hay dos tipos: Delta directo: Cambios para pasar de una versin a la siguiente. Aqu se guarda la primera versin y se van calculando los cambios respecto a la ltima. Delta inverso: Pasa de una versin a la anterior. Se guarda la ltima versin y para recuperar las anteriores hay que calcular su delta. Esta opcin es menos intuitiva que la anterior pero es la ms interesante porque por regla general estaremos interesados en recuperar la ltima versin y as es ms rpido porque no hay que hacer clculos. Los deltas pueden ir mezclados con el chero original o separados. Identicacin de la conguracin No todo lo que se maneja a lo largo del ciclo de vida del sistema se va a incluir entre los documentos a gestionar porque esto generara una cantidad inmanejable de informacin. Hay que hacer una seleccin de las categoras de documentos que se van a incluir. Por ejemplo: los planes del proyecto, las especicaciones, los diseos, el cdigo y las pruebas deben incluirse. Pasos a seguir para la identicacin de elementos: 1. Establecimiento de una jerarqua preliminar. Es un bosquejo de la estructura jerrquica de los elementos de conguracin. Servir como gua para actividades posteriores. 2. Seleccin de los elementos de conguracin. No pueden ser todos porque sera inmanejable ni pocos porque se perdera visibilidad. Criterios para denir elementos de conguracin:
124
Cada funcionalidad del producto debera tener al menos un elemento de conguracin. Si el componente es crtico. Nmero de personas que lo mantienen. Complejidad de la interfaz. Se prev reutilizar en el futuro o es un componente que est siendo reutilizado. Tipo de tecnologa. 3. Relaciones entre ECS. Los tipos de relaciones entre elementos de conguracin son: Equivalencia, composicin, dependencia, sucesin y variante. Se pueden representar mediante un lenguaje de interconexin de mdulos. 4. Denicin de un esquema de identicacin. La informacin de cada elemento de conguracin es: Nmero o cdigo (si es un cdigo puede ser signicativo, en cuyo caso se puede identicar el elemento leyendo su cdigo, escoger un buen sistema de cdigos es complicado), Nombre, Descripcin, Autores, Fecha de creacin, Identicacin del proyecto, Identicacin de lnea base, Fase y subfase de creacin, Tipo de clase, Localizacin, Nmero y fecha de versin. 5. Denicin y establecimiento de lneas base. Una lnea base es un conjunto de hitos denidos a lo largo del proceso de desarrollo. Los objetivos son: Identicar los resultados de las tareas. Asegurar que se ha completado la fase. Formas de denir una lnea base: Fsicamente: Etiquetando cada elemento de conguracin y almacenndolo. Lgicamente: Con un documento que identica el estado del producto en un punto del proceso de desarrollo. 6. Denicin y establecimiento de bibliotecas de software. Una biblioteca es software y documentacin relacionada. Debe existir un miembro del equipo de gestin de conguracin con la funcin de bibliotecario. Se debe poner por escrito (y respetar) los procedimientos para establecer la biblioteca, introducir elementos y acceder a ella. Tipos de bibliotecas: Biblioteca de trabajo: Es una biblioteca de tipo borrador. Contiene documentos del proyecto, codicacin y pruebas unitarias. Posteriormente los elementos se pasan a la biblioteca de Soporte (esta ltima es ms formal). Biblioteca de integracin: Es donde los elementos de conguracin se integran en elementos de nivel superior. Biblioteca de soporte al proyecto. Es la biblioteca ocial. Los elementos aqu introducidos desde las dos anteriores estn sujetos a un control de cambios. Biblioteca de produccin: Es una composicin de las tres anteriores. Biblioteca maestra: Es donde se almacenan las releases. Est sujeta a un estricto control de cambios que restringe mucho las escrituras pero no las lecturas. Repositorio de software: Son todos los documentos que es necesario guardar despus del cierre del proyecto. Biblioteca de backup: Sus elementos no estn sometidos a gestin de conguracin.
125
Los productos son registros e informes. Motivos: Mantener la continuidad del proyecto si por ejemplo hay cambios en la plantilla. Evitar la duplicidad del trabajo. No caer en los mismos errores y poder repetir lo que sali bien. Encontrar causas de fallos. La informacin para esta tarea viene de las otras tres actividades de la gestin de conguracin. El plan de gestin de conguracin debe indicar entre otras cosas la cantidad mnima de informacin a guardar. El mejor sitio para almacenar esta informacin es una base de datos, que puede servir para estimaciones de proyectos futuros o para un anlisis post-mortem. Registros Un registro mantiene la informacin relativa a un producto. Se pueden tener registros de varios tipos: Elementos de conguracin. Lneas base, Solicitudes de cambios, Cambios, Incidencias, Modicaciones del cdigo, Modicaciones de base de datos, Modicaciones sobre documentacin, Releases y variantes, Instalaciones y Actas de las reuniones del comit de control de cambios. Informes Existen dos tipos: Planicados y bajo demanda. Ejemplos: Informe de estado de los cambios, Inventario de los elementos de conguracin, etc.
2. Especicaciones de gestin a) b) c) d) Organizacin. Responsabilidades. Implantacin del plan de gestin de conguracin. Polticas, directivas y procedimientos aplicables.
3. Actividades de gestin de conguracin a) b) c) d) Identicacin de la conguracin. Control de la conguracin. Contabilidad de estado de la conguracin. Auditora de la conguracin.
126
Repositorio CVS
Red
Figura 9.2: CVS Un punto importante es que CVS no es por s mismo la herramienta que sirve para hacer la gestin de conguracin, tan slo gestiona el almacn de cheros. Es decir, cubre buena parte de la gestin de conguracin, pero eso es todo. El problema ms importante que plantea CVS es la gestin de permisos. Hay que tener cuidado acerca de a quin se permite escribir y dnde. El tipo de proyectos sobre los que se puede usar CVS son los de pequeo y mediano tamao, para proyectos grandes existen otras herramientas ms avanzadas como Subversion, Aegis, e incluso otras gratuitas (aunque no de libre distribucin) como BitKeeper (usado para gestionar los fuentes del kernel de Linux), o incluso comerciales como ClearCase. Trminos bsicos Repositorio: Almacn central donde estn las copias maestras. El repositorio central es un rbol de directorios. Mdulo: Un directorio o rbol de directorios del repositorio maestro. RCS (Revision Control System): Conjunto de utilidades de bajo nivel. Check out: Hacer una copia de un chero. Revision: Etiqueta numrica que identica la versin de un chero. Conjunto de comandos La mayora deben ser ejecutados en el directorio en el que est la informacin. cvs checkout (= cvs co): Crea una copia local de los cheros de un mdulo. cvs update: Actualiza las copias con los cambios que se hayan hecho en el repositorio. Los actualizados aparecen con una U. Los modicados en la copia con una M. Aquellos cheros modicados tanto en la copia particular como en la maestra aparecen con una C. cvs commit: Actualiza el repositorio con los cambios hechos en la copia. Si no se ha hecho un update de la versin ms reciente lo hace notar. cvs add y cvs remove: Aade o borra cheros del repositorio. Remove deja los cheros borrados en un limbo del que se pueden rescatar (algo as como la papelera en los entornos de escritorio). cvs release: Sirve para borrar la copia local. Ejemplo: cvs release modulo. Para que esto funcione hay que estar bajo el mdulo. Primero hay que hacer un commit. Para borrar tambin los subdirectorios del mdulo y la copia local: cvs release -d modulo. cvs log: Sirve para ver el historial de comandos aplicados sobre un chero y quien los ha hecho. Ejemplo: cvs log fichero. cvs tag: Se pueden marcar todos los cheros de un mdulo con un nombre simblico. Afecta a las copias. Ejemplo: cvs tag etiqueta [ficheros].
127
cvs rtag: Es lo mismo que el punto anterior pero sobre las copias maestras (las que estn en el repositorio). Ejemplo: cvs rtag ETIQ fuentes. Recorre de forma recursiva los directorios del repositorio bajo fuentes y aade el tag ETIQ a cada chero. cvs history: Da informacin sobre los repositorios CVS. Por defecto slo da toda la informacin que corresponda al usuario. Con la opcin -a da informacin sobre todos los usuarios. cvs -H: Sistema de ayuda. Con cvs -H comando se obtiene la informacin sobre un comando especco.
128
9. La licencia no establece restricciones para otro software: El resto del software que se distribuya no ser afectado por las restricciones del GPL. Los servicios gratuitos que proporciona SourceForge son: repositorio CVS, listas de correo, seguimiento de errores, foros, gestin de tareas software, backups y administracin basada en web.
9.3.1. Introduccin
A continuacin se describen algunas herramientas freeware de creacin de interfaces. El contenido de esta seccin ser familiar para aquellas personas que hayan desarrollado algn proyecto con compiladores con nombre ms comercial como Visual Basic, Delphi o C++ Builder. La razn por la que se incluye este apartado es que las interfaces constituyen el 50 % de las lneas de cdigo de muchos proyectos (la presentacin es importante) y al ser un tipo de actividad susceptible de reutilizar cdigo y al ser bastante mecnica existen herramientas pensadas para acelerar su desarrollo. La idea en la que se basan estos entornos es muy parecida: 1. Se tiene una librera extensa de componentes grcos (etiquetas, editores, botones, etc) que se muestran en una ventana. En cualquier caso, si se necesita un componente que no est es casi seguro que se puede encontrar en algn lugar de internet. 2. Se tiene otra ventana que representa la interfaz grca que se est construyendo donde se depositan los componentes del punto anterior. El modo de hacerlo puede ser arrastrar y soltar. 3. Los componentes tienen variables que se manipulan en tiempo de diseo en la ventana correspondiente. 4. El entorno genera el cdigo que produce la interfaz con un aspecto como el que se est diseando, encargndose de manipular los componentes de forma adecuada pero sin que el programador tenga que escribir el cdigo. 5. El entorno puede ir solo o integrado en un entorno de desarrollo con editor, compilador, etc.
9.3.2. Componentes
Un componente es un objeto, que como todo objeto consta de cdigo y datos. De ellos nos importan tres cosas: 1. Propiedades: Son los valores de las variables pblicas. Son un conjunto de variables que se pueden manipular en tiempo de diseo y de ejecucin y que controlan el aspecto externo de dicho componente. 2. Eventos: Son sucesos como puede ser la pulsacin de una tecla o el movimiento del ratn. Existe un gestor de eventos que captura estos sucesos y manda una seal al objeto adecuado, por ejemplo, si se pulsa el ratn sobre un botn el gestor de eventos invoca el mtodo OnClick de ese botn. 3. Mtodos: Son las funciones del objeto. Se pueden escribir en el diseo, es decir, el desarrollador escribe lo que quiere que ocurra cuando se invoca el mtodo, por ejemplo, que cuando se pulsa un botn (se invoca OnClick) el ttulo del botn cambie. Los componentes estn estructurados en jerarquas, de modo tal que cuando hay que crear un nuevo componente lo mejor es derivarlo de uno antiguo reutilizando tanta funcionalidad como sea posible. Tipos de componentes. La forma de escribir componentes, la forma en la que se comunican con el resto del software e incluso el sitio donde pueden ejecutarse denen una taxonoma muy interesante al respecto. 1. ActiveX: Es un tipo de componente que se distribuye como binario, as que puede estar escrito en cualquier lenguaje de programacin. El objeto tiene una interfaz estndar para que otros objetos se comuniquen con l. Los programas que usan controles ActiveX se llaman contenedores. El contenedor de un control es una aplicacin capacitada para el manejo de ActiveX que acta como soporte de interfaz de usuario para dicho control. Se puede por ejemplo, presentar un botn que, una vez pulsado, enve un mensaje al control. O tambin responder a diversos sucesos o mensajes especiales que se manden desde el control al contenedor. Un ejemplo de contenedor es un navegador, que puede mostrar controles ActiveX en una pgina web incluso aunque el control provenga de un ordenador remoto. 2. VCL (Visual Component Library): Son componentes grcos para la interfaz de usuario. Constan de propiedades, mtodos y eventos. El cdigo que maneja cada evento es escrito en un mtodo. Las propiedades se pueden editar en modo de diseo, de modo que no es necesario escribir lneas de cdigo para inicializar cada componente. Las propiedades y mtodos pueden tener los siguientes tipos de acceso: Privado: El cdigo que no pertenece al componente no puede acceder a esta parte. Protegido: Slo pueden acceder a esta parte los componentes que hereden de este.
129
Publico: Se puede acceder libremente a estos mtodos y propiedades pero no para depuracin. Publicado: Se puede acceder tanto para manipulacin como para depuracin.
9. 10.
9.3.4. Metodologa
Se puede entender una interfaz como una aplicacin en s misma, y por tanto, es razonable que sigamos los mismos pasos que en la construccin de cualquier sistema, esto es, denir una serie de etapas para su construccin. Esas etapas son las de siempre: Especicacin, diseo, codicacin y en lugar de pruebas lo llamaremos test de usabilidad, porque es eso lo que se pretende comprobar. El test de usabilidad valida el diseo de la interfaz de usuario. La forma de realizarlo es sentar a un usuario delante de la mquina con una lista de tareas y pedirle que exprese verbalmente lo que va pensando mientras tanto. De esta forma se puede ver cuales son los problemas que se encuentra la gente La forma de denir una interfaz del sistema para un sistema basado en casos de uso tiene una serie de pasos y subpasos: 1. Dibujar las pantallas de interaccin para los distintos actores-usuarios. Para ello: Copiar el modelo mental del usuario. Revisar los elementos del modelo del mundo interesantes para el actor-usuario. Visualizacin tpica de los elementos del modelo del mundo. Informacin relevante para el actor. Metforas de interaccin vlidas. 2. Especicar el dilogo que da solucin a cada caso de uso que se soluciona con la interaccin con esta interfaz. Puede especicarse este dilogo de varias maneras, dependiendo de la complejidad de la interfaz denida (en esta etapa se sugiere escoger el mnimo nivel de detalle posible, para dar ms libertad de diseo en las etapas posteriores): Por medio de una descripcin textual de su funcionamiento Por medio de diagramas de interaccin que muestren la secuencia de operaciones entre los objetos de interfaz y los actores involucrados. Por medio de diagramas de estados, donde se muestre claramente los estados de la interfaz. Por medio de un prototipo funcional, en trminos de la interaccin con el usuario. 3. Denir restricciones para la comunicacin con actores y sistemas.
130
9.3.6. Glade
Glade es un programa gratuito de desarrollo de interfaces. Usa las libreras de GTK+ y de GNOME. Genera el cdigo que crea la interfaz en varios lenguajes: C, C++ Ada, Perl y Eiffel (con lo que puede considerarse como una herramienta CASE). Tambin es capaz de crear interfaces dinmicas usando libglade. La herramienta se compone de tres ventanas: 1. Ventana principal: Barra de men, la barra de herramientas y una lista de ventanas de alto nivel. 2. El editor de propiedades. 3. La paleta: En ella estn desplegados los elementos que se pueden poner en la interfaz de usuario. Estn divididos en tres categoras: GTK+ Bsico, GTK+ Avanzado y Gnome. La forma de utilizar la herramienta es: Primero se escoge el elemento ventana y entonces se pueden poner otros elementos sobre ella. Para organizar los elementos Glade utiliza cajas. Para poner ms de un elemento en la ventana hay que poner primero cajas. Las hay de seis tipos: caja horizontal, caja vertical, tabla, posiciones ajustables, caja de botones horizontal, caja de botones vertical y las cajas a su vez se pueden anidar. Cuando se crean cajas horizontales y verticales hay que especicar el nmero de las y columnas. Cuando se selecciona un componente la ventana de propiedades muestra sus propiedades. Existe un rbol de componentes que se puede ver seleccionando: View y Show widget tree. Tambin hay un editor de mens, tanto los normales como los emergentes, que pueden ser anidados. El editor tambin crea manejadores de seales para cada opcin, que son las funciones invocadas cuando una opcin de men es seleccionada. Un evento es un tipo de suceso, como puede ser presionar seleccionar una opcin de men o pulsar un botn. Cuando ocurre un evento el sistema llama a una funcin que lo trata y es en esa funcin donde se escribe el cdigo con las instrucciones que se deben ejecutar para responder al evento. Por ejemplo, si se pulsa una opcin de men File->Save en un editor de texto, habr que guardar el texto en un chero. Glade genera automticamente los nombres de las funciones que responden a los eventos y al menos cada elemento tiene uno.
9.3.7. GTK+
GTK+ (GIMP ToolKit) es una librera en lenguaje C para crear interfaces grcas de usuario. Tiene licencia GPL, lo cual signica que es open source y de libre distribucin. Fue diseado originalmente como una herramienta de desarrollo del GIMP (General Image Manipulation Program) y est construido sobre GDK (GIMP Drawing Kit) que es un aadido de las libreras Xlib. GTK+ es un interfaz de programacin de aplicaciones orientadas a objetos (API). Aunque est escrito en lenguaje C, fue pensado con la idea de las clases y los punteros a funciones. Al igual que el anterior permite usar gran variedad de componentes (botones, cajas, etc), pero tiene una exibilidad mayor en el sentido de que los componentes estn formados a su vez partiendo de otros componentes, que lgicamente pueden ser
131
reemplazados. Por ejemplo, un botn puede tener como hijo un componente etiqueta para representar el texto, pero se puede sustituir por un bitmap. Por ltimo, GTK+ dene un conjunto de tipos dinmico propio con reglas nuevas acerca de como gestionarlos.
9.3.8. Anjuta
Es un entorno de desarrollo escrito por un estudiante de informtica de ltimo curso llamado Kh. Nabakumar Singh (Anjuta es el nombre de su novia). Esta pensado para proyectos en C/C++ para GTK+/GNOME, es decir, para GNU/Linux. Anjuta es libre y su cdigo fuente est disponible en la red. Proporciona una IGU (interfaz grca de usuario) dividida en tres partes: Editor: Muestra el texto coloreado. Tiene las funciones estndar de Crear, Salvar, Buscar, etc. Proyecto. Mensajes. Las funcionalidades ofrecidas son accedidas a travs de un sistema de mens que se pueden desmontar de su lugar original. Las funciones ms comunes pueden encontrarse en las cuatro barras de herramientas. Desde el entorno se puede compilar y ejecutar el programa. Puede asimismo congurarse para especicar rutas de cheros include, rutas de libreras, libreras para enlazar, macros, tipos de alertas del compilador, optimizaciones del cdigo, etc. El entorno consta asimismo de algunas utilidades para gestionar proyectos. Existe tambin la posibilidad de depurar el programa, o lo que es lo mismo, de ejecutarlo paso a paso, poner puntos de ruptura, evaluar expresiones, ver los registros de la CPU, etc.
Tutorial posterior
Resumen de contenidos
En captulo se han colocado todos aquellos temas que no tienen entidad suciente como para ser un captulo por s mismos, es decir, el captulo es una recopilacin de conceptos interesantes y prcticos acerca de la ingeniera del software. Herramientas CASE Una herramienta CASE es una aplicacin diseada para facilitar tareas mecnicas que se realizan en las diferentes etapas del ciclo de vida. Hay varios tipos y las mejores son las que cubren todas las etapas del ciclo de vida y pensadas adems para una metodologa concreta. Se incluye una clasicacin de herramientas CASE. Gestin de la conguracin Es el conjunto de prcticas y tcnicas que ayudan a gestionar todos los documentos (cdigo, manuales, etc.) que se generan a lo largo del ciclo de vida del proyecto. Existen herramientas que lo soportan, como CVS del que se hace una pequea descripcin. Los temas que importan en la gestin de la conguracin son: cules son los documentos que hay que guardar, cmo se almacenan, cmo se relacionan entre s y cmo se gestionan los cambios. El plan de gestin de la conguracin es un documento que dene la poltica a seguir. Se da una plantilla de dicho documento. CVS es una herramienta de libre distribucin para la gestin de la conguracin que se puede encontrar en cualquier sistema de tipo UNIX GNU/Linux. Se describe brevemente por estar muy extendida. Sourceforge http://sourceforge.net/ es un ejemplo de almacn centralizado en Internet para el desarrollo de software de libre distribucin. Se hace un listado de sus caractersticas ms relevantes y se dene lo que se entiende por software libre. Entornos de desarrollo de interfaces El desarrollo de interfaces es importante por el porcentaje tan elevado de lneas de cdigo que suponen en un proyecto (en torno al 50 %). Para este n se han desarrollado herramientas CASE concretas que facilitan el trabajo mecnico. Los componentes son mdulos de software reutilizable, sobre todo en interfaces grcas. Tipos de componentes: ActiveX y VCL. En la creacin de interfaces de usuario se dene un conjunto de objetivos que tiene que cumplir toda interfaz, todos ellos estn orientados a usuarios, una metodologa para el desarrollo de interfaces y heursticas de usabilidad. Se ve una somera descripcin de algunas herramientas de libre distribucin para desarrollo de interfaces: Glade, Gtk y Anjuta.
132
Extensin de conocimientos
La mayor fuente alternativa para extender conocimientos en este tema es Internet. Todas las herramientas y entornos explicados tienen pginas Web propias. En particular sobre herramientas CASE se recomiendan las direcciones: http://www.cs.queensu.ca/FAQs/SE/ que contiene enlaces a un extenssimo catlogo con herramientas CASE clasicadas y que forma parte de la FAQ del grupo de foros USENET news://comp.software-eng, hay una copia en http://www.faqs.org/faqs/software-eng/, y ver tambin en http://sdt.cern.ch/ la pgina del Software Development Tool Service del CERN. Sobre el sistema CVS se puede consultar directamente el manual en lnea http://www.cvshome.org/docs/manual/ en el propio dominio del proyecto, o bien la parte en linea de libre distribucin del libro [FB00] en http://cvsbook.red-bean. com/cvsbook.html. Actualmente est en desarrollo (bastante avanzado) una nueva herramienta de gestin de versiones con el objetivo de sustituir a CVS, se trata de S UBVERSION cuya pgina de desarrollo es: http://subversion.tigris.org/. Tambin podemos incluir en este apartado A EGIS que es un entorno de gestin de desarrollo para proyectos y utiliza una interfaz Web (aparte de lnea de comandos), con ms informacin en la pgina http://aegis.sourceforge.net/. Para las diferentes herramientas de desarrollo propuestas se pueden visitar directamente las paginas correspondientes: http: //glade.gnome.org/ sobre G LADE (y tambin de A NJUTA http://anjuta.sourceforge.net/ que utiliza G LADE), http: //www.wxwindows.org/ sobre WX W INDOWS, http://www.kdevelop.org/ sobre K DEVELOP.
Apndice A
Glosario de trminos
Abstraccin: Separar las caractersticas que interesan para un modelo de las irrelevantes. Acoplamiento: Medida de la complejidad de los interfaces de los mdulos. ActiveX: Tipo de componente distribuido como binario. Actividad: Cada una de las partes en las que se divide una fase. Actividades, diagrama: Grco de UML que modela el comportamiento interno de una clase. Actividades, diagrama de: Grco UML que muestra el comportamiento y la participacin de las clases en el mismo. til para ujos de trabajo. Actor: Persona o sistema que juega un papel en la interaccin con un sistema. Agregacin: Relacin entre dos clases en la que una es parte de la otra. Alcance: Visibilidad de un atributo. Puede ser pblico, protegido o privado. Almacn: Es un conjunto de datos esttico. Puede ser un archivo o una base de datos. Alto nivel, lenguajes: Son lenguajes con alto nivel de abstraccin. Hacen lo mismo que un lenguaje de bajo nivel pero con menos lneas. mbito: Nmero de veces que existe el objeto. De instancia: Una por cada instancia de la clase. Archivador: Una nica vez, como las variables static de Java. Anlisis: Etapa donde el problema es la comprensin de las necesidades. Anlisis crtico: Actividad que se realiza desde el principio del proyecto para localizar los problemas de alto riesgo. Anlisis de valores lmite: Tcnica de generacin de casos de prueba conjunta con particiones de equivalencia que genera casos de prueba cercanos al mximo o mnimo tamao de un array o al mximo o mnimo nmero de iteraciones de un bucle. rboles de decisin: Grco en forma de rbol para escribir una especicacin de procesos cuando se tiene un conjunto de unas pocas variables y se toman decisiones en funcin de los valores que tomen. Asociaciones: Relacin que se establece entre dos o ms clases. Atributo: Variable de una clase. Auditora: Examen del sistema preferiblemente por parte de una organizacin no involucrada en el proceso de desarrollo. Tipos: regulares, especiales, sorpresa, de seguimiento, nanciera, operacional, de gestin e informtica. Brainstorming: Tcnica poco estructurada de obtencin de requisitos en una reunin. Caja blanca, pruebas: Pruebas que tienen en cuenta la estructura lgica del programa. Caja de cristal, pruebas: Ver caja blanca. Caja negra, pruebas: Pruebas que tienen en cuenta las especicaciones. Calicacin: Atributo que rebaja la cardinalidad de una parte de la asociacin entre dos clases. Cardinalidad: Nmero de entidades que estn asociadas con otra(s) en una relacin. Cascada: Ciclo de vida lineal. 133
134
Glosario de trminos
CASE: (Computer Aided Software Engineering) Herramienta para automatizar o facilitar parte o todo el trabajo mecnico (no creativo) de parte o todo el ciclo de vida. Casos de prueba: Conjunto de entradas y de salidas esperadas para esas entradas. Casos de uso: Mtodo de anlisis para una interaccin del sistema con el usuario u otro sistema. Ciclo de vida: Conjunto de etapas por las que pasa un sistema informtico desde su concepcin hasta su retirada. Clase: Estructura de datos con las operaciones relativas a esos datos. Clases, diagrama: Principal tipo de diagrama en UML que muestra las clases y las relaciones que tienen. Clases de equivalencia: Agrupaciones de las entradas iguales a efectos de las pruebas. Cleanroom: Tcnica de generacin de software basada en mtodos formales para minimizar el nmero de errores. Cliente-servidor: Arquitectura de sistemas distribuidos con una parte que funciona como interfaz (cliente) y otra que gestiona recursos y realiza el trabajo (servidor). Codicacin: Etapa del ciclo de vida en la que se escribe el cdigo fuente. Cdigo heredado: (legacy code) Cdigo de aplicaciones antiguas posiblemente muy remendado y sin documentacin. Cohesin: Caracterstica de un mdulo. Un mdulo tiene cohesin si sus tareas son independientes del resto del sistema pero estn relacionadas entre s. Colaboracin, diagrama: Indica interacciones entre objetos a travs de los enlaces que hay entre ellos. Similar al diagrama de secuencia. Complejidad ciclomtica: Medida de la complejidad de un programa, igual al nmero de caminos independientes que tiene. Componentes: Software pensado para ser reutilizable. Consta de cdigo y datos. Componentes, diagrama: Grco de UML que muestra la organizacin y dependencias entre componentes. Composicin: Es un tipo de agregacin en la que cada componente pertenece a un todo y slo a ese. Congruencia: Un mtodo es congruente si tiene un nombre similar a mtodos similares, condiciones, orden de argumentos, valor proporcionado y condiciones de error. Contexto, diagrama: Representacin del sistema y entidades externas que interaccionan con l. CORBA: (Common Object Request Broquer Architecture) Sistema distribuido multiplataforma basado en objetos. Cada uno puede ser cliente y servidor. CRC: Mecanismo para representar clases e interacciones entre ellas. Crisis del software: La consecuencia de escribir cdigo sin plantear seriamente metodologas para el anlisis, diseo y mantenimiento. CVS: (Concurrent Versioning System) Almacenamiento de cheros con capacidad de trazar las aportaciones de cada persona y la historia de cada archivo. Defecto: El sistema hace algo de forma equivocada. Es la consecuencia de un error y se maniesta a travs de un fallo. DFD: (Diagrama de Flujo de Datos) Herramienta del diseo estructurado para modelar la transformacin o transaccin de la informacin. Diccionario de datos: Descripcin detallada de los ujos de datos Diseo: Etapa del ciclo de vida en la que se divide el sistema en subsistemas y posteriormente se decide cmo sern las estructuras de datos y algoritmos. Distribucin, diagrama: Grco de UML que reeja la organizacin del hardware. Encapsulamiento: Propiedad por la que un objeto o mdulo proporciona al exterior las funciones necesarias para su manejo y no los detalles internos. Entidad-Relacin: Modelo de datos del diseo estructurado. Entidades externas: Personas o sistemas que interaccionan con el sistema. Entrada/Salida, pruebas: Ver caja negra.
135
Entrevistas: Tcnica de obtencin de requisitos que consiste en hablar con un usuario. Error: Equivocacin de un desarrollador en cualquiera de las fases. Produce uno o ms defectos. Especicacin: Traduccin de los requisitos del anlisis a un documento que sirva para empezar el diseo. Especicacin de control: Muestran como a partir de seales de control se activan o desactivan procesos del diagrama de ujo de control asociado. Especicacin de procesos: Concretar en pseudocdigo o en algn lenguaje de programacin cmo es un mdulo que ya no se puede descomponer ms. Espiral, ciclo de vida: Ciclo de vida con varias iteraciones. Hace nfasis en el control del riesgo. Tpico en la orientacin a objetos. Estados, diagrama: Representacin del comportamiento interno de un sistema. Estereotipos: Forma de dar nombre a un elemento que no forma parte del estandar de UML. Estructurales, pruebas: Ver pruebas de caja blanca. Estructuras, diagrama: Mtodo de descomposicin funcional donde el bloque bsico es el mdulo. Etapa: Cada una de las partes de las que se compone el ciclo de vida. Factor de calidad: Forma de determinar la calidad de un software. Estn divididos en funcin de criterios de operacin, revisin y transicin. Cada uno se obtiene a partir de varias mtricas. Fallo: Manifestacin de un defecto. Flujo de datos: Representacin de datos que se mueven entre procesos o entidades externas. Flujo de control: Diagrama que informa sobre cuando y en que orden ocurren los sucesos. Framework: Conjunto integrado de componentes que colaboran para proporcionar una arquitectura reutilizable para una familia de aplicaciones. Fuente, ciclo de vida: Ciclo de vida para sistemas orientados a objetos. Funcionales, pruebas: Ver caja negra. Generalizacin: Ver herencia. Grafo de ujo: Representacin de un programa usada para el diseo de casos de prueba estructurales. Herencia: Mecanismo por el que unas clases mantienen los mismos mtodos y propiedades de otras a las cuales amplian. HIPO, diagramas: (Hierarchy Input Process Output) Diagrama de diseo que muestra entradas, salidas y funciones. IDL: (Interface Denition Languaje) Lenguaje formal para expresar interfaces. Incremental: Ciclo de vida derivado del de cascada pero con iteraciones para implementar distintas partes del sistema. Ingeniera inversa: Anlisis de un producto construido para comprender sus principios de diseo. Indicador: Medida numrica para comprobar algo de un modo objetivo. Los hay econmicos, nancieros, de ocupacin laboral y de gestin. Inspecciones: Revisin del cdigo sin ejecutarlo. Muy estructurada y realizada por un equipo. Interfaz: Conjunto de servicios proporcionados por una clase. JAD: (Joint Application Design) Tcnica muy estructurada de obtencin de requisitos en una reunin. Java Beans: Componentes escritos en java. Jackson, diagramas: Produce una especicacin del programa a partir de una especicacin de las entradas y las salidas, que deben ser secuenciales. JRP: (Joint Requirements Planning) Subconjunto del JAD para obtencin de requisitos de alto nivel. Lenguaje estructrado: Pseudocdigo para escribir las especicaciones de proceso. Lnea base: Puntos de referencia en la gestin de conguracin. Mantenimiento: Etapa nal del ciclo de vida. Consume la mayor parte de los recursos.
136
Glosario de trminos
Mantenibilidad: Cualidad de una aplicacin que hace que el mantenimiento sea ms fcil. Metodologa: Modo sistemtico de fabricar un producto. Mtricas: Medidas numricas sobre alguna cualidad de un programa. Modelo: Abstraccin de la realidad donde se omite lo no esencial. Mdulo: Cada una de las partes con entidad propia en las que se divide un sistema. Modularidad: Propiedad del software. Un programa es modular si est dividido en partes con tareas denidas. Multiplicidad: Nmero de elementos que estn en los lados de una relacin. Navegabilidad: Posibilidad de moverse de una clase a otra utilizando las relaciones que hay entre ellas. Normalizacin: Algoritmos que convierten una base de datos en otra equivalente pero sin anomalias de insercin, borrado y modicacin, ms eciente y menos redundante. Notas: Explicaciones de los elementos de notacin de UML. Objeto: Instancia de una clase. OCL: (Object Constraint Languaje) Lenguaje formal para expresar restricciones. Paquetes: Conjunto de clases relacionadas entre si. Patrones: Prototipos de soluciones para problemas conocidos. Los hay de anlisis, arquitectnicos, de diseo, de codicacin y de organizacin. Persistencia: Caracterstica de un objeto que se puede escribir en disco para posteriormente ser recuperado. Polimorsmo: Capacidad de un conjunto de objetos de responder a un mensaje con el mismo nombre o a un objeto de poder responder a un mismo mensaje con distintos parmetros. Privado: Tipo de alcance ms restrictivo posible. Una propiedad de este tipo solo puede ser accedida dentro de la clase en la que est declarada. Proceso: Subsistemas o funciones en las que se divie el sistema. Protegido: Tipo de alcance que restringe el acceso a la clase en la que se ha declarado y a sus descendientes. Prototipo: Versin reducida de la aplicacin nal. Se construye para obtener requisitos o para partiendo de l hacer incrementos hasta el sistema nal. Pruebas: Batera de test que el sistema tiene que superar para ser considerado operativo. Pblico: Tipo de alcance que permite el acceso a cualquier otra clase. Reduccin de riesgos, cascada con: Ciclo de vida cascada con iteraciones en el anlisis y diseo global. Reingeniera: Reconstruccin completa de una aplicacin antigua utilizando tcnicas modernas. Requisitos funcionales: Lo que el sistema hace para el usuario. Requisitos no funcionales: Caractersticas del sistema (abilidad, mantenibilidad, etc). Se tienen en cuenta en la fase de diseo. Responsabilidades: Descripcin de lo que hace una clase. Revisin: Las distintas versiones de un elementos software que van surgiendo. Sashimi, ciclo: Ciclo de vida en cascada con solapamiento entre las fases. Secuencias, diagrama: Grco de UML que muestra los mensajes intercambiados entre objetos teniendo en cuenta el tiempo. Sistema: Conjunto de elementos que cooperan entre si para proporcionar servicios. Sistemas, ingeniera de: Herramientas y metodologas para crear sistemas. Software, ingeniera del: Herramientas y metodologas para crear software. Tarea: Una etapa (p.ej. el diseo) se descompone en tareas. Una tarea puede realizarse a lo largo de varias etapas, por ejemplo la documentacin. Tablas de decisin: Forma de escribir una especicacin de procesos cuando hay muchas variables y en funcin de su valor se toman decisiones.
137
Transicin de estados: Diagrama de UML que reeja los cambios que esperimenta una clase como si fuera un autmata nito. UML: (Unied modeling languaje) Notacin de facto para el modelado de sistemas orientados a objetos. V, ciclo de vida en: Ciclo de vida similar al de cascada pero que toma en consideracin el nivel de abstraccin de cada una. El anlisis valida el mantenimiento y el diseo verica las pruebas. Validacin: Comprobacin de que el sistema cumple con las especicaciones funcionales y no funcionales. Variante: Versin de un elemento software que cohexiste con otra con algunas diferencias. VCL: (Visual Component Library) Componente grco. Vericacin: Comprobacin de que el sistema funciona correctamente. Versin: Un elemento software en un momento dado. Walkthrough: Revisin del cdigo sin ejecutarlo. Realizado por un equipo. Warnier, diagramas: Representacin jerrquica de la estructura de los programas y estructuras de datos.
138
Glosario de trminos
Bibliografa
[Bau72] [Bec99] [BF00] [BMP87] [Boo94] [CCEG00] [DEM02] [FB00] [Fow97] [FW94] [Gau01] [GW89] [Haw98] [Hum95] [Hum01] [Jac92] [JAH00] [JBR00a] [JBR00b] [JBR00c] [Mey98] [Pre97] [Pre01] [PV96] [Ray99]
F. L. Bauer. Software Engineering. Information Processing, (71), 1972. Kent Beck. Extreme Programming Explained: Embrace Change. Addison-Wesley, 1999. Kent Beck and Martin Fowler. Planning Extreme Programming. Addison-Wesley, 2000. Doug Bell, Ian Morrey, and John Pugh. Software Engineering: A Programming Approach. Prentice Hall, 1987. Grady Booch. Object-Oriented Analysis and Design. Benjamin Cummings, 1994. J. A. Cerrada, M. Collado, J. F. Estvaliz, and S. R. Gmez. Introduccin a la Ingeniera de Software. Ceura, 2000. Allen Downey, Jeff Elkner, and Chris Meyers. How to Think Like a Computer Scientist: Learning with Python. Green Tea Press, 2002. http://thinkpython.com. Karl Fogel and Moshe Bar. Open Source Development With CVS. The Coriolis Group, 2000. Martin Fowler. UML Distilled. Addison Wesley, 1997. Neville J. Ford and Mark Woodroffe. Introducing Software Engineering. Prentice-Hall, 1994. Alan Gauld. Learn to Program Using Python. Addison-Wesley, 2001. Donald A. Gause and Gerald M. Weinberg. Exploring Requirements: Quality Before Design. Sei Series in Software Engineering. Dorset House, 1989. I. T. Hawryszkiewycz. Introduccin al anlisis y diseo de sistemas. Anaya, 1998. Watts S. Humphrey. A Discipline for Software Engineering. Addison-Wesley, 1995. Watts S. Humphrey. Introduccin al Proceso Software Personal SM . Addison-Wesley, 2001. Ivar Jacobson. Object Oriented Software Engineering. Addison Wesley, 1992. Ron Jeffries, Ann Anderson, and Chet Hendrickson. Extreme Programming Installed. Addison-Wesley, 2000. ftp://ftp.xprogramming.com/ftp/xpinstall.pdf. Ivar Jacobson, Grady Booch, and James Rumbaugh. El lenguaje unicado de modelado. Addison Wesley, 2000. Ivar Jacobson, Grady Booch, and James Rumbaugh. El lenguaje unicado de modelado. Manual de referencia. Addison Wesley, 2000. Ivar Jacobson, Grady Booch, and James Rumbaugh. El proceso unicado de desarrollo de software. Addison Wesley, 2000. Bertrand Meyer. Construccin de Software O-O. Prentice Hall Iberia, 1998. Roger S. Pressman. Ingeniera de Software: un Enfoque Prctico. McGraw-Hill, 1997. Roger S. Pressman. Ingeniera de Software: un Enfoque Prctico. McGraw-Hill, 2001. Mario G. Piattini Velthuis. Anlisis y diseo detallado de aplicaciones informticas de gestin. RAMA, 1996. Eric S. Raymond. The Cathedral & the Bazaar. http://tuxedo.org/esr/writings/cathedral-bazaar/. OReilly & Associates, Inc., October 1999.
James Rumbaugh, Michael Blaha, William Premerlani, Frederick Eddy, and William Lorensen. Modelado y diseo orientado a objetos. Metodologa OMT y OMT II. Prentice Hall, 1996. Stephen R. Schach. Practical Software Engineering. Aksen Associates, 1992. Stephen R. Schach. Object oriented and classical software engineering. Mc GrawHill, 2001. 139
140
Bibliografa
Joseph Schmuller. Aprendiendo UML en 24 horas. Prentice Hall, 2001. Ian Sommerville. Ingeniera de Software. Addison-Wesley Iberoamericana, 1998. Ian Sommerville. Software Engineering. Addison-Wesley, 2001.
[WBWW90] Rebecca Wirfs-Brock, Brian Wilkerson, and Lauren Wiener. Designing Object-Oriented Software. Prentice Hall, 1990.
ndice alfabtico
Aceptacin, 76 ActiveX, 128 Actividades, 103 Actor, 91 Adecuacin, 3 Almacn, 117 Anlisis, 34, 116 Clase, 93 Modelo, 93 Paquete, 93 Paquete de servicio, 93 RUP, 93 Anlisis costo-benecio, 78 Anlisis de riesgo, 78 Anlisis de sistema de informacin, 114 Anlisis de sistemas de informacin, 106 Anjuta, 131 Argumentos, 62 Arquitecto, 96 Arquitectura Anlisis, 93 Descripcin, 91, 93 Diseo, 95 Implementacin, 96 Arquitectura de capas, 89 Arquitectura de mdulos Diseo, 107 Arquitectura de soporte Diseo, 107 Arquitectura del sistema Denicin, 108 Artefactos, 93, 96 Aseguramiento de la calidad, 113 Asignacin, 62 Asociaciones, 54 C++, 54 Java, 55 Ayuda, 130 Bazaar, 117 Biblioteca de software, 124 Biblioteca de backup, 124 Biblioteca de integracin, 124 Biblioteca de produccin, 124 Biblioteca de soporte, 124 Biblioteca de trabajo, 124 Biblioteca maestra, 124 Repositorio de software, 124 Bibliotecario, 124 Bloques, 61 Brainstorming, 37 C++, 3 Cdigo Propiedad compartida, 103 Cdigo externo, 56 Cambios de estado, 124 Capa intermedia, 89 Carga inicial, 108 Caso de prueba, 97 Caso de uso, 91 Anlisis, 94 Diseo, 95 Instancia, 91 Realizacin, 94 Casos de uso, 39, 40, 52, 86 Actor, 39 Rol, 39 Actores abstractos, 41 Casos de uso abstractos, 41 Casos de uso de implementacin, 41 Casos de uso esenciales, 41 Casos de uso primarios, 42 Casos de uso secundarios, 42 Casos de uso temporales, 42 Comunicates, 16 Detallar, 92 Diseo, 108 Estructura, 92 Extends, 16 Include, 16 Priorizar, 92 Realizacin, 93 Cast, 63 Cathedral, 117 Check out, 126 Ciclo de vida, 4 Cascada con reduccin de riesgos, 7 Cascada con subproyectos, 6 Cascada incremental, 7 Ciclo de vida en cascada, 4 Ciclo de vida en V, 6 Diseo, 94 Espiral, 7 Fuente, 9 Sashimi, 6 Cierre, 76 Clase, 10 Abreviada, 11 Abstracta, 10 Anlisis, 94 Asociacin, 12 Agragacin, 13 Calicacin, 13 Composicin, 13 Dependencia, 13 Herencia y generalizacin, 13 Interfaces, 13 Multiplicidad, 12
141
142
ndice alfabtico
Navegabilidad, 13 Reexiva, 12 Rol, 12 Atributos, 10 Diseo, 95 Estereotipo, 11 Implementacin, 97 Mtodos, 11 Nombre, 10 Notas, 11 Objeto, 11 Paquete, 11 Responsabilidades, 11 Clase del diseo, 94 Clases, 61 Diseo, 108 Java, 67 ClearCase, 126 Cliente, 102 Cliente/Servidor, 103 code-and-x, 2 Codicacin Estndares, 102 Prueba de unidad, 101 Unidad, 101 Comentarios, 58, 60 Java, 66 Componente, 96 Componente de prueba, 97 Componentes, 128 Conguracin del software, 122 Congelar, 123 Const, 61 Constantes Java, 67 Construccin, 116 Construccin de sistemas de informacin, 109 Constructores, 62 Control de cambios, 124 Control de ujo, 61, 64 Contruccin del sistema de informacin, 114 Correccin, 3 Creacin de objetos, 53 C++, 53 Java, 53 CVS, 125 Declaracin, 58 Funciones, 58 Variables, 58 Declaraciones Java, 66 Defecto, 97 Denicin de clases, 52 C++, 52 Java, 53 Delegacin, 56 Delta, 123 Delta directo, 123 Delta inverso, 123 Demeter, 56 Destruccin de objetos, 53 C++, 53 Java, 53
Destructores, 62 DFD, 3 Diagrama de actividades, 19 Actividades, 19 Actividades concurrentes, 19 Bifurcaciones, 19 Indicaciones, 19 Punto nal, 19 Punto inicial, 19 Transiciones, 19 Diagrama de casos de uso, 15 Diagrama de clases, 14 Diagrama de colaboracin, 20 Diagrama de componentes, 19 Diagrama de distribucin, 20 Nodo, 20 Diagrama de estados, 17 Do, 17 Entry, 17 Exit, 17 Diagrama de objetos, 15 Diagrama de secuencias, 17 Activacin, 17 Boundary classes, 18 Condicionales, 17 Creacin, 18 Destruccin, 18 Iteracin, 18 Lnea de vida, 17 Mtodos recursivos, 18 Mensaje, 17 Tiempos de transicin, 17 Diccionario de datos, 3 Directorio, 68 Diseador de pruebas, 97 Disear prueba, 98 Diseo, 116 Revisin, 48 RUP, 94 Subsistema, 94 Validacin, 49 Vericacin, 48 Diseo de detalle, 107 Diseo de sistemas de informacin, 107 Diseo del sistema de informacin, 114 Diseo fsico de datos, 107 Disponibilidad, 3 Documentacin, 68, 130 Eciencia, 3 Entrevistas, 35 Fases, 35 Errores, 64, 102, 130 Especicacin, 34 Especicacin de procesos, 3 Especicaciones de construccin, 108 Especicaciones de la base de datos, 79 Especicaciones de sistema, 78 Especicaciones de subsistema, 78 Especicaciones del programa, 79 Estudio de la viabilidad, 105 Estudio de viabilidad, 78, 113, 116 Etapas ciclo de vida, 4 Anlisis, 4
ndice alfabtico
143
Codicacin, 4 Diseo, 4 Mantenimiento, 4 Pruebas, 4 Evaluacin de prueba, 97 Evaluar prueba, 98 Eventos, 128 Excepciones, 64 Explicativo, 68 Expresiones, 64 Extensibilidad, 56 Extreme programming, 98 Fiabilidad, 3 Finalizacin, 75, 113 Flujo de sucesos, 91 Flujo de trabajo, 92, 93, 95, 96 Flujos de trabajo, 98 Friend, 61 Funciones, 61 Generacin de especicaciones de construccin, 110 Gestin de cambios, 112 Gestin de la conguracin, 115, 122 Gestin de proyectos, 112 Gestor de eventos, 128 Glade, 130 Glosario, 91 GNU, 127 GPL, 127 GTK+, 130 Herencia, 54, 62 C++, 54 Esttica, 54 Implcita, 54 Java, 54 Por grupos, 54 Heursticas de usabilidad, 130 Historias de usuario, 99 IGU, 103 Implantacin de sistemas de informacin, 110 Implantacin y aceptacin, 115 Implantacin y aceptacin del sistema, 116 Implementacin, 96 Implementar prueba, 98 Include, 60 Indicadores, 76 Informes, 125 Ingeniera de sistemas, 2 Ingeniera del software, 2 Ingeniera directa, 52 Ingeniera inversa, 52 Ingeniero de componentes, 96, 97 Ingeniero de pruebas de integracin, 97 Ingeniero de pruebas de sistema, 97 Inicio de proyecto, 112 Inline, 61, 63 Instrucciones de soporte, 82 Integracin, 96, 101 Secuencial, 101 Integrador de sistemas, 96 Integridad, 122 Interfaces, 103, 112
Java, 67 Interfaz, 95, 96 Interfaz de usuario Diseador, 91 Prototipo, 91, 92 Invocacin de mtodos, 53 C++, 54 Java, 54 Islas de conocimiento, 103 Iteracin Planicacin, 90, 100 Iteraciones, 90 JAD, 35 Java, 3 JRP, 37 Lnea base, 123, 124 La crisis del software, 2 Libreras del sistema, 82 Licencia, 127 Linux, 117 Mtodos Java, 67 Mdulo, 126 Mantenibilidad, 3 Mantenimiento, 117 Mantenimiento de sistemas de informacin, 111 Mantenimiento del sistema de informacin, 115 Manual de explotacin, 109 Manual de mantenimiento, 79 Manual de operacin, 79 Manual de pruebas, 82 Manual de usuario, 79, 109 Material de capacitacin, 82 Memoria, 64 Metodologa, 2, 129 Estructurada, 3 Orientada a objetos, 3 Migracin, 108 Minimalista, 130 Miniprototipo, 100 Modelado del dominio, 91 Modelado del negocio, 91 Modelo, 10 Modelo de casos de uso, 91 Modelo de despliegue, 95 Arquitectura, 95 Modelo de diseo, 94 Arquitectura, 95 Modelo de implementacin, 96 Modelo de implementacion Vista de la arquitectura, 96 MTBF, 3 Multiplataforma, 64 Nombre, 59 Nombres, 60 Java, 67 Nomenclatura, 102 Normas, 57 C, 57 C++, 59 Java, 65
144
ndice alfabtico
OMT, 10 OOSE, 10 Optimizaciones, 102 Overow, 65 Pblico, 129 Pair programming, 103 Paquete Anlisis, 94 Paquetes Java, 67 Personal, 102 Plan de instalacin, 79 Plan de integracin de construcciones, 96 Plan de proyecto, 78 Plan de prueba, 97 Plan de pruebas, 72 Especicacin tcnica, 108 Plan de publicacin, 99 Plan de sistemas de informacin, 104 Planicacin, 104, 116 Planicar prueba, 98 Prcticas, 103 Prlogo, 68 Privado, 128 Procedimiento de prueba, 97 Procedimientos, 80 Procedimientos de migracin y carga de datos, 110 Procedimientos de operacin, 109 Procedimientos de seguridad, 109 Procesos, 103, 104 Protegido, 128 Prototipos, 38 Componentes reutilizables, 38 Nivel de aplicacin, 39 Nivel de componente, 39 Desarrollo rpido de prototipos, 38 Lenguajes de alto nivel, 38 Programacin de bases de datos, 38 Prueba, 97 Prueba de integracin, 98 Prueba de sistema, 98 Prueba de unidad, 97, 101 Pruebas, 79 Modelo, 97 Pruebas de desempeo, 73 Pruebas de tensin, 73 Pruebas estructurales, 73 Pruebas funcionales, 72 Pruebas de integracin, 110 Pruebas de regresin, 90 Pruebas de sistema, 110 Pruebas unitarias, 110 Publicado, 129 Punteros, 61, 63 RCS, 126 Registros, 125 Rehacer, 102 Release, 123 Repositorio, 126 Requisito, 34 Requisitos Requisitos funcionales, 91
Requisitos no funcionales, 91 Requisitos cambiantes, 90 Requisitos de datos, 78 Requisitos de implantacin, 108 Requisitos funcionales, 34, 78, 89 Requisitos no funcionales, 34 Reuniones, 103 Reusabilidad, 55 Revisin, 123, 126 Riesgos, 89 Gestin, 90 Tratamiento, 90 Robustez, 56 RUP, 86 Construccin, 87 Elaboracin, 87 Inicio, 86 Transicin, 87 SCO-Unix, 118 Secuenciacin, 90 Seguimiento y control, 112 Gestin de inicidencias, 112 Sentencias Java, 66 Separaciones Java, 67 Simula67, 3 Sistema, 2 Smaltalk, 3 Sobrecarga, 62 Funciones, 62 Operadores, 62 Software libre, 127 Sourceforge, 127 SRS, 43 Subsistema Diseo, 96 Implementacin, 97 Subsistema de implementacin, 96 Subsistemas, 107 Tabla de tareas, 103 Tarjetas CRC, 100 Templates, 62 Test de aceptacin, 102 Test de unidad, 102 Trabajadores, 91, 93, 9597 Analista de sistemas, 91 Arquitecto, 91, 93, 95 Diseador de interfaz de usuario, 91 Especicador de casos de uso, 91 Ingeniero de casos de uso, 93, 95 Ingeniero de componentes, 93 Tutoriales, 80 UML, 10, 52, 86 Underow, 65 Unix, 118 Usabilidad, 3 Variables, 63 Java, 67 Variante, 123 Experimental, 123
ndice alfabtico
145
Permanente, 123 Pruebas, 123 Temporar, 123 Variantes de plataforma, 123 Variantes de requisitos de usuario, 123 VCL, 128 Versin, 123 versin delta, 87 Visibilidad, 130 Vistas, 89