|
1. Что означают следующие термины:
а) живучесть программы, б) тестирование ветвей, в) тестирование элементов, г) приемочный контроль, д) промышленные испытания, е) избыточное тестирование, ж) проверка спецификаций, з) дымовой тест, и) системные испытания, к) полевые испытания, л) утверждение, м) профессиональный идиот.
2. Чем отличается отладка программы от тестирования? Считаете ли вы, что тестирование и отладка программы должны быть самостоятельными стадиями? Если да, то почему?
3. Какие обычно выдвигаются оправдания при отказе программы?
4. Назовите ряд преимуществ планирования испытаний.
5. Когда возникает потребность в тестировании программы профессиональным испытателем?
6. Перечислите преимущества использования специальных подпрограмм при проведении тестирования.
7. Назовите три способа определения результатов, которые должны соответствовать тестовым данным.
8. Почему важно выполнять повторное тестирование?
ЗАДАНИЯ
9. Как вы думаете, достаточно ли, чтобы контрольные примеры проверяли каждый исключительный случай отдельно или необходимо создавать еще и комбинации исключительных условий?
10. Почему целесообразно обрабатывать большие объемы реальных тестовых данных, даже если нет возможности проверить достоверность этих результатов?
11. Подыщите пример проекта, который был забракован на стадии тестирования. Проанализируйте, что явилось причиной такого положения: плохая подготовка тестов, неудачные проектные решения, изменение первоначальных требований или какие-либо другие факторы?
12. Возьмите какую-нибудь простую программу и подсчитайте з ней количество различных логических путей. Возможно ли для этой программы исчерпывающее тестирование? Какие вам известны способы уменьшения количества тестируемых путей?
13. Разработайте контрольные примеры для тестирования программы, которая а) считывает два целых числа и определяет их наибольший юбщий делитель, б) считывает два целых числа и определяет их наименьшее общее кратное.
14. Разработайте контрольные примеры для проверки одной из программ, приведенных ниже. Определите нужные для каждой программы классы тестовых данных. Каково минимальное число тестов, необходимое для каждой программы? Что представляют собой их граничные точки?
а) Программа извлечения квадратного корня.
б) Программа, которая считывает три числа, являющиеся по ^предположению длинами сторон некоторого треугольника, и затем печатает сообщение о типе треугольника (с разными сторонами, равнобедренный или равносторонний).
в) Программа, которая считывает две даты и вычисляет количество прошедших дней.
г) Программа, которая считывает значение числа N, затем считывает N чисел и печатает максимальное и минимальное значения чисел в группе.
д) Программа, которая считывает некоторый элемент данных я проверяет, нет ли такого же элемента в хранимом массиве.
15. Обратитесь к имеющимся у вас руководствам по программированию и определите допустимые области значений аргументов для следующих функций:
логарифма с основанием 10, косинуса, логарифма с основанием е, гиперболического синуса, синуса, гиперболического косинуса.
Напишите программу для вычисления одной из этих функций, попробуйте нарушить допустимые границы аргумента и понаблюдайте, что при этом произойдет.
16. Любая функция, описываемая математическим выражением, вычисляется не совсем точно вследствие ошибок, свойственных вычислительному процессу. Попробуйте найти в руководстве данные о величине ошибки, возникающей при вычислении значений таких функций, как SQRT, SIN, TAN и др.
17. Подготовьте для какой-нибудь программы а) тестовые данные, создаваемые программистом;
б) реальные модифицированные данные;
в) реальные данные в полном объеме.
18. Дана формула у_ аЬ с + <1
ей а — Ь
Подготовьте контрольные примеры для проверки соответствующей программы а) в нормальных условиях, б) в экстремальных условиях, в) в исключительных ситуациях.
19. Вспомните случай отказа какой-нибудь программы при рабочем прогоне. Определите, могли ли хорошо спланированные испытания выявить ошибку, вызвавшую отказ.
20. Какие подпрограммы автоматического тестирования доступны в используемом вами языке программирования?
21. Какие у вас имеются программы-утилиты, пригодные для использования при тестировании рабочих программ?
22. Напишите программу для системы резервирования мест на •авиалиниях. Известно, что ежедневно выполняются пять рейсов под номерами 142,. 148, 153, 181 и 191. Заказы принимаются только за неделю вперед. Ваша программа должна удовлетворять заявки, аннулировать заказы и отказывать в резервировании мест, если самолет уже полностью укомплектован пассажирами. Для упрощения считайте, что самолет вмещает шесть пассажиров. Имеются три класса мест: первый, туристский и студенческий. Если хотите, программу можно усложнить, введя правило, по которому пассажиры первого класса имеют более высокий приоритет по сравнению с туристами, туристы — более высокий приоритет по сравнению со студентами и т. д. Разработайте несколько контрольных примеров для тестирования этой программы.
23. Исходя из собственного опыта программирования, определите, какой процент вашего времени уходит на написание, отладку и тестирование программы.
24. Возьмите какую-нибудь хорошо знакомую вам программу и разработайте тесты для проверки ее а) в нормальных условиях, б) в экстремальных условиях, в) в исключительных случаях.
25. Напишите программу нахождения кубического корня из заданного числа и используйте ее же для проверки точности вычислений.
26. Напишите программу нахождения корней квадратного уравнения ах2 + Ьх+с=0.
Корни определяйте по формуле
—Ь± у/'Ь2 — 4ас х=-2а--
Используйте ту же программу для проверки правильности решения путем подстановки найденных корней в исходное уравнение и сравнения результата с нулем. Выполните тестирование программы вначале с помощью собственных тестовых данных, а затем примените для тестирования следующие контрольные примеры:
|
а
|
Ь
|
с
|
а
|
Ь
|
с
|
|
|
|
|
|
|
—4
|
|
|
—1
|
—6
|
6*1030
|
5*1030
|
—4* 10^>
|
|
|
• —10
|
|
Ю-зо
|
— 108<>
|
Юзо
|
|
|
—1000
|
|
1.0
|
—4.0
|
3.9999999
|
|
|
—10000
|
|
ко
|
—4.0
|
4.0
|
|
|
|
о
|
1.0
|
100.0001
|
0.01
|
В заключение перепрограммируйте задачу заново с использованием данных повышенной точности и отметьте, улучшилось ли качество результатов.
27. Разработайте тестовые данные для программы "естественного отбора", работающей по следующему алгоритму: вычисляется среднее значение и и стандартное отклонение 5 видового признака I по формулам
 и затем объекту присваивается оценка А, если видовой признак принимает значения, большие или равные и+2$;
оценка В, если видовой признак больше или равен и+э, но меньше "+25;
оценка С если видовой признак больше или равен и—я, но меньше оценка Д если видовой признак больше или равен и—25, но меньше и—я;
оценка если видовой признак принимает значения меньше и—25.
28. Предположим, что ваша ЭВМ может работать с числами, содержащими не более шести значащих разрядов, но вам необходимо выполнить сложение с сохранением восьми значащих разрядов. Вы решили эту проблему путем разбиения задаваемых чисел на две тетрады и последующего раздельного сложения соответствующих тетрад. Так, например, число 00123456 было бы преобразовано в две тетрады 0012 и 3456 и сложение чисел 00123456 и 65432100 приняло бы вид
0012 3456 6543 2100 6555 5556
Ваша программа, предназначенная для выполнения сложения восьмиразрядных чисел указанным способом, должна работать как с положительными, так и с отрицательными числами. Вначале разработайте для этой задачи тестовые данные; затем напишите программу и испытайте ее с помощью ваших тестовых данных.
ПРОЕКТЫ
29. В этой главе было рассмотрено несколько генераторов тестовых данных. Исследуйте, какие еще аналогичные пакеты программ доступны для использования, и оцените их полезность. Разработайте набор требований, которым должен удовлетворять хороший генератор тестовых данных.
30. Выше были описаны некоторые дополнительные средства тестирования. Оцените степень их доступности и полезности. Ряд пакетов тестирования рассматривается также в книге под редакцией Гетцеля [7], посвященной методам тестирования программ.
31. Компаратор файлов. Напишите или возьмите готовую программу, которая считывала бы два файла, сравнивала их между собой и выводила на печать лишь различающиеся элементы. Оформите необходимую программную документацию и сделайте вашу программу общедоступной для пользователей вашего вычислительного комплекса. Подобная программа (FILCOM) на языке БЕЙСИК-ПЛЮС имеется в составе программного обеспечения машин PDP.
32. Соберите статистические данные, характеризующие а) время, затрачиваемое на разработку, кодирование, отладку и тестирование программ, б) объем программ, в) используемый язык программирования, г) квалификацию программиста. '
Попытайтесь установить, существуют ли между этими характеристиками корреляционные связи; например, оказывает ли влияние используемый язык или время, затраченное на разработку программы, на продолжительность стадий тестирования или отладки.
Тем, кто интересуется подобными вопросами, рекомендуется ознакомиться со статьей Боэма и книгой Вейнберга1*.
33. Для оценки надежности программного обеспечения могут использоваться следующие характеристики:
а) среднее время наработки между ошибками, характеризующее средний интервал времени между прерываниями по программным ошибкам;
б) среднее время восстановления, показывающее как быстро выполняется необходимая корректировка программы при обнаружении в ней ошибки;
в) коэффициент готовности, определяющий долю времени, в течение которого программное обеспечение находится в работоспособном состоянии;
г) график распределения числа ошибок по календарным месяцам, позволяющий по крутизне кривой приближенно судить о достигнутом прогрессе.
Проанализируйте указанные характеристики и примените какие-нибудь из них для оценки надежности используемых вами программных средств.
34. Напишите программу, которая генерировала бы достаточно полный набор тестовых данных для проверки способности используемого вами компилятора выявлять синтаксические ошибки в арифметических выражениях, операторах вызова подпрограмм и циклах оператора DO.
35. Разработайте тестовые данные для детальной проверки одной из программ вычисления значений стандартных функций, таких, как абсолютная величина переменной, квадратный корень, синус, косинус и т. д. Какими должны быть критические значения тестовых данных?
36. Многие пытаются Доказывать правильность программы, используя те же приемы, что и математики при доказательстве правильности математических построений. Изучите современное состояние проблемы доказательства правильности машинных программ и подумайте, какое влияние на программирование может оказать применение подобных доказательств?
37. Представляется полезным иметь на вооружении какой-либо метод определения степени полноты тестирования систем программного обеспечения. Ряд принципов, относящихся к этому вопросу, изложен в данной главе. Попытайтесь на основе изложенных представлений разработать свой способ оценки полноты проверки программ. Для выполнения этой работы рекомендуется также обратиться к материалу гл. 4, касающейся проблем отладки.
38. Журнал программных испытаний. Подобно обычному дневнику, этот документ фиксирует ход тестирования программ. Он может использоваться на заключительной стадии осуществления
l) Boehm В., Software and Its Impact: A Quantitative Assessment, Datamation (May 1973); Weinberg G., Psychology of Computer Programming.
проекта для оценки успеха реализации плана испытаний. Кроме того, три наличии такого журнала никому не захочется оставлять в нем запись, аналогичную следующей: "Тест номер 2 должен быть повторен, так как был составлен мною неправильно". Попробуйте вести такой журнал в процессе испытаний какой-либо программы.
39. Программы-профилировщики. Существует целый ряд пакетов программ, предназначенных для анализа последовательности действий, выполняемых рабочей программой. Эти служебные программы подсчитывают, какое количество раз выполнялся каждый оператор, а иногда еще и проверяют программу на наличие ошибок и непредусмотренных свойств. Вот некоторые из упомянутых пакетов:
а) Пакеты COTUNE — профилировщик КОБОЛа и FOTUNE — профилировщик ФОРТРАНа (САРЕХ Corp., 2613, North Third Street, Phoenix, Ariz. 85004).
б) Пакет PROFILE (CACI, Inc., 12011 San Vincente Blvd., Los Angeles, CA. 90049).
в) Пакет метаКОБОЛ (Applied Data Research, Route 206 Center, Princeton, N. J. 08540).
г) Пакет RXVP (General Research Corp., 5383 Hollister Ave., Santa Barbara, Ca).
д) Пакет PET — Program Evaluator and Tester (McDonnell Douglas Astronautics Company). Последние два пакета описываются Гилбом в статье, вошедшей в Труды симпозиума IEEE 1973 г. по вопросам надежности программного обеспечения ЭВМ й в книге Software Metrics. Ознакомьтесь с описаниями перечисленных выше пакетов и отыщите информацию о других подобных пакетах. Определите их сходство и различия и укажите полезные свойства этих программных средств применительно к их использованию для тестирования программ.
40. Двойное программирование. Если определение результатов контрольных примеров вызывает серьезные затруднения, то можно применить подход, при котором две различные группы программируют одну и ту же задачу на разных языках. В связи с тем, что тестирование — процедура довольно дорогостоящая, а процессы разработки алгоритма и анализа при рассматриваемом подходе являются общими для обеих программ, введение дополнительного программирования обычно не очень сильно влияет на общие затраты. Попробуйте для какой-нибудь задачи применить двойное программирование; более детально с этим методом можно ознакомиться в гл. 4 вышеупомянутой книги Гилба.
41. Соберите данные о различных типах ошибок программирования. Предварительно изучите две полезные статьи на эту тему1*.
!> Endres A., An Analysis of Errors and Their Causes in System Programs, IEEE Transactions of Software Engineering (June 1975); Boehm В., Software and Its Impact: A Quantitative Assessment, Datamation (May 1973).
42. Степень сложности. Степенью сложности программы могут служить следующие ее характеристики:
а) число различных логических путей в программе, б) число операторов IF и их процент относительно использования всех операторов, в) средний размер модуля.
Эти характеристики можно опеределять с помощью специальной программы. Напишите такую прорамму. Используя ее на практике, вы можете прийти к выводу, что некоторые программы излишне сложны и неудобны для тестирования или эксплуатации и поэтому они должны быть забракованы и переписаны заново. Предложите принцип подобного отбора.
43. В книге Гилба Software Metrics в качестве меры надежности / программного обеспечения предлагается величина, равная
j_j Количество прогонов, во время которых^ выявились ошибки
Общее количество прогонов
Оцените достоинства и недостатки этой меры как характеристики программного обеспечения.
44. Контроль за тестированием. Это мероприятие представляет собой коллективную оценку качества тестирования программного обеспечения. Список данных, необходимых для осуществления такого контроля, разработан Ларсоном и приведен в приложении В упомянутой книги Гилба. Установите контроль за тестированием каких-нибудь программ для оценки полноты их проверки.
⇐5.25. Советы программисту5 || Оглавление || Литература5⇒
Обои Marburg в Москве: обои marburg. Выбор современных обоев. |