TDD - asoslari

TDD - asoslari

Yangi boshlanuvchilar uchun test asosida ishlab chiqish
08.09.2021

Dasturlash haqida gap ketganda, men doimo sifat haqida o'ylayman. Va sifat haqida gapirganda, biz test haqida gapirishimiz kerak. Test dasturlari juda muhim. Bu men uchun shu qadar tabiiyki, shaffofki, deyarli aniq. Taqdimotlarimdan birida bu hamma uchun ham ravshan emasligini tushundim. Men tomoshabinlardan test haqida so'radim va men test haqida ko'proq gapirishim kerakligini allaqachon bilganman. Men kod yozganimda, testlarni ham yozaman, lekin men buni teskari tartibda qilaman. Birinchidan, men test yozaman, keyin kod. Bu men uchun bitta jarayonda ikkita element - dasturiy ta'minotni ishlab chiqish. Buni oddiy hayotda ham ko'rish mumkin. Taom tayyorlayotganda, siz mehmonlarga xizmat qilishdan oldin uni har doim tatib ko'rasiz. Taomni ko'rsatishdan oldin mazali ekaniga amin bo'lishni xohlaysiz. Ilovalar bilan ham shunday bo'lishi kerak. Dastlab biz dasturni sinovdan o'tkazamiz, keyin foydalanuvchilarga ko'rsatamiz.

Qo'lda o'tkaziladigan testlar zerikarli

Siz dasturchisiz. Siz kod yozasiz, lekin sizning kodingiz to'g'ri ishlayotganiga qanday amin bo'lishingiz mumkin? Siz buni sinab ko'rishingiz kerak. Siz buni qo'lda qilishingiz mumkin. Ha, mumkin, lekin har safar kodingizda biror narsani o'zgartirganda, siz kodingizni yana bir bor sinash uchun xuddi shu amallarni bajarishingiz kerak bo'ladi. Ko'pincha biz qo'lda testni xuddi shunday qila olmaymiz. Barcha qadamlarni eslab qolish qiyin. Bu ham zerikarli. Qachongacha charchashni sezmasdan, bir xil funktsiyani qayta -qayta bosish mumkin? Ishoning, unchalik uzoq emas.

Avtomatlashtirilgan testlarsiz loyiha ustida ishlash

Men dasturchi bo'lgan o'tgan loyihalarimdan birida bizda Juma test sessiyasi deb nomlangan narsa bor edi. Bu vaqt, jamoadagi barcha dasturchilar butun dasturni qo'lda sinovdan o'tkazgan. Bizda ko'plab test holatlaridan iborat elektron jadval bor edi. Shunday qilib, siz ushbu ro'yxatni ko'rib chiqdingiz va funksionallik ishlayotganligini qo'lda tekshirdingiz. Birinchi marta hayajonli bo'ldi. Men dasturni yaxshiroq bilish imkoniyatiga ega bo'ldim. Ikkinchi marta hammasi yaxshi edi. Men jarayonni, ish jarayonini tushuna olardim. Uchinchi marta, men qandaydir tarzda bu sinovlardan o'tdim. Keyinchalik, men har safar bu testlarni o'tkazganimda, bu juda katta og'riq edi. Ilova avtomatik sinovlar uchun tayyorlanmaganligi sababli, har bir qo'lda o'tkaziladigan testni avtomatik sinovlarga o'tkazish juda ko'p vaqt talab qiladigan va juda og'riqli edi.Siz taxmin qilishingiz mumkinki, bu qo'lda testlarsiz, biz ba'zi o'zgarishlardan so'ng dastur hali ham to'g'ri ishlayaptimi yoki yo'qligini bilmas edik. Bunday holatda sizning kodingiz va ilovangiz tezkor emas. Siz tezda o'zgarish qila olmaysiz. O'zgartirganingizda, u boshqa narsani buzishi mumkinligidan qo'rqasiz. Va bu kodda ulanish tufayli juda keng tarqalgan edi. Ishlab chiqarishga biror narsani surish uchun zarur bo'lgan vaqt nafaqat o'zini o'zgartirish bilan, balki qo'lda sinov bilan ham bog'liq edi. Har bir jamoa a'zosi dasturni sinab ko'rish uchun taxminan 2 soat vaqt sarfladi. Agar jamoada 6 kishi bo'lsa, bu bir kishiga 1,5 ish kuni bilan bir xil!kodni ulash tufayli. Ishlab chiqarishga biror narsa surish uchun zarur bo'lgan vaqt nafaqat o'zini o'zgartirish bilan, balki qo'lda sinov bilan ham bog'liq edi. Har bir jamoa a'zosi dasturni sinab ko'rish uchun taxminan 2 soat vaqt sarfladi. Agar sizning jamoangizda 6 kishi bo'lsa, bu bir kishiga 1,5 ish kuniga teng!kodni ulash tufayli. Ishlab chiqarishga biror narsani surish uchun zarur bo'lgan vaqt nafaqat o'zini o'zgartirish bilan, balki qo'lda sinov bilan ham bog'liq edi. Har bir jamoa a'zosi dasturni sinab ko'rish uchun taxminan 2 soat vaqt sarfladi. Agar sizning jamoangizda 6 kishi bo'lsa, bu bir kishiga 1,5 ish kuniga teng!

TDD - sizning loyihangizda testlarni o'tkazish usuli

Loyihada biz bir jamoada bo'lganimiz holati rang -barang emasdi. Keling, kelgusida shunga o'xshash vaziyatlarga yo'l qo'ymaslik uchun nima qilishimiz mumkinligi haqida gapiraylik. Keling, TDD haqida gapiraylik. Kimdir TDD - bu testlarni o'tkazish usuli emas, balki dasturiy ta'minotni ishlab chiqish usuli.Bu to'g'ri, lekin test - bu jarayonning bir qismi. Shunday qilib, boshidan boshlaylik.

TDD nima?

TDD - Sinovga asoslangan ishlab chiqish - bu testlarga asoslangan dasturiy ta'minotni ishlab chiqish.Bu shuni anglatadiki, har safar kodingizga ko'proq mantiq qo'shishni xohlasangiz, avval siz test yozishingiz kerak bo'ladi. Keyin ushbu testga asoslanib, sizning yechimingiz ilovangizga to'g'ri qiymat qo'shadimi yoki yo'qligini tekshirasiz. Va bu test tufayli siz turli xil yondashuvlarni sinab ko'rishingiz, oddiy echimlarni topishingiz yoki xavfsiz qayta ishlashingiz mumkin. Sizning sinovlaringiz sizning qo'riqchilaringizdir. Bo'ldi shu. Bu TDD jarayonini katta nuqtai nazardan tushunish uchun bilishingiz kerak bo'lgan narsa. Endi siz kerakli funktsiyani olmaguningizcha jarayonni takrorlashingiz kerak.

TDD bosqichlari

Endi eng qiyin qismi. TDDni har kuni qanday amalga oshirish kerak? Birinchidan, TDD jarayonini kichikroq bosqichlarga ajratamiz. Biz TDD ning 3 bosqichini ko'rishimiz mumkin.

QIZIL

Biz testni yozamiz, u kichik o'sishni tekshiradi (kichik mantiq modifikatsiyasi). Biz bu testni o'tkazamiz va u muvaffaqiyatsiz bo'lishi kerak. Agar bu vaqtda test o'tayotgan bo'lsa, bu befoyda. Yangi test koddagi yangi xatti -harakatlarni qamrab olishi kerak, u o'tayotganda hech qanday yangi xatti -harakatlar talab qilinmaydi. Shuning uchun bu bosqichda muvaffaqiyatsiz test juda muhim.

Yashil

Biz sinovdan o'tadigan kod yozamiz. Bu bizning ongimizga keladigan birinchi, tezkor echim bo'lishi kerak. Hozirgi vaqtda bu eng yaxshi echimmi, bizni qiziqtirmaydi. Bizning yechimimiz sinovdan o'tishi kerak. Hammasi shu.

REFAKTOR

Endi yechimni qayta ko'rib chiqish vaqti keldi. Siz biror narsani yaxshilay olasizmi? Siz biror narsani soddalashtira olasizmi? Buni qilish vaqti keldi. Ammo esda tutingki, barcha o'zgarishlar siz o'zgartirganingizdan keyin o'tishi kerak. Bu bosqichda siz faqat bor narsangizni yaxshilaysiz. Siz yangi funktsiyalarni qo'shmaysiz.

Bizda asosiy ma'lumotlar bor, endi misolga e'tibor qaratsak. Biz TDD yordamida bitta usulni yozishga e'tibor qaratamiz. Bu poker qo'li uchun usul bo'ladi. Biz tekshirishga harakat qilamiz, agar poker o'yinchining qo'lida bitta rang (xuddi shu kostyum) bo'lsa. Endi biz aravalarni namoyish qilishga e'tibor qaratmaymiz. Aytaylik, rang (kostyum) raqamlar bilan, poker qo'li esa massiv bilan ifodalanadi.

1 -qadam - RED - Birinchi testni yarating

Biz testdan boshlaymiz:

Agar bizda poker qo'lida bitta rang bo'lsa, bu test tekshiriladi. Keling, uni ishga tushirishga harakat qilaylik:

Sinovlarimiz muvaffaqiyatsiz tugadi. Biz TDDning birinchi qadamini tugatdik. Endi biz nima uchun test muvaffaqiyatsiz tugayotganini tekshirishimiz va uni tuzatishga harakat qilishimiz mumkin.

2 -qadam - Yashil - kodni sinovdan o'tkazing

Biz xabarning aniqlanmagan usulini ko'rayapmizmi? . Shunday qilib, biz test nimani talab qilayotganini aniq ko'rsatamiz. Biz usul yaratamiz.

Biz yana sinovdan o'tamiz.

Hali ham ishlamayapti. Endi biz xabar olamiz: noto'g'ri argumentlar soni (berilgan 1, kutilgan 0). Biz o'z uslubimizga argument qo'shishimiz kerak.

Sinovni qayta ishga tushiring.

Sinov hali ham muvaffaqiyatsiz, lekin biz yechimga yaqinroqmiz. Bu safar biz usul ishlayotganini ko'ramiz, lekin biz nolga teng emas deb umid qilamiz. Buni osongina tuzatish mumkin. Biz haqiqatdan qaytishimiz kerakmi? usul.

Biz testni yana bir bor o'tkazamiz.

Bizning test sinovimiz. Bu yashil nuqta bizning 2 -qadamimizni tugatdi. Ha, bilaman, bu biz amalga oshirmoqchi bo'lgan funksiya emas. Biz u erga boramiz, sabr qiling. Ayni paytda siz so'rashingiz mumkin: nega biz kichik qadamlar tashlashimiz kerak? Nega biz bu oddiy usulni yoza olmaymiz? Biz bajara olamiz. Bosqichning o'lchami sizga bog'liq. Agar siz nima qilishni aniq bilishingizga ishonchingiz komil bo'lsa, siz testdan o'tish uchun dasturni katta qadam sifatida yozishingiz mumkin. Biroq, ko'p hollarda, biz nima qilishni bilamiz deb o'ylaymiz, lekin ba'zi noaniqliklar mavjud. Agar kod yozilgandan keyin test o'tkazilmasa, bu kichikroq qadamlarni qo'yish uchun yaxshi belgidir. Bu sizga ish kodini olish va uning to'g'ri ishlayotganiga ishonch hosil qilish imkonini beradi.

3 -qadam - REFAKTOR

Ko'rib turganingizdek, bu juda oddiy kod va mantiq. Ehtimol, men sizga takrorlash borligini aytganimda, siz menga ishonmaysiz. Agar siz ko'p hollarda takrorlash haqida o'ylasangiz, kod haqida o'ylaysiz. Bu erda takrorlash kod va test o'rtasida. Ikkala holatda ham biz haqiqiy qiymatga egamiz. Bu katta takrorlash emas, lekin u mavjud. O'sha paytda biz bu takroriylikni olib tashlashimiz mumkin edi. Buning uchun biz Kent Bek kitobining TDD kitobining 1 -bobidagi yondashuvdan foydalanishimiz mumkin - Misol tariqasida. Bu bizning kodimiz uchun ko'proq mavhumlikni beradi, lekin faqat bitta sinov bilan. Bunday holda, bu oxirgi amalga oshirish bo'ladi. Agar siz o'zingizni yaxshi his qilsangiz, faqat bitta test va yakuniy dastur, uni sinab ko'rishingiz mumkin. Agar siz menga ko'proq o'xshasangiz, keling, yana bitta test tayyorlaylik.

Uchburchak

Nega bu test men uchun muhim? Xo'sh, o'sha paytda men kodni o'zgartirish uchun o'zimni qulay his qilmayapman, faqat bitta test. Bu men uchun juda katta qadam. Ushbu kodga g'amxo'rlik qilish uchun men uchburchakusulidan foydalanaman .

Uchburchak nima?

Matematik dunyoda uchburchak - bu ma'lum nuqtalarga ega uchburchaklar yordamida nuqtaning o'rnini topish usuli. Bizning holatda, ma'lum bo'lgan holatlar - bu test holatlari va biz qidiradigan joy - bu haqiqiy mantiqiy dastur. Shunday qilib, test ishlarini kesib o'tishda biz oxirgi usulni topamiz.

1 -qadam - RED - Ikkinchi testni yarating

Shunday qilib, uchburchakni ishlatish uchun, men flushning xatti -harakatlarini tekshiradigan yana bir test yozamanmi? boshqa holat uchun usul. Hozir biz poker qo'lida bitta rang bo'lsa, biz xatti -harakatni tekshiramiz. Agar bizda bir nechta rang bo'lsa, nima bo'lishini tekshirish vaqti keldi. Buning uchun biz TDD doirasiga qaytamiz, birinchi qadam.

Bu safar biz uslubimiz bir nechta rang uchun noto'g'ri qaytishini tekshiramiz.

Biz test o'tkazamiz va biz bitta sinov muvaffaqiyatsiz tugayotganini ko'ramiz, shuning uchun biz TDDning ikkinchi bosqichiga o'tishimiz mumkin.

2 -qadam - Yashil - haqiqiy mantiqni amalga oshirish

Ko'ryapmizki, ikkinchi testni kutish boshqacha. Biz haqiqatga qaytamiz, lekin bir nechta rang uchun bu noto'g'ri bo'lishi kerak. Endi biz haqiqiy echim haqida o'ylashimiz mumkin. Biz qatorda nechta noyob rang borligini tekshirishimiz mumkin. Agar bitta yagona rang bo'lsa, biz haqiqatni qaytaramiz, boshqa holatda biz noto'g'ri qaytaramiz. Bu aynan mana, pastdagi kod nima qiladi.

Biz yana bir bor test o'tkazamiz va ular o'tayotganini ko'ramiz.

3 -qadam - REFAKTOR

Biz bu kodni qayta ishlashga urinib ko'rishimiz mumkin, lekin bizning misolimizda kod shu qadar sodda, menimcha, hozircha bo'lgani kabi, bu usuldan voz kechish kifoya. Bizda kontekst yo'q, shuning uchun refaktoring uchun keyingi qadamni tanlash yaxshidir. Agar xohlasangiz, har doim kichik soddalashtirish qilishingiz mumkin:

Kutilmagan foydalanish

Men sizga yana bir narsani ko'rsatmoqchiman. Kod oddiy bo'lgani uchun va biz bu kodni Ruby dasturlash tilida yozganimiz uchun bu usuldan ko'p jihatdan foydalanishimiz mumkin. Biz uni avvalgidek ishlata olamiz, shunchaki ranglarning oddiy sonli ifodasi uchun.

Biz ham bu suvdan foydalanishimiz mumkinmi? Haqiqiy ranglar e'lon qilingan usul , masalan, simli tasvir.

Ranglarning ob'ektli tasviri uchun ham biz oz harakat qilsak bo'ladi. Bu oddiy kodning go'zalligi. Uni ko'p marta ahamiyatsiz ishlatish imkoniyati.

Xulosa

Biz TDD jarayonidan o'tdik. Biz uning qanday ko'rinishini ko'rdik. Endi TDD jarayoni bizga nima berishini umumlashtirish vaqti keldi.

Oqim- bu ijodiy jarayon davomida eng muhim hissiyotlardan biridir. Menimcha, dasturlash - bu ijodiy jarayon. O'tish uchun biz bir vaqtning o'zida bitta narsaga e'tibor qaratishimiz kerak. TDD bizga bu borada yordam beradi. Ortiqcha o'ylashning hojati yo'q. Siz faqat testlar olib boradigan joyga borasiz. Asta -sekin, keyin nima qilishni bilasiz. Shuningdek, qadam hajmini sizning ehtiyojlaringizga moslashtirishingiz mumkin. Ba'zan qadamlar kattaroq, ba'zan esa kichikroq bo'ladi.

Ishonch- sifat kafolati. Biz barcha chekka holatlarni qamrab olganimizga ishonch hosil qilishni xohlaymiz. Biz kod nima qilish kerakligini aniq bajarayotganiga amin bo'lishni xohlaymiz.

Qo'rqinchli refaktoring- Agar bizda qo'riqchi bo'ladigan testlar etarli bo'lsa, biz stresssiz refaktoringni osonlik bilan amalga oshirishimiz mumkin. Biz bilamizki, biz mantiqni buzmaymiz.

Do'stona muhitnisinab ko'ring- siz muammoning yangi yondashuvini tezkor teskari aloqa yordamida sinab ko'rishingiz mumkin. Agar biror narsa muvaffaqiyatsiz bo'lsa, buni darhol bilib olasiz.

Doimiy taraqqiyot- Agar siz sekin harakatqilsangiz ham, bu baribir taraqqiyot. Siz butun muammo haqida o'ylashingiz shart emas. Siz uning faqat kichik bir qismiga e'tibor qaratasiz. Bosqichma -bosqich siz yechimga yaqinroqsiz. Agar siz taraqqiyotni ko'rsangiz, siz ham ko'proq motivatsiyanihis qilasiz . Rivojlanish jarayonida siz ham xatolarni kamroq qilasiz, chunki siz o'z testlaringiz bilan xavfsizsiz. Bu sizning rivojlanish jarayoningizni ham tezlashtiradi. Xato haqida to'xtab, uni tuzatishingiz shart emas.

Aloqa- Bizning testlarimiz mantiqimizning qandaydir hujjati bo'lishi mumkin. Tirik hujjatlar eskirgan emas.

Oxirida mening oxirgi fikrim. Agar siz buni o'qib: “Xo'sh, mening loyiham boshqacha. U erda TDDdan foydalanish mumkin emas ”. Fikringizni ochishga va bu salbiy fikrlash davrini buzishga harakat qiling. Agar siz hozirda loyihangizda TDD -dan foydalana olmaysiz deb o'ylasangiz, kichikdan boshlang. Mantiqning oddiy misolini oling: Tic Tac Toe, Hayot o'yini yoki Oltin Roza Kata kabi katalar. Siz bu misollardan TDD bilan qanday ishlashni bilib olishingiz mumkin. Kichik qadamlar qiling. TDDga o'rganib qolganingizda, haqiqiy ilovangizga qayting va TDD -ni bajaradigan kichik qadamlardan boshlang. Bu sizning fikrlash tarzingizni va ish sharoitingizni tubdan o'zgartirishi mumkin. Bu pensiya uchun tejash kabi uzoq muddatli rejadir.

Onlayn kazino
O'yin -kulgi avtomatlari
Onlaynkazino

Bizning yangiliklarimizga obuna bo'lish orqali birinchi eksklyuziv taklifni oling va eng yaxshi onlayn kazinolarda har kungi ajoyib chegirmalarimizdan foydalaning!