Files
detections/_docs/02_document/tests/traceability-matrix.md
T

6.1 KiB
Raw Blame History

Traceability Matrix

Acceptance Criteria Coverage

AC ID Acceptance Criterion Test IDs Coverage
AC-DA-1 Detections with confidence below probability_threshold are filtered out FT-P-03, FT-P-05 Covered
AC-DA-2 Overlapping detections with containment ratio > tracking_intersection_threshold are deduplicated FT-P-06 Covered
AC-DA-3 Tile duplicate detections identified when bounding box coordinates differ by < 0.01 FT-P-16 Covered
AC-DA-4 Physical size filtering: detections exceeding max_object_size_meters removed FT-P-07 Covered
AC-VP-1 Frame sampling: every Nth frame processed (frame_period_recognition) FT-P-10, NFT-PERF-04 Covered
AC-VP-2 Minimum annotation interval: frame_recognition_seconds between annotations FT-P-11 Covered
AC-VP-3 Tracking: new annotation accepted on movement/confidence change FT-P-12 Covered
AC-IP-1 Images ≤ 1.5× model dimensions processed as single frame FT-P-03 Covered
AC-IP-2 Larger images: tiled based on GSD, tile overlap configurable FT-P-04, FT-P-16, NFT-PERF-03 Covered
AC-API-1 GET /health returns status: "healthy" with aiAvailability FT-P-01, FT-P-02 Covered
AC-API-2 POST /detect returns detections synchronously. Errors: 400, 422, 503 FT-P-03, FT-N-01, FT-N-02, FT-N-03, NFT-SEC-01 Covered
AC-API-3 POST /detect/{media_id} returns immediately with "started". Rejects duplicate with 409 FT-P-08, FT-N-04, NFT-SEC-03 Covered
AC-API-4 GET /detect/stream delivers SSE events. Queue max depth: 100 FT-P-09, FT-N-08, NFT-RES-LIM-02 Covered
AC-EL-1 Engine initialization is lazy (first detection, not startup) FT-P-01, FT-P-14 Covered
AC-EL-2 Status transitions: NONE → DOWNLOADING → ENABLED / ERROR FT-P-02, FT-P-14, FT-N-03, NFT-RES-03 Covered
AC-EL-3 GPU check: NVIDIA GPU with compute capability ≥ 6.1 FT-P-15 Covered
AC-EL-4 TensorRT conversion uses FP16 when GPU supports it NOT COVERED — requires specific GPU hardware; verified by visual inspection of TensorRT build logs
AC-EL-5 Background conversion does not block API responsiveness FT-P-01, FT-P-14 Covered
AC-LOG-1 Log files: Logs/log_inference_YYYYMMDD.txt NFT-RES-LIM-04 Covered
AC-LOG-2 Rotation: daily. Retention: 30 days NFT-RES-LIM-04 Covered
AC-OC-1 19 base classes, 3 weather modes, up to 57 variants FT-P-13 Covered
AC-OC-2 Each class has Id, Name, Color, MaxSizeM FT-P-07, FT-P-13 Covered

Restrictions Coverage

Restriction ID Restriction Test IDs Coverage
RESTRICT-HW-1 GPU CC ≥ 6.1 required for TensorRT FT-P-15 Covered
RESTRICT-HW-2 TensorRT conversion uses 90% GPU memory workspace NOT COVERED — requires controlled GPU memory environment; verified during manual engine build
RESTRICT-HW-3 ThreadPoolExecutor limited to 2 workers NFT-PERF-02, NFT-RES-LIM-01 Covered
RESTRICT-SW-1 Python 3 + Cython 3.1.3 compilation required NOT COVERED — build-time constraint; verified by Docker build succeeding
RESTRICT-SW-2 ONNX model (azaion.onnx) must be available via Loader FT-N-06, NFT-RES-01, NFT-RES-03 Covered
RESTRICT-SW-3 TensorRT engines are GPU-architecture-specific (not portable) NOT COVERED — requires multiple GPU architectures; documented constraint
RESTRICT-SW-4 classes.json must exist at startup FT-N-05 Covered
RESTRICT-SW-5 Model input: fixed 1280×1280 FT-P-03, FT-P-04 Covered
RESTRICT-SW-6 Max 300 detections per frame NFT-RES-LIM-03 Covered
RESTRICT-ENV-1 LOADER_URL must be reachable for model download FT-N-06, NFT-RES-01, NFT-RES-03 Covered
RESTRICT-ENV-2 ANNOTATIONS_URL must be reachable for result posting FT-N-07, NFT-RES-02 Covered
RESTRICT-ENV-3 Logs/ directory must be writable NFT-RES-LIM-04 Covered
RESTRICT-OP-1 Stateless — no local persistence of detection results NFT-RES-04 Covered
RESTRICT-OP-2 No TLS at application level NOT COVERED — infrastructure-level concern; out of scope for application blackbox tests
RESTRICT-OP-3 No CORS configuration NOT COVERED — requires browser-based testing; out of scope for API-level blackbox tests
RESTRICT-OP-4 No rate limiting NFT-SEC-02 Covered
RESTRICT-OP-5 No graceful shutdown — in-progress detections not drained NFT-RES-04 Covered
RESTRICT-OP-6 Single-instance in-memory state (not shared across instances) NFT-RES-04 Covered

Coverage Summary

Category Total Items Covered Not Covered Coverage %
Acceptance Criteria 22 21 1 95%
Restrictions 18 13 5 72%
Total 40 34 6 85%

Uncovered Items Analysis

Item Reason Not Covered Risk Mitigation
AC-EL-4 (FP16 TensorRT) Requires specific GPU with FP16 support; blackbox test cannot control hardware capabilities Low — TensorRT builder auto-detects FP16 Verified during manual TensorRT build; logged by engine
RESTRICT-HW-2 (90% GPU memory) Requires controlled GPU memory environment with specific memory sizes Low — hardcoded workspace fraction Verified by observing TensorRT build logs on target hardware
RESTRICT-SW-1 (Cython compilation) Build-time constraint, not runtime behavior Low — Docker build validates this Docker build step serves as the validation gate
RESTRICT-SW-3 (TensorRT non-portable) Requires multiple GPU architectures in test environment Low — engine filename encodes architecture Architecture-specific filenames prevent incorrect loading
RESTRICT-OP-2 (No TLS) Infrastructure-level concern; application does not implement TLS None — by design TLS handled by reverse proxy / service mesh in deployment
RESTRICT-OP-3 (No CORS) Browser-specific concern; API-level blackbox tests don't use browsers Low — known limitation Can be tested separately with browser automation if needed