# Requirements Traceability Matrix ## HTTP Sender Plugin (HSP) - Bidirectional Traceability **Document Version:** 1.0 **Date:** 2025-11-19 **Status:** Design Phase --- ## Table of Contents 1. [Architecture Requirements](#architecture-requirements) 2. [Functional Requirements](#functional-requirements) 3. [Non-Functional Requirements](#non-functional-requirements) 4. [Normative Requirements](#normative-requirements) 5. [User Stories](#user-stories) --- ## Architecture Requirements | Req ID | Category | Description | Architecture Component | Java Package/Class | Test Class | Verification Method | Status | |--------|----------|-------------|----------------------|-------------------|------------|-------------------|--------| | Req-Arch-1 | Architecture | OpenJDK 25, Java 25 | Build System | pom.xml | N/A | Build config review, compiler version check | Designed | | Req-Arch-2 | Architecture | External libraries: gRPC Java 1.60+, Protobuf 3.25+ only | Build System, Dependency Management | pom.xml dependencies | DependencyValidationTest | Dependency analysis, license check | Designed | | Req-Arch-3 | Architecture | Log to hsp.log in temp directory | Logging Infrastructure | com.siemens.hsp.adapter.outbound.logging.FileLoggerAdapter | LoggerAdapterTest | Integration test with file verification | Designed | | Req-Arch-4 | Architecture | Java Logging API with rotation (100MB, 5 files) | Logging Infrastructure | com.siemens.hsp.adapter.outbound.logging.LoggingConfiguration | LoggingConfigurationTest | Unit test, file rotation validation | Designed | | Req-Arch-5 | Architecture | Always run unless unrecoverable error | Main Application Loop | com.siemens.hsp.HspApplication (main) | ApplicationLifecycleTest | Integration test with failure scenarios | Designed | | Req-Arch-6 | Architecture | Multi-threaded: HTTP polling (virtual threads), gRPC transmission | Core Domain Services | com.siemens.hsp.application.HttpPollingService
com.siemens.hsp.application.GrpcTransmissionService | HttpPollingServiceTest
GrpcTransmissionServiceTest | Multi-threading integration test | Designed | | Req-Arch-7 | Architecture | Producer-Consumer pattern (IF1 to IF2) | Core Domain | com.siemens.hsp.domain.DataBuffer
com.siemens.hsp.application.DataFlowCoordinator | DataBufferTest
DataFlowCoordinatorTest | Unit test, pattern validation | Designed | | Req-Arch-8 | Architecture | Thread-safe collections for buffering | Core Domain | com.siemens.hsp.domain.DataBuffer (using ConcurrentLinkedQueue) | DataBufferConcurrencyTest | Concurrency test with multiple threads | Designed | --- ## Functional Requirements ### Initialization and Startup (Req-FR-1 to Req-FR-8) | Req ID | Category | Description | Architecture Component | Java Package/Class | Test Class | Verification Method | Status | |--------|----------|-------------|----------------------|-------------------|------------|-------------------|--------| | Req-FR-1 | Functional | Execute startup sequence | Application Orchestration | com.siemens.hsp.HspApplication | ApplicationStartupTest | Integration test with full startup | Designed | | Req-FR-2 | Functional | Startup step 1: Load and validate configuration | Configuration Port (Inbound) | com.siemens.hsp.adapter.inbound.config.ConfigurationLoader
com.siemens.hsp.domain.Configuration | ConfigurationLoaderTest
ConfigurationValidatorTest | Unit test with valid/invalid configs | Designed | | Req-FR-3 | Functional | Startup step 2: Initialize logging | Logging Port (Outbound) | com.siemens.hsp.adapter.outbound.logging.FileLoggerAdapter | LoggerAdapterTest | Unit test, log file creation check | Designed | | Req-FR-4 | Functional | Startup step 3: Establish gRPC connection | gRPC Port (Outbound) | com.siemens.hsp.adapter.outbound.grpc.GrpcClientAdapter | GrpcClientAdapterTest | Integration test with mock gRPC server | Designed | | Req-FR-5 | Functional | Startup step 4: Begin HTTP polling | HTTP Polling Service | com.siemens.hsp.application.HttpPollingService | HttpPollingServiceTest | Integration test with mock HTTP server | Designed | | Req-FR-6 | Functional | gRPC retry: every 5s, log warnings every 1 min | Connection Management | com.siemens.hsp.adapter.outbound.grpc.ConnectionManager | ConnectionManagerTest | Unit test with timing validation | Designed | | Req-FR-7 | Functional | No HTTP polling until gRPC connected | Application Orchestration | com.siemens.hsp.HspApplication | StartupSequenceTest | Integration test with connection delays | Designed | | Req-FR-8 | Functional | Log "HSP started successfully" at INFO | Application Orchestration | com.siemens.hsp.HspApplication | ApplicationStartupTest | Log output validation | Designed | ### Configuration Management (Req-FR-9 to Req-FR-13) | Req ID | Category | Description | Architecture Component | Java Package/Class | Test Class | Verification Method | Status | |--------|----------|-------------|----------------------|-------------------|------------|-------------------|--------| | Req-FR-9 | Functional | Configurable via configuration file | Configuration Port | com.siemens.hsp.domain.ports.inbound.ConfigurationPort
com.siemens.hsp.adapter.inbound.config.JsonConfigurationAdapter | ConfigurationPortTest
JsonConfigurationAdapterTest | Unit test with sample configs | Designed | | Req-FR-10 | Functional | Read config file from application directory at startup | Configuration Adapter | com.siemens.hsp.adapter.inbound.config.ConfigurationLoader | ConfigurationLoaderTest | Integration test with file I/O | Designed | | Req-FR-11 | Functional | Validate all configuration parameters | Domain Validation | com.siemens.hsp.domain.ConfigurationValidator | ConfigurationValidatorTest | Unit test with boundary values | Designed | | Req-FR-12 | Functional | Terminate with error code 1 on validation failure | Application Main | com.siemens.hsp.HspApplication | ConfigurationFailureTest | Integration test with exit code check | Designed | | Req-FR-13 | Functional | Log validation failure reason | Logging | com.siemens.hsp.domain.ConfigurationValidator | ConfigurationValidatorTest | Log output validation | Designed | ### HTTP Polling (IF1) (Req-FR-14 to Req-FR-26) | Req ID | Category | Description | Architecture Component | Java Package/Class | Test Class | Verification Method | Status | |--------|----------|-------------|----------------------|-------------------|------------|-------------------|--------| | Req-FR-14 | Functional | Establish connection to configured devices (IF1) | HTTP Client Port | com.siemens.hsp.adapter.outbound.http.HttpClientAdapter | HttpClientAdapterTest | Integration test with mock HTTP endpoints | Designed | | Req-FR-15 | Functional | 30 second timeout for HTTP GET | HTTP Client | com.siemens.hsp.adapter.outbound.http.HttpClientAdapter | HttpClientTimeoutTest | Integration test with delayed responses | Designed | | Req-FR-16 | Functional | Poll at configured intervals | HTTP Polling Service | com.siemens.hsp.application.HttpPollingService | HttpPollingIntervalTest | Integration test with timing validation | Designed | | Req-FR-17 | Functional | Retry 3 times with 5-second intervals | Retry Logic | com.siemens.hsp.adapter.outbound.http.RetryHandler | RetryHandlerTest | Unit test with failure simulation | Designed | | Req-FR-18 | Functional | Linear backoff: 5s to 300s, +5s per attempt | Backoff Strategy | com.siemens.hsp.adapter.outbound.http.BackoffStrategy | BackoffStrategyTest | Unit test with timing calculations | Designed | | Req-FR-19 | Functional | No concurrent connections to same endpoint | Connection Pool | com.siemens.hsp.adapter.outbound.http.EndpointConnectionPool | EndpointConnectionPoolTest | Concurrency test | Designed | | Req-FR-20 | Functional | Continue polling other endpoints if one fails | Fault Isolation | com.siemens.hsp.application.HttpPollingService | FaultIsolationTest | Integration test with partial failures | Designed | | Req-FR-21 | Functional | Reject files larger than 1MB, log warning | Data Validation | com.siemens.hsp.domain.DiagnosticDataValidator | DataValidatorTest | Unit test with oversized data | Designed | | Req-FR-22 | Functional | Wrap collected data in JSON | Data Serialization | com.siemens.hsp.domain.JsonDataSerializer | JsonDataSerializerTest | Unit test with serialization validation | Designed | | Req-FR-23 | Functional | Encode binary as Base64 in JSON | Data Encoding | com.siemens.hsp.domain.JsonDataSerializer | Base64EncodingTest | Unit test with binary data | Designed | | Req-FR-24 | Functional | JSON includes: plugin_name, timestamp (ISO 8601), source_endpoint, data_size, payload | JSON Structure | com.siemens.hsp.domain.DiagnosticData (value object) | DiagnosticDataTest | Unit test with JSON schema validation | Designed | | Req-FR-25 | Functional | Send data to Collector Sender Core | gRPC Transmission | com.siemens.hsp.application.GrpcTransmissionService | GrpcTransmissionServiceTest | Integration test with mock gRPC | Designed | | Req-FR-25 (dup) | Functional | Buffer data in memory on transmission failure (max 300) | Data Buffer | com.siemens.hsp.domain.DataBuffer | DataBufferTest | Unit test with buffer overflow | Designed | | Req-FR-26 | Functional | Discard oldest data when buffer full | Buffer Management | com.siemens.hsp.domain.DataBuffer | DataBufferOverflowTest | Unit test with FIFO validation | Designed | ### gRPC Communication (IF2) (Req-FR-27 to Req-FR-32) | Req ID | Category | Description | Architecture Component | Java Package/Class | Test Class | Verification Method | Status | |--------|----------|-------------|----------------------|-------------------|------------|-------------------|--------| | Req-FR-27 | Functional | Communicate via Interface IF2 | gRPC Port | com.siemens.hsp.adapter.outbound.grpc.GrpcClientAdapter
com.siemens.coreshield.owg.shared.grpc.TransferService* | GrpcClientAdapterTest | Integration test with protobuf validation | Designed | | Req-FR-28 | Functional | Single bidirectional gRPC stream at startup | gRPC Stream Management | com.siemens.hsp.adapter.outbound.grpc.StreamManager | StreamManagerTest | Integration test with stream lifecycle | Designed | | Req-FR-29 | Functional | On stream failure: close, wait 5s, re-establish | Connection Recovery | com.siemens.hsp.adapter.outbound.grpc.ConnectionManager | ConnectionRecoveryTest | Integration test with connection drops | Designed | | Req-FR-30 | Functional | Send TransferRequest with max 4MB data | Message Batching | com.siemens.hsp.application.GrpcTransmissionService | MessageBatchingTest | Unit test with size calculations | Designed | | Req-FR-31 | Functional | Send batch within 1s if not reaching 4MB | Message Timing | com.siemens.hsp.application.GrpcTransmissionService | MessageTimingTest | Integration test with timing validation | Designed | | Req-FR-32 | Functional | Set receiver_id to 99 for all requests | Protocol Constants | com.siemens.hsp.adapter.outbound.grpc.GrpcClientAdapter | GrpcClientAdapterTest | Unit test with message inspection | Designed | --- ## Non-Functional Requirements ### Performance (Req-NFR-1 to Req-NFR-2) | Req ID | Category | Description | Architecture Component | Java Package/Class | Test Class | Verification Method | Status | |--------|----------|-------------|----------------------|-------------------|------------|-------------------|--------| | Req-NFR-1 | Performance | Support 1000 concurrent HTTP endpoints | Scalability Architecture | com.siemens.hsp.application.HttpPollingService (virtual threads) | PerformanceScalabilityTest | Load test with 1000 endpoints | Designed | | Req-NFR-2 | Performance | Memory usage not exceed 4096MB | Resource Management | Application-wide monitoring | MemoryUsageTest | Integration test with memory profiling | Designed | ### Security (Req-NFR-3 to Req-NFR-4) | Req ID | Category | Description | Architecture Component | Java Package/Class | Test Class | Verification Method | Status | |--------|----------|-------------|----------------------|-------------------|------------|-------------------|--------| | Req-NFR-3 | Security | No HTTP authentication | HTTP Client Configuration | com.siemens.hsp.adapter.outbound.http.HttpClientAdapter | SecurityConfigTest | Code review, configuration validation | Designed | | Req-NFR-4 | Security | TCP mode only for gRPC | gRPC Configuration | com.siemens.hsp.adapter.outbound.grpc.GrpcClientAdapter | GrpcSecurityTest | Configuration validation | Designed | ### Usability (Req-NFR-5 to Req-NFR-6) | Req ID | Category | Description | Architecture Component | Java Package/Class | Test Class | Verification Method | Status | |--------|----------|-------------|----------------------|-------------------|------------|-------------------|--------| | Req-NFR-5 | Usability | Built with Maven 3.9+ | Build System | pom.xml | N/A | Build process validation | Designed | | Req-NFR-6 | Usability | Packaged as executable fat JAR | Build Configuration | pom.xml (maven-shade-plugin) | JarPackagingTest | Build artifact inspection | Designed | ### Reliability (Req-NFR-7 to Req-NFR-8) | Req ID | Category | Description | Architecture Component | Java Package/Class | Test Class | Verification Method | Status | |--------|----------|-------------|----------------------|-------------------|------------|-------------------|--------| | Req-NFR-7 | Reliability | Health check endpoint on localhost:8080/health | Health Check Port (Inbound) | com.siemens.hsp.adapter.inbound.health.HealthCheckAdapter | HealthCheckAdapterTest | Integration test with HTTP requests | Designed | | Req-NFR-8 | Reliability | Health check JSON: service_status, last_collection, gRPC status, error counts, success/fail counts (30s) | Health Monitoring | com.siemens.hsp.application.HealthMonitoringService | HealthMonitoringServiceTest | Integration test with JSON validation | Designed | ### Testing (Req-NFR-7 to Req-NFR-10) - Note: Duplicate numbering in source | Req ID | Category | Description | Architecture Component | Java Package/Class | Test Class | Verification Method | Status | |--------|----------|-------------|----------------------|-------------------|------------|-------------------|--------| | Req-NFR-7 (Testing) | Testing | Integration test: HTTP collection with mock server | Test Infrastructure | N/A | HttpCollectionIntegrationTest | JUnit 5 test execution | Designed | | Req-NFR-8 (Testing) | Testing | Integration test: gRPC transmission with mock server | Test Infrastructure | N/A | GrpcTransmissionIntegrationTest | JUnit 5 test execution | Designed | | Req-NFR-9 | Testing | Use JUnit 5 and Mockito frameworks | Test Framework | pom.xml test dependencies | N/A | Build configuration review | Designed | | Req-NFR-10 | Testing | Tests executable via 'mvn test' | Build System | pom.xml | N/A | Maven build validation | Designed | --- ## Normative Requirements | Req ID | Category | Description | Architecture Component | Java Package/Class | Test Class | Verification Method | Status | |--------|----------|-------------|----------------------|-------------------|------------|-------------------|--------| | Req-Norm-1 | Normative | ISO-9001 compliance | Quality Management Process | All modules | N/A | Process audit, documentation review | Designed | | Req-Norm-2 | Normative | Cenelec EN 50716 Basic Integrity | Safety Standards | All modules | N/A | Safety analysis, code review | Designed | | Req-Norm-3 | Normative | Error detection and handling (invalid data, timeouts, faults) | Error Handling Architecture | com.siemens.hsp.domain.ErrorHandler
All adapters | ErrorHandlingTest
TimeoutHandlingTest | Integration test with fault injection | Designed | | Req-Norm-4 | Normative | Rigorous testing: unit, integration, validation | Test Strategy | Test suite across all packages | All test classes | Test coverage analysis (target: 80%+) | Designed | | Req-Norm-5 | Normative | Document development process (requirements, design, implementation, testing) | Documentation | docs/ folder structure | N/A | Documentation completeness review | Designed | | Req-Norm-6 | Normative | Maintainable design: clear code, modular architecture | Code Quality | Hexagonal architecture pattern | N/A | Code review, architecture review | Designed | --- ## User Stories | Req ID | Category | Description | Architecture Component | Java Package/Class | Test Class | Verification Method | Status | |--------|----------|-------------|----------------------|-------------------|------------|-------------------|--------| | Req-US-1a | User Story | System operator: automatic collection every second for real-time monitoring | HTTP Polling Service | com.siemens.hsp.application.HttpPollingService | HttpPollingServiceTest | Integration test with timing validation | Designed | | Req-US-1b | User Story | Data analyst: reliable transmission via gRPC with buffering | Data Flow Coordination | com.siemens.hsp.application.DataFlowCoordinator
com.siemens.hsp.domain.DataBuffer | DataFlowCoordinatorTest
DataBufferTest | Integration test with network failures | Designed | | Req-US-1c | User Story | System administrator: check health status via HTTP endpoint | Health Check Port | com.siemens.hsp.adapter.inbound.health.HealthCheckAdapter | HealthCheckAdapterTest | Integration test with health endpoint | Designed | --- ## Hexagonal Architecture Mapping ### Core Domain (Business Logic) - **Value Objects**: DiagnosticData, Configuration, HealthStatus - **Entities**: N/A (stateless service) - **Services**: DataBuffer, ConfigurationValidator, JsonDataSerializer, DiagnosticDataValidator - **Domain Ports**: ConfigurationPort, DataCollectionPort, DataTransmissionPort, HealthStatusPort ### Application Layer (Use Cases) - **Services**: HttpPollingService, GrpcTransmissionService, DataFlowCoordinator, HealthMonitoringService - **Orchestration**: HspApplication (main) ### Adapters (Infrastructure) #### Inbound Adapters (Driving) - **Configuration**: JsonConfigurationAdapter, ConfigurationLoader - **Health Check**: HealthCheckAdapter (HTTP endpoint) #### Outbound Adapters (Driven) - **HTTP Client**: HttpClientAdapter, RetryHandler, BackoffStrategy, EndpointConnectionPool - **gRPC Client**: GrpcClientAdapter, StreamManager, ConnectionManager - **Logging**: FileLoggerAdapter, LoggingConfiguration --- ## Package Structure ``` com.siemens.hsp/ ├── HspApplication.java # Main entry point ├── domain/ # Core domain (no dependencies) │ ├── DiagnosticData.java # Value object │ ├── Configuration.java # Value object │ ├── HealthStatus.java # Value object │ ├── DataBuffer.java # Thread-safe buffer │ ├── ConfigurationValidator.java # Validation logic │ ├── JsonDataSerializer.java # JSON serialization │ ├── DiagnosticDataValidator.java # Data validation │ └── ports/ │ ├── inbound/ │ │ ├── ConfigurationPort.java │ │ └── HealthStatusPort.java │ └── outbound/ │ ├── DataCollectionPort.java │ ├── DataTransmissionPort.java │ └── LoggingPort.java ├── application/ # Use case orchestration │ ├── HttpPollingService.java │ ├── GrpcTransmissionService.java │ ├── DataFlowCoordinator.java │ └── HealthMonitoringService.java └── adapter/ ├── inbound/ │ ├── config/ │ │ ├── JsonConfigurationAdapter.java │ │ └── ConfigurationLoader.java │ └── health/ │ └── HealthCheckAdapter.java └── outbound/ ├── http/ │ ├── HttpClientAdapter.java │ ├── RetryHandler.java │ ├── BackoffStrategy.java │ └── EndpointConnectionPool.java ├── grpc/ │ ├── GrpcClientAdapter.java │ ├── StreamManager.java │ └── ConnectionManager.java └── logging/ ├── FileLoggerAdapter.java └── LoggingConfiguration.java ``` --- ## Generated Protobuf Classes ``` com.siemens.coreshield.owg.shared.grpc/ ├── TransferServiceGrpc.java # Generated service stub ├── TransferRequest.java # Generated message └── TransferResponse.java # Generated message ``` --- ## Summary Statistics - **Total Requirements**: 56 unique requirements - Architecture Requirements: 8 - Functional Requirements: 32 - Non-Functional Requirements: 10 - Normative Requirements: 6 - User Stories: 3 (decomposed from 1) - **Java Classes (Estimated)**: 32 production classes - **Test Classes (Estimated)**: 35+ test classes - **Test Coverage Target**: 80%+ line coverage - **Requirements by Status**: - Designed: 56 (100%) - Implemented: 0 (0%) - Tested: 0 (0%) - Verified: 0 (0%) --- ## Notes 1. **Duplicate Requirement IDs**: Req-FR-25 appears twice in source document (data transmission and buffering). Both mapped separately. 2. **Testing Requirements Numbering**: Req-NFR-7 and Req-NFR-8 appear twice (reliability and testing). Disambiguated in matrix. 3. **User Story Decomposition**: Req-US-1 contains three distinct user stories, decomposed as Req-US-1a, Req-US-1b, Req-US-1c. 4. **Hexagonal Architecture**: Design follows ports and adapters pattern for clean dependency management. 5. **Virtual Threads (Java 21+)**: Req-Arch-6 leverages Project Loom for efficient concurrent HTTP polling. 6. **Protobuf Generation**: IF2 protobuf classes generated from provided .proto schema. --- **Next Steps**: 1. Architecture design review and approval 2. Detailed class design for core domain 3. Test-driven implementation (TDD) 4. Integration testing with mock servers 5. Performance validation with 1000 endpoints 6. Security audit and normative compliance review