Tuesday, November 21, 2017

Lungimea unui program

Lungimea unui program are diferite modalități de exprimare, numai că pentru a se obține mărimi comparabile trebuie:
- programele să fie omogene;
- stilul de programare să fie comun;
- același indicator să fie folosit peste tot.
Dacă se definesc mai mulți indicatori și se folosesc la întâmplare, rezultatele obținute nu sunt comparabile, deci nu se va trage nicio concluzie în legătura cu programele scrise și cu atât mai mult nu se vor face calcule de costuri și de productivități folosind serii de date care au termeni diferit calculați, exprimate cu unități de măsură neomogene.
Lungimea programului ca lungime de fișier se obține direct, scriid programul și stocându-l ca fișier de text sursă, exprimat în Kb sau Mb și arareori în Gb dacă este vorba de o construcție ciclopică, de invidiat și care depășește complexitatea unui sistem de operare sofisticat.
Lungimea programului ca număr total de instrucțiuni se obține direct din ceea ce oferă mediul de dezvoltare software, cu luarea în considerare a definirilor de operanzi, definirilor de proceduri, de fișiere, instrucțiunile executabile și comentariile care autodocumentează programele. Aici se numără și instrucțiunile vide. Se definește conceptul de instrucțiune, folosind separatorul de instrucțiuni, iar la numărătoare construcție e=3, f=7, g=12, x=-1, g=43; este diferită de construcția e=3; f=7; g=12; x=-1; g=43;  pentru că prima la numărătoare adaugă doar 1 căci este o expresie virgulă într-o singură instrucțiune, iar a dpua construcție intră în calcului lungimii cu 5 căci sunt 5 instrucțiuni deși sunt doar banale atribuiri, dar cresc lungimea programului, așa pricăjite cum sunt atribuirile acelea.
Lungimea programului ca număr de linii sursă se obține urmărind ceea ce numără mediul de dezvoltare, dar are un inconvenient major prin faptul că programatorul din dorința de a face lizibil programul face fragmentări cu efecte directe asuăra construcției de ansamblu.
Construcția:
for(y=s=i=0; i<n; i++) {s+=x[i]; y+=x[i]*x[i];}
are o singură linie sursă, fără ca programul să fie foarte lizibil, în timp ce construcția:
// inițializare variabile
y=0;
s=0;
// calcul sume
for(i=0; i<n; i++) 
     {
      s+=x[i]; 
      y+=x[i]*x[i];
     }
are 9 linii sursă, lungimea unui program depinzând ca număr de linii sursă de stilul de programare adoptat.
Lungimea programului ca număr de instrucțiuni executabile  se obține numărând instrucțiunile executabile și neluând în calcul definirile de variabile, de fișiere, de comentarii și de șabloane, dar și includerile de biblioteci. Unii programatori consideră că o astfel de măsurare are menirea de a evidenția efortul programatorului de a face ceva cu operanzii definți.
Ceea ce trebuie specificat este faptul că lunigimile programelor diferă de la limbaj de programare la limbaj de programare, ceea ce înseamnă că programele scrise în limbaj de asamblare conțin cu mult mai multe instrucțiuni executabile, dar instrucțiuni simple desigur, căci aceata este caracteristica limbajului de asamblare, de a conține instrucțiuni simple. Construirea  de macrodefiniții și referitea lor este o altă problemă care trebuie tratată separat, căci și refolosirea de proceduri determină scăderea lungimii programului. De aceea orice analiză de lungime trebuie să includă și studiul de repetabilitate de secvențe, fapt ce trebuie sancționat, căci reutilizarea de secvențe prin apeluri de proceduri e ochestiune de bun simț.
Lungimea unui program este o discuție fără sfârșit și cred că Brâncuși la ea s-a gândti când a făcut coloana info=initului și a instalat-o la Târgu Jiu doar pentru a trage un semnal de larmă la adrea informaticienilor.



(21 noiembrie 2017)

No comments:

Post a Comment