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