Не трогайте мышь и отойдите от клавиатуры





Скачать 360.39 Kb.
НазваниеНе трогайте мышь и отойдите от клавиатуры
страница7/8
Дата публикации21.08.2013
Размер360.39 Kb.
ТипДокументы
100-bal.ru > Философия > Документы
1   2   3   4   5   6   7   8

Тестируйте требуемое, а не случайное поведение


Кевлин Хенни (Kevlin Henney)

Типичное заблуждение при тестировании состоит в предположении, что нужно тестировать именно то, что делает реализация. На первый взгляд, в этом не видно ничего дурного. Однако если сформулировать эту проблему иначе, она становится понятнее: частой ошибкой при тестировании является привязка тестов к особенностям реализации, тогда как эти особенности являются случайными и не имеют отношения к требуемой функциональности.

Когда тесты жестко связаны с особенностями реализации, изменения в реализации, которые в действительности совместимы с требуемым поведением, могут привести к отказу тестов и появлению ложного срабатывания. Обычно программисты реагируют на это исправлением теста или исправлением кода. Принятие ложного срабатывания за истинное часто является следствием страха, неуверенности и сомнений. Это равносильно признанию случайного поведения за требуемое.

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

Например, в тройственном сравнении типа String.compareTo в Java или strcmp в C требуется, чтобы результат был отрицательным, если левая часть меньше правой, положительным, если левая часть больше правой, и нулем, если они равны. Такого рода сравнение используется во многих API, включая функцию сравнения для qsort в C и compareTo в интерфейсе Java Comparable. Обычно в реализациях для обозначения «меньше» и «больше» используются конкретные значения –1 и +1, в связи с чем программисты иногда ошибочно предполагают, что именно эти значения и выражают действительное требование, и пишут тесты, подкрепляющие это предположение.

Аналогичная проблема возникает с тестами, проверяющими употребление пробелов, точное словоупотребление и другие несущественные аспекты форматирования и представления текста. Пробельные символы не должны влиять на результат, если только вы не пишете, скажем, XML-генератор с настройкой форматирования. Аналогичным образом, жесткое фиксирование кнопок и меток на элементах управления пользовательского интерфейса уменьшает возможность изменить в будущем эти несущественные детали. Мелкие изменения в реализации и несущественные изменения в реализации внезапно приводят к невозможности выполнить сборку.

Слишком конкретные тесты часто создают проблему при модульном тестировании по принципу белого ящика. Тесты белого ящика используют структуру кода, чтобы определить, какие тесты нужны. Типичная ошибка при этом – проверка того, что код делает то, что он делает. Простое подтверждение того, что и так очевидно из кода, не имеет никакой ценности и приводит к возникновению ложного чувства прогресса и надежности.

Чтобы быть эффективными, тесты должны проверять обязательства по контракту, а не бессмысленно повторять реализацию. Они должны рассматривать тестируемые модули как черные ящики, описывая контракты интерфейса в исполняемой форме. Поэтому увязывайте проверяемое поведение с требуемым поведением.

Тесты должны быть правильными и конкретными


Кевлин Хенни (Kevlin Henney)

При тестировании модуля кода важно проверять его требуемое и существенное поведение, а не случайное поведение конкретной реализации. Но из этого не следует, что тесты могут быть неопределенными. Тесты должны быть правильными и точными.

В качестве иллюстрации можно взять тестирование надежных классических процедур сортировки. Едва ли программисты часто занимаются реализацией алгоритмов сортировки, но это такая знакомая всем вещь, что каждый считает, что ему известно, каким должен быть результат. Однако это небрежное знакомство может помешать обнаружению определенных сделанных допущений.

Если спросить у программиста, что он собирается тестировать, то в огромном большинстве случаев он ответит что-то вроде «нужно проверить, что результат будет отсортированной последовательностью элементов». Это правда, но не вся правда. Если предложить уточнить проверяемое условие, то многие добавят, что результирующая последовательность должна быть той же длины, что и исходная. Верно, но и этого мало. Возьмем, например, последовательность:

3 1 4 1 5 9

Следующая последовательность удовлетворяет постусловию сортировки в неубывающем порядке и равенству длин с исходной:

3 3 3 3 3 3

Спецификация выполнена, но вряд ли это то, что должно было получиться! Пример взят из реального промышленного кода (к счастью, ошибка была обнаружена до его выпуска). Ошибочное нажатие на клавиши или потеря внимательности привели к тому, что сложный алгоритм всего лишь помещал в результат первый элемент исходного массива.

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

Даже формулировка постусловия описанным образом не гарантирует, что это хороший тест. Хороший тест должен легко читаться. Он должен быть достаточно понятен и прост, чтобы сразу можно было видеть, корректен он или нет. Если у вас нет готового кода для проверки того, что последовательность отсортирована и что одна последовательность содержит перестановку значений другой, не исключено, что тестирующий код окажется сложнее, чем тестируемый. Как заметил Тони Хоар:

Есть два подхода к проектированию программного обеспечения: можно сделать его таким простым, что отсутствие дефектов очевидно, а можно сделать таким сложным, что в нем нет очевидных дефектов.

Использование конкретных примеров устраняет такую неожиданную сложность и возможность неожиданности. Пусть, например, дана последовательность:

3 1 4 1 5 9

Результат сортировки таков:

1 1 3 4 5 9

Никакой другой результат не подойдет. Другого ответа быть не может.

Конкретные примеры помогают проиллюстрировать общее поведение доступным и однозначным способом. Результатом добавления элемента в пустую коллекцию будет не просто то, что она станет непустой: в коллекции должен быть один элемент, и этот единственный элемент – то, что добавлено. Два или более элементов тоже означают, что коллекция не пуста, но это ошибка. Один элемент в коллекции, но с другим значением – тоже ошибка. Результатом добавления строки в таблицу является не просто то, что в ней становится на одну строку больше; в него также входит то, что по ключу этой строки можно найти ее в таблице. И так далее.

Описывая поведения, тесты должны быть не только правильными – они должны быть точными.
1   2   3   4   5   6   7   8

Похожие:

Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
Разработать обучающую программу, выдающую структурированную и наглядную информацию о работе клавиатуры, буфера клавиатуры, обработчиков...
Не трогайте мышь и отойдите от клавиатуры iconЛитература: Детские народные подвижные игры: Кн для воспитателей...
Игру начинает первая пара: кот ловит мышь, а та бегает вокруг играющих. В опасный момент мышь может спрятаться в коридоре, образованном...
Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
СанПиН 4 178-02). В 2009-2010 учебном году кабинет был оснащен 10 новыми ученическими компьютерами (монитор, системный блок, мышь,...
Не трогайте мышь и отойдите от клавиатуры iconКурсовой проект по дисциплине «Системы программирования и операционные системы»
Резидентный обработчик прерываний от клавиатуры с подключением до системного обработчика
Не трогайте мышь и отойдите от клавиатуры iconИстория
Системные требования: Pentium 90,Win 95/NT, 16 Мб озу, монитор с разрешением 640х480, HiColor (не менее 32 тыс цветов), 4х cd-rom,...
Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
Цель урока: освоение клавиатуры — важнейшего устройства ввода информации в память компьютера
Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
С помощью чего проще набрать текст? Двухкнопочной мыши или 102 клавишной клавиатуры?
Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
Цель: познакомить учащихся с различными устройствами ввода информации в компьютер. Изучить назначения клавиш клавиатуры
Не трогайте мышь и отойдите от клавиатуры iconКомпьютер (арм учителя: монитор+системный блок+клавиатура+мышь)
Начальный курс географии 7 кл. География. Наш дом Земля. Материки, океаны, народы и страны
Не трогайте мышь и отойдите от клавиатуры iconМузыка
Подробная информация о более чем 100 музыкальных инструментов. История возникновения инструментов, возможность прослушать каждый...
Не трогайте мышь и отойдите от клавиатуры iconЛандер Кени «О чем думает Стив»»
Гений цифровой эры, придумавший компьютерную мышь, айфон и многое другое, без чего наша жизнь была бы совсем другой
Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
«Свидетель» уже знала о том, что владеет великим сценарием и хотела присвоить ему звание Лучшего Оригинального Сценария еще до того...
Не трогайте мышь и отойдите от клавиатуры iconВ е д е н и е
Кроме того, к компьютеру могут подключаться принтер для вывода на печать текстовой и графической информации; мышь —устройство, облегчающее...
Не трогайте мышь и отойдите от клавиатуры iconКонспект занятия кружка «Компьютерный мир» 1 кл по теме «Манипулятор «мышь»
Построение парами. Переход на площадку. Построение в шеренгу. В центре площадки ребята образуют круг и делятся на две команды
Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
Продолжение темы Norton Utilities Программа Speed Disk. Программа WipeInfo и другие утилиты. Создание системной дискеты. Драйверы...
Не трогайте мышь и отойдите от клавиатуры iconТема урока: «Компьютер и его основные устройства». Тип урока
Опорные понятия: Периферийные устройства: системный блок, монитор, принтер, сканер, клавиатура, мышь, аудио система


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск