Shartnoma bo'yicha dizayndagi tasdiqlar
Tasdiqlar hujjat shakli sifatida ishlashi mumkin: ular kod ishlashidan oldin kutadigan holatni tavsiflashi mumkin (uning old shartlarva kod tugagandan so'ng tugashi kerak bo'lgan holat ()keyingi shartlar); ular ham belgilashi mumkin invariantlar a sinf. Eyfel bunday tasdiqlarni tilga qo'shadi va sinfni hujjatlashtirish uchun ularni avtomatik ravishda chiqaradi. Bu usulning muhim qismini tashkil qiladi shartnoma bo'yicha loyihalash.
Ushbu yondashuv uni aniq qo'llab-quvvatlamaydigan tillarda ham foydalidir: da'volardan ko'ra tasdiqlash bayonotlaridan foydalanishning afzalligi Izohlar dastur har safar ishlaganda tasdiqlarni tekshirishi mumkin; agar tasdiq endi bajarilmasa, xato haqida xabar berish mumkin. Bu kodni tasdiqlashlar bilan sinxronlashdan saqlaydi.
Ish vaqtini tekshirish uchun tasdiqlar
Tasdiq dasturni amalga oshirishda dasturchi tomonidan qabul qilingan taxmin dastur bajarilayotganda haqiqiy bo'lib qolishini tekshirish uchun ishlatilishi mumkin. Masalan, quyidagilarni ko'rib chiqing Java kod:
int jami = countNumberOfUsers(); agar (jami % 2 == 0) { // jami teng } boshqa { // jami toq va manfiy emas tasdiqlash jami % 2 == 1; }
Yilda Java, % bo'ladi qoldiq operator (modul) va Java-da, agar uning birinchi operandasi salbiy bo'lsa, natija ham salbiy bo'lishi mumkin (matematikada ishlatiladigan moduldan farqli o'laroq). Bu erda dasturchi buni taxmin qildi jami manfiy emas, shuning uchun 2 ga bo'linishning qoldig'i har doim 0 yoki 1 bo'ladi. Tasdiq bu taxminni aniq qiladi: agar countNumberOfUsers salbiy qiymatni qaytaradi, dasturda xato bo'lishi mumkin.
Ushbu texnikaning asosiy afzalligi shundaki, xato yuzaga kelganda, u tez-tez noaniq effektlar orqali emas, balki darhol va to'g'ridan-to'g'ri aniqlanadi. Tasdiqlashda xatolik odatda kod joylashuvi haqida xabar berganligi sababli, ko'pincha xatolarni tuzatmasdan xatoni aniq belgilash mumkin.
Tasdiqlar ba'zida ijro etilishi kerak bo'lmagan nuqtalarda joylashtiriladi. Masalan, da'volarni sukut bo'yicha bandi almashtirish kabi tillarda bayonot C, C ++va Java. Dasturchi qasddan ishlamaydigan har qanday vaziyat xatoga yo'l qo'yadi va dastur jimgina xato holatida davom etish o'rniga to'xtaydi. Yilda D. bunday tasdiq avtomatik ravishda qo'shilganda a almashtirish bayonotida a mavjud emas sukut bo'yicha band.
Yilda Java, tasdiqlar 1.4 versiyasidan beri tilning bir qismi bo'lib kelgan. Tasdiqlash muvaffaqiyatsizlikka olib keladi AssertionError dastur tegishli bayroqlar bilan ishlaganda, ularsiz assert so'zlari e'tiborga olinmaydi. Yilda C, ular standart sarlavha bilan qo'shiladi tasdiqlash belgilaydigan tasdiqlash (tasdiqlash) muvaffaqiyatsizlikka uchragan xato haqida signal beradigan, odatda dasturni tugatadigan so'l sifatida. Yilda C ++, ikkalasi ham tasdiqlash va kasset sarlavhalar tasdiqlash so'l.
Tasdiqlarning xavfi shundaki, ular xotira ma'lumotlarini o'zgartirish yoki ish vaqtini o'zgartirish orqali yon ta'sirga olib kelishi mumkin. Tasdiqlashlar dastur kodiga nojo'ya ta'sirlarni keltirib chiqarmasligi uchun ehtiyotkorlik bilan amalga oshirilishi kerak.
Tilda tasdiqlash konstruktsiyalari osonlikcha imkon beradi sinovga asoslangan rivojlanish (TDD) uchinchi tomon kutubxonasidan foydalanmasdan.
Do'stlaringiz bilan baham: |