தமிழ்

ம्यूटேஷன் டெஸ்டிங் மூலம் உங்கள் சோதனைக் தொகுப்புகளின் செயல்திறனை மதிப்பிட்டு, குறியீடு தரத்தை மேம்படுத்துங்கள். அதன் கொள்கைகள், நன்மைகள், செயலாக்கம் மற்றும் சிறந்த நடைமுறைகளை அறிக.

ம्यूटேஷன் டெஸ்டிங்: குறியீடு தர மதிப்பீட்டிற்கான ஒரு விரிவான வழிகாட்டி

இன்றைய வேகமான மென்பொருள் உருவாக்கச் சூழலில், குறியீடு தரத்தை உறுதி செய்வது மிக முக்கியமானது. யூனிட் டெஸ்டுகள், இன்டெக்ரேஷன் டெஸ்டுகள் மற்றும் எண்ட்-டு-எண்ட் டெஸ்டுகள் அனைத்தும் ஒரு வலிமையான தர உறுதிப்பாட்டுச் செயல்முறையின் முக்கிய கூறுகள் ஆகும். இருப்பினும், வெறும் சோதனைகளை வைத்திருப்பது அவற்றின் செயல்திறனை உறுதிப்படுத்தாது. இங்குதான் ம्यूटேஷன் டெஸ்டிங் வருகிறது – இது உங்கள் சோதனைக் தொகுப்புகளின் தரத்தை மதிப்பிடுவதற்கும் உங்கள் சோதனை உத்திகளில் உள்ள பலவீனங்களைக் கண்டறிவதற்கும் ஒரு சக்திவாய்ந்த நுட்பமாகும்.

ம्यूटேஷன் டெஸ்டிங் என்றால் என்ன?

ம्यूटேஷன் டெஸ்டிங் அதன் மையத்தில், உங்கள் குறியீட்டில் சிறிய, செயற்கையான பிழைகளை ("ம्यूटேஷன்கள்" என்று அழைக்கப்படுபவை) புகுத்தி, பின்னர் மாற்றியமைக்கப்பட்ட குறியீட்டிற்கு எதிராக உங்கள் தற்போதுள்ள சோதனைகளை இயக்குவதாகும். இந்த ம्यूटேஷன்களை உங்கள் சோதனைகளால் கண்டறிய முடியுமா என்பதைத் தீர்மானிப்பதே இதன் குறிக்கோள். ஒரு மியூட்டேஷன் அறிமுகப்படுத்தப்படும்போது ஒரு சோதனை தோல்வியடைந்தால், அந்த மியூட்டேஷன் "கில்டு" (கொல்லப்பட்டது) என்று கருதப்படுகிறது. மியூட்டேஷன் இருந்தபோதிலும் அனைத்து சோதனைகளும் வெற்றி பெற்றால், மியூட்டேஷன் "சர்வைவ்ஸ்" (உயிர்வாழ்கிறது), இது உங்கள் சோதனைக் தொகுப்பில் ஒரு சாத்தியமான பலவீனத்தைக் குறிக்கிறது.

இரண்டு எண்களைச் சேர்க்கும் ஒரு எளிய செயல்பாட்டை கற்பனை செய்து பாருங்கள்:


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

ஒரு மியூட்டேஷன் ஆப்பரேட்டர் + ஆப்பரேட்டரை - ஆப்பரேட்டராக மாற்றலாம், பின்வரும் மாற்றப்பட்ட குறியீட்டை உருவாக்குகிறது:


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

உங்கள் சோதனைக் தொகுப்பில் add(2, 3) ஆனது 5-ஐ வழங்க வேண்டும் என்று குறிப்பாக உறுதிப்படுத்தும் ஒரு சோதனைக் கூறு (test case) இல்லை என்றால், மியூட்டேஷன் தப்பிப் பிழைக்கலாம். இது உங்கள் சோதனைக் தொகுப்பை மிகவும் விரிவான சோதனைக் கூறுகளுடன் வலுப்படுத்த வேண்டிய அவசியத்தைக் குறிக்கிறது.

ம्यूटேஷன் டெஸ்டிங்கில் முக்கிய கருத்துகள்

