1. A computer-implemented method for identifying undesirable dependencies among a plurality of software components in a software system, comprising the steps, performed by a computer system, of: (a) receiving information on the software components in the software system, the resources owned or controlled by each software component, and the resources each software component can make use of as declared by metadata in order to identify the intended dependence relationships among the software components; (b) analyzing the software system to determine which software component created each non-source file and to determine which software component accessed which source file or non-source file during its build process, during testing, or during runtime to generate information on the software components and their actual dependence relationships based on use by each software component of resources owned or controlled by another software component; (c) testing consistency between the information received in step (a) and the information generated in step (b) to identify dependency errors; and (d) reporting the dependency errors identified in step (c).