Biblioteca
Tutora
BibliotecaInformatică și TIC › clasa a XII-a

Proiectarea și realizarea unui produs software

Parcurgerea etapelor de dezvoltare a unui proiect informatic de complexitate medie.

Ciclul de viață al unui produs software

Un program de câteva zeci de linii se poate scrie direct. Un produs software — o aplicație folosită de alți oameni, întreținută ani la rând — nu. De aceea dezvoltarea urmează un ciclu de viață: succesiunea etapelor prin care trece produsul, de la ideea inițială până la retragerea din uz.

Etapele clasice, în ordinea cerută la examen:

Două observații care sunt de fapt esența capitolului. Prima: întreținerea este cea mai lungă și cea mai costisitoare etapă, nu scrierea codului — un produs se scrie luni și se întreține ani. A doua: costul corectării unei erori crește dramatic cu etapa în care e descoperită. O cerință înțeleasă greșit, prinsă în analiză, costă o discuție; aceeași cerință greșită, descoperită după livrare, poate însemna rescrierea aplicației.

Modelele de organizare a etapelor diferă. Modelul cascadă (waterfall) parcurge etapele strict una după alta și e potrivit când cerințele sunt clare și stabile de la început. Modelele iterative și incrementale repetă ciclul pe versiuni succesive, fiecare adăugând funcționalități și permițând corecții de traseu — abordare potrivită proiectelor unde cerințele se limpezesc pe parcurs.

Analiza cerințelor și specificațiile

Analiza răspunde la o singură întrebare: ce anume trebuie să facă produsul. Rezultatul ei este specificația cerințelor — documentul care descrie funcționalitățile, datele de intrare, rezultatele așteptate și restricțiile.

Cerințele se împart în două categorii care se cer separat:

O cerință bine scrisă este clară, completă, necontradictorie, realizabilă și mai ales verificabilă. Testul practic: dacă nu poți spune ce anume trebuie măsurat ca să dovedești că cerința e îndeplinită, cerința e prost formulată. „Aplicația să fie rapidă” nu e verificabilă; „orice căutare returnează rezultatul în cel mult o secundă pentru maximum 10.000 de înregistrări” este.

În analiză se stabilesc și datele: ce informații se rețin despre fiecare entitate, ce tipuri au, ce valori sunt permise, ce restricții există între ele. Tot aici se decide modul de stocare — fișiere text, fișiere binare sau bază de date — decizie care influențează direct proiectarea.

Greșeala tipică de proiect școlar este sărirea peste această etapă: elevul începe să scrie cod după cinci minute de gândire, apoi descoperă la jumătatea implementării că structura de date aleasă nu suportă o cerință de bază. Analiza nu e birocrație — e ceea ce împiedică rescrierea de la zero.

La final, analiza se completează cu planificarea: împărțirea muncii pe etape, estimarea timpului și stabilirea reperelor intermediare.

Proiectarea modulară

Proiectarea transformă cerințele în structura concretă a produsului. Metoda fundamentală este descompunerea (top-down): problema mare se împarte în subprobleme, fiecare subproblemă se împarte mai departe, până când fiecare bucată e suficient de simplă cât să fie rezolvată de un subprogram sau de un modul.

Un modul este o componentă cu o responsabilitate bine definită, care comunică cu restul programului printr-o interfață — lista de funcții pe care le oferă și datele pe care le primește. Restul, adică felul în care modulul își face treaba, rămâne ascuns.

Două criterii de calitate a descompunerii, ambele întrebate frecvent:

Avantajele proiectării modulare, în forma cerută la teorie: dezvoltarea se poate face în paralel, de mai multe persoane; fiecare modul se poate testa separat; codul se reutilizează; întreținerea devine posibilă, pentru că o eroare se localizează într-un modul, nu în tot programul.

Tot în proiectare se aleg structurile de date și algoritmii, se stabilește interfața cu utilizatorul și se decid convențiile de scriere a codului: nume sugestive pentru variabile și funcții, indentare consecventă, comentarii acolo unde intenția nu e evidentă din cod.

Confuzia clasică: proiectarea nu înseamnă desenarea interfeței grafice. Interfața e doar o parte; proiectarea privește în primul rând structura internă a aplicației.

Implementarea, testarea și depanarea

Implementarea înseamnă scrierea codului conform proiectului, modul cu modul. Ordinea uzuală e de jos în sus: se scriu întâi modulele de bază, apoi cele care le folosesc, astfel încât fiecare nivel să se poată testa pe date reale.

Testarea verifică dacă produsul se comportă conform specificației. Nu se confundă cu depanarea: testarea descoperă existența erorilor, depanarea le localizează și le corectează. Formularea inversă e capcană sigură la itemii de teorie.

Nivelurile de testare:

Alegerea datelor de test este partea în care se pierd cele mai multe puncte la proiecte. Un set bun conține: cazuri obișnuite, cazuri limită (zero elemente, un singur element, valoarea minimă și cea maximă admisă) și date invalide, pentru a verifica reacția programului la intrări greșite. Un program care merge pe exemplul din enunț nu este un program testat.

Tipuri de erori, cu deosebirea esențială:

Depanarea folosește urmărirea pas cu pas, puncte de întrerupere, inspectarea valorilor variabilelor și, în lipsa unui depanator, afișări temporare în punctele critice. Regula de aur: se caută prima valoare greșită din execuție, nu ultima — eroarea e acolo unde o variabilă devine incorectă prima dată.

Documentarea, livrarea și întreținerea

Documentația nu este un apendice scris în ultima seară, ci parte din produs. Ea are două destinatare distincte, iar confundarea lor e greșeala tipică:

La acestea se adaugă comentariile din cod, care explică de ce s-a făcut ceva, nu ce face linia respectivă — un comentariu care repetă codul e zgomot; unul care explică o decizie neevidentă salvează ore.

Punerea în funcțiune presupune instalarea la beneficiar, transferul datelor existente, configurarea și instruirea utilizatorilor. O aplicație corectă pe care nimeni nu știe s-o folosească este un proiect ratat.

Întreținerea are mai multe forme, utile de reținut distinct:

Pe tot parcursul, controlul versiunilor ține evidența modificărilor și permite revenirea la o stare anterioară funcțională — obicei care transformă o greșeală gravă într-un inconvenient minor.

Criteriile după care se evaluează un produs software, la final: corectitudinea (face ce s-a cerut), fiabilitatea (funcționează stabil în timp), eficiența (folosește rezonabil timpul și memoria), utilizabilitatea, portabilitatea și mentenabilitatea (poate fi modificat fără a se strica).

De reținut

ciclu de viață al produsului software
succesiunea etapelor parcurse de un produs: analiza cerințelor, proiectare, implementare, testare, punere în funcțiune și întreținere
cerință funcțională
cerință care descrie ce anume face sistemul: o operație, un calcul sau un rezultat pe care trebuie să îl furnizeze
cerință nefuncțională
cerință care descrie cum se comportă sistemul: performanță, securitate, volum de date, ușurință în utilizare, portabilitate
proiectare modulară
descompunerea aplicației în module cu responsabilități bine definite, care comunică prin interfețe și își ascund detaliile interne
coeziune
măsura în care funcțiile dintr-un modul servesc același scop; o coeziune mare este semn de descompunere bună
cuplare
gradul de dependență dintre module; o cuplare slabă permite modificarea unui modul fără a afecta restul aplicației
testare
activitatea de verificare a produsului față de specificație, cu scopul de a descoperi existența erorilor
depanare
activitatea de localizare și corectare a unei erori deja descoperite prin testare
eroare de logică
eroare care nu împiedică rularea programului, dar duce la rezultate greșite; nu este semnalată nici de compilator, nici la execuție
întreținere (mentenanță)
etapa de după livrare, în care produsul este corectat, adaptat la medii noi și completat cu funcționalități; este cea mai lungă și mai costisitoare etapă

Greșeli frecvente

Greșit: Se spune că testarea corectează erorile
Corect: Testarea doar descoperă existența erorilor; localizarea și corectarea lor se numesc depanare. Sunt activități distincte, cu instrumente diferite
Greșit: Se consideră că implementarea (scrierea codului) este etapa cea mai lungă și mai costisitoare
Corect: Întreținerea este etapa cea mai lungă și mai scumpă; un produs se scrie în luni și se întreține ani, iar costul unei erori crește cu cât e descoperită mai târziu
Greșit: Programul este declarat testat pentru că funcționează pe exemplul din enunț
Corect: Un set de test corect conține și cazuri limită (zero elemente, un singur element, valori extreme) și date invalide, nu doar cazul obișnuit
Greșit: Documentația de utilizare este confundată cu cea tehnică
Corect: Documentația de utilizare se adresează celui care folosește aplicația și nu conține cod; documentația tehnică descrie module, structuri de date și algoritmi, pentru cel care întreține produsul
Greșit: Se începe scrierea codului fără analiză și proiectare, considerate pierdere de timp
Corect: Fără specificație și fără o structură gândită dinainte, o cerință descoperită târziu poate impune rescrierea aplicației; analiza este exact ceea ce previne acest cost

