தமிழ்

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

பண்பு-அடிப்படை சோதனையில் தேர்ச்சி பெறுதல்: ஒரு குவிக்செக் செயல்படுத்தும் வழிகாட்டி

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

பண்பு-அடிப்படை சோதனை என்றால் என்ன?

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

இதை இப்படி யோசித்துப் பாருங்கள்: "நான் இந்த செயல்பாட்டிற்கு உள்ளீடு 'X' கொடுத்தால், நான் 'Y' வெளியீட்டை எதிர்பார்க்கிறேன்" என்று சொல்வதற்குப் பதிலாக, நீங்கள் கூறுகிறீர்கள் "நான் இந்த செயல்பாட்டிற்கு எந்த உள்ளீட்டைக் கொடுத்தாலும் (சில கட்டுப்பாடுகளுக்குள்), பின்வரும் கூற்று (பண்பு) எப்போதும் உண்மையாக இருக்க வேண்டும்".

பண்பு-அடிப்படை சோதனையின் நன்மைகள்:

குவிக்செக்: முன்னோடி

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

ஒரு குவிக்செக் பாணி செயலாக்கத்தின் முக்கிய கூறுகள்:

ஒரு நடைமுறை குவிக்செக் செயலாக்கம் (கருத்தியல் எடுத்துக்காட்டு)

ஒரு முழுமையான செயலாக்கம் இந்த ஆவணத்தின் எல்லைக்கு அப்பாற்பட்டது என்றாலும், ஒரு கற்பனையான பைதான் போன்ற தொடரியலைப் பயன்படுத்தி ஒரு எளிமைப்படுத்தப்பட்ட, கருத்தியல் எடுத்துக்காட்டுடன் முக்கிய கருத்துக்களை விளக்குவோம். ஒரு பட்டியலைத் திருப்பும் ஒரு செயல்பாட்டில் கவனம் செலுத்துவோம்.

1. சோதனைக்குட்பட்ட செயல்பாட்டை வரையறுக்கவும்


def reverse_list(lst):
  return lst[::-1]

2. பண்புகளை வரையறுக்கவும்

`reverse_list` என்ன பண்புகளை திருப்திப்படுத்த வேண்டும்? இதோ சில:

3. ஜெனரேட்டர்களை வரையறுக்கவும் (கருத்தியல்)

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


# Hypothetical generator function
def generate_list(max_length):
  length = random.randint(0, max_length)
  return [random.randint(-100, 100) for _ in range(length)]

4. டெஸ்ட் ரன்னரை வரையறுக்கவும் (கருத்தியல்)


# Hypothetical test runner
def quickcheck(property, generator, num_tests=1000):
  for _ in range(num_tests):
    input_value = generator()
    try:
      result = property(input_value)
      if not result:
        print(f"Property failed for input: {input_value}")
        # Attempt to shrink the input (not implemented here)
        break # Stop after the first failure for simplicity
    except Exception as e:
      print(f"Exception raised for input: {input_value}: {e}")
      break
  else:
    print("Property passed all tests!")

5. சோதனைகளை எழுதவும்

இப்போது நமது கற்பனையான கட்டமைப்பைப் பயன்படுத்தி சோதனைகளை எழுதலாம்:


# Property 1: Reversing twice returns the original list
def property_reverse_twice(lst):
  return reverse_list(reverse_list(lst)) == lst

# Property 2: The length of the reversed list is the same as the original
def property_length_preserved(lst):
  return len(reverse_list(lst)) == len(lst)

# Property 3: Reversing an empty list returns an empty list
def property_empty_list(lst):
    return reverse_list([]) == []

# Run the tests
quickcheck(property_reverse_twice, lambda: generate_list(20))
quickcheck(property_length_preserved, lambda: generate_list(20))
quickcheck(property_empty_list, lambda: generate_list(0))  #Always empty list

முக்கிய குறிப்பு: இது விளக்கத்திற்காக மிகவும் எளிமைப்படுத்தப்பட்ட எடுத்துக்காட்டு. நிஜ உலக குவிக்செக் செயலாக்கங்கள் மிகவும் நுட்பமானவை மற்றும் சுருக்குதல், மேம்பட்ட ஜெனரேட்டர்கள் மற்றும் சிறந்த பிழை அறிக்கை போன்ற அம்சங்களை வழங்குகின்றன.

பல்வேறு மொழிகளில் குவிக்செக் செயலாக்கங்கள்

குவிக்செக் கருத்து பல நிரலாக்க மொழிகளுக்கு மாற்றப்பட்டுள்ளது. இதோ சில பிரபலமான செயலாக்கங்கள்:

செயலாக்கத்தின் தேர்வு உங்கள் நிரலாக்க மொழி மற்றும் சோதனை கட்டமைப்பு விருப்பங்களைப் பொறுத்தது.

எடுத்துக்காட்டு: ஹைப்போதெசிஸைப் பயன்படுத்துதல் (பைதான்)

பைத்தானில் ஹைப்போதெசிஸைப் பயன்படுத்தி ஒரு உறுதியான எடுத்துக்காட்டைப் பார்ப்போம். ஹைப்போதெசிஸ் ஒரு சக்திவாய்ந்த மற்றும் நெகிழ்வான பண்பு-அடிப்படை சோதனை லைப்ரரி ஆகும்.


from hypothesis import given
from hypothesis.strategies import lists, integers

def reverse_list(lst):
  return lst[::-1]

@given(lists(integers()))
def test_reverse_twice(lst):
  assert reverse_list(reverse_list(lst)) == lst

@given(lists(integers()))
def test_reverse_length(lst):
  assert len(reverse_list(lst)) == len(lst)

@given(lists(integers()))
def test_reverse_empty(lst):
    if not lst:
        assert reverse_list(lst) == lst


#To Run the tests, execute pytest
#Example: pytest your_test_file.py

விளக்கம்:

நீங்கள் இந்த சோதனையை `pytest` உடன் இயக்கும்போது (ஹைப்போதெசிஸை நிறுவிய பிறகு), ஹைப்போதெசிஸ் தானாகவே அதிக எண்ணிக்கையிலான சீரற்ற பட்டியல்களை உருவாக்கி, பண்புகள் சரியானவை என்பதை சரிபார்க்கும். ஒரு பண்பு தோல்வியுற்றால், ஹைப்போதெசிஸ் தோல்வியுற்ற உள்ளீட்டை ஒரு குறைந்தபட்ச எடுத்துக்காட்டாக சுருக்க முயற்சிக்கும்.

பண்பு-அடிப்படை சோதனையில் மேம்பட்ட நுட்பங்கள்

அடிப்படைகளுக்கு அப்பால், பல மேம்பட்ட நுட்பங்கள் உங்கள் பண்பு-அடிப்படை சோதனை உத்திகளை மேலும் மேம்படுத்தலாம்:

1. தனிப்பயன் ஜெனரேட்டர்கள்

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

எடுத்துக்காட்டு: நீங்கள் ஒரு தேதி பாகுபடுத்தும் செயல்பாட்டைச் சோதித்தால், ஒரு குறிப்பிட்ட வரம்பிற்குள் சரியான தேதிகளை உருவாக்கும் தனிப்பயன் ஜெனரேட்டர் உங்களுக்குத் தேவைப்படலாம்.

2. அனுமானங்கள்

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

எடுத்துக்காட்டு: எண்களின் பட்டியலின் சராசரியைக் கணக்கிடும் ஒரு செயல்பாட்டை நீங்கள் சோதித்தால், பட்டியல் காலியாக இல்லை என்று நீங்கள் அனுமானிக்கலாம்.

ஹைப்போதெசிஸில், அனுமானங்கள் `hypothesis.assume()` உடன் செயல்படுத்தப்படுகின்றன:


from hypothesis import given, assume
from hypothesis.strategies import lists, integers

@given(lists(integers()))
def test_average(numbers):
  assume(len(numbers) > 0)
  average = sum(numbers) / len(numbers)
  # Assert something about the average
  ...

3. நிலை இயந்திரங்கள் (State Machines)

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

4. பண்புகளை இணைத்தல்

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

5. கவரேஜ்-வழிகாட்டப்பட்ட ஃபஸ்ஸிங்

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

பண்பு-அடிப்படை சோதனையை எப்போது பயன்படுத்த வேண்டும்

பண்பு-அடிப்படை சோதனை என்பது பாரம்பரிய யூனிட் சோதனைக்கு மாற்றானது அல்ல, மாறாக ஒரு நிரப்பு நுட்பமாகும். இது குறிப்பாக இதற்கு மிகவும் பொருத்தமானது:

இருப்பினும், ஒரு சில சாத்தியமான உள்ளீடுகளை மட்டுமே கொண்ட மிக எளிய செயல்பாடுகளுக்கு, அல்லது வெளிப்புற அமைப்புகளுடனான தொடர்புகள் சிக்கலானதாகவும் கேலி செய்வது கடினமாகவும் இருக்கும்போது PBT சிறந்த தேர்வாக இருக்காது.

பொதுவான இடர்பாடுகள் மற்றும் சிறந்த நடைமுறைகள்

பண்பு-அடிப்படை சோதனை குறிப்பிடத்தக்க நன்மைகளை வழங்கினாலும், சாத்தியமான இடர்பாடுகளைப் பற்றி அறிந்திருப்பதும் சிறந்த நடைமுறைகளைப் பின்பற்றுவதும் முக்கியம்:

முடிவுரை

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

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

பண்பு-அடிப்படை சோதனையை ஏற்றுக்கொள்வதன் மூலம், உங்கள் குறியீடு எதிர்பார்த்தபடி செயல்படுகிறதா என்பதைச் சரிபார்ப்பதைத் தாண்டி, அது பரந்த அளவிலான சாத்தியக்கூறுகளில் சரியாக செயல்படுகிறது என்பதை நிரூபிக்கத் தொடங்கலாம்.