8.1: Capability Levels Deep Dive


Capability Level Structure

ASPICE 4.0 Capability Levels

The following diagram illustrates the structure of a Capability Level 3 (Established) process, showing how a defined standard process is tailored, deployed, and measured across the organization.

CL3 Established Process


Process Attribute Details

PA 1.1: Process Performance

# PA 1.1 Process Performance Attribute
process_attribute:
  id: PA1.1
  name: "Process Performance"
  level: 1
  description: |
    A measure of the extent to which the process purpose is achieved.

  achievement_criteria:
    - "Process outcomes are achieved"
    - "Work products are produced"
    - "Process purpose is fulfilled"

  generic_practices:
    GP1.1.1:
      name: "Achieve process outcomes"
      description: |
        The process achieves its defined outcomes. As a result of full
        achievement of this attribute, the process outcomes are achieved.

  indicators:
    work_products:
      - "Process-specific work products produced"
      - "Expected outputs delivered"

    practices:
      - "Base practices performed"
      - "Outcomes achieved"

  ai_support:
    level: L2
    activities:
      - "Outcome achievement tracking"
      - "Work product verification"
      - "Gap identification"

  example_evidence:
    # See work product catalog (WP IDs 17-08, 17-11, 17-12, etc.) for full details
    swe1:
      - "Software requirements specification (17-08)"
      - "Traceability matrix (17-11)"
      - "Verification criteria (17-12)"
    swe4:
      - "Unit test results (13-50)"
      - "Coverage reports"
      - "Defect records"

PA 2.1: Performance Management

# PA 2.1 Performance Management Attribute
process_attribute:
  id: PA2.1
  name: "Performance Management"
  level: 2
  description: |
    A measure of the extent to which the performance of the process
    is managed.

  achievement_criteria:
    - "Performance objectives are identified"
    - "Performance is planned"
    - "Performance is monitored"
    - "Adjustments are made when needed"

  generic_practices:
    GP2.1.1:
      name: "Identify process performance objectives"
      description: |
        Performance objectives for the process, based on its purpose
        and the needs of the project and organization, are identified.
      work_products:
        - "Process performance objectives"
        - "Quality objectives"

    GP2.1.2:
      name: "Plan the performance of the process"
      description: |
        The performance of the process is planned, addressing
        identification of activities, dependencies, timelines,
        and responsibilities.
      work_products:
        - "Process plan"
        - "Activity schedules"

    GP2.1.3:
      name: "Monitor the performance of the process"
      description: |
        The actual performance of the process is monitored against
        the planned performance.
      work_products:
        - "Performance records"
        - "Progress reports"

    GP2.1.4:
      name: "Adjust the performance of the process"
      description: |
        When planned performance is not achieved, appropriate
        adjustments to the plan and/or the process are made.
      work_products:
        - "Corrective action records"
        - "Updated plans"

  ai_support:
    level: L2
    activities:
      - "Automated progress tracking"
      - "Performance deviation detection"
      - "Adjustment recommendations"

PA 2.2: Work Product Management

# PA 2.2 Work Product Management Attribute
process_attribute:
  id: PA2.2
  name: "Work Product Management"
  level: 2
  description: |
    A measure of the extent to which the work products produced
    by the process are appropriately managed.

  achievement_criteria:
    - "Work product requirements are defined"
    - "Work products are appropriately identified"
    - "Work products are documented and controlled"
    - "Work products are reviewed"

  generic_practices:
    GP2.2.1:
      name: "Define work product requirements"
      description: |
        Requirements for the work products are defined including
        content and quality criteria.
      work_products:
        - "Work product requirements"
        - "Quality criteria"

    GP2.2.2:
      name: "Identify work products"
      description: |
        Work products of the process are appropriately identified,
        documented, and controlled.
      work_products:
        - "Work product list"
        - "Configuration records"

    GP2.2.3:
      name: "Document and control work products"
      description: |
        Work products are documented, controlled, and maintained
        according to their requirements.
      work_products:
        - "Work products under CM"
        - "Version records"

    GP2.2.4:
      name: "Review work products"
      description: |
        Work products are reviewed against defined requirements
        and adjustments are made as necessary.
      work_products:
        - "Review records"
        - "Approval records"

  ai_support:
    level: L2-L3
    activities:
      - "Automated work product verification"
      - "Quality criteria checking"
      - "Review tracking"

