Кіріспе
Бағдарламаның құрылымдық күрделілігінің өлшемі. Цикломатикалық күрделілік – бағдарламаның күрделілігін көрсетуге арналған бағдарламалық метрика. Бұл бағдарламаның бастапқы коды арқылы өтетін тәуелсіз сызықтық жолдар санын сандық түрде өлшеу. Оны 1976 жылы Томас Дж. Маккейб аға әзірлеген. Цикломатикалық күрделілік бағдарламаның басқару ағыны графигі арқылы есептеледі. Графиктің түйіндері бағдарламаның үзілмейтін командалар тобына сәйкес келеді, ал екінші команда бірінші командадан кейін тікелей орындалу мүмкін болса, бағытталған қабырға екі түйінды байланыстырады. Цикломатикалық күрделілік жеке функцияларға, модульдерге, әдістерге немесе бағдарламаның кластарына да қолданылуы мүмкін. Маккейб алғаш ұсынған, негізгі жолмен тестілеу деп аталатын бір тестілеу стратегиясы, бағдарлама арқылы әрбір тәуелсіз сызықтық жолды тестілеу болып табылады. Бұл жағдайда, тестілік жағдайлардың саны бағдарламаның цикломатикалық күрделілігіне тең болады.
Cyclomatic complexity is a software metric used to indicate the complexity of a program. It is a quantitative measure of the number of linearly independent paths through a program's source code. It was developed by Thomas J. McCabe, Sr. in 1976. Cyclomatic complexity is computed using the control flow graph of the program. The nodes of the graph correspond to indivisible groups of commands of a program, and a directed edge connects two nodes if the second command might be executed immediately after the first command. Cyclomatic complexity may also be applied to individual functions, modules, methods, or classes within a program. One testing strategy, called basis path testing by McCabe who first proposed it, is to test each linearly independent path through the program. In this case, the number of test cases will equal the cyclomatic complexity of the program.
Даму кезінде күрделілікті шектеу
МакКейбтің бастапқы қолданыстарының бірі – бағдарлама әзірлеу кезіндегі процедуралардың күрделілігін шектеу еді. Ол бағдарламашыларға жасап жатқан модульдердің күрделілігін есептеп, модульдің цикломатикалық күрделілігі 10-нан асса, оларды кішірек модульдерге бөлуді ұсынды.
Бағдарламаның "құрылымын" өлшеу
Маккейбтің 1976 жылғы жұмысының VI бөлімі құрылымдалмаған бағдарламалардың бақылау ағыны графиктерінің (CFG) Маккейб анықтаған субграфиктері тұрғысынан қалай құрылғанын анықтауға арналған. (Толық мәліметтер үшін құрылымды бағдарламалау теоремасын қараңыз.) Маккейб осы бөлімді белгілі бір бағдарламаның құрылымдалған бағдарламалау идеалына қаншалықты жақын екендігін, яғни оның «құрылымдылығын» сандық өлшеу арқылы баяндаумен аяқтады. Маккейб осы мақсатта жасаған өлшемді «күрделілік» деп атады. Бағдарлама құрылымдалған болса, Маккейбтің қысқарту/конденсациялау процесі оны бір CFG түйініне дейін азайтады. Керісінше, бағдарлама құрылымдалмаған болса, итеративтік процесс қайталанбайтын бөлігін анықтайды. Маккейб анықтаған күрделілік өлшемі – осы қайталанбайтын графтың цикломатикалық күрделілігі, сондықтан ол барлық құрылымдалған бағдарламалар үшін дәл 1-ге тең болады, ал құрылымдалмаған бағдарламалар үшін 1-ден жоғары болады. Кейбір зерттеулер цикломатикалық күрделілік пен ақаулар арасында оң корреляцияны анықтады; ең жоғары күрделілікке ие функциялар мен әдістерде көбінесе ең көп ақаулар кездеседі. Дегенмен, цикломатикалық күрделілік пен бағдарламаның көлемі (әдетте кодтың жолдарымен өлшенетін) арасындағы корреляция көп рет дәлелденді. Лес Хаттон күрделіліктің кодтың жолдары сияқты болжау қабілетіне ие екенін мәлімдеді. Бағдарламаның көлемін ескере отырып жүргізілген зерттеулер (яғни, әртүрлі күрделілікке, бірақ ұқсас көлемге ие модульдерді салыстыру) көбінесе аз нәтижелі, көптеген зерттеулер маңызды корреляцияны таппады, ал кейбіреулері корреляцияны тапты. Кейбір зерттеушілер корреляцияны таппаған зерттеулерде қолданылған әдістердің дұрыстығына күмән келтіреді. Бұл қатынас бар болғанымен, оны тәжірибеде қолдану қиын. Бағдарламаның көлемі коммерциялық бағдарламалық жасақтаманың бақыланатын ерекшелігі болмағандықтан, Маккейбтің санының пайдалылығына күмән туды.