курси програмування для дітей безкоштовно

7 Тестування

У пошуках багів, або тестуємо – не сумуємо!

На цьому занятті ми ще раз потренуємося створювати цикли та дізнаємося як тестувати власні програми. Тестування, то дуже захоплююче! Але спочатку трохи про цикли й відступи в них, бо на початках більшість проблем у юних програмістів з тими відступами…
“Одного пробілу не вистачає, а вже помилка!” 😵‍💫
“Помилок в циклі немає, але програма працює не так! І хто тільки придумав ті цикли !” 🙈🙉

Знайомо? Тоді давайте розбиратися!

Конструктор циклів

Перед зануренням у тестування, давайте згадаємо і детально розберемо відступи у програмі Python. Вони дуже важливі, бо визначають, який код буде виконуватися в середині циклу або умови, а який ні. Подивіться наступний приклад програми. Ми ще не вчили деякі з команди, що тут зображені, але зверніть увагу на відступи.

Саме за допомогою відступів, Python знає, які команди треба виконувати в середині циклу чи умови, а які після завершення.

Приклад з відступами

Ось приклад однакової програми на Scratch і на Python. Програма рахує слоненят до 10, як в старому мультику (“Як Петрик П’яточкін слоників рахував” – мій улюблений мульт дитинства 🥰🐘).

Порівняйте код і спробуйте відповісти на такі питання:

Які команди виконуються до циклу?
Які команди повторюються (тобто знаходяться в середині циклу)?
Які команди виконуються після циклу?

Ось ще один приклад. Тут є і цикл і умова.
Які команди знаходяться в середині циклу і будуть повторюватися 10 разів ?
Які команди знаходяться в середині умови ?

Далі цей же приклад на Python.
Зверніть увагу! Якщо команда знаходиться в середині циклу – треба зробити один відступ. А якщо команда і в середині циклу і в середині умови – 2 відступи. 

Гра: Розставте рядки в програмі 

1: Наступна програма визначатиме суму чисел від 0 до 77. Всі команди вже написані, але вони розкидані в різних місцях. Зберіть з цеглинок Лего програму і перевірте, що вона правильно працює. 

2: (Додаткове) Створіть програму, яка визначатиме добуток чисел від 1 до 100 і виводитиме його на екран.

Тестування

Тестування – важлива складова створення програми. Завжди гарно тестуйте свої програми, щоб писати кращий код.
В IT-фірмах є спеціальні люди, які займаються тестуванням. Вони називаються quality assurance, або просто QA (в народі – тестувальники). Але розробники все одно спочатку самі тестують свій код, а потім передають тестувальникам, щоб вони впевнилися, що все працює.  

Тестувальник – людина, яка бореться з багами

Тестувальник шукає баги. Баг від англ. bug – жучок, так називають помилки в програмах.

Саме ж тестування може бути мануальним або автоматизованим. Мануальне тестування відбувається, коли людина запускає програму і вручну, як звичайний користувач, перевіряє на помилки. Тестувальники-атоматизатори ж пишуть код, яки тестує інший код 😳 (Звучить може і дивно, на перший погляд, але це дуже цікава професія).

Тестувальник як правило не читає код, а працює з вже запущеною програмою. Ми ж сьогодні будемо шукати помилки саме в коді. І не у своєму, а у чужому! Програмісти кажуть, що в чужому коді складніше розбиратися, а якщо цей код не працює, то тим більше. Але ж ми не боїмося труднощів😎 ? Ця навичка допоможе вам з усіма наступними темами в програмуванні! Яка б проста чи складна не була ваша наступна програма, після написання її треба перевірити.

Чи працює вона так, як задумувалося ? Чи в усіх випадках повертає результат ? Які дані можуть змусити повернути помилку чи вплинути на результат ?

Як тестувати свою\чужу програму? 

  1. Перечитайте умову завдання і запустить код. Код виконує те, що вимагали в завданні?
  2. Чи зрозуміло буде користувачеві, як користуватися програмою і які дані вводити? Якщо ні – це проблема, допишіть пояснення, щоб людина знала, як діяти.
  3. Подумайте, які дані треба, щоб перевірити код? Можете написати список даних, за якими треба перевірити роботу програми
  4. Подумайте, які дані можуть зламати програму чи викликати помилку.

Гарний тестувальник, як хакер. Він шукає такі дані, які можна ввести, щоб зламати програму або щоб змусити програму видати неправильний результат.

Ой-йой! Наша перша програма з помилками! 

Далі буде приклад програми, в якій хтось наробив купу помилок. А нам то все розгрібати!

