> "Measuring programming progress by lines of code is like measuring aircraft building progress by weight." Bill Gates (and yet, here are the metrics anyway)
Static analysis tools either tell uncomfortable truths or produce comfortable lies. NDepend belongs to the first category. The report below dissects QuanTAlib's architecture with the cold precision of a pathologist examining code for signs of technical debt.
The dependency matrix shows which namespaces depend on which. Blue cells indicate dependencies. The diagonal should be empty (no self-dependencies). Off-diagonal clusters indicate potential architectural boundaries.
**Healthy patterns:**
- Clear layering: lower layers have no upward dependencies
- Minimal cross-cutting: utilities used everywhere but depending on nothing
- Isolated complexity: high-coupling types contained in specific namespaces
**Warning signs:**
- Bidirectional dependencies between namespaces
- Utility namespaces depending on domain namespaces
- Large clusters of mutual dependencies (the "big ball of mud")
## Direct Access
If the embedded report fails to load (iframe security restrictions vary by browser):
**Local development:** Open `ndepend/NDependOut/NDependReport.html` directly in a browser.
**CI artifacts:** The report generates during each NDepend analysis run and uploads to the build artifacts.
## Regenerating the Report
```powershell
# From repository root
pwshndepend/ndepend.ps1
```
This script:
1. Builds the solution in Release configuration
2. Runs NDepend analysis against the compiled assemblies
3. Generates the HTML report at `ndepend/NDependOut/NDependReport.html`
**Prerequisites:** NDepend license (set `NDEPEND_LICENSE` environment variable). Without a license, the script runs but produces warnings instead of full analysis.
## Historical Trends
The report includes trend charts showing metric evolution over time. These charts answer questions like:
- Is technical debt accumulating or being paid down?
- Is complexity increasing faster than test coverage?
- Are dependency cycles appearing in new code?
Trend inflection points often correlate with specific commits. The CQLinq query engine allows drilling into which changes caused metric shifts.