JavaRush /Java блогы /Random-KK /Бағдарламалық қамтамасыз ету инженері деген кім? Бағдарла...

Бағдарламалық қамтамасыз ету инженері деген кім? Бағдарламалық қамтамасыз ету инженериясы VS «жай» бағдарламалау

Топта жарияланған
Сіздердің назарларыңызға Самер Бунаның бағдарламалық жасақтама жасау мен бағдарламалау арасындағы айырмашылықтар туралы немесе бағдарламалық жасақтама тұжырымдамасын әзірлеудің «жай codeтаудан» айырмашылығы туралы мақаласының бейімделуін ұсынамыз.
Бағдарламалық қамтамасыз ету инженері деген кім?  Software Engineering VS
Барлық бағдарламалық жасақтама инженерлері codeтай алады, бірақ барлық бағдарламашылар бағдарламалық қамтамасыз ету тұжырымдамасын жасай алмайды. Кейбір адамдарға «Бағдарламалық қамтамасыз ету инженері» (бағдарламалық жасақтама инженері) деген термин ұнамайды, өйткені біз көбінесе физикалық нәрсе - құрылыс туралы айтқанда «инженер» сөзін қолданамыз. Біздің мақала, әрине, терминнің өзі туралы емес. Егер ол кенеттен бас тартуды тудырса, оны шығармашылыққа қатысты нәрсемен оңай ауыстыруға болады. «Бағдарламалық жасақтаманы жасаушы», «Бағдарламалық жасақтама авторы»... немесе тіпті «Бағдарламалық жасақтаманы жасаушы»!
«Бағдарламалық қамтамасыз ету инженері» туралы айтқанда, біз негізгі міндеті code жазу ғана емес, сапалы қосымша жасау болып табылатын адамды айтамыз. Осыдан ол өзінің шақыруын, өз жұмысына ғылыми көзқарас пен статистикалық әдістерді қолдануын көреді. Ол үшін бағдарламалау тек тамаққа ақша табудың жолы емес.
Бағдарламалау мүмкіндігі адамды автоматты түрде инженер-программист жасамайды. Кез келген адам codeтауды үйрене алады және бұл көрінгеннен әлдеқайда оңай. Кез келген адам өзінің пайдалануы үшін қарапайым бағдарлама жасай алады, бірақ бұл сол бағдарламаның басқалар үшін жұмыс істейтініне кепілдік бермейді. Менің ең жақсы көретін мысалым: көбіміз душта ән айтамыз, бірақ, өкінішке орай, бұл спектакль әрқашан кәсіби сахнаға лайық емес. Әрине, жоғары сапалы музыкалық тәжірибе үшін сіз кәсіби маманға жүгінуіңіз мүмкін. Сізге көбірек мысалдар керек пе?
  • Біз бәріміз мектепте математика мен жазуды үйренеміз, бірақ бұл бізді математиктер мен жазушыларға айналдырмайды.
  • Біздің көпшілігіміз дәмді, кейде өте дәмді тағам дайындауға қабілеттіміз, бірақ елшілік кешіне 100 адамға арналған дастархан әзірлеуге бәрінің батылы жете бермейді. Бұл жағдайда аспаз жалдаймыз.
  • Сіз дәл қазір жаңа үйіңіздің құрылысын Lego-дан әсерлі шедеврлер жасайтын көршіңіздің баласына толығымен тапсыруға дайынсыз ба?
Бұл мақалада айтқым келетін негізгі ойым қарапайым бағдарламалар инженерлер жасаған бағдарламалардан айтарлықтай ерекшеленеді. Бағдарламалау процесінің ең қарапайым анықтамасы: берілген кіріс параметрлері берілген шығыс ретінде белгілі бір нәрсені алу үшін компьютер үшін реттелген әрекеттер тізбегін құрастыру. Бағдарламалық жасақтама жасау процесі - бұл көптеген пайдаланушылар үшін мәселелерді шешу үшін компьютерлік бағдарламаны жобалау, жазу, тестілеу және өңдеу. Бұл уақыт сынағына төтеп беретін сенімді және қауіпсіз шешімдерді жасау және анық емес кейбір мүмкін белгісіз қиындықтарға жұмыс істеу туралы.
Бағдарламалық қамтамасыз ету инженері деген кім?  Software Engineering VS
Бағдарламалық жасақтама инженерлері өздері шешетін мәселелер, олар ұсынатын шешімдер, сол шешімдердің шектеулері, олардың құпиялылығы мен қауіпсіздігі туралы бәрін біледі. Менің ойымша, егер адам мәселенің мәнін түсінбесе, оның шешімін бағдарламалауға да кіріспеуі керек.

Инженерлік ойлау – қолданбалы шешімдерді іздеу

Бағдарламалық жасақтама инженерлері бағдарламалық жасақтаманы жазуды өздерінің негізгі мақсаты деп санамайды. Олар қажеттіліктерді қанағаттандыру және мәселелерді шешу тұрғысынан ойлайды . Бұл маңызды, себебі кез келген мәселе бағдарламалық құрал шешімін қажет етпейді. Олардың кейбіреулері бар бағдарламалардың көмегімен шешілуі мүмкін. Кейбір мәселелердің туындауын кейде алдын ала болжауға болады, ал сауатты бағдарламаның көмегімен болашақта оларды болдырмауға болады.

«Зиялылар мәселені шешеді, данышпандар оларды болдырмайды»

- Альберт Эйнштейн

Бағдарламалық қамтамасыз ету инженері деген кім?  Software Engineering VS
Күрделі мәселелер көбінесе көптеген бағдарламалар жазуды қажет етеді. Параллель жұмыс істейтін қолданбаларды қажет ететін тапсырмалар бар, ал басқалары бірнеше бағдарламаның дәйекті орындалуын талап етеді. Пайдаланушыларды оқыту арқылы ғана бірқатар мәселелерді шешуге болады. Бағдарлама жасауды бастамас бұрын инженер-программист өзіне бірнеше сұрақтар қояды:
  • Қандай мәселелерді шешуім керек?
  • Оларды шешу үшін code жазудан басқа не істей аласыз?
  • Бұл тапсырмаларды қолданба арқылы жеңілдету үшін не істей аламын?

Бағдарлама сапасы және code сапасы

Жақсы бағдарламалар түсінікті және оқылады. Оларды ұзарту оңай, басқа бағдарламалармен жақсы ойнайды және олармен жұмыс істеу қорқынышты болмайды. Кодтың сапасы келіспейді. Ол жоғары болуы керек, бәрі осы. Оны қарастырған кезде codeердің нашар көңіл-күйі немесе тым тығыз мерзімдер (о, бұл мерзімдер!) сияқты сылтаулар қабылданбайды. Бағдарламалық жасақтаманы әзірлеудің маңызды аспектілерінің бірі - бағдарламаны болашақта қолдау және өзгерту оңай болатындай етіп жасау (сәлеметсіз бе, OOP!). Бүгінгі таңда барлық дерлік бағдарламалық құралды өзгертуге болады, көбінесе бұл процесс тіпті пайдаланушының қатысуынсыз жүреді немесе пайдаланушыдан «бағдарлама жаңартылды, OK немесе кейінге қалдыру» түймесін басыңыз. Әрине, пайдаланушылар қосымшалардан жаңа мүмкіндіктерді талап етуге құқылы (әсіресе Java тілінде жазылған ұзақ жұмыс істейтін кәсіпорын бағдарламалық жасақтамасы немесе жылдар бойы ойнауға болатын онлайн ойындар туралы айтатын болсақ).
Java бағдарламалау туралы көбірек білгіңіз келе ме? Java әзірлеушілер тобына қосылыңыз !
Кодтың бір бөлігін пайдалы деп атауға болмайды. Бағдарламалық құралдың пайдалы функционалдығы қолданбалардың әр түрлі бөліктері бір-бірімен байланысатын, деректермен алмасу және деректер мен интерфейстерді пайдаланушыларға ұсыну тапсырмасын орындау үшін бірге жұмыс істейтін жерден басталады.
Бағдарламалық қамтамасыз ету инженері деген кім?  Software Engineering VS
Бағдарламалар осы тармақтарды ескере отырып жасалуы керек! Олар қандай хабарламалар алады? Қандай оқиғалар бақыланады? Аутентификация және авторизация қалай жүзеге асады? Жақсы бағдарламаның тағы бір маңызды белгісі - бұл қолданба өткен сынақтардың саны немесе тіпті жақсы сынақ қамтуы емес, codeтың анықтығы. Қарапайым болып көрінетін сұрақтар: «Менен басқа біреу менің codeымды түсіне ала ма?», «Мен бұл codeты бүгін жазып, бірнеше аптадан кейін түсіне аламын ба?» Бағдарламалаудағы ең қиын екі нәрсе туралы танымал дәйексөзде былай делінген:

