Analyse Results

This commit is contained in:
2026-02-19 11:21:18 +01:00
parent c41919b280
commit a5d2f5490c
144 changed files with 35994 additions and 22326 deletions

View File

@@ -0,0 +1,740 @@
# Software Test Specification
## Centron Enterprise Application - Testing Requirements and Strategy
**Document Control**
- **Project**: Centron Enterprise Application
- **Version**: 1.0
- **Date**: 2025-09-30
- **Standard**: ISO/IEC/IEEE 29148:2018
- **Classification**: Software Test Requirements and Specifications
---
## Table of Contents
1. [Test Strategy Overview](#1-test-strategy-overview)
2. [Unit Testing Requirements](#2-unit-testing-requirements)
3. [Integration Testing Requirements](#3-integration-testing-requirements)
4. [System Testing Requirements](#4-system-testing-requirements)
5. [Performance Testing Requirements](#5-performance-testing-requirements)
6. [Security Testing Requirements](#6-security-testing-requirements)
7. [User Acceptance Testing](#7-user-acceptance-testing)
8. [Test Environment Requirements](#8-test-environment-requirements)
---
## 1. Test Strategy Overview
### 1.1 Test Architecture
**SW-TEST-001**: The software SHALL implement comprehensive multi-level testing strategy
- **Test Pyramid Structure**: Unit → Integration → System → End-to-End
- **Coverage Targets**: Minimum 70% code coverage for business logic
- **Test Automation**: 80%+ automated test execution
- **Continuous Integration**: All tests must pass before deployment
**Current Test Implementation Statistics**:
- **Total Test Files**: 336 test classes
- **Test Project Structure**: 8 test projects across domains
- **Test Categories**: Unit, Integration, End-to-End, API tests
### 1.2 Test Project Organization
```
tests/
├── apis/ # External API Integration Tests
│ ├── Centron.APIs.CopDatabase.Tests/ # COP database API tests
│ ├── Centron.APIs.EgisDataAccess.Tests/ # EGIS system integration tests
│ ├── Centron.APIs.IcecatDataAccess.Tests/ # Icecat product API tests
│ └── Centron.APIs.ITscopeDataAccess.Tests/ # ITscope marketplace tests
├── backend/ # Business Logic Tests
│ ├── Centron.Tests.BL/ # Business logic unit tests
│ └── Centron.Tests.DAO/ # Data access layer tests
├── shared/ # Shared Test Utilities
│ └── Centron.Tests.Core/ # Common test infrastructure
├── Centron.Tests.Integration/ # Integration testing suite
└── Centron.Tests.EndToEnd/ # End-to-end workflow tests
```
### 1.3 Testing Framework Stack
| Framework | Purpose | Implementation Location |
|-----------|---------|------------------------|
| xUnit | Unit testing framework | All test projects |
| NHibernate | Database testing with in-memory DB | Backend tests |
| Moq | Mocking framework | Business logic tests |
| FluentAssertions | Assertion library | Throughout test suite |
| AutoFixture | Test data generation | Complex entity testing |
---
## 2. Unit Testing Requirements
### 2.1 Business Logic Unit Tests
**SW-UNIT-001**: Business Logic Test Coverage
- **Location**: `tests/backend/Centron.Tests.BL/`
- **Coverage Target**: 85% minimum for all BL classes
- **Test Pattern**: Arrange-Act-Assert (AAA)
- **Isolation**: Complete isolation using mocks for dependencies
**Example Test Implementation**:
```csharp
// File: tests/backend/Centron.Tests.BL/Sales/Receipts/ReceiptBLTests.cs
[TestClass]
public class ReceiptBLTests
{
private Mock<ISession> _mockSession;
private Mock<IAccountBL> _mockAccountBL;
private ReceiptBL _receiptBL;
[SetUp]
public void Setup()
{
_mockSession = new Mock<ISession>();
_mockAccountBL = new Mock<IAccountBL>();
_receiptBL = new ReceiptBL(_mockSession.Object);
}
[Test]
[TestCase("SW-UNIT-001.1")]
public async Task CreateReceipt_WithValidData_ShouldReturnSuccess()
{
// Arrange
var receiptData = new ReceiptCreateRequest
{
CustomerI3D = 123,
Items = new[] { CreateValidReceiptItem() }
};
_mockAccountBL.Setup(x => x.GetAccount(123))
.ReturnsAsync(Result.Success(CreateValidAccount()));
// Act
var result = await _receiptBL.CreateReceipt(receiptData);
// Assert
result.IsSuccess.Should().BeTrue();
result.Value.Should().NotBeNull();
result.Value.Number.Should().BeGreaterThan(0);
}
[Test]
[TestCase("SW-UNIT-001.2")]
public async Task CreateReceipt_WithInvalidCustomer_ShouldReturnError()
{
// Arrange
var receiptData = new ReceiptCreateRequest
{
CustomerI3D = 999, // Non-existent customer
Items = new[] { CreateValidReceiptItem() }
};
_mockAccountBL.Setup(x => x.GetAccount(999))
.ReturnsAsync(Result.Error<Account>("Customer not found"));
// Act
var result = await _receiptBL.CreateReceipt(receiptData);
// Assert
result.IsSuccess.Should().BeFalse();
result.ErrorMessage.Should().Contain("Customer not found");
}
}
```
### 2.2 Algorithm Unit Tests
**SW-UNIT-002**: Calculation Algorithm Testing
- **Focus Areas**: Price calculations, tax computations, discount algorithms
- **Precision Testing**: Decimal precision and rounding validation
- **Edge Cases**: Boundary conditions, null handling, overflow scenarios
**Pricing Algorithm Test Example**:
```csharp
[TestClass]
public class ReceiptPriceCalculationTests
{
[Test]
[TestCase("SW-UNIT-002.1")]
[TestCase(100.00, 0.19, 19.00, 119.00)] // Standard VAT
[TestCase(50.50, 0.07, 3.54, 54.04)] // Reduced VAT
[TestCase(0.00, 0.19, 0.00, 0.00)] // Zero amount
public void CalculateVAT_WithValidInputs_ShouldReturnCorrectVAT(
decimal netAmount, decimal vatRate, decimal expectedVat, decimal expectedGross)
{
// Arrange
var calculator = new VATCalculator();
// Act
var result = calculator.CalculateVAT(netAmount, vatRate);
// Assert
result.VATAmount.Should().Be(expectedVat);
result.GrossAmount.Should().Be(expectedGross);
}
[Test]
[TestCase("SW-UNIT-002.2")]
public void CalculateSwissRounding_ShouldRoundTo5Rappen()
{
// Arrange
var amounts = new[] { 1.01m, 1.02m, 1.03m, 1.06m, 1.07m, 1.08m };
var expected = new[] { 1.00m, 1.00m, 1.05m, 1.05m, 1.05m, 1.10m };
// Act & Assert
for (int i = 0; i < amounts.Length; i++)
{
var result = SwissRounding.RoundTo5Rappen(amounts[i]);
result.Should().Be(expected[i], $"Amount {amounts[i]} should round to {expected[i]}");
}
}
}
```
### 2.3 Entity Validation Tests
**SW-UNIT-003**: Data Validation Testing
- **Validation Rules**: Test all entity validation logic
- **Constraint Testing**: Database constraint simulation
- **Business Rules**: Domain-specific validation requirements
---
## 3. Integration Testing Requirements
### 3.1 Database Integration Tests
**SW-INT-001**: Data Access Integration Testing
- **Location**: `tests/backend/Centron.Tests.DAO/`
- **Database**: In-memory SQLite for fast execution
- **Schema**: Full schema creation and validation
- **Data Integrity**: Foreign key and constraint testing
**DAO Integration Test Pattern**:
```csharp
[TestClass]
public class AccountDAOIntegrationTests : DatabaseTestBase
{
private ISession _session;
private AccountDAO _accountDAO;
[SetUp]
public void Setup()
{
_session = SessionFactory.OpenSession();
_accountDAO = new AccountDAO(_session);
SetupTestData();
}
[Test]
[TestCase("SW-INT-001.1")]
public async Task SaveAccount_WithCompleteData_ShouldPersistCorrectly()
{
// Arrange
var account = new Account
{
Number = 12345,
Name = "Test Account",
Email = "test@example.com",
IsActive = true
};
// Act
using var transaction = _session.BeginTransaction();
await _accountDAO.SaveAsync(account);
await transaction.CommitAsync();
// Assert
var savedAccount = await _accountDAO.GetByIdAsync(account.I3D);
savedAccount.Should().NotBeNull();
savedAccount.Name.Should().Be("Test Account");
savedAccount.Number.Should().Be(12345);
}
[Test]
[TestCase("SW-INT-001.2")]
public async Task QueryAccounts_WithComplexFilter_ShouldReturnCorrectResults()
{
// Arrange
await SetupMultipleTestAccounts();
var filter = new AccountSearchFilter
{
SearchText = "Test",
IsActive = true,
CreatedFrom = DateTime.Today.AddDays(-30)
};
// Act
var results = await _accountDAO.SearchAsync(filter);
// Assert
results.Should().NotBeEmpty();
results.All(a => a.IsActive).Should().BeTrue();
results.All(a => a.Name.Contains("Test")).Should().BeTrue();
}
}
```
### 3.2 Web Service Integration Tests
**SW-INT-002**: API Integration Testing
- **Location**: `tests/Centron.Tests.Integration/`
- **Test Server**: In-memory test server for API testing
- **Authentication**: Test authentication and authorization flows
- **Data Flow**: End-to-end DTO conversion testing
**API Integration Test Example**:
```csharp
[TestClass]
public class AccountWebServiceIntegrationTests : WebServiceTestBase
{
[Test]
[TestCase("SW-INT-002.1")]
public async Task CreateAccount_ThroughAPI_ShouldReturnValidDTO()
{
// Arrange
var createRequest = new CreateAccountRequest
{
Name = "API Test Account",
Email = "api@test.com",
AccountTypes = new[] { AccountType.Customer }
};
// Act
var response = await ApiClient.PostAsync("/api/accounts", createRequest);
// Assert
response.Should().BeSuccessful();
var accountDTO = await response.ReadAsAsync<AccountDTO>();
accountDTO.Should().NotBeNull();
accountDTO.Name.Should().Be("API Test Account");
accountDTO.I3D.Should().BeGreaterThan(0);
}
[Test]
[TestCase("SW-INT-002.2")]
public async Task GetAccount_WithInvalidId_ShouldReturn404()
{
// Act
var response = await ApiClient.GetAsync("/api/accounts/99999");
// Assert
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
}
}
```
### 3.3 External API Integration Tests
**SW-INT-003**: Third-Party API Testing
- **Mock Services**: Mock external APIs for consistent testing
- **Error Handling**: Test failure scenarios and retry logic
- **Data Synchronization**: Verify data mapping and transformation
---
## 4. System Testing Requirements
### 4.1 End-to-End Workflow Tests
**SW-SYS-001**: Complete Business Process Testing
- **Location**: `tests/Centron.Tests.EndToEnd/`
- **Scope**: Full business workflows from start to finish
- **User Scenarios**: Real-world usage patterns
- **Data Persistence**: Verify complete data lifecycle
**End-to-End Test Example**:
```csharp
[TestClass]
public class ReceiptProcessingWorkflowTests : EndToEndTestBase
{
[Test]
[TestCase("SW-SYS-001.1")]
public async Task CompleteReceiptWorkflow_FromOfferToInvoice_ShouldSucceed()
{
// Arrange - Create test customer and articles
var customer = await CreateTestCustomer();
var articles = await CreateTestArticles();
// Act 1 - Create Offer
var offer = await CreateOffer(customer, articles);
offer.Should().NotBeNull();
offer.State.Should().Be(ReceiptState.Draft);
// Act 2 - Convert to Order
var order = await ConvertOfferToOrder(offer);
order.Should().NotBeNull();
order.State.Should().Be(ReceiptState.Approved);
// Act 3 - Process Delivery
var deliveryList = await CreateDeliveryList(order);
await ProcessDelivery(deliveryList);
// Act 4 - Generate Invoice
var invoice = await GenerateInvoice(order);
invoice.Should().NotBeNull();
invoice.TotalAmount.Should().Be(order.TotalAmount);
// Assert - Verify complete workflow
var updatedOrder = await GetOrder(order.I3D);
updatedOrder.State.Should().Be(ReceiptState.Invoiced);
var generatedInvoice = await GetInvoice(invoice.I3D);
generatedInvoice.State.Should().Be(ReceiptState.Completed);
}
[Test]
[TestCase("SW-SYS-001.2")]
public async Task AssetServiceWorkflow_FromInstallationToMaintenance_ShouldTrackCorrectly()
{
// Arrange
var customer = await CreateTestCustomer();
var hardware = await CreateTestHardwareArticle();
// Act - Install Asset
var asset = await InstallCustomerAsset(customer, hardware);
asset.Should().NotBeNull();
// Act - Create Service Contract
var contract = await CreateServiceContract(asset);
contract.Should().NotBeNull();
// Act - Schedule Maintenance
var serviceOrder = await ScheduleMaintenance(asset);
serviceOrder.Should().NotBeNull();
// Act - Complete Service
await CompleteServiceOrder(serviceOrder);
// Assert
var updatedAsset = await GetAsset(asset.I3D);
updatedAsset.LastMaintenanceDate.Should().BeCloseTo(DateTime.Now, TimeSpan.FromMinutes(5));
updatedAsset.ServiceHistory.Should().Contain(h => h.ServiceOrderI3D == serviceOrder.I3D);
}
}
```
### 4.2 User Interface System Tests
**SW-SYS-002**: WPF Application Testing
- **UI Automation**: Automated UI testing with Windows Application Driver
- **User Workflows**: Complete user interaction scenarios
- **Data Binding**: Verify MVVM pattern implementation
---
## 5. Performance Testing Requirements
### 5.1 Load Testing Requirements
**SW-PERF-001**: System Performance Validation
- **Database Operations**: Query performance under load
- **API Endpoints**: Response time requirements
- **Memory Usage**: Memory leak detection and monitoring
- **Concurrent Users**: Multi-user scenario testing
**Performance Test Specifications**:
```csharp
[TestClass]
public class PerformanceTests : PerformanceTestBase
{
[Test]
[TestCase("SW-PERF-001.1")]
public async Task AccountSearch_Under100ConcurrentUsers_ShouldMaintainResponseTime()
{
// Arrange
var concurrentUsers = 100;
var searchTasks = new List<Task<TimeSpan>>();
// Act
for (int i = 0; i < concurrentUsers; i++)
{
searchTasks.Add(MeasureAccountSearchTime());
}
var responseTimes = await Task.WhenAll(searchTasks);
// Assert
var averageTime = responseTimes.Average(t => t.TotalMilliseconds);
var maxTime = responseTimes.Max(t => t.TotalMilliseconds);
averageTime.Should().BeLessThan(2000, "Average response time should be under 2 seconds");
maxTime.Should().BeLessThan(5000, "Maximum response time should be under 5 seconds");
var slowQueries = responseTimes.Count(t => t.TotalMilliseconds > 3000);
slowQueries.Should().BeLessThan(5, "Less than 5% of queries should exceed 3 seconds");
}
[Test]
[TestCase("SW-PERF-001.2")]
public async Task ReceiptCalculation_WithLargeItemCount_ShouldCompleteInReasonableTime()
{
// Arrange
var receipt = await CreateReceiptWithItems(1000); // 1000 items
// Act
var stopwatch = Stopwatch.StartNew();
var result = await CalculateReceiptPrices(receipt);
stopwatch.Stop();
// Assert
result.Should().NotBeNull();
stopwatch.ElapsedMilliseconds.Should().BeLessThan(5000,
"Large receipt calculation should complete within 5 seconds");
}
}
```
### 5.2 Memory and Resource Testing
**SW-PERF-002**: Resource Utilization Testing
- **Memory Leaks**: NHibernate session management validation
- **Database Connections**: Connection pool management testing
- **Garbage Collection**: .NET garbage collection impact analysis
---
## 6. Security Testing Requirements
### 6.1 Authentication and Authorization Tests
**SW-SEC-001**: Security Validation Testing
- **Authentication**: User login and session management
- **Authorization**: Role-based access control validation
- **Input Validation**: SQL injection and XSS prevention
- **Data Protection**: Sensitive data encryption verification
**Security Test Examples**:
```csharp
[TestClass]
public class SecurityTests : SecurityTestBase
{
[Test]
[TestCase("SW-SEC-001.1")]
public async Task AccessRestrictedResource_WithoutPermission_ShouldReturnForbidden()
{
// Arrange
var limitedUser = await CreateUserWithLimitedRights();
var token = await AuthenticateUser(limitedUser);
// Act
var response = await ApiClient.GetAsync("/api/admin/sensitive-data",
headers: new { Authorization = $"Bearer {token}" });
// Assert
response.StatusCode.Should().Be(HttpStatusCode.Forbidden);
}
[Test]
[TestCase("SW-SEC-001.2")]
public async Task SqlInjectionAttempt_ShouldBeSanitized()
{
// Arrange
var maliciousInput = "'; DROP TABLE Accounts; --";
// Act
var searchResult = await AccountSearch.SearchByName(maliciousInput);
// Assert
searchResult.Should().BeEmpty();
// Verify Accounts table still exists
var accountCount = await CountAccountsInDatabase();
accountCount.Should().BeGreaterThan(0);
}
[Test]
[TestCase("SW-SEC-001.3")]
public void PasswordHashing_ShouldUseSecureAlgorithm()
{
// Arrange
var password = "TestPassword123!";
var hasher = new PasswordHasher();
// Act
var hash = hasher.HashPassword(password);
// Assert
hash.Should().NotBe(password);
hash.Length.Should().BeGreaterThan(50);
hasher.VerifyPassword(password, hash).Should().BeTrue();
}
}
```
### 6.2 Data Privacy Testing
**SW-SEC-002**: GDPR Compliance Testing
- **Data Anonymization**: Personal data removal verification
- **Access Logging**: Audit trail completeness
- **Data Export**: Personal data export functionality
- **Right to Deletion**: Complete data removal validation
---
## 7. User Acceptance Testing
### 7.1 Business Process Validation
**SW-UAT-001**: User Acceptance Test Scenarios
- **Real User Workflows**: Actual business process execution
- **User Interface Usability**: UI/UX validation
- **Performance Acceptance**: End-user performance requirements
- **Business Rule Validation**: Domain expert verification
**UAT Test Scenarios**:
| Scenario ID | Description | Acceptance Criteria |
|-------------|-------------|-------------------|
| UAT-001 | Customer Account Creation | Account created with all required fields, automatically assigned number |
| UAT-002 | Receipt Processing Workflow | Offer → Order → Invoice progression with proper state tracking |
| UAT-003 | Asset Installation and Service | Hardware asset installed, service contract created, maintenance scheduled |
| UAT-004 | Financial Reporting | Accurate financial reports with correct calculations and tax handling |
| UAT-005 | User Rights Management | Role-based access properly restricts functionality |
### 7.2 Regression Testing
**SW-UAT-002**: Regression Test Suite
- **Automated Regression**: Daily automated test execution
- **Manual Regression**: Weekly manual test execution for critical paths
- **Performance Regression**: Continuous performance monitoring
- **Browser Compatibility**: Multi-browser web component testing
---
## 8. Test Environment Requirements
### 8.1 Test Infrastructure
**SW-ENV-001**: Test Environment Specifications
- **Development Testing**: Local developer machines with in-memory databases
- **Integration Testing**: Shared test environment with test database
- **Performance Testing**: Production-like environment with load generators
- **User Acceptance Testing**: Staging environment with production data copy
**Environment Configuration**:
```yaml
# Test Environment Configuration
environments:
development:
database: "InMemory SQLite"
external_apis: "Mocked"
performance_monitoring: false
integration:
database: "SQL Server Test Instance"
external_apis: "Test Stubs"
performance_monitoring: true
staging:
database: "SQL Server Staging"
external_apis: "Sandbox APIs"
performance_monitoring: true
security_scanning: true
performance:
database: "SQL Server Performance"
load_generators: true
monitoring_tools: true
resource_profiling: true
```
### 8.2 Test Data Management
**SW-ENV-002**: Test Data Strategy
- **Data Generation**: Automated test data creation using AutoFixture
- **Data Seeding**: Consistent seed data for integration tests
- **Data Privacy**: No production data in test environments
- **Data Cleanup**: Automatic cleanup after test execution
**Test Data Factory Example**:
```csharp
public class TestDataFactory
{
private readonly Fixture _fixture;
public TestDataFactory()
{
_fixture = new Fixture();
ConfigureFixture();
}
public Account CreateValidAccount(string name = null)
{
return _fixture.Build<Account>()
.With(a => a.Name, name ?? _fixture.Create<string>())
.With(a => a.Number, () => GenerateUniqueAccountNumber())
.With(a => a.IsActive, true)
.Without(a => a.I3D) // Let database generate
.Create();
}
public Receipt CreateValidReceipt(int customerI3D)
{
return _fixture.Build<Receipt>()
.With(r => r.CustomerI3D, customerI3D)
.With(r => r.State, ReceiptState.Draft)
.With(r => r.CreatedAt, DateTime.Now)
.Without(r => r.I3D)
.Create();
}
}
```
### 8.3 Continuous Integration Testing
**SW-ENV-003**: CI/CD Test Integration
- **Build Pipeline**: All tests execute on every commit
- **Test Reporting**: Comprehensive test result reporting
- **Coverage Analysis**: Code coverage tracking and reporting
- **Quality Gates**: Minimum test coverage and pass rate requirements
**CI Pipeline Test Stages**:
1. **Unit Tests**: Fast feedback (< 5 minutes)
2. **Integration Tests**: Database and API validation (< 15 minutes)
3. **System Tests**: End-to-end scenarios (< 30 minutes)
4. **Performance Tests**: Load and stress testing (< 60 minutes)
---
## Test Execution Requirements
### Testing Standards and Practices
**Test Naming Convention**:
- **Format**: `MethodUnderTest_Scenario_ExpectedBehavior`
- **Examples**:
- `CreateAccount_WithValidData_ShouldReturnSuccess`
- `CalculateVAT_WithZeroAmount_ShouldReturnZeroVAT`
**Test Categories**:
- `[TestCategory("Unit")]` - Fast, isolated unit tests
- `[TestCategory("Integration")]` - Database and API integration tests
- `[TestCategory("System")]` - End-to-end workflow tests
- `[TestCategory("Performance")]` - Load and performance tests
- `[TestCategory("Security")]` - Security validation tests
**Coverage Requirements**:
- **Business Logic**: Minimum 85% line coverage
- **Data Access**: Minimum 75% line coverage
- **Web Services**: Minimum 80% line coverage
- **Critical Paths**: 100% coverage for payment and security functions
### Test Reporting and Metrics
**Quality Metrics**:
- **Test Pass Rate**: Minimum 95% for deployment
- **Test Execution Time**: Maximum 2 hours for full suite
- **Defect Density**: Less than 1 defect per 100 lines of code
- **Test Coverage**: Overall minimum 70% code coverage
---
**Document Approval**
- **Test Manager**: Test strategy and coverage requirements approved
- **Quality Assurance Lead**: Test specifications and acceptance criteria validated
- **Development Team Lead**: Test implementation feasibility confirmed
- **Security Officer**: Security testing requirements verified
- **Date**: 2025-09-30
- **Version Control**: Committed to repository requirements/software/