FUNDAMENTALS OF SOFTWARE ENGINEERING
FICHA
Foto Título:            FUNDAMENTALS OF SOFTWARE ENGINEERING.
Autor:            Hitesh Mohapatra y Amiya Kumar Rath
Editorial:       BBP Publications
Idioma:         Inglés
Páginas:        503
Publicación:  2020
Lectura:         2020
COMENTARIO EDITORIAL
(Fuente: Traducción y ligera elaboración propia de la descripción de producto en Amazon)

Este libro enseña los fundamentos de la ingeniería del software a cualquiera que desee convertirse en un experto en ingeniería software activo e independiente. Cubre todos los fundamentos de la ingeniería software sin olvidar algunos avances vitales en aspectos como ingeniería del software en inteligencia artificial, ontología y data mining. El objetivo principal es introducir un número limitado de conceptos y prácticas para conseguir los dos objetivos siguientes:
  • Enseñar a los estudiantes las habilidades necesarias para ejecutar un proyecto comercial mínimo.
  • Proporcional a los estudiantes el background necesario para acometer otros estudios en ingeniería software a través de cursos elegidos por ellos mismos
Este libro incluye sólo aquellos conceptos que creemos que son fundacionales. Dado que ejecutar un proyecto de software requiere de habilidades en dos dimensiones,ingeniería y dirección de proyectos, este libro se enfoca a las tareas principales en las dos dimensiones y presenta los conceptos y técnicas que pueden ser aplicados para ejecutar estas tareas de forma efectiva.

Este libro está pensado principalmente para servir como una guía de inicio a la ingeniería software en multitud de programas de grado y psogrado. Se dirige a estudiantes que conocen programación pero que no han tenido una exposición previa a la ingeniería de software. El libro también puede ser utilizado por profesores y formadores que se encuentran en la misma situación: tienen conocimiento de programación pero quieren entrar en el enfoque sistemático de la ingeniería software.

Características principales:
  • Este libro contiene casos de estudio así como ejemplos ejecutados en tiempo real
  • Cubre tecnologías avanzadas que intersectan con la ingeniería del software
  • Lenguaje sencillo y enfoque claro y llano para una presentación comprensible
  • Entender lo que implica un diseño de arquitectura y donde encaja dentro del ciclo de vida completo del software
  • Aprender y optimizar la relación crítica entre análisis y diseño
  • Usar diseños reutilizables y probados y adaptarlos para problemas y contextos específicos.

COMENTARIO PERSONAL

'Fundamentals of Software Engineerig' es un libro clásico en cuanto a su contenido, Ingenieria Software, pero moderno en cuanto a su publicación, ya que data de 2020. Y eso lo hace en cierto sentido especial, porque no existe apenas literatura reciente sobre ingenieria software en general, aunque sí sobre aspectos concretos, y muy específicamente, sobre Agile.

Esta 'modernidad' fue lo que me hizo elegir en primer lugar este libro frente a otras alternativas aunque debo de decir que, tras leerlo, observo que aunque la publicación es reciente, existen contenidos que claramente no están actualizados, lo cual es una oportunidad perdida.

