Кіріспе
Бағдарламалық жасақтаманы жасау тарихы 1960 жылдар шамасында басталады. Бағдарламалық жасақтаманы жазу – бұл бағдарламалық жасақтама сапасын арттырудың ең тиімді жолдарын және оны қалай жасау керектігін зерттейтін мамандыққа айналды. Сапаға бағдарламалық жасақтаманың қолдануға ыңғайлылығы, тұрақтылығы, жылдамдығы, пайдаланушыға қолайлылығы, сынақтан өтуге дайындығы, оқуға жеңілдігі, көлемі, құны, қауіпсіздігі, ақаулар немесе «күшін жойған қателер» саны және басқа да көптеген сипаттамалар жатады. Сонымен қатар, сәнділік, ықшамдық, тұтынушылардың қанағаттанғандығы сияқты өлшеу қиын нәрселер де сапаға жатады. Жоғары сапалы бағдарламалық жасақтаманы қалай жасау мәселесі – бұл бағдарламалық жасақтаманы жобалау принциптерін, код жазудың «үздік тәжірибелерін» және команда мөлшерін, жұмыс процесін, бағдарламалық жасақтаманы уақтылы және мүмкіндігінше жылдам жеткізудің ең жақсы жолдарын, жұмыс ортасының «мәдениетін», жұмысқа алу тәсілдерін және тағы да басқаларын қамтитын жеке және пікірталас тудыратын мәселе. Бұлардың бәрі бағдарламалық жасақтама инженериясының кең саласына кіреді.
The history of software engineering begins around the 1960s. Writing software has evolved into a profession concerned with how best to maximize the quality of software and of how to create it. Quality can refer to how maintainable software is, to its stability, speed, usability, testability, readability, size, cost, security, and number of flaws or "bugs", as well as to less measurable qualities like elegance, conciseness, and customer satisfaction, among many other attributes. How best to create high quality software is a separate and controversial problem covering software design principles, so called "best practices" for writing code, as well as broader management issues such as optimal team size, process, how best to deliver software on time and as quickly as possible, work place "culture", hiring practices, and so forth. All this falls under the broad rubric of software engineering.
1945-1965 жылдар: шығу тегі
Бағдарламалық жасақтама инженериясы терминінің алғашқы қолданылуына ACM президенті Энтони Эттингердің 1965 жылғы хаты, Дуглас Т. Росстің 1950 жылдары MIT-те өткен дәрістері жатады. Маргарет Х. Гамильтон – Аполлон бағыттау компьютерін әзірлеу кезінде оған заңдылық беру мақсатымен бағдарламалық жасақтама инженериясы деп атау идеясын ұсынған адам. Мен бағдарламалық жасақтамаға құрмет беру үшін күрестім, осылайша оған және оны құрастырушыларға лайықты құрмет көрсетілсін. Сондықтан мен аппараттық және басқа да инженерия түрлерінен ерекшелендіру үшін «бағдарламалық инженерия» терминін қолдана бастадым, бірақ инженерияның әр түрін жалпы жүйелік инженерия процесінің бір бөлігі ретінде қарастырдым. Мен бұл фразаны алғаш қолданғанда, ол қызықты деп есептелді. Бұл ұзақ уақыт бойы әзілге айналды. Олар менің радикалды идеяларымды қызықтап күлді. Бағдарламалық жасақтама ақырында басқа салалар сияқты құрметке ие болды. 1968 жылы (Гармиш, Германия) және 1969 жылы НАТО Ғылыми комитеті бағдарламалық жасақтама инженериясы бойынша екі конференция өткізді, бұл салаға бастапқы түрткіс берді. Көптеген адамдар осы конференцияларды бағдарламалық жасақтама инженериясы кәсібінің ресми бастауы деп санайды.
The NATO Science Committee sponsored two conferences on software engineering in 1968 (Garmisch, Germany — see conference report) and 1969, which gave the field its initial boost. Many believe these conferences marked the official start of the profession of software engineering.
1965-1985 жылдар: Бағдарламалық қамтамасыз ету дағдарысы
Бағдарламалық инженерия 1960-1970 және 1980 жылдардағы «бағдарламалық дағдарыс» деп аталатын жағдайға байланысты дамыды, ол бағдарламалық жасақтаманы әзірлеудегі көптеген мәселелерді анықтады. Көптеген жобалар бюджеттен және жоспарланған мерзімнен асып кетті. Кейбір жобалар мүліктік зиянға әкелді. Аз ғана жобалар адам өміріне қатер келтірді. Бағдарламалық дағдарыс бастапқыда өнімділік тұрғысынан қарастырылды, бірақ кейін сапаға көбірек назар аударуға қалыптасты. Кейбіреулер «бағдарламалық дағдарыс» терминін жеткілікті білікті бағдарламашыларды жұмысқа алудағы қиындықтармен байланыстырды. Қосымша шығындар мен бюджеттің асып кетуі: OS/360 операциялық жүйесі классикалық мысал. 1960 жылдардағы он жылдық жоба сол кездегі ең күрделі бағдарламалық жүйелердің бірін жасады. Питер Г. Нойман бағдарламалық жасақтамадағы мәселелер мен апаттардың заманауи тізімін жүргізіп келеді. Бағдарламалық дағдарыс көзден тасаланып барады, себебі ұзақ мерзімге (20 жылдан астам) дағдарыс жағдайында болу психологиялық тұрғыдан өте қиын. Дегенмен, бағдарламалық жасақтама – әсіресе, нақты уақыт режимінде жұмыс істейтін бағдарламалық жасақтама – әлі де тәуекелге толы және кең таралған, сондықтан беймәзділікке бой ұсынбау өте маңызды. Соңғы 10-15 жылда Майкл А. Джексон бағдарламалық инженерияның мәні туралы көп жазды, оның қиындықтарының басты себебі – маманданудың жетіспеушілігі екенін анықтады және оның проблемалық шеңберлері бағдарламалық инженерияның «қалыпты тәжірибесіне» негіз болатынын ұсынды, егер бағдарламалық инженерия инженерлік ғылымға айналуы керек болса.
1985-1989 жылдар: "Күміс оқ жоқ"
Онжылдап бойы бағдарламалық қамтамасыз ету дағдарысын шешу зерттеушілер мен бағдарламалық құралдарды өндіретін компаниялар үшін басты мақсат болды. 1980 жылдары бағдарламалық жасақтаманы иелену және күтіп ұстау оны жасаудан екі есе қымбатқа түсті. 1990 жылдары меншік және техникалық қызмет көрсету шығындары 1980 жылдармен салыстырғанда 30%-ға артты. 1995 жылы статистика көрсеткендей, сарапқа алынған даму жобаларының жартысы жұмыс істей бастады, бірақ олар сәтті деп есептелмеді. Орташа бағдарламалық жоба жоспарланған мерзімнен жартысына дейін кешігеді. Барлық ірі бағдарламалық өнімдердің үштен екісі клиентке жеткізілгеннен кейін сәтсіздікке ұшырайды, олар қолданылмайды немесе клиенттің талаптарына сай келмейді.
Бағдарламалық жобалар
Көрнеуіне, 1970 жылдардан 1990 жылдарға дейінгі кез келген жаңа технология мен тәжірибе бағдарламалық қамтамасыз ету дағдарысын шешудің күміс оғы ретінде жарияланды. Құралдар, тәртіп, формалды әдістер, процесс және кәсібилікті күміс оқтар деп жариялады:
Құралдар: Ерекше атап көрсетілгендер: құрылымдық бағдарламалау, объектіге бағытталған бағдарламалау, ICL CADES CASE жүйесі сияқты CASE құралдары, Ada, құжаттама және стандарттар – бәрі күміс оқтар ретінде ұсынылды. Тәртіп: Кейбір сарапшылар бағдарламалық қамтамасыз ету дағдарысының бағдарламашылардың тәртіпсіздігінен туындағанын айтты. Формалды әдістер: Кейбіреулер егер формалды инженериялық әдістемелер бағдарламалық қамтамасыз етуді әзірлеуге қолданылса, онда бағдарламалық қамтамасыз ету өндірісі басқа инженериялық салалар сияқты болжамды салаға айналады деп сенді. Олар барлық бағдарламалардың дұрыстығын дәлелдеуді ұсынды. Процесс: Көптеген адамдар қабілеттілік деңгейін дамыту моделі сияқты анықталған процестер мен әдістемелерді қолдануды жақтады. Кәсібиліктің дамуы: Бұл этика кодексін, лицензияларды және кәсібиліктің қалыптасуына әкелді. 1986 жылы Фред Брукс «Күміс оқ жоқ» деген мақаласын жариялады, онда ешбір жеке технология немесе тәжірибе 10 жыл ішінде өнімділікті 10 есеге арттыра алмайды деп мәлімдеді. Күміс оқтар туралы пікірталас келесі он жыл бойы жалғасты. Ada, компоненттер және процестерді жақтаушылар өздерінің сүйікті технологиясы күміс оқ болатынын жылдар бойы дәлелдеуге тырысты. Скептиктер келіспеді. Соңында, көбісі күміс оқ табылмайтынын мойындады. Дегенмен, күміс оқтар туралы мәлімдемелер бүгінге дейін кездесе береді. Кейбіреулер «күміс оқ жоқ» дегенді бағдарламалық инженерияның сәтсіздігі деп түсіндіреді. Алайда, Брукс одан әрі былай дейді: «Біз келесі 40 жылда айтарлықтай прогресс жасаймыз; 40 жыл ішіндегі бір рет өсім магиялы емес».
Сәттілікке жетекші бір ғана кілтті табу ешқашан сәтті болған жоқ. Белгілі барлық технологиялар мен тәжірибелер өнімділік пен сапаны жақсартуда тек қана біртіндеп үлкен қадамдар жасады. Бірақ, басқа кез келген мамандық үшін де күміс оқ жоқ. Басқалары «күміс оқ жоқ» дегенді бағдарламалық инженерияның жетіліп, жобалардың қажырлы еңбек арқасында табысқа жететінін мойындау деп түсіндіреді. Алайда, бүгінде жеңіл әдістемелер (қараңыз «Жобаны басқару»), электрондық калькуляторлар, бейімделген браузерлер, деректер базасы есептерін жасаушылар, жадты/айырмашылықтарды/кері қайтаруды қолдайтын интеграцияланған дизайнды сынау және кодты құрастыру орталықтары, сондай-ақ ақпараттық веб-сайттар сияқты нишалық бағдарламалық қамтамасыз етуді толығымен бейімделген веб-сайтты әзірлеуге қарағанда әлдеқайда төмен құнмен жасап шығаратын мамандандырылған компаниялар сияқты күміс оқтардың бірнешеуі бар деп айтуға болады. Дегенмен, бағдарламалық инженерия саласы көптеген мәселелерді шешу үшін тым күрделі және әртүрлі болып көрінеді, ал әрбір мәселе барлық бағдарламалық қамтамасыз ету мәселелерінің шағын бөлігін ғана құрайды.
1990-1999 жылдар: Интернеттің танымал болуы
Интернеттің пайда болуы халықаралық ақпараттық дисплей/электрондық пошта жүйелеріне деген сұраныстың өте жылдам өсуіне әкелді. Бағдарламашылар иллюстрацияларды, карталарды, фотосуреттерді және басқа да кескіндерді, сондай-ақ қарапайым анимацияны бұрын-соңды көрілмеген жылдамдықпен өңдеуге міндетті болды, кескіндерді көрсетуді/сақтауды оңтайландырудың аз ғана белгілі әдістерімен (мысалы, миниатюралық кескіндерді пайдалану) қамтамасыз ету қажеттігі туды. HyperText Markup Language (HTML) негізінде жұмыс істейтін браузерлерді пайдаланудың өсуі ақпаратты көрсету және іздеуді ұйымдастыру тәсілін өзгертті. Желілік қосылымдардың кең таралуы MS Windows компьютерлеріндегі халықаралық компьютерлік вирустардың өсуіне және олардың алдын алуға мүмкіндік берді, ал спам электрондық поштаның кең таралғандығы электрондық пошта жүйелерінде маңызды дизайн мәселесіне айналды, байланыс арналарын толтырып, жартылай автоматтандырылған алдын ала тексеруді қажет етті. Кілт сөздерді іздеу жүйелері вебке негізделген іздеу жүйелеріне айналды, көптеген бағдарламалық жүйелер халықаралық іздеу үшін қайта жобаланды, іздеу жүйесін оңтайландыруға (SEO) байланысты. Адамның табиғи тіліндегі аударма жүйелері ақпарат ағынын бірнеше шет тілінде аударуға тырысу үшін қажет болды, көптеген бағдарламалық жүйелер адам аудармашыларының жобалау концепцияларына негізделген көп тілді пайдалану үшін жасалды. Типикалық компьютер пайдаланушылар базасы жүздеген немесе мыңдаған пайдаланушылардан көбінесе миллиондаған халықаралық пайдаланушыларға дейін өсті.
2000-2015 жылдар: Жеңіл салмақты әдістемелер
Көптеген шағын ұйымдарда бағдарламалық жасақтамаға деген сұраныстың өсуі арзан бағдарламалық шешімдер қажеттілігіне алып келді, бұл талаптардан бастап орнатуға дейін жұмыс істейтін бағдарламалық жасақтаманы жылдам әрі оңай дамытуға мүмкіндік беретін қарапайым, жылдам әдістемелердің дамуына ықпал етті. Жедел прототиптеуді қолдану Extreme Programming (XP) сияқты жеңіл әдістемелерге ұласты, олар бағдарламалық жасақтаманың көптеген салаларын, соның ішінде өсіп келе жатқан көптеген шағын жүйелер үшін талаптарды жинау және сенімділікті тексеруді оңайлатуға тырысты. Көп көлемді құжаттама жинағы бар, кең құжатталған әдістемелер әлі де өте ірі бағдарламалық жүйелерде қолданылып келді; алайда, кіші жүйелер бағдарламалық есептеулер мен алгоритмдерді, ақпаратты сақтау/құрастыру және көрсетуді дамыту мен қолдау үшін қарапайым, жылдам баламалы тәсілге ие болды.
Бағдарламалық жасақтамадағы қазіргі үрдістер
Бағдарламалық инженерия - жас ғылым, және әлі де дамып жатыр. Бағдарламалық инженерия дамып жатқан бағыттары:
Қатысуы
Аспекттер бағдарламалық жасақтама инженерлеріне сапалық сипаттамалармен жұмыс істеуге көмектеседі, бастапқы кодтың көптеген бөліктеріне үлгілік кодты қосу немесе жою құралдарын ұсынады. Аспекттер нақты жағдайларда барлық нысандар мен функциялар қалай жұмыс істеуі керектігін анықтайды. Мысалы, аспекттер белгілі бір типтегі барлық нысандарға қателерді іздеу, журналдау немесе құлыптау мүмкіндіктерін қоса алады. Зерттеушілер қазіргі уақытта аспекттерді жалпы мақсаттағы кодты жобалау үшін қалай қолдануға болатынын зерттеп жатыр. Бұл тұрғыда генеративтік бағдарламалау және шаблон (үлгі) сияқты ұғымдар да қарастырылады.
Тәжірибелік
Эксперименталды бағдарламалық инженерия – бағдарламалық жасақтама бойынша эксперименттер жоспарлау, осы эксперименттерден мәліметтер жинау және сол мәліметтер негізінде заңдар мен теориялар құрумен айналысатын бағдарламалық жасақтаманың бір саласы.
Бағдарламалық өнімдер желілері
Бағдарламалық өнімдер желілері, әйгілі өнімдер отбасылық инженериясы ретінде де танылады, – бұл жеке-жеке өнімдердің тізбесін құрудың орнына бағдарламалық жүйелер отбасын жасаудың жүйелі тәсілі. Бұл әдіс бағдарламалық қамтамасыз етуді әзірлеу процесін өнеркәсіптік деңгейге жеткізу мақсатында кең, жүйелі және ресми түрде кодты қайта пайдалануға баса назар аударады. ICSE 2000 конференциясында өткен Бағдарламалық жасақтаманың болашағы (FOSE) конференциясы 2000 жылғы бағдарламалық инженерияның қазіргі деңгейін көрсетті және келесі он жылда шешілуі тиіс көптеген мәселелерді тізімдеді. ICSE 2000 және ICSE 2007 конференцияларындағы FOSE бағыттары бағдарламалық инженериядағы қазіргі деңгейді анықтауға көмектеседі.
Қазіргі заманғы бағдарламалық жасақтама
Кәсіп өз шекарасын және мазмұнын анықтауға тырысуда. Бағдарламалық жасақтама инженериясы білімінің қоры SWEBOK 2006 жылы ISO стандарты ретінде қарастырылды (ISO/IEC TR 19759). 2006 жылы Money Magazine журналы және Salary.com компаниясы бағдарламалық жасақтама инженериясын өсу мүмкіндіктері, жалақысы, стресс деңгейі, жұмыс уақыты мен ортасының икемділігі, шығармашылығы және салаға кіру мен карьералық өсудің оңайлығы тұрғысынан Америкадағы ең жақсы жұмыс деп бағалады.
Жасанды интеллект
Көптеген платформалар жасанды интеллектінің әртүрлі салаларын дамытуға мүмкіндік берді, мысалы Cyc сияқты сарапшы жүйелерден бастап, терең оқытуға және Roomba сияқты ашық интерфейсі бар роботтық платформаларға дейін. Жақында терең жасанды нейрондық желілер мен таратылған есептеулердің жетістіктері Deeplearning4j, TensorFlow, Theano және Torch сияқты бағдарламалық кітапханалардың кеңінен таралуына әкелді. 2011 жылғы McKinsey Global Institute жүргізген зерттеуде 1,5 миллион жоғары білікті деректер және жасанды интеллект мамандары мен менеджерлерінің жетіспейтіні анықталды. Осы сұранысты қанағаттандыру үшін бірқатар жеке тренинг орталықтары бағдарламалар жасады, оның ішінде The Data Incubator сияқты тегін бағдарламалар немесе General Assembly сияқты ақылы бағдарламалар бар.
Тілдер
Ертедегі символдық жасанды интеллект Лисп және Пролог тілдеріне әсер етті, олар жасанды интеллекттің алғашқы бағдарламалауында үстемдік құрды. Қазіргі заманғы жасанды интеллектті дамыту көбінесе Python немесе C++ сияқты кең таралған тілдерді, не Wolfram Language сияқты арнайы тілдерді пайдаланады.
Бағдарламалық жасақтама тарихындағы көрнекті тұлғалар
Чарльз Бахман (1924–2017 жж.) ең әйгілісі деректер базасы саласындағы еңбектерімен. Ласло Беляди (1928–2021 жж.) 1980-ші жылдары IEEE Transactions on Software Engineering журналының бас редакторы болды. Фред Брукс (1931 ж. т.) OS/360 жүйесін әзірлеуді басқарғанымен танымал. Питер Чен (1947 ж. т.) – нысан-қатынас модельдеуін жасағандығымен белгілі. Эдсгер В. Дикстра (1930–2002 жж.) құрылымдық бағдарламалаудың бір түрін әзірледі. Дэвид Парнас (1941 ж. т.) модульдік бағдарламалауда ақпаратты жасыру тұжырымдамасын жасады. Майкл А. Джексон (1936 ж. т.) бағдарламалық жасақтаманы жобалаудың JSP әдісіне, жүйелік дамудың JSD әдісіне (Джон Камеронмен бірлесіп) және бағдарламалық жасақтаманы талдау мен құрылымдау үшін «Проблемалық кадрлар» тәсіліне жауапты бағдарламалық жасақтама әдістемешісі. Ричард Столлман GNU жүйелік құралдарын жасады және ашық бағдарламалық жасақтаманы қолдады.