A computer-implemented method for static analysis of computer software source code comprising: receiving, from a user, a request for an aggregated attribute value for a requested portion of a source code base said source code base being organized as a collection of source code files having a respective path in a hierarchical directory structure; obtaining data representing a directed graph, the graph having leaf nodes and parent nodes, wherein each node in the graph represents a source code file or directory, and edges between the nodes represent directory inclusion, corresponding to a respective portion of the source code base, each parent node of the graph represents all the source code files and directories of all descendants of the parent node; characterized by identifying metric instances associated with any node representing a source code file, wherein each metric instance has a respective identifier, a respective attribute type, and a value quantifying the attribute for one or more locations of the respective requested portion of the source code base, said one or more locations being specified by a respective path of the source code file of the respective requested portion of the source code base and a respective start position within the respective source code file, wherein the metric instances include at least one metric instance that is associated with multiple files in the code base; computing a first set of metric instances associated with a first node, representing the requested portion of the source code base, as a set union of the metric instances having a respective attribute type associated with the first node and any node directly descendant from the first node in the graph, in which each identifier of the one or more sets of metric instance associated with the first node and any node directly descendant from the first node in the graph occurs in the first set of metric instances no more than once; computing, for the portion of the source code base identified by the request, the aggregated attribute value from the first set of metric instances associated with the first node, the aggregated attribute value being computed from a respective metric value of each metric instance in the first set of metric instances associated with the first node; and thereby providing, to the user in response to the request, the computed aggregated attribute value for the portion of the source code base. receiving, from a user, a request for an aggregated attribute value for a requested portion of a source code base said source code base being organized as a collection of source code files having a respective path in a hierarchical directory structure; obtaining data representing a directed graph, the graph having leaf nodes and parent nodes, wherein each node in the graph represents a source code file or directory, and edges between the nodes represent directory inclusion, corresponding to a respective portion of the source code base, each parent node of the graph represents all the source code files and directories of all descendants of the parent node; characterized by identifying metric instances associated with any node representing a source code file, wherein each metric instance has a respective identifier, a respective attribute type, and a value quantifying the attribute for one or more locations of the respective requested portion of the source code base, said one or more locations being specified by a respective path of the source code file of the respective requested portion of the source code base and a respective start position within the respective source code file, wherein the metric instances include at least one metric instance that is associated with multiple files in the code base; computing a first set of metric instances associated with a first node, representing the requested portion of the source code base, as a set union of the metric instances having a respective attribute type associated with the first node and any node directly descendant from the first node in the graph, in which each identifier of the one or more sets of metric instance associated with the first node and any node directly descendant from the first node in the graph occurs in the first set of metric instances no more than once; computing, for the portion of the source code base identified by the request, the aggregated attribute value from the first set of metric instances associated with the first node, the aggregated attribute value being computed from a respective metric value of each metric instance in the first set of metric instances associated with the first node; and thereby providing, to the user in response to the request, the computed aggregated attribute value for the portion of the source code base.