PA 3.1 and PA 3.2

# PA 3.1 Process Definition
process_attribute:
  id: PA3.1
  name: "Process Definition"
  level: 3
  description: |
    A measure of the extent to which a standard process is maintained
    to support deployment of the defined process.

  generic_practices:
    GP3.1.1:
      name: "Define the standard process"
      description: "A standard process that supports deployment is defined."

    GP3.1.2:
      name: "Determine appropriate process tailoring"
      description: "Guidelines for tailoring the standard process are defined."

    GP3.1.3:
      name: "Monitor deployment effectiveness"
      description: "Process deployment effectiveness is monitored."

---

# PA 3.2 Process Deployment
process_attribute:
  id: PA3.2
  name: "Process Deployment"
  level: 3
  description: |
    A measure of the extent to which the standard process is deployed
    as a defined process to achieve its outcomes.

  generic_practices:
    GP3.2.1:
      name: "Deploy a defined process"
      description: "A defined process is deployed based on the standard process."

    GP3.2.2:
      name: "Assign roles and responsibilities"
      description: "Appropriate roles, responsibilities, and authorities are assigned."

    GP3.2.3:
      name: "Ensure required resources"
      description: "Resources are made available for performing the process."

    GP3.2.4:
      name: "Ensure required competencies"
      description: "Required competencies are defined and available."

Level Achievement Checklist

Level 1 Checklist

The diagram below presents the Level 1 (Performed) achievement checklist, listing the process outcomes and work products that must be demonstrated for each base practice.

Level 1 Achievement Checklist

Level 2 Checklist

The following diagram presents the Level 2 (Managed) achievement checklist, covering the additional process management, work product management, and performance tracking requirements beyond Level 1.

Level 2 Achievement Checklist


AI Gap Analysis Tool

Automated Assessment Support

"""
AI-assisted capability level gap analysis.
"""

from dataclasses import dataclass
from typing import List, Dict, Optional
from enum import Enum

class Rating(Enum):
    NOT_ACHIEVED = "N"
    PARTIALLY = "P"
    LARGELY = "L"
    FULLY = "F"

class CapabilityLevel(Enum):
    LEVEL_0 = 0
    LEVEL_1 = 1
    LEVEL_2 = 2
    LEVEL_3 = 3

@dataclass
class ProcessAttribute:
    """Process attribute assessment."""
    id: str
    name: str
    level: int
    rating: Rating
    evidence: List[str]
    gaps: List[str]
    recommendations: List[str]

@dataclass
class ProcessAssessment:
    """Complete process assessment."""
    process_id: str
    process_name: str
    attributes: List[ProcessAttribute]
    achieved_level: CapabilityLevel
    target_level: CapabilityLevel
    gap_summary: str


