Kohezija (informatika)

U programiranju, kohezija se odnosi na stepen u kom se elementi modula nalaze zajedno. Tako kohezija meri snagu odnosa između funkcionalnih delova u okviru nekog modula. Na primer, u sistemima izražene kohezije funkcionalni delovi su jako povezani.

Kohezija je redni tip merenja i obično se opisuje kao "jaka kohezija" i "slaba kohezija". Preferiraju se moduli jake kohezije, jer je jaka kohezija povezana sa nekoliko poželjenih osobina softvera uključujući robusnost, pouzdanost, upotrebljivost i razumljivost. Nasuprot tome, slaba kohezija je povezana sa neželjenim osobinama kao što su teško održavanje, testiranje, višestruka upotreba ili čak razumevanje.

Kohezija je često suprotna vezama, drugačijeg koncepta. Jaka kohezija je često u korelaciji sa slabim vezama , i suprotno. Softverske metrike za veze i koheziju je otkrio Larry Constantine u kasnim 1960—im godinama kao deo strukturnog projektovanja , na osnovu karakteristika "dobrog" programiranja koje smanjuju održavanje i troškove modifikacije. Strukturno projektovanje, kohezija i veze su objavljeni u članku Stevens, Myers & Constantine(1974) i knjizi Yourdon & Constantine(1979), kasnije su postali standardni izrazi u softverskom inženjeringu.

U objektno-orijentisanom programiranju, ako metode klase imaju tendenciju da budu slične u mnogim aspektima, tada za te klase kažemo da imaju jaku koheziju. U jakom koheznom sistemu čitljivost i upotrebljivost koda se povećava, dok složenost ostaje ista.

Kohezija se povećava ako:

  • fukcionalnosti u klasama, pristupom preko svojih metoda, imaju mnogo toga zajedničkog
  • metode sprovode mali broj povezanih aktivnosti, izbegavajući grubu granulaciju ili nepovezane grupe podataka.

Prednosti visoke kohezije (ili "jake kohezije") su:

  • redukovan modul složenosti (oni su jednostavniji, jer imaju manje operacija).
  • povećan sistem održavanja, jer logične promene u domenu utiču na manje modula, zato što promene u jednom modulu zahtevaju manje promene u drugim modulima.
  • povećan modul ponovne upotrebljivosti, jer će aplikacioni programeri lakše naći komponentu koja im je potrebna u kohezivnom skupu operacija koji pruža modul.

Dok je princip modula sa savršenom kohezijom da se sastoji od jednog, atomskog elementa-ima jednu funkciju, na primer, u praksi složeni zadaci nisu izraženi jednim, jednostavnim elementom. Tako modul pojedinačnog elementa ima element koji je ili suviše komplikovan, kako bi ostvario zadatak, ili je suviše ograničen, i tako čvrsto spojen sa drugim modulima. Prema tome kohezija je uravnotežena sa jedinicama složenosti i vezama.

Vrste kohezije uredi

Kohezija je kvalitativna mera, što znači da se izvorni kod koji se meri pregleda pomoću naslova radi klasifikacije. Vrste kohezije, od najgore ka najboljoj, su sledeće:

Slučajna kohezija (najgora)
Slučajna kohezija je kada se delovi modula proizvoljno grupišu; jedina veza između delova je da su grupisani zajedno (npr. "Komunalne usluge" klasa).
Logička kohezija
Logična kohezija je kada su delovi modula grupisani jer su logično kategorisani da urade istu stvar, iako se razlikuju po prirodi (npr. ručno rutinsko grupisanje svih miševa i tastatura).
Vremensta kohezija
Vremenska kohezija je kada su delovi modula grupisani po vremenu obrađivanja-delovi se obrađuju u određenom trenutku rada programa (npr. funkcija koja se poziva posle hvatanja izuzetaka koji zatvaraju otvorene datoteke, kreira izveštaj o greškama i obaveštava korisnika).
Proceduralna kohezija
Proceduralna kohezija je kada su delovi modula grupisani, jer oni uvek prate određeni redosled izvođenja (npr. funkcija koja odobrava datoteke i zatim otvara fajl).
Komunikaciona/informaciona kohezija
Komunikaciona kohezija je kada su delovi modula grupisani jer rade na istim podacima (npr. modul koji radi na istom zapisu informacija).
Sekvencijalna kohezija
Sekvencijalna kohezija je kada su delovi modula grupisani jer je izlaz iz jednog dela ulaz u drugi deo, kao na pokretnoj traci (npr. funkcija koja obrađuje i čita podatke iz datoteke).
Funkcionalna kohezija (najbolja)
Funkcionalna kohezija je kada su delovi modula grupisani, jer svi doprinose jednom dobro definisanom zadatku modula (npr. leksička analiza na XML stringu).

Iako je kohezija rangiranje na skali, rangovi ne ukazuju na stabilan napredak poboljšane kohezije. Istraživanja različitih ljudi, uključujući Larry Constantine , Edward Yourdon i Steve McConnell ukazuju da su prve dve vrste kohezije (slučajna i logička) manje dobre; komunikaciona i sekvencijalna kohezija su veoma dobre, a funkcionalna je najbolja.

Dok se funkcionalna kohezija smatra za najpoželjniji tip kohezije softverskog modula ona ne može biti ostvarljiva. Postoje slučajevi gde je komunikaciona kohezija najviši nivo kohezije koji se može postići u datim okolnostima.

Vidi još uredi