Himoyalash dasturiy ta'minoti: bu Paranoya yoki aqlli kodlashmi?

Nima uchun mudofaa dasturlash - bu kuchli kodlashning eng yaxshi usuli

Himoyalangan dasturlash - bu yagona haqiqiy dasturlash.

Rasmlar uchun kreditlar: Pixabay.com

Himoyalash dasturlash - bu dasturchi muammolarni oldindan bilib, ularni hal qilish uchun kod yozganda.

Bu kelajakda avtohalokatga uchraganga o'xshaydi ... va siz uni sug'urta qilganingiz uchun xotirjam bo'lasiz.

Bu aytilganidek, mudofaa dasturining barcha jihatlari siz kutmagan xatolardan saqlanishdir. Himoyali dasturchi haqiqiy muammolarga olib kelishi mumkin bo'lishidan oldin uni oldini olish uchun muammoni kutmoqda. G'oya hech qachon o'chmaydigan kodni yozish emas. Bu utopik tush. Kodni biron bir kutilmagan muammo yuzaga kelganda chiroyli tarzda amalga oshirish g'oyasi. Chiroyli muvaffaqiyatsizliklar quyidagilardan birini anglatishi mumkin.

· Erta muvaffaqiyatsiz: kodingiz barcha muhim operatsiyalarni oldindan tugatilishini ta'minlashi kerak, ayniqsa agar ular qimmatga tushsa yoki ma'lumotlarga qaytarilmasa.

· Xavfsiz xato: ishlamay qolsa, kodingiz qulfni qaytarib olishini va yangisini olmaganligini, fayllarni yozmasligini va hokazolarni ta'minlashi kerak.

· To'liq xato: biron bir narsa buzilganda, xato haqida aniq ma'lumot va tavsifni qaytarish kerak, bu esa qo'llab-quvvatlovchi jamoaga ushbu xatoni bartaraf etishga imkon beradi.

Ok. Siz bu erda bahslashishingiz mumkin.

Hozirda muammolar yo'q. Mening kodim juda yaxshi ishlaydi. Nega men vaqt va kuchni kelajakda kutilgan muammoga sarflashim kerak? Axir, bizga "Sizga kerak bo'lmaydi" (YAGNI) dan foydalanishni bir necha bor o'rgatishgan. Va siz kodni xohlagan vaqtda qo'shib qo'yadigan sevimli mashg'ulot emas, balki professional dasturchisiz.

Bu erda asosiy pragmatizm.

Endryu Xunt o'zining "Pragmatik dasturchi" kitobida mudofaa dasturini "Pragmatik paranoya" deb ta'riflaydi.

Kodingizni boshqalarning xatolaridan va o'zingizning xatolaringizdan saqlang. Agar shubhangiz bo'lsa, tasdiqlang. Ma'lumotlarning mustahkamligi va yaxlitligini tekshiring. Siz har qanday xatoni sinab ko'rolmaysiz, shuning uchun "bo'lmasligi" mumkin bo'lgan narsalar uchun tasdiqlash va istisnolardan foydalaning.

Sog'lom paranoid dasturlash - bu to'g'ri dasturlash turi. Ammo paranoyani juda uzoqqa olish mumkin. Kalit to'g'ri muvozanatni buzadi.

Va mudofaa dasturlashning ba'zi usullari.

O'zingizdan so'rang: Agar bu bajarilmasa?

Kodning har bir satrida biron bir narsa bajariladi, shuning uchun himoya qilishning 1-bandi o'zingizga savol berasiz, agar kod bajarilmasa, unda nima.

Masalan, quyidagi mos kelmaydigan kodni ko'rib chiqing.

SIZ-INDEXNING CASE. // mos kelmaydigan; “BOSHQA” yozuvi yo'q
BIRIDA.
'Birini' yozing.
Qachon 2.
"Ikki" ni yozing.
BOSHLASH.

Bu erda biz quyidagi savollarni berishimiz mumkin.

Agar sy-indeks 1 ga teng bo'lmasa nima bo'ladi.

Agar sy-indeks 2 ga teng bo'lmasa nima bo'ladi.

