IP Library Granted Patent US 9,361,077
Granted Patent B1
US 9,361,077 · App. 14/871,304 · Granted Jun 7, 2016

Hierarchical dependency analysis of source code

Inventors: Joshua George Hale (Oxford, GB); Luke James Cartey (Oxford, GB); Geoffrey White (Oxford, GB)
G06F8/433G06F8/443G06F8/71G06F8/73
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,361,077
App. No.
14/871,304
Granted
Jun 7, 2016
Kind
B1
Abstract

Methods, systems, and apparatus, including computer programs encoded on computer storage media, for generated aggregated dependencies between software elements in a code base. One of the methods includes processing selected software elements as represented by a raw dependency graph and a hierarchy graph to generate data representing an aggregated dependency graph, the aggregated dependency graph having nodes representing the selected software elements and aggregated dependencies between one or more of the selected software elements, wherein each aggregated dependency between a pair of the selected software elements represents that a first software element of the pair, or a descendant of the first software element according to the hierarchy graph, depends, according to the raw dependency graph, on a second software element of the pair or a descendant of the second software element according to the hierarchy graph. The data representing the aggregated dependency graph is provided in response to the request.

Claims (62)

1. A computer-implemented method comprising:

receiving from a user a request to generate aggregated dependencies between a plurality of software elements in a project, wherein the request specifies a plurality of selected software elements;

obtaining data representing a raw dependency graph of software elements in the project, the raw dependency graph having nodes and directed links, wherein each node in the raw dependency graph represents a software element in the project and each directed link connects a corresponding pair of nodes and represents a dependency of a first software element represented by a first node of the pair on a second software element represented by a second node of the pair;

obtaining data representing a hierarchy graph of the software elements in the project, the hierarchy graph having nodes and directed links, wherein each node in the hierarchy graph represents a software element in the project and each directed link connects a corresponding pair of nodes and represents containment of a child software element represented by a first node of the pair by a parent software element represented by a second node of the pair;

processing the selected software elements as represented by the raw dependency graph and the hierarchy graph to generate data representing an aggregated dependency graph, the aggregated dependency graph having nodes representing the selected software elements and aggregated dependencies between one or more of the selected software elements, wherein each aggregated dependency between a pair of the selected software elements represents that a first software element of the pair, or a descendant of the first software element according to the hierarchy graph, depends, according to the raw dependency graph, on a second software element of the pair or a descendant of the second software element according to the hierarchy graph; and

providing the data representing the aggregated dependency graph in response to the request.

2. The method of claim 1 , further comprising:

computing the aggregated dependencies between each pair of software element nodes, including:

generating a first set of aggregated outbound dependencies outbound from a first node of the pair and dependencies outbound from any descendant of the first node of the pair in the hierarchy;

generating a second set of aggregated inbound dependencies inbound to a second node of the pair and dependencies inbound to any descendant of the second node of the pair;

computing an intersection of the first set of aggregated outbound dependencies and the second set of aggregated inbound dependencies; and

generating an aggregated dependency link from the first node of the pair to the second node of the pair whenever the intersection is not empty.

3. The method of any of claims claim 1 , wherein the hierarchy graph is a tree, and wherein the raw dependency graph is not a tree.

4. The method of any of claims 1 , wherein the hierarchy graph includes a superset of nodes of the raw dependency graph.

5. The method of any of claims 1 , wherein the aggregated dependency graph is computed after the request from the user is received.

6. The method of any of claims 1 , further comprising providing a user interface presentation that presents the aggregated dependency graph.

7. The method of claim 6 , further comprising presenting, adjacent to each link connecting a pair of nodes representing a first software element and a second software element, a count, the count being a count of dependencies that exist from the first software element or any descendant of the first software element in the hierarchy graph on the second software element of the pair or any descendant of the second software element in the hierarchy graph.

8. The method of claim 6 , further comprising presenting the user interface presentation within an integrated development environment or a code review tool.

9. The method of any of claims 1 , further comprising:

receiving, from a user, a selection of one or more dependency types; and

filtering the aggregated dependency graph to contain only aggregated dependencies having the selected one or more dependency types.

10. A system comprising:

one or more computers and one or more storage devices storing instructions that are operable, when executed by the one or more computers, to cause the one or more computers to perform operations comprising:

obtaining data representing a raw dependency graph of software elements in the project, the raw dependency graph having nodes and directed links, wherein each node in the raw dependency graph represents a software element in the project and each directed link connects a corresponding pair of nodes and represents a dependency of a first software element represented by a first node of the pair on a second software element represented by a second node of the pair;

obtaining data representing a hierarchy graph of the software elements in the project, the hierarchy graph having nodes and directed links, wherein each node in the hierarchy graph represents a software element in the project and each directed link connects a corresponding pair of nodes and represents containment of a child software element represented by a first node of the pair by a parent software element represented by a second node of the pair;

processing the selected software elements as represented by the raw dependency graph and the hierarchy graph to generate data representing an aggregated dependency graph, the aggregated dependency graph having nodes representing the selected software elements and aggregated dependencies between one or more of the selected software elements, wherein each aggregated dependency between a pair of the selected software elements represents that a first software element of the pair, or a descendant of the first software element according to the hierarchy graph, depends, according to the raw dependency graph, on a second software element of the pair or a descendant of the second software element according to the hierarchy graph; and

providing the data representing the aggregated dependency graph in response to the request.

11. The system of claim 10 , wherein the operations further comprise:

computing the aggregated dependencies between each pair of software element nodes, including:

generating a first set of aggregated outbound dependencies outbound from a first node of the pair and dependencies outbound from any descendant of the first node of the pair in the hierarchy;

generating a second set of aggregated inbound dependencies inbound to a second node of the pair and dependencies inbound to any descendant of the second node of the pair;

computing an intersection of the first set of aggregated outbound dependencies and the second set of aggregated inbound dependencies; and

generating an aggregated dependency link from the first node of the pair to the second node of the pair whenever the intersection is not empty.

12. The system of claim 10 , wherein the hierarchy graph is a tree, and wherein the raw dependency graph is not a tree.

13. The system of claim 10 , wherein the hierarchy graph includes a superset of nodes of the raw dependency graph.

14. The system of claim 10 , wherein the aggregated dependency graph is computed after the request from the user is received.

15. The system claim 10 , wherein the operations further comprise providing a user interface presentation that presents the aggregated dependency graph.

16. The system of claim 15 , wherein the operations further comprise presenting, adjacent to each link connecting a pair of nodes representing a first software element and a second software element, a count, the count being a count of dependencies that exist from the first software element or any descendant of the first software element in the hierarchy graph on the second software element of the pair or any descendant of the second software element in the hierarchy graph.

17. The system of claim 15 , further comprising presenting the user interface presentation within an integrated development environment or a code review tool.

18. The system of claim 10 , wherein the operations further comprise:

receiving, from a user, a selection of one or more dependency types; and

filtering the aggregated dependency graph to contain only aggregated dependencies having the selected one or more dependency types.

19. A computer program product, encoded on one or more non-transitory computer storage media, comprising instructions that when executed by one or more computers cause the one or more computers to perform operations comprising:

obtaining data representing a raw dependency graph of software elements in the project, the raw dependency graph having nodes and directed links, wherein each node in the raw dependency graph represents a software element in the project and each directed link connects a corresponding pair of nodes and represents a dependency of a first software element represented by a first node of the pair on a second software element represented by a second node of the pair;

obtaining data representing a hierarchy graph of the software elements in the project, the hierarchy graph having nodes and directed links, wherein each node in the hierarchy graph represents a software element in the project and each directed link connects a corresponding pair of nodes and represents containment of a child software element represented by a first node of the pair by a parent software element represented by a second node of the pair;

processing the selected software elements as represented by the raw dependency graph and the hierarchy graph to generate data representing an aggregated dependency graph, the aggregated dependency graph having nodes representing the selected software elements and aggregated dependencies between one or more of the selected software elements, wherein each aggregated dependency between a pair of the selected software elements represents that a first software element of the pair, or a descendant of the first software element according to the hierarchy graph, depends, according to the raw dependency graph, on a second software element of the pair or a descendant of the second software element according to the hierarchy graph; and

providing the data representing the aggregated dependency graph in response to the request.

20. The computer program product of claim 19 , wherein the operations further comprise:

computing the aggregated dependencies between each pair of software element nodes, including:

generating a first set of aggregated outbound dependencies outbound from a first node of the pair and dependencies outbound from any descendant of the first node of the pair in the hierarchy;

generating a second set of aggregated inbound dependencies inbound to a second node of the pair and dependencies inbound to any descendant of the second node of the pair;

computing an intersection of the first set of aggregated outbound dependencies and the second set of aggregated inbound dependencies; and

generating an aggregated dependency link from the first node of the pair to the second node of the pair whenever the intersection is not empty.

21. The computer program product of claim 19 , wherein the hierarchy graph is a tree, and wherein the raw dependency graph is not a tree.

22. The computer program product of claim 19 , wherein the hierarchy graph includes a superset of nodes of the raw dependency graph.

23. The computer program product of claim 19 , wherein the aggregated dependency graph is computed after the request from the user is received.

24. The computer program product claim 19 , wherein the operations further comprise providing a user interface presentation that presents the aggregated dependency graph.

25. The computer program product of claim 24 , wherein the operations further comprise presenting, adjacent to each link connecting a pair of nodes representing a first software element and a second software element, a count, the count being a count of dependencies that exist from the first software element or any descendant of the first software element in the hierarchy graph on the second software element of the pair or any descendant of the second software element in the hierarchy graph.

26. The computer program product of claim 24 , further comprising presenting the user interface presentation within an integrated development environment or a code review tool.

27. The computer program product of claim 19 , wherein the operations further comprise:

receiving, from a user, a selection of one or more dependency types; and

filtering the aggregated dependency graph to contain only aggregated dependencies having the selected one or more dependency types.

Assignments (4)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 27, 2020
From: GITHUB SOFTWARE UK LTD.
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 051710/0252 →
CHANGE OF NAME Recorded Dec 10, 2019
From: SEMMLE LIMITED
To: GITHUB SOFTWARE UK LTD.
Reel/Frame 051244/0305 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 28, 2015
From: HALE, JOSHUA GEORGE
To: SEMMLE LIMITED
Reel/Frame 036906/0610 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 28, 2015
From: CARTEY, LUKE JAMES; WHITE, GEOFFREY
To: SEMMLE LIMITED
Reel/Frame 036906/0744 →
Continuity (1)
Provisional Application 62234939 · Sep 30, 2015