Паритет поведінки — це observable contract

Доказ паритету порівнює source і target на однакових representative inputs, а не лише перевіряє, що target компілюється. Контракт може містити outputs, errors, status codes, side effects, ordering, timing, idempotency, retries і persistence behavior — лише ті виміри, які справді observable для споживача.

Порівняння має розділяти expected equivalence, допустиму різницю і blocking discrepancy. Якщо oracle або baseline відсутні, результат не «паритет», а Unknown.

Матриця source-to-target comparison

DimensionSource baselineTarget observationDecision
Inputsrepresentative request/statesame controlled inputпідтвердити coverage
Outputvalue, status, shapetarget value, status, shapeequivalent або investigate
Errorstype, code, message boundarytarget error behaviorblocking при contract drift
Side effectswrites/events/notificationstarget effects and countперевірити idempotency
Ordering/timingobservable sequence/latency classtarget sequence/latency classлише якщо contract requires
Evidencecommand, test, log, fixturematching anchorUnknown без anchors

Порядок збирання доказу

  1. Визначте representative cases і зафіксуйте source revision та environment assumptions.
  2. Запишіть observable contract: inputs, outputs, errors, side effects та invariants.
  3. Повторіть ті самі cases на target у контрольованій поверхні.
  4. Порівняйте results за кожною dimension, не зводячи все до одного score.
  5. Збережіть evidence anchors, discrepancy, confidence і owner наступного рішення.
  6. Зупиніться або зробіть HOLD при непоясненій різниці чи відсутньому oracle.

Що не доводить паритет

  • успішний build без runtime або contract checks;
  • один happy-path case без errors і side effects;
  • однаковий internal implementation або class names;
  • загальний statement «сумісно» без source/target observations;
  • заповнений template без фактичних command/test outputs.

Канонічне джерело уроку · JavaRush

Відкрити матеріал JavaRush