Ushbu muammoni hal qilish uchun, biz BOSHQA bayonotini qo'shamiz.

SIZ-INDEXNING CASE.
BIRIDA.
'Birini' yozing.
Qachon 2.
"Ikki" ni yozing.
BOShQALAR QANDAY. // mos
"Kutilmagan natija" YO'Q
BOSHLASH.

Oddiy. Bu shunday emasmi?

Aynan shu "nima bo'lsa" yaxshi dasturchilarni kod yozadigan va u hech qachon barbod bo'ladigan umidlardan ajratib turadigan narsa. "Hech qachon" har doim kutilganidan tezroq keladi va shu vaqtgacha kod dasturning uzoq vaqt unutilgan qismiga ko'miladi va xato xabarlari muammoning qaerdaligini va uni qanday hal qilishni ko'rsatmaydi.

Ushbu mudofaa dasturlash uslubining go'zal tomoni shundaki, sizning kodingizga to'liq tekshirish turini qo'shish uchun deyarli vaqt talab qilinmaydi. Siz "kodlash" ustidan emassiz. Siz shunchaki kodingizni "ta'minlaysiz".

Chegara shartlarini diqqat bilan tekshiring.

Birinchi tekshiruv - bu chegara shartiga ehtiyoj bor-yo'qligini aniqlash, chunki ko'chadan qimmatga tushadi.

Chegaraviy (yoki chekka) sharoitlar barcha harakatlar amalga oshiriladigan joydir. 0 dan 100 gacha bo'lgan qiymatlar va 1 dan 98 gacha bo'lgan tsikllar deyarli bir xil (kurs kodida taqiqlangan shartlar). Ammo 0-sonli pastadir, bu kod pastadir ichiga tushadi va initsializatsiya shartlari o'rnatiladi (va noto'g'ri o'rnatilgan bo'lishi mumkin). Xuddi shu tarzda, oxirgi pastadir - bu narsalar qoldiradigan narsa, va tsikl qiymatlarni bajarish uchun nima qilsa ham, to'xtaydi.

Ko'pi bilan bitta iteratsiyaga ega bo'lgan tsikl, bitta kodni shartli ravishda bajarish uchun IF bayonotidan foydalanishga tengdir. Hech qanday ishlab chiqaruvchi pastadir bayonotining bunday ishlatilishini kutmasligi kerak. Agar muallifning dastlabki niyati haqiqatan ham bitta parolni shartli ravishda bajarishni xohlagan bo'lsa, unda IFning ko'rsatmasi joyida ishlatilishi kerak.

Quyidagi mos kelmaydigan va mos kelmaydigan kodni ko'rib chiqing. Bu holatda bizda umuman pastadir kerak emas. Oddiy IF qiladi.

            Mos kelmaydigan kod namunasi
DATA qoldig'i TYPE i.
20 marta bajaring.
qoldiq = sy-indeks MOD 2.
cl_demo_output => write_text ().
CHIQISH. "Mos kelmaydigan, pastadir faqat bir marta bajariladi. Biz IF-dan foydalanishimiz mumkin
ENDDO.
          Mos keladigan kod namunasi
DATA qoldig'i TYPE i.
20 marta bajaring.
qoldiq = sy-indeks MOD 2.
cl_demo_output => write_text ().
ENDDO.

Nosozliklarni tuzatish ko'chadan har doim boshida va oxirida ko'p harakatlarni o'z ichiga oladi, nima kirganini va nima chiqqanini to'g'ri tekshiradi. Shunday qilib, chegara shartlari aniq bo'lgandan so'ng, sizning kodingiz bilan hech qanday noto'g'ri narsa bo'lmaydi.

TDD-dan foydalaning (Test Driven Development)

TDD-ning asosiy g'oyasi: "avval birlikni testdan o'tkazing, so'ng kodni yozing, so'ngra refaktor, keyin takrorlang".

Birlik testlari bu funktsiyalar kutilganidek ishlashini tekshiradigan avtomatlashtirilgan testlardir. Sizning eng birinchi birlik sinovingiz muvaffaqiyatsiz tugashi kerak, chunki u kod kod bazasiga ega bo'lishingizdan oldin yozilgan.

Siz sinov ishi kodiga biroz qo'shasiz. Siz ishlab chiqarish kodiga biroz qo'shasiz. Ikki kod oqimi bir vaqtning o'zida bir-birini to'ldiruvchi qismlarga o'sadi. Sinovlar ishlab chiqarish kodiga mos keladi, chunki antijism antijismga to'g'ri keladi.

Sinov kodi bilan bog'liq muammo shundaki, siz ushbu kodni izolyatsiya qilishingiz kerak. Agar funktsiya boshqa funktsiyalarni chaqirsa, funktsiyani sinab ko'rish ko'pincha qiyin. Ushbu testni yozish uchun siz funktsiyani qolgan barcha qismlardan ajratishning biron bir usulini topishingiz kerak. Boshqacha qilib aytganda, sinash zarurati sizni birinchi navbatda yaxshi dizayn haqida o'ylashga majbur qiladi.

Bu yanada yaxshi, dekou-dizaynni yaratadi, unda kod ishlab chiqilishi bilan siz narsalarni yaxshiroq nazorat qila olasiz.

Sinov varaqalarini yozish paytida dastlabki vaqt sarflanishi mumkin, ammo bu ko'p foyda keltiradi. Ishlab chiquvchilar avval kod satrlarini yozish uchun foydalanganliklarini, echimlarining ahamiyati yo'qligini anglab, keyin noldan kodlashni boshlaganliklarini tan olishadi.

Eskirgan kodlash amaliyotidan farqli o'laroq, TDD ishlab chiquvchilarga chizilgan taxtaga qaytib, engil, moslashuvchan arxitektura dizaynini ishlab chiqarishga e'tibor qaratish imkonini beradi.

Sinov voqealarini oldindan yozib qo'yishning haqiqati keyinchalik paydo bo'lishi mumkin bo'lgan har qanday xatolarni oldini oladi, shu bilan vaqtni, kuchni va og'riqni tejaydi.

Har doim optimallashtirilgan kodni yozing.

Ba'zi dasturlar (va dasturchilar) resurslarni juda yaxshi ko'radilar. Ammo iloji bo'lsa, minimalni ishlating. Minimal foydalanish uchun sizning kodingiz iloji boricha optimallashtirilgan bo'lishi kerak.

Odatda, optimallashtirishning ishonchli usullaridan biri bu kompilyator tomonidan o'rnatilgan har qanday optimallashtirishni yoqishdir.

Kompilyatorni optimallashtirish odatda ish vaqtini bir necha foizdan 2-faktorga yaxshilaydi. Ba'zan bu mahsulotni sekinlashtirishi mumkin, shuning uchun yakuniy qo'ng'iroq qilishdan oldin ehtiyotkorlik bilan o'lchab oling. Ammo zamonaviy kompilyatorlar bu borada etarlicha ishlaydilar, chunki ular dasturchilar tomonidan kichik hajmdagi o'zgarishlarga bo'lgan ehtiyojni engib chiqadi.

Standart kompilyatorni optimallashtirishdan tashqari, sozlashning boshqa bir necha usullari mavjud.

Umumiy pastki izohlarni to'plang.

Agar qimmat hisoblash bir necha joyda sodir bo'lsa, bitta joyda hisoblash va natijani eslab qolish yaxshiroqdir. Agar talab qilinmasa, bunday hisoblashlarni ko'chadan ichiga joylashtirmang.

Qimmat operatsiyalarni arzon operatsiyalar bilan almashtiring.

String manipulyatsiyasi, ehtimol har qanday dasturning eng keng tarqalgan operatsiyalaridan biridir. Biroq, noto'g'ri amalga oshirilsa, qimmat operatsiya bo'lishi mumkin. Xuddi shunday, ba'zi holatlarda, ko'payishlarni bir qator smenali operatsiyalarga almashtirish orqali ishlashni yaxshilashingiz mumkin. Bu qayerda samarali bo'lsa ham (va har doim ham shunday emas), u juda chalkash kod yaratadi. Shunday qilib, kodni o'qish mumkinligini hisobga olgan holda qaror qabul qiling.

Looplarni yo'q qiling.

Looplar asosan qo'shimcha xarajatlardir. Qaytarilish kam bo'lsa, iloji boricha ilmoqlardan saqlanishga harakat qiling.

Kesh tez-tez ishlatiladigan qiymatlar.

Keshlash joyning afzalliklaridan, dasturlarning va odamlarning yaqinda ishlatilgan ma'lumotlardan qayta foydalanish tendentsiyasidan foydalanadi. Faqat eng ko'p ishlatiladigan belgi yoki ma'lumotni keshlash dasturning ish faoliyatini sezilarli darajada yaxshilaydi.

Pastroq darajadagi tilda qayta yozing.

Bu oxirgi chora bo'lishi kerak. Dasturchi nuqtai nazaridan ko'proq vaqt talab qilinsa ham, quyi darajadagi tillar samaraliroq bo'ladi. Ba'zida muhim kodni pastki darajadagi tillarda qayta yozish orqali biz sezilarli yaxshilanishlarga erishamiz, ammo bu pasaytirilgan taşınabilirlik uchun sarflanadi va texnik xizmat juda qiyin bo'ladi. Shuning uchun qarorni diqqat bilan qabul qiling.

Optimallashtirishda esda tuting, tanlov o'yinning ehtimol 90%. Nima qilayotganingizni va uni to'g'ri bajarishga qaror qilish uchun vaqt ajratish kerak. Albatta: qora sehr ham shu erda!

Va nihoyat, hech kimga ishonmang.

"Ma'lum bo'lganlar bor; biz biladigan narsalar bor ", dedi Bushning ikkinchi ma'muriyati davrida Mudofaa vaziri Donald Ramsfeld matbuot anjumanida. “Biz bilamizki, noma'lumlar bor; ya'ni biz bilmaydigan ba'zi narsalar borligini bilamiz degani. Ammo noma'lum narsalar ham bor - biz bilmaganlar biz bilmaymiz. "

Ramsfeld Iroqdagi urush haqida gapirdi, ammo ma'lumotlar ham xuddi shunday. Xulosa qilib aytganda, bu siz to'liq nazoratga ega bo'lmagan barcha ma'lumotlarni tekshirishni anglatadi.

Shubhasiz, foydalanuvchi ma'lumotlari doimo shubhali. Foydalanuvchilar sizning fikringiz juda aniq deb tushunishingiz mumkin. Muammolarni oldindan ko'ring va oldindan bilib oling, har bir narsani tekshirib ko'ring yoki boshqa usul bilan tozalang.

Dastur sozlamalari ma'lumotlari ham xatoga moyil. INI fayllari dastur sozlamalarini saqlashning keng tarqalgan usuli edi. Ular matnli fayl bo'lganligi sababli, ko'p odamlar ularni matn muharriri yordamida qo'lda tahrirlashni odat qilishgan va ehtimol ularning qiymatlarini aniqlashga harakat qilishgan. Ro'yxatga olish kitobi ma'lumotlari, ma'lumotlar bazasi fayllari - kimdir ularni biron-bir kunga aylantirishi mumkin va qiladi, shuning uchun hatto bu narsalarni tekshirish uchun to'laydi.

Qisqacha aytganda, agar sizning kodingiz bajarilishini umid qilsangiz, kiradigan ma'lumotlar toza bo'lishi kerak. Agar siz ilgari "Axlat, axlat chiqing" degan iborani eshitgan bo'lsangiz, u aynan shu erdan kelgan.

Edvard Demming aytganidek.

"Biz Xudoga ishonamiz. Qolganlarning hammasi ma'lumot olib kelishlari kerak. "
Muallif haqida-:
Ravi Rajan - Hindistonning Mumbay shahrida joylashgan IT texnologiyalari bo'yicha global menejer. U shuningdek g'ayratli blogger, Xayku she'r yozuvchisi, arxeologiya ixlosmandlari va tarix maniakidir. Ravi bilan LinkedIn, Medium va Twitter-da ulaning.