Cuplare (programare computer) - Coupling (computer programming)

În ingineria software , cuplarea este gradul de interdependență dintre modulele software ; o măsură a cât de strâns legate sunt două rutine sau module; puterea relațiilor dintre module.

Image
Cuplare și coeziune

Cuplarea este de obicei contrastată cu coeziunea . Cuplarea scăzută se corelează adesea cu o coeziune ridicată și invers. Cuplarea redusă este adesea considerată a fi un semn al unui sistem computerizat bine structurat și a unui design bun și, atunci când este combinată cu o coeziune ridicată, susține obiectivele generale de lizibilitate și mentenabilitate ridicate .

Istorie

De metrici de calitate software - ul de cuplare și de coeziune au fost inventate de Larry Constantin la sfârșitul anilor 1960 , ca parte a unui desen structurat , pe baza caracteristicilor de „bune“ practici de programare care costurile de întreținere și de modificare reduse. Proiectarea structurată, inclusiv coeziunea și cuplarea, au fost publicate în articolul Stevens, Myers & Constantine (1974) și în cartea Yourdon & Constantine (1979), iar acesta din urmă a devenit ulterior termeni standard.

Tipuri de cuplare

Image
Model conceptual de cuplare

Cuplarea poate fi „scăzută” (de asemenea „ slabă ” și „slabă”) sau „înaltă” (de asemenea, „strânsă” și „puternică”). Unele tipuri de cuplaje, în ordinea cuplajului cel mai mare la cel mai mic, sunt după cum urmează:

Programare procedurală

Un modul aici se referă la un subrutină de orice fel, adică un set de una sau mai multe instrucțiuni având un nume și, de preferință, propriul său set de nume de variabile.

Cuplarea conținutului (ridicat)
Cuplarea conținutului se spune că apare atunci când un modul folosește codul unui alt modul, de exemplu o ramură. Acest lucru încalcă ascunderea informațiilor - un concept de bază de proiectare software.
Cuplaj comun
Cuplarea comună se spune că apare atunci când mai multe module au acces la aceleași date globale. Dar poate duce la propagarea necontrolată a erorilor și la efecte secundare neprevăzute atunci când se fac modificări.
Cuplaj extern
Cuplarea externă are loc atunci când două module partajează un format de date impus extern, protocolul de comunicație sau interfața dispozitivului. Acest lucru este practic legat de comunicarea către instrumente și dispozitive externe.
Cuplaj de control
Cuplarea de control este un modul care controlează fluxul altuia, trimițându-i informații despre ce trebuie să facem (de exemplu, trecând un indicator de ce să facem).
Cuplare ștampilă (cuplare structurată pe date)
Cuplarea cu ștampilă are loc atunci când modulele partajează o structură de date compozită și utilizează doar părți ale acesteia, posibil părți diferite (de exemplu, trecând o înregistrare întreagă la o funcție care are nevoie doar de un singur câmp al acesteia).
În această situație, o modificare într-un câmp de care un modul nu are nevoie poate duce la schimbarea modului în care modulul citește înregistrarea.
Cuplarea datelor
Cuplarea datelor are loc atunci când modulele partajează date prin, de exemplu, parametri. Fiecare datum este o piesă elementară și acestea sunt singurele date partajate (de exemplu, trecerea unui număr întreg la o funcție care calculează o rădăcină pătrată).

Programare orientată pe obiecte

Cuplaj de subclasă
Descrie relația dintre un copil și părintele acestuia. Copilul este conectat la părintele său, dar părintele nu este conectat la copil.
Cuplare temporală
Este atunci când două acțiuni sunt grupate într-un singur modul doar pentru că se întâmplă în același timp.

În lucrările recente, au fost investigate diferite concepte de cuplare și utilizate ca indicatori pentru diferite principii de modularizare utilizate în practică.

Cuplare dinamică

Scopul acestui tip de cuplare este de a oferi o evaluare în timp de execuție a unui sistem software. S-a susținut că metricele de cuplare statică își pierd precizia atunci când se tratează o utilizare intensivă a legării dinamice sau a moștenirii. În încercarea de a rezolva această problemă, au fost luate în considerare măsurile de cuplare dinamică.

Cuplare semantică

Acest tip de cuplare ia în considerare asemănările conceptuale dintre entitățile software utilizând, de exemplu, comentarii și identificatori și bazându-se pe tehnici precum indexarea semantică latentă (LSI).

Cuplare logică

Cuplarea logică (sau cuplarea evolutivă sau cuplarea schimbărilor) exploatează istoricul lansărilor unui sistem software pentru a găsi modele de schimbare între module sau clase: de exemplu, entități care sunt susceptibile de a fi schimbate împreună sau secvențe de schimbări (o schimbare într-o clasă A este întotdeauna urmată de o schimbare într-o clasă B).

Dezavantaje ale cuplajului strâns

Sistemele strâns cuplate tind să prezinte următoarele caracteristici de dezvoltare, care sunt adesea văzute ca dezavantaje:

  1. O schimbare într-un modul forțează de obicei un efect de schimbare a modificărilor în alte module.
  2. Asamblarea modulelor ar putea necesita mai mult efort și / sau timp din cauza dependenței crescute între module.
  3. Un anumit modul ar putea fi mai greu de reutilizat și / sau testat, deoarece trebuie incluse module dependente.

Probleme de performanta

Indiferent dacă este cuplat slab sau strâns, performanța unui sistem este adesea redusă prin crearea de mesaje și parametri, transmiterea, traducerea (de exemplu, marshaling) și interpretarea mesajelor (care ar putea fi o referință la un șir, matrice sau structură de date), care necesită mai puține cheltuieli generale decât crearea un mesaj complicat, cum ar fi un mesaj SOAP . Mesajele mai lungi necesită mai mult procesor și memorie pentru a produce. Pentru a optimiza performanța în timpul rulării, lungimea mesajului trebuie redusă la minimum și semnificația mesajului trebuie maximizată.

Transmisie de mesaje Overhead și Performanță
Deoarece un mesaj trebuie transmis integral pentru a-și păstra semnificația completă, transmisia mesajului trebuie optimizată. Mesajele mai lungi necesită mai mult CPU și memorie pentru a transmite și a primi. De asemenea, atunci când este necesar, receptorii trebuie să reasambleze un mesaj în starea inițială pentru a-l primi complet. Prin urmare, pentru a optimiza performanța în timpul rulării, lungimea mesajului trebuie redusă la minimum și semnificația mesajului trebuie maximizată.
Traducerea mesajelor Overhead și performanță
Protocoalele și mesajele în sine conțin adesea informații suplimentare (de exemplu, pachete, structură, definiție și informații despre limbă). Prin urmare, receptorul trebuie adesea să traducă un mesaj într-o formă mai rafinată prin eliminarea caracterelor suplimentare și a informațiilor despre structură și / sau prin conversia valorilor de la un tip la altul. Orice tip de traducere mărește procesorul și / sau memoria. Pentru a optimiza performanța în timpul rulării, formularul și conținutul mesajului trebuie reduse și rafinate pentru a maximiza semnificația acestuia și a reduce traducerea.
Interpretarea mesajelor Overhead and Performance
Toate mesajele trebuie interpretate de receptor. Mesajele simple, cum ar fi numere întregi, ar putea să nu necesite o prelucrare suplimentară pentru a fi interpretate. Cu toate acestea, mesajele complexe, cum ar fi mesajele SOAP, necesită un analizor și un transformator de șiruri pentru ca acestea să prezinte semnificațiile intenționate. Pentru a optimiza performanțele în timpul rulării, mesajele trebuie să fie rafinate și reduse pentru a minimiza interpretarea generală.

Soluții

O abordare a cuplării în scădere este designul funcțional , care urmărește să limiteze responsabilitățile modulelor de-a lungul funcționalității. Cuplarea crește între două clase A și B dacă:

  • A are un atribut care se referă la (este de tip) B .
  • Un apel la serviciile unui obiect B .
  • A are o metodă care face referire la B (prin tipul de returnare sau parametru).
  • A este o subclasă (sau unelte)clasa B .

Cuplarea redusă se referă la o relație în care un modul interacționează cu un alt modul printr-o interfață simplă și stabilă și nu trebuie să fie preocupat de implementarea internă a celuilalt modul (vezi Ascunderea informațiilor ).

Sisteme precum CORBA sau COM permit obiectelor să comunice între ele fără a fi nevoie să știe nimic despre implementarea celuilalt obiect. Ambele sisteme permit chiar obiectelor să comunice cu obiecte scrise în alte limbi.

Cuplare versus coeziune

Cuplarea și coeziunea sunt termeni care apar împreună foarte frecvent. Cuplarea se referă la interdependențele dintre module, în timp ce coeziunea descrie cât de legate sunt funcțiile dintr-un singur modul. Coeziunea scăzută implică faptul că un anumit modul îndeplinește sarcini care nu sunt foarte legate între ele și, prin urmare, pot crea probleme pe măsură ce modulul devine mare.

Cuplarea modulului

Cuplarea în ingineria software descrie o versiune a valorilor asociate acestui concept.

Pentru cuplarea fluxului de date și control:

  • d i : numărul parametrilor de date de intrare
  • c i : numărul parametrilor de control al intrării
  • d o : numărul parametrilor de date de ieșire
  • c o : numărul parametrilor de control al ieșirii

Pentru cuplarea globală:

  • g d : numărul de variabile globale utilizate ca date
  • g c : numărul de variabile globale utilizate ca control

Pentru cuplarea mediului:

  • w : numărul de module numite (fan-out)
  • r : numărul de module care apelează modulul luat în considerare (fan-in)

Coupling(C)face valoarea mai mare cu cât modulul este mai cuplat. Acest număr variază de la aproximativ 0,67 (cuplare redusă) până la 1,0 (cuplat înalt)

De exemplu, dacă un modul are un singur parametru de date de intrare și ieșire

Dacă un modul are 5 parametri de date de intrare și ieșire, un număr egal de parametri de control și accesează 10 articole de date globale, cu un ventilator de 3 și un ventilator de 4,

Vezi si

Referințe

Lecturi suplimentare