agentic-qe
Version:
Agentic Quality Engineering Fleet System - AI-driven quality management platform
274 lines • 7.8 kB
TypeScript
/**
* RegressionRiskAnalyzerAgent - P1 Smart Test Selection Specialist
*
* Implements intelligent regression risk analysis using:
* - Git integration for change detection
* - AST parsing for code impact analysis
* - ML-based historical pattern recognition
* - Risk heat map generation
* - Smart test selection (45 min → 5 min CI feedback)
*
* ROI: 300% through 90% CI time reduction while maintaining 95% defect detection
*
* Based on SPARC methodology and Week 3+ specification
*/
import { BaseAgent, BaseAgentConfig } from './BaseAgent';
import { QETask } from '../types';
export interface RegressionRiskAnalyzerConfig extends BaseAgentConfig {
gitIntegration?: boolean;
gitRepository?: string;
baseBranch?: string;
astParsing?: boolean;
supportedLanguages?: string[];
mlModelEnabled?: boolean;
mlModelPath?: string;
historicalDataWindow?: number;
riskWeights?: {
changedLines: number;
complexity: number;
criticality: number;
dependencyCount: number;
historicalFailures: number;
};
testSelectionStrategy?: 'smart' | 'full' | 'fast';
changeImpactThreshold?: number;
confidenceLevel?: number;
riskHeatMapEnabled?: boolean;
heatMapUpdateInterval?: number;
ciOptimizationEnabled?: boolean;
maxParallelWorkers?: number;
}
export interface ChangeAnalysis {
commitSha: string;
author: string;
timestamp: Date;
changedFiles: ChangedFile[];
directImpact: string[];
transitiveImpact: string[];
blastRadius: BlastRadius;
riskScore: number;
riskLevel: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
testImpact: TestImpact;
recommendation: string;
}
export interface ChangedFile {
path: string;
linesAdded: number;
linesDeleted: number;
complexity: number;
criticality: number;
reason?: string;
changeType: 'added' | 'modified' | 'deleted' | 'renamed';
}
export interface BlastRadius {
files: number;
modules: number;
services: number;
controllers: number;
affectedFeatures: string[];
potentialUsers: number;
revenueAtRisk: number;
}
export interface TestImpact {
requiredTests: string[];
totalTests: number;
estimatedRuntime: string;
}
export interface TestSelection {
selected: TestInfo[];
total: number;
reductionRate: number;
estimatedRuntime: string;
fullSuiteRuntime: string;
timeSaved: string;
confidence: number;
skippedTests: number;
skippedReasons: Record<string, number>;
}
export interface TestInfo {
path: string;
reason: string;
failureProbability: number;
priority: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
runtime: string;
coverageOverlap?: number;
}
export interface RiskHeatMap {
timeWindow: string;
modules: ModuleRisk[];
visualization: string;
updatedAt: Date;
}
export interface ModuleRisk {
path: string;
riskScore: number;
riskLevel: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
factors: {
changeFrequency: number;
complexity: number;
failureCount: number;
criticality: number;
coverage: number;
};
heatColor: string;
recommendation: string;
}
export interface DependencyGraph {
nodes: DependencyNode[];
edges: DependencyEdge[];
analysis: GraphAnalysis;
}
export interface DependencyNode {
id: string;
type: 'service' | 'controller' | 'utility' | 'model';
criticality: number;
path: string;
}
export interface DependencyEdge {
from: string;
to: string;
type: 'imports' | 'calls' | 'extends';
strength: number;
}
export interface GraphAnalysis {
centralityScores: Record<string, number>;
criticalPaths: CriticalPath[];
circularDependencies: CircularDependency[];
}
export interface CriticalPath {
path: string[];
risk: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
reason: string;
}
export interface CircularDependency {
cycle: string[];
severity: 'LOW' | 'MEDIUM' | 'HIGH';
recommendation: string;
}
export interface HistoricalPattern {
pattern: string;
historicalOccurrences: number;
failureRate: number;
commonFailures: string[];
recommendation: string;
}
export interface MLModelMetrics {
accuracy: number;
precision: number;
recall: number;
f1Score: number;
trainingSize: number;
falsePositiveRate: number;
falseNegativeRate: number;
}
export declare class RegressionRiskAnalyzerAgent extends BaseAgent {
private readonly config;
private dependencyGraph?;
private coverageMap;
private historicalData;
private riskHeatMap?;
private mlModel?;
constructor(config: RegressionRiskAnalyzerConfig);
protected initializeComponents(): Promise<void>;
protected performTask(task: QETask): Promise<any>;
protected loadKnowledge(): Promise<void>;
protected cleanup(): Promise<void>;
/**
* Analyze code changes to determine impact and risk
*/
analyzeChanges(params: {
baseSha?: string;
targetSha?: string;
prNumber?: number;
}): Promise<ChangeAnalysis>;
/**
* Select minimal test suite based on change analysis
*/
selectTests(params: {
changeAnalysis?: ChangeAnalysis;
strategy?: 'smart' | 'full' | 'fast';
confidence?: number;
}): Promise<TestSelection>;
/**
* Calculate risk score for changes
*/
calculateRiskScore(params: any): number;
/**
* Generate risk heat map
*/
generateRiskHeatMap(): Promise<RiskHeatMap>;
/**
* Calculate blast radius of changes
*/
calculateBlastRadius(params: {
changedFiles: ChangedFile[];
directImpact: string[];
transitiveImpact: string[];
}): Promise<BlastRadius>;
/**
* Optimize CI configuration
*/
optimizeCI(params: {
testSelection: TestSelection;
maxWorkers?: number;
}): Promise<any>;
/**
* Analyze release risk
*/
analyzeRelease(params: {
baseline: string;
candidate: string;
}): Promise<any>;
/**
* Train ML model on historical data
*/
trainMLModel(params: {
dataWindow?: number;
}): Promise<MLModelMetrics>;
private initializeGitIntegration;
private getGitDiff;
private parseGitDiff;
private getGitAuthor;
private getCommitsBetween;
private buildDependencyGraph;
private findDirectDependencies;
private findTransitiveDependencies;
private smartTestSelection;
private fastTestSelection;
private getCoverageBasedTests;
private getDependencyBasedTests;
private getHistoricalBasedTests;
private getMLPredictedTests;
private calculateRiskScoreFromAnalysis;
private getRiskLevel;
private calculateModuleRisk;
private loadCoverageMap;
private loadHistoricalData;
private initializeMLModel;
private getAllTests;
private getAllFiles;
private findAffectedTests;
private calculateFileComplexity;
private getFileCriticality;
private classifyFileType;
private extractServiceName;
private extractFeatureName;
private calculateTotalRuntime;
private parseRuntime;
private formatRuntime;
private calculateTimeDifference;
private distributeTestsAcrossWorkers;
private calculateSpeedup;
private deduplicateTests;
private categorizeSkippedTests;
private generateRecommendation;
private generateModuleRecommendation;
private getRiskColor;
private generateHeatMapVisualization;
private getRiskEmoji;
private findSimilarChanges;
private loadHistoricalTestResults;
private mockDirectDependencies;
private generateMockChangedFiles;
}
//# sourceMappingURL=RegressionRiskAnalyzerAgent.d.ts.map