«Екі ғана қиын нәрсе бар: кэшті жарамсыздандыру және нысанды атау»

- Фил Карлтон.

Кодтың оқылу мүмкіндігі әдеттегіден әлдеқайда маңызды. Өкінішке орай, code анықтығы үшін нақты көрсеткіштерді немесе параметрлерді анықтау мүмкін емес. Жалпы қабылданған тілдік нормаларды, жақсы бағдарламалық жасақтама модельдерін және әзірлеу әдістерін есте сақтау ішінара көмектеседі. Бірақ әдетте бұл жеткіліксіз. Уақыт пен тәжірибенің арқасында нағыз кәсіпқойлар, былайша айтқанда, интуицияға ұқсас «айқындық сезімін» дамытады. Жазу метафорасы бұл жерде жақсы жұмыс істейді: көп сөздерді білу қысқа және мағынасы анық нәрсені жазуға көмектеспейді.

«Мен оны қысқарақ жазар едім, бірақ уақытым болмады».

- Марк Твен.

Қателерді тез және оңай түзету мүмкіндігі жақсы бағдарламалық құралдың негізгі ерекшелігі болып табылады. Бағдарламадағы қателер анық хабарламалар жіберуі және бақылау үшін орталықтандырылған журналға жазылуы керек. Жаңа қате туралы хабарланғанда, оны түзететін адамның оны түзету мүмкіндігі болуы керек. Ол жүйеге оңай қосылып, орындау ақпаратына кез келген уақытта қол жеткізуі керек, сонымен қатар жүйенің кез келген бөлігінің функционалдығын оңай тексере алуы керек.

Қоршаған орта және сынақтар

Бағдарламалық жасақтама инженерлері қолданбаларды жасағанда, олар әртүрлі архитектуралық компьютерлерде және әртүрлі операциялық жүйелерде жұмыс істеуін қамтамасыз ету үшін барын салады. Бағдарламалық құрал әртүрлі ажыратымдылықта және экран бағдарларында жұмыс істеуі маңызды, сонымен қатар ол жад пен өңдеу қуатын талап етілетіннен көп «жемейді».
Бағдарламалық қамтамасыз ету инженері деген кім?  Software Engineering VS
Веб-қосымшаларға келетін болсақ, олар барлық негізгі браузерлерде жұмыс істеуі керек. Жұмыс үстелі қолданбасын жасаған кезде оның Mac, Windows және Linux жүйелерінде іске қосылып, дұрыс жұмыс істейтініне көз жеткізу керек. Бағдарлама деректерге байланысты, содан кейін қолданба деректер қосылымы баяу немесе ол болмаған жағдайда да жұмыс істеуі керек. Бағдарламалық жасақтаманың бір бөлігін жазу үшін инженерлер сценарий нұсқаларының барлық түрлерін қарастырады және оларды сынауды жоспарлайды. Мұның бәрі тамаша нұсқаны таңдаудан басталады, онда бәрі қатесіз жұмыс істейді. Содан кейін олар кез келген ықтимал проблемаларды құжаттайды және оларды сынақ жоспарына жазады. Кейбір инженерлер барлық ықтимал мәселелер мен қателер үшін сценарийлерді модельдейтін сынақ жағдайы деп аталатын codeты жазудан бастайды. Содан кейін қарастырылған опциялардың кез келгенімен жұмыс істей алатын бағдарлама жазылады. Дарынды бағдарламалық жасақтама инженерінің бірегей қабілеті - codeты қалай жазу керектігін білмеу, бірақ қосымшаның нәтиже ретінде не істеу керектігін және оған қалай жету керектігін түсіну. Тұтынушының бағдарламалық жасақтамаға қойылатын талаптары толық емес және анық емес болса, инженер оларды дұрыс бағалауы және «түсінуі» керек.

