arcade_core — version v1.2.0 — recovered with pkg
graph TD
Default["Default\n(8 entities)"]
Antipattern["Antipattern\n(11 entities)"]
Clustering["Clustering\n(44 entities)"]
Facts["Facts\n(33 entities)"]
Functiongraph["Functiongraph\n(3 entities)"]
Jira["Jira\n(4 entities)"]
Metrics["Metrics\n(23 entities)"]
Topics["Topics\n(8 entities)"]
Util["Util\n(9 entities)"]
Visualization["Visualization\n(15 entities)"]
Util2["Util2\n(5 entities)"]
Json["Json\n(3 entities)"]
Matrix["Matrix\n(4 entities)"]
Antipattern --> Clustering
Antipattern --> Json
Antipattern --> Topics
Antipattern --> Util
Clustering --> Facts
Clustering --> Json
Clustering --> Metrics
Clustering --> Topics
Clustering --> Util
Clustering --> Util2
Default --> Clustering
Facts --> Antipattern
Facts --> Clustering
Facts --> Functiongraph
Facts --> Json
Facts --> Util
Facts --> Util2
Jira --> Util
Metrics --> Clustering
Metrics --> Default
Metrics --> Json
Metrics --> Matrix
Metrics --> Util
Metrics --> Util2
Topics --> Clustering
Topics --> Json
Topics --> Util
Topics --> Util2
Util --> Clustering
Util --> Util2
Visualization --> Clustering
Visualization --> Topics
Visualization --> Util
| Component | Responsibility | # | Concerns | Entities |
|---|---|---|---|---|
| Default | Entities in (default) | 8 | Graph structuresMoJo calculationConfiguration management | BipartiteGraph, Cluster, Config, MergeInterfaceBasedSmell2Issues, MoJo, MoJoCalculator, StringUtil, Vertex |
| Antipattern | Entities in arcade.antipattern | 11 | Smell detectionAntipattern analysisSmell-issue correlation | edu.usc.softarch.arcade.antipattern.Smell, edu.usc.softarch.arcade.antipattern.SmellCollection, edu.usc.softarch.arcade.antipattern.detection.ArchSmellDetector, edu.usc.softarch.arcade.antipattern.detection.SmellToIssuesCorrelation, edu.usc.softarch.arcade.antipattern.detection.concern.ConcernOverload, edu.usc.softarch.arcade.antipattern.detection.concern.ScatteredParasiticFunctionality, edu.usc.softarch.arcade.antipattern.detection.coupling.CodeMaatHelper, edu.usc.softarch.arcade.antipattern.detection.dependency.DependencyCycle, ... (+3 more) |
| Clustering | Entities in arcade.clustering | 44 | Architecture clusteringCluster algorithmsCluster matchingArchitecture recovery | edu.usc.softarch.arcade.clustering.ClusterMatcher, edu.usc.softarch.arcade.clustering.Clusterer, edu.usc.softarch.arcade.clustering.ClusteringAlgorithmType, edu.usc.softarch.arcade.clustering.Pkg, edu.usc.softarch.arcade.clustering.RsfToDot, edu.usc.softarch.arcade.clustering.acdc.ACDC, edu.usc.softarch.arcade.clustering.acdc.RSFOutput, edu.usc.softarch.arcade.clustering.acdc.TAInput, ... (+36 more) |
| Facts | Entities in arcade.facts | 33 | Dependency extractionVersion control analysisChange analysisIssue tracking integration | edu.usc.softarch.arcade.facts.Change, edu.usc.softarch.arcade.facts.ChangeAnalyzer, edu.usc.softarch.arcade.facts.Decision, edu.usc.softarch.arcade.facts.DependencyGraph, edu.usc.softarch.arcade.facts.VersionMap, edu.usc.softarch.arcade.facts.VersionTree, edu.usc.softarch.arcade.facts.dependencies.CSourceToDepsBuilder, edu.usc.softarch.arcade.facts.dependencies.JavaSourceToDepsBuilder, ... (+25 more) |
| Functiongraph | Entities in arcade.functiongraph | 3 | Function dependency graphsTyped edge graphs | edu.usc.softarch.arcade.functiongraph.StringEdge, edu.usc.softarch.arcade.functiongraph.StringTypedEdge, edu.usc.softarch.arcade.functiongraph.TypedEdgeGraph |
| Jira | Entities in arcade.jira | 4 | Issue tracking integrationJira API client | edu.usc.softarch.arcade.jira.IssuesAnalyzer, edu.usc.softarch.arcade.jira.JiraClientExample, edu.usc.softarch.arcade.jira.JiraClientPrototype, edu.usc.softarch.arcade.jira.JiraUtil |
| Metrics | Entities in arcade.metrics | 23 | Architecture metricsQuality metricsCluster metricsMetric evolution | edu.usc.softarch.arcade.metrics.DecayMetricAnalyzer, edu.usc.softarch.arcade.metrics.MoJoEvolutionAnalyzer, edu.usc.softarch.arcade.metrics.RenameFixer, edu.usc.softarch.arcade.metrics.data.A2aSystemData, edu.usc.softarch.arcade.metrics.data.ArchPair, edu.usc.softarch.arcade.metrics.data.ArchitectureMetrics, edu.usc.softarch.arcade.metrics.data.ClusterMetrics, edu.usc.softarch.arcade.metrics.data.CvgSystemData, ... (+15 more) |
| Topics | Entities in arcade.topics | 8 | Topic modelingLDA analysisConcern extraction | edu.usc.softarch.arcade.topics.Concern, edu.usc.softarch.arcade.topics.DocTopicItem, edu.usc.softarch.arcade.topics.DocTopics, edu.usc.softarch.arcade.topics.MalletRunner, edu.usc.softarch.arcade.topics.TopicCompositionParser, edu.usc.softarch.arcade.topics.TopicItem, edu.usc.softarch.arcade.topics.exceptions.DistributionSizeMismatchException, edu.usc.softarch.arcade.topics.exceptions.UnmatchingDocTopicItemsException |
| Util | Entities in arcade.util | 9 | General utilitiesFile operationsCLI interface | edu.usc.softarch.arcade.util.CLI, edu.usc.softarch.arcade.util.CentralTendency, edu.usc.softarch.arcade.util.DirCleaner, edu.usc.softarch.arcade.util.FileUtil, edu.usc.softarch.arcade.util.MapUtil, edu.usc.softarch.arcade.util.McfpDriver, edu.usc.softarch.arcade.util.Version, edu.usc.softarch.arcade.util.statistic.C2C2CSV, ... (+1 more) |
| Visualization | Entities in arcade.visualization | 15 | GUI componentsArchitecture visualizationInteractive viewers | edu.usc.softarch.arcade.visualization.ArchitectureTableModel, edu.usc.softarch.arcade.visualization.MainFrame, edu.usc.softarch.arcade.visualization.clustering.ArchitectureViewer, edu.usc.softarch.arcade.visualization.clustering.ClustererController, edu.usc.softarch.arcade.visualization.clustering.ClustererInitializer, edu.usc.softarch.arcade.visualization.clustering.FeatureVectorTableModel, edu.usc.softarch.arcade.visualization.clustering.FeatureVectorViewer, edu.usc.softarch.arcade.visualization.components.DefaultButton, ... (+7 more) |
| Util2 | Entities in util | 5 | Enhanced collectionsGraph edgesTerminal operations | edu.usc.softarch.util.EnhancedHashSet, edu.usc.softarch.util.EnhancedSet, edu.usc.softarch.util.EnhancedTreeSet, edu.usc.softarch.util.LabeledEdge, edu.usc.softarch.util.Terminal |
| Json | Entities in util.json | 3 | JSON serializationJSON parsing | edu.usc.softarch.util.json.EnhancedJsonGenerator, edu.usc.softarch.util.json.EnhancedJsonParser, edu.usc.softarch.util.json.JsonSerializable |
| Matrix | Entities in util.matrix | 4 | Matrix operationsCell computations | edu.usc.softarch.util.matrix.Cell, edu.usc.softarch.util.matrix.CellValueCalculator, edu.usc.softarch.util.matrix.CellValueValidator, edu.usc.softarch.util.matrix.FastMatrix |
Circular dependency among 7 components: Antipattern <-> Clustering <-> Default <-> Facts <-> Metrics <-> Topics <-> Util
Why: Dependency cycles make components tightly coupled — you cannot change, test, or deploy any component in the cycle independently. This hinders maintainability, increases build times, and makes the system harder to understand.
Fix: Break the cycle by introducing an interface/abstraction that one component depends on, inverting the dependency direction. Consider the Dependency Inversion Principle (DIP).
Affects: Antipattern, Clustering, Default, Facts, Metrics, Topics, Util
The Default component mixes unrelated responsibilities: graph structures (BipartiteGraph, Vertex), clustering metrics (MoJo, MoJoCalculator), configuration (Config), smell analysis (MergeInterfaceBasedSmell2Issues), and utilities (StringUtil, Cluster).
Why: Having entities in a default/unnamed package indicates poor organization. This component lacks conceptual cohesion—developers must understand disparate concepts (graph theory, metrics, smell detection) to work with it. Changes to any one concern risk breaking unrelated functionality. The vague responsibility 'Entities in (default)' confirms no clear architectural purpose.
Fix: Dissolve this component. Move MoJo* classes to Metrics, BipartiteGraph/Vertex to a dedicated graph package or Functiongraph, Config to a configuration package, MergeInterfaceBasedSmell2Issues to Antipattern, and StringUtil to Util. Eliminate the default package entirely.
Affects: Default
The Clustering component contains 44 entities spanning multiple sub-concerns: clustering algorithms (ACDC, ClusterMatcher), file I/O (RSFOutput, TAInput, RsfToDot), serialization/stopping criteria (8 criterion classes), architecture representations (Architecture, ReadOnlyArchitecture), and graph utilities (Edge, Node, SubGraph).
Why: This is the largest component in the system, violating the Single Responsibility Principle. Developers working on clustering algorithms must navigate I/O code and vice versa. Testing becomes difficult as test fixtures must cover diverse functionality. The component has 6 dependencies, suggesting it's doing too much. Evolution is risky—adding a new file format requires changes in a component primarily about clustering logic.
Fix: Split into focused subcomponents: clustering.algorithms (ACDC, ClusterMatcher, pattern matching), clustering.io (RsfToDot, RSFOutput, TAInput), clustering.criteria (all Criterion classes), and clustering.models (Architecture, Cluster, FeatureVectors). Keep only core algorithm orchestration in the top-level Clustering component.
Affects: Clustering
The Facts component contains 33 entities with fundamentally different purposes: source code parsers (CSourceToDepsBuilder, JavaSourceToDepsBuilder), file format readers (RsfReader, ODEMReader, MakeDepReader, UnderstandCsvToRsf), version control integration (Commit, VersionTree, GitLabRestHandler), issue tracking (JiraImporter, IssueRecord, IssueComment), and decision analysis (DecisionAnalyzer, DecisionRankingEngine).
Why: This component conflates data acquisition (parsing, reading), external system integration (Git, Jira), and architectural analysis (decision ranking). Changes to Jira integration could break dependency parsing. The component depends on 6 other components (Antipattern, Clustering, Functiongraph, Json, Util, Util2), indicating it's a hub doing too much. New developers cannot understand 'Facts' without understanding 5+ distinct domains.
Fix: Refactor into focused components: facts.parsers (all *ToDepsBuilder, *Reader classes), facts.vcs (Commit, VersionTree, Git* classes), facts.issues (Jira*, IssueRecord, IssueComment), facts.analysis (DecisionAnalyzer, ChangeAnalyzer, RecovArEngine), and facts.core (DependencyGraph, Change). Each subcomponent should have a single reason to change.
Affects: Facts
File I/O and format conversion functionality is scattered across multiple components: Facts contains 5 file readers (RsfReader, ODEMReader, MakeDepReader, OdemToRsf, UnderstandCsvToRsf), Clustering contains 3 I/O classes (RSFOutput, TAInput, RsfToDot), and Util contains FileUtil.
Why: Developers adding support for a new file format must search multiple components to find relevant code. I/O error handling, encoding logic, and file validation are duplicated across components. Testing I/O functionality requires setting up test fixtures in 3 different test suites. This also violates the Open/Closed Principle—adding a format requires modifying components whose primary responsibility is clustering or dependency analysis.
Fix: Create a dedicated facts.io or io component to centralize all file reading, writing, and format conversion. Provide a common abstraction (e.g., DependencyGraphReader interface) with implementations for each format (RsfReader, OdemReader, CsvReader). Move RSFOutput, RsfToDot, and FileUtil to this component. Clustering and Facts should depend on this I/O component, not implement I/O themselves.
Affects: Facts, Clustering, Util
Clustering is depended on by 7 other components (58% of all components).
Why: A component with too many dependents becomes a bottleneck. Any change to it can cascade across the entire system, making evolution risky and expensive.
Fix: Consider splitting Clustering into smaller interfaces so dependents only couple to what they actually use (ISP).
Affects: Clustering
Util is depended on by 7 other components (58% of all components).
Why: A component with too many dependents becomes a bottleneck. Any change to it can cascade across the entire system, making evolution risky and expensive.
Fix: Consider splitting Util into smaller interfaces so dependents only couple to what they actually use (ISP).
Affects: Util
| Package | Entities |
|---|---|
edu.usc.softarch.arcade.clustering.simmeasures |
13 |
edu.usc.softarch.arcade.metrics.data |
9 |
(default) |
8 |
edu.usc.softarch.arcade.facts.dependencies |
8 |
edu.usc.softarch.arcade.facts.design |
7 |
edu.usc.softarch.arcade.metrics.decay |
7 |
edu.usc.softarch.arcade.util |
7 |
edu.usc.softarch.arcade.clustering.acdc.patterns |
6 |
edu.usc.softarch.arcade.facts |
6 |
edu.usc.softarch.arcade.topics |
6 |
edu.usc.softarch.arcade.visualization.components |
6 |
edu.usc.softarch.arcade.clustering |
5 |
edu.usc.softarch.arcade.clustering.data |
5 |
edu.usc.softarch.arcade.facts.issues.handlers |
5 |
edu.usc.softarch.arcade.visualization.clustering |
5 |
edu.usc.softarch.util |
5 |
edu.usc.softarch.arcade.clustering.criteria.serialization |
4 |
edu.usc.softarch.arcade.facts.issues |
4 |
edu.usc.softarch.arcade.jira |
4 |
edu.usc.softarch.arcade.metrics.evolution |
4 |
edu.usc.softarch.util.matrix |
4 |
edu.usc.softarch.arcade.clustering.acdc |
3 |
edu.usc.softarch.arcade.clustering.acdc.data |
3 |
edu.usc.softarch.arcade.clustering.criteria.stopping |
3 |
edu.usc.softarch.arcade.facts.smells |
3 |
edu.usc.softarch.arcade.functiongraph |
3 |
edu.usc.softarch.arcade.metrics |
3 |
edu.usc.softarch.util.json |
3 |
edu.usc.softarch.arcade.antipattern |
2 |
edu.usc.softarch.arcade.antipattern.detection |
2 |
edu.usc.softarch.arcade.antipattern.detection.concern |
2 |
edu.usc.softarch.arcade.antipattern.detection.dependency |
2 |
edu.usc.softarch.arcade.antipattern.detection.interfacebased |
2 |
edu.usc.softarch.arcade.clustering.criteria |
2 |
edu.usc.softarch.arcade.topics.exceptions |
2 |
edu.usc.softarch.arcade.util.statistic |
2 |
edu.usc.softarch.arcade.visualization |
2 |
edu.usc.softarch.arcade.visualization.topics |
2 |
edu.usc.softarch.arcade.antipattern.detection.coupling |
1 |