Бағдарламалаудың экстремалды тәжірибелері - Extreme programming practices

Экстремалды бағдарламалау (XP) болып табылады жылдам бағдарламалық қамтамасыздандыру іске асыру үшін қолданылатын әдістеме бағдарламалық жасақтама жобалар. Бұл мақалада осы әдістемеде қолданылатын тәжірибелер егжей-тегжейлі көрсетілген. Экстремалды бағдарламалаудың төрт салаға топтастырылған 12 тәжірибесі бар озық тәжірибелер туралы бағдарламалық жасақтама.[1]

Шағын масштабтағы кері байланыс

Жұптық бағдарламалау

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

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

Жоспарлау ойыны

Экстремалды бағдарламалау шеңберіндегі негізгі жоспарлау процесі Жоспарлау ойыны деп аталады. Ойын - бұл қайталану кезінде бір рет, әдетте аптасына бір рет болатын кездесу. Жоспарлау процесі екі бөлікке бөлінеді:

  • Шығарылымды жоспарлау: Бұл қандай талаптардың жақын аралық шығарылымдарға кіретінін және олардың қашан жеткізілуі керектігін анықтауға бағытталған. Бұған тапсырыс берушілер мен әзірлеушілер де қатысады. Шығарылымды жоспарлау үш кезеңнен тұрады:
    • Барлау кезеңі: осы кезеңде тапсырыс беруші жүйеге жоғары талаптардың қысқаша тізімін ұсынады. Бұлар жазылып қалады пайдаланушы тарихы карталар.
    • Міндеттеме кезеңі: міндеттеме кезеңінде бизнес және әзірлеушілер өздерін енгізілетін функционалдылыққа және келесі шығарылым күніне дайындайды.
    • Рульдік басқару кезеңі: басқару кезеңінде жоспарды реттеуге болады, жаңа талаптарды қосуға және / немесе қолданыстағы талаптарды өзгертуге немесе жоюға болады.
  • Қайталауды жоспарлау: Бұл әзірлеушілердің қызметі мен міндеттерін жоспарлайды. Бұл процеске тапсырыс беруші қатыспайды. Итерацияны жоспарлау үш кезеңнен тұрады:
    • Барлау кезеңі: осы кезеңде талап әр түрлі міндеттерге аударылатын болады. Тапсырмалар есеп карточкаларына жазылады.
    • Міндеттеме кезеңі: бағдарламашыларға тапсырмалар беріледі және оны орындау уақыты есептеледі.
    • Басқару кезеңі: Тапсырмалар орындалады және түпкілікті нәтиже пайдаланушының бастапқы тарихымен сәйкес келеді.

Жоспарлау ойынының мақсаты өнімді жеткізуге бағыттау. Жүзеге асырылатын материалдардың қашан қажет болатынын және өндірілетінін алдын-ала болжаудың орнына, оны орындау қиын, ол тікелей тәсілді қолдану арқылы «жобаны бағыттауға» бағытталған.[2] Жоспарлау ойыны тәсілін бағдарламалық емес жобалар мен топтар контексте қабылдады іскерлік ептілігі.[3]

Шығарылымды жоспарлау

Барлау кезеңі

Бұл талаптарды жинаудың және осы талаптардың әрқайсысының жұмыс тиімділігін бағалаудың қайталанатын процесі.

  • Оқиға жаз: Бизнес проблемамен келді; кездесу кезінде даму осы мәселені анықтауға және талаптарды алуға тырысады. Бизнес проблемасына негізделген оқиға (пайдаланушы тарихы ) жазу керек. Мұны олар жүйенің бір бөлігі не істегілері келетінін көрсететін бизнеспен жасайды. Дамудың бұл оқиғаға әсер етпеуі маңызды. Оқиға пайдаланушының тарих картасында жазылған.
  • Сюжетті бағалаңыз: Даму сюжеттік картада көрсетілген жұмысты іске асыруға қанша уақыт кететінін есептейді. Даму сонымен қатар мәселені талдауға немесе шешуге арналған шиптік шешімдер жасай алады. Бұл шешімдер бағалау үшін пайдаланылады және барлық адамдар проблеманы нақты түрде анықтағаннан кейін жойылады. Тағы да, бұл бизнес талаптарына әсер етпеуі мүмкін.
  • Сюжетті бөлу: Итерацияны жоспарлауды бастамас бұрын кез-келген дизайндағы күрделі қиындықтарды шешу қажет. Егер даму оқиғаны бағалай алмаса, оны бөліп, қайтадан жазу керек.

