Kindle Edition
Read instantly on your iPad, PC or Mac, no Kindle required
Buy Price: $28.49
Rent From: $13.22
 
 
 
Sell Back Your Copy
For a $0.71 Gift Card
Trade in
Have one to sell? Sell yours here
Object-Oriented Reengineering Patterns (The Morgan Kaufmann Series in Software Engineering and Programming)
 
 

Object-Oriented Reengineering Patterns (The Morgan Kaufmann Series in Software Engineering and Programming) [Hardcover]

Serge Demeyer (Author), Stéphane Ducasse (Author), Oscar Nierstrasz (Author)
4.3 out of 5 stars  See all reviews (3 customer reviews)


Available from these sellers.


Textbook Student FREE Two-Day Shipping for Students. Learn more

Formats

Amazon Price New from Used from
Kindle Edition
Rent from
$28.49
$13.22
 
Hardcover --  
Paperback $31.66  

Book Description

1558606394 978-1558606395 July 17, 2002 1st
The documentation is missing or obsolete, and the original developers have departed. Your team has limited understanding of the system, and unit tests are missing for many, if not all, of the components. When you fix a bug in one place, another bug pops up somewhere else in the system. Long rebuild times make any change difficult. All of these are signs of software that is close to the breaking point.

Many systems can be upgraded or simply thrown away if they no longer serve their purpose. Legacy software, however, is crucial for operations and needs to be continually available and upgraded. How can you reduce the complexity of a legacy system sufficiently so that it can continue to be used and adapted at acceptable cost?

Based on the authors' industrial experiences, this book is a guide on how to reverse engineer legacy systems to understand their problems, and then reengineer those systems to meet new demands. Patterns are used to clarify and explain the process of understanding large code bases, hence transforming them to meet new requirements. The key insight is that the right design and organization of your system is not something that can be evident from the initial requirements alone, but rather as a consequence of understanding how these requirements evolve.

* Describes how to reverse engineer a monolithic system to understand how it really works and how to identify potential problems.
* Includes reengineering patterns that tackle well-known reengineering techniques often encountered in object-oriented programming, such as introducing polymorphism, factoring out common behavior, detecting duplicated code, and understanding design.
* Shows how to build a culture of continuous reengineering for achieving flexible and maintainable object-oriented systems.


Editorial Reviews

Review

"'How' to refactor is already well covered in the literature. However, 'When' and 'Why' can only be learned by experience. This book will give you a head start in learning when to start redesigning a system, when to stop for now, and what effects you can expect to see from your efforts."
-Kent Beck, Director, Three Rivers Institute

"This book full of practical, hands-on reengineering knowledge and expertise presented in a form that makes it easy to understand and use. The patterns in this book thus help everyone who is concerned with reengineering to guide their work. I wished I had had this book in my library earlier."
-Frank Buschmann, Senior Principal Engineer, Siemens AG

"This book is more than its title advertises. Effective reengineering is really about purposeful and efficient reading of someone else's code in order to produce predictable change. The same processes the authors highlight as patterns of skillful reengineering behavior can easily be cast as the skills you need to create readable, maintainable software systems."
-Adele Goldberg, Neometron, Inc.

"If a guy named Dave brought a large box to my office that contained a lot of documentation and two CDs-installation disks for software that my company wanted to reengineer-I'd be happy to have the authors of this book at my side. Barring that, having their book is the next best thing. No silver bullets, no hype, no promises that this will be easy-just a down-to-earth, easy-to-read, extremely useful book of helpful guidelines to tackle the project. Buy this book and browse it before Dave arrives in your office! It just might save you and your company a lot of grief."
-Linda Rising, Independent Consultant

From the Back Cover

"This book speaks with experience. It gives you the building blocks for a plan to tackle a difficult code base and the context for techniques like refactoring. It is a sad fact that there are too few of these kinds of books out there, when reengineering is such a common event. But I'm at least glad to see that while there aren't many books in this vein, this book is an example of how good they are."
—From the foreword by Martin Fowler