ம्यूटேஷன் டெஸ்டிங்கின் நன்மைகள்

ம्यूटேஷன் டெஸ்டிங் மென்பொருள் மேம்பாட்டு குழுக்களுக்கு பல குறிப்பிடத்தக்க நன்மைகளை வழங்குகிறது:

ம्यूटேஷன் ஆபரேட்டர்கள்: எடுத்துக்காட்டுகள்

மயூட்டேஷன் ஆபரேட்டர்கள் மயூட்டேஷன் டெஸ்டிங்கின் இதயமாகும். மியூட்டன்ட்களை உருவாக்க குறியீட்டில் செய்யப்படும் மாற்றங்களின் வகைகளை அவை வரையறுக்கின்றன. எடுத்துக்காட்டுகளுடன் சில பொதுவான மயூட்டேஷன் ஆபரேட்டர் வகைகள் இங்கே:

கணித ஆபரேட்டர் மாற்றுதல்

உறவு ஆபரேட்டர் மாற்றுதல்

தர்க்கரீதியான ஆபரேட்டர் மாற்றுதல்

நிபந்தனை எல்லை மியூட்டேட்டர்கள்

மாறிலி மாற்றுதல்

அறிக்கை நீக்கம்

மீள் மதிப்பு மாற்றுதல்

பயன்படுத்தப்படும் மியூட்டேஷன் ஆபரேட்டர்களின் குறிப்பிட்ட தொகுப்பு நிரலாக்க மொழி மற்றும் பயன்படுத்தப்படும் மியூட்டேஷன் டெஸ்டிங் கருவியைப் பொறுத்தது.

மயூட்டேஷன் டெஸ்டிங்கை செயல்படுத்துதல்: ஒரு நடைமுறை வழிகாட்டி

மயூட்டேஷன் டெஸ்டிங்கை செயல்படுத்துவது பல படிகளை உள்ளடக்கியது:

  1. மயூட்டேஷன் டெஸ்டிங் கருவியைத் தேர்வு செய்யவும்: வெவ்வேறு நிரலாக்க மொழிகளுக்குப் பல கருவிகள் கிடைக்கின்றன. பிரபலமான தேர்வுகள் பின்வருமாறு:

    • ஜாவா: PIT (PITest)
    • ஜாவாஸ்கிரிப்ட்: Stryker
    • பைதான்: MutPy
    • C#: Stryker.NET
    • PHP: Humbug

  2. கருவியை உள்ளமைக்கவும்: சோதிக்கப்பட வேண்டிய மூலக் குறியீடு, பயன்படுத்தப்பட வேண்டிய சோதனைக் தொகுப்பு மற்றும் பயன்படுத்தப்பட வேண்டிய மியூட்டேஷன் ஆபரேட்டர்களைக் குறிப்பிட மியூட்டேஷன் டெஸ்டிங் கருவியை உள்ளமைக்கவும்.
  3. மியூட்டேஷன் பகுப்பாய்வை இயக்கவும்: மியூட்டேஷன் டெஸ்டிங் கருவியை இயக்கவும், இது மியூட்டன்ட்களை உருவாக்கி அவற்றுக்கு எதிராக உங்கள் சோதனைக் தொகுப்பை இயக்கும்.
  4. முடிவுகளை பகுப்பாய்வு செய்யவும்: உயிர் பிழைத்த மியூட்டன்ட்களை அடையாளம் காண மியூட்டேஷன் டெஸ்டிங் அறிக்கையை ஆராயவும். ஒவ்வொரு உயிர் பிழைத்த மியூட்டன்ட்டும் சோதனைக் தொகுப்பில் ஒரு சாத்தியமான இடைவெளியைக் குறிக்கிறது.
  5. சோதனைக் தொகுப்பை மேம்படுத்தவும்: உயிர் பிழைத்த மியூட்டன்ட்களைக் கொல்ல சோதனைக் கூறுகளைச் சேர்க்கவும் அல்லது மாற்றியமைக்கவும். உயிர் பிழைத்த மியூட்டன்ட்களால் சிறப்பிக்கப்பட்ட குறியீட்டுப் பகுதிகளை குறிப்பாக இலக்காகக் கொண்ட சோதனைகளை உருவாக்குவதில் கவனம் செலுத்துங்கள்.
  6. செயல்முறையை மீண்டும் செய்யவும்: திருப்திகரமான மியூட்டேஷன் ஸ்கோரை அடையும் வரை படிகள் 3-5 மூலம் மீண்டும் செய்யவும். ஒரு உயர் மியூட்டேஷன் ஸ்கோரை இலக்காகக் கொள்ளுங்கள், ஆனால் மேலும் சோதனைகளைச் சேர்ப்பதற்கான செலவு-நன்மை சமநிலையையும் கருத்தில் கொள்ளுங்கள்.

