Introducere: Scopul fazei de proiectare în cadrul ciclului de viață al dezvoltării software este de a produce o soluție la o problemă dată în documentul SRS(Software Requirement Specification). Rezultatul fazei de proiectare este documentul de proiectare software (Sofware Design Document – SDD).
În principiu, proiectarea este un proces iterativ în două părți. Prima parte este proiectarea conceptuală care spune clientului ce va face sistemul. A doua este proiectarea tehnică care permite constructorilor de sisteme să înțeleagă hardware-ul și software-ul real necesar pentru a rezolva problema clientului.
Proiectarea conceptuală a sistemului:
- Este scrisă într-un limbaj simplu, adică un limbaj ușor de înțeles de către client.
- Explică în detaliu caracteristicile sistemului.
- Descrie funcționalitatea sistemului.
- Este independentă de implementare.
- Legat cu documentul privind cerințele.
Proiectarea tehnică a sistemului:
- Componenta hardware și proiectarea.
- Funcționalitatea și ierarhia componentei software.
- Arhitectura software
- Arhitectura de rețea
- Structura datelor și fluxul de date.
- Componenta I/O a sistemului.
- Semnează interfața.
Modularizare: Modularizarea este procesul de divizare a unui sistem software în mai multe module independente în care fiecare modul funcționează independent. Există multe avantaje ale modularizării în ingineria software. Unele dintre acestea sunt prezentate mai jos:
- Este ușor de înțeles sistemul.
- Întreținerea sistemului este ușoară.
- Un modul poate fi utilizat de mai multe ori în funcție de cerințele lor. Nu este nevoie să îl scrie din nou și din nou.
Cuplare: Cuplarea este măsura gradului de interdependență dintre module. Un software bun va avea un nivel scăzut de cuplare.
Tipuri de cuplare:
- Cuplarea datelor: În cazul în care dependența dintre module se bazează pe faptul că acestea comunică doar prin transmiterea de date, atunci se spune că modulele sunt cuplate cu date. În cazul cuplării de date, componentele sunt independente una față de cealaltă și comunică prin intermediul datelor. Comunicațiile dintre module nu conțin date vagabonde. Exemplu-sistemul de facturare a clienților.
- Cuplarea prin ștampilare În cuplarea prin ștampilare, structura completă de date este transmisă de la un modul la alt modul. Prin urmare, implică date tramp. Poate fi necesar din cauza unor factori de eficiență – această alegere a fost făcută de proiectantul perspicace, nu de un programator leneș.
- Cuplaj de control: Dacă modulele comunică prin transmiterea de informații de control, atunci se spune că sunt cuplate prin control. Acesta poate fi rău dacă parametrii indică un comportament complet diferit și bun dacă parametrii permit factorizarea și reutilizarea funcționalității. Exemplu- funcția de sortare care primește funcția de comparare ca argument.
- Cuplare externă: În cazul cuplării externe, modulele depind de alte module, exterioare software-ului în curs de dezvoltare sau de un anumit tip de hardware. Ex- protocol, fișier extern, format de dispozitiv, etc.
- Cuplaj comun: Modulele au date comune, cum ar fi structurile de date globale. modificările în datele globale înseamnă urmărirea tuturor modulelor care accesează aceste date pentru a evalua efectul modificării. Astfel, are dezavantaje cum ar fi dificultatea reutilizării modulelor, capacitatea redusă de a controla accesul la date și mentenabilitatea redusă.
- Cuplarea conținutului: Într-un cuplaj de conținut, un modul poate modifica datele unui alt modul sau fluxul de control este transmis de la un modul la celălalt. Aceasta este cea mai gravă formă de cuplare și trebuie evitată.
Coeziune: Coeziunea este o măsură a gradului în care elementele modulului sunt legate din punct de vedere funcțional. Este gradul în care toate elementele orientate spre îndeplinirea unei singure sarcini sunt cuprinse în componentă. Practic, coeziunea este adezivul intern care menține modulul laolaltă. O bună proiectare de software va avea o coeziune ridicată.
Tipuri de coeziune:
- Coeziune funcțională: Fiecare element esențial pentru un singur calcul este conținut în componentă. O coeziune funcțională realizează sarcina și funcțiile. Este o situație ideală.
- Coeziune secvențială: Un element emite niște date care devin intrare pentru alt element, adică flux de date între părți. Apare în mod natural în limbajele de programare funcționale.
- Coeziune comunicațională: Două elemente operează cu aceleași date de intrare sau contribuie la aceleași date de ieșire. Exemplu- actualizează înregistrarea în baza de date și o trimite la imprimantă.
- Coeziune procedurală: Elementele de coeziune procedurală asigură ordinea de execuție. Acțiunile sunt încă slab conectate și este puțin probabil să fie reutilizabile. Ex- calculează media generală a elevului, tipărește fișa elevului, calculează media generală cumulată, tipărește media generală cumulată.
- Coeziune temporală: Elementele sunt legate prin momentul în care sunt implicate. Un modul conectat cu coeziune temporală toate sarcinile trebuie să fie executate în același interval de timp. Această coeziune conține codul de inițializare a tuturor elementelor sistemului. O mulțime de activități diferite au loc, toate la momentul inițierii.
- Coeziune logică: Elementele sunt legate din punct de vedere logic și nu funcțional. Ex- O componentă citește intrările de pe bandă, de pe disc și din rețea. Tot codul pentru aceste funcții se află în aceeași componentă. Operațiile sunt legate, dar funcțiile sunt semnificativ diferite.
- Coerență coincidentă: Elementele nu sunt înrudite(fără legătură). Elementele nu au altă relație conceptuală decât locația în codul sursă. Este accidentală și este cea mai proastă formă de coeziune. Ex- tipărirea liniei următoare și inversarea caracterelor unui șir de caractere într-o singură componentă.
Atenție cititorule! Nu vă opriți din învățare acum. Puneți mâna pe toate conceptele importante ale teoriei CS pentru interviurile SDE cu cursul de teorie CS la un preț accesibil studenților și deveniți pregătiți pentru industrie.