Шрифт:
12. Почему трудно тестировать программы, использующие графический пользовательский интерфейс?
13. Что необходимо тестировать при проверке отдельного модуля?
14. Как связаны между собой тестируемость и переносимость?
15. Почему классы тестировать труднее, чем функции?
16. Почему важно, чтобы тесты были воспроизводимыми?
17. Что может сделать тестировщик, обнаружив, что модуль основан на непроверяемых предположениях (предусловиях)?
18. Как проектировщик/конструктор может улучшить тестирование?
19. Чем тестирование отличается от отладки?
20. В чем заключается важность производительности?
21. Приведите два (и больше) примера того, как легко возникают проблемы с производительностью.
Ключевые слова
Упражнения
1. Выполните ваш алгоритм
2. Настройте тестирование функции
3. Повторите упражнение 1 с вариантом функции
4. Изобретите формат для тестовых данных, чтобы можно было один раз задать последовательность и выполнить для нее несколько тестов.
5. Добавьте новый тест в набор тестов для функции
6. Слегка модифицируйте калькулятор из главы 7, предусмотрев ввод из файла и вывод в файл (или используя возможности операционной системы для перенаправления ввода-вывода). Затем изобретите для него исчерпывающий набор тестов.
7. Протестируйте простой текстовый редактор из раздела 20.6.
8. Добавьте текстовый интерфейс к библиотеке графического пользовательского интерфейса из глав 12–15. Например, строка
9. Добавьте формат текстового вывода к библиотеке графического интерфейса. Например, при выполнении вызова
10. Используя текстовый интерфейс из упр. 9, напишите более качественный тест для библиотеки графического пользовательского интерфейса.
11. Оцените время выполнения суммирования в примере из раздела 26.6, где
12. Напишите программу, генерирующую случайные числа с плавающей точкой, и отсортируйте их с помощью функции
13. Повторите эксперимент из предыдущего упражнения, но со случайными строками, длина которых лежит в интервале
14. Повторите предыдущее упражнение, но на этот раз используйте контейнер
Послесловие
Как программисты мы мечтаем о прекрасных программах, которые бы просто работали и желательно с первой же попытки. Реальность иная: трудно сразу написать правильную программу и предотвратить внесение в нее ошибок по мере того, как вы (и ваши коллеги) станете ее улучшать. Тестирование, включая проектирование с учетом тестирования, — это главный способ, гарантирующий, что система в итоге действительно будет работать. Живя в высокотехнологичном мире, мы должны в конце рабочего дня с благодарностью вспомнить о тестировщиках (о которых часто забывают).
Глава 27
Язык программирования С
“С — это язык программирования
со строгим контролем типов и слабой проверкой”.
Деннис Ритчи (Dennis Ritchie)
Данная глава представляет собой краткий обзор языка программирования С и его стандартной библиотеки с точки зрения человека, знающего язык С++. В ней перечислены свойства языка С++, которых нет в языке C, и приведены примеры того, как программистам на языке С обойтись без них. Рассмотрены различия между языками C и C++, а также вопросы их одновременного использования. Приведены примеры ввода-вывода, список операций, управление памятью, а также иллюстрации операций над строками.