arcade_core — version v1.2.0 — 3 recovery algorithms compared
| Metric | PKG | ACDC | ARC |
|---|---|---|---|
| RCI | 0.4255 | 0.6128 | 0.5128 |
| TurboMQ | 0.2911 | 0.2446 | 0.0652 |
| BasicMQ | 0.2911 | 0.2446 | 0.0652 |
| IntraConnectivity | 0.0467 | 0.1846 | 0.0041 |
| InterConnectivity | 0.0686 | 0.0996 | 0.0776 |
| TwoWayPairRatio | 0.1379 | 0.2500 | 0.1500 |
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 | Core data structuresArchitecture comparisonClustering metrics | BipartiteGraph, Cluster, Config, MergeInterfaceBasedSmell2Issues, MoJo, MoJoCalculator, ... (+2 more) |
| Antipattern | Entities in arcade.antipattern | 11 | Smell detectionQuality analysisIssue 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, ... (+5 more) |
| Clustering | Entities in arcade.clustering | 44 | Component recoveryClustering algorithmsArchitecture serialization | 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, ... (+38 more) |
| Facts | Entities in arcade.facts | 33 | Dependency extractionVersion control integrationChange trackingSource parsing | 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, ... (+27 more) |
| Functiongraph | Entities in arcade.functiongraph | 3 | Graph data structures | 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 integration | 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 | Quality metricsArchitecture evaluationStability analysis | 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, ... (+17 more) |
| Topics | Entities in arcade.topics | 8 | Topic modelingConcern identification | 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, ... (+2 more) |
| Util | Entities in arcade.util | 9 | General utilitiesFile operationsCLI support | 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, ... (+3 more) |
| Visualization | Entities in arcade.visualization | 15 | Architecture visualizationGUI components | 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, ... (+9 more) |
| Util2 | Entities in util | 5 | Enhanced collectionsGraph utilities | 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 serialization | 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 operations | 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
Clustering contains 44 entities, suggesting multiple responsibilities.
Why: Large components are harder to understand, test, and maintain. They often indicate that multiple concerns have been mixed together.
Fix: Consider splitting Clustering into smaller, focused components with single responsibilities.
Affects: Clustering
Facts contains 33 entities, suggesting multiple responsibilities.
Why: Large components are harder to understand, test, and maintain. They often indicate that multiple concerns have been mixed together.
Fix: Consider splitting Facts into smaller, focused components with single responsibilities.
Affects: Facts
Metrics contains 23 entities, suggesting multiple responsibilities.
Why: Large components are harder to understand, test, and maintain. They often indicate that multiple concerns have been mixed together.
Fix: Consider splitting Metrics into smaller, focused components with single responsibilities.
Affects: Metrics
'Util' pattern is scattered across 3 components: Default, Jira, Util
Why: When a single concern is spread across many components, changes to that concern require modifying multiple places, increasing the risk of inconsistencies and bugs.
Fix: Centralize 'Util'-related functionality into a dedicated component to reduce scattering.
Affects: Default, Jira, 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
graph TD
Data["Data\n(73 entities)"]
Data2["Data2\n(22 entities)"]
Util["Util\n(15 entities)"]
Data3["Data3\n(11 entities)"]
Facts["Facts\n(5 entities)"]
Vertex["Vertex\n(5 entities)"]
Issues["Issues\n(4 entities)"]
Dependencies["Dependencies\n(3 entities)"]
Util2["Util2\n(3 entities)"]
Facts2["Facts2\n(3 entities)"]
Functiongraph["Functiongraph\n(2 entities)"]
Issues2["Issues2\n(2 entities)"]
Issues3["Issues3\n(2 entities)"]
StringUtil["StringUtil\n(2 entities)"]
Patterns["Patterns\n(2 entities)"]
Antipattern["Antipattern\n(2 entities)"]
Dependencies2["Dependencies2\n(2 entities)"]
Design["Design\n(2 entities)"]
Jira["Jira\n(2 entities)"]
Statistic["Statistic\n(2 entities)"]
Util3["Util3\n(1 entities)"]
Interfacebased["Interfacebased\n(1 entities)"]
Data4["Data4\n(1 entities)"]
Topics["Topics\n(1 entities)"]
Util4["Util4\n(1 entities)"]
Visualization["Visualization\n(1 entities)"]
Clustering["Clustering\n(1 entities)"]
Antipattern --> Data
Clustering --> Data
Clustering --> Visualization
Data --> Antipattern
Data --> Clustering
Data --> Data2
Data --> Design
Data --> Facts
Data --> Facts2
Data --> Patterns
Data --> Util
Data --> Util2
Data --> Util3
Data --> Visualization
Data2 --> Antipattern
Data2 --> Data
Data2 --> Facts
Data2 --> Patterns
Data2 --> Util
Data2 --> Util3
Data3 --> Data2
Data3 --> Data4
Data3 --> Patterns
Data3 --> Util
Dependencies --> Facts
Dependencies --> Patterns
Design --> Data
Design --> Facts2
Facts --> Dependencies
Facts --> Util
Issues --> Data
Issues --> Facts2
Issues --> Issues2
Issues --> Issues3
Issues2 --> Data
Issues3 --> Data
Patterns --> Data3
StringUtil --> Patterns
Util --> Antipattern
Util --> Data
Util --> Data2
Util --> Facts
Util --> Facts2
Util --> Issues
Util --> Issues3
Util --> Patterns
Util2 --> Data
Util2 --> Data2
Util2 --> Patterns
Util2 --> Util3
| Component | Responsibility | # | Concerns | Entities |
|---|---|---|---|---|
| Data | ACDC cluster around edu.usc.softarch.arcade.clustering.data.Cluster | 73 | clustering algorithmsarchitecture representationsimilarity measurementclustering metrics | MoJoCalculator, edu.usc.softarch.arcade.clustering.Clusterer, edu.usc.softarch.arcade.clustering.ClusteringAlgorithmType, edu.usc.softarch.arcade.clustering.Pkg, edu.usc.softarch.arcade.clustering.criteria.SerializationCriterion, edu.usc.softarch.arcade.clustering.criteria.StoppingCriterion, ... (+67 more) |
| Data2 | ACDC cluster around edu.usc.softarch.arcade.clustering.data.ReadOnlyArchitecture | 22 | smell detectionchange analysissystem data managementarchitecture visualization | edu.usc.softarch.arcade.antipattern.detection.ArchSmellDetector, edu.usc.softarch.arcade.antipattern.detection.concern.ConcernOverload, edu.usc.softarch.arcade.antipattern.detection.concern.ScatteredParasiticFunctionality, edu.usc.softarch.arcade.antipattern.detection.dependency.DependencyCycle, edu.usc.softarch.arcade.antipattern.detection.dependency.LinkOverload, edu.usc.softarch.arcade.clustering.RsfToDot, ... (+16 more) |
| Util | ACDC cluster around edu.usc.softarch.arcade.util.FileUtil | 15 | file operationsissue tracking integrationversion control analysisexternal API integration | edu.usc.softarch.arcade.antipattern.detection.SmellToIssuesCorrelation, edu.usc.softarch.arcade.facts.VersionMap, edu.usc.softarch.arcade.facts.dependencies.CSourceToDepsBuilder, edu.usc.softarch.arcade.facts.design.RecovArEngine, edu.usc.softarch.arcade.facts.design.VersionTreeGenerator, edu.usc.softarch.arcade.facts.issues.JiraImporter, ... (+9 more) |
| Data3 | ACDC cluster around edu.usc.softarch.arcade.clustering.acdc.data.Node | 11 | ACDC algorithmgraph structurecluster formationorphan handling | edu.usc.softarch.arcade.antipattern.detection.interfacebased.DependencyFinderProcessing, edu.usc.softarch.arcade.clustering.acdc.ACDC, edu.usc.softarch.arcade.clustering.acdc.RSFOutput, edu.usc.softarch.arcade.clustering.acdc.TAInput, edu.usc.softarch.arcade.clustering.acdc.data.Edge, edu.usc.softarch.arcade.clustering.acdc.data.Node, ... (+5 more) |
| Facts | ACDC cluster around edu.usc.softarch.arcade.facts.DependencyGraph | 5 | dependency graph constructionsource parsingfeature extractionformat conversion | edu.usc.softarch.arcade.clustering.data.FeatureVectors, edu.usc.softarch.arcade.facts.DependencyGraph, edu.usc.softarch.arcade.facts.dependencies.JavaSourceToDepsBuilder, edu.usc.softarch.arcade.facts.dependencies.OdemToRsf, edu.usc.softarch.arcade.facts.dependencies.SourceToDepsBuilder |
| Vertex | ACDC cluster around Vertex | 5 | graph representationMoJo calculationconfiguration management | BipartiteGraph, Cluster, Config, MoJo, Vertex |
| Issues | ACDC cluster around edu.usc.softarch.arcade.facts.issues.IssueRecord | 4 | issue trackingdecision analysisJira integrationXML parsing | edu.usc.softarch.arcade.facts.design.DecisionAnalyzer, edu.usc.softarch.arcade.facts.issues.IssueRecord, edu.usc.softarch.arcade.facts.issues.handlers.IssueRecordBuilder, edu.usc.softarch.arcade.facts.issues.handlers.JiraXmlHandler |
| Dependencies | ACDC cluster around edu.usc.softarch.arcade.facts.dependencies.ODEMReader | 3 | dependency extractionformat conversionexternal tool integration | edu.usc.softarch.arcade.facts.DependencyGraph, edu.usc.softarch.arcade.facts.dependencies.ODEMReader, edu.usc.softarch.arcade.facts.dependencies.UnderstandCsvToRsf |
| Util2 | ACDC cluster around edu.usc.softarch.arcade.util.CLI | 3 | command-line interfacecluster matchingcode analysis integration | edu.usc.softarch.arcade.antipattern.detection.coupling.CodeMaatHelper, edu.usc.softarch.arcade.clustering.ClusterMatcher, edu.usc.softarch.arcade.util.CLI |
| Facts2 | ACDC cluster around edu.usc.softarch.arcade.facts.Change | 3 | change trackingdecision modelingversion management | edu.usc.softarch.arcade.facts.Change, edu.usc.softarch.arcade.facts.Decision, edu.usc.softarch.arcade.facts.VersionTree |
| Functiongraph | ACDC cluster around edu.usc.softarch.arcade.functiongraph.StringEdge | 2 | function graph representationtyped edges | edu.usc.softarch.arcade.functiongraph.StringEdge, edu.usc.softarch.arcade.functiongraph.StringTypedEdge |
| Issues2 | ACDC cluster around edu.usc.softarch.arcade.facts.issues.IssueComment | 2 | issue commentingcomment data modeling | edu.usc.softarch.arcade.facts.issues.IssueComment, edu.usc.softarch.arcade.facts.issues.handlers.IssueCommentBuilder |
| Issues3 | ACDC cluster around edu.usc.softarch.arcade.facts.issues.Commit | 2 | commit trackingversion control data | edu.usc.softarch.arcade.facts.issues.Commit, edu.usc.softarch.arcade.facts.issues.handlers.CommitBuilder |
| StringUtil | ACDC cluster around StringUtil | 2 | string utilitiessmell-to-issue correlation | MergeInterfaceBasedSmell2Issues, StringUtil |
| Patterns | ACDC cluster around edu.usc.softarch.arcade.clustering.acdc.patterns.Pattern | 2 | pattern detectionversion modeling | edu.usc.softarch.arcade.clustering.acdc.patterns.Pattern, edu.usc.softarch.arcade.util.Version |
| Antipattern | ACDC cluster around edu.usc.softarch.arcade.antipattern.Smell | 2 | antipattern detectionsmell collection management | edu.usc.softarch.arcade.antipattern.Smell, edu.usc.softarch.arcade.antipattern.SmellCollection |
| Dependencies2 | ACDC cluster around edu.usc.softarch.arcade.facts.dependencies.MakeDepReader | 2 | Makefile parsingRSF format reading | edu.usc.softarch.arcade.facts.dependencies.MakeDepReader, edu.usc.softarch.arcade.facts.dependencies.RsfReader |
| Design | ACDC cluster around edu.usc.softarch.arcade.facts.design.CodeElementDecision | 2 | design decisionsdecision ranking | edu.usc.softarch.arcade.facts.design.CodeElementDecision, edu.usc.softarch.arcade.facts.design.DecisionRankingEngine |
| Jira | ACDC cluster around edu.usc.softarch.arcade.jira.JiraClientExample | 2 | Jira API integrationissue tracking examples | edu.usc.softarch.arcade.jira.JiraClientExample, edu.usc.softarch.arcade.jira.JiraClientPrototype |
| Statistic | ACDC cluster around edu.usc.softarch.arcade.util.statistic.C2C2CSV | 2 | statistical analysisCSV export | edu.usc.softarch.arcade.util.statistic.C2C2CSV, edu.usc.softarch.arcade.util.statistic.C2CAverageAnalyze |
| Util3 | ACDC cluster around edu.usc.softarch.util.Terminal | 1 | terminal operations | edu.usc.softarch.util.Terminal |
| Interfacebased | ACDC cluster around edu.usc.softarch.arcade.antipattern.detection.interfacebased.StringMatrix | 1 | matrix operationsinterface-based detection | edu.usc.softarch.arcade.antipattern.detection.interfacebased.StringMatrix |
| Data4 | ACDC cluster around edu.usc.softarch.arcade.clustering.acdc.data.Sortable | 1 | sorting operations | edu.usc.softarch.arcade.clustering.acdc.data.Sortable |
| Topics | ACDC cluster around edu.usc.softarch.arcade.topics.TopicCompositionParser | 1 | topic modelingcomposition parsing | edu.usc.softarch.arcade.topics.TopicCompositionParser |
| Util4 | ACDC cluster around edu.usc.softarch.arcade.util.DirCleaner | 1 | directory cleanup | edu.usc.softarch.arcade.util.DirCleaner |
| Visualization | ACDC cluster around edu.usc.softarch.arcade.visualization.ArchitectureTableModel | 1 | UI data modelingarchitecture visualization | edu.usc.softarch.arcade.visualization.ArchitectureTableModel |
| Clustering | ACDC cluster around edu.usc.softarch.arcade.visualization.clustering.ArchitectureViewer | 1 | cluster visualizationinteractive viewing | edu.usc.softarch.arcade.visualization.clustering.ArchitectureViewer |
Circular dependency among 14 components: Antipattern <-> Clustering <-> Data <-> Data2 <-> Data3 <-> Dependencies <-> Design <-> Facts <-> Issues <-> Issues2 <-> Issues3 <-> Patterns <-> Util <-> Util2
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, Data, Data2, Data3, Dependencies, Design, Facts, Issues, Issues2, Issues3, Patterns, Util, Util2
Data contains 73 entities, suggesting multiple responsibilities.
Why: Large components are harder to understand, test, and maintain. They often indicate that multiple concerns have been mixed together.
Fix: Consider splitting Data into smaller, focused components with single responsibilities.
Affects: Data
Data2 contains 22 entities, suggesting multiple responsibilities.
Why: Large components are harder to understand, test, and maintain. They often indicate that multiple concerns have been mixed together.
Fix: Consider splitting Data2 into smaller, focused components with single responsibilities.
Affects: Data2
graph TD
Clustering["Clustering\n(120 entities)"]
Utilities["Utilities\n(11 entities)"]
Configuration["Configuration\n(3 entities)"]
GraphAlgorithms["GraphAlgorithms\n(5 entities)"]
ArchitectureModel["ArchitectureModel\n(2 entities)"]
ChangeTracking["ChangeTracking\n(1 entities)"]
DecisionTracking["DecisionTracking\n(1 entities)"]
IssueTracking["IssueTracking\n(13 entities)"]
ArchitectureRecovery["ArchitectureRecovery\n(1 entities)"]
Serialization["Serialization\n(7 entities)"]
ErrorHandling["ErrorHandling\n(2 entities)"]
Statistics["Statistics\n(2 entities)"]
MatrixOperations["MatrixOperations\n(2 entities)"]
ArchitectureModel --> ChangeTracking
ArchitectureModel --> Clustering
ArchitectureModel --> GraphAlgorithms
ArchitectureModel --> Utilities
ArchitectureRecovery --> Clustering
ArchitectureRecovery --> IssueTracking
ArchitectureRecovery --> Serialization
Clustering --> ArchitectureModel
Clustering --> ChangeTracking
Clustering --> Configuration
Clustering --> DecisionTracking
Clustering --> ErrorHandling
Clustering --> GraphAlgorithms
Clustering --> IssueTracking
Clustering --> MatrixOperations
Clustering --> Serialization
Clustering --> Statistics
Clustering --> Utilities
Configuration --> Utilities
IssueTracking --> Clustering
IssueTracking --> Serialization
IssueTracking --> Utilities
Utilities --> Configuration
| Component | Responsibility | # | Concerns | Entities |
|---|---|---|---|---|
| Clustering | clustering, serialization, metrics | 120 | clustering algorithmsarchitecture smell detectionquality metricscomponent serialization | Cluster, MergeInterfaceBasedSmell2Issues, MoJo, MoJoCalculator, StringUtil, edu.usc.softarch.arcade.antipattern.Smell, ... (+114 more) |
| Utilities | utilities, data structures, matrix operations | 11 | data structuresmatrix operationsfile managementhelper functions | edu.usc.softarch.arcade.antipattern.detection.coupling.CodeMaatHelper, edu.usc.softarch.arcade.antipattern.detection.interfacebased.StringMatrix, edu.usc.softarch.arcade.clustering.acdc.data.Sortable, edu.usc.softarch.arcade.util.DirCleaner, edu.usc.softarch.arcade.util.MapUtil, edu.usc.softarch.util.EnhancedHashSet, ... (+5 more) |
| Configuration | configuration, clustering, command-line interface | 3 | configuration managementcommand-line interfacealgorithm selection | Config, edu.usc.softarch.arcade.clustering.ClusteringAlgorithmType, edu.usc.softarch.arcade.util.CLI |
| GraphAlgorithms | graph algorithms, clustering, data structures | 5 | graph data structuresgraph algorithms | BipartiteGraph, Vertex, edu.usc.softarch.arcade.clustering.acdc.data.Edge, edu.usc.softarch.arcade.clustering.acdc.data.Node, edu.usc.softarch.util.LabeledEdge |
| ArchitectureModel | architecture model, decision analysis | 2 | architecture representationdecision analysis | edu.usc.softarch.arcade.clustering.data.ReadOnlyArchitecture, edu.usc.softarch.arcade.facts.design.DecisionAnalyzer |
| ChangeTracking | change tracking | 1 | change tracking | edu.usc.softarch.arcade.facts.Change |
| DecisionTracking | decision tracking | 1 | decision tracking | edu.usc.softarch.arcade.facts.Decision |
| IssueTracking | issue tracking, version management, builder | 13 | issue managementversion controlexternal integrationJIRA integration | edu.usc.softarch.arcade.facts.VersionMap, edu.usc.softarch.arcade.facts.VersionTree, edu.usc.softarch.arcade.facts.design.VersionTreeGenerator, edu.usc.softarch.arcade.facts.issues.JiraImporter, edu.usc.softarch.arcade.facts.issues.handlers.CommitBuilder, edu.usc.softarch.arcade.facts.issues.handlers.GitLabRestHandler, ... (+7 more) |
| ArchitectureRecovery | architecture recovery | 1 | architecture recovery | edu.usc.softarch.arcade.facts.design.RecovArEngine |
| Serialization | serialization, graph, json | 7 | graph serializationJSON processing | edu.usc.softarch.arcade.functiongraph.StringEdge, edu.usc.softarch.arcade.functiongraph.StringTypedEdge, edu.usc.softarch.arcade.functiongraph.TypedEdgeGraph, edu.usc.softarch.arcade.util.statistic.C2C2CSV, edu.usc.softarch.util.json.EnhancedJsonGenerator, edu.usc.softarch.util.json.EnhancedJsonParser, ... (+1 more) |
| ErrorHandling | error handling, topic modeling | 2 | exception handling | edu.usc.softarch.arcade.topics.exceptions.DistributionSizeMismatchException, edu.usc.softarch.arcade.topics.exceptions.UnmatchingDocTopicItemsException |
| Statistics | statistics, analysis, metrics | 2 | statistical analysismetrics computation | edu.usc.softarch.arcade.util.CentralTendency, edu.usc.softarch.arcade.util.statistic.C2CAverageAnalyze |
| MatrixOperations | matrix operations, computation, validation | 2 | matrix computationdata validation | edu.usc.softarch.util.matrix.CellValueCalculator, edu.usc.softarch.util.matrix.CellValueValidator |
Circular dependency among 2 components: Configuration <-> Utilities
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: Configuration, Utilities
Circular dependency among 3 components: ArchitectureModel <-> Clustering <-> IssueTracking
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: ArchitectureModel, Clustering, IssueTracking
The Clustering component contains 120 entities and mixes multiple unrelated concerns: clustering algorithms (ACDC, Clusterer), architectural smell detection (ArchSmellDetector, ConcernOverload, ScatteredParasiticFunctionality, DependencyCycle, LinkOverload), metrics computation (MoJo, MoJoCalculator), serialization criteria, format conversion (RsfToDot, RSFOutput), and graph pattern matching.
Why: This massive component violates the Single Responsibility Principle and creates a maintenance bottleneck. Changes to clustering algorithms could inadvertently affect smell detection or metrics computation. The component is difficult to understand, test in isolation, and reuse. New developers must comprehend 120 entities spanning disparate concerns to make safe changes.
Fix: Decompose into at least four components: (1) ClusteringAlgorithms - pure clustering logic (ACDC, Clusterer, ClusterMatcher), (2) SmellDetection - architectural smell detection and analysis (ArchSmellDetector, Smell types), (3) QualityMetrics - metrics computation (MoJo, MoJoCalculator), (4) FormatConversion - serialization and format transformation (RsfToDot, RSFOutput, TAInput). Move serialization criteria to the existing Serialization component.
Affects: Clustering
Serialization functionality is scattered across two components: the Clustering component contains SerializationCriterion and ArchSizeFractionSerializationCriterion, while a dedicated Serialization component exists with graph and JSON serialization classes.
Why: This scattering makes it unclear where serialization logic belongs and forces developers to look in multiple places to understand or modify serialization behavior. It also creates unnecessary coupling between clustering algorithms and serialization concerns, making it harder to evolve either independently.
Fix: Consolidate all serialization-related classes into the Serialization component. Move SerializationCriterion and ArchSizeFractionSerializationCriterion from Clustering to Serialization. Update Clustering's responsibility description to remove 'serialization'.
Affects: Clustering, Serialization
Matrix operation functionality is split between the Utilities component (StringMatrix, FastMatrix, Cell) and the MatrixOperations component (CellValueCalculator, CellValueValidator).
Why: This separation creates an artificial boundary where core matrix data structures live separately from matrix computation logic. Developers working with matrices must navigate two components, and the rationale for the split is unclear since both deal with matrix concerns. This increases cognitive load and makes it harder to maintain matrix-related functionality cohesively.
Fix: Consolidate all matrix-related classes into the MatrixOperations component. Move StringMatrix, FastMatrix, and Cell from Utilities to MatrixOperations. This creates a single, cohesive component responsible for all matrix data structures and operations.
Affects: Utilities, MatrixOperations
| 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 |