Best UML Modeling Tool : Reverse Engineering

Q: I am using Microsoft Visio 2007, for reverse engineering my project code to UML model. But some the classes are not getting detected by visio....especially classes having containment relationship. Can anybody suggest a "better" UML modeling tool that can extract classes having complex hierarchies or relationships.

A: The short answer would be: any other tool. MS has put a ton of money into extending VISIO's UML features and it is still utterly unusable for any serious UML modeling. UML drawing tools are not well known for user friendliness but VISIO has crossed over into user viciousness. Worse, it doesn't even support UML correctly. [Truth in advertising. PathMATE is a UML translation tool but it is a portable rear end for other drawing tools. So I don't have an special ax to grind other than the fact that I just got done doing 200+ plus diagrams in VISIO for my book.] Unfortunately the tools that support advanced features like reverse engineering tend to be very pricey. I haven't kept track of the shareware and open source products, but there may be some full-featured drawing tools out there. Alas, I wouldn't get my hopes up over this. By

the time an OOA/D construct gets into OOPL code a lot of information is lost about Why things were done the way they were. So when doing reverse engineering the tool either can't know the relationship because there is nothing in the OOPL code to identify the intent or it has to guess based on some implementation-specific rules. This is especially true for the specialized associations (aggregation, composition, etc.). At the OOPL level there really isn't any unambiguous way to determine what the OOA/D author had in mind. That is pretty much why reverse engineering is a tool-of-last-resort for determining requirements for an undocumented and unmaintainable application.