Обоснование тестов |
13.11.2010 17:16 |
Оригинальная публикация: Test Framing Несколько месяцев назад Джеймс Бах рассказал мне об идее обоснования тестов (test framing). Он определил это как один из необходимых навыков тестировщика и проделал определенную работу по уточнению этой идеи, выполнив обоснование тестов в качестве упражнения вместе с одним из своих онлайн-учеников. Недавно мы дополнительно поработали над совершенствованием этого понятия. 30 сентября 2010 года я выступил с коротким сообщением об обосновании тестов на заседании Ассоциации по качеству программного обеспечения Китченер-Ватерлоо, а также провел четырехчасовой семинар на эту тему на EuroSTAR. Основная идея состоит в следующем. В любой момент тестирования
Обоснование тестов это способность проследить и/или построить логическую цепочку, которая связывает цель тестирования с тестами. Следуя естественному маршруту, логическая цепочка будет затрагивать элементы внутри списка, приведенного выше. Цель обоснования тестов состоит в том, чтобы уметь отвечать на вопросы типа:
Форма, которая используется для обоснования тестов, – это последовательность высказываний и логических связок, связывающих тест с целью. Высказывание – это предложение, которое может быть истинным или ложным. Можно считать, что высказывания – это утвердительные предложения или допущения. Связки – это слова или словосочетания («и», «не», «если», «следовательно», «таким образом», «потому что», «поскольку», «с другой стороны», «но, возможно, что» и так далее), которые соединяют высказывания друг с другом, образуя новые высказывания. Это не строгая формальная система, но она эвристически и корректно структурирована. Вот довольно наглядный пример. Дано: (Цель тестирования:) Обнаружить проблемы, которые могут угрожать ценности продукта, например, неверное поведение программы или потеря данных. Высказывание: Имеется поле ввода. Связка высказываний: ЕСЛИ это поле ввода не является ограниченным, И ЕСЛИ оно вследствие этого переполняет буфер, СЛЕДОВАТЕЛЬНО, существует риск потери данных ИЛИ неверного поведения программы. Высказывание: Чем больше размер набора данных, пересылаемого в это поле ввода, тем больше вероятность стирания программного кода или данных. Связка: СЛЕДОВАТЕЛЬНО, чем больше набор данных, тем выше вероятность возникновения наблюдаемой проблемы. Связка: ЕСЛИ я размещаю в этом поле очень длинную строку, я с большей вероятностью смогу наблюдать проблему. Вывод (тест): СЛЕДОВАТЕЛЬНО я попробую скопировать очень длинную строку в это поле ввода И пронаблюдаю за признаками повреждений, например, мусором в записях, которые я видел раньше в нетронутом виде, или утечкой памяти, или падением программы или другим необычным поведением. Некоторым это может показаться хотя и логичным, но слишком очевидным. Однако, к нашему удивлению, некоторые тестировщики сталкиваются с трудностями при прослеживании пути от цели тестирования до теста, или в обратном направлении от теста к цели – или с быстрым и убедительным восстановлением цепочки рассуждений. Поэтому на тренингах мы выполняем такое упражнение. Тестировщикам предоставляется объект и цель тестирования. Мы предлагаем им описать какой-нибудь тест, а затем просим восстановить их рассуждения. В качестве альтернативы мы могли бы спросить, почему они выбрали именно этот тест, и попросить дать объяснение своего выбора, проследив логическую цепочку обратно к цели. Вы можете выполнить это упражнение и самостоятельно. Если у вас есть тест, который не подвергался обоснованию, попытайтесь обосновать его. Нужно уметь это делать для большинства тестов, но если вам не удается структурировать тест немедленно, возможно, все в порядке. Почему? Потому что, когда мы тестируем, мы не только используем информацию, мы также выявляем ее. Эта выявленная одним тестом информация может использоваться для обоснования каких-то других тестов. После того, как вы выполните корректно обоснованные тесты, добавьте несколько тестов, которым не удается немедленно или полностью построить обоснование. Одной из возможных причин для выполнения теста, не поддающегося обоснованию, является то, что мы всегда работаем со скрытыми обоснованиями. Выявление скрытых или неизвестных обоснований является мотивацией выполнения большого числа случайных автотестов, или стрессового тестирования, или использования иных стилей и методов тестирования, которые могут дать неожиданный результат (но могут и не дать). Тот факт, что вы обнаружили что-то необычное, дает ретроспективное обоснование, почему вы выполнили этот тест. Это обоснование базируется не на известных теориях ошибок, его невозможно дать заранее. Но как бы то ни было, лучше, если вы, а не заказчик,скажете «кто бы мог подумать?» Тестирование – это повествование, состоящее из двух параллельных историй: истории продукта и истории самого тестирования. Мы с Джеймсом уверены, что обоснование тестов – это ключевой навык, который помогает сочинять, редактировать, рассказывать и обосновывать историю тестирования логично, связно и быстро. Обсудить в форуме |