Егер бизнес басқа талаптар қоя алмаса, онда міндеттеме кезеңіне көшеді.

Міндеттеме кезеңі

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

  • Мәні бойынша сұрыптау: Бизнес қолданушы туралы әңгімелерді сұрыптайды Іскерлік мәні.
  • Тәуекел бойынша сұрыптау: даму оқиғаларды тәуекел бойынша сұрыптайды.
  • Жылдамдықты орнату: Даму олардың жобаны қандай жылдамдықпен орындай алатынын анықтайды.
  • Көлемді таңдаңыз: келесі шығарылымда аяқталатын пайдаланушы туралы әңгімелер таңдалады. Пайдаланушының әңгімелері негізінде шығарылым күні анықталады.
Мәні бойынша сұрыптау

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

  • Сыни: онсыз жүйе жұмыс істей алмайтын немесе мағынасы жоқ оқиғалар.
  • Маңызды Іскерлік мәні: Маңызды бизнес мәні бар пайдаланушының сыни емес әңгімелері.
  • Болғаны үшін жағымды: маңызды іскерлік мәні жоқ пайдаланушы туралы әңгімелер.
Тәуекел бойынша сұрыптау

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

  • Тәуекел индексін анықтаңыз: әрбір пайдаланушыға келесі факторлардың әрқайсысы бойынша 0-ден 2-ге дейінгі индекс беріңіз:
    • Толықтылық (біз оқиғаның толық мәліметтерін білеміз бе?)
      • Аяқталды (0)
      • Аяқталмаған (1)
      • Белгісіз (2)
    • Құбылмалылық (ол өзгеруі мүмкін бе?)
      • төмен (0)
      • орташа (1)
      • жоғары (2)
    • Күрделілік (оны салу қаншалықты қиын?)
      • қарапайым (0)
      • стандарт (1)
      • кешен (2)

Пайдаланушы әңгімесінің барлық индекстері қосылады, оған пайдаланушы тарихына төмен (0-1), орташа (2-4) немесе жоғары (5-6) тәуекел индексі беріледі.

Басқару кезеңі

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

Қайталауды жоспарлау

Жоспарлау үшін командалық жылдамдықтың сценарийлерін ескеру Итерацияның ұзақтығы 1-ден 3 аптаға дейін болуы мүмкін.

Барлау кезеңі

Итерацияны жоспарлаудың зерттеу кезеңі тапсырмаларды құру және олардың орындалу уақытын бағалау болып табылады.

  • Талапты тапсырмаларға аударыңыз: Тапсырма карталарына салыңыз.
  • Тапсырманы біріктіру / бөлу: Егер бағдарламашы тапсырманы өте кішкентай немесе өте үлкен болғандықтан бағалай алмаса, бағдарламашыға тапсырманы біріктіру немесе бөлу қажет болады.
  • Тапсырманы бағалау: Тапсырманы орындауға кететін уақытты бағалаңыз.
Міндеттеме кезеңі

