Комментарии 6
Тестирование на основе модели (model based testing) выглядит на первый взгляд как "ну вот же он - путь к полному покрытию!". На практике проблема в том, что, и примите это за эмпирическое правило, количество трудозатрат на полное тестирование приложения минимум равно трудозатратам на его разработку.
Это свойство происходит из Теоремы Райса: "для любого нетривиального свойства вычислимых функций определение того, вычисляет ли произвольный алгоритм функцию с таким свойством, является алгоритмически неразрешимой задачей" Т.е. выполняет ли функция sum в программе задачу сложения - алгоритмически неразрешимая задача. И мы начинаем понимать, что оказывается наши программные решения вообще никакой полнотой обладать не могут. А если решения не обладают полнотой, то и их тестирование не может обладать полнотой.
Можно упрарываться по формализму. Но если уж на то пошло, то надо упрываться по формализму в спецификации и брать какой-нибудь TLA+ и покинуть с его помощью вообще плоскость производственной реальности.
На практике тестирования я нафиг шлю все графы разветвлений условий, кидаю два раза подряд "ß" на промт и программа летит в космос.
Traceback (most recent call last):
File "main.py", line 60, in run
first = int(input('Укажите первое число: '))
ValueError: invalid literal for int() with base 10: 'ß'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "main.py", line 80, in <module>
run()
File "main.py", line 63, in run
first = int(input('Вы ввели некорректные данные. Пожалуйста, введите целое число.'))
ValueError: invalid literal for int() with base 10: 'ß'
Или ввожу 0, 0, % и программа отваливается, потому что процент тоже состоит из деления и этот случай не отлавливается как в случае с делением.
Traceback (most recent call last):
File "main.py", line 80, in <module>
run()
File "main.py", line 73, in run
result = calc(first, second, op)
File "main.py", line 34, in calc
result = first / second * 100
ZeroDivisionError: division by zero
А еще по юзабилити насылю пригоршню репортов. Например, что за "Попробуйте ещё!" ? Что я должен попробовать ещё? Этих мягких французких булок :)?
Так что формализмы формализмами, но в конце концов вопрос в том, сколько боли вызывает у человека пользование этой программой.
Я иногда вспоминаю байку про зеркала в лифтах Нью-Йорка. Люди жаловались на медленные лифты, и решить проблему технически было нецелесообразно. Тогда в лифтах по чьему-то предложению поставили зеркала и жалобы прекратились. Людям стало не так томно ждать. В конце концов решает пользовательский опыт. Если приложением комфортно пользоваться, то пользователи могут многое простить.
Книгу вы читали в оригинале?
Методы тестирования ПО на примере консольного приложения