INTRODUCCIÓN
1.Contexto de la ingeniería de software 1
2.Actividades de la ingeniería de software 2
3.Proceso 3
4.Proyecto 5
5.Personas 5
6.Producto 6
7.Calidad 7
8.Proyecto de equipo 8
8.1 Comunicación del grupo 10
9.Caso de estudio, panorama 10
9.1 Introducción al videojuego Encuentro 11
9.2 Requisitos para Encuentro 12
9.3 Diseño de Encuentro 12
9.4 Pruebas de Encuentro 14
9.5 Documentación del proyecto Encuentro 14
Ejercicios 14CAPÍTULO 1 PROCESO
PARTE 1: ESENCIAL
1.Introducción al proceso de ingeniería de software 18
1.1 Mapa conceptual típico de ingeniería de software 19
2.Perspectiva histórica y contemporánea de la ingeniería de software 20
2.1 La ingeniería de software crece 20
2.2 Influencia de la programación estructurada y la orientación a objetos 21
2.3 Reuso y componentes 22
2.4 Métodos formales 23
2.5 Posibilidades de uso 24
3.Expectativas para proceso, proyecto, producto y personas 24
3.1 Artefactos y roles 25
4.Procesos alternativos 25
4.1 Modelo de proceso en cascada 25
4.2 Modelo de proceso en espiral 27
4.3 Modelo de proceso por incrementos 29
4.4 Proceso de desarrollo de software unificado (USDP) 30
4.5 Trueques del proceso 32
5.Documentación 34
5.1 Introducción a la documentación 34
5.2 Estándares de documentación 35
PARTE II: EXTENSIÓN
6.Calidad 39
6.1 Métricas 40
6.2 Proceso de aseguramiento de la calidad 41
6.3 Técnicas de la caja negra y la caja blanca 41
6.4 Introducción a la inspección 42
6.5 Estándar de IEEE para planes de aseguramiento de la calidad del software 47
6.6 Verificación y validación 47
6.6.1 Estándar de V&V de IEEE 1012-1986 49
7.Administración de la documentación 50
7.1 Introducción a la administración de la documentación 50
7.2 Consistencia y documentación con una sola fuente 50
7.3 gestión de la configuración 52
7.3.1 Elementos de configuración 53
7.3.2 Estándar IEEE 829-1990 para los planes de gestión de la
configuración del software 54
8.Introducción a la evaluación de capacidades 55
8.1 Introducción a Personal Software Process (PSP) 56
8.2 Introducción al proceso de software de equipo (TSP) 57
8.3 Introducción al modelo de madurez de capacidades (CMM) 58
8.4 Relación entre PSP, TSP y CMM 61
9.Resumen 61
Ejercicios 62
Caso de estudio 1: plan de gestión de la configuración del software 64
Caso de estudio 2: plan de aseguramiento de la calidad del software, parte 1 de 2 69
CAPÍTULO 2 ADMINISTRACIÓN DE PROYECTOS
PARTE I: ESENCIAL
1.Introducción a la administración de proyectos 74
1.1 Significado de administración de proyectos 74
1.2 Las componentes de la administración de proyectos 75
1.3 Variables principales: costo, capacidad, calidad y programa 75
1.4 Mapa conceptual típico de un proceso de administración de un proyecto 76
2.Administración del personal del proyecto 77
2.1 Profesionalidad 77
2.2 Importancia de administrar a las personas 78
2.3 Perspectivas de la empresa 78
2.4 Perspectivas de la administración 78
2.4.1 Realización de reuniones 79
2.5 Perspectivas de los ingenieros 80
3.Opciones para la organización del personal 81
3.1 Administración de la comunicación 81
3.2 Opciones para la estructura de responsabilidades 82
3.3 Fuentes de personal para un proyecto 84
4.Identificación y retiro del riesgo 85
4.1 Definición de riesgos 85
4.2 Panorama de la gestión de riesgos 86
4.3 Identificación de riesgos 86
4.4 Eliminación de riesgo 87
5.Elección de herramientas de desarrollo y soporte 90
5.1 Métodos del proceso 90
5.2 Herramientas 90
5.3 Decisiones de construir o comprar 90
5.4 Selección del lenguaje 92
5.5 Documentación 92
5.6 Servicios de apoyo 92
6.Creación del calendario del proyecto: planificación de alto nivel 92
PARTE II: EXTENSIÓN
7.Integración de aplicaciones heredadas 94
8.Estimación de costos: cálculos preliminares 96
8.1 Introducción 96
8.2 Estimación de líneas de código sin el proceso de puntos de función 98
8.3 Puntos de función y líneas de código 100
8.4 Conversión de puntos de función en líneas de código 102
8.5 Otro ejemplo de puntos de función 103
8.6 Referencias de puntos de función 104
9.Estimación del esfuerzo y la duración a partir de las líneas de código 105
10.Proceso de software en equipo 107
11.Plan de administración del proyecto de software 108
12.Calidad en la administración del proyecto 110
12.1 Métricas del proceso 110
12.1.1 Introducción a las métricas del proceso 110
12.1.2 Ejemplos de métricas del proceso 110
12.2 IEEE 739-1989 PAPS: Parte 2 112
13.Mejoras al proceso y el modelo de madurez de la capacidad 114
13.1 Mejora del proceso usado en una organización 114
13.2 Mejora del proceso para un proyecto en marcha 114
14.Varias herramientas y técnicas para la administración de proyectos 116
14.1 Equipos remotos e internacionales 116
14.2 Programación extrema 116
14.3 Toma de decisiones con prioridades urgentes 117
15.Resumen del proceso de administración de proyectos 118
Guía para el proyecto: Plan de administración del proyecto para el caso de
estudio Encuentro 119
GPP1.Preparación para la reunión de planificación del proyecto 119
GPP2.Reunión inicial de planificación del proyecto 120
GPP3.Terminación del plan de administración del proyecto 120
Ejercicios 121
Caso de estudio 1: plan de administración del proyecto para el videojuego
Encuentro 123
Caso de estudio 2: plan de aseguramiento de la calidad del software para Encuentro,
parte 2 de 2 131
CAPÍTULO 3 ANÁLISIS DE REQUISITOS I
1.Introducción al análisis de requisitos 136
1.1 Significado de análisis de requisitos 136
1.2 Requisito C y requisitos D 137
1.3 Por qué deben escribirse los requisitos 137
1.4 Mapa conceptual típico del proceso de análisis de requisitos 139
1.5 Retos y beneficios del análisis de requisitos 140
2.Interacción con el cliente 141
2.1 Fuentes de requisitos 141
2.2 Identificación de interesados 142
2.3 Ejemplos de deseos de los clientes 143
2.4 Proceso de entrevista y documentación 144
3.Descripción de los requisitos C (o del cliente) 145
3.1 Concepto de operaciones 145
3.2 Casos de uso 145
3.3 Diagramas de flujo de datos para la comunicación con el cliente 148
3.4 Diagramas de transición de estados para comunicación con el cliente 149
3.5 Diseño preliminar de interfaces de usuario y otras 151
3.5.1 Pasos para desarrollar interfaces de usuario 151
3.5.2 Ejemplos de requisitos preliminares para el caso de estudio 158
3.5.3 Otras interfaces 158
3.6 Resumen y guía par expresar los requisitos C 159
4.Uso de metodologías, herramientas e internet para los requisitos C 160
5.Prototipos rápidos, estudios de viaibilidad y pruebas de concepto 161
5.1 Prototipos rápidos 161
5.2 Estudios de viabilidad 164
6.Actualización del proyecto para reflejar el análisis de requisitos C 165
6.1 Requisitos C y escalas del proyecto 165
6.2 Efectos del análisis de requisitos C en el plan del proyecto 165
7.Tendencias futuras y resumen de requisitos C 166
7.1 Tendencias futuras 166
7.2 Resumen 166
Guía para el proyecto: requisitos C para el caso de estudio Encuentro 168
GPP1.Preparación 168
GPP2.Entrevista con el cliente 169
GPP3.Descripción de la especificación de requisitos de software 170
GPP4.Seguimiento 171
GPP5.Métricas y posmortem 171
Ejercicios 171
Caso de estudio: especificación de requisitos de software (ERS) para el videojuego
Encuentro, parte 1 de 2 174
CAPÍTULO 4 ANÁLISIS DE REQUISITOS II
PARTE I: ESENCIAL
1.Introducción a los requisitos específicos (D) 182
1.1 Significado de los requisitos específicos (D) 182
1.2 Mapa conceptual típico de análisis de requisitos D 183
2.Tipos de requisitos D 184
2.1 Requisitos funcionales 184
2.2 Requisitos no funcionales: requisitos de rendimiento 185
2.3 Requisitos no funcionales: confiabilidad y disponibilidad 185
2.4 Requisitos no funcionales: manejo de errores 185
2.5 Requisitos no funcionales: requisitos de interfaz 186
2.6 Requisitos no funcionales: restricciones 186
2.7 Requisitos inversos 187
2.8 Correspondencia de tipos de requisitos con el ERS estándar,
IEEE 830-1993 187
3.Propiedades deseadas de los requisitos D 187
3.1 Trazabilidad 187
3.1.1 Traza de requisitos funcionales 187
3.1.2 Traza de requisitos no funcionales 190
3.2 Comprobación y no ambigüedad 191
3.3 Prioridad 191
3.4 Completos 194
3.5 Condiciones de error 194
3.6 Consistencia 195
3.7 Resumen del proceso de escribir un requisito detallado 196
4.Diagramas de secuencia 196
5.Organización de los requisitos D 200
5.1 Por qué es importante la organización de los requisitos detallados 200
5.2 Métodos para organizar los requisitos específicos 201
5.3 Organización de los requisitos detallados por caso de uso 203
5.4 Organización de requisitos por clase 203
5.5 Identificación de clases 205
5.6 Selección de la clase correcta para un requisito dado 210
5.7 Clasificación de entidades (instancias) 211
5.8 Correspondencia con la documentación de pruebas 211
PARTE II: EXTENSIÓN
6.Calidad de los requisitos específicos 212
6.1 Intervención del aseguramiento de la calidad (QA) en el análisis de
requisitos D 212
6.2 Métricas para el análisis de requisitos D 213
6.3 Inspección del análisis de requisitos D 214
6.3.1 Ejemplo de requisitos D no inspeccionados 214
6.3.2 Ejemplo de resultados de inspección de los requisitos D 215
7.Uso de herramientas e Internet para el análisis de requisitos 217
8.Métodos formales para especificación de requisitos 219
8.1 Introducción a las especificaciones formales 219
8.1.1 Notación matemática seleccionada 219
8.2 Ejemplos de especificaciones formales 220
8.3 ¿Cuándo debe usarse la especificación formal? 224
8.4 Precondiciones y poscondiciones 225
9.Efectos del proceso de requisitos D sobre los proyectos 225
9.1 Efectos sobre el PAPS 225
9.2 Efectos de la gran escala sobre los requisitos D 225
10.Resumen del proceso de requisitos D 226
Guía para el proyecto: requisitos D para el caso de estudio Encuentro 227
GPP1.Preparación 227
GPP2.Clasificación de los requisitos D 228
GPP3.Escritura de los requisitos D 228
GPP4.Seguimiento: métricas y posmortem 229
Ejercicios 229
Caso de estudio: especificación de requisitos de software (ERS) para el
videojuego Encuentro, parte 2 de 2 231
CAPÍTULO 5 ARQUITECTURA DE SOFTWARE
PARTE I: ESENCIAL
1.Introducción a ingeniería de sistemas y arquitectura de software 248
1.1 Panorama global: ingeniería de sistemas 248
1.2 Significado de arquitectura de software 250
1.3 Metas de la selección de la arquitectura 250
1.4 Descomposición 251
PARTE II: EXTENSIÓN
2.Modelos, marcos de trabajo y patrones de diseño 254
2.1 Uso de modelos 254
2.2 Lenguaje unificado de modelado 256
2.3 Marcos de trabajo 257
2.4 Una clasificación de las arquitecturas 260
2.5 Patrones de diseño I: introducción 260
2.6 Componentes 262
3.Arquitecturas alternativas de software y sus modelos de clase 263
3.1 Arquitecturas de flujo de datos 263
3.2 Componentes independientes 266
3.2.1 Arquitecturas cliente-servidor y patrón de diseño Apariencia 266
3.2.2 Arquitectura de procesadores de comunicación paralelos 268
3.2.2.1 Patrón de diseño Observador 269
3.2.3 Arquitecturas de sistemas por eventos y patrón de diseño Estado 270
3.3 Máquinas virtuales 272
3.4 Arquitecturas de almacenamiento 276
3.4.1 Visita a los miembros de un almacenamiento con el patrón de
diseño Iterador 277
3.5 Arquitecturas de capas 278
3.6 Uso de arquitecturas múltiples dentro de una aplicación 281
3.7 Resumen y procedimientos para seleccionar arquitecturas 281
4.Notación de la arquitectura, estándares y herramientas 281
4.1 Notación 281
4.2 Herramientas 281
4.2.1 Herramientas a nivel de arquitectura frente a herramientas para diseño
detallado e implementación 281
4.3 Estándares IEEE/ANSI para expresar diseños 282
5.Aseguramiento de la calidad (QA) de la arquitectura elegida 283
5.1 Calidad en la selección de la arquitectura 283
5.1.1 Métricas para la selección de la arquitectura 283
5.2 Elección de una arquitectura entre las alternativas 285
5.3 Verificación de arquitecturas con casos de uso 287
5.4 Inspección de la selección de arquitectura 288
5.5 Efectos de la selección de arquitectura sobre el PAPS 288
6.Resumen 289
Guía para el proyecto: arquitectura del caso de estudio Encuentro 290
GPP1.Preparación 290
GPP2.Selección de arquitecturas 290
GPP3.Reunión del equipo (revisión del diseño preliminar) 292
GPP4.Refinamiento de la arquitectura 292
GPP5.Documentación de la arquitectura 292
Ejercicios 293
Caso de estudio: documento de diseño de software, parte 1 de 2 294
I.Marco de trabajo de la arquitectura del juego de personajes 294
II.Arquitectura del juego de personajes Encuentro parte 1 de 2 del documento de
diseño de software 296
CAPÍTULO 6 DISEÑO DETALLADO
PARTE I: ESENCIAL
1.Introducción al diseño detallado 304
1.1 Significado de diseño detallado 304
1.2 Relación entre casos de uso, arquitectura y diseño detallado 304
1.3 Mapa conceptual típico del proceso de diseño detallado 305
1.4 Diseño en el proceso unificado de desarrollo 306
1.5 Diseño contra interfaces 309
1.6 Reutilización de componentes 309
2.Diagramas de secuencia y flujo de datos para el diseño detallado 310
2.1 Diagramas de secuencia detallados 310
2.2 Diagramas de flujo de datos detallados 312
3.Especificación de clases y funciones 313
3.1 Invariantes de clase 315
3.2 Invariantes, precondiciones y poscondiciones de funciones 315
4.Especificación de algoritmos 316
4.1 Diagramas de flujo 316
4.1.1 Un ejemplo de diagrama de flujo 316
4.2 Pseudocódigo 318
4.3 Cuándo usar diagramas de flujo y pseudocódigo 319
PARTE II: EXTENSIÓN
5.Patrones de diseño II: técnicas del diseño detallado 320
5.1 Patrones creativos para el diseño detallado 321
5.1.1 Singleton (solitario) 321
5.1.2 Fábrica (Builder) 321
5.1.3 Prototipo 322
5.1.4 Fábrica abstracta (Abstract factory) 323
5.2 Patrones estructurales para diseño detallado 326
5.2.1 Compuesto y Decorador (Composite y Decorator) 326
5.2.2 Apariencia (Facade) 327
5.2.3 Adaptador (Adapter) 327
5.2.4 Peso mosca (Flyweight) 329
5.2.5 Proxy 329
5.3 Patrones de comportamiento para diseño detallado 330
5.3.1 Intérprete, Observador y Estado (Interpreter, Observer y State) 330
5.3.2 Iterador (Iterator) 330
5.3.3 Mediador (Mediator) 331
6.Librería de plantillas estándar 332
7.Estándares, notación y herramientas para el diseño detallado 333
7.1 Estándar IEEE 890 para el diseño detallado 333
7.2 Lenguaje unificado de modelado (UML) para modelos de objetos
detallados 334
7.3 Herramientas basadas en el código fuente: Javadoc 334
8.Efectos del diseño detallado en los proyectos 336
8.1 Estimación de tamaño a partir de diseños detallados 337
9.Calidad en los diseños detallados 339
9.1 Cualidades y métricas para el diseño detallado 341
9.2 Inspección del diseño detallado 341
9.2.1 Clasificación de defectos 341
9.2.2 Ejemplos de inspección de requisitos detallados 342
10.Resumen 343
Ejercicios 344
Caso de estudio 345
I.Diseño detallado para el marco de trabajo del juego de personajes,
continuación (partes restantes del documento de diseño de software) 345
II.Diseño detallado de Encuentro, continuación (partes restantes del documento de
diseño de software) 347
CAPÍTULO 7 IMPLEMENTACIÓN DE UNIDADES
1.Introducción a la implementación 356
1.1 Definición de implementación de unidades 356
1.2 Objetivos de la implementación 356
1.3 Mapa conceptual típico del proceso de implementación de unidades 356
1.4 Implementación en el proceso de unificado de desarrollo de software 358
1.5 Lenguajes de programación 360
2.Programación y estilo 361
2.1 Principios generales de una implementación acertada 362
2.2 Indicadores y referencias 363
2.3 Funciones 363
2.4 Excepciones 363
2.5 Manejo de errores 364
2.6 Otros puntos de la práctica 367
3.Estándares de programación 367
3.1 Convenciones de nombres, ejemplos de Java 368
3.2 Documentación de atributos 369
3.3 Constantes 370
3.4 Inicialización de atributos 370
4.Programas con demostración formal de que son correctos 370
5.Herramientas y entornos para programación 375
6.La calidad en la implementación 378
6.1 Métricas estándar para el código fuente 378
6.1.1 Cuenta de líneas 378
6.1.2 Métricas de IEEE 378
6.2 Métricas especiales para el código fuente 379
6.3 Inspección de código 379
6.4 Documentación personal de software 381
7.Resumen del proceso de implementación 382
Ejercicios 382
Caso de estudio 384
I.Actualización de PAQS 384
II.Actualización del apéndice PGCS: modelo de implementación 385
III.Documentación personal del software, parte 1 de 2 385
IV.Código fuente (sin código de prueba): PersonajesEncuentro 386
CAPÍTULO 8 PRUEBAS DE UNIDADES
1.Introducción a las pruebas de unidades 394
1.1 Objetivos de las pruebas 394
1.2 Significado de pruebas de unidades 395
1.3 Mapa conceptual típico de las pruebas de unidades 396
2.Tipos de pruebas 397
2.1 Pruebas de caja negra, caja blanca y caja gris 397
2.2 Particiones equivalentes para pruebas de caja negra 398
2.3 Análisis del valor de la frontera para pruebas de caja negra 399
2.4 Cobertura de sentencias para pruebas de caja blanca 400
2.5 Cobertura de decisiones para pruebas de caja blanca 400
2.6 Pruebas basadas en afirmaciones 402
2.6.1 Límites de la verificación de afirmaciones automática 403
2.7 Aleatoriedad en las pruebas 404
3.Planificación de pruebas de unidades 405
4.Listas de verificación y ejemplos para las pruebas de métodos 407
4.1 Pruebas de unidades de métodos 407
4.2 Ejemplo de prueba de método 409
4.2.1 Prueba de los métodos completos de una clase 412
5.Listas de verificación y ejemplos para pruebas de clase 415
5.1 Ejemplo de prueba de combinación de métodos 416
5.2 Pruebas orientadas a atributos 417
5.3 Pruebas de invariantes de clase 417
5.4 Pruebas basadas en los estados 418
6.Resumen 419
Ejercicios 419
Caso de estudio: PersonajesEncuentro, documentación personal de software (DPS)
en Java, parte 2 de 2 421
CAPÍTULO 9 INTEGRACIÓN, VERIFICACIÓN Y VALIDACIÓN DEL SISTEMA
1.Introducción 434
1.1 Significado de integración 434
1.2 Verificación, validación y pruebas del sisTema 435
2.Proceso de integración 438
2.1 Descripción de integración 438
2.2 Mapa conceptual típico del proceso de integración y pruebas
del sisTema 442
3.Proceso de pruebas 444
3.1 Pruebas de integración 444
3.2 Pruebas de desarrolladores y artefactos 448
3.3 Prueba de interfaces 449
3.4 Prueba del sisTema 450
3.5 Prueba de utilidad 452
3.5.1 Prueba para los requisitos de interfaz de usuario 452
3.5.2 Medidas de utilidad 453
3.6 Prueba de regresión 453
3.7 Pruebas de aceptación 453
3.8 Pruebas de instalación 454
4.Documentación de integración y pruebas 454
4.1 Estándares para la documentación de pruebas 454
4.2 Organización de la documentación de integración y pruebas 456
5.Iteraciones de transición 457
5.1 Versiones alfa y beta 458
5.2 Mapa conceptual de las iteraciones de transición 458
6.Calidad en integración, verificación y validación 460
6.1 Objetivos de calidad 460
6.2 Métricas para la integración y pruebas del sisTema 460
6.3 Inspección de integración y pruebas del sisTema 461
6.4 Participación de aseguramiento de la calidad (QA) en la integración
y pruebas del sisTema 461
6.5 Integración del sistema y el modelo de madurez de capacidades 462
7.Herramientas para integración y pruebas del sisTema 463
8.Resumen 466
Ejercicios 466
Caso de estudio 469
I.PGCS: apéndice A.Plan para las bases de integración 469
II.Documentación de pruebas de software para Encuentro 471
CAPÍTULO 10 MANTENIMIENTO
1.Introducción 482
1.1 Significado de mantenimiento de software 483
1.2 Aspectos de mantenimiento de software 483
1.3 Mapa conceptual típico para establecer el proceso de mantenimiento 485
2.Tipos de mantenimiento de software 486
3.Técnicas de mantenimiento 487
3.1 Análisis del impacto 487
3.2 Ingeniería inversa 488
3.3 Reingeniería 489
3.3.1 Refactorización 489
3.4 Aplicaciones heredadas 490
3.5 Actualización de documentación 492
4.Estándar 1219-1992 de IEEE 492
4.1 Identificación del problema de mantenimiento 492
4.2 Análisis del problema de mantenimiento 493
4.2.1 Ejemplos de análisis del problema de mantenimiento 493
4.3 Diseño para una solicitud de mantenimiento 496
4.4 Implementación de una solicitud de mantenimiento 496
5.Administración de mantenimiento 498
6.Cualidades en mantenimiento 501
6.1 Métricas de mantenimiento 501
6.2 Aplicación de métricas de mantenimiento 502
6.3 Posibilidad de mantenimiento 504
7.Resumen 506
Ejercicios 506
Caso de estudio: mantenimiento de Encuentro 508
APÉNDICE 513
ACRÓNIMOS 517
GLOSARIO 521
REFERENCIAS 525
CRÉDITOS 529
ÍNDICE ALFABÉTICO