Итерацияны жоспарлау кезеңінде бағдарламашыларға әр түрлі қолданушы оқиғаларына сілтеме жасайтын тапсырмалар беріледі.

  • Бағдарламалаушы тапсырманы қабылдайды: Әр бағдарламашы өзі жауап беретін тапсырманы таңдайды.
  • Бағдарламалаушы тапсырманы бағалайды: Бағдарламалаушы қазір тапсырмаға жауап беретін болғандықтан, ол тапсырманы түпкілікті бағалауы керек.
  • Жүктеме коэффициентін орнатыңыз: жүктеме коэффициенті бір итерация кезінде бір бағдарламашыға арналған практикалық әзірлеу уақытының ең жақсы мөлшерін білдіреді. Мысалы, 40 сағаттық аптаның ішінде 5 сағат жиналыстарға бөлінсе, бұл 35 сағаттан аспайтын болады.
  • Тепе-теңдік: команда ішіндегі барлық бағдарламашыларға тапсырмалар берілген кезде, тапсырмалардың болжамды уақыты мен жүктеме коэффициенті арасында салыстыру жасалады. Содан кейін бағдарламашылар арасында міндеттер теңдестіріледі. Егер бағдарламашы артық жүктеме алса, басқа бағдарламашылар оның кейбір тапсырмаларын қабылдауы керек және керісінше.
Басқару кезеңі

Тапсырмаларды орындау қайталанудың басқару кезеңінде жүзеге асырылады.

  • Тапсырма картасын алыңыз: бағдарламашы өзі тапсырған тапсырмалардың біріне арналған тапсырма картасын алады.
  • Серіктесті табыңыз: бағдарламашы бұл тапсырманы басқа бағдарламашымен бірге орындайды. Бұл тәжірибеде одан әрі талқыланады Жұптық бағдарламалау.
  • Тапсырманы жобалаңыз: Қажет болса, бағдарламашылар тапсырманың функционалдығын жобалайды.
  • Тапсырманы қолдану арқылы жүзеге асырыңыз Тестке негізделген даму (TDD) (төменде қараңыз)
  • Іске қосу Функционалды тест: Функционалдық тесттер (пайдаланушының байланысты тарихы мен тапсырма картасындағы талаптарға негізделген) орындалады.

Тестке негізделген даму

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

Тестке негізделген даму келесі қадамдар бойынша жылдам велосипедпен жүреді, әр қадам әрең дегенде минут алады, жақсырақ әлдеқайда аз. Әр пайдаланушының әңгімесі әдетте бір-екі күндік жұмысты қажет ететіндіктен, әңгімеге өте көп цикл қажет болады.

  • Жазыңыз бірлік сынағы: Бағдарламашылар минималды тест жазады, ол сәтсіздікке әкелуі мүмкін, себебі функционалдылық өндірістік кодта толық енгізілмеген.
  • Жаңа тесттің сәтсіз аяқталғанын көріңіз: бағдарламашылар тесттің шынымен сәтсіз болғанын тексереді. Бұл уақытты ысыраптау болып көрінгенімен, бұл қадам өте маңызды, себебі ол сіздің өндірістік кодтың күйіне деген сенімнің дұрыс екендігін тексереді. Егер тест сәтсіз аяқталмаса, бағдарламашылар тест кодында қате бар-жоғын немесе өндіріс коды жаңа тест сипаттаған функцияны қолдайтынын анықтауы керек.
  • Кодты жазу: бағдарламашылар жеткілікті өндірістік кодты жазады, сонда жаңа тест өтеді.
  • Іске қосу сынағы: бірлік сынақтары жаңа өндірістік кодтың жаңа сынақтан өткендігін және басқа сынақтардың сәтсіз аяқталмағандығын тексеру үшін орындалады.
  • Рефактор: Кез келгенін алып тастаңыз код иісі шығады өндірістік және сынақ кодтарынан.

Жоғарыдағы процестің неғұрлым қарқынды нұсқасын Боб ағайдың TDD-нің үш ережесінен қараңыз.[4]

Бүкіл команда

XP ішінде «тапсырыс беруші» төлемді төлейтін емес, жүйені шынымен қолданатын адам болып табылады. XP клиент әрдайым қолында болуы керек және сұрақтар бойынша қол жетімді болуы керек дейді. Мысалы, қаржылық басқару жүйесін дамытатын топтың құрамына қаржы әкімшісі кіруі керек.

Үздіксіз процесс

Үздіксіз интеграция

Әзірлеушілер тобы әрдайым бағдарламалық жасақтаманың соңғы нұсқасында жұмыс істеуі керек. Топтың әр түрлі мүшелерінде әртүрлі өзгертулер мен жақсартулармен бірге жергілікті сақталған нұсқалары болуы мүмкін болғандықтан, олар бірнеше сағат сайын немесе маңызды үзіліс болған кезде кодты репозиторийге өздерінің қазіргі нұсқаларын жүктеп отыруға тырысуы керек. Үздіксіз интеграция кейінірек интеграция проблемаларынан туындаған жоба циклінің кешігуін болдырмайды.

Дизайнды жетілдіру

XP доктринасы бағдарламалауды бүгінгі күннің қажеттілігін ғана қолдайтындықтан және оны мүмкіндігінше қарапайым түрде жүзеге асыратындықтан, кейде бұл жүйеде қалып қоюы мүмкін. Мұның белгілерінің бірі - қосарланған (немесе бірнеше) техникалық қызмет көрсету қажеттілігі: функционалдық өзгерістер бірдей (немесе ұқсас) кодтың бірнеше көшірмесін өзгертуді талап ете бастайды. Тағы бір белгі - кодтың бір бөлігіндегі өзгерістер көптеген басқа бөліктерге әсер етеді. XP доктринасында бұл орын алған кезде жүйе сізге айтады дейді рефактор архитектураны өзгерте отырып, оны қарапайым және жалпы етіп жасау арқылы сіздің кодыңыз.

Шағын релиздер

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

Ортақ түсіністік

Кодтау стандарты

Кодтау стандарты бұл жобаның барлық тобы ұстануға келіскен ережелер жиынтығы. Стандартта таңдалған бағдарламалау тілі шеңберінде бастапқы кодтың тұрақты стилі мен форматы, сонымен қатар ақаулардың ықтималдығын азайту үшін аулақ болу керек түрлі бағдарламалау құрылымдары мен үлгілері көрсетілген.[5] Кодтау стандарты тілді жеткізуші көрсеткен стандартты келісімдер болуы мүмкін (мысалы, Sun ұсынған Java бағдарламалау тіліне арналған код конвенциялары) немесе әзірлеушілер тобы анықтаған.

Экстремалды бағдарламалауды қолдайтындар бұл кодты қолдайды өзін-өзі құжаттау мүмкіндігінше алыс. Бұл қажеттілікті азайтады код түсініктемелері, ол кодтың өзімен синхрондай алады.[6]

Ұжымдық кодқа меншік

Ұжымдық кодқа иелік ету («командалық кодқа иелік ету» және «ортақ код» деп те аталады) бәріне барлық код үшін жауап беретіндігін білдіреді; сондықтан барлығына кодтың кез-келген бөлігін өзгертуге рұқсат етіледі. Ұжымдық кодқа иелік ету - бұл ұйымдастырушылық саясат қана емес, сонымен қатар сезім. «Әзірлеушілер жүйенің мәнмәтінін түсінгенде, қарастырылып жатқан кодқа өз үлесін қосқанда, кодтың сапасын жоғары деп қабылдаған кезде, өнім пайдаланушының қажеттілігін қанағаттандыратынына сенгенде және топтың жоғары біртұтастығын сезінгенде команда кодының иелігін көбірек сезінеді».[7] Жұптық бағдарламалау, әсіресе жұптың айналуы қабаттасып жатуы осы тәжірибеге ықпал етеді: әр түрлі жұптарда жұмыс жасау арқылы бағдарламашылар жүйелік контексті жақсырақ түсініп, кодтық базаның көптеген аймақтарына үлес қосады.

Ұжымдық коды дамуды тездетуі мүмкін, себебі қате тапқан әзірлеуші ​​оны тез арада түзете алады, бұл жалпы қателерді азайтады. Сонымен қатар, бағдарламашылар кодты өзгерту кезінде өздері жақсы түсінбейтін қателерді енгізуі мүмкін. Жеткілікті түрде анықталған бірлік сынақтары бұл мәселені азайтуы керек: егер күтпеген тәуелділіктер қателіктер тудырса, онда блок сынақтары іске қосылған кезде олар сәтсіздіктерді көрсетеді.

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

Қарапайым дизайн

Бағдарламалаушылар бағдарламалық жасақтаманы жобалауға «қарапайым ең жақсы» тәсіл қолдануы керек. Кодтың жаңа бөлігі жазылған сайын, автор «бірдей функционалдылықты енгізудің қарапайым әдісі бар ма?» Деп сұрауы керек. Егер жауап оң болса, қарапайым курсты таңдау керек. Қайта өңдеуді күрделі кодты қарапайым ету үшін де қолдану керек.

Жүйелік метафора

Жүйелік метафора - бұл жүйенің қалай жұмыс істейтіндігі туралы барлық адамдар - клиенттер, бағдарламашылар және менеджерлер айта алатын оқиға. Бұл топ мүшелері үшін тек белгілі бір сынып / әдістің функционалдығын тек оның атауынан іздеуді жеңілдететін сыныптар мен әдістерге арналған атау тұжырымдамасы. Мысалы, кітапхана жүйесі жасай алады қарыз_жазбалары (сынып) үшін қарыз алушылар (сынып), егер элементтің мерзімі өтіп кетсе, ол а-да make_overdue әрекетін орындай алады каталог (класс). Әр сынып немесе операция үшін функционалдылық бүкіл командаға айқын.

Бағдарламашының әл-ауқаты

Тұрақты қарқын

Тұжырымдамада бағдарламашылар немесе бағдарламалық жасақтама жасаушылар аптасына 40 сағаттан артық жұмыс істемеуі керек, ал егер бір аптада қосымша жұмыс уақыты болса, келесі аптада артық жұмыс уақыты болмауы керек. Даму циклдары үздіксіз интеграцияның қысқа циклдары болғандықтан, толық даму (босату) циклдары жиі кездесетіндіктен, ХР-дағы жобалар басқа жобалар қажет ететін (қосымша уақытты қажет ететін) әдеттегі қысылу уақытына сәйкес келмейді.

Сондай-ақ, бұл ұғымға адамдар жақсы демалса, ең жақсы және креативті өнер көрсетуі жатады.

Тұрақты қарқынға қол жеткізудің негізгі құралы - бұл кодты жиі біріктіру және әрқашан орындалатын және жоғары сапалы кодты тексеруден тұрады. Үнемі жұмыс істейтін рефакторинг тәсілі топ мүшелерін сергек және сергек санаға ие етеді. Командалық драйв ішіндегі қарқынды бірлескен жұмыс әдісі демалыс күндері қайта зарядталуы керек.

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

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Бек, К. Экстремалды бағдарламалау түсіндіріледі: өзгерісті қабылдаңыз 2-ші. ред. Аддисон-Уэсли, 2000 бет 54
  2. ^ Мельник, Григори; Маурер, Франк (2004). Жылдам әдістермен таныстыру: үш жылдық тәжірибе. 30-шы Euromicro конференциясының материалдары. IEEE. 334–341 бб. CiteSeerX  10.1.1.296.4732. дои:10.1109 / EURMIC.2004.1333388.
  3. ^ Лейборн, Э. (2013). Шапшаң ұйымды басқару: бизнесті басқарудағы ұтымды тәсіл. Лондон: АТ басқармасы: 146–150.
  4. ^ Мартин, Роберт. «TDD-нің үш ережесі».
  5. ^ Колава, Адам; Хуизинга, Дорота (2007). Автоматтық ақаулардың алдын-алу: бағдарламалық жасақтаманы басқарудың үздік тәжірибелері. Wiley-IEEE Computer Society баспасы. б. 75. ISBN  978-0-470-04212-0.
  6. ^ http://guzdial.cc.gatech.edu/squeakbook/new-lecture-slides/xp.ppt
  7. ^ Седано, Тодд; Ральф, Пол; Перейра, Сесиль. «Топтық кодты иелену тәжірибесі және қабылдау». ACM.
  8. ^ Рибейро, Данило және Силва, Фабио және Валенса, Диана және Фрейтас, Элида және Франция, Сезар. (2016). Ортақ кодты әзірлеушілердің перспективасынан пайдаланудың артықшылықтары мен кемшіліктері: сапалы зерттеу.

Сыртқы сілтемелер