March 30, 2020

Object-Oriented Reengineering Patterns

Este libro es una magnífica colección de heurísticos y estrategias para ayudarnos a comprender un sistema de software complejo y ser eficaces a la hora de poder evolucionarlo y mantenerlo.

Los últimos capítulos están dedicados a estrategias de diseño de software que permitan extender un modelo ya existente, y son los únicos donde se hace referencia a orientación a objetos. Personalmente, también son los que menos valor me han aportado, quizás porque ya han sido desarrollados ampliamente en otro libros (Practical Object-Oriented Design, por poner un ejemplo).

Un libro muy interesante si te toca unirte a un proyecto ya en marcha o te enfrentas a un cambio de trabajo, ya que independientemente del objetivo final (reingeniería) sus consejos son muy útiles para poder entender bases de código relativamente grandes, utilizando las herramientas y actores adecuados (que se cubren en profundidad en la parte II: Reverse Engineering).

A culture of continuous reengineering is a prerequisite for achieving flexible and maintainable object-oriented systems.

  • «It is easy to get seduced by focussing on the technical problems that interest you the most, rather than what is best for the project.»
  • «Other engineering disciplines rely on the laws of nature to hide irrelevant details, but software engineering must build on less solid foundations. Consequently, it is essential to pay attention to the details. The only question is how to filter out those details that do not matter, because you cannot possible investigate everything.»
  • «Documentation is almost always out of date with respect to the actual situation. [...] Consequently, avoid to make important decisions based on documentation only —first verify your findings by other means (in particular, Read all the Code in One Hour and Interview During Demo)»
  • «As a rule of the thumb, assume that a single team can reengineer as much code as they can write from scratch.»
  • «If you fail to deliver good initial results, you will learn a lot, but you risk losing credibility. It is therefore critical to choose carefully initial tasks which not only demonstrate value for the customer, but also have a high chance of success. Therefore, take great care in estimating the effort of the initial tasks.»
  • «Nevertheless, even outdated information may be useful, because at least it tells you how the system was supposed to behave in the past. This is a good starting point to infer how it is used today.»