From a22d4f6c98fe0317d6d8692ced38d57f8472cf1f Mon Sep 17 00:00:00 2001 From: Paul Gschwendtner Date: Thu, 16 Apr 2020 23:37:03 +0200 Subject: [PATCH] docs(dev-infra): document limitation in ts-circular-deps tool (#36659) Adds documentation on discovered limitations in the ts-circular-deps tool, so that we can reference it when needed. PR Close #36659 --- dev-infra/ts-circular-dependencies/README.md | 82 ++++++++++++++++++ .../example-graph.png | Bin 0 -> 41607 bytes 2 files changed, 82 insertions(+) create mode 100644 dev-infra/ts-circular-dependencies/README.md create mode 100644 dev-infra/ts-circular-dependencies/example-graph.png diff --git a/dev-infra/ts-circular-dependencies/README.md b/dev-infra/ts-circular-dependencies/README.md new file mode 100644 index 0000000000..2ed88cf1ba --- /dev/null +++ b/dev-infra/ts-circular-dependencies/README.md @@ -0,0 +1,82 @@ +### ts-circular-dependencies + +This tool requires a test configuration that declares a set of source files which +should be checked for cyclic dependencies. e.g. + +``` +yarn ts-circular-deps --config ./test-config.js +``` + +### Limitations + +In order to detect cycles, the tool currently visits each source file and runs +depth first search. If the DFS comes across any node that is part of the current +DFS path, then a cycle has been detected and the tool will capture it. + +This algorithm has limitations. For example, consider the following graph: + +![Example graph](./example-graph.png) + +Depending on which source file is considered first, the output of the circular dependency tool +will be different. This is because the tool does not recursively find _all_ possible cycles. This +would be too inefficient for large graphs (especially in the `angular/angular` repository). + +In this concrete example, the tool will visit `r3_test_bed` first. Then the first neighbour +(based on the import in the source file) will be visited. This is `test_bed`. Once done, the +tool will visit the first neighbour of `test_bed`. This is `r3_test_bed` again. The node has +already been visited, and also is part of the current DFS path. The tool captures this as cycle. + +As no more nodes can be visited within that path, the tool continues (as per DFS algorithm) +with visiting the remaining neighbours of `r3_test_bed`. It will visit `test_bed_common` and +then come across `test_bed`. The tool only knows that `test_bed` has already been visited, but +it does not know that it would close a cycle. The tool certainly could know this by recursively +checking neighbours of `test_bed` again, but this is inefficient and will cause the algorithm +to eventually degenerate into brute-force. + +In summary, the tool is unable to capture _all_ elementary cycles in the graph. This does not +mean though that the tool is incorrectly suggesting that there are _no_ cycles in a graph. The +tool is still able to correctly detect whether there are _any_ cycles in a graph or not. For +example, if edge from `r3_test_bed` to `test_bed` is removed, then the tool will be able to +capture at least one of the other cycles. The golden will change in an unexpected way, but it's +**expected** given the trade-off we take for an acceptable running time. + +Other algorithms exist which are proven to print out _all_ the elementary cycles in a directed +graph. For example: + +* [Johnson's algorithm for finding simple cycles][johnson-cycles]. +* [Tarjan's algorithm for enumerating elementary circuits][tarjan-cycles]. + +Experiments with these algorithms unveiled that usual source file graphs we have in Angular +repositories are too large to be processed in acceptable time. At the time of writing, the +source file graph of `angular/angular` consists of 3350 nodes and 8730 edges. + +Algorithms like the one from Donald B. Johnson, which first split the graph into strongly +connected components, and then search for elementary cycles in all components with at least +two vertices, are too inefficient for the source files graphs we have. Time complexity for +such algorithms is described to be `O((n + e)(c + 1))` where `c` is the number of elementary +circuits. Donald B. Johnson describes the number of elementary circuits the followed: + +> Thus the number of elementary circuits in a directed graph can grow faster with n than +the exponential 2" + +This shows quite well that these algorithms become quickly inefficient the more vertices, edges +and simple cycles a graph has. Finding elementary cycles of arbitrary length seems NP-complete as +finding a Hamiltonian cycle with length of `n` is NP-complete too. Below is a quote from a +[paper describing a randomized algorithm](np-complete-cycles) for finding simple cycles of a +_fixed_ length that seems to confirm this hypothesis: + +> It is well known that finding the longest cycle in a graph is a hard problem, since finding +a hamiltonian cycle is NP-complete. Hence finding a simple cycle of length k, for an arbitrary +k, is NP-complete. + +Other tools like `madge` or `dpdm` have the same limitations. + +**Resources**: + +* [Finding all the elementary circuits of a directed graph - Donald. B. Johnson][johnson-cycles] +* [Enumeration of the elementary circuits of a directed graph - Robert Tarjan][tarjan-cycles] +* [Once again: Finding simple cycles in graphs - Carsten Dorgerlohx; Jürgen Wirtgen][np-complete-cycles] + +[johnson-cycles]: https://www.cs.tufts.edu/comp/150GA/homeworks/hw1/Johnson%2075.PDF +[tarjan-cycles]: https://ecommons.cornell.edu/bitstream/handle/1813/5941/72-145.pdf?sequence=1&isAllowed=y +[np-complete-cycles]: https://pdfs.semanticscholar.org/16b2/d1a3cf4a8a5dbcad10bb901724631ebead33.pdf diff --git a/dev-infra/ts-circular-dependencies/example-graph.png b/dev-infra/ts-circular-dependencies/example-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..02adffbb86b0adeae617ce005eeef4415968712d GIT binary patch literal 41607 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 HqqF}9+v`8C literal 0 HcmV?d00001