Test — 6 întrebări ca la examen

1. Care este ordinea corectă a etapelor din ciclul de viață al unui produs software?
  1. proiectare, analiza cerințelor, implementare, testare, întreținere
  2. analiza cerințelor, proiectare, implementare, testare, întreținere
  3. implementare, testare, analiza cerințelor, proiectare, întreținere
  4. analiza cerințelor, implementare, proiectare, întreținere, testare
Vezi răspunsul
analiza cerințelor, proiectare, implementare, testare, întreținere. Se stabilește întâi ce trebuie făcut (analiza), apoi cum se face (proiectarea), apoi se scrie și se verifică codul, iar la final urmează întreținerea. Prima variantă inversează analiza cu proiectarea, adică proiectează o soluție înainte de a ști ce problemă rezolvă.
2. Cerința „aplicația trebuie să răspundă la orice căutare în cel mult o secundă” este:
  1. o cerință funcțională
  2. o cerință nefuncțională
  3. o eroare de logică
  4. un criteriu de documentare
Vezi răspunsul
o cerință nefuncțională. Cerința nu descrie ce face aplicația, ci cum se comportă — performanța este o cerință nefuncțională. O cerință funcțională ar suna „aplicația permite căutarea unui elev după nume”, ceea ce face prima variantă tentantă, dar nu corectă.
3. Un program se compilează, rulează fără să se oprească, dar afișează o medie greșită. Ce tip de eroare este?
  1. eroare de sintaxă
  2. eroare de execuție
  3. eroare de logică
  4. eroare de compilare a interfeței
Vezi răspunsul
eroare de logică. Programul funcționează, dar rezultatul e incorect, deci algoritmul sau formula sunt greșite — eroare de logică. Eroarea de execuție ar fi oprit programul (împărțire la zero, depășire de indice), motiv pentru care a doua variantă este cel mai frecvent aleasă greșit.
4. Ce înseamnă că un proiect are cuplare slabă între module?
  1. modulele conțin puțin cod
  2. modulele depind cât mai puțin unele de detaliile celorlalte
  3. modulele nu pot fi testate separat
  4. aplicația are puține module
Vezi răspunsul
modulele depind cât mai puțin unele de detaliile celorlalte. Cuplarea slabă înseamnă dependențe minime între module, astfel încât interiorul unuia poate fi modificat fără a atinge restul. Prima variantă confundă cuplarea cu dimensiunea codului, care nu are legătură cu gradul de dependență.
5. Un elev trebuie să testeze un subprogram care calculează media unui vector de note. Care set de date de test este cel mai bun?
  1. trei vectori cu note obișnuite, de lungimi diferite
  2. un singur vector, cel din enunțul problemei
  3. vectori obișnuiți, plus vectorul cu un singur element, vectorul vid și note la limitele admise
  4. cât mai mulți vectori generați aleatoriu, fără verificarea rezultatului
Vezi răspunsul
vectori obișnuiți, plus vectorul cu un singur element, vectorul vid și note la limitele admise. Un set bun acoperă cazurile obișnuite, cazurile limită și datele invalide, pentru că acolo se ascund majoritatea erorilor. Ultima variantă pare riguroasă prin volum, dar fără rezultat așteptat cunoscut nu se poate constata nicio eroare.
6. După livrare, beneficiarul cere ca aplicația să funcționeze și pe un alt sistem de operare. Ce tip de întreținere este necesară?
  1. corectivă
  2. adaptivă
  3. perfectivă
  4. nu este întreținere, ci un produs nou
Vezi răspunsul
adaptivă. Adaptarea la un mediu de execuție nou este întreținere adaptivă. Întreținerea perfectivă ar însemna adăugarea de funcționalități sau îmbunătățirea performanțelor, iar cea corectivă repararea unor erori — niciuna nu descrie schimbarea mediului.
Deschide varianta interactivă — cu AI care îți explică
← FișiereRețele de calculatoare și Internet →
BiologieChimieEconomieFilosofieFizicăGeografieInformatică și TICIstorieLogică și argumentareMatematicăPsihologieLimba și literatura română