Кіріспе

Компьютерлік бағдарламаның өнімділігін төмендету процесі

Бағдарламалық жасақтаманың ісінуі – компьютерлік бағдарламаның кезекті нұсқаларының айқын түрде баяулауына, көбірек жадты, дискідегі орынды немесе процессорлық қуатты пайдалануына немесе алдыңғы нұсқаға қарағанда жоғары аппараттық талаптарға ие болуына, сонымен бірге пайдаланушыға көрінетін шамалы жақсартулар жасауына немесе мүмкіндіктердің артығынан толуынан зардап шегуіне алып келетін процесс. Бұл термин тұрақты қолданылмайды; оны соңғы пайдаланушылар (bloatware) жиі қорлау ретінде қолданады, тіпті егер бұл өзгерістер аппараттық талаптарға аз немесе ешқандай әсер етпесе де, пайдаланушы интерфейсінің қалаусыз өзгерістерін сипаттау үшін пайдаланады. Ұзақ қызмет ететін бағдарламалық жасақтамада, ісіну көптеген әртүрлі талаптары бар үлкен, алуан түрлі нарыққа қызмет көрсету нәтижесінде туындауы мүмкін. Көптеген соңғы пайдаланушылар қол жетімді функциялардың тек шектеулі жиынтығын ғана қажет деп санайды және қалғанын қажетсіз ісіну деп есептейді, тіпті басқа талаптары бар пайдаланушыларға осы функциялар қажет болса да. Нақты (өлшеуге болатын) ісіну алгоритмдік тиімділікті төмендету арқасында, мысалы, әзірлеушілердің өнімділігі сияқты басқа мәселелерге көңіл бөлгенде немесе әзірлеушілердің шектеулері азайтылған кезде ыңғайлылық үшін виртуалды машина немесе басқа скрипттерді орындаушы қозғалтқышы сияқты абстракцияның жаңа қабаттарын енгізу арқасында пайда болуы мүмкін. Виртуалды машиналар ортасында әзірлеуді жүзеге асыру кезінде әзірлеушінің өнімділігін арттыру туралы түсінік, әзірлеушілердің жобалау және әзірлеу кезінде ресурстық шектеулерді және пайдалануды ескермейтін болуынан туындайды; бұл өнімді жылдам аяқтауға мүмкіндік береді, бірақ соңғы пайдаланушының аппараттық талаптарының артуына әкеледі. "Bloatware" термині алдын ала орнатылған немесе жинақталған бағдарламаларды сипаттау үшін де қолданылады.

Бағдарламаның өрісі

Компьютерлік бағдарламалауда кодтың ісінуі – қажетсіз ұзақ, баяу немесе ресурстарды тиімсіз пайдаланатын бағдарламалық кодтың (көз коды немесе машина коды) болуы.

Бағдарламалық қамтамасыз етудің тиімсіздігі