El libro, bastante extenso, se estructura en catorce capítulos como sigue:
  • '1. Introductory Concepts of Software Engineering:' Comienza definiendo y explicando lo que es la ingeniería software, y habla de aspectos generales como las problemáticas habituales en el desarrollo software y algunas soluciones, elementos de calidad del software y la visión de sistema

  • '2. Modelling Software Development Life Cycle:' Aborda el ciclo de vida del software. Comienza haciendo la distinción entre la visión más orientada a proceso y la más orientada a datos. Luego identifica y describe una serie de tipos de sistemas. A continuación 'entra en harina' hablando del ciclo de desarrollo software y describiendo el modelo en cascada, el modelo en V, el modelo en espiral, el prototipado, el enfoque incremental y el evolutivo.

  • '3. Software Requirement Analysis and Specification:' En los siguientes capítulos se abordan las diferentes fases del modelo en cascada entrándose en los aspecto que los autores consideran más relevantes de cada estación. Este capítulo, en concreto, habla del análisis y especificación de requisitos. Explica las tres actividades fundamentales: elicitación, análisis y registro y luego comenta algunas técnicas de elicitación y algunos métodos más modernos y radicales como JAD (Joint Application Development) o GSS (Group Support System) donde incluye de una forma que creo es errónea, la reingeniería de procesos. Finaliza hablando de la documentación de requisitos.

  • '4. Software Project Management Framework:' Hace un cierto alto en el camino para hablar de dirección de proyectos, abordando temáticas como la gestión del alcance, la planificación (incluyendo técnicas como PDM, PERT, GANTT o CPM) y gestión de costes donde explica el modelo COCOMO o los puntos función.

  • '5. Software Project Analysis and Design:' Se vuelve al ciclo de vida propiamente dicho para tratar ahora el análisis y diseño. Se empieza con algunas consideraciones previas sobre cualidades del software. Luego se hace la distinción entre el diseño de alto y bajo nivel, se revisan brevemente los paradigmas funcional y orientado a objetos y a continuación se revisan las características del acoplamiento y la cohesión. Se sigue luego presentando algunas técnicas útiles como tablas de decisión, árboles de decisión diccionarios de datos o Diagramas de Flujos de Datos.

  • '6. Object-Oriented Analysis and Design:' Se dedica un capítulo completo al caso específico de la Orientación a Objetos, explicando conceptos fundamentales como clases, encapsulación, herencia o polimorfismo y luego ya se habla del análisis y diseño. Y finalmente se dedica espacio amplio a exlicar los conceptos y diagramas de UML (Unified Modelling Language).

  • '7. Designing Interfaces & Dialogues and Database Design:' Desarrolla en más detalle dos aspectos concretos del diseño, como son la interfaz de usuario y la base de datos. En este último apartado, se describe con cierto detalle el modelo relacional.

  • '8. Coding and Debugging:' Se aborda ya la siguiente fase del ciclo de vida, la codificación y depuración. Dedica bastante espacio a revisar las características principales de los lenguajes de programación y luego revisa los lenguajes existentes bajo diferentes tipologías. Se tratan luego algunos aspectos de estilo y calidad del software. Y finalmente se pasa revista a la actividad de depuración.

  • '9. Software Testing:' Capítulo dedicado a las pruebas. Se habla del plan de pruebas y de actividades estáticas como las inspecciones de código. Luego se hablan de los diferentes niveles y tipologías de pruebas (unitarias, de integración, beta etc)  de la distinción entre pruebas de caja blanca y caja negra. También se habla de estrategias de prueba y datos de prueba.

  • '10. System Implementation and Maintenance:' Habla en primer lugar del despliegue (implantación) del software, con sus aspectos de instalación, formación así como algunas estrategias posibles y la mecánica y criterios de la aceptación. Luego se habla del mantenimiento y evolución del software y los diferentes tipos de mantenimiento así como las tareas incluidas en el mismo.

  • '11. Reliability:' Finalizado ya el ciclo de vida, se inicia con este capítulo la revisión a otros conceptos importantes. En este caso, la fiabilidad (reliability) del software. Se introduce el concepto y se explican algunas métricas relacionadas. También se habla de los errores, de la tolerancia a fallos y se aporta algún análisis matemático.

  • '12. Software Quality:' En materia de calidad, se explica primero el concepto, algunas cualidades del software y del establecimiento de un plan de calidad. También se cuentan algunas técnicas y herramientas . Luego se habla del aseguramiento de la calidad y cómo encaja en el ciclo de vida así como de normas ISO relacionadas con la calidad. En el tramo final se comentan los modelos de madurez e incluso de Six Sigma.

  • '13. CASE and Reuse:' Un capítulo con dos temas bastante diferenciados. Por un lado, las herramientas CASE, que se describen bastante ampliamente y, por otro, conceptos de componentes y reutilización.

  • '14. Recent Trends and Development in Software Engineering:' Un capítulo de cierre con algunas tendencias más modernas en ingeniería software como son Agile, Model Driven o Aspectos. También se intercalan, aunque creo que de una forma algo confusa, elementros de Inteligencia Artificial, Data Mining, Modelado de Datos, etc

Aunque al final de cada capítulos se incluyen una serie de preguntas y ejercicios, se cierra el libro con un capítulo final, '15. Model Questions With Answers:' completamente dedicado a preguntas y respuestas presentando hasta seis exámenes completos.

'Fundamentals of Software Engineerig' es un libro que, al final, me ha decepcionado un tanto. En primer lugar porque está bstante menos actualizado de lo que esperaba, dada la recientísima fecha de publicación. Luego, porque no está bien cuidada la estructuración y con frecuencia, dentro del mismo capítulo o en otros posteriores se retoman y vuelven a explicar temas ya abordados, generando una cierta confusión en cuanto a la estructura e hilo argumental. En algún caso, además, cuestionaría algún contenido (como la forma de inroducir la reinmgeniería o Six Sigma). Finalmente, los autores han hecho un esfuerzo de simplificación pero creo que eso, en algunas ocasiones, les lleva más que a la simplicidad a la carencia, y a que no se entienda realmente el concepto explicado.

Un libro, en fin, algo fallido. Una pena.