The documentation is missing or obsolete, and the original developers have departed. Your team has limited understanding of the system, and unit tests are missing for many, if not all, of the components. When you fix a bug in one place, another bug pops up somewhere else in the system. Long rebuild times make any change difficult. All of these are signs of software that is close to the breaking point.

Many systems can be upgraded or simply thrown away if they no longer serve their purpose. Legacy software, however, is crucial for operations and needs to be continually available and upgraded. How can you reduce the complexity of a legacy system sufficiently so that it can continue to be used and adapted at acceptable cost?

Based on the authors' industrial experiences, this book is a guide on how to reverse engineer legacy systems to understand their problems, and then reengineer those systems to meet new demands. Patterns are used to clarify and explain the process of understanding large code bases, hence transforming them to meet new requirements. The key insight is that the right design and organization of your system is not something that can be evident from the initial requirements alone, but rather as a consequence of understanding how these requirements evolve.

Features:
* Describes how to reverse engineer a monolithic system to understand how it really works and how to identify potential problems.
* Includes reengineering patterns that tackle well-known reengineering techniques often encountered in object-oriented programming, such as introducing polymorphism, factoring out common behavior, detecting duplicated code, and understanding design.
* Shows how to build a culture of continuous reengineering for achieving flexible and maintainable object-oriented systems.

Product Details

  • Hardcover: 282 pages
  • Publisher: Morgan Kaufmann; 1st edition (July 17, 2002)
  • Language: English
  • ISBN-10: 1558606394
  • ISBN-13: 978-1558606395
  • Product Dimensions: 9.3 x 7.2 x 0.9 inches
  • Shipping Weight: 1.8 pounds
  • Average Customer Review: 4.3 out of 5 stars  See all reviews (3 customer reviews)
  • Amazon Best Sellers Rank: #741,994 in Books (See Top 100 in Books)

More About the Author

Discover books, learn about writers, read author blogs, and more.

 

Customer Reviews

3 Reviews
5 star:
 (1)
4 star:
 (2)
3 star:    (0)
2 star:    (0)
1 star:    (0)
 
 
 
 
 
Average Customer Review
4.3 out of 5 stars (3 customer reviews)
 
 
 
 
Share your thoughts with other customers:
Most Helpful Customer Reviews