1970-ші жылдары индустрияда жұмыс істеген бағдарламалық жасақтаманы дамытушылар өңдеу қуаты, дискідегі орын және жад көлемі бойынша ауыр шектеулерге тап болды. Әрбір байт пен сағат циклы ескеріліп, бағдарламаларды қолданыстағы ресурстарға сыйғызуға көп еңбек жұмсалды. Осы тиімділікке қол жеткізу компьютерлік бағдарламашылардың бағалы қасиеттерінің бірі болды, ал ең жақсы бағдарламалар көбінесе «элегантты» деп аталды – математиктердің жинақы, үнемді және қуатты дәлелдемелерді сипаттау үшін қолданатын термині. 21-ші ғасырға келген кезде жағдай өзгерді. Ресурстар арзанға түсті, ал жылдам кодтау және маркетингтік мүмкіндіктер басымдыққа ие болды. Бұл, ішінара, технологиялық прогресс өңдеу қуатын және сақтау тығыздығын бірнеше есе арттырғандықтан, ал салыстырмалы құн азайды (Мур заңына қараңыз). Сонымен қатар, компьютерлердің бизнес пен тұрмыстың барлық деңгейлеріне таралуы 1970-ші жылдарға қарағанда әлдеқайда ірі бағдарламалық индустрияны құрды. Бағдарламалар енді көбінесе командалармен жасалады, бағдарламалық жасақтаманы дамыту студияларындағы (бағдарламалық үйлер немесе бағдарламалық фабрикалар деп те аталады) комитеттер басшылық етеді, онда әрбір бағдарламашы бүкіл бағдарламаның тек бір бөлігімен, бір немесе бірнеше кіші бағдарламалармен жұмыс істейді. Соңында, бағдарламалық жасақтаманы дамыту құралдары мен тәсілдері әрбір мүмкіндікті қамтамасыз ету үшін бағдарламаның өзгеруіне әкеледі, нәтижесінде бағдарламаның негізгі жұмысына әсер ететін және сирек қолданылатын функцияларды қолдау үшін қажетті кодтың үлкен көлемі енгізіледі. Әсіресе, қолданыстағы ресурстардың артуы кодты оңай дамытуға мүмкіндік беретін құралдарға әкелді, бұл да тиімділікке басымдық бермейді. Бағдарламаның көлемінің артуына тағы бір себеп – интеграцияға сұраныс тудыратын тәуелсіз бәсекелесетін стандарттар мен өнімдер. Бұрынғыдан гөрі көптеген операциялық жүйелер, браузерлер, протоколдар және сақтау форматтары пайда болды, бұл өзара үйлесімділік мәселелеріне байланысты бағдарламалардың көлемін арттырды. Мысалы, бұрын тек мәтін форматында сақтай алатын бағдарлама енді HTML, XML, XLS, CSV, PDF, DOC және басқа форматтарда сақтауға міндетті. Никлаус Вирт жағдайды Вирт заңымен түйіндеді, онда бағдарламалық жасақтаманың жылдамдығы аппараттық жасақтаманың жылдамдығынан тезірек төмендейді. 2001 жылғы «Strategy Letter IV: Bloatware and the 80/20 Myth» мақаласында Джоэл Спольски пайдаланушылардың 80%-ы мүмкіндіктердің 20%-ын ғана қолданады (Парето принципінің нұсқасы), бірақ әрқайсысы әртүрлі мүмкіндіктерді қолданады деп мәлімдейді. Осылайша, «жеңіл» бағдарламалық жасақтама нұсқалары көптеген пайдаланушылар үшін пайдасыз болып шығады, өйткені оларда «көлемді» нұсқада бар бір немесе екі ерекше мүмкіндік жоқ. Спольски мақаланы Джейми Завинскинің Mozilla Application Suite (кейін SeaMonkey-ге айналған) туралы цитатымен аяқтайды: «Бұл рас болса да, ыңғайлы болса да, Mozilla үлкен емес, өйткені ол пайдасыз қоқыстарға толы. Mozilla үлкен, өйткені сіздің қажеттіліктеріңіз үлкен. Сіздің қажеттіліктеріңіз үлкен, өйткені Интернет үлкен. Көптеген кішкентай, арзан веб-браузерлер бар, олар, әрине, ешқандай пайдасы жоқ. [ ] Бірақ Mozilla-ны жазғанда кемелділіктің жарқыраған асыл тасы болу мақсаты болған жоқ». Бағдарламалық жасақтаманың көлемінің артуы Фред Брукс «Мификалық адам айы» кітабында сипатталған екінші жүйелік эффекттің белгісі болуы мүмкін.

Құю ыдыстары

"Блоатвер" термині тиімсіздік немесе жоғарыда сипатталғандай мүмкіндіктердің жиналуы салдарынан көлемді болған бағдарламалық қамтамасызда қолданылуы мүмкін. Егер пайдаланушының құрылғысында root-қа қол жеткізу мүмкіндігі болса, блоатверді оңай жоюға болады, бірақ root процесінің өз артықшылықтары мен кемшіліктері бар, мысалы, өндірушінің кепілдігін жою, сондай-ақ кейбір бағдарламалық жасақтама root-талған құрылғыларда жұмыс істемейді.

Мысалдар

Microsoft Windows-тың ең төменгі аппараттық талаптарының салыстыруы (x86 нұсқалары үшін)
Windows нұсқасы Процессор Жады Диск көлемі
Windows 95 (1995) 25 МГц 4 МБ ~50 МБ
Windows 98 (1998) 66 МГц 16 МБ ~200 МБ
Windows 2000 (1999) 133 МГц 32 МБ 650 МБ
Windows XP (2001) 233 МГц 64 МБ 1.5 ГБ
Windows Vista (2006) 800 МГц 512 МБ 15 ГБ
Windows 7 (2009) 1 ГГц 1 ГБ 16 ГБ
Windows 8 (2012) 1 ГГц 1 ГБ 16 ГБ
Windows 10 (2015) 1 ГГц 1 ГБ 16 ГБ
Windows 11 (2021) 1 ГГц 64 бит Dual Core 4 ГБ 64 ГБ