Құны және тиімділік

Бағдарламалық жасақтама инженері көп жағдайда мәселені тез шеше алады. «Қымбат» тәжірибелі бағдарламашыны жалдау сіздің шығындарыңызды арттырады деп ойласаңыз, қайтадан ойланыңыз. Жалданған бағдарламашы неғұрлым тәжірибелі болса, соғұрлым ол қарапайым, ұқыпты, сенімді және қолдануға оңай шешім ұсына алады. Ұзақ мерзімді перспективада бұл бағдарламалық жасақтаманы әзірлеуге кететін шығындарды азайтады.
Бағдарламалық қамтамасыз ету инженері деген кім?  Software Engineering VS
Бағдарламаны орындауға кететін шығындарды да ескеру қажет. Кез келген бағдарлама есептеу ресурстарын пайдаланады және олар тегін емес.
Бағдарламалық қамтамасыз ету инженерінің жұмысы – есептеу ресурстарын қажетсіз пайдаланbyteын тиімді code жазу.
Мысалы, жиі қатынасатын деректерді кэштеу қалаған нәтижеге қол жеткізу үшін пайдаланылатын ықтимал стратегиялардың бірі болып табылады. Бірақ бұл бағдарламаны тезірек және тиімдірек ететін жүздеген құралдар мен шешімдердің бірі ғана. Жаңадан бастаған бағдарламашы сізге арзан шешім ұсына алады, бірақ мұндай шешімді пайдалану сізге және сіздің клиенттеріңізге ең алдымен тиімді шешімді жасаған тәжірибелі әзірлеушімен жұмыс істегеннен гөрі әлдеқайда қымбатқа түседі.

Пайдаланушы тәжірибесіне назар аударыңыз

Жақсы бағдарламашы пайдаланушы тәжірибесін (UX) ескере отырып дамиды. Адам мен машинаның өзара әрекеттесуі - шексіз зерттеулер мен шешімдері бар тақырып. Неғұрлым көп шешімдер қолданылса, бағдарлама соғұрлым жақсы болуы керек. Міне, бұл бағыттың не екенін сезіну үшін бірнеше мысалдар:
  • Электрондық пошта сияқты деректерді енгізу пішіндерін құрастырған кезде жақсы бағдарлама электрондық пошта мекенжайының регистрін елемеуі керек. Электрондық пошта мекенжайы кіші әріппен бірегей болғандықтан, CAPSLOCK пернесі басылса, ол қате жібермеуі керек. Бағдарлама жаңа электрондық пошта мекенжайын енгізу ретінде қабылдаса, пайдаланушыға қате мекенжай пішімін пайдаланып жатқаны туралы ескерту үшін оны енгізу процесінің басында тексеріңіз. Бұл шешім жетіспейтін «@» белгісі сияқты айқын тексерулерді де, сондай-ақ «gmail.ocm» сияқты таңбалардың қате ретін тексеру сияқты анық емес тексерулерді де қамтиды.

  • Пайдаланушы қандай да бір әрекетті орындау үшін қайта бағытталса, жақсы бағдарлама оның ағымдағы орнын есте сақтап, оны аяқтағаннан кейін оны қайтаруы керек. Жақсы бағдарлама пайдаланушы жіберген деректерді де есте сақтауы керек, бұл онымен одан әрі өзара әрекеттесу үшін маңызды.

    Сіз Expedia-да қонақ ретінде әуе көлігін іздеп жатырсыз делік. Кейінірек сіз тіркелгіні жасауды шешесіз. Қолданба барлық алдыңғы іздеулеріңізді жаңа есептік жазбада сақтауы керек және сіз оларға басқа құрылғылардан қол жеткізе алуыңыз керек.


  • Бағдарламалық қамтамасыз ету инженері деген кім?  Software Engineering VS
  • Жақсы бағдарлама пайдаланушы мінез-құлық сценарийлерін ескере отырып жасалған. Сізге «сондай-ақ» негізінде жаңа мүмкіндіктерді қосудың қажеті жоқ; өзіңізді пайдаланушының орнына қойыңыз. Бір күні мен ұшақ билеттеріне тапсырыс беріп жатып, жиі ұшатын нөмірімді қосуды ұмытып кеттім. Растауды алғаннан кейін мен авиакомпанияның веб-сайтына кіріп, жеңілдік алу үшін оны қосуды шештім. Мұны қалай істеуге болатынын білу үшін мен 10 minutes бойы сайтпен айналыстым. Қолданбаның түсініксіз болғаны сонша, мен өзіме қажет нәрсені табу үшін сайттың әртүрлі беттерін аралап шықтым. Кейінірек мен дұрыс бетке бірнеше рет түскенімді білдім, бірақ мен оны түсінбедім, өйткені маған қажет өріс үлкен пішіндегі басқа ұқсас өрістердің арасында жоғалып кетті.

    Сапар туралы ақпаратты өңдеу үшін форманың жиырмаға жуық жолын айналдырып, адалдық картасының нөмірі мен телефон нөмірін енгізуім керек болды, онсыз форманы тексеруге жіберу мүмкін емес. Бұл пайдаланушының онымен қаншалықты ыңғайлы болатынын ойламай жасалған бағдарламаның мысалы.

Сенімділік, қауіпсіздік және қауіпсіздік

Менің ойымша, кәсіби бағдарламалық жасақтаманы әзірлеуші ​​мен әуесқой арасындағы ең маңызды айырмашылық оны жасау кезінде сенімділік, қауіпсіздік және қосымшаның қауіпсіздігі сияқты параметрлерді ескеру болып табылады.
Нағыз кәсіпқой өз шешімінің қауіпсіздігі мен қауіпсіздігіне жауапты екенін біледі.
Бағдарламаның бөліктері қате енгізуге, дұрыс емес күйлерге және дұрыс емес әрекеттесуге төзімді болуы керек. Бұл шынымен де орындау өте қиын және біз бағдарламалық жасақтама қателерінен қайтыс болған адамдар туралы әңгімелерді естуіміздің басты себебі болып табылады. Пайдаланушылар бағдарламаға қате деректерді енгізді, енгізуде және енгізуді жалғастырады. Мұны факт ретінде қабылдау керек. Сонымен қатар, кейбіреулер қолданбаны бұзу және оған қол жетімді ресурстарға қол жеткізу үшін мұны әдейі жасайды.
Бағдарламалық қамтамасыз ету инженері деген кім?  Software Engineering VS
Міне, нақты өмірден алынған мысал: Жақында Equifax деректерінің бұзылуына жауапты деп болжанған адам өзінің қызметтік міндеттерін орындамады деп айыпталуда, ол көпшілікке қол жетімді барлық бағдарламалық өнімдерде жаман және зиянды енгізуге қарсы тұру үшін шешімдер әзірлеу болды. Ақпараттық қауіпсіздікке байланысты инциденттер тек қате және зиянды енгізуді ғана емес, сонымен қатар қате енгізілген деректерді де қамтиды. Пайдаланушы паролін ұмытып қалса, оны қанша рет енгізуге әрекет жасай алады? Осыдан кейін оны блоктайсыз ба? Басқа біреу оның есептік жазбасын бұғаттауға тырысса ше? Пайдаланушы өзінің тіркелгі деректерін шифрланбаған деректер арнасы арқылы жібере ала ма? Кіру сұрауы әдеттен тыс жерден келсе ше? Жүйеге кіру әрекеті автоматты түрде болып көрінсе, не істейсіз? Пайдаланушыларыңызды сайттар аралық сценарийлерден, сайттар аралық сұрауларды қолдан жасаудан және жалпы фишингтен қорғау үшін не істедіңіз? Серверлеріңізге DDoS шабуылы болған жағдайда сақтық көшірме стратегияңыз бар ма? Бұл сұрақтар қарастыруды қажет ететін мәселелердің кейбірін ғана көрсетеді. Қорғалған бағдарлама маңызды ақпаратты мәтіндік пішінде сақтамайды. Ол оны күрделі бір жақты шифрмен қорғайды (шифрлау оңай, бірақ кілтсіз шифрды ашу мүмкін емес). Бұл бағдарлама бұзылған жағдайда сақтық көшірме жасау шаралары. Хакерлер өздері үшін пайдасыз шифрланған деректерді табады. Ең жақсы бағдарламаларда да күтпеген мәселелер туындайды. Олардың пайда болуына дайын емес бағдарламашыны кәсіпқой деп атауға болмайды. Ол күтпеген мінез-құлықты күтпейінше, ол инженер емес. Ол «қауіпті бағдарламалардың авторы». Бағдарламалардағы қателер әрқашан анық бола бермейді. Белгілі қателіктерді болжау және алдын алу интеллектуалдық қабілетіміз шектеулі. Сондықтан бағдарламалық жасақтама инженерлері дұрыс және қауіпсіз бағдарламалық жасақтаманы жазуға мүмкіндік беретін жақсы құралдардың маңыздылығын түсінеді.