class GapAnalyzer:
    """AI-assisted gap analysis for capability levels.

    Note: Evidence patterns require customization per organization;
    the patterns below are examples based on common automotive practices.
    """

    def __init__(self):
        self.evidence_patterns = self._load_evidence_patterns()
        self.best_practices = self._load_best_practices()

    def _load_evidence_patterns(self) -> Dict:
        """Load expected evidence patterns per process."""
        return {
            'SWE.1': {
                'PA1.1': [
                    'Software requirements specification',
                    'Traceability matrix',
                    'Verification criteria',
                    'Review records'
                ],
                'PA2.1': [
                    'Requirements plan',
                    'Progress reports',
                    'Quality metrics',
                    'Corrective action records'
                ],
                'PA2.2': [
                    'Work product list',
                    'Configuration records',
                    'Review/approval records',
                    'Baseline records'
                ]
            }
        }

    def _load_best_practices(self) -> Dict:
        """Load improvement recommendations."""
        return {
            'PA1.1_gaps': [
                "Ensure all base practices are performed",
                "Verify all required work products are produced",
                "Confirm all outcomes are achieved"
            ],
            'PA2.1_gaps': [
                "Define explicit quality objectives",
                "Establish monitoring mechanisms",
                "Document corrective actions"
            ],
            'PA2.2_gaps': [
                "Define work product requirements",
                "Establish review process",
                "Implement version control"
            ]
        }

    def analyze_process(self, process_id: str,
                       collected_evidence: List[str],
                       target_level: CapabilityLevel) -> ProcessAssessment:
        """Perform gap analysis for a process."""

        attributes = []

        # Analyze PA 1.1
        pa11 = self._analyze_pa11(process_id, collected_evidence)
        attributes.append(pa11)

        # Analyze PA 2.1 and PA 2.2 if targeting Level 2+
        if target_level.value >= 2:
            pa21 = self._analyze_pa21(process_id, collected_evidence)
            pa22 = self._analyze_pa22(process_id, collected_evidence)
            attributes.append(pa21)
            attributes.append(pa22)

        # Analyze PA 3.1 and PA 3.2 if targeting Level 3
        if target_level.value >= 3:
            pa31 = self._analyze_pa31(process_id, collected_evidence)
            pa32 = self._analyze_pa32(process_id, collected_evidence)
            attributes.append(pa31)
            attributes.append(pa32)

        # Determine achieved level
        achieved = self._determine_achieved_level(attributes)

        # Generate gap summary
        gap_summary = self._generate_gap_summary(attributes, target_level)

        return ProcessAssessment(
            process_id=process_id,
            process_name=self._get_process_name(process_id),
            attributes=attributes,
            achieved_level=achieved,
            target_level=target_level,
            gap_summary=gap_summary
        )

    def _analyze_pa11(self, process_id: str,
                     evidence: List[str]) -> ProcessAttribute:
        """Analyze PA 1.1 Process Performance."""

        expected = self.evidence_patterns.get(process_id, {}).get('PA1.1', [])
        found = [e for e in expected if any(e.lower() in ev.lower() for ev in evidence)]
        missing = [e for e in expected if e not in found]

        coverage = len(found) / len(expected) if expected else 0

        if coverage >= 0.86:
            rating = Rating.FULLY
        elif coverage >= 0.51:
            rating = Rating.LARGELY
        elif coverage >= 0.16:
            rating = Rating.PARTIALLY
        else:
            rating = Rating.NOT_ACHIEVED

        gaps = [f"Missing: {e}" for e in missing]
        recommendations = self.best_practices.get('PA1.1_gaps', []) if gaps else []

        return ProcessAttribute(
            id='PA1.1',
            name='Process Performance',
            level=1,
            rating=rating,
            evidence=found,
            gaps=gaps,
            recommendations=recommendations
        )

    def _analyze_pa21(self, process_id: str,
                     evidence: List[str]) -> ProcessAttribute:
        """Analyze PA 2.1 Performance Management."""

        expected = self.evidence_patterns.get(process_id, {}).get('PA2.1', [])
        found = [e for e in expected if any(e.lower() in ev.lower() for ev in evidence)]
        missing = [e for e in expected if e not in found]

        coverage = len(found) / len(expected) if expected else 0

        if coverage >= 0.86:
            rating = Rating.FULLY
        elif coverage >= 0.51:
            rating = Rating.LARGELY
        elif coverage >= 0.16:
            rating = Rating.PARTIALLY
        else:
            rating = Rating.NOT_ACHIEVED

        gaps = [f"Missing: {e}" for e in missing]
        recommendations = self.best_practices.get('PA2.1_gaps', []) if gaps else []

        return ProcessAttribute(
            id='PA2.1',
            name='Performance Management',
            level=2,
            rating=rating,
            evidence=found,
            gaps=gaps,
            recommendations=recommendations
        )

    def _analyze_pa22(self, process_id: str,
                     evidence: List[str]) -> ProcessAttribute:
        """Analyze PA 2.2 Work Product Management."""

        expected = self.evidence_patterns.get(process_id, {}).get('PA2.2', [])
        found = [e for e in expected if any(e.lower() in ev.lower() for ev in evidence)]
        missing = [e for e in expected if e not in found]

        coverage = len(found) / len(expected) if expected else 0

        if coverage >= 0.86:
            rating = Rating.FULLY
        elif coverage >= 0.51:
            rating = Rating.LARGELY
        elif coverage >= 0.16:
            rating = Rating.PARTIALLY
        else:
            rating = Rating.NOT_ACHIEVED

        gaps = [f"Missing: {e}" for e in missing]
        recommendations = self.best_practices.get('PA2.2_gaps', []) if gaps else []

        return ProcessAttribute(
            id='PA2.2',
            name='Work Product Management',
            level=2,
            rating=rating,
            evidence=found,
            gaps=gaps,
            recommendations=recommendations
        )

    def _analyze_pa31(self, process_id: str,
                     evidence: List[str]) -> ProcessAttribute:
        """Analyze PA 3.1 Process Definition.

        Note: Simplified implementation; production use requires
        organizational standard process documentation analysis.
        """
        # Simplified - check for standard process documentation
        return ProcessAttribute(
            id='PA3.1',
            name='Process Definition',
            level=3,
            rating=Rating.PARTIALLY,
            evidence=[],
            gaps=["Standard process definition needed"],
            recommendations=["Define organizational standard process"]
        )

    def _analyze_pa32(self, process_id: str,
                     evidence: List[str]) -> ProcessAttribute:
        """Analyze PA 3.2 Process Deployment."""
        return ProcessAttribute(
            id='PA3.2',
            name='Process Deployment',
            level=3,
            rating=Rating.PARTIALLY,
            evidence=[],
            gaps=["Process deployment from standard needed"],
            recommendations=["Deploy defined process based on standard"]
        )

    def _determine_achieved_level(self,
                                  attributes: List[ProcessAttribute]) -> CapabilityLevel:
        """Determine achieved capability level."""

        pa11 = next((a for a in attributes if a.id == 'PA1.1'), None)
        pa21 = next((a for a in attributes if a.id == 'PA2.1'), None)
        pa22 = next((a for a in attributes if a.id == 'PA2.2'), None)
        pa31 = next((a for a in attributes if a.id == 'PA3.1'), None)
        pa32 = next((a for a in attributes if a.id == 'PA3.2'), None)

        # Check Level 3
        if (pa11 and pa11.rating == Rating.FULLY and
            pa21 and pa21.rating == Rating.FULLY and
            pa22 and pa22.rating == Rating.FULLY and
            pa31 and pa31.rating in [Rating.LARGELY, Rating.FULLY] and
            pa32 and pa32.rating in [Rating.LARGELY, Rating.FULLY]):
            return CapabilityLevel.LEVEL_3

        # Check Level 2
        if (pa11 and pa11.rating == Rating.FULLY and
            pa21 and pa21.rating in [Rating.LARGELY, Rating.FULLY] and
            pa22 and pa22.rating in [Rating.LARGELY, Rating.FULLY]):
            return CapabilityLevel.LEVEL_2

        # Check Level 1
        if pa11 and pa11.rating in [Rating.LARGELY, Rating.FULLY]:
            return CapabilityLevel.LEVEL_1

        return CapabilityLevel.LEVEL_0

    def _get_process_name(self, process_id: str) -> str:
        """Get process name from ID."""
        names = {
            'SWE.1': 'Software Requirements Analysis',
            'SWE.2': 'Software Architectural Design',
            'SWE.3': 'Software Detailed Design and Unit Construction',
            'SWE.4': 'Software Unit Verification',
            'SWE.5': 'Software Integration and Integration Test',
            'SWE.6': 'Software Qualification Test'
        }
        return names.get(process_id, process_id)

    def _generate_gap_summary(self, attributes: List[ProcessAttribute],
                             target: CapabilityLevel) -> str:
        """Generate gap summary text."""

        gaps = []
        for attr in attributes:
            if attr.gaps:
                gaps.extend(attr.gaps)

        if not gaps:
            return f"No gaps identified. Target Level {target.value} achievable."

        return f"Found {len(gaps)} gaps to address for Level {target.value}:\n" + \
               "\n".join(f"- {g}" for g in gaps[:5])

Work Products

WP ID Work Product Purpose
15-07 Assessment report Capability ratings
15-08 Gap analysis report Identified gaps
15-09 Improvement plan Actions to close gaps

Summary

Capability Levels:

  • Level 1: Process outcomes achieved
  • Level 2: Performance and work products managed
  • Level 3: Standard process defined and deployed
  • AI Support: Gap analysis, evidence collection, tracking
  • Human Essential: Rating decisions, improvement planning