Apple-дің iTunes бағдарламасының қарапайым медиа ойнатқыштан электрондық коммерция және жарнама платформасына айналуына байланысты, бұрынғы PC World редакторы Эд Ботт компанияны Windows-қа қатысты ұқсас тәжірибелері үшін екіжүзділікпен айыптады. 2019 жылы Apple бағдарламаның жабылатынын хабарлады, ал The Guardian тілшісінің бір комментаторы бұл қадамды «көптен күткен» деп сипаттап, бағдарламаның «элегантты және функционалдық дизайнымен мақтанатын компания үшін ерекше аномалия болып, барокколық стильде тым көлемді болғанын» айтты. Microsoft Windows та тым көлемді деп сынға ұшырады – Windows Vista-ға сілтеме жасап, жаңа, айтарлықтай азайтылған Windows 7 негізгі компоненттерін талқылаған Microsoft инженері Эрик Траут: «Бұл Windows 7-нің ядросы. Бұл біз алып тастаған компоненттердің жиынтығы. Көптеген адамдар Windows-ты өте үлкен, тым көлемді операциялық жүйе деп ойлайды, және бұл дұрыс сипаттама болуы мүмкін, мойындауым керек. Ол үлкен. Оның ішінде көптеген нәрсе бар. Бірақ ядросы және операциялық жүйенің өзегін құрайтын компоненттері өте оңай». Эд Ботт та күмәнділігін білдірді, Microsoft-тың ең алғашқы шығарылымдарында сатылған дерлік барлық операциялық жүйелері «тығыздығы» үшін сынға ұшырағанын, тіпті қазір MS DOS сияқты керісінше деп есептелетіндерін атап өтті. Пол Тюротттің сөздерін келтіре отырып, Ботт тығыздықтың себебі операциялық жүйеге енгізілген көптеген корпоративтік деңгейдегі мүмкіндіктер екенін, олар орташа үй пайдаланушысы үшін маңызды емес екенін айтты. CD және DVD жазу бағдарламалары, мысалы Nero Burning ROM, тым көлемді деп сынға ұшырады. Тұтынушыға арнайы бейімделмеген артық мүмкіндіктер кейде жылдам орнату арқылы әдепкі бойынша орнатылады. Көптеген технология блогтары ұялы телефондардағы bloatware мәселесін де қамтыды. Алайда, олар басқа мәселеге, атап айтқанда, сымсыз байланыс операторларының телефондарға орнататын бағдарламалық жасақтамаға қатысты, оны көп жағдайда оңай, тіпті мүлдем жою мүмкін емес. Бұл ең көп Android құрылғыларында кездеседі, бірақ бұл құбылыс басқа операциялық жүйелердегі телефондарда да бар. 2018 жылдың қаңтар айында Facebook Messaging жетекшісі Дэвид А. Маркус қосымшаның өзінің тым көлемді екенін мойындады және қажетсіз мүмкіндіктерді жою және оны жеңілдету үшін қосымшаны толығымен қайта құруға уәде берді.

Баламалар

Кейбір қолданбалар, мысалы GIMP, және плагин модульдері арқылы қосымша мүмкіндіктерге ие бағдарламалық жасақтама, негізгі қолданбадан бөлек жүктелетін кеңейтулерді немесе қосымшаларды пайдаланады. Оларды бағдарламалық жасақтаманы жасаушы немесе үшінші тарапты дамытушылар құрастыра алады. Плагиндер, кеңейтулер және қосымшалар, әйтпесе негізгі бағдарламаға енгізілген болар еді, қосымша мүмкіндіктерді қосады. Осы плагиндерді, кеңейтулерді және/немесе қосымшаларды қолдану, кез келген құрылғыдағы қолданылатын орынды азайтады, себебі қосымша, "плагин интерфейсі" және барлық плагиндердің жиынтығы бір монолиттік қолданбаға жинақталғаннан гөрі үлкен болғанымен, әрбір пайдаланушыға барлық мүмкіндіктерді қамтитын үлкен монолиттік қолданбаны орнатуға мәжбүрлеудің орнына, қажетті қосымша мүмкіндіктерді ғана орнатуға мүмкіндік береді. Бұл "қайта жабдықталған" немесе "бастапқы жиынтықтағы" қолданбаға әкеледі, ол ықшам пакетте жеткізіледі, бірақ пайдаланушыларға қажетті функцияларды қосуға дайын. Ашық кодты бағдарламалық жасақтама, мүмкіндіктерді компиляция кезінде таңдаулы түрде қосу үшін алдын ала өңдеуші директиваларын қолдана отырып, ұқсас тәсілді пайдалануы мүмкін. Бұл плагиндік жүйеге қарағанда оңай және қауіпсіз, бірақ егер пайдаланушы нақты мүмкіндіктер жинағын қаласа, бағдарламаны бастапқы кодтан құрастыруы керек. Кейде бағдарламалық жасақтама "мүмкіндіктердің артығынан көбеюі" (Завинскийдің бағдарламалық жасақтаманы кеңейту заңы) салдарынан ауыр болып кетеді. Мұндай ауырлықты азайтудың бір жолы – Unix философиясының "бір нәрсені жасап, оны жақсы орындау" принципін қолдану, сондай-ақ бір күрделі бағдарламалық жасақтаманы көптеген қарапайым компоненттерге бөлу, оларды құбырлар, қабықша скрипттері немесе басқа да өзара байланыс түрлерін пайдаланып біріктіру.