Кіріспе

Компьютердің материалдық емес орындалатын компоненті.

Бағдарламалық қамтамасыз ету – компьютерге белгілі бір тапсырмаларды қалай орындау керектігін көрсететін бағдарламалар мен деректер жиынтығы. Бағдарламалық қамтамасыз ету көбінесе оған байланысты бағдарламалық құжаттаманы қамтиды. Бұл жүйе құралған және жұмысты іске асыратын аппараттық құралдардан өзгеше. Бағдарламалаудың ең төменгі деңгейінде орындалатын код жеке процессор – әдетте орталық процессор (CPU) немесе графикалық процессор (GPU) қолдайтын машина тілі нұсқауларынан тұрады. Машина тілі компьютердің күйін алдыңғы күйінен өзгертетін процессор нұсқауларын білдіретін бинарлық мәндер тобынан тұрады. Мысалы, нұсқау компьютердегі белгілі бір сақтау орнындағы мәнді өзгерте алады, бұл пайдаланушыға тікелей байқалмайтын әсер етеді. Нұсқау сондай-ақ көптеген кіріс немесе шығыс операцияларын іске қосуы мүмкін, мысалы, компьютер экранында мәтінді көрсету арқылы пайдаланушыға көрінетін күйді өзгерту. Процессор нұсқауларды берілген ретімен орындайды, егер оған басқа нұсқауға "секіру" немесе операциялық жүйемен үзілу туралы нұсқау берілмесе. 2024 жылға қарай көптеген жеке компьютерлер, смартфондар және серверлерде бірнеше орындау блогы бар процессорлар немесе бірнеше процессор бірлесіп есептеулер жүргізеді, сондықтан есептеулер бұрынғыға қарағанда бірнеше операцияны бір уақытта орындауға мүмкіндік беретін процесске айналды. Бағдарламалық қамтамасыз етудің көп бөлігі Python, JavaScript, Visual Basic, Delphi, Perl, PHP, ECMAScript, Ruby, C# және Java сияқты жоғары деңгейдегі бағдарламалау тілдерінде жазылған. Олар бағдарламалаушылар үшін оңайырақ және тиімдірек, өйткені олар машина тілдеріне қарағанда табиғи тілдерге жақын. Жоғары деңгейдегі тілдер компилятор, интерпретатор немесе екеуінің комбинациясын пайдаланып машина тіліне аударылады. Бағдарламалық қамтамасыз ету төмен деңгейдегі ассемблер тілінде де жазылуы мүмкін, мысалы C, C++, Assembly және Fortran. Ассемблер тілдері компьютердің машина тілі нұсқауларымен тығыз байланысты және ассемблер арқылы машина тіліне аударылады.

Бағдарламалау құралдары

Бағдарламалау құралдары – бағдарламаларды жасау, түзету, қолдауға немесе басқаша қамтамасыз ету үшін дамытушылар қолданатын бағдарламалар немесе қосымшалар түріндегі бағдарламалық қамтамасыз ету. Бағдарламалық жасақтама бір немесе бірнеше бағдарламалау тілінде жазылады; көптеген бағдарламалау тілдері бар, және әрқайсысының кем дегенде бір іске асырылымы болады, олардың әрқайсысы өз бағдарламалау құралдары жиынтығынан тұрады. Бұл құралдар компиляторлар, түзетушілер, интерпретаторлар, байланыстырғыштар және мәтін редакторлары сияқты салыстырмалы түрде дербес бағдарламалар болуы мүмкін, олар бірлесіп жұмыс істеу арқылы міндетті орындай алады; немесе олар интеграцияланған даму ортасын (IDE) құрауы мүмкін, ол мұндай дербес құралдардың көптеген немесе барлық мүмкіндіктерін біріктіреді. IDE бұл мүмкіндікті тиісті дербес құралдарды шақыру арқылы немесе олардың мүмкіндіктерін жаңа жолмен іске асыру арқылы жүзеге асырады. IDE белгілі бір жобада файлдарды іздеу сияқты нақты міндеттерді орындауды жеңілдетеді. Көптеген бағдарламалау тілінің іске асырылымдары дербес құралдарды немесе IDE-ді пайдалану опциясын ұсынады.

Сәулет

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

Атқару

Компьютерлік бағдарламаны компьютердің жад кеңістігіне (мысалы, қатты дискіге немесе жадқа) "жүктеу" қажет. Бағдарлама жүктелгеннен кейін компьютер осы бағдарламаны іске асыруға мүмкіндік алады. Бұл қолданбалық бағдарламалық жасақтамадан жүйелік бағдарламалық жасақтама арқылы аппараттық құралға нұсқаулардың жіберілуін қамтиды, аппараттық құрал осы нұсқауларды машиналық код түрінде қабылдайды. Әрбір нұсқау компьютерге операция жасауға мүмкіндік береді – деректерді жылжыту, есептеулерді орындау немесе нұсқаулардың басқару тізбегін өзгерту. Деректердің жылжуы көбінесе жадтың бір бөлігінен екінші бөлігіне жүзеге асырылады. Кейде бұл процессордағы деректерге жоғары жылдамдықпен қол жеткізуді қамтамасыз ететін жад пен тіркегіштер арасында деректерді жылжытуды қамтиды. Деректерді жылжыту, әсіресе үлкен көлемдегі деректерді, шығынды болуы мүмкін; кейде бұған "нұсқаушылар" қолдану арқылы болдырмауға болады. Есептеулер өзгермелі дерек элементінің мәнін арттыру сияқты қарапайым операцияларды қамтиды. Күрделі есептеулер көптеген операциялар мен дерек элементтерін бірге қамтуы мүмкін.

Сапа және сенімділік

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

Патенттер

