Cum modernizezi C++ legacy fără să pierzi conformitatea
Refactorizarea codului vechi într-un produs reglementat nu e blocată de standard, ci de trasabilitate. Strategia care funcționează: schimbări mici, izolate, cu o poveste clară a echivalenței.
Refactorizarea codului vechi într-un produs reglementat nu e blocată de standard, ci de trasabilitate. Strategia care funcționează: schimbări mici, izolate, cu o poveste clară a echivalenței.
Acest articol e perspectiva unui inginer care a lucrat sub aceste cerințe, nu consultanță de reglementare. Pentru decizii de conformitate, consultă specialistul vostru de calitate/reglementare.
Mult din software-ul medical care rulează azi e C++ scris acum zece sau douăzeci de ani. Funcționează, e validat, și nimeni nu vrea să-l atingă. Până când trebuie: apare o cerință nouă, un compilator care nu mai e suportat, sau o bibliotecă cu o vulnerabilitate.
Am petrecut ani buni în zona asta — componente de imagistică în timp real la GE Healthcare și cod de sistem de date de laborator la Waters. Ce urmează e ce am învățat despre cum se face fără să dai totul peste cap.
În software obișnuit, un refactor bun e cel care nu schimbă comportamentul observabil. Sub reglementare, cerința e mai dură: trebuie să poți demonstra că nu l-a schimbat.
Diferența e enormă. „Sunt destul de sigur că merge la fel“ nu e un argument. Ai nevoie de dovezi — testele dinainte, testele de după, și o legătură clară între ce ai schimbat și ce ai verificat.
Asta face ca marile rescrieri să fie aproape imposibil de justificat. Nu pentru că sunt interzise, ci pentru că efortul de a demonstra echivalența pentru un sistem întreg e disproporționat.
Cazul obișnuit: cod fără teste, fără documentație de design, cu autori plecați de mult.
Ordinea care funcționează:
Punctul 1 e cel pe care echipele îl sar cel mai des, sub presiunea timpului. E și cel care costă cel mai mult când lipsește.
Când modifici cod validat, întrebarea la care trebuie să răspunzi e: rezultatul rămâne același acolo unde contează?
Pentru cod numeric — procesare de semnal, calcule pe măsurători — asta e mai subtil decât pare. O reorganizare de operații în virgulă mobilă poate schimba ultimul bit al rezultatului. Uneori nu contează. Alteori, dacă rezultatul trece printr-un prag de decizie, contează foarte mult.
Ce ajută:
Argumentul de echivalență e artefactul care convinge. Fără el, ai doar o promisiune.
Principiul care m-a ajutat cel mai mult: nu amesteca niciodată refactorizarea cu schimbarea de comportament.
Când cele două se amestecă, nimeni nu mai poate spune ce a cauzat o diferență, iar analiza de impact devine o presupunere.
În plus:
Din experiență, în ordinea raportului beneficiu/risc:
const-corectitudine. Ieftină, prinde erori la compilare, nu schimbă comportamentul.Ce am învățat să evit: adoptarea entuziastă a fiecărei facilități noi de limbaj. Fiecare schimbare trebuie justificată prin beneficiu, nu prin modernitate.
Modernizarea sub reglementare e mai lentă, dar nu e imposibilă. E, în esență, aceeași disciplină pe care ar trebui s-o aplicăm oriunde — doar că aici nu e opțională.
Dacă ai un sistem vechi pe care trebuie să-l duci mai departe fără să-l destabilizezi, e exact genul de problemă pe care am lucrat.
GE Healthcare — Voluson Ultrasound
Software Engineer (contract, remote)
dec. 2022 – ian. 2025
Capgemini — client Waters Corporation
Software Engineer (contract)
iun. 2022 – mai 2023
Dacă lucrezi la ceva din zona asta, hai să vorbim 30 de minute.
Programează o discuție