SOFTWARE ENGINEERING. GLOBAL EDITION
FICHA
Foto Título:            SOFTWARE ENGINEERING. GLOBAL EDITION
Autor:            Ian Sommerville
Editorial:       Pearson
Idioma:         Inglés
Páginas:        816
Publicación:  2015
Lectura:         2020
COMENTARIO EDITORIAL
(Fuente: Traducción y ligera elaboración propia de la descripción de producto en Amazon)

De cara a cursos en ciencia de los computadores e ingeniería de software, 'Software Engineering' introduce a los estudiantes en la abrumadoramente importante materia de la programación y desarrollo de software. Durante los últimos años, los sistemas de ordenadores han venido a dominar, no solo nuestro crecimiento tecnológico sino las bases mismas de las más importantes industrias de nuestro mundo. Este libro busca establecer el mapa de los conceptos fundamentales en esta materia inmensa y siempre en movimiento y hacerlo de una manera clara y comprensible.

La décima edición contiene nueva información que resalta algunas actualizaciones tecnológicas sucedidas en los años recientes, proporcionando a los estudiantes una información muy relevante y actualizada. La experiencia de Sommerville en confiabilidad de sistemas e ingeniería de sistemas conduce el texto a través de un enfoque tradicional basado en planes pero que incorpora algunos nuevos métodos ágiles. El texto se esfuerza en enseñar a los innovadores del mañana cómo crear software que hará de nuestro mundo un lugar mejor, más seguro y más avanzado para vivir.

COMENTARIO PERSONAL

'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.