Читаем Программирование полностью

Если функция clock() для процессора не предусмотрена или временной интервал слишком длинный, функция clock() возвращает значение clock_t(–1). Функция clock() предназначена для измерения временных интервалов, длящихся от доли секунды до нескольких секунд. Например, если (что бывает довольно часто) тип clock_t представляет собой 32-битовый тип int со знаком и параметр CLOCKS_PER_SEC равен 1000000, мы можем использовать функцию clock() для измерения интервалов времени продолжительностью от 0 до 2000 секунд (около половины часа), выраженных в микросекундах.

  Напоминаем: нельзя доверять любым измерениям времени, которые нельзя повторить, получив примерно одинаковые результаты. Что значит “примерно одинаковые результаты”? Примерно 10%. Как мы уже говорили, современные компьютеры являются быстрыми: они выполняют миллиард инструкций в секунду. Это значит, что вы не можете измерить продолжительность ни одной операции, если она не повторяется десятки тысяч раз или если программа не работает действительно очень медленно, например, записывая данные на диск или обращаясь в веб. В последнем случае вы должны повторить действие несколько сотен раз, но медленная работа программы должна вас насторожить.

<p id="AutBody_Root530"><strong>26.7. Ссылки</strong></p>

Stone, Debbie, Caroline Jarrett, MarkWoodroffe, and Shailey Minocha. User Interface Design and Evaluation. Morgan Kaufmann, 2005. ISBN 0120884364.

Whittaker, James A. How to Break Software: A Practical Guide to Testing. Addison-Wesley, 2003. ISBN 0321194330.

Задание

Протестируйте функцию binary_search.

1. Реализуйте оператор ввода для класса Test из раздела 26.3.2.2.

2. Заполните файл тестов для последовательностей из раздела 26.3.

 2.1. { 1 2 3 5 8 13 21 }        // "обычная последовательность"

 2.2. { }

 2.3. { 1 }

 2.4. { 1 2 3 4 }                // нечетное количество элементов

 2.5. { 1 2 3 4 5 }              // четное количество элементов

 2.6. { 1 1 1 1 1 1 1 }               // все элементы равны

 2.7. { 0 1 1 1 1 1 1 1 1 1 1 1 1 }   // другой элемент в начале

 2.8. { 0 0 0 0 0 0 0 0 0 0 0 0 0 1 } // другой элемент в конце

3. Основываясь на разделе 26.3.1.3, выполните программу, генерирующую следующие варианты.

 3.1. Очень большая последовательность (что считать большой последовательностью и почему?).

 3.2. Десять последовательностей со случайным количеством элементов.

 3.3. Десять последовательностей с 0, 1, 2 ... 9 со случайными элементами (но упорядоченные).

4. Повторите эти тесты для последовательностей строк, таких как { Bohr Darwin Einstein Lavoisier Newton Turing }.

Контрольные вопросы

1. Создайте список приложений, сопровождая их кратким описанием наихудшего события, которое может произойти из-за ошибки; например, управление самолетом — авиакатастрофа: гибель 231 человека; потеря оборудования на 500 млн. долл.

2. Почему мы не можем просто доказать, что программа работает правильно?

3. В чем заключается разница между модульным и системным тестированием?

4. Что такое регрессивное тестирование и почему оно является важным?

5. Какова цель тестирования?

6. Почему функция binary_search просто не проверяет свои требования?

7. Если мы не можем проверить все возможные ошибки, то какие ошибки следует искать в первую очередь?

8. В каких местах кода, манипулирующего последовательностью элементов, вероятнее обнаружить ошибки?

9. Почему целесообразно тестировать программу при больших значениях?

10. Почему часто тесты представляются в виде данных, а не в виде кода?

11. Почему и когда мы используем многочисленные тесты, основанные на случайных величинах?

12. Почему трудно тестировать программы, использующие графический пользовательский интерфейс?

13. Что необходимо тестировать при проверке отдельного модуля?

14. Как связаны между собой тестируемость и переносимость?

15. Почему классы тестировать труднее, чем функции?

16. Почему важно, чтобы тесты были воспроизводимыми?

17. Что может сделать тестировщик, обнаружив, что модуль основан на непроверяемых предположениях (предусловиях)?

18. Как проектировщик/конструктор может улучшить тестирование?

19. Чем тестирование отличается от отладки?

20. В чем заключается важность производительности?

21. Приведите два (и больше) примера того, как легко возникают проблемы с производительностью.

Ключевые слова

Упражнения

1. Выполните ваш алгоритм binary search из раздела 26.1 с тестами, представленными в разделе 26.3.1.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных