Architecture Report

arcade_core — version v1.2.0 — recovered with pkg

170
Entities
470
Dependencies
13
Components
7
Smells

Quality Metrics

0.425
RCI
0.291
TurboMQ
0.291
BasicMQ
0.047
IntraConnectivity
0.069
InterConnectivity
0.138
TwoWayPairRatio

Architecture Diagram

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
        
Package-based grouping (depth=2 after common prefix 'edu.usc.softarch').

Components

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

Architectural Smells (7)

high SmellType.DEPENDENCY_CYCLE

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

high SmellType.CONCERN_OVERLOAD

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

high SmellType.CONCERN_OVERLOAD

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

high SmellType.CONCERN_OVERLOAD

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

medium SmellType.SCATTERED_FUNCTIONALITY

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

medium SmellType.LINK_OVERLOAD

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

medium SmellType.LINK_OVERLOAD

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

Dependency Summary

PackageEntities
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