I think the problem is much harder than we think it is. In my experience, when you "hand build" a model of a codebase, either in your head, in your head plus notes, or in an actual diagram, you make *a lot* of executive decisions: what relationships you focus on, at what level, whether to include implicit or dynamic relationships, etc. None of this is easily automatable, and some might be virtually impossible to.
Compare that to something like a call graph, or a module dependency diagram. The last will be more complete, but will convey *much less* information than the later.
This varies with technology, some will be more friendly than others to this kind of tool, I think that the more dynamic, the worse, but even in very static and consistent language, I would not bet on any tool being better than the brain's parser for a long time.
Compare that to something like a call graph, or a module dependency diagram. The last will be more complete, but will convey *much less* information than the later.
This varies with technology, some will be more friendly than others to this kind of tool, I think that the more dynamic, the worse, but even in very static and consistent language, I would not bet on any tool being better than the brain's parser for a long time.