viernes, 15 de mayo de 2020

Repasando la disciplina de Ingeniería Software con Ian Sommerville

'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 requisitosde 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 algo 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 algunos 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.

Ian Sommerville

(Fuente: Traducción y ligera elaboración propia de su entrada en Wikipedia)

Ian Sommerville
Ian F. Sommerville, nacido el 23 de Febrero de 1951, es un académico británico. Es autor de un popular libro de texto sobre ingeniería de software, así como de otros libros y artículos. Trabajó como profesor de Ingeniería de Software en la Universidad de St Andrews en Escocia hasta 2014 y es un investigador prominente en el campo de ingeniería de sistemas, fiabilidad de sistemas e informática social, siendo un temprano abogado defensor de un enfoque multidisciplinar a la fiabilidad de sistemas.

Ian Sommerville nació en Glasgow. Estudió Física en la Strathclyde University y CIencia de los Computadores en la University of St Andrews. Está casado y tiene dos hijas. Es un gourmet amateur y ha escrito varias reseñas sobre restaurantes.

Ian Sommerville fue profesor numerario en Ciencia de los Computadores en la University of St Andrews desde 1975 a 1978 y en la Strathclyde University desde 1978 a 1986. De 1986 a 2008, fue profesor de Ingeniería Software en el Computing Department en la University of Lancaster y en Abril de 2006 se unió a la School of Computer Science en la St Andrews University, donde impartió cursos de ingeniería de software avanzada e ingeniería de sistemas críticos. Se jubiló en Enero de 2014 y desde entonces continua realizando actividades relacionadas con la ingeniería de software que considera interesantes.

El trabajo de investigación de Ian Sommerville, parcialmente financiado por EPSRC, ha incluido ingeniería de requisitos de sistemas y evolución de sistemas. Un foco importante ha sido la fiabilidad de sistemas, incluyendo técnicas de análisis social como la etnografía para entender mejor como personas y ordenadores proporcionan conjuntamente la fiabilidad. Fue socio del consorcio IRC (Interdisciplinary Research Collaboration in Dependability) que se concentraba el diseño de sistemas confiables y ahora trabaja en el proyecto relacionado INDEED (Interdisciplinary Design and Evaluation of Dependability). También ha sido miembro del comité de asesores del proyecto REAIMS (Requirements Engineering adaptation and improvement for safety and dependability).

En 2006, Ian Sommerville fue uno de los académicos en el campo de la computación que escribió cartas abiertas pidiendo una auditoría independiente del British National Health Service's proposed Programme for IT (NPfIT) y expresando su preocupación por el programa de 12,4 billones de libras.

Puedes saber más del autor visitando su página oficial o siguiéndole en twitter donde se identifica como @IanSommerville.

Ficha técnica:

EDITORIAL: Pearson
AÑO: 2015 
ISBN: 978-1292096131
PAGINAS: 816

Artículos de este blog relacionados

No hay comentarios:

Publicar un comentario