Кіріспе

Бағдарламалау күрделілігі (немесе бағдарламалық жасақтаманың күрделілігі) – ішкі өзара әрекеттесулерге әсер ететін бағдарламалық жасақтаманың қасиеттерін қамтитын термин. Көптеген сарапшылар «күрделі» және «қиын» терминдерін ажыратады. «Қиын» дегеніміз – түсінуге қиын, бірақ соңында білуге болады. Ал «күрделі» – нысандар арасындағы өзара әрекеттесуді сипаттайды. Нысандар саны артқан сайын, олардың арасындағы өзара әрекеттесулер саны экспоненциалды түрде өседі, осылайша олардың барлығын білу және түсіну мүмкін болмайды. Сол сияқты, бағдарламалық жасақтаманың күрделілігі жоғарылағанда, өзара әрекеттесулерге бейсымды түрде кедергі келтіру қаупі артады, демек бағдарламалық жасақтаманы өзгерту кезінде қателер енгізу мүмкіндігі де артады. Ең нашар жағдайларда, бағдарламалық жасақтаманы өзгерту тіпті мүмкін болмайды. Бағдарламалық жасақтаманың күрделілігін бағдарламалық жасақтаманы қолдану мүмкіндігімен байланыстыру идеясын профессор Мэнни Леман өз бағдарламалық жасақтама эволюциясының заңдарын жасап, кеңінен зерттеді. Ол және оның әріптесі Лес Белэди бағдарламалық жасақтаманың күйін өлшеуге қолданылатын көптеген бағдарламалық жасақтама өлшемдерін зерттеді, соңында ең тиімді шешім – детерминистік күрделілік модельдерін пайдалану деген қорытындыға келді.

Түрлері

Қолданыстағы бағдарламаның күрделілігі, бағдарламаны өзгертудің күрделілігін анықтайды. Мәселенің күрделілігі екі санатқа бөлінеді:
Кездейсоқ күрделілік – бұл бағдарламашының бағдарламалық жасақтама құралдарынан туындаған қиындықтарға байланысты. Жақсырақ құралдар жиынтығын немесе жоғары деңгейдегі бағдарламалау тілін таңдау оны төмендетуге көмектеседі. Кездейсоқ күрделілік көбінесе мәселенің шешімін қалыптастыру үшін салалық білімді қолданбаудан туындайды. Салалық басқару дизайны кездейсоқ күрделілікті азайтуға көмектеседі. Ал негізгі күрделілік – шешілуге тиіс мәселенің қасиеттерімен байланысты және оны азайту мүмкін емес.