Лекция · 5.4

Программаны тестілеу

Программаң іске қосылды, ЕШҚАНДАЙ қате хабарламасы жоқ, «Process finished with exit code 0» деп жазды. ТАМАША, солай ма? ЖОҚ! Бір мысал көрсетейік: while (i == n): деп жазсаң, программа ЕШТЕҢЕ ІСТЕМЕЙ, «сәтті» аяқталады — БІРАҚ нәтиже МҮЛДЕМ ҚАТЕ. Қате хабарламасының ЖОҚТЫҒЫ — программаның ДҰРЫС екенін БІЛДІРМЕЙДІ! Бұл — V бөлімнің СОҢҒЫ, ЕҢ МАҢЫЗДЫ кезеңі: программаны тестілеу.

Тестілеу деген не

Дәрігер жаңа дәрі шығарғанда, оны БІР адамға ғана емес, МЫҢДАҒАН адамға сынайды. Программа да солай: БІР рет іске қосып, «жұмыс істеді» деп мәлімдеу ЖЕТКІЛІКСІЗ.

Анықтама
Программаны тестілеу — программада анықталған қателерді табу мақсатында, арнайы дайындалған деректер жиынтығымен (ТЕСТ) программаны орындау процесі.

Тестілеудің үш кезеңі бар — ӘРБІРІН МІНДЕТТІ ТҮРДЕ өткізу керек: 1) Қалыпты жағдай — программаның ӘДЕТТЕГІ, «күнделікті» жұмыс жағдайын тексереді. 2) Экстремалды жағдай — айнымалының ШЕКТІ мәндерін тексереді: ЕҢ КІШІ мүмкін мән, ЕҢ ҮЛКЕН мүмкін мән. 3) Ерекше жағдай — рұқсат етілген АРАЛЫҚТАН ТЫС мәндерді тексереді.

👟
Аналогия: тестілеу — жаңа аяқ киімді сынау сияқты: алдымен ЖАЙ жүріп көресің (қалыпты), сосын ЖҮГІРІП көресің (экстремалды — шекті жүктеме), содан кейін СУДА немесе ЛАЙДА жүріп көресің (ерекше жағдай — арнайы емес пайдалану).
Есеп: факториалды тестілеу
Мысал: n=6 факториалын есептейтін программаны тестілейік.
n = 6
f = 1
i = 1
while (i <= n):
    f = f * i
    print('i=', i, 'f=', f)
    i = i + 1
КезеңТестілік мәнНәтиже
Қалыпты (i≤n)i=2f=1×2=2
Экстремалды (i=n)i=6f=720
Ерекше (i>n)i=7Цикл тоқтайды, f=720 (өзгермейді)

Қорытынды: программа шекарада (i=n) ДЕ, шекарадан тыс (i=7) та ДҰРЫС тоқтайды — тест ӨТТІ.

Жасырын алгоритмдік қате

Ал енді МАҢЫЗДЫ мысалды толық қарайық:

n = 6
f = 1
i = 1
while (i == n):
    f = f * i
    i = i + 1
print('f=', f)

Мұқият қара: while ШАРТЫНДА «==» (ТЕҢ) тұр, «<=» (КІШІ НЕМЕСЕ ТЕҢ) емес! i БАСТАПҚЫ мәні — 1, n — 6. Бірінші тексеруде: 1==6 → ЖАЛҒАН. Демек, ЦИКЛ ДЕНЕСІ БІРДЕ ДЕ ОРЫНДАЛМАЙДЫ! Программа ЕШҚАНДАЙ қате хабарламасын шығармайды, БІРАҚ f МӘНІ 1 БОЛЫП ҚАЛАДЫ (720 болу керек еді)!

⚠️
ӨТЕ МАҢЫЗДЫ ЕРЕЖЕ: қате туралы хабарламаның болмауы программаның ДҰРЫС екенін БІЛДІРМЕЙДІ. Python интерпретаторы тек СИНТАКСИСТІК немесе ОРЫНДАЛУ қателерін көреді. АЛГОРИТМДІК (логикалық) қатені тек СЕН, тестілеу арқылы таба аласың.

Циклдік алгоритмдерде ЖИІ кездесетін, БІРАҚ интерпретатор көрмейтін қателер: цикл параметрінің бастапқы мәнін дұрыс көрсетпеу; циклдің аяқталу шартын дұрыс жазбау (== орнына <=); циклдің қайталану санын дұрыс есептемеу; шексіз цикл.

Қате түріКім табадыҚашан
СинтаксистікPython интерпретаторыДереу (код жазылған кезде)
Орындалу уақыты (терістеу)Python интерпретаторыПрограмма сол жолға жеткенде
Алгоритмдік (логикалық)ТЕК СЕН, тестілеу арқылыТек мұқият тестілегенде

Есіңе түсірейік — Python-дағы негізгі терістеу (exception) түрлері: NameError, ValueError, TypeError, ZeroDivisionError. Бұлар — Python АНЫҚТАЙДЫ ЖӘНЕ ХАБАРЛАЙДЫ. Ал ЛОГИКАЛЫҚ қате — Python ешқашан ХАБАРЛАМАЙДЫ, тек СЕНІҢ ТЕСТІЛЕУІҢ табады.

Толық тест жоспары

Толық тест жоспарын қалай құрамыз? Мысал: a, b екі бүтін сан, a<b болса — өсу ретімен, әйтпесе кему ретімен шығару.

a = int(input())
b = int(input())
if a < b:
    for i in range(a, b+1):
        print(i)
else:
    for i in range(a, b-1, -1):
        print(i)

Есепте ҮШ жағдай бар: a<b, a>b, ЖӘНЕ ЕСКЕРІЛУІ КЕРЕК ТӨРТІНШІ — a=b (шекті жағдай!). Егер a=b болса, кодтың if a<b тармағы ЖАЛҒАН болады, демек else тармағы іске қосылады — БҰНЫ ТЕСТІЛЕУДЕ ТЕКСЕРУ керек: тек БІР ғана сан шығуы керек пе, тексерейік.

Тест жоспары: (1) a<b — қалыпты; (2) a>b — қалыпты (қарама-қарсы бағыт); (3) a=b — ЭКСТРЕМАЛДЫ (шекті жағдай, назардан тыс қалуы оңай!). Мысалы, a=b=7 болса → тек «7» шығады.

Тест жоспарын құрғанда есептің БАРЛЫҚ «тармақтарын» (if/else, шектерін) қарап шық — КОДТЫҢ ӘРБІР ЖОЛЫ КЕМ ДЕГЕНДЕ БІР РЕТ ІСКЕ ҚОСЫЛАТЫНДАЙ тест таңда.

🎯 ҰБТ байланысы
Тестілеу бойынша тексерілетін дағды.
1
Тестілеудің үш кезеңін (қалыпты, экстремалды, ерекше) ажырату.
2
Кодтағы == мен <= сияқты салыстыру операторларын ДӘЛ АЖЫРАТУ.
3
«Қате хабарламасы жоқ» деген нәтижені «программа дұрыс» деп ШАТАСТЫРМАУ.
4
Толық тест жоспарын құру: барлық if/else тармағын, барлық шекті жағдайды қамту.
Сабақ қорытындысы
  • Программаны ҚАЛЫПТЫ, ЭКСТРЕМАЛДЫ және ЕРЕКШЕ жағдайлармен тексеру керек.
  • Қате хабарламасының болмауы программаның ДҰРЫС екенін дәлелдемейді.
  • Алгоритмдік (логикалық) қателерді ТЕК МҰҚИЯТ ТЕСТІЛЕУ таба алады.
  • == мен <= сияқты салыстыру операторларын шатастыру — ЕҢ ЖИІ, БІРАҚ ЕҢ КӨРІНБЕЙТІН қате.
  • Осымен V бөлім — есептің қойылуынан бастап тестілеуге дейінгі толық цикл — аяқталды.