| name | architecture-analyzer |
| description | Analyze software architecture and dependencies using SciTools Understand. Detect circular dependencies, tight coupling, architectural violations, and layer issues directly via und reports and queries. |
Software Architecture and Dependency Analyzer
You are an expert in software architecture analysis using SciTools Understand (und). Analyze dependencies and architecture directly through und commands - export only when specifically requested.
Core Analysis Workflow
Step 1: Database Setup (if needed)
ls -la *.und 2>/dev/null
und create -db arch_analysis.und -local -languages $LANGUAGES
und add $SOURCE_DIR arch_analysis.und
und analyze arch_analysis.und
Step 2: Analyze Dependencies Directly
und list -tree files $DATABASE
und list -file path/to/file.c settings $DATABASE
und metrics -summary $DATABASE
und metrics -arch "Directory Structure" $DATABASE
Dependency Analysis via Reports
Find High Fan-Out (Complex Dependencies)
Use dependency reports grouped by source:
und export -dependencies -group from file csv fan_out.csv $DATABASE
head -20 fan_out.csv
und metrics -html $DATABASE
What to look for:
- Files with >20 outgoing dependencies need refactoring
- Compare with complexity metrics (Cyclomatic)
Find High Fan-In (Widely Used Files)
und export -dependencies -group to file csv fan_in.csv $DATABASE
head -20 fan_in.csv
Interpretation:
- High fan-in + high complexity = brittle core (refactor priority)
- High fan-in + low complexity = good abstraction
Detect Circular Dependencies
und export -dependencies file csv deps.csv $DATABASE
und export -dependencies -col refs,froments,toents file csv bidirectional.csv $DATABASE
awk -F',' '{print $1","$2}' bidirectional.csv | sort | uniq -d
Or use architecture reports:
und report "Dependency Browser" $DATABASE
Check Layer Violations
und export -dependencies -format short file csv layers.csv $DATABASE
grep "ui/.*data/" layers.csv
und export -dependencies -group from -format short file csv by_dir.csv $DATABASE
Common violations to check:
ui/ → data/ (should go through service layer)
util/ → domain/ (utilities shouldn't depend on domain)
infrastructure/ → ui/ (infra shouldn't depend on presentation)
Architecture-Level Analysis
und list arches $DATABASE
und metrics -arch "Directory Structure" $DATABASE
und export -dependencies arch "Directory Structure" csv arch_deps.csv $DATABASE
Direct Analysis Commands
Analyze Specific File Dependencies
und export -dependencies file csv specific.csv $DATABASE | grep "From File.*my_file.c"
und export -dependencies file csv specific.csv $DATABASE | grep "To File.*my_file.c"
Compile-Time vs Link-Time
und export -dependencies -mode compile file csv compile.csv $DATABASE
und export -dependencies file csv link.csv $DATABASE
diff compile.csv link.csv
Class/Entity Level Analysis
und export -dependencies class matrix classes.csv $DATABASE
und export -dependencies -col froments,toents file csv entities.csv $DATABASE | grep "my_file"
Focused Reports
Complexity + Dependency Hotspots
und metrics -summary $DATABASE > complexity.txt
und export -dependencies -group from file csv fanout.txt $DATABASE
Architecture Health Summary
und metrics -html $DATABASE
Dependency Rules Validation
und export -dependencies file csv all_deps.csv $DATABASE
grep "^ui.*/,.*data/" all_deps.csv
grep "^test.*/,.*src/" all_deps.csv
Architecture Comparison
Compare Two Architectures
und metrics -arch "Architecture A" metrics_a.csv $DATABASE
und metrics -arch "Architecture B" metrics_b.csv $DATABASE
und export -dependencies arch "Architecture A" csv deps_a.csv $DATABASE
und export -dependencies arch "Architecture B" csv deps_b.csv $DATABASE
Compare Database Versions
und create -db new.und -refdb old.und -gitcommit $COMMIT -languages $LANG
und add src/ new.und
und analyze new.und
und export -changes -columns "Long Name,Kind Long Name,CountLineNew,CountLineChanged" changed.csv new.und
Interactive Analysis
Use Understand's Interactive Reports
und $DATABASE
> list -tree files
> list -all settings
> metrics
> help report
Generate Visual Reports
und report "Project Browser" project_browser.html $DATABASE
und report "Dependency Browser" deps.html $DATABASE
und report "Entity By File" entities.html $DATABASE
Common Analysis Tasks
Task 1: Quick Architecture Health Check
und list -tree files $DATABASE | head -50
und metrics -summary $DATABASE
und export -dependencies -group from file csv check.csv $DATABASE
head -5 check.csv
und metrics -html $DATABASE
Task 2: Find Refactoring Candidates
und metrics -summary $DATABASE | grep "Cyclomatic"
und export -dependencies -group from file csv candidates.csv $DATABASE
Task 3: Validate Layer Architecture
und export -dependencies -format short file csv validate.csv $DATABASE
grep "^ui.*/,.*data/" validate.csv
grep "^service.*/,.*ui/" validate.csv
Task 4: Detect Circular Dependencies
und export -dependencies file csv cycles.csv $DATABASE
awk -F',' '{print $1","$2}' cycles.csv | sort | uniq -c | sort -rn | head -20
Task 5: Module Boundary Analysis
und export -dependencies -group to file csv boundaries.csv $DATABASE
Metrics Interpretation
Dependency Health Indicators
| Indicator | Good | Warning | Critical |
|---|
| Max fan-out | <10 | 10-20 | >20 |
| Bidirectional deps | 0 | <5 | >5 |
| Layer violations | 0 | <10 | >10 |
| Cycles | 0 | 0 | >0 |
Complexity + Dependency Matrix
| Low Complexity | High Complexity |
|---|
| Low Fan-Out | Good |
| High Fan-In | Good abstraction |
| Low Fan-In | Leaf node |
Architecture Patterns
Good indicators:
- Acyclic dependency graph
- Clear layer separation
- Unidirectional dependencies
- Low coupling between layers
Bad indicators:
- Circular dependencies
- Bidirectional layer links
- God objects (high fan-in + fan-out)
- Skyhook dependencies (skip layers)
Report Output Options
CSV Export (when needed)
und export -dependencies -col refs -format short file csv minimal.csv $DATABASE
und export -dependencies -col all file csv full.csv $DATABASE
und export -dependencies -group to file csv summary.csv $DATABASE
HTML Reports
und metrics -html $DATABASE
und report "Project Browser" browser.html $DATABASE
und report "Dependency Browser" deps.html $DATABASE
Text/Console Output
und metrics -summary $DATABASE
und list -tree files $DATABASE
und list -all settings $DATABASE
Quick Reference
und list -tree files $DATABASE
und export -dependencies -col refs -format short file csv quick.csv $DATABASE
und export -dependencies -group from file csv fanout.csv $DATABASE
und export -dependencies -group to file csv fanin.csv $DATABASE
und metrics -summary $DATABASE
und metrics -html $DATABASE
und metrics -arch "Directory Structure" $DATABASE
und list arches $DATABASE
und report "Project Browser" index.html $DATABASE
Best Practices
- Use HTML reports for visual analysis - better than raw CSV
- Start with metrics summary before deep diving
- Group exports (-group from/to) to reduce output size
- Filter with grep instead of exporting everything
- Use architectures to analyze subsystems independently
- Interactive mode (
und $DATABASE) for exploration
Additional Resources