7 of 7 people found the following review helpful:
5.0 out of 5 stars Applicable every day, February 29, 2004
Amazon Verified Purchase(What's this?)
This review is from: Object-Oriented Reengineering Patterns (The Morgan Kaufmann Series in Software Engineering and Programming) (Hardcover)
The authors wrote better than they knew. My own experience is that reverse engineering is at least 20% of a typical software engineer's typical day. It's the study that a developer puts towards understanding a system well enough to make necessary changes, rediscovering enough about the system to enable the task at hand. The authors addressed their book to specific re-engineering projects, as isolated events, but they really wrote about the everyday life of almost every programmer.

As Johnson points out in the foreword, much if the information has an "everybody knows that" feel about it. I found a few new tips or new phrases, but mostly I found a clear, systematic organization of facts and techniques that are widely applied. The authors' arrangement of known techniques makes them especially valuable, much the way an arrangement of ordinary playing cards can become a valuable hand in poker.

Among other things, these authors are the first to convince me that software metrics can be a net gain to a developer. My own, sad exposure to metrics has been normative, a stick wielded blindly in the name of misunderstood "quality". This book shows how to use metrics in a constructive, exploratory way. The complexity (or whatever) scores are not the output of the process, they are intermediate results to be discarded as soon as they've pointed the way to the real problems.

I found only a very few points to disagree with. For example, the authors point out pros and cons of prototypes, but missed the biggest danger of a working prototype: that, no matter what caveats are given, it can be mistaken for a real system. Over-eager clients or managers driven by a false sense of efficiency may demand that the developers just add a feature or two (usually, system's entire capability) and ship it tomorrow. Elsewhere, the authors noted that converting from a command line interface to a GUI can be jarring for users, but did not point out that a GUI can provide a command entry field, at least as a transition aid. I would also have been happier with a longer discussion in ch.10 of type checking - I agree with the authors completely, but feel that they missed some common variations on the type-testing theme and reasons for it.

The authors suggested using dot plots for describing similarity between bodies of code, a representation I first saw in genome analysis. It strengthens the image of a program as a living, evolving thing, but also suggests that other genomic tools could possibly have value in understanding software. Programs are really just long strings, and geneticists have a huge box of subtle tools for analyzing long strings. Mating of the two fields could spawn a new generation of techniques for extracting information from existing software.

I recommend this book very highly. It's thorough, practical, and readable. It addresses software maintenance - i.e., most of the software industry - as a valuable task, worth serious study and investment in tools. A brief review can't do justice to the book's rich content. I hope you explore it for yourself.

Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No


3 of 3 people found the following review helpful:
4.0 out of 5 stars Practical advice for reengineering, September 14, 2003
By 
This review is from: Object-Oriented Reengineering Patterns (The Morgan Kaufmann Series in Software Engineering and Programming) (Hardcover)
If you are charged with reengineering a piece of software; if you are considering rewriting software; or even if you are trying to evaluate whether or not it is worth further effort in maintaining a piece of code: in all of these cases, read this book before you start. Not only will it give you tried and tested advice about the motivations for reengineering, should you then decide that reengineering is necessary, this book provides suggested approaches which will help structure your work and could save you valuable time and effort.

Excluding an introductory chapter and an appendix, the book is divided into two sections: Reverse Engineering (Part 1, Chapters 2-5) and Reengineering (Part 2, Chapters 6-10). The first of these sections deals with analysing the code and seeks to answer the question: "Where does one start when presented with a large code base which is a candidate for reengineering?" The patterns presented here help one decide how (or whether) to proceed, help establish confidence in the course of action chosen and give guidance for those worrisome first steps into the unknown. The second section deals with the reengineering itself: testing, migration and restructuring of the code base. Testing ensures that what is re-created reproduces (to the extent desired) the effects produced by the original code base. How do you know that your changes haven't broken the code? Strategies for migration are clearly necessary since we want our new system to be used and evaluated as it is being reengineered. Finally the last three chapters in the book give good, solid, uncontroversial advice about the restructuring of object-oriented code.

Presented in an easy-to-read style, the patterns presented in this book should give you a head start in your reengineering endeavours.

Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No


2 of 3 people found the following review helpful:
4.0 out of 5 stars Plans on how to perform major reorganizations of software, May 6, 2003
This review is from: Object-Oriented Reengineering Patterns (The Morgan Kaufmann Series in Software Engineering and Programming) (Hardcover)
The authors define a reengineering pattern as one to be globally applied to a large, functioning system that needs to be improved. Their formal definition is "Reengineering is the examination and alteration of a subject system to reconstitute it in a new form and the subsequent implementation of the new form." Reasons for improvement could be necessity due to poor performance or just the next iteration of the upgrade cycle where major changes are necessary. In any case, the intent is to perform substantial modifications to the code, generally all the way down to the basic design. Their emphasis is not on converting legacy systems without objects to one that is object-oriented. These patterns are used to convert object-oriented systems into systems that are still object-oriented, but where the implementation is more efficient, either in speed of execution or ease of maintenance. In that sense, the book is timely, as object-oriented programming has now been around long enough that the early systems are beginning to show signs of code rot. Furthermore, our understanding of object-oriented programming has matured a great deal in the past several years, and for many it is time to take advantage of this knowledge.
The start point is expected, you begin by setting a general goal, which imposes a generic direction. This involves determining what the inadequacies are perceived to be as well as the expectations for the reengineered product. Once this is done, the next step is a feasibility analysis, which involves the following patterns: Read All the Code in One Hour, Skim the Documentation and Do a Mock Installation. While these patterns are not necessarily to be taken literally, they are very sensible. The source code that currently exists may not be the original, so the most logical first step is to attempt a compilation and install operation. Nothing could tell you more about the seriousness of the potential problems than having an attempted compile fail with a number of errors that exceeds the limits set on the compiler.
Assuming that works, the next step is to perform an hour-long scan of the source code. The idea here is not to read it all, but to examine enough of it to get a sense of how well it is put together. This time limit is of course somewhat arbitrary. It may only take you ten minutes to realize that the code was written by deviants. Finally, a cursory examination of the documentation will help you determine if it is to be of any use. This is the point where you must pay the greatest attention, so it may take longer than the other two. Although the documentation may be wonderful, it is necessary for you to read it in conjunction with the associated code, to verify that the two are synchronized. In this case, one may simply want to randomize the examination in some way, and then probe the selected sections in great detail.
Once you have performed the previous tests without running away in terror, it is necessary to begin the changes by applying more specific patterns. The first set of specific patterns are used to capture a detailed model of the system, followed by the construction of tests, migration strategies, how to detect duplicated code, redistribute responsibilities, and transform conditionals to polymorphism. The last three are standard refactorings, which shows the movement from general strategies to the more specific. However, the authors are still operating at the system level, so the patterns are more general than refactoring. For example, the patterns on duplicated code are how to identify duplicated code rather than the mechanics of how it is removed.
The patterns are described using the structure: The name of the pattern and the problem(s) it addresses, the solution, the list of trade-offs separated into the pros, cons and difficulties; an example, the reasons for applying the pattern and other patterns that are related to it. I found this approach to be refreshing, as many authors give solutions without pointing out the problems their solutions can generate. In general, the patterns form a set of sound advice, but it is up to you to make the transition from the system level to the specifics of code change.
If you are faced with a major reorganization of a large project, then I wish you well. However, like these authors I will do more than just give you sympathy and encouragement. My task is much easier, in that I will simply encourage you to read this book. They did all the hard work of constructing a plan, and you would be wise to listen to them.

Published in the online Journal of Object Technology, reprinted with permission.

Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No

Share your thoughts with other customers: Create your own review
 
 
 
Only search this product's reviews



Inside This Book (learn more)
First Sentence:
A legacy is something valuable that you have inherited. Read the first page
Key Phrases - Statistically Improbable Phrases (SIPs): (learn more)
explicit type checks, reengineering patterns, obsolete interfaces, provider hierarchy, navigation code, duplicated code, transform conditionals, exceptional entities, god class, indirect provider, legacy solution, indirect clients, misplaced responsibilities, conditional code, provider class, original development team, legacy component, reengineering project, typical usage scenarios, published interfaces, accessor methods, hook method, data container, configuration management system, legacy services
Key Phrases - Capitalized Phrases (CAPs): (learn more)
Trade-offs Pros, Read All the Code, Migrate Systems Incrementally, Move Behavior Close, Skim the Documentation, Transform Client Type Checks, Present the Right Interface, Record Business Rules, Test the Interface, Transform Self Type Checks, Most Valuable First, Study the Exceptional Entities, Detailed Model Capture, Factor Out Strategy, Setting Direction, Analyze the Persistent Data, Factor Out State, Fix Problems, New Town, Compare Code Mechanically, Deprecate Obsolete Interfaces, Extract Method, Mock Installation, Grow Your Test Base Incrementally, Introduce Null Object
New!
Books on Related Topics | Concordance | Text Stats
Browse Sample Pages:
Front Cover | Table of Contents | First Pages | Index | Surprise Me!
Search Inside This Book:




What Other Items Do Customers Buy After Viewing This Item?


Tags Customers Associate with This Product

 (What's this?)
Click on a tag to find related items, discussions, and people.
 
(1)

Your tags: Add your first tag
 

Customer Discussions

This product's forum
Discussion Replies Latest Post
No discussions yet

Ask questions, Share opinions, Gain insight
Start a new discussion
Topic:
First post:
Prompts for sign-in
 


Active discussions in related forums
Search Customer Discussions
Search all Amazon discussions
   
Related forums


Listmania!

Create a Listmania! list

So You'd Like to...


Create a guide


Look for Similar Items by Category


Look for Similar Items by Subject