From Wikipedia, the free encyclopedia
Համակարգչային ծրագրային ապահովում կամ պարզապես ծրագրային ապահովում, համակարգչի մաս, որն ի տարբերություն ֆիզիկական սարքակազմի՝ որից կառուցված է համակարգը, բաղկացած է տվյալներից կամ համակարգչային ցուցումներից։ Ինֆորմատիկայում և ծրագրային ապահովման ճարտարագիտությունում ծրագրային ապահովումը այն ամբողջ ինֆորմացիան է, որը մշակվում է համակարգչի, ծրագրերի և տվյալների կողմից։ Ծրագրային ապահովումը ներառում է այնպիսի համակարգչային ծրագրեր, գրադարաններ և տվյալներ, ինչպիսիք են ծրագրերի օգտագործման գրավոր ցուցումները կամ ինֆորմացիայի կրիչները։ Համակարգչային սարքակազմը և ծրագրային ապահովումը գործում են փոխկապակցված և իրատեսորեն չեն կարող օգտագործվել իրարից անկախ։
Կատարվող կոդն ամենացածր մակարդակում բաղկացած է մեքենայական լեզվի ցուցումներից, որոնք բնորոշ են առանձին պրոցեսորի՝ հիմնականում կենտրոնական մշակիչ հանգույցը։ Մեքենայական լեզուն բաղկացած է երկուական համակարգի թվերից կազմված խմբերից։ Դրանցով արտահայտվում են պրոցեսորի ցուցումները, որոնք անցնում են համակարգչի նախորդ վիճակից հաջորդին։ Օրինակ, հրահանգը կարող է փոխել համակարգչի որոշակի պահեստային դիրքում գտնվող արժեքը, ինչն անմիջականորեն չի երևում օգտվողին։ Հրահանգը կարող է նաև անուղղակիորեն պատճառ հանդիսանալ, որպեսզի համակարգչի էկրանին ինչ-որ բան հայտնվի։ Սա վիճակի փոփոխություն է, որը տեսանելի է օգտվողին։ Պրոցեսորը կատարում է հրահանգները տրված հաջորդականությամբ, բացառությամբ այն դեպքերի, երբ հրահանգվում է «թռիչք կատարել» մեկ այլ հրահանգի կամ ընդհատվում է (մինչև հիմա բազմամիջուկային պրոցեսորները դոմինանտ են, դրանցից յուրաքանչյուր միջուկը կարող է աշխատեցնել հրահանգները հերթականությամբ, հետո յուրաքանչյուր կիրառական ծրագրային ապահովում թերասությամբ գործարկվում է միայն մեկ միջուկում, սակայն որոշ ծրագրային ապահովումներ ստեղծված են այնպես, որ աշխատեն մի քանի միջուկներում)։
Ծրագրային ապահովման մեծամասնությունը գրված է բարձր մակարդակի ծրագրավորման լեզուներով, որոնց օգտագործումն ավելի հեշտ և արդյունավետ է ծրագրավորողների համար, քանի որ դրանք ավելի մոտ են բնական լեզուներին, քան մեքենայական լեզուները[1]։ Բարձր մակարդակի ծրագրավորման լեզուները թարգմանվում են մեքենայական լեզվի՝ օգտագործելով կոմպիլյատոր կամ ինտերպրետատոր կամ էլ երկուսի համադրումը։ Ծրագրային ապահովումը կարող է գրված լինել նաև ցածր մակարդակի ասեմբլեր լեզվով, որը մեծապես համապատասխանում է համակարգչի մեքենայական լեզվի ցուցումներին և թարգմանվում է մեքենայական լեզվի՝ օգտագործելով ասեմբլեր։
Ծրագրային ապահովման համար ստեղծված ալգորիթմի առաջին մասը գրել է Ադա Լավլեյսը 19-րդ դարում։ Այն նախատեսված էր Անալիտիկ մեքենայի համար։ Սակայն չստեղծվեց ո՛չ Անալիտիկ մեքենան, ո՛չ էլ դրա համար նախատեսված ծրագրային ապահովումը։
Ծրագրային ապահովման մասին առաջին թեորիան առաջադրել է Ալան Թյուրինգը՝ իր 1935 թվականին գրված «Հաշվարկելի թվեր» աշխատությունում։
Սա, ի վերջո, տարավ երկու ակադեմիական ուղղությունների ստեղծմանը։ Դրանք են ինֆորմատիկան և ծրագրային ապահովման ճարտարագիտությունը, որոնք ուսումնասիրում են ծրագրային ապահովումը և դրա ստեղծումը։ Ինֆորմատիկան ավելի տեսական է (Թյուրինգի աշխատությունը դրա օրինակն է), մինչդեռ ծրագրային ապահովման ճարտարագիտությունը հիմնականում կենտրոնանում է գործնական խնդիրների վրա։
Սակայն, մինչև 1946 թվականը ծրագրային ապահովումը՝ որը հասկանում ենք այսօր (թվային համակարգիչների հիշողության մեջ պահվող ծրագրեր), դեռ գոյություն չուներ։ Առաջին էլեկտրոնային հաշվողական սարքերը փոխարինվեցին, որպեսզի «վերածրագրավորեն» դրանք։
Ըստ էության, բոլոր համակարգչային միջավայրերը և ծրագրային ապահովումը կարող են խմբավորվել մի քանի լայն կատեգորիաներում։
Կախված նպատակից՝ համակարգչային ծրագրային ապահովումը բաժանվում է հետևյալ խմբերի.
Ծրագրավորման գործիքները ևս համարվում են ծրագրային ապահովում՝ ծրագրերի կամ հավելվածների տեսքով։ Ծրագրային ապահովման մշակողները (հայտնի որպես ծրագրավորողներ, կոդավորողներ, հաքերներ կամ ծրագրային ապահովման ճարտարագետներ) օգտագործում են դրանք, որպեսզի ստեղծեն, հայտնաբերեն և վերացնեն համակարգչային ծրագրի վրիպակները, սպասարկեն համակարգիչները (բարելավեն կամ ուղղեն առաջացած խնդիրները) կամ այլ կերպ ասած ապահովեն ծրագրային ապահովման տեխնիկական աջակցություն։
Ծրագրային ապահովումը գրվում է մեկ կամ մի քանի ծրագրավորման լեզուներով։ Գոյություն ունեն բազմաթիվ ծրագրավորման լեզուներ, որոնցից յուրաքանչյուրն ունի առնվազն մեկ իրագործում և որոնցից յուրաքանչյուրը բաղկացած է սեփական ծրագրավորման գործիքների շարքից։ Այս գործիքները կարող են լինել համեմատաբար անկախ ծրագրեր, ինչպիսիք են կոմպիլյատորները, խմբագրիչները (անգլ.՝ debugger), ինտերպրետատորները (բարձր մակարդակի լեզուն մեքենայական կոդի փոխարկիչներ), կապակցիչները (անգլ.՝ Linker) և տեքստային խմբագրիչները։ Դրանք իրար հետ միավորվելով կարող են իրագործել առաջադրանքներ, կամ կարող են ձևավորել ինտեգրված մշակման միջավայր (անգլ.՝ integrated development environment), որը խմբավորում է շատ կամ բոլոր այսպիսի անկախ գործիքները։ Ինտեգրված մշակման միջավայրերը կարող են անել դա կամ համապատասխան առանձին գործիքները կանչելով կամ նրանց ֆունկցիոնալությունը նոր ձևով վերագործարկելով։ Ինտեգրված մշակման միջավայրը կարող է հեշտացնել որոշակի առաջադրանքների իրագործումը, օրինակ, որոնումը որոշակի պրոյեկտի ֆայլերում։ Շատ ծրագրավորման լեզուներ հնարավորություն են տալիս օգտագործել առանձին գործիքներ կամ ինտեգրված մշակման միջավայր։
Օգտատերերը հաճախ ծրագրավորողներից տարբեր են տեսնում որոշ բաներ։ Ժամանակակից ընդհանուր նպատակային համակարգիչներ օգտագործող մարդիկ սովորաբար տեսնում են տարբեր առաջադրանքներ կատարող ծրագրային ապահովման երեք շերտ՝ պլատֆորմ, հավելված և օգտվողի ծրագրային ապահովում (ի տարբերություն նշված համակարգիչների, գոյություն ունեն ներկառուցված համակարգեր, անալոգային հաշվողական մեքենաներ և գերհամակարգիչներ)։
Համակարգչային պլատֆորմը, ներառում է ներկառուցված ծրագրաշարեր, դրայվերներ, օպերացիոն համակարգ և, սովորաբար, գրաֆիկական ինտերֆեյս, որն ընդհանուր առմամբ թույլ է տալիս օգտվողին փոխազդել համակարգչի և նրա օժանդակ սարքերի հետ։ Պլատֆորմային ծրագրային ապահովումը հաճախ վաճառվում է համակարգչի հետ միասին։ Սովորաբար անհատական համակարգիչներում հնարավոր է կատարել փոփոխություն պլատֆորմային ծրագրերում։
Կիրառական ծրագրային ապահովումը կամ հավելվածներն այն է, ինչի մասին մտածում է մարդկանց մեծամասնությունը «ծրագրային ապահովում» ասելիս։ Տիպիկ օրինակներ են օֆիսային ծրագրային միջոցների փաթեթը և վիդեո խաղերը։ Հաճախ հավելվածները ձեռք են բերվում համակարգչային սարքակազմից առանձին։ Երբեմն հավելվածները վաճառվում են համակարգչի հետ միասին, սակայն դա չի փոխում այն հանգամանքը, որ դրանք աշխատում են որպես անկախ հավելվածներ։ Հավելվածներն օպերացիոն համակարգից անկախ ծրագրեր են, սակայն հաճախ հարմարեցվում են որոշակի պլատֆորմների համար։ Ծատ օգտվողներ կարծում են, որ կոմպիլյատորները, տվյալների բազաները և այլ «համակարգային ծրագրային ապահովումները» հավելվածներ են։
Ոչ պրոֆեսիոնալ ծրագրավորողների կողմից գրված ծրագրերը համապատասխանեցնում են համակարգը օգտվողի որոշակի կարիքներին։ Օգտվողի կողմից գրված ծրագրային ապահովումը ներառում է աղյուսակների կաղապարներ և տեքստային պրոցեսորի կաղապարներ։ Էլեկտրոնային փոստի ֆիլտրերը ևս համարվում են օգտվողի կողմից գրված ծրագրային ապահովում։ Օգտվողները ստեղծում են այս ծրագրերը՝ հաճախ անտեսելով դրանց կարևորությունը։ Կախված նրանից, թե որքանով է իրավասու օգտվողի կողմից գրված ծրագրային ապահովման ներառումը լռելյայն ծրագրային փաթեթներում, շատ օգտվողներ չեն կարող տեղյակ լինել օրիգինալ փաթեթների միջև տարբերության մասին և ինչն է ավելացվել համահեղինակների կողմից։
Համակարգչային ծրագրային ապահովումը պետք է «բեռնվի» համակարգչի պահեստ (օրինակ կոշտ սկավառակ կամ հիշողություն)։ Բեռնելուց հետո համակարգիչը կարող է իրագործել ծրագիրը։ Սա ներառում է համակարգային ծրագրային ապահովման միջոցով հրահանգների փոխանցումը կիրառական ծրագրային ապահովումից դեպի սարքակազմ, ինչն ի վերջո ստանում է հրահանգները որպես մեքենայական կոդ։ Յուրաքանչյուր հրահանգ պատճառ է հանդիսանում, որ համակարգիչը կատարի գործողություն՝ տեղափոխի տվյալներ, կատարի հաշվարկումներ կամ փոփոխի հրահանգների կատարման հերթականությունը։
Տվյալների փոփոխությունը սովորաբար կատարվում է հիշողության մի տեղից դեպի մյուսը։ Երբեմն այն ներառում է տվյալների փոխանցում հիշողության և ռեգիստորների միջև, ինչը պրոցեսորին հնարավորություն է տալիս արագ մուտք գործել տվյալներ։ Տվյալների տեղափոխումը՝ հատկապես մեծ քանակությամբ, կարող է թանկ արժենալ։ Սրանից խուսափելու համար երբեմն օգտագործվում են տվյալների ցուցիչներ։ Հաշվարկները ներառում են պարզ գործողություններ, օրինակ՝ փոփոխական տվյալների տարրի արժեքի ավելացում։ Ավելի բարդ հաշվարկները կարող են ներառել շատ գործողություններ և տվյալների տարրեր միասին։
Ծրագրային ապահովման որակը շատ կարևոր է՝ հատկապես առևտրային և համակարգային ծրագրային ապահովումների համար, ինչպիսիք են Microsoft Office-ը, Մայքրոսոֆթ Վինդոուզը և Լինուքսը։ Եթե ծրագրային ապահովումը պարունակում է վրիպակներ, այն կարող է ջնջել մարդու աշխատանքը, խափանել համակարգիչը և կատարել այլ անսպասելի գործողություններ։ Թերություններն ու սխալները կոչվում են bug։ Դրանք հաճախ հայտնաբերվում են ալֆա և բետա թեստավորման ընթացքում։ Հաճախ ծրագրերը դառնում են այսպես կոչված «ծրագրային ապահովման հնացման» զոհ։ Այն առաջանում է չնկատված սխալների պատճառով և հանգեցնում է արտադրողականության աստիճանաբար նվազմանը։
Շատ բագեր հայտնաբերվում և հեռացվում են թեստավորման ընթացքում։ Այնուամենայնիվ, ծրագրային ապահովման թեստավորումը հազվադեպ կարող է հայտնաբերել բոլոր սխալները։ Որոշ ծրագրավորողներ ասում են, որ «յուրաքանչյուր ծրագիր ունի առնվազն մեկ այլ սխալ» (Լուբարսկիի օրենք)[4]։ Ծրագրային ապահովման մշակման կասկադի մոդելը կիրառելիս սովորաբար աշխատում են առանձին թեստավորման թիմեր։ Սակայն ավելի նոր մոտեցումներ կիրառելիս, որոնք հավաքականորեն կոչվում են ճկուն ծրագրային ապահովման մշակում, ծրագրավորողները հաճախ կատարում են իրենց թեստավորման ամբողջ մասը, ապա ցույց տալիս ծրագրային ապահովումը օգտվողներին/պատվիրատուներին՝ կանոնավոր կերպով կարծիք ստանալու համար։ Թեստավորումը կատարվում է մոդուլային (միավոր) թեստավորման, հետահայաց թեստավորման (երբ ստուգվում է արդյո՞ք նախկինում թեստավորված ծրագրային ապահովումը գործում է նույն կերպ՝ փոփոխվելուց կամ այլ ծրագրային ապահովման հետ փոխկապակցվելուց հետո) և այլ մեթոդներով, որոնք կատարվում են ձեռքով, կամ շատ հաճախ ավտոմատ կերպով, քանի որ այն կոդը, որը պետք է թեստավորվի կարող է լինել բավականին երկար։ Օրինակ, ՆԱՍԱ-ն ունի չափազանց խիստ ծրագրային ապահովման փորձարկում՝ շատ օպերացիոն համակարգերի և հաղորդակցման ֆունկցիաների համար։ ՆԱՍԱ-յում օգտագործվող շատ գործողություններ միմյանց հետ փոխազդում և կապակցվում են command ծրագրերի միջոցով։ ՆԱՍԱ-յում աշխատող շատ մարդկանց սա թույլ է տալիս ստուգել և գնահատել ընդհանուր ֆունկցիոնալ համակարգերը։ Այն ծրագրերը, որոնք պարունակում են command ծրագրային ապահովում, թույլ են տալիս սարքակազմին և համակարգային գործողություններին միասին աշխատել շատ ավելի հեշտորեն։
Ծրագրային ապահովման լիցենզիան իրավունք է տալիս օգտվողին օգտագործել այն արտոնագրված միջավայրում, իսկ ծրագրային ապահովման ազատ ծրագրային ապահովման արտոնագրերի դեպքում նաև երաշխավորում է այլ իրավունքներ՝ ինչպես օրինակ պատճեններ ստեղծելու իրավունքը։
Սեփականություն կազմող ծրագրային ապահովումը բաժանվում է երկու տիպի.
Մյուս կողմից, բաց կոդով ծրագրային ապահովումը տրվում է անվճար արտոնագրով՝ ստացողին երաշխավորելով այն փոփոխելու և վերաբաշխելու իրավունքները։
Ծրագրային ապահովման արտոնագրերը, ինչպես և արտոնագրերի այլ տեսակները, տեսականորեն պետք է ստեղծողին տան բացառիկ, սահմանափակ ժամանակահատվածով լիցենզիա՝ գաղափարի մանրամասն նկարագրության համար (օրինակ՝ ալգորիթմի)՝ թե ինչպես աշխատեցնել ծրագիրը կամ դրա որևէ բաղկացուցիչ մասը։ Օգտվողի պահանջները և այն օգտակար գաղափարները, որ ծրագրային ապահովումը կարող է կատարել, չպետք է լինեն արտոնագրելի, և կոնկրետ իմպլեմենտացիաները նույնպես չպետք է լինեն արտոնագրելի, քանի որ վերջիններս սովորաբար ավտոմատ կերպով ստանում են հեղինակային իրավունք։ Այսպիսով, ծրագրային ապահովման արտոնագիրը պետք է ծածկի պահանջների և կոնկրետ իմպլեմենտացիայի միջանկյալ մասը։ Միևնույն ժամանակ, ամերիկյան հեղինակային իրավունքի մասին օրենքը կիրառվում է ծրագրային ապահովման կոդը գրելու տարբեր ասպեկտներում[5]։
Ծրագրային ապահովման արտոնագրերը հակասական են ծրագրերի արտադրությունում, քանի որ շատ մարդիկ տարբեր տեսակետներ ունեն դրանց վերաբերյալ։ Հակասության պատճառներից մեկն այն է, որ սկզբնական գաղափարների և արտոնագրի միջև վերոնշյալ խնդիրը գործնականում չի լուծվում արտոնագրային իրավաբանների կողմից։ Օրինակ, ասպեկտ կողմնորոշված ծրագրավորման (AOP) արտոնագիրը պահանջում է իրավունքներ ցանկացած ծրագրավորման գործիքի նկատմամբ, որն այս կամ այն ձևով իրականացնում է AOP—ի գաղափարը։ Հակասության մեկ այլ պատճառ է նորարարությունների վրա ազդեցությունը։ Շատ նշանավոր փորձագետներ և ընկերություններ վիճում են այն հարցի շուրջ, որ ծրագրային ապահովումն այնքան արագ զարգացող ոլորտ է, որ ծրագրային ապահովման արտոնագրերը պարզապես ստեղծում են հսկայական քանակով լրացուցիչ դատական ծախսեր և ռիսկեր ու, իրականում, կասեցնում են նորարարությունները։ Միացյալ Նահանգներից դուրս ծավալվող ծրագրային ապահովման արտոնագրերի մասին բանավեճերի դեպքում, մեծ ամերիկյան կորպորացիաները և արտոնագրային իրավաբանները հավանական է, որ լինեն հիմնական շահառուներն, ովքեր թույլ են տալիս ծրագրային ապահովման արտոնագրերը։
Ծրագրային ապահովման դիզայնն ու իրականացումը տարբերվում են՝ կախված դրա բարդությունից։ Օրինակ, Microsoft Office Word-ի դիզայնն ու ստեղծելը շատ ավելի երկար տևեց, քան Microsoft Notepad-ի ստեղծումը, քանի որ վերջինս ունի շատ ավելի պարզ ֆունկցիոնալություն։
Ծրագրային ապահովումը սովորաբար ձևավորվում և ստեղծվում (կոդավորվում/գրվում/ծրագրավորվում) է ինտեգրված մշակման միջավայրերում, ինչպիսիք են Eclipse-ը, IntelliJ-ը և Microsoft Visual Studio-ն։ Սրանք կարող են պարզեցնել գործընթացը և հարկ եղած դեպքում կոմպիլացնել ծրագրային ապահովումը։ Ծրագրային ապահովումը սովորաբար ստեղծվում է արդեն իսկ գոյություն ունեցող ծրագրային ապահովման և դրա ապահոված հավելվածի ծրագրային ինտերֆեյսի հիման վրա։ Հավելվածի ծրագրային ինտերֆեյսի (անգլ.՝ API) օրինակներ են GTK+-ը, JavaBeans-ը և Swing-ը։ Գրադարանները (APIs) կարող են խմբավորվել ըստ նպատակի։ Օրինակ, Spring Framework-ն օգտագործվում է ձեռնարկատիրական հավելվածներ իրագործելու համար, Windows Forms library-ն օգտագործվում է գրաֆիկական օգտվողական ինտերֆեյսով հավելվածներ ստեղծելու համար, իսկ Windows Communication Foundation-ը կիրառվում է վեբ ծառայություններ նախագծելու համար։ Երբ ծրագիրը նախագծվում է, այն հիմնվում է API-ի վրա։ Օրինակ, եթե օգտվողը ստեղծում է Մայքրոսոֆթ Վինդոուզ դեսկթոփ հավելված, ապա կարող է օգտագործել .NET Windows Forms գրադարանը և կանչել դրա API-ները՝ օրինակ Form1.Close()-ը և Form1.Show()-ը[6], որպեսզի փակի կամ բացի հավելվածը և գրի այն լրացուցիչ գործողությունները, որը հավելվածը պետք է ունենա։ Առանց API-ների ծրագրավորողը ստիպված կլինի գրել դրանք ինքնուրույն։ Որոշ ընկերություններ՝ ինչպես օրինակ Օրաքլը և Մայքրոսոֆթը, ապահովում են իրենց սեփական API-ները։ Շատ հավելվածներ են գրվում՝ օգտագործելով նրանց ծրագրային ապահովման գրադարանները, որոնք ներառում են բազմաթիվ API-ներ։
Տվյալների կառուցվածքները, ինչպիսիք են հեշ աղյուսակները (հեշ քարտեզ), զանգվածները, երկուական ծառերը և արագ տեսակավորման ալգորիթմի նման ալգորիթմները, կարող են օգտակար լինել ծրագրային ապահովում ստեղծելու համար։
Համակարգչային ծրագրային ապահովումն ունի հատուկ տնտեսական հատկանիշներ, որոնք առանձնացնում են դրա դիզայնը, ստեղծումը և բաշխումը տնտեսական մյուս ապրանքներից[7][8]։
Ծրագրային ապահովում ստեղծողներին կոչում են «ծրագրավորող» կամ «ծրագրային ապահովման ճարտարագետ»։ Ավելի խոսակցական տերմիններով ծրագրավորողներին կոչում են «կոդավորողներ» կամ «հաքերներ»՝ չնայած վերջին բառի կիրառումը կարող է շփոթմունք առաջացնել, քանի որ այն ավելի հաճախ կիրառվում է բնորոշելու համար այն մարդկանց, ովքեր ոչ օրինական կերպով կոտրում են համակարգչային համակարգեր։
Աշխարհի բազմաթիվ ծրագրային ապահովման ընկերություններ և ծրագրավորողներ կազմում են ծրագրային ապահովման արդյունաբերությունը։ Ծրագրային ապահովումը կարող է լինել բավականին շահութաբեր։ Մայքրոսոֆթի համահիմնադիր Բիլ Գեյթսը համարվում է 2009 թվականի աշխարհի ամենահարուստ մարդը՝ շնորհիվ Մայքրոսոֆթի մի շարք բաժնետոմսերի սեփականության, որը պատասխանատու է Մայքրոսոֆթ Վինդոուզ և Microsoft Office ծրագրային ապահովման արտադրանքների համար։
Շահույթ չհետապնդող ծրագրային ապահովման կազմակերպություններից են Ազատ ծրագրային ապահովման հիմնադրամը, GNU նախագիծը և Mozilla հիմնադրամը։ Համացանցի կոնսորցիումի և IETF-ի նման ծրագրային ապահովման ստանդարտ կազմակերպությունները մշակել են առաջարկվող ծրագրային ստանդարտներ, ինչպիսիք են XML, HTTP և HTML, այնպես, որ ծրագրային ապահովումը կարող է փոխգործակցել այս չափանիշներով։
Այլ հայտնի ծրագրային ապահովման ընկերություններից են Օրաքլը, Novell-ը, SAP-ը, Symantec-ը, Adobe-ը, Sidetrade-ը և Corel-ը։ Իսկ փոքր ընկերությունները հաճախ նորարարություններ են տրամադրում։
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.