UVM environments are highly complex. Due to the object-oriented features (class-based approach) the inheritance of objects and classes plays an important role. Self-documentation with the source code is not really helpful. A better approach is to use the methods applied for software development.
I have developed an approach using Doxygen for the documentation of UVM environments. Please find an example document here.