Бағдарламалық жасақтама патенттері, басқа патенттер сияқты, теориялық тұрғыдан өнертапқышқа бағдарламалық жасақтаманы немесе бағдарламалық жасақтаманың бір бөлігін қалай іске асыру туралы егжей-тегжейлі идеяға (мысалы, алгоритмге) эксклюзивті, уақытпен шектелген лицензия беруге тиіс. Бағдарламалық жасақтаманың қандай пайдалы функцияларды орындайтыны туралы идеялар мен пайдаланушы талаптары патентке жатпайды, ал нақты іске асырулар (яғни, патентті іске асыратын нақты бағдарламалық пакеттер) де патентке жатпайды – соңғылары авторлық құқықпен қамтылады, көбінесе автоматты түрде. Осылайша, бағдарламалық жасақтама патенттері талаптар мен нақты іске асыру арасындағы орталық бөлікті қамтуға тиіс. Кейбір елдерде, бағдарламалық жасақтама патентінің жарамды деп танылуы үшін, өнертабыстың физикалық әлемге әсер етуі де қажетті шарттардың бірі болуы мүмкін, бірақ барлық пайдалы бағдарламалық жасақтама физикалық әлемге әсер ететіндіктен, бұл талап пікірталас тудыруы мүмкін. Сонымен қатар, американдық авторлық құқық заңдары бағдарламалық кодты жазудың әртүрлі аспектілеріне қолданылды. Бағдарламалық жасақтама патенттері бағдарламалық жасақтама индустриясындағы даулы мәселе болып табылады, көптеген адамдар оларға қатысты әртүрлі пікірлерде. Даудың бір себебі – жоғарыда айтылған бастапқы идеялар мен патент арасындағы айырмашылық патенттік заңгерлер тарапынан тәжірибеде сақталмайды, мысалы, аспектіге бағытталған бағдарламалау (AOP) үшін берілген патент, ол AOP идеясын іске асыратын кез келген бағдарламалау құралына құқықтарды талап етеді, оның іске асыру тәсіліне қарамастан. Даудың тағы бір себебі – инновацияға тигізетін әсері, көптеген белгілі сарапшылар мен компаниялар бағдарламалық жасақтаманың өте жылдам дамитын сала екенін, сондықтан бағдарламалық жасақтама патенттері үлкен қосымша сот шығындары мен тәуекелдерін тудырып, инновацияны тежейді деп мәлімдейді. АҚШ-тан тыс жерлерде бағдарламалық жасақтама патенттері туралы пікірталастарда, ірі американдық корпорациялар мен патенттік заңгерлер бағдарламалық жасақтама патенттеріне рұқсат берудің немесе рұқсат беруді жалғастырудың басты иегерлері болуы мүмкін деген пікір айтылды.

Құрылыс және іске асыру

Бағдарламалық жасақтаманы жобалау және іске асыру бағдарламалық жасақтаманың күрделілігіне байланысты әртүрлі болады. Мысалы, Microsoft Word-ті жобалау мен жасау Microsoft Notepad-ті жобалау және әзірлеуден әлдеқайда көп уақыт алды, себебі біріншісінің мүмкіндіктері әлдеқайда кең. Бағдарламалық жасақтама әдетте Eclipse, IntelliJ және Microsoft Visual Studio сияқты интеграцияланған даму орталарында (IDE) әзірленеді, олар процесті жеңілдетіп, бағдарламалық жасақтаманы құрастыруға көмектеседі. Басқа бөлімде айтылғандай, бағдарламалық қамтамасыз ету көбінесе GTK+, JavaBeans немесе Swing сияқты қолданыстағы бағдарламалық қамтамасыз етудің және қолданбалы бағдарламалау интерфейсінің (API) негізінде жасалады. Кітапханаларды (API) мақсатына қарай жіктеуге болады. Мысалы, Spring Framework корпоративтік қолданбаларды іске асыру үшін, Windows Forms кітапханасы Microsoft Word сияқты графикалық пайдаланушы интерфейсі (GUI) қолданбаларын жобалау үшін, ал Windows Communication Foundation веб-қызметтерді жобалау үшін қолданылады. Бағдарлама жобаланған кезде ол API-ге сүйенеді. Мысалы, Microsoft Windows десктоптық қолданбасы NET Windows Forms кітапханасындағы Form1.Close және Form1.Show функцияларын шақырып, қолданбаны жабу немесе ашу мүмкіндігін іске асыруы мүмкін. Бұл API-лер болмаса, бағдарламашы осы мүмкіндіктерді толығымен өзі жазуы керек болар еді. Oracle және Microsoft сияқты компаниялар өздерінің API-лерін ұсынады, сондықтан көптеген қолданбалар олардың бағдарламалық кітапханаларын пайдалана отырып жазылады, онда көбінесе көптеген API-лер бар. Хеш-кестелер, массивтер және екілік ағаштар сияқты деректер құрылымдары және жылдам сұрыптау сияқты алгоритмдер бағдарламалық жасақтама құру үшін пайдалы болуы мүмкін. Компьютерлік бағдарламалық қамтамасыз етудің ерекше экономикалық сипаттамалары бар, олар оның жобалануын, жасалуын және таратылуын көптеген басқа экономикалық тауарлардан ерекшелендіреді. Бағдарламалық жасақтаманы жасайтын адамды бағдарламашы, бағдарламалық инжинер немесе бағдарламалық жасақтаманы әзірлеуші деп атайды, бұл терминдердің бәрі шамамен бірдей мағынаны білдіреді. Бағдарламашы үшін "кодер" және "хакер" сияқты бейресми терминдер де бар, бірақ соңғы сөзді қолдану шатастыруға әкелуі мүмкін, өйткені ол көбінесе компьютерлік жүйелерге заңсыз кіретін адамды білдіреді.