எடுத்துக்காட்டு: ஸ்ட்ரைக்கர் (ஜாவாஸ்கிரிப்ட்) உடன் மியூட்டேஷன் டெஸ்டிங்

ஸ்ட்ரைக்கர் மியூட்டேஷன் டெஸ்டிங் கட்டமைப்புடன் ஒரு எளிய ஜாவாஸ்கிரிப்ட் எடுத்துக்காட்டைப் பயன்படுத்தி மியூட்டேஷன் டெஸ்டிங்கை விளக்குவோம்.

படி 1: ஸ்ட்ரைக்கரை நிறுவவும்


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

படி 2: ஒரு ஜாவாஸ்கிரிப்ட் செயல்பாட்டை உருவாக்கவும்


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

module.exports = add;

படி 3: ஒரு யூனிட் டெஸ்ட்டை எழுதவும் (மோச்சா)


// 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: ஸ்ட்ரைக்கரை உள்ளமைக்கவும்


// 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: ஸ்ட்ரைக்கரை இயக்கவும்


npm run stryker

ஸ்ட்ரைக்கர் உங்கள் குறியீட்டில் மியூட்டேஷன் பகுப்பாய்வைச் செய்து, மியூட்டேஷன் ஸ்கோர் மற்றும் உயிர் பிழைத்த மியூட்டன்ட்களைக் காட்டும் ஒரு அறிக்கையை உருவாக்கும். ஒரு மியூட்டன்ட்டைக் கொல்ல ஆரம்ப சோதனை தோல்வியடைந்தால் (எ.கா., `add(2,3)`-க்கு உங்களுக்கு முன்பு ஒரு சோதனை இல்லை என்றால்), ஸ்ட்ரைக்கர் அதை முன்னிலைப்படுத்தும், இது உங்களுக்கு சிறந்த சோதனை தேவை என்பதைக் குறிக்கும்.

மயூட்டேஷன் டெஸ்டிங்கின் சவால்கள்

மயூட்டேஷன் டெஸ்டிங் ஒரு சக்திவாய்ந்த நுட்பமாக இருந்தாலும், அது சில சவால்களையும் முன்வைக்கிறது:

மயூட்டேஷன் டெஸ்டிங்கிற்கான சிறந்த நடைமுறைகள்

மயூட்டேஷன் டெஸ்டிங்கின் நன்மைகளை அதிகரிக்கவும் அதன் சவால்களைக் குறைக்கவும், இந்த சிறந்த நடைமுறைகளைப் பின்பற்றவும்:

பல்வேறு மேம்பாட்டு வழிமுறைகளில் மியூட்டேஷன் டெஸ்டிங்

பல்வேறு மென்பொருள் மேம்பாட்டு வழிமுறைகளில் மியூட்டேஷன் டெஸ்டிங்கை திறம்பட ஒருங்கிணைக்கலாம்:

மயூட்டேஷன் டெஸ்டிங் மற்றும் குறியீடு கவரேஜ்

குறியீடு கவரேஜ் அளவீடுகள் (வரி கவரேஜ், கிளை கவரேஜ் மற்றும் பாதை கவரேஜ் போன்றவை) குறியீட்டின் எந்தப் பகுதிகள் சோதனைகளால் செயல்படுத்தப்பட்டுள்ளன என்பது பற்றிய தகவல்களை வழங்கினாலும், அவை அந்த சோதனைகளின் செயல்திறனை அவசியமாகக் குறிக்கவில்லை. ஒரு குறியீட்டு வரி செயல்படுத்தப்பட்டதா என்பதை குறியீடு கவரேஜ் உங்களுக்குச் சொல்கிறது, ஆனால் அது சரியாக *சோதிக்கப்பட்டதா* என்பதைச் சொல்லவில்லை.

குறியீட்டில் பிழைகளை சோதனைகளால் எவ்வளவு சிறப்பாகக் கண்டறிய முடியும் என்பதற்கான அளவீட்டை வழங்குவதன் மூலம் மியூட்டேஷன் டெஸ்டிங் குறியீடு கவரேஜை நிறைவு செய்கிறது. ஒரு உயர் குறியீடு கவரேஜ் ஸ்கோர் ஒரு உயர் மியூட்டேஷன் ஸ்கோரை உறுதிப்படுத்துவதில்லை, அதற்கு நேர்மாறாகவும். இரண்டு அளவீடுகளும் குறியீடு தரத்தை மதிப்பிடுவதற்கு மதிப்புமிக்கவை, ஆனால் அவை வெவ்வேறு கண்ணோட்டங்களை வழங்குகின்றன.

மயூட்டேஷன் டெஸ்டிங்கிற்கான உலகளாவிய பரிசீலனைகள்

உலகளாவிய மென்பொருள் மேம்பாட்டுச் சூழலில் மியூட்டேஷன் டெஸ்டிங்கைப் பயன்படுத்தும் போது, பின்வருவனவற்றைக் கருத்தில் கொள்வது அவசியம்:

மயூட்டேஷன் டெஸ்டிங்கின் எதிர்காலம்

மயூட்டேஷன் டெஸ்டிங் ஒரு வளர்ந்து வரும் துறையாகும், மேலும் அதன் சவால்களை சமாளிப்பதிலும் அதன் செயல்திறனை மேம்படுத்துவதிலும் தற்போதைய ஆராய்ச்சி கவனம் செலுத்துகிறது. செயலில் உள்ள ஆராய்ச்சியின் சில பகுதிகள் பின்வருமாறு:

முடிவுரை

உங்கள் சோதனைக் தொகுப்புகளின் தரத்தை மதிப்பிடுவதற்கும் மேம்படுத்துவதற்கும் மியூட்டேஷன் டெஸ்டிங் ஒரு மதிப்புமிக்க நுட்பமாகும். இது சில சவால்களை முன்வைத்தாலும், மேம்பட்ட சோதனை செயல்திறன், உயர்ந்த குறியீடு தரம் மற்றும் பிழைகள் ஏற்படும் அபாயம் குறைதல் போன்ற நன்மைகள் மென்பொருள் மேம்பாட்டுக் குழுக்களுக்கு இது ஒரு மதிப்புமிக்க முதலீடாக அமைகிறது. சிறந்த நடைமுறைகளைப் பின்பற்றுவதன் மூலமும், உங்கள் மேம்பாட்டுச் செயல்பாட்டில் மியூட்டேஷன் டெஸ்டிங்கை ஒருங்கிணைப்பதன் மூலமும், நீங்கள் மிகவும் நம்பகமான மற்றும் வலிமையான மென்பொருள் பயன்பாடுகளை உருவாக்க முடியும்.

மென்பொருள் மேம்பாடு பெருகிய முறையில் உலகமயமாக்கப்படுவதால், உயர்தர குறியீடு மற்றும் பயனுள்ள சோதனை உத்திகளின் தேவை முன்னெப்போதையும் விட முக்கியமானது. மியூட்டேஷன் டெஸ்டிங், சோதனைக் தொகுப்புகளில் உள்ள பலவீனங்களைக் கண்டறியும் திறனுடன், உலகம் முழுவதும் உருவாக்கப்பட்டு பயன்படுத்தப்படும் மென்பொருளின் நம்பகத்தன்மையையும் வலிமையையும் உறுதி செய்வதில் ஒரு முக்கிய பங்கை வகிக்கிறது.

ம्यूटேஷன் டெஸ்டிங்: குறியீடு தர மதிப்பீட்டிற்கான ஒரு விரிவான வழிகாட்டி | MLOG