'Software Engineering. Global Edition' es un libro de texto sobre Ingeniería de Software, un libro además que
se puede considerar un clásico, siendo ésta su décima
edición y quizá la última, puesto que su autor ya se encuentra juilado. A pesar de ello es una obra todavía actual, ya que ha evolucionado incorporando a su
contenido las nuevas tecnologías y tendencias.
El libro, muy largo, consta de 25 capítulos y no deja prácticamente ningún tema relevante sin tocar. Eso si, los capítulos se agrupan en cuatro partes y
la primera, que recoge los nueve primeros capítulos, ya sirve casi para dar una visión suficiente del campo de la ingeniería de software, entrando el resto de
partes y capítulos en temas más especializados o en mayor profundidad. En concreto, la estructura es como sigue:
- 'PART 1 INTRODUCTION TO SOFTWARE ENGINEERING:' Una primera parte que proporciona los conceptos básicos y, sobre todo, desarrolla
los aspectos fundamentales de la ingeniería de software en cada una de las etapas de un proyecto tradicional. Una primera parte que cas podría ser un
libro por si misma y que comprende nueve capítulos:
- 'Chapter 1 Introduction:' Un breve capítulo introductorio en que explica la necesidad de la ingeniería de software
cuando se desarrolla de forma profesional, define conceptos, identifica escenarios diferentes de sistemas y propone una suerte de ética
de la ingeniería del software. Luego presenta una serie de casos prácticos que utilizará a lo largo de todo el libro.
- 'Chapter 2 Software process:' Describe los diferentes modelos de proceso como el waterfall, incremental, agile y las actividades
que se realizan. Y cierra hablando de la mejora de esos procesos.
- 'Chapter 3 Agile software development:' Se centra en el modelo agile de una forma genérica, sin
circunscribirse a un framework
específico. En ese formato, cuenta algunas de las técnicas habituales y cómo se realiza la gestión del proyecto y finaliza abordando la
problemática del escalado de agile para grandes proyectos.
- 'Chapter 4 Requirements engineering:' Aborda la fase inicial del proyecto: la toma de requisitos. Primero explica
la distinción entre requisitos funcionales y no funcionales. Luego describe el proceso y a continuación desarrolla cada una de las etapas:
elicitación, especificación y validación.
- 'Chapter 5 System modeling:' Explica los diferentes modelos que se usan habitualmente en el análisis y diseño, centrándose en
los que incluye UML: diagramas de contexto, de proceso, de interacción, de secuencia, de clases, etc. Y finaliza el capítulo hablando del
enfoque model-driven.
- 'Chapter 6 Architectural design:' Se pasa a la siguiente fase abordando el diseño de arquitectura. Aquí, el autor identifica
las principales decisiones a adoptar y las diferentes perspectivas y luego describe algunos patrones comunes de arquitectura.
- 'Chapter 7 Design and implementation:' Siguiente capítulo y fase que se adentra en el diseño detallado y en la codificación.
Dedica bastante espacio a describir el diseño orientado a objetos, incluyendo los patrones de diseño y luego revisa algunas problemáticas habituales
de la implementación.
- 'Chapter 8 Software testing:' Capítulo dedicado a las pruebas del software en sus diferentes niveles. Explica, por ejemplo, los
conceptos de verificación y validación. Luego habla de las pruebas de desarrollo, pruebas unitarias y de componente, y del enfoque test-driven.
Y
finaliza con sendas secciones dedicadas a las pruebas de versión y las pruebas de usuario.
- 'Chapter 9 Software evolution:' Cierra este recorrido por el ciclo completo del desarrollo software hablando del mantenimiento
y evolución. Primero describe ese proceso de evolución del software y luego dedica bastante espacio a hablar de los sistemas 'legacy' y su
gestión. Finaliza el capítulo hablando del mantenimiento del software
- 'PART 2 SYSTEM DEPENDABILITY AND SECURITY:' Una segunda parte, muy alineada con los intereses y e investigación personales del autor en
materia de confiabilidad de los sistemas. Abarca los siguientes seis capítulos:
- 'Chapter 10 Dependable systems:' Comienza hablando de confiabilidad ('dependability') para lo cual, lo primero que se hace es identificar sus
características. Luego se introduce el concepto de sistemas sociotécnicos, es decir, una visión holística de los sistemas que incluye, no sólo
la parte técnica sino también procesos, organizaciones y sociedad.
Luego aborda algunas técnicas y estrategias para la confiabilidad como
son la redundancia y diversidad o la forma de hacer los procesos confiables. Finaliza describiendo los procesos formales
- 'Chapter 11 Reliability engineering:' Aborda otro concepto específico de fiabilidad ('reliability'). Se identifican los requisitos
de la fiabilidad y también algunas características para la fiabilidad como la disponibilidad, la tolerancia a fallos, la medición de la fiabilidad
y la forma de programar para la fiabilidad.
- 'Chapter 12 Safety engineering:' Habla de seguridad ('safety') empezando por los sistemas críticos, la
identificación de requisitos de seguridad, el proceso de ingeniería de seguridad y finaliza con algunos casos.
- 'Chapter 13 Security engineering:' Aborda ahora la seguridad en un sentido más de protección ante ataques ('security'). Habla de
las dimensiones de la seguridad y la pone en relación con sistemas y
organización. Luego habla de la identificación de requisitos de seguridad y
del diseño para la seguridad donde proporciona varias directrices y finaliza abordando el aseguramiento y prueba de la seguridad.
- 'Chapter 14 Resilience engineering:' Finaliza esta parte hablando de sistemas resilientes ('resilience') centrándose primero
en la ciberseguridad, siguiendo por una resiliencia a nivel sociotécnológico y finalizando por el diseño para la resiliencia.
- 'PART 3 ADVANCED SOFTWARE ENGINEERING:' Una tercera parte muy interesante aunque algo dispersa en cuanto a temática, que aborda aspectos concretos
akgo más avanzados o especializados que lo que se hizo en la primera parte. Incluye los siguientes siete capítulos:
- 'Chapter 15 Software reuse:' Aboirda la temática de la reutilización del software. Primero presenta una visión general de todos los niveles
y formas de plantear la reutilización y luego pone foco en tres formas de reutilización: frameworks, líneas de producto y sistemas.
- 'Chapter 16 Component-based software engineeering:' En clara relación con el capítulo anterior, trata el tema de los componentes software.
En concreto, primero explica el concepto de componente y algunos modelos existentes. Luego explica los procesos de ingeniería software basados en componentes
(CBASE) y finaliza con mecanismos de composición de componentes para obtener un resultado final.
- 'Chapter 17 Distributed software engineering:' Habla de software distribuido, comenzando el capítulo con la estructuración de conceptos y
siguiendo por la descripción de algunos modelos de interacción como RPC (Remote Procedure Call) o RMI (Remote Method Invocation). Luego ataca el modelo cliente-servidor
y a continuación se detiene bastante en la descripción de varios patrones arquitecturales y de diseño. Y finaliza hablando del software como servicio.
- 'Chapter 18 Service-oriented software engineering:' Con la base que proporcionan los dos capítulo anteriores, en éste ataca el concepto de servicio
y las arquitecturas orientadas a servicios. Primero proporciona una ideas básicas. Luego explica el modelo SOA tradicional basado en Web Services SOAP para, a continuación,
dedicar una sección a los modelos RESTful. Y luego se extiende para explicar un proceso de ingeniería orientado a servicios y la forma de componer servicios.
- 'Chapter 19 Systems engineering:' Propone aumentar un poco el alcance de la ingeniería para contemplar el sistema en su conjunto y no sólo el software.
Retoma el concepto de sistemas sociotecnológicos para proporcionar una visión que va más allá incluso del propio sistema como elemento técnico. Y luego desarrolla
aspectos concretos de la ingeniería de sistemas como el diseño conceptual, la adquisición de sistemas, el desarrollo, la operación y
la evolución.
- 'Chapter 20 Systems of systems:' Contempla el caso más complejo en que varios sistemas se combinan de alguna forma para dar lugar a un sistema mayor.
Propone una clasificación de estos sistemas de sistemas y realiza un análisis algo más filosófico y teórico sobre complejidad y reduccionismo. Y, finalmente, desarrolla
el proceso de ingeniería de sistemas de sistemas y su arquitectura, incluyendo la descripción de algunos patrones arquitecturales.
- 'Chapter 21 Real-time software engineering:' Un capítulo especializado dedicado al software de tiempo real. En primer lugar habla
de sistemas empotrados y su diseño y luego repasa varios patrones de arquitectura para sistemas de tiempo real. Habla también del análisis
de tiempos y finaliza explicando ideas sobre sistemas operativos de tiempo real.
- 'PART 4 SOFTWARE MANAGEMENT:' Una última parte que, como su título anuncia, está dedicada a aspectos no técnicos sino de gestión
- 'Chapter 22 Project management:' Un capítulo en que habla de dirección de proyectos, con un enfoque bastante tradicional y
deteniéndose, específicamente, en la gestión de riesgos, la gestión de personas y el trabajo en equipo.
- 'Chapter 23 Project planning:' En cierto modo, una continuación del capítulo anterior pero ahora muy centrado en la planificación,
incluyendo también aspectos económicos de costes y precios. Empieza justamente por la temática de precios pero en seguida pasa a la planificación,
explicando la planificación basada en diagramas de Gantt y el enfoque de planificación de Agile. Y luego
aborda las técnicas de estimación donde
explica con bastante detalle el modelo COCOMO.
- 'Chapter 24 Quality management:' Otro aspecto, aunque especializado, de la dirección de proyectos que es la calidad. Primero se introducen
aspectos generales y algunos estándares como ISO 9001. Luego se habla específicamente de las técnicas de revisiones e inspecciones de código y también
se dedica una sección específica a la gestión de calidad en Agile. Y se finaliza con una larga sección dedicada a la medición y analítica de características del
software
- 'Chapter 25 Configuration management:' Capítulo final dedicado al control de configuración, donde se habla de la gestión de
versiones, de cómo realizar la construcción de una versión concreta, incluyendo todos sus elementos y no sólo el software (documentación, configuración,
etc), cómo gestionar los cambios y cómo gestionar las diferentes 'releases'.
'Software Engineering. Global edition' es una visión amplia, ordenada, rigurosa y bastante actualizada del campo de la ingeniería de software. Con un enfoque
más bien tradicional pero muy puesto al día en cuanto a tecnologías y enfoques como agile y tratando alguns temas muy específicos y no tan fáciles de encontrar
como la ingeniería de software de tiempo real.
Es, eso si, un libro austero y desapasionado, sin inguna concesión ni a la literatura ni al marketing. Un libro, realmente, de estudio o consulta, y no tanto
para una lectura.
En cualquier caso, una muy buena referencia en este campo de la ingeniería de software que ya proporciona
pocas nuevas obras si no consideramos las dedicadas en
exclusiva a Agile.
|