
- •Кризис программирования и способ выхода из него
- •Модель cmm-sei
- •Управление качеством разработки программного продукта с помощью системы стандартов iso 9001
- •Примерная структура процесса и организации, занимающейся разработкой программных продуктов
- •Контрольные вопросы
- •Оценка технических, нетехнических и финансовых ресурсов для выполнения программного проекта
- •Оценка возможных рисков при выполнении программного проекта
- •6.5. Составление временного графика выполнения программного проекта
- •Собираемые метрики, используемые методы, стандарты и шаблоны
- •Контрольные вопросы
- •Конструирование прототипа
- •Составление спецификаций по требованиям заказчика
- •Собираемые метрики, используемые методы, стандарты и шаблоны
- •Контрольные вопросы
- •Эволюция разработки программного продукта
- •Структурное программирование
- •Объектно-ориентированное проектирование
- •Собираемые метрики, используемые методы, стандарты и шаблоны
- •Контрольные вопросы
- •Тестирование
- •Разработка справочной системы программного продукта. Создание документации пользователя
- •Создание версии и инсталляции программного продукта
- •Собираемые метрики, используемые методы, стандарты и шаблоны
- •Контрольные вопросы
- •Виды тестирования
- •Программные ошибки
- •Тестирование документации
- •Разработка и выполнение тестов
- •Требования к хорошему тесту
- •Классы эквивалентности и граничные условия
- •Тестирование переходов между состояниями
- •Условия гонок и другие временные зависимости
- •Нагрузочные испытания
- •Прогнозирование ошибок
- •Тестирование функциональной эквивалентности
- •Регрессионное тестирование
- •Собираемые метрики, используемые методы, стандарты и шаблоны
- •Контрольные вопросы
- •1. Подготовительная работа, предусматривающая:
- •Контрольные вопросы
- •Классификация поставляемых программных продуктов
- •Действия, выполняемые при поставке программного продукта
- •Контрольные вопросы
- •Основные понятия о надежности программных продуктов и методах ее обеспечения
- •Методы обеспечения надежности на различных этапах жизненного цикла разработки программного продукта
- •Прогнозирование ошибок
- •Шаблон для учета итоговых сведений об ошибках
- •Предотвращение ошибок
- •Шаблон для учета действий по предотвращению ошибок на этапах составления требований, проектирования и разработки
- •Устранение ошибок
- •Обеспечение отказоустойчивости
- •Инструменты, обеспечивающие надежность программных продуктов. План обеспечения надежности
- •Контрольные вопросы
Тестирование переходов между состояниями
В каждой интерактивной программе осуществляются переходы из одного очевидного состояния в другое. Простейшим примером может служить меню. После запуска программы в нем имеется один перечень команд. После выбора одной из них состояние программы меняется и в меню появляются команды, доступные в этом новом состоянии.
Необходимо протестировать каждую предлагаемую программой опцию, каждую команду меню. Команда 10 может быть доступна в режиме, открываемом по команде 9 или по команде 22. В этом случае команду 10 придется протестировать дважды — в обоих режимах. Однако команд меню, всевозможных режимов программы и путей перехода в эти режимы может быть так много, что протестировать их все просто нереально. Поэтому, отбирая тесты для проверки путей выполнения программы, лучше всего руководствоваться следующими принципами:
тестировать все наиболее вероятные последовательности действий пользователей;
если можно предположить, что действия пользователя в одном режиме могут влиять на представление данных или набор предоставляемых программой возможностей в другом режиме, тестировать эти действия;
кроме проведения самых необходимых тестов из тех, что описаны выше, поработать с программой в произвольном режиме, случайным образом выбирая путь ее выполнения.
Переходы между состояниями могут быть гораздо более сложными, чем просто выбор команд меню. Содержимое и структура очередной формы ввода данных могут зависеть от информации, введенной в предыдущей форме, значения одних полей могут определять допустимые значения других, ввод определенной информации может инициировать серию дополнительных запросов. Например, при вводе чисел от 1 до 99 программа выводит одну форму запроса, обращенного к пользователю, а при вводе любых других чисел — другую. В этом случае вместе с классами эквивалентности и их граничными значениями следует проанализировать и возможные пути выполнения программы, чтобы составить действительно полноценный набор тестов.
Очень полезно составление схем меню. В подобной схеме отражаются все состояния программы и команды, вызывающие переходы между этими состояниями. В нее включаются команды, активизируемые через меню, графические средства (например, различные кнопки), и команды, выполняемые после нажатия определенных клавиш. Например, в схеме может быть показан путь от меню «Файл» к команде «Открыть», затем к диалоговому окну «Открытие файла» и назад, к основному состоянию программы. Особенно удобны подобные схемы в случае, если определенное диалоговое окно можно открыть несколькими способами и выйти из него в несколько различных режимов. В этом случае можно нарисовать на схеме все направления переходов и по ним протестировать программу. Это более надежный способ, чем работа с программой без всякого плана с риском пропустить важные взаимосвязи ее состояний.
Условия гонок и другие временные зависимости
Попробуйте вмешаться в работу программы, когда она выполняет переход между двумя состояниями. Понажимайте на клавиши, особенно командные. Попробуйте понажимать на клавиши или по выбирать какие-либо пункты меню, когда программа выполняет операции обработки данных или ввода—вывода, предложите программе ввести или вывести параллельно еще какую-нибудь информацию. Например, во время печати файла попросите ее распечатать еще один.
Если в программе определены ситуации тайм-аута, когда она ждет определенного события в течение заданного времени, а затем переходит в другое состояние, проверьте ее реакцию на действия пользователя, запросы системы или наступление ожидаемого события на границах интервала тайм-аута. Посмотрите, что будет, если событие произойдет за секунду до того, как программа должна прекратить ожидать его, или через секунду после этого.
Протестируйте систему при повышенной нагрузке. В мультизадачной среде запустите несколько других программ и посмотрите, как поведет себя ваша, успешно ли она справится со своей работой. Отправьте большой файл на принтер, чтобы процессор все время переключался на обслуживание печати. Подключите различные внешние устройства и заставьте их генерировать прерывания так часто, как только удастся. Короче говоря, замедлите и нагрузите компьютер, насколько это возможно. В результате ваша программа будет выполняться медленнее, и, быстро вводя данные, можно попробовать превысить ее возможности приема. Если в нормальном режиме работы сбоя программы добиться не удается, это может получиться при повышенной нагрузке.
Выполняя «стандартное» тестирование-программы при сильно повышенной нагрузке, можно столкнуться с совершенно неожиданными ситуациями гонок. Если окажется, что программа в этом отношении уязвима, то необходимо провести в таких условиях полный цикл тестирования. Главная задача — обеспечить такую надежность разрабатываемого программного обеспечения, чтобы оно работало, пусть медленно, но без сбоев в любой системе и при любых дополнительных нагрузках. По крайней мере, необходимо совершенно точно выяснить, какие конфигурации системы являются предельными для эксплуатации программы.