Программирование. Принципы и практика использования C++ Исправленное издание, стр. 382
using namespace std;int main(){ int n = 10000000; // повторяем do_something() n раз clock_t t1 = clock(); // начало отсчета if (t1 == clock_t(–1)) { // clock_t(–1) значит "clock() // не работает" cerr << "Извините, таймер не работает \n"; exit(1); } for (int i = 0; i<n; i++) do_something(); // цикл измерений clock_t t2 = clock(); // конец отсчета if (t2 == clock_t(–1)) { cerr << "Извините, таймер переполнен \n"; exit(2); } cout << "do_something() " << n << " раз занимает " << double(t2–t1)/CLOCKS_PER_SEC << " сек " << " (точность измерений: " << CLOCKS_PER_SEC << " сек)\n";}Функция
clock()clock_tdouble(t2–t1)clock_tclock()clock()t1t2clock()double(t2–t1)/CLOCKS_PER_SECclock()CLOCKS_PER_SEC<ctime>Если функция
clock()clock()clock_t(–1)clock()clock_tintCLOCKS_PER_SEC1000000clock()
26.7. Ссылки
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_search1. Реализуйте оператор ввода для класса
Test2. Заполните файл тестов для последовательностей из раздела 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_search7. Если мы не можем проверить все возможные ошибки, то какие ошибки следует искать в первую очередь?
8. В каких местах кода, манипулирующего последовательностью элементов, вероятнее обнаружить ошибки?
9. Почему целесообразно тестировать программу при больших значениях?
10. Почему часто тесты представляются в виде данных, а не в виде кода?
11. Почему и когда мы используем многочисленные тесты, основанные на случайных величинах?