3: Наступна програма має запитувати скільки балів отримав студент університету і виводити оцінку за допомогою літери та пояснення. Студент може набрати від 0 до 100 балів. Ці бали мають переводитися в буквену оцінку (букви від А до F) за допомогою нашої програми:

Скопіюйте собі цю програму і спробуйте її протестувати. Виправте помилки, які ви побачите.

#  Ця програма має запитувати у користувача, який бал він отримав. 
#  І виводити оцінку за допомогою літери та пояснення. 
'''0-34, F – не здав і не можна перездати
35-59, E – незадовільно
60-74, D – задовільно
75-89, C – добре
90-95, В – відмінно
96-100, A – відмінно
'''
mark=int(input(""))
if (mark>0 and mark<33):
  print ("F – не здав і не можна перездати")
elif (mark>59 and mark>74):
  print ("D – задовільно")
elif (mark>75 and mark!=89):
  print ("C – добре")  
elif (mark>90 and mark>=95):
  print ("В – відмінно")  
elif (mark>96):
  print ("A – відмінно")

Ось ця табличка допоможе вам в пошуку і виправленні помилок.
Passed? – чи пройшла тест програма (Так або ні)
Fixed? – чи вправлена помилка? (Так або ні)

Test casespassed?Fixed?
Програма відповідає тому, що написано в умові
Чи зрозуміло буде користувачеві, як користуватися програмою і які дані вводити?
Перевірка виконання кожної з умов
Перевірка граничних значень (можна декілька)
Перевірка, що ввели саме оцінку. Оцінка – це число в межах від ____ до ____. Як програма зреагує, якщо ввести число більше чи менше за те, яке може бути оцінкою?

Пару підказок на випадок, якщо все дуже складно:

  1. Варто зробити так, щоб програма запрацювала хоч якось. Подивіться в якому рядку помилка і виправте.
  2. Додайте пояснення для користувача, що йому вводити.
  3. Спробуйте ввести по одному числу, для кожної оцінки та перевірте, чи програма генерує правильну оцінку. Якщо ні – виправте помилку. Наприклад для числа 96 – програма має видати А, і т.д.
  4. Перевірте граничні значення для кожної умови. Це саме ті числа, які написані в програмі в середині if. Чи програма правильно генерує оцінку для них ? Виправте, якщо ні
  5. Введіть число, більше за 100 або менше ніж 0. Чи правильно веде себе програма ?

4 (Додаткове):  Виправте помилки й в цій програмі також (читайте коментар, щоб зрозуміти, як програма має працювати):

print('=============== ДОДАТКОВЕ  ==================')
#У цій програмі потрібно запропонувати користувачеві ввести число від 0 до 1000.
#Програма повинна вивести на екран усі числа, які діляться одночасно на 3 та 5 

user_numb3 = int(input('Введи будь-яке число від 0 до 1000:'))
i=0        
while user_numb3>i:
    if(i%3==0):
       print(i)
       i=i+1
    if(i%5==0):
       print(i)
       i=i+1
    i=i+1

Ще більше програм для тестування!

 5: Виправте помилки в програмі:

print('=============== Next example  ==================')
# Ця програма запитує у користувача число. 
# Потім виводить всі числа, що діляться на 7 від 1 до цього числа

i = 0
a = int(input('Your number:'))
while a<i:
    if (i%7!=0):
      print("Ділиться на 7: " , i)
    i = i+1

 6: Виправте помилки (Ой! Та це ж з домашки!)

'''Ця програма виводить номер місяця(січень=0, грудень=11) і після нього малює сердечко. Виберіть один або кілька  місяців, які вам не подобаються. Змініть програму так, щоб після такого місяця сердечко не виводилось (Скористайтеся continue і не забудьте додати  month+=1 в умову, щоб цикл не був нескінченним) '''

month=0
while month<12: 
  print("Month number: ",month )
  print("..OO.OO..")
  print(".OOOOOOO." )
  print(".OOOOOOO." )
  print("..OOOOO.." )
  print("...OOO..." )
  print("....O...." )
  month+=1 
number=0
while number<0:
  nuber+=1
while number<13:
  break

 

 7: Виправте помилку у програмі, яка рахує час до запуску ракети в космос від 10 секунд і до 0. Замість правильної роботи в програмі зараз нескінченний цикл. Яку команду треба дописати, щоб цей цикл не був нескінченним ? 

import time
i=10
print ("До запуску ракети лишилось 10 секунд")
while i>0:
  print (i, " секунд")
  time.sleep(1) # Sleep for 1 second
print ("Ракета полетіла!!")

Так має працювати програма:

 8  (Додаткове):  Виправте помилки в цій програмі (Уважно прочитайте умову!!)

print('=============== Next example  ==================')

# Користувач вводить рік. Програма має визначити кількість днів у цьому
# році й вивести на екран (365 - якщо рік невисокосний і 366 - якщо високосний рік)
year = int (input(Скільки днів  в цьому році'))
if (year==365):
 print(' не високосний')
elif(year==366):
 print('високосний'')

 9  (Додаткове):   Граматичні помилки – це теж помилки. Спробуйте знайти їх і виправити (дана програма працює правильно, в ній лише граматичні помилки). Це програма особистого тренера, який визначає яке тренування треба зробити в заданий день місяця.

print('=============== Next example  ==================')
day=int(input('Ден:'))
if (day<10) and (day>1):
elif (day<20) and (day>10):
  print('седня стоіш в планці 40 сек, ')
elif (day<30) and (day>20):
  print('седня стоішь в паланці for 60 сек, ')
if (day%2==0):
   print('Отажмись 20 рас, ')
else:
  print('Отожмсь 5 рас, ')
if (day%5==0 and day!=10):
   print('присідаімо 40 раз, ')
if (day==10) or (day==30):
  print('робіть берби 10 разів')
if (day%4==0):
  print ('кочаемо прес 40 раз. ')
elif (day%5==0):
  print ('кочаемо прес 60 рас. ')
elif (day%7==0):
  print ('кочаемо прес 70 рас. ')
input()
  print('седня стоіш в планці 30 ск, ')

10 (Додаткове):  Допишіть програму, подану нижче. Зараз вона виводить всі дні в грудні. Вам треба дописати такий код, щоб коли випадало 25 або 31 число, замість звичайних фраз програма писала “Свято!!!”. (Вам знадобиться continue та не забудьте перед ним додати day+=1, без цього буде нескінченний цикл)

day=1
while day<=31: 
  # допишиіть код тут
  print("Звичайний день:  ", day, " грудня")
  print("Нічого святкувати")
  print("Коли вже свято?...")
  day+=1
домашка з програмування

Домашнє завдання

1: Створіть програму, яка виводить суму всіх чисел від 1 до 100. 

2: Створіть програму, яка виводить суму всіх парних чисел від 1 до 100.

3: Є така гра на уважність, в якій треба назвати всі числа від 1 до 30, але замість чисел, які діляться на 3 або закінчуються на 3, треба назвати своє ім’я. Створіть програму, яка буде робити те саме. 

Приклад роботи:

1
2
Аня
4
5
Аня
7
8
Аня
10
11
Аня
Аня
14
...

4-5:  Скопіюйте і запустіть програму нижче. Порівняйте умови і результат роботи програми. Знайдіть і виправте помилки в ній

Спортивні нормативи по бігу на дистанцію 100 м:

ДистанціяКМС (кандидат у майстри спорту)I розрядII розрядIII розряд
100 мшвидше за 10.7від 10.7 до 11.2
(11 секунд і 2 мілісекунди)
від 11.2 до 11.8від 11.8 до 12.6
Таблиця показує, який розряд чи звання може отримати спортсмен залежно від того, за який час він подолав дистанцію
print('=============== Next example  ==================')

print("Ця програма визначає розряд з легкої атлетики.")
print("Напиши за скільки секунд і за скільки мілісекунд ти пробіг 100 м")

count=float(input ('Твій час (введи, наприклад: 13.5 це значить 13 секунд і 5 мілісекунд)'))
if (count>11.8) and (count<12.6):
   print('3 розряд ')
elif (count>11.2) and (count<11.8):
  print('2 розряд ')
elif (count>10.7) and (count<11.2):
  print('1 розряд ')
elif (count<12.6):
  print('занадто повільно ')
elif (count>10.7):  
  print('кандидат у майстри спорту')
else:
  print
домашка з програмування

Level Up!

1: Напишіть програму, яка збільшує число у два рази з кожним заходом. Починаємо рахувати з числа 1, закінчуємо, коли число стане більшим за 2 000.

Приклад виводу:

1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024

2: Знайдіть добуток всіх чисел, які діляться на 3,  із діапазону, який введе користувач. Додайте необхідні перевірки того, що користувач правильно ввів дані. Якщо дані неправильні, виведіть повідомлення про помилку.

Приклад роботи:

Введіть перше число: 6
Введіть друге число: 15
42

Введіть перше число: 23
Введіть друге число: 1
Помилка. Перше число має бути меншим за друге

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *