Как стать автором
Обновить

Комментарии 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

А еще по юзабилити насылю пригоршню репортов. Например, что за "Попробуйте ещё!" ? Что я должен попробовать ещё? Этих мягких французких булок :)?

Так что формализмы формализмами, но в конце концов вопрос в том, сколько боли вызывает у человека пользование этой программой.

Я иногда вспоминаю байку про зеркала в лифтах Нью-Йорка. Люди жаловались на медленные лифты, и решить проблему технически было нецелесообразно. Тогда в лифтах по чьему-то предложению поставили зеркала и жалобы прекратились. Людям стало не так томно ждать. В конце концов решает пользовательский опыт. Если приложением комфортно пользоваться, то пользователи могут многое простить.

Цель написания данной статьи лишь в том, чтобы на тривиальных примерах продемонстрировать различие между тремя методами тестирования. Благодарю за такой развернутый и подробный комментарий)

Книгу вы читали в оригинале?

Не совсем так, в сети есть перевод на русский язык от Уфимцевой Галины, можно читать в оригинале параллельно с ним

Понятно, спасибо, нашла)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории