O'zbek

Sinov to'plamlaringizning samaradorligini baholash va kod sifatini yaxshilash uchun kuchli usul bo'lgan mutatsiya testini o'rganing.

Mutatsiya testi: Kod sifatini baholash bo'yicha keng qamrovli qo'llanma

Bugungi tez rivojlanayotgan dasturiy ta'minotni ishlab chiqish landshaftida kod sifatini ta'minlash muhim ahamiyatga ega. Unit testlar, integratsiya testlari va oxirigacha testlar ishonchli sifatni ta'minlash jarayonining barcha muhim tarkibiy qismlaridir. Biroq, shunchaki sinovlarni o'rnatish ularning samaradorligini kafolatlamaydi. Aynan shu yerda mutatsiya testi paydo bo'ladi - sinov to'plamlaringizning sifatini baholash va sinov strategiyangizdagi zaifliklarni aniqlash uchun kuchli usul.

Mutatsiya testi nima?

Mutatsiya testi, uning mohiyatida, kodingizga kichik, sun'iy xatolarni ( "mutatsiyalar" deb ataladi) kiritish va keyin mavjud testlaringizni o'zgartirilgan kodga nisbatan ishlatishdir. Maqsad - testlaringiz ushbu mutatsiyalarni aniqlay olishini aniqlashdir. Agar mutatsiya kiritilganda test ishlamay qolsa, mutatsiya "o'ldirilgan" deb hisoblanadi. Agar mutatsiyaga qaramay barcha testlar o'tgan bo'lsa, mutatsiya "saqlanib qoladi", bu sizning test to'plamida potentsial zaiflikni ko'rsatadi.

Ikki sonni qo'shadigan oddiy funksiyani tasavvur qiling:


function add(a, b) {
  return a + b;
}

Mutatsiya operatori + operatorini - operatoriga o'zgartirishi, quyidagi o'zgartirilgan kodni yaratishi mumkin:


function add(a, b) {
  return a - b;
}

Agar sizning test to'plamingiz add(2, 3) 5ni qaytarishi kerakligini aniq tasdiqlovchi test holatini o'z ichiga olmasa, mutatsiya saqlanib qolishi mumkin. Bu sizning test to'plamingizni yanada keng qamrovli test holatlari bilan kuchaytirish zarurligini ko'rsatadi.

Mutatsiya testidagi asosiy tushunchalar

Mutatsiya testining afzalliklari

Mutatsiya testi dasturiy ta'minotni ishlab chiqish jamoalari uchun bir nechta muhim afzalliklarni taklif etadi:

Mutatsiya operatorlari: Misollar

Mutatsiya operatorlari mutatsiya sinovining yuragidir. Ular mutantlarni yaratish uchun kodga kiritiladigan o'zgarish turlarini aniqlaydi. Mana bir nechta umumiy mutatsiya operatori toifalari va misollar:

Arifmetik operatorni almashtirish

Relatsion operatorni almashtirish

Mantiqiy operatorni almashtirish

Shartli chegara mutatorlari

Doimiy almashtirish

Bayonotni o'chirish

Qaytarish qiymatini almashtirish

Ishlatiladigan mutatsiya operatorlarining aniq to'plami dasturlash tiliga va qo'llaniladigan mutatsiya test vositasiga bog'liq bo'ladi.

Mutatsiya testini amalga oshirish: Amaliy qo'llanma

Mutatsiya testini amalga oshirish bir necha bosqichlarni o'z ichiga oladi:

  1. Mutatsiya test vositasini tanlang: Turli xil dasturlash tillari uchun bir nechta vositalar mavjud. Ommabop tanlovlar quyidagilardir:

    • Java: PIT (PITest)
    • JavaScript: Stryker
    • Python: MutPy
    • C#: Stryker.NET
    • PHP: Humbug

  2. Vositalarni sozlang: Sinovdan o'tkaziladigan manba kodini, foydalaniladigan test to'plamini va qo'llaniladigan mutatsiya operatorlarini ko'rsatish uchun mutatsiya test vositasini sozlang.
  3. Mutatsiya tahlilini ishga tushiring: Mutantlarni yaratadigan va ularga nisbatan test to'plamingizni ishga tushiradigan mutatsiya test vositasini ishga tushiring.
  4. Natijalarni tahlil qiling: Omon qolgan mutantlarni aniqlash uchun mutatsiya testi hisobotini tekshiring. Har bir omon qolgan mutant test to'plamidagi potentsial bo'shliqni ko'rsatadi.
  5. Test to'plamini yaxshilang: Omon qolgan mutantlarni o'ldirish uchun test holatlarini qo'shing yoki o'zgartiring. Omon qolgan mutantlar tomonidan ta'kidlangan kod mintaqalariga qaratilgan testlarni yaratishga e'tibor bering.
  6. Jarayonni takrorlang: 3-5-qadamlarni qoniqarli mutatsiya balliga erishgunga qadar takrorlang. Yuqori mutatsiya balliga intiling, lekin qo'shimcha testlarni qo'shishning xarajat-samaradorlik savdosini ham ko'rib chiqing.

Misol: Stryker (JavaScript) bilan mutatsiya testi

Keling, Stryker mutatsiya testi frameworkidan foydalangan holda oddiy JavaScript misolini mutatsiya testi bilan ko'rsatamiz.

1-qadam: Strykerni o'rnating


npm install --save-dev @stryker-mutator/core @stryker-mutator/mocha-runner @stryker-mutator/javascript-mutator

2-qadam: JavaScript funktsiyasini yarating


// math.js
function add(a, b) {
  return a + b;
}

module.exports = add;

3-qadam: Unit test yozing (Mocha)


// test/math.test.js
const assert = require('assert');
const add = require('../math');

describe('add', () => {
  it('should return the sum of two numbers', () => {
    assert.strictEqual(add(2, 3), 5);
  });
});

4-qadam: Strykerni sozlang


// stryker.conf.js
module.exports = function(config) {
  config.set({
    mutator: 'javascript',
    packageManager: 'npm',
    reporters: ['html', 'clear-text', 'progress'],
    testRunner: 'mocha',
    transpilers: [],
    testFramework: 'mocha',
    coverageAnalysis: 'perTest',
    mutate: ["math.js"]
  });
};

5-qadam: Strykerni ishga tushiring


npm run stryker

Stryker kodingizda mutatsiya tahlilini ishga tushiradi va mutatsiya balli va omon qolgan har qanday mutantlarni ko'rsatadigan hisobotni yaratadi. Agar dastlabki test mutantni o'ldirishga yaramasa (masalan, agar sizda add(2,3) uchun test bo'lmasa), Stryker buni ta'kidlaydi, bu sizga yaxshiroq test kerakligini ko'rsatadi.

Mutatsiya testining qiyinchiliklari

Mutatsiya testi kuchli texnika bo'lsa-da, u muayyan qiyinchiliklarni ham taqdim etadi:

Mutatsiya testining eng yaxshi amaliyoti

Mutatsiya testining afzalliklarini maksimal darajada oshirish va uning qiyinchiliklarini yumshatish uchun ushbu eng yaxshi amaliyotlarga amal qiling:

Turli xil ishlanmalar metodologiyasida mutatsiya testi

Mutatsiya testini turli dasturiy ta'minotni ishlab chiqish metodologiyalariga samarali ravishda integratsiya qilish mumkin:

Mutatsiya testi va kod qamrovi

Kod qamrovi metrikalari (masalan, chiziq qamrovi, filial qamrovi va yo'l qamrovi) kodning qaysi qismlari testlar bilan bajarilganligi haqida ma'lumot beradi, lekin ular bu testlarning samaradorligini har doim ham ko'rsatmaydi. Kod qamrovi kod satri bajarilganligini aytadi, lekin u to'g'ri *sinovdan o'tgan*mi.

Mutatsiya testi kod qamrovini testlarning kodda xatolarni qanchalik yaxshi aniqlashini o'lchashni ta'minlaydi. Yuqori kod qamrovi balli yuqori mutatsiya ballini kafolatlamaydi va aksincha. Ikkala metrika ham kod sifatini baholash uchun qimmatlidir, lekin ular turli nuqtai nazarlarni taqdim etadi.

Mutatsiya testini qo'llash bo'yicha umumiy mulohazalar

Mutatsiya testini global dasturiy ta'minotni ishlab chiqish kontekstida qo'llashda quyidagilarni hisobga olish muhim:

Mutatsiya testining kelajagi

Mutatsiya testi rivojlanayotgan soha bo'lib, davom etayotgan tadqiqotlar uning muammolarini hal qilishga va uning samaradorligini yaxshilashga qaratilgan. Faol tadqiqotning ba'zi sohalariga quyidagilar kiradi:

Xulosa

Mutatsiya testi sizning test to'plamlaringiz sifatini baholash va yaxshilash uchun qimmatli texnikadir. U muayyan qiyinchiliklarni taqdim etsa-da, test samaradorligini yaxshilash, yuqori kod sifati va xatoliklar xavfini kamaytirish foydalari dasturiy ta'minotni ishlab chiqish jamoalari uchun uni foydali sarmoyaga aylantiradi. Eng yaxshi amaliyotlarga amal qilish va mutatsiya testini ishlab chiqish jarayoniga integratsiya qilish orqali siz yanada ishonchli va mustahkam dasturiy ilovalarni yaratishingiz mumkin.

Dasturiy ta'minotni ishlab chiqish tobora globallashayotganligi sababli, yuqori sifatli kod va samarali sinov strategiyalari uchun ehtiyoj har qachongidan ham muhimroqdir. Test to'plamlaridagi zaifliklarni aniqlash qobiliyatiga ega bo'lgan mutatsiya testi butun dunyo bo'ylab ishlab chiqilgan va joylashtirilgan dasturiy ta'minotning ishonchliligi va mustahkamligini ta'minlashda hal qiluvchi rol o'ynaydi.

Mutatsiya testi: Kod sifatini baholash bo'yicha keng qamrovli qo'llanma | MLOG