Wednesday, November 22, 2017

Efectul de ondulanță în programare

Numai cine nu muncește, nu greșește. De când mă știu eu programator o singură dată mi s-a întâmplat să scriu un program destul de lunguț, să-l compilez și din prima a fost fără erori de compilare, apoi al trecut la editarea de legături și acolo a fost OK, iar la execuție, nu-mi venea să cred, toate seturile de date de test au trecut cu brio. Făcusem un program care a mers din prima. M-am uitat și l-am verificat încă și încă pentru că nu credeam că așa ceva este posibil. Mai mult, nu lucrasem pe el mai mult ca pe alte programe, ci normal. Dar așa a fost să fie. Era un accident.
În programele mele am avut:
  • erori de compilare cu diferite cauze, unele ale mele, altele din cauza perforării căci mai încurcam pe zero cu litera o sau una defineam ca variabile și alta refeream în virtutea inerției. Au fost și situații când la perforare punctul cu care se încheiau instrucțiunile COBOL a fost perforat ca virgulă și totul s-a dus de râpă. Alterori am folosit variabile nedefinite sau nedeclarate sau am utilizat etichete care erau altfel date în prealabil sau pur și simplu nu erau definite;
  • erori de editare de legături destul de frecvente căci solicitam eu resurse care nu erau definite sau programul după compilare când trecea la editarea de legături identifica neconcordanțe ce determinau întreruperea procesului de editare; învățasem pe dinafară ce nu trebuie să fac astfel încât să nu-mi apară erori de linkage editor, destul de greu de localizat mai atunci când erau chestiuni de rafinament la transferul de parametrii cu consecințele ce decurg din toate neconcordanțele de tip, de lungime sau de ordine în listă;
  • erori de execuție cu nenumărate cauze care aducerau mare tristețe mai ales atunci când din cauza neconcordanței dintre ceea ce era perforat în cartele și formatele după care se făceau citirile, mă trăgeau de urechi cu câte un mesaj neplăcut; nici situațiile de conversii aiuritoare de la citirea aleatoare de câmpuri se răsfrângea după principiul unde dai și unde crapă asupra muncii mele de programator chinuit și cu frică de Dumnezeu;
  • erori de logică, erori de care m-a ferit Cel de Sus pentru că nu începeam să scriu nicio linie sursă fără să fia avut clar despre ce era vorba; Eram cam pisălog, dar știam că dacă mă apuc să scriu un program fără să am clar ce trebuie să fac și fără să fi înțeles algoritmul, dacă îmi dădeam seama de greșeala de logică fie mai devreme, fie mai târziu, nu trebuia să fac corecții în program, ci să-l iau de la capăt, căci a cârpi ceva profund greșit duce la o construcție care oricum trebuie abandonată.
În tinerețea mea, m-am apucat și am studiat sistematic erorile de programare și am scris și oarece articole pe această temă, referite prin:
  • Ion IVAN, Alexandru BALOG, Andrei GOGA, Marian MACESANU - Analiza statistica a erorilor specifice produselor - program, Revista de Statistica, vol. 34, nr. 10, 1985, pg. 27 - 37
  • Ion IVAN, Cristian AMANCEI - Stabilitatea coeficientilor modelului global de calitate software, teorie, practica, experimente, Editura ASE, Bucuresti 2006, 172 pg.
  • Ion IVAN, Adrian PÎRVULESCU, Paul POCATILU  - Software Quality Verification Through Empirical Testing, Journal of Applied Quantitative Methods, vol. 2, nr. 1, 2007, pg. 38 - 60.

Împreună cu Alexandru BALOG am dezbătut foarte mult fenomenele legate de fluctuațiile erorilor din programe și care se studiază generic sub denumirea de efect de ondulanță, identificând situațiile în care evoluția erorilor se comportă asemeni undelor amortizate, ceea ce este excelent pentru că programtorul speră ca erorile din programul său să scadă până la dispariție. Când erorile se comportă ca undele neamortizate și cresc în frecvențe, deja înseamnă că programul are o gravă problemă și programatorul a intrat în panică și în loc să repare, mai mult strică. Atunci trebuie făcută o schimbare majoră, în ideia asistenței dată de un alt programator cu experiență care va găsi rapid remediul situației care tinde să scape de sub control.
Efectul de ondulanță în programare este exemplul clar de translatare a conceptelor din fizica undelor electromagnetice către ingineria software și către tehnicile de depanare eficiente, pe care niciun programator nu trebuie să le neglijeze, dar pe care trebuie să le cunoască tocmai pentru a face programe cât mai bune.



(22 noiembrie 2017)

No comments:

Post a Comment