Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

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

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

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

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

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

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

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

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

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

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

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

Упражнения

1. Выполните ваш алгоритм

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

2. Настройте тестирование функции

binary_search
на обработку элементов произвольного типа. Затем протестируйте ее на последовательности элементов типа
string
и чисел с плавающей точкой.

3. Повторите упражнение 1 с вариантом функции

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

4. Изобретите формат для тестовых данных, чтобы можно было один раз задать последовательность и выполнить для нее несколько тестов.

5. Добавьте новый тест в набор тестов для функции

binary_search
и попытайтесь перехватить (маловероятную) ошибку при модификации последовательности.

6. Слегка модифицируйте калькулятор из главы 7, предусмотрев ввод из файла и вывод в файл (или используя возможности операционной системы для перенаправления ввода-вывода). Затем изобретите для него исчерпывающий набор тестов.

7. Протестируйте простой текстовый редактор из раздела 20.6.

8. Добавьте текстовый интерфейс к библиотеке графического пользовательского интерфейса из глав 12–15. Например, строка

Circle(Point(0,1),15)
должна генерировать вызов
Circle(Point(0,1),15)
. Используйте этот текстовый интерфейс для создания “детского рисунка”: плоский домик с крышей, два окна и дверь.

9. Добавьте формат текстового вывода к библиотеке графического интерфейса. Например, при выполнении вызова

Circle(Point(0,1),15)
в поток вывода должна выводиться строка
Circle(Point(0,1),15)
.

10. Используя текстовый интерфейс из упр. 9, напишите более качественный тест для библиотеки графического пользовательского интерфейса.

11. Оцените время выполнения суммирования в примере из раздела 26.6, где

m
— квадратная матрица с размерами 100, 10 000, 1 000 000 и 10 000 000. Используйте случайные значения из диапазона
[–10:10]
. Перепишите процедуру вычисления величины
v
, используя более эффективный (не
O(n2)
) алгоритм, и сравните продолжительность его выполнения.

12. Напишите программу, генерирующую случайные числа с плавающей точкой, и отсортируйте их с помощью функции

std::sort
. Измерьте время, затраченное на сортировку 500 тысяч чисел типа double и 5 миллионов чисел типа
double
.

13. Повторите эксперимент из предыдущего упражнения, но со случайными строками, длина которых лежит в интервале

[0:100]
.

14. Повторите предыдущее упражнение, но на этот раз используйте контейнер

map
, а не
vector
, чтобы сортировать его не требовалось.

Послесловие

Как программисты мы мечтаем о прекрасных программах, которые бы просто работали и желательно с первой же попытки. Реальность иная: трудно сразу написать правильную программу и предотвратить внесение в нее ошибок по мере того, как вы (и ваши коллеги) станете ее улучшать. Тестирование, включая проектирование с учетом тестирования, — это главный способ, гарантирующий, что система в итоге действительно будет работать. Живя в высокотехнологичном мире, мы должны в конце рабочего дня с благодарностью вспомнить о тестировщиках (о которых часто забывают).

Глава 27

Язык программирования С

“С — это язык программирования

со строгим контролем типов и слабой проверкой”.

Деннис Ритчи (Dennis Ritchie)

Данная глава представляет собой краткий обзор языка программирования С и его стандартной библиотеки с точки зрения человека, знающего язык С++. В ней перечислены свойства языка С++, которых нет в языке C, и приведены примеры того, как программистам на языке С обойтись без них. Рассмотрены различия между языками C и C++, а также вопросы их одновременного использования. Приведены примеры ввода-вывода, список операций, управление памятью, а также иллюстрации операций над строками.

  • Читать дальше
  • 1
  • ...
  • 438
  • 439
  • 440
  • 441
  • 442
  • 443
  • 444
  • 445
  • 446
  • 447
  • 448
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: