IP Library Granted Patent US 9,411,706
Granted Patent B1
US 9,411,706 · App. 14/871,299 · Granted Aug 9, 2016

Suggesting candidate removable software dependencies

Inventor: Sebastiaan Johannes van Schaik (Oxford, GB)
Assignee: Semmle Limited
G06F11/3604G06F11/3668
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,411,706
App. No.
14/871,299
Granted
Aug 9, 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 determining that a cycle exists in the aggregated dependency graph, determining which of the links in the cycle has a lowest weight, and adding a first link in the cycle having the lowest weight to a set of candidate removable links. The links in the set of candidate removable links are classified as candidate removable links, and a user interface presentation is provided that presents the aggregated dependency graph and which visually distinguishes removable links from other links in the aggregated dependency graph.

Claims (79)

1. A computer-implemented method comprising:

receiving data representing an aggregated dependency graph, the aggregated dependency graph having nodes representing selected software elements in a project and having links, the links connecting nodes in the aggregated dependency graph, the links representing respective aggregated dependencies between one or more of the selected software elements in the project, wherein each aggregated dependency between a pair of nodes represents that a first software element represented by a first node of the pair, or a descendant of the first software element in a hierarchy graph of software elements in the project, depends, according to a raw dependency graph of software elements in the project, on a second software element represented by a second node of the pair or a descendant of the second software element in the hierarchy graph of software elements in the project;

computing a respective weight of each link of the aggregated dependency graph, wherein each respective weight of each link between each pair of nodes is based on a count of raw dependencies that exist in the raw dependency graph from a first software element represented by a first node of the pair or any descendant of the first software element in the hierarchy graph to a second software element represented by a second node of the pair or any descendant of the second software element in the hierarchy graph;

determining that a cycle exists in the aggregated dependency graph;

determining which of the links in the cycle has a lowest weight;

adding a first link in the cycle having the lowest weight to a set of candidate removable links;

classifying links in the set of candidate removable links as removable links; and

providing a user interface presentation that presents the aggregated dependency graph and which visually distinguishes removable links from other links in the aggregated dependency graph.

2. The method of claim 1 , further comprising:

receiving a user indication of a particular link that should be discarded if possible from the set of candidate removable links;

determining whether removing the particular link from the set of candidate removable links would reintroduce a cycle in the aggregated dependency graph; and

removing the particular link from the set of candidate removable links if removing the particular link would not reintroduce a cycle in the aggregated dependency graph.

3. The method of claim 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.

4. The method of claim 1 , further comprising:

receiving, from a user, an indication that a particular link is not a candidate for removal,

wherein determining which of the links in the cycle has the lowest weight comprises determining which of the links in the cycle other than the particular link has a lowest weight.

5. The method of claim 1 , wherein the presentation of the aggregated dependency graph has a layout in which all removable links point in a same direction.

6. The method of claim 5 , wherein all other links point in a different direction than the direction of the removable links.

7. The method of claim 6 , wherein the presentation has a layout of software element nodes in multiple layers in which there are no dependencies between software element nodes occurring in a same layer.

8. The method of claim 7 , wherein the presentation presents the layers grouped into clusters, and wherein the presentation includes aggregated dependency links between the clusters.

9. The method of claim 1 , further comprising:

determining that one or more software elements in the aggregated dependency graph are cyclically connected;

generating a tangle node representing the one or more software elements that are cyclically connected,

wherein the presentation presents the tangle node and one or more aggregated dependency links between the tangle node and one or more other software element nodes.

10. The method of claim 9 , wherein the aggregated dependency graph with one or more tangle nodes is an acyclic graph.

11. The method of claim 9 , wherein the presentation presents a cyclic graph within a representation of the tangle node, the cyclic graph representing aggregated dependencies between the one or more software elements that are cyclically connected.

12. The method of claim 1 , wherein the presentation presents removable links in a different color, style, or line thickness than other links.

13. 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:

receiving data representing an aggregated dependency graph, the aggregated dependency graph having nodes representing selected software elements in a project and having links, the links connecting nodes in the aggregated dependency graph, the links representing respective aggregated dependencies between one or more of the selected software elements in the project, wherein each aggregated dependency between a pair of nodes represents that a first software element represented by a first node of the pair, or a descendant of the first software element in a hierarchy graph of software elements in the project, depends, according to a raw dependency graph of software elements in the project, on a second software element represented by a second node of the pair or a descendant of the second software element in the hierarchy graph of software elements in the project;

computing a respective weight of each link of the aggregated dependency graph, wherein each respective weight of each link between each pair of nodes is based on a count of raw dependencies that exist in the raw dependency graph from a first software element represented by a first node of the pair or any descendant of the first software element in the hierarchy graph to a second software element represented by a second node of the pair or any descendant of the second software element in the hierarchy graph;

determining that a cycle exists in the aggregated dependency graph;

determining which of the links in the cycle has a lowest weight;

adding a first link in the cycle having the lowest weight to a set of candidate removable links;

classifying links in the set of candidate removable links as removable links; and

providing a user interface presentation that presents the aggregated dependency graph and which visually distinguishes removable links from other links in the aggregated dependency graph.

14. The system of claim 13 , wherein the operations further comprise:

receiving a user indication of a particular link that should be discarded if possible from the set of candidate removable links;

determining whether removing the particular link from the set of candidate removable links would reintroduce a cycle in the aggregated dependency graph; and

removing the particular link from the set of candidate removable links if removing the particular link would not reintroduce a cycle in the aggregated dependency graph.

15. The system of claim 13 , 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.

16. The system of claim 13 , wherein the operations further comprise:

receiving, from a user, an indication that a particular link is not a candidate for removal,

wherein determining which of the links in the cycle has the lowest weight comprises determining which of the links in the cycle other than the particular link has a lowest weight.

17. The system of claim 13 , wherein the presentation of the aggregated dependency graph has a layout in which all removable links point in a same direction.

18. The system of claim 17 , wherein all other links point in a different direction than the direction of the removable links.

19. The system of claim 18 , wherein the presentation has a layout of software element nodes in multiple layers in which there are no dependencies between software element nodes occurring in a same layer.

20. The system of claim 19 , wherein the presentation presents the layers grouped into clusters, and wherein the presentation includes aggregated dependency links between the clusters.

21. The system of claim 13 , wherein the operations further comprise:

determining that one or more software elements in the aggregated dependency graph are cyclically connected;

generating a tangle node representing the one or more software elements that are cyclically connected,

wherein the presentation presents the tangle node and one or more aggregated dependency links between the tangle node and one or more other software element nodes.

22. The system of claim 21 , wherein the aggregated dependency graph with one or more tangle nodes is an acyclic graph.

23. The system of claim 21 , wherein the presentation presents a cyclic graph within a representation of the tangle node, the cyclic graph representing aggregated dependencies between the one or more software elements that are cyclically connected.

24. The system of claim 13 , wherein the presentation presents removable links in a different color, style, or line thickness than other links.

25. 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:

receiving data representing an aggregated dependency graph, the aggregated dependency graph having nodes representing selected software elements in a project and having links, the links connecting nodes in the aggregated dependency graph, the links representing respective aggregated dependencies between one or more of the selected software elements in the project, wherein each aggregated dependency between a pair of nodes represents that a first software element represented by a first node of the pair, or a descendant of the first software element in a hierarchy graph of software elements in the project, depends, according to a raw dependency graph of software elements in the project, on a second software element represented by a second node of the pair or a descendant of the second software element in the hierarchy graph of software elements in the project;

computing a respective weight of each link of the aggregated dependency graph, wherein each respective weight of each link between each pair of nodes is based on a count of raw dependencies that exist in the raw dependency graph from a first software element represented by a first node of the pair or any descendant of the first software element in the hierarchy graph to a second software element represented by a second node of the pair or any descendant of the second software element in the hierarchy graph;

determining that a cycle exists in the aggregated dependency graph;

determining which of the links in the cycle has a lowest weight;

adding a first link in the cycle having the lowest weight to a set of candidate removable links;

classifying links in the set of candidate removable links as removable links; and

providing a user interface presentation that presents the aggregated dependency graph and which visually distinguishes removable links from other links in the aggregated dependency graph.

26. The computer program product of claim 25 , wherein the operations further comprise:

receiving a user indication of a particular link that should be discarded if possible from the set of candidate removable links;

determining whether removing the particular link from the set of candidate removable links would reintroduce a cycle in the aggregated dependency graph; and

removing the particular link from the set of candidate removable links if removing the particular link would not reintroduce a cycle in the aggregated dependency graph.

27. The computer program product of claim 25 , 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.

28. The computer program product of claim 25 , wherein the operations further comprise:

receiving, from a user, an indication that a particular link is not a candidate for removal,

wherein determining which of the links in the cycle has the lowest weight comprises determining which of the links in the cycle other than the particular link has a lowest weight.

29. The computer program product of claim 25 , wherein the presentation of the aggregated dependency graph has a layout in which all removable links point in a same direction.

30. The computer program product of claim 29 , wherein all other links point in a different direction than the direction of the removable links.

Assignments (3)
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 30, 2015
From: VAN SCHAIK, SEBASTIAAN JOHANNES
To: SEMMLE LIMITED
Reel/Frame 037018/0868 →
Continuity (1)
Provisional Application 62234939 · Sep 30, 2015