In reply to Alex K.:
uvm_root is a singleton representing the top level component. Every uvm_component you create with a null parent constructor argument has this singleton set as it parent. That includes the top-level test use specify with +UVM_TESTNAME or the string name you pass to uvm_pkg::run_test(name).
uvm_pkg::run_test(name) is a wrapper that calls the uvm_root::run_test() method. It starts by executing the build_phase, which is traversed top-down. This means it picks a child component of the top-level uvm_root class and executes its build_phase, which is typically the uvm_test specified by +UVM_TESTNAME. As soon the build_phase return, it tries to execute the build_phase of a child of the component whose build_phase just returned. It does not matter that there were no children before the test build_phase started, it only checks for children after the build_phase returns.
The top-down build_phase recursively keep trying to execute the build_phase of the child it just created, until there are no more children. Then it looks to see if it has any siblings. If it does, it calls the build_phase of it sibling, which may create children of its own and the process is repeated. Once there are no more siblings, then it goes up a level and looks for more siblings. When this process completes (no siblings and no more levels to go up) the UVM will have completed a depth-first traversal of all the uvm components.