Қажетті құралдар

Бізге әртүрлі және жақсы даму құралдары қажет екені даусыз. Олардың рөлі жиі бағаланбайды, бірақ шын мәнінде олар көп уақыт пен күш-жігерді үнемдейді, кейбір тапсырмаларды шама бойынша жеңілдетеді. Қолдану үшін файлдарды FTP арқылы жүктеп салуыңыз керек пе еді деп елестетіп көріңіз, былайша айтқанда, ескі әдіс. Chrome DevTools қолданбай желі және өнімділік мәселелерін жөндеуді елестетіп көріңіз! Бұл күндері ESlit және Prettier қолданбай JavaScript codeын жазу қаншалықты тиімсіз болар еді!
Бағдарламалық қамтамасыз ету инженері деген кім?  Software Engineering VS
Код жазу кезінде кері байланыс уақытын қысқартатын кез келген құралды құптау керек. Бұрын мен үшін бейтаныс, бірақ шын мәнінде пайдалы және тиімді құралды тапқанда, мен оны осы қуанышты сәтке дейін қолданбағаныма өкінемін.
Жақсырақ және заманауи құралдар сізге жақсы бағдарламашы болуға көмектеседі. Оларды табыңыз, қолданыңыз, бағалаңыз және мүмкіндігінше жетілдіріңіз. Бір нәрсеге ілінбеңіз: кім біледі, мүмкін жаңа құралдың көмегімен сіз бір рет орнатуға және үйренуге уақыт жұмсайсыз, содан кейін мәселелерді бірнеше есе тезірек шешесіз бе?

Бағдарламалық қамтамасыз етудің эволюциясы

Бағдарламалық жасақтаманы екі айда, алты айда, тіпті бір жылда ешкім де үйрене алмайды. Сізге курста, университетте немесе оқу-жаттығу лагерінде бағдарламалық жасақтама инженері болуды үйретпейді. Мен соңғы жиырма жыл бойы оқыдым, қазір де оқуды жалғастырудамын. Мен мыңдаған пайдаланушылар пайдаланатын қосымшаларды онжылдық оқып, дамыту, жасау және оларға қызмет көрсетуден кейін ғана өзімді тәжірибелі бағдарламашы деп атай алдым. Бағдарламалық жасақтама жасау кез келген адамның қолынан келе бермейді, бірақ әркім өз мәселелерін компьютер арқылы шешуді үйренуі керек. Қарапайым бағдарламалар жазуды үйрене алсаңыз, керек. Егер сіз жалпыға қолжетімді бағдарламалық құралды пайдалануды үйрене алсаңыз, сізге керек. Ашық бастапқы бағдарламалық жасақтаманы пайдалануды үйреніп, оны өзіңіз үшін реттей алсаңыз, сізде керемет күш бар! Күн сайын әзірлеушілерге жаңа қиындықтар, жаңа мәселелер әкеледі, сондықтан бағдарламалық жасақтама инженериясы қажет. Бұл мамандықтың негізгі міндеті - қарапайым адам онымен ұзақ жылдар айналыспауы үшін бағдарламалық жасақтаманы жасау. Бағдарламалармен өзара әрекеттесу үшін ұзақ оқудың қажеті жоқ. Дегенмен, бағдарламалық жасақтама инженерлері күрделірек белгілі мәселелерді шеше алатын жақсырақ құралдарды жасау туралы үнемі ойлайды және жаңа мәселелердің мүмкіндігінше сирек пайда болуын қамтамасыз ету үшін қолдан келгеннің бәрін жасайды.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION