Кохезија (информатика)

У програмирању, кохезија се односи на степен у ком се елементи модула налазе заједно. Тако кохезија мери снагу односа између функционалних делова у оквиру неког модула. На пример, у системима изражене кохезије функционални делови су јако повезани.

Кохезија је редни тип мерења и обично се описује као "јака кохезија" и "слаба кохезија". Преферирају се модули јаке кохезије, јер је јака кохезија повезана са неколико пожељених особина софтвера укључујући робусност, поузданост, употребљивост и разумљивост. Насупрот томе, слаба кохезија је повезана са нежељеним особинама као што су тешко одржавање, тестирање, вишеструка употреба или чак разумевање.

Кохезија је често супротна везама, другачијег концепта. Јака кохезија је често у корелацији са слабим везама , и супротно. Софтверске метрике за везе и кохезију је открио Larry Constantine у касним 1960—им годинама као део структурног пројектовања , на основу карактеристика "доброг" програмирања које смањују одржавање и трошкове модификације. Структурно пројектовање, кохезија и везе су објављени у чланку Stevens, Myers & Constantine(1974) и књизи Yourdon & Constantine(1979), касније су постали стандардни изрази у софтверском инжењерингу.

У објектно-оријентисаном програмирању, ако методе класе имају тенденцију да буду сличне у многим аспектима, тада за те класе кажемо да имају јаку кохезију. У јаком кохезионом систему читљивост и употребљивост кода се повећава, док сложеност остаје иста.

Кохезија се повећава ако:

  • фикционалности у класама, приступом преко својих метода, имају много тога заједничког
  • методе спроводе мали број повезаних активности, избегавајући грубу гранулацију или неповезане групе података.

Предности високе кохезије (или "јаке кохезије") су:

  • редукован модул сложености (они су једноставнији, јер имају мање операција).
  • повећан систем одржавања, јер логичне промене у домену утичу на мање модула, зато што промене у једном модулу захтевају мање промене у другим модулима.
  • повећан модул поновне употребљивости, јер ће апликациони програмери лакше наћи компоненту која им је потребна у кохезивном скупу операција који пружа модул.

Док је принцип модула са савршеном кохезијом да се састоји од једног, атомског елемента-има једну функцију, на пример, у пракси сложени задаци нису изражени једним, једноставним елементом. Тако модул појединачног елемента има елемент који је или сувише компликован, како би остварио задатак, или је сувише ограничен, и тако чврсто спојен са другим модулима. Према томе кохезија је уравнотежена са јединицама сложености и везама.

Врсте кохезије

Кохезија је квалитативна мера, што значи да се изворни код који се мери прегледа помоћу наслова ради класификације. Врсте кохезије, од најгоре ка најбољој, су следеће:

Случајна кохезија (најгора)
Случајна кохезија је када се делови модула произвољно групишу; једина веза између делова је да су груписани заједно (нпр. "Комуналне услуге" класа).
Логичка кохезија
Логична кохезија је када су делови модула груписани јер су логично категорисани да ураде исту ствар, иако се разликују по природи (нпр. ручно рутинско груписање свих мишева и тастатура).
Временска кохезија
Временска кохезија је када су делови модула груписани по времену обрађивања-делови се обрађују у одређеном тренутку рада програма (нпр. функција која се позива после хватања изузетака који затварају отворене датотеке, креира извештај о грешкама и обавештава корисника).
Процедурална кохезија
Процедурална кохезија је када су делови модула груписани, јер они увек прате одређени редослед извођења (нпр. функција која одобрава датотеке и затим отвара фајл).
Комуникациона/информациона кохезија
Комуникациона кохезија је када су делови модула груписани јер раде на истим подацима (нпр. модул који ради на истом запису информација).
Секвенцијална кохезија
Секвенцијална кохезија је када су делови модула груписани јер је излаз из једног дела улаз у други део, као на покретној траци (нпр. функција која обрађује и чита податке из датотеке).
Функционална кохезија (најбоља)
Функционална кохезија је када су делови модула груписани, јер сви доприносе једном добро дефинисаном задатку модула (нпр. лексичка анализа на XML стрингу).

Иако је кохезија рангирање на скали, рангови не указују на стабилан напредак побољшане кохезије. Истраживања различитих људи, укључујући Larry Constantine , Edward Yourdon и Steve McConnell указују да су прве две врсте кохезије (случајна и логичка) мање добре; комуникациона и секвенцијална кохезија су веома добре, а функционална је најбоља.

Док се функционална кохезија сматра за најпожељнији тип кохезије софтверског модула она не може бити остварљива. Постоје случајеви где је комуникациона кохезија највиши ниво кохезије који се може постићи у датим околностима.

Види још