Software verification & validation plan#
Project: s2_msi_raw_generator runs a Sentinel-2B L1B product backwards through the exact
inverse of the operational L0→L1B radiometric chain to reconstruct L1A → L0plus → Synthetic L0, validated against
the reference ESA L0 img. · DRD: ECSS-E-ST-40C Rev.1 (Software verification
plan + Software validation plan, SVerP + SValP, combined for a single-CSC E2ES). Companion: the SVR
(report.md). Requirements baseline: ../srs.md.
1. Approach#
Verification is predominantly by automated test against the S2 L1B-anchored algorithms; the four ECSS methods are used as follows:
Method |
Code |
Use in this project |
|---|---|---|
Test |
T |
Automated |
Analysis |
A |
Closed-form / numerical reasoning where a test only bounds the result — e.g. the offset/dark/relative-response DN-inversion bound and the Synthetic-L0-vs-ESA-Synthetic L0 DN-agreement reasoning. |
Inspection |
I |
Static check of artefacts — output metadata/provenance, |
Review |
R |
Manual review — originality (no external-processor source/names), ATBD consistency. |
Each requirement in ../srs.md carries its method and the implementing test; the closed matrix is in
../sdd/traceability.md and the results in report.md.
2. Verification matrix (by requirement class)#
Requirement class |
IDs |
Method |
Where verified |
|---|---|---|---|
Input handling |
REQ-FUNC-001/003/005 |
T |
|
Reverse chain (offset/PRNU/dark/un-bin/SWIR-restage/defective/crosstalk/on-board-eq inversions, un-framing, 12-bit quantize) |
REQ-FUNC-010/013/015–020/022 (excl. 014 PSF re-blur, 021 add-noise — MTF-deconvolution is OFF, PSF/noise not re-applied) |
T |
|
L0 output product |
REQ-FUNC-030–034, 045 |
T/I |
|
ADF / calibration |
REQ-FUNC-044/046/047 |
T |
|
Performance |
REQ-PERF-004 (calibration recovery), REQ-PERF-005 (Synthetic L0 DN agrees with reference ESA L0 |
T/A |
|
Interfaces |
REQ-IF-001/002/003 |
I/T |
|
Quality |
REQ-QUAL-001…004 |
I/R/T |
|
Synthetic L0 completion (ESUN/datation/SAD/EOQC/open container) |
REQ-FUNC-035–042 |
T/I |
|
S2 L1B E2E shared machinery (PSFD §3 naming / compressed ISP / L0plus codec round-trip) |
REQ-FUNC-091/092/093 |
T/I |
|
3. Test environment#
Runtime: Python ≥ 3.11; runtime dependencies
numpy+zarronly (no EOPF CPM, no external processor). All quicklook/figure PNGs use the stdlib encoder (no image libraries).Continuous integration: GitLab CI, single
teststage, imagepython:3.12-slim,pip install numpy pytest zarrthenpytest tests/ -q --junitxml=report.xml.Synthetic-fixture tests run with no external data (tiny inline GIPP fixtures; packaged PSF CSVs under
s2_msi_raw_generator/data/psf/).S2 L1B tests are environment-gated and skip unless
S2_GIPP_DIR(operational GIPP folder) and the S2B L1B input product (plus the reference ESA L0 reference used for validation) are set.
4. Acceptance criteria#
All non-gated tests pass in CI (currently 201 passed, 5 skipped (v0.3.0) — the skips are the S2 L1B tests, which pass when the data env vars are set).
The Synthetic L0 DN agrees with the reference ESA L0
imgwithin ≤~4 DN on the 10/20 m bands (REQ-PERF-005), within the bounds in §Quantitative results of the SVR. The L0plus codec round-tripdecode(L0plus) == L1Ais bit-exact (supporting check).The calibration sub-set recovers the dark/relative-response applied along the reverse chain — derived (not truth) from the synthetic CSM calibration frames — within bounds (inverse-crime cure retained).
Every requirement in
../srs.mdmarked realized is traced to a passing verification item.Originality review passes: no external-processor source code or repository/module names in the deliverable.