Решаи мураккабии нармафзор
Муқаддима
Ҳар як нармафзор маҷмӯи талаботи функсионалӣ (Functional Requirements) ва ғайрифунксионалӣ (Non-functional Requirements) дорад. Аммо новобаста аз он ки нармафзор чӣ кор мекунад, бо гузашти вақт масъалаи дигаре аҳамият пайдо мекунад: фаҳмидан, тағйир додан ва густариш додани он то чӣ андоза осон аст?
Ин савол моро ба мафҳуми мураккабии нармафзор (Software Complexity) мерасонад.
Дар ин мақола манзур аз мураккабӣ, мураккабии ҳисоббарорӣ, ба монанди мураккабии замонӣ ва фазоии алгоритмҳо нест. Манзур мураккабии сохтори нармафзор ва таъсири ин сохтор ба фаҳмидан, нигоҳдорӣ ва тағйир додани он аст.
Барои чен кардани ҷанбаҳои гуногуни мураккабии нармафзор меъёрҳои мухталиф пешниҳод шудаанд: аз мураккабии сикломатикӣ ва шумораи вобастагиҳо то андозаи фазои ҳолатҳо. Бо вуҷуди ин, як адад ба танҳоӣ наметавонад шарҳ диҳад, ки чаро кор бо як система барои таҳиягар душвор аст ё чаро ворид кардани тағйироти хурд ба ислоҳи қисматҳои зиёди код оварда мерасонад.
Барои беҳтар фаҳмидани ин масъала бояд як қадам ба ақиб баргардем ва бипурсем: аслан мураккабӣ чист?
Мураккабӣ чист?
Барои посух додан ба ин савол аз нигоҳи фалсафӣ бояд бипурсем: вақте мегӯем, ки чизе аз маҷмӯи ҷузъҳои худ фаротар аст, чӣ дар назар дорем?
Аз нигоҳи фалсафӣ мураккабиро метавон на танҳо хусусияти як чиз, балки муносибати байни система, зеҳн ва ҷаҳон донист. Дар асл, ин мафҳум се ҷанбаро дар бар мегирад: чӣ вуҷуд дорад — ҳастишиносӣ; чиро метавонем бидонем — маърифатшиносӣ; ва табиати сабабият чист — метафизика. Ҳар кадоми ин бахшҳо зербахшҳои худро доранд, ки онҳоро мухтасар баррасӣ мекунем.
Дар ҳастишиносӣ ду навъи мураккабӣ мавҷуд аст: мураккабии ҷузъӣ (Mereological Complexity), ё наҳвӣ (Syntactic), ва мураккабии системавӣ (Systemic Complexity), ё маъноӣ (Semantic).
Манзур аз мураккабии ҷузъӣ як таркиби одӣ аст. Масалан, тӯдаи ҳазор хишт аз он ҷиҳат мураккаб аст, ки ҷузъҳои зиёд дорад. Аммо ин ҷузъҳо бо ҳам чунон таъсири мутақобила надоранд, ки куллро дигаргун кунанд. Ин мураккабӣ аз ҷамъ шудани ҷузъҳо ба вуҷуд меояд.
Мураккабии системавӣ вақте ба вуҷуд меояд, ки тарзи ҷойгиршавӣ (Arrangement) ва таъсири мутақобилаи (Interaction) ҷузъҳо хусусиятҳои наверо ба вуҷуд меоранд, ки дар худи ҷузъҳо мавҷуд нестанд. Ин падидаро «зуҳури хусусиятҳои нав» ё Emergence меноманд. Як молекулаи об тар нест; тарӣ аз таъсири мутақобилаи миллиардҳо молекулаи об ба вуҷуд меояд. Як нейрон шуур надорад; шуур аз шабакаи нейронҳо падид меояд.
Аз нигоҳи маърифатшиносӣ яке аз шаклҳои муҳими мураккабӣ муқовимат ба фишурдасозӣ ё тавсифи кӯтоҳ аст. Наметавонед формулаи кӯтоҳе нависед, ки ояндаи системаро пешгӯӣ кунад, зеро рафтори он ба тамоми таърихи гузаштааш вобаста аст. Барои шинохтани он маҷбуред системаро ба кор андозед. Файласуфон ин мафҳумро «коҳишнопазирии ҳисоббарорӣ» меноманд; Стивен Волфрам низ онро матраҳ кардааст. Пас, мураккабӣ марзест, ки дар он пешгӯӣ ба поён мерасад ва фаҳмиш аз тариқи нақл ё таърих оғоз мешавад.
Файласуфоне чун С. Д. Брод ва дертар Ҷейн Ҷейкобс (Jane Jacobs) бар ин назар буданд, ки мураккабӣ аслан ба «ташкили муносибатҳо» марбут аст. Қоидаҳои таъсири мутақобилаи байни ҷузъҳо аз худи ҷузъҳо воқеитар ва муҳимтаранд.
Дар ниҳоят, падидашиносӣ — омӯзиши таҷриба — чунин саволро ба миён мегузорад: оё мураккабӣ «он ҷо», дар ҷаҳони беруна аст ё «ин ҷо», дар зеҳни мо?
Агар шумо зеҳне худогуна бо тавоноии бепоёни ҳисоббарорӣ медоштед, системаи ошӯбнок (Chaotic System) метавонист комилан одӣ ба назар расад, зеро ҳамаи сабабҳоро якбора медидед.
Барои мавҷудоти маҳдуде мисли мо мураккабӣ бо ҳайрат ва навӣ таъриф мешавад. Система вақте мураккаб аст, ки моделҳои мо пайваста дар пешгӯии рафтори он ноком мешаванд ва моро водор мекунанд, ки фаҳмиши худро бознигарӣ кунем.
Дар математика
Дар математикаи соф мураккабӣ ба фишурдасозӣ марбут аст.
Мураккабии Колмогоров мураккабии як сатри додаҳо ё як системаро ҳамчун дарозии кӯтоҳтарин барномаи имконпазири компютерӣ таъриф мекунад, ки метавонад маҳз ҳамон сатрро тавлид кунад ва сипас қатъ шавад.
Сатри комилан такроршавандае мисли 0000000000 мураккабии кам дорад, зеро барномаи он танҳо чунин аст: «Аломати 0-ро даҳ маротиба чоп кун».
Сатри воқеан тасодуфие мисли h7qP2!m9x эҳтимолан мураккабии бештар дорад, зеро онро фишурда карда наметавонед. Кӯтоҳтарин барномаи имконпазир чунин хоҳад буд: «Сатри h7qP2!m9x-ро чоп кун».
Дар муҳандисӣ
Мураккабии сикломатикӣ (Cyclomatic Complexity): шумораи роҳҳои аз ҷиҳати хаттӣ мустақил дар коди манбаъии барнома аст. Ҳар қадар шохаҳои if-then-else зиёд бошанд, мураккабӣ ҳамон қадар баландтар мешавад ва мутаносибан эҳтимоли мавҷудияти хатоҳои пинҳонӣ меафзояд.
Пайвастагии мутақобил — назарияи графҳо: агар система n ҷузъ дошта бошад, шумораи робитаҳои эҳтимолӣ ба n(n−1)/2 баробар аст. Муҳандис медонад, ки мураккабӣ бо шумораи ҷузъҳо не, балки бо шумораи интерфейсҳои байни онҳо меафзояд. Дар нармафзор шумораи вобастагиҳо ва махсусан вобастагиҳои мутақобил метавонад бо калон шудани система босуръат афзоиш ёбад.
Афзоиши таркишии ҳолатҳо (State Explosion): ба шумораи ҳолатҳои имконпазире ишора мекунад, ки система метавонад дар онҳо қарор гирад. Термостат ду ҳолат дорад: фаъол ва хомӯш. Бо зиёд шудани шумораи тағйирёбандаҳои ҳолат фазои ҳолатҳо метавонад ба таври экспоненсиалӣ афзоиш ёбад. Агар система n бит ҳолати дохилӣ дошта бошад, дар ҳолати умумӣ то 2^n ҳолати имконпазир хоҳад дошт. Душвории муҳандисӣ дар он аст, ки бояд аз кори дурусти система дар ҳамаи ин ҳолатҳо итминон ҳосил кард.
Мураккабӣ дар соҳаҳои гуногун маъноҳои мухталиф дорад, аммо бисёре аз ин таърифҳо як андешаи муштарак доранд: душвории тавсиф, пешгӯӣ, фаҳмидан ё тағйир додани система.
Мураккабии тарҳрезии нармафзор
Доктор Ҷон Оустерҳаут, профессори Донишгоҳи Стэнфорд, дар китоби A Philosophy of Software Design — «Фалсафаи тарҳрезии нармафзор» — таърифи амалии мураккабиро пешниҳод мекунад:
Мураккабӣ ҳар чизест, ки ба сохтори системаи нармафзор марбут буда, фаҳмидан ва тағйир додани онро душвор мекунад.
Мураккабӣ ҳатман ба шумораи сатрҳои код ё ҷузъҳо баробар нест. Дар асл, он ба тавоноии зеҳнии инсон марбут аст. Ҳадафи тарҳрезии хуб идора кардан ва дар ҳудуди муайян нигоҳ доштани мураккабӣ аст.
Мураккабии барномаи мавҷуда муайян мекунад, ки тағйир додани он то чӣ андоза мураккаб хоҳад буд.
Навъҳои мураккабии тарҳрезии нармафзор
Дар адабиёти муҳандисии нармафзор яке аз ҷудокуниҳои муҳим таснифоти Брукс аст. Фредерик Брукс мураккабии масъаларо ба ду гурӯҳ тақсим кардааст:
Мураккабии ғайризотӣ (Accidental Complexity): мураккабие, ки худи мо тавассути абзорҳои заиф, меъмориҳои аз ҳад зиёд печида ё истифодаи нодурусти қолабҳои тарҳрезӣ ба вуҷуд меорем.
Мураккабии зотӣ (Essential Complexity): мураккабии хоси худи соҳаи фаъолият аст. Он аз хусусиятҳои худи масъалае бармеояд, ки бояд ҳал шавад ва коҳиш додани он имкон надорад. Масалан, агар барои дастгоҳи шуоъдармонии саратон барнома нависед, қонунҳои физика воқеан душворанд. Ин душвориро нест карда наметавонед; танҳо метавонед онро дар дохили як ҷузъи маҳдуд ҷой диҳед.
Тазоди бузурги муҳандисии нармафзор дар он аст, ки таҳиягарон аксар вақт маҳз ҳангоми кӯшиши коҳиш додани мураккабии зотӣ мураккабии ғайризотӣ эҷод мекунанд. Масалан, барои «чандир» кардани код аз сохтори хеле абстрактие мисли «Factory of Abstract Factories» — «Фабрикаи фабрикаҳои абстрактӣ» — истифода мебаранд. Аммо агар аз ин чандирӣ ҳеҷ гоҳ истифода нашавад, онҳо танҳо мураккабии умумии системаро зиёд кардаанд, бе он ки бори зотии корро кам кунанд.
Аломатҳо ва нишонаҳои мураккабии нармафзор
Густариши тағйирот (Change Amplification): нишонаи аввалини мураккабӣ ин аст, ки тағйироти зоҳиран одӣ ислоҳи кодро дар ҷойҳои зиёди гуногун талаб мекунад. Яке аз ҳадафҳои тарҳрезии хуб кам кардани ҳаҷми кодест, ки аз ҳар як қарори тарҳрезӣ таъсир мегирад, то тағйироти тарҳ ислоҳи зиёди кодро талаб накунад.
Бори зеҳнӣ (Cognitive Load): нишонаи дуюми мураккабӣ бори зеҳнӣ аст. Он нишон медиҳад, ки таҳиягар барои анҷом додани як вазифа бояд дар бораи лоиҳа чӣ қадар маълумот дошта бошад. Бори зеҳнии бештар маънои онро дорад, ки таҳиягарон бояд барои омӯхтани маълумоти зарурӣ вақти бештар сарф кунанд. Дар натиҷа, хатари пайдо шудани хатоҳо аз сабаби фаромӯш кардани як ҷузъиёти муҳим зиёд мешавад.
Номаълумҳое, ки аз онҳо бехабарем (Unknown Unknowns): нишонаи сеюми мураккабӣ ин аст, ки маълум нест барои анҷом додани кор кадом қисматҳои код бояд тағйир дода шаванд ё таҳиягар барои бомуваффақият иҷро кардани он ба кадом маълумот ниёз дорад.
Сабабҳои мураккабӣ дар нармафзор
Бо назардошти гуфтаҳои боло, мураккабӣ ба маҳдудиятҳои зеҳни мо марбут аст. Яъне ҳар қадар шумораи ҷузъҳои нармафзор зиёдтар ё робитаҳои байни онҳо бештару мураккабтар бошанд, графи мо ҳамон қадар калонтар мешавад. Ин амалан бори зеҳниро зиёд мекунад.
Масалан, агар барои илова кардани имконияти нав ба нармафзор ё ислоҳи як хато маҷбур бошем ҳолатҳо ва тағйирёбандаҳои бештарро дар зеҳн нигоҳ дорем, боз ҳам бори зеҳниро зиёд кардаем ва дар натиҷа нармафзори мураккабтар дорем.
Ҳолати дигар он аст, ки нармафзор мураккабии сикломатикии бештар дошта бошад. Ин шумораи номаълумҳоеро, ки аз онҳо бехабарем, зиёд мекунад ва тағйир додани як қисмат дар ҷойҳои гуногуни нармафзор паёмадҳои номаълум ба вуҷуд меорад.
Ҳамаи ин ба мо кумак мекунад, ки бифаҳмем чаро бояд аз мафҳумҳое мисли SOLID, модулӣ будан (Modularity), капсулабандӣ (Encapsulation), пинҳонсозии маълумот (Information Hiding) ва кам кардани вобастагии байни ҷузъҳо (Decoupling) истифода барем. Ҳамаи ин мафҳумҳо барои идора ва маҳдуд кардани мураккабӣ хизмат мекунанд.
Мураккабии нармафзор танҳо шумораи ҷузъҳои система нест. Он ба шумораи робитаҳо, ҳолатҳо ва қарорҳое марбут аст, ки таҳиягар барои фаҳмидан ва тағйир додани як рафтор бояд ҳамзамон дар модели зеҳнии худ нигоҳ дорад. Тарҳрезии хуб мураккабиро аз байн намебарад; онро дар ҳудуди муайян нигоҳ медорад, пинҳон мекунад ва доираи масъалаҳоеро кам мекунад, ки ҳар як таҳиягар бояд дар бораи онҳо андеша кунад.
Мақолаҳои маъмул
Ҳар роҳе, ки интихоб мекунӣ
Ҳаёт мисли як ҳавопаймоест, ки ту худат пилот ҳастӣ, на мусофир. Танҳо ту қодирӣ самти ҳаракатро интихоб кунӣ, баландӣ ва суръатро муайян намоӣ. Агар раҳнамоиро ба дигарон супорӣ, хавфи гум кардани роҳи ҳақиқии худ вуҷуд дорад. Дар ҳар як қарор, дар ҳар
Насиҳати Падар
Падарам ҳар вақт, ки вориди утоқам мешуд ва медид, ки чароғи хона ё дастгоҳи шамолдиҳӣ рӯшан асту ман аз утоқам берунам, мегуфт: - Барои чи чароғ ва дигар асбобҳои барқиро хомӯш намекунӣ ва барқро беҳуда сарф менамоӣ? Вақте, ки вориди ҳамом мешуд ва
Ростгӯи камоли инсонист.
Ростиро набувад ҳеҷ заволе ба миён. Сарв агар хушк шавад боз асо мегардад. Ростию ростгӯӣ ва росткорӣ фазилатҳои хуби инсонианд. Агар инсон дорои ин хислатҳои бузург бошад, дар ягон давру замон обрую эътибор ва бузургию соҳибиззатии хешро аз даст
МУҚАДАСОТИ МО
Дар Конститутсияи (Сарқонуни) Ҷумҳурии Тоҷикистон махсус қайд гирифтааст, ки «Рамзҳои давлатии Тоҷикистон Парчам, Нишон ва Суруди Миллӣ аст». Барои ҳар як тоҷикистонӣ Ватан, миллат, забони тоҷикӣ, Парчам, Нишони давлатӣ, Суруди миллӣ муқаддасанд. Мо ба

Барномасозӣ
Олами Афсонаҳо
Ахбор
Дунё