375381886-Ingenieria-Del-Sofware-2.pdf - Salvador S\u00e1nchez Miguel \u00c1ngel Sicilia Daniel Rodr\u00edguez Ingenier\u00eda del Software Un enfoque desde la gu\u00eda

375381886-Ingenieria-Del-Sofware-2.pdf - Salvador...

This preview shows page 1 out of 566 pages.

You've reached the end of your free preview.

Want to read all 566 pages?

Unformatted text preview: Salvador Sánchez / Miguel Ángel Sicilia / Daniel Rodríguez Ingeniería del Software Un enfoque desde la guía SWEBOK Alfaomega cozceta grupo editorial INGENIERÍA DEL SOFTWARE INGENIERÍA DEL SOFTWARE Un enfoque desde la guía SWEBOK Salvador Sánchez Alonso Miguel Ángel Sicilia Urbán Daniel Rodríguez García Departamento de Ciencias de la Computación Universidad de Alcalá A Alfaomega grupo editorial Datos catalográficos Sánchez, Salvador, Sicilia, Miguel Ángel y Rodríguez, Daniel Ingeniería del Software. Un enfoque desde la guía SWEBOK Primera Edición Alfaomega Grupo Editor, S.A. de C.V., México ISBN: 978-607-707-420-5 Páginas: 568 Formato: 17 x 23 cm Ingeniería del Software. Un enfoque desde la guía SWEBOK Salvador Sánchez Alonso, Miguel Angel Sicilia Urbán y Daniel Rodríguez García ISBN: 978-84-9281-240-0, edición original publicada por IBERGARCETA PUBLICACIONES, S.L., Madrid, España Derechos reservados © 2011 IBERGARCETA PUBLICACIONES, S.L. Primera edición: Alfaomega Grupo Editor, México, marzo 2012 Cuarta reimpresión: Alfaomega Grupo Editor, México, agosto 2017 2012 Alfaomega Grupo Editor, S.A. de C.V. Dr. Isidoro Olvera (Eje 2 sur) No. 74, Col. Doctores, 06720. Ciudad de México. Miembro de la Cámara Nacional de la Industria Editorial Mexicana Registro No. 2317 Pág. Web: E mail: atencionalcliente @alfaomega.com.mx - ISBN: 978-607-707-420-5 Derechos reservados: Esta obra es propiedad intelectual de su autor y los derechos de publicación en lengua española han sido legalmente transferidos al editor. Prohibida su reproducción parcial o total por cualquier medio sin permiso por escrito del propietario de los derechos del copyright. Nota importante: La información contenida en esta obra tiene un fin exclusivamente didáctico y, por lo tanto, no está previsto su aprovechamiento a nivel profesional o industrial. Las indicaciones técnicas y programas incluidos, han sido elaborados con gran cuidado por el autor y reproducidos bajo estrictas normas de control. ALFAOMEGA GRUPO EDITOR, S.A. de C.V. no será jurídicamente responsable por: errores u omisiones; daños y perjuicios que se pudieran atribuir al uso de la información comprendida en este libro, ni por la utilización indebida que pudiera dársele. Edición autorizada para venta en México y todo el continente americano. Impreso en México. Printed in Mexico. Empresas del grupo: México: Alfaomega Grupo Editor, S.A. de C.V. - Dr. Isidoro Olvera (Eje 2 sur) No. 74, Col. Doctores, C.P. 06720, Del. Cuauhtémoc, Ciudad de México - Tel.: (52-55) 5575-5022 - Fax: (52-55) 5575-2420 / 2490. Sin costo: 01-800-020-4396 - E-mail: [email protected] Colombia: Alfaomega Colombiana S.A. - Carrera 15 No. 64 A 29, Bogotá, Colombia, Tel.: (57-1) 2100122 - Fax: (57-1) 6068648 - E-mail: [email protected] Chile: Alfaomega Grupo Editor, S.A. - Dr. La Sierra 1437, Providencia, Santiago, Chile Tel.: (56-2) 235-4248 - Fax: (56-2) 235-5786 - E-mail: [email protected] Argentina: Alfaomega Grupo Editor Argentino, S.A. - Paraguay 1307 P.B. Of. 11, C.P. 1057, Buenos Aires, Argentina, -Tel/Fax: (54-11) 4811-0887 y 4811 7183 - E-mail: [email protected] Índice I Fundamentos de la Ingeniería del Software 1 Introducción a la Ingeniería del Software xix 5 5 1.1 ¿Arte o ingeniería? 7 1.2 Objetivos 7 1.3 Introducción 8 1.4 ¿Qué es la ingeniería? 10 1.5 Ingeniería y ciencias de la ingeniería 12 1.6 El software como artefacto tecnológico 13 1.6.1 ¿Qué es el software? 1.6.2 La complejidad inherente al software 13 1.7 Sistematicidad, disciplina y cuantificación 14 16 1.8 La Ingeniería del Software como disciplina profesional 1.8.1 Breve historia de la Ingeniería del Software 16 1.8.2 Elementos de la Ingeniería del Software como disciplina profesional 17 19 1.9 Conceptos básicos de la Ingeniería del Software 19 1.9.1 Actividades y artefactos 20 1.9.2 Métodos, especificaciones y modelos 21 1.9.3 Procesos y ciclos de vida vi Prefacio 2 Modelos y procesos 2.1 El proceso del proceso 2.2 Objetivos 2.3 Introducción 2.3.1 Una definición de proceso 2.3.2 Modelos del ciclo de vida, marcos de procesos y procesos 2.3.3 Características de las definiciones de procesos de software 2.3.4 Lenguajes para la especificación de procesos 2.4 Modelos de ciclo de vida del software 2.4.1 Modelo en cascada 2.4.2 Modelo en «V» 2.4.3 Modelos de proceso basados en prototipos 2.4.4 Modelo en espiral 2.5 Procesos de software 2.5.1 ¿Qué se define en un proceso de software? 2.5.2 El modelo de referencia ISO 12207 2.5.3 Iteraciones e incrementos 2.6 Algunos tipos de procesos importantes 2.6.1 Procesos estructurados y procesos orientados a objetos 2.6.2 Procesos ágiles 2.6.3 Procesos basados en componentes 2.6.4 Especificaciones de proceso abiertas 2.7 Resumen 2.8 Notas bibliográficas 2.9 Cuestiones de autoevaluación 2.10 Actividades propuestas 31 31 32 33 34 35 37 38 39 40 41 42 44 46 46 48 52 55 56 56 58 60 62 63 63 65 3 Medición 3.1 La necesidad de medir 3.2 Objetivos 3.3 Introducción 3.3.1 Conceptos básicos 3.3.2 Tipos de escalas de medición 3.3.3 Clasificación de las medidas 3.3.4 Evaluación de las métricas 3.3.5 ¿Qué medir en la Ingeniería del Software? 3.4 Medidas del producto: atributos internos 3.4.1 Medidas del tamaño de los sistemas 3.4.2 Medidas de la complejidad del software 3.4.3 Medidas de la documentación 3.4.4 Medidas de reutilización 67 67 68 68 69 70 71 72 73 75 75 76 80 81 Ingeniería del Software: un enfoque desde la guía SWEBOK vii 3.4.5 Medidas de la eficiencia 3.5 Medidas del producto: atributos externos 3.6 Medidas del proceso y los recursos 3.6.1 Medidas relacionadas con el proceso 3.6.2 Medidas relacionadas con los recursos 3.7 Metodologías y estándares para la medición 3.7.1 Método Objetivo-Pregunta-Métrica (GQM) 3.7.2 El estándar IEEE 1061-1998 3.7.3 PSM y el estándar ISO/IEC 15939 3.7.4 Otras metodologías y estándares para la medición 3.8 Estudios empíricos 3.8.1 Encuestas 3.8.2 Casos de estudio 3.8.3 Experimentación formal 3.9 Resumen 3.10 Notas bibliográficas 3.11 Cuestiones de autoevaluación 3.12 Ejercicios y actividades propuestas 3.12.1 Ejercicios resueltos 3.12.2 Actividades propuestas 81 82 84 84 84 87 87 90 91 92 93 95 96 97 99 100 101 102 102 104 II Procesos fundamentales de la Ingeniería del Software 107 4 Requisitos 4.1 La difícil tarea de determinar qué debe hacerse 4.2 Objetivos 4.3 Introducción 4.4 Definiciones preliminares y características 4.4.1 El concepto de requisito 4.4.2 Actividades de requisitos 4.4.3 Actores 4.4.4 Características de los requisitos 4.4.5 El documento de especificación de requisitos 4.5 Tipos de requisitos 4.5.1 Requisitos funcionales 4.5.2 Requisitos no funcionales 4.5.3 Otras clasificaciones de los requisitos 4.6 Las actividades de requisitos 4.6.1 Obtención de requisitos 4.6.2 Análisis de requisitos 4.6.3 Especificación de requisitos 111 111 112 113 115 116 116 118 119 120 121 122 123 125 127 128 132 137 viii Prefacio 4.6.4 Validación de requisitos 4.7 Notaciones para el modelado conceptual 4.7.1 Casos de uso 4.7.2 Modelos entidad-relación 4.7.3 Diagramas de clases UML 4.7.4 Notaciones formales 4.8 Gestión del proceso de requisitos 4.8.1 Seguimiento 4.8.2 Métricas de los requisitos 4.8.3 Herramientas para la gestión de requisitos 4.9 Resumen 4.10 Notas bibliográficas 4.11 Cuestiones de autoevaluación 4.12 Ejercicios y actividades propuestas 4.12.1 Ejercicios resueltos 4.12.2 Actividades propuestas 143 147 147 151 152 155 156 157 158 160 162 163 164 166 166 170 5 Diseño 5.1 No es posible construir sin diseñar 5.2 Objetivos 5.3 Introducción 5.4 Conceptos fundamentales de diseño 5.4.1 Abstracción 5.4.2 Componentes e interfaces 5.4.3 Descomposición y modularización 5.4.4 Medición de la modularidad 5.4.5 Arquitectura de sistemas 5.4.6 Notaciones de diseño 5.5 Métodos de diseño 5.5.1 Métodos estructurados 5.5.2 Métodos orientados a datos 5.5.3 Diseño orientado a objetos 5.6 Otras técnicas relacionadas con el diseño 5.6.1 Los patrones de diseño software 5.6.2 Software frameworks, plug-ins y componentes 5.6.3 Diseño por contrato 5.7 Diseño de sistemas distribuidos 5.8 Evaluación y métricas en el diseño 5.9 Resumen 5.10 Notas bibliográficas 5.11 Cuestiones de autoevaluación 173 173 174 175 176 176 177 177 178 180 184 184 184 189 190 199 199 203 205 207 209 213 214 215 Ingeniería del Software: un enfoque desde la guía SWEBOK 5.12 Ejercicios y actividades propuestas 5.12.1 Ejercicios resueltos 5.12.2 Actividades propuestas 6 Construcción 6.1 No da igual cómo esté construido 6.2 Objetivos 6.3 Introducción 6.4 Lenguajes de construcción 6.5 Reutilización del código 6.6 Principios fundamentales de la construcción de software 6.6.1 Minimizar la complejidad 6.6.2 Anticipar los cambios 6.6.3 Construir para verificar 6.6.4 Utilización de estándares 6.7 La calidad en la construcción de software 6.7.1 Aserciones y diseño por contrato 6.7.2 Análisis de rendimiento 6.7.3 Depuración 6.8 Gestión de la construcción 6.8.1 Planificación de la construcción 6.8.2 Métricas de construcción 6.9 Resumen 6.10 Notas bibliográficas 6.11 Cuestiones de autoevaluación 6.12 Ejercicios y actividades propuestas 6.12.1 Ejercicios resueltos 6.12.2 Actividades propuestas 7 Pruebas 7.1 El porqué de las pruebas 7.2 Objetivos 7.3 Introducción 7.3.1 Conceptos fundamentales 7.3.2 Limitaciones en la realización de pruebas 7.3.3 Las pruebas y el riesgo 7.4 Técnicas de prueba 7.4.1 Pruebas de caja blanca y de caja negra 7.4.2 Clasificación exhaustiva de las técnicas de prueba 7.5 Niveles de prueba 7.5.1 Pruebas según su objeto 7.5.2 Pruebas según el objetivo que persiguen ix 216 216 219 223 223 225 225 227 230 232 232 250 253 257 260 260 262 264 266 266 267 268 269 269 271 271 276 279 279 280 280 284 286 287 289 290 295 298 298 305 x Prefacio 7.6 Pruebas unitarias con JUnit 7.6.1 Ejemplo sencillo de uso de JUnit 7.6.2 Complicación del ejemplo inicial 7.6.3 Colecciones de pruebas 7.6.4 JUnit 4 7.7 Métricas relacionadas con las pruebas 7.7.1 Medidas durante las pruebas 7.7.2 Evaluación de las pruebas realizadas 7.8 El proceso de prueba 7.9 Resumen 7.10 Notas bibliográficas 7.11 Cuestiones de autoevaluación 7.12 'Ejercicios y actividades propuestas 7.12.1 Ejercicios resueltos 7.12.2 Actividades propuestas 8 Mantenimiento 8.1 La mente de los otros 8.2 Objetivos 8.3 Introducción 8.4 Conceptos fundamentales 8.4.1 ¿Qué es el mantenimiento del software 9 8.4.2 La facilidad de mantenimiento 8.4.3 Mantenimiento y calidad 8.4.4 Aspectos de la facilidad de mantenimiento 8.5 La práctica del mantenimiento del software 8.5.1 El mantenimiento del software como un caso especial de mantenimiento 8.5.2 La evolución del software y sus leyes 8.6 El proceso de mantenimiento 8.6.1 Las actividades de mantenimiento 8.6.2 El mantenimiento como preparación 8.7 Técnicas para el mantenimiento del software 8.7.1 Ingeniería inversa 8.7.2 Reingeniería 8.7.3 Reestructuración 8.8 Métricas de mantenimiento 8.8.1 Métricas del producto 8.8.2 Métricas relacionadas con el proceso 8.9 Resumen 8.10 Notas bibliográficas 308 309 312 314 315 317 318 319 320 322 324 325 326 326 330 333 333 334 335 336 336 337 339 340 340 342 342 344 345 348 348 350 352 354 357 357 360 361 363 Ingeniería del Software: un enfoque desde la guía SWEBOK 8.11 Cuestiones de autoevaluación 8.12 Ejercicios y actividades propuestas 8.12.1 Ejercicios resueltos 8.12.2 Actividades propuestas III Gestión y Calidad en la Ingeniería del Software xi 364 365 365 369 373 377 377 9.1 La especial naturaleza de la calidad 378 9.2 Objetivos 379 9.3 Introducción 379 9.3.1 Cultura y ética de la calidad 381 9.3.2 Valor y costes de la calidad 382 9.3.3 Los multiples aspectos de la calidad 384 9.4 Calidad del producto 384 9.4.1 El modelo de calidad de McCall 387 9.4.2 El modelo de Boéhm 388 9.4.3 El modelo de calidad ISO/IEC 9126 391 9.4.4 Otros modelos de calidad 392 9.5 Calidad del proceso 392 9.5.1 Aseguramiento de la calidad 394 9.5.2 El modelo CMMI 399 9.5.3 Modelo SPICE: El estándar ISO/IEC 15504 401 9.5.4 Los estándares de la familia ISO 9000 403 9.5.5 Otros modelos, estándares y especificaciones 410 9.6 Resumen 412 9.7 Notas bibliográficas 413 9.8 Cuestiones de autoevaluación 414 9.9 Ejercicios y actividades propuestas 414 9.9.1 Ejercicios resueltos 416 9.9.2 Actividades propuestas 9 Calidad 10 Gestión 10.1 El desarrollo de proyectos no es sólo tecnología 10.2 Objetivos 10.3 Visión general de la gestión de proyectos 10.4 La estimación de coste, plazos y esfuerzo 10.4.1 Estimación mediante juicio de expertos 10.4.2 Puntos de función 10.4.3 Modelos algorítmicos o paramétricos 10.4.4 Modelos basados en la inteligencia artificial 419 419 421 422 424 425 426 429 436 xii Prefacio 10.4.5 Sistemas dinámicos 10.4.6 Evaluación de modelos 10.4.7 Calibración de modelos 10.5 Planificación y seguimiento del proyecto 10.5.1 Estructura de descomposición del trabajo 10.5.2 Los métodos gráficos CPM y PERT 10.5.3 Diagramas de Gantt 10.5.4 Método del valor conseguido 10.6 Revisiones y cierre del proyecto 10.7 Gestión de los recursos humanos 10.8 Gestión y análisis del riesgo 10.9 'Resumen 10.10Notas bibliográficas 10.11 Cuestiones de autoevaluación 10.12Ejercicios y actividades propuestas 10.12.1 Ejercicios resueltos 10.12.2 Actividades propuestas 11 Gestión de la configuración del software 11.1 La importancia de poner las cosas en su sitio 11.2 Objetivos 11.3 La configuración del software 11.4 Actividades de gestión de la configuración del software 11.4.1 Identificación de la configuración del software 11.4.2 Control de los cambios en el software 11.4.3 Gestión de entregas 11.5 Planificación y gestión 11.5.1 Contabilidad y medición en gestión de la configuración 11.5.2 Auditoría de la configuración software 11.6 Técnicas y herramientas para el control de versiones 11.6.1 Versiones, divisiones y deltas 11.6.2 Polfticas de control de versiones en grupos de trabajo 11.7 Resumen 11.8 Notas biobliográficas 11.9 Cuestiones de autoevaluación 11.10Ejercicios y actividades propuestas 11.10.1 Ejercicios resueltos 11.10.2 Actividades propuestas 439 440 443 443 444 445 450 451 458 459 460 462 463 464 465 465 468 471 471 473 473 477 478 481 484 487 488 489 489 490 491 494 495 496 497 497 502 Ingeniería del Software: un enfoque desde la guía SWEBOK 12 Herramientas 12.1 Las herramientas nos diferencian 12.2 Objetivos 12.3 Introducción 12.3.1 Justificación de las herramientas CASE 12.3.2 Ventajas e inconvenientes del uso de herramientas CASE 12.4 Clasificación de las herramientas CASE 12.4.1 Herramientas CASE según el ciclo de vida 12.4.2 Herramientas CASE según su nivel de integración 12.5 Selección y evaluación de herramientas 12.5.1 Identificación de las necesidades 12.5.2 Selección de herramientas candidatas 12.5.3 Evaluación técnica 12.5.4 Toma de la decisión final 12.6 Resumen 12.7 Notas bibliográficas 12.8 Cuestiones de autoevaluación 12.9 Ejercicios y actividades propuestas 12.9.1 Ejercicios resueltos 12.9.2 Actividades propuestas xiii 505 505 506 507 508 509 510 511 519 526 527 528 529 530 531 531 532 533 533 536 e l~ c si te lil 91 bu vi; de tie es R Prefacio Si pudiéramos copiar a la industria de la construcción, con su arquitectura, gestión de proyecto, diseño, ingeniería, herramientas, reglas, directrices e incluso sus partes prefabricadas... Si pudiéramos hacer todo eso, exactamente así como lo hemos expresado, entonces resolveríamos todos nuestros problemas con el software. M. Berteig — La obra que el lector tiene entre sus manos es el fruto de una convicción. La convicción de sus autores acerca de la importancia de la Ingeniería del Software como parte esencial de la formación de los profesionales de la informática. Porque dado que la ingeniería es el resultado de la objetivación de un oficio, que sedimenta y se estudia científicamente, los ingenieros que crean, estudian, modifican y trabajan con el software necesitan entender cómo se elabora y se mantiene en el tiempo. La Ingeniería del Software es la disciplina del informático cuando actúa como profesional, en el entorno profesional. Por eso, necesita un tratamiento que la separe de las tecnologías concretas y del estudio de técnicas específicas. Hay algunos (no demasiados) libros de Ingeniería del Software. Pero nosotros sentíamos que hacía falta un libro más, uno que complementase los existentes para centrarse en la ingeniería per se. Por ello, hemos buscado separarnos de las técnicas concretas en la medida de lo posible, y proporcionar la visión general que los conceptos en que descansan dichas técnicas proporcionan. Con ello, deseamos que nuestra obra sea, no sólo más universal, sino también más perdurable en el tiempo por estar menos sujeta a las especificidades de cada técnica en particular. El ingeniero del software debe entender esencialmente por qué un producto software es bueno o no lo es (la calidad), cómo puede saberlo (la medición), cómo pueden hacerse xvi Prefacio productos de calidad (el proceso), y cómo pueden ordenarse los recursos humanos y temporales en un proyecto para aplicar correctamente el proceso (la gestión). Además de esos elementos generales, es importante que un ingeniero del software tenga una visión general de las técnicas y métodos disponibles para cada tipo concreto de actividades (que pueden resumirse en: requisitos, diseño, construcción, pruebas, mantenimiento y gestión de la configuración). Por último, hay ciertas herramientas que ayudan a los ingenieros del software a realizar correcta, eficaz y eficientemente las actividades según los procesos. Aunque esas herramientas son muy diversas y evolucionan constantemente, es importante conocer sus tipos para saber seleccionarlas y decidir cuándo aplicarlas o si merece la pena invertir en ellas. Con este párrafo, hemos resumido realmente el contenido del libro y qué es lo que trata de cubrir. La intención es la de resumir todos los elementos que es necesario conocer para el desarrollo profesional del software, sin entrar en el detalle de cada técnica. Siendo más concretos, pretendemos que el lector entienda, por ejemplo, para qué sirven los casos de uso en las actividades de requisitos, pero no pretendemos que el lector domine la técnica ayudado por este libro. Para eso hay textos especializados que podrán servirle en cada caso. También debemos resaltar que el presente libro pretende ser introductorio. Por eso en muchas ocasiones no hemos profundizado tanto como habríamos deseado, cortando la discusión en partes que realmente nos apetecía tratar en más detalle pero que claramente quedaban fuera del alcance de la obra. Siempre es difícil acertar plenamente en la cobertura que se ofrece, si bien esperamos que el resultado sea de su agrado y, especialmente, que le resulte de utilidad en su trabajo o sus estudios. ¿Por qué un nuevo libro de Ingeniería del Software? Fundamentalmente porque aún hay sitio para otras formas de introducir la Ingeniería del Software, diferentes a la de los textos que el lector en español puede encontrar a día de hoy. Particularmente, hemos utilizado como guía y como criterio a la hora de decidir qué incluir y qué no la Guía al Cuerpo de Conocimiento de Ingeniería del Software - Guide to the Software Engineering Body of Knowledge (SWEBOK). La guía SWEBOK, como nosotros la llamaremos de aquí en adelante, es el fruto de un trabajo de colaboración, redacción y revisión experta de varios años. Como tal, pretende compendiar todo lo que un ingeniero del software debe conocer pues será relevante para su actividad profesional. No obstante, la guía SWEBOK no es un libro de texto, sino una obra de referencia donde se proporciona el esquema de los conocimientos y competencias de los ingenieros del software, junto a listas de referencias a la literatura en las que se basa la guía. Tampoco es una guía curricular, ya que no proporciona indicaciones sobre importancias relativas u objetivos educativos. En definitiva, se puede considerar que este libro es la primera obra que trata de cubrir la Ingeniería del Software desde la estricta observancia de los crite...
View Full Document

  • Summer '18

  • Left Quote Icon

    Student Picture

  • Left Quote Icon

    Student Picture

  • Left Quote Icon

    Student Picture

Stuck? We have tutors online 24/7 who can help you get unstuck.
A+ icon
Ask Expert Tutors You can ask You can ask You can ask (will expire )
Answers in as fast as 15 minutes