
- •1. Жизненный цикл программной системы.
- •2. Классический подход к созданию программных систем.
- •3. Понятия связности модулей и сцепления модулей.
- •4. Структурное программирование.
- •Структурное тестирование программного обеспечения
- •1. Связь процессов тестирования и процессов проектирования.
- •2. Уровни тестирования и виды тестирования.
- •3. Стратегия тестирования.
- •4. Тестирование программного модуля.
- •5. Восходящее и нисходящее тестирование.
- •6. Методы тестирования: модифицированный нисходящий, монолитный, сандвич, модифицированный сандвич.
- •7. Системное тестирование: метод функциональных диаграмм.
- •Объектно-ориентированный подход к разработке по
- •1. Абстрагирование и инкапсуляция
- •2. Модульность программных систем
- •3. Виды иерархий в программных системах.
- •4. Понятие объекта. Состояние, поведение и индивидуальность объекта.
- •5. Отношение между объектами: использование, включение.
- •6. Отношение простого наследования классов.
- •7. Добавление, замещение и уточнение методов класса при наследовании.
- •8. Отношение ассоциации между классами, включая агрегацию.
- •9. Отношение зависимости между классами, отношение реализации.
- •Шаблоны проектирования
- •1. Шаблон «Одиночка» Singleton
- •2. Шаблон «Фабричный метод» Factory Method
- •3. Шаблон «Декоратор» Decorator
- •4. Шаблон «Стратегии» Strategy
- •5. Шаблон «Компоновщик» Composite.
- •6. Шаблон «Наблюдатель» Observer
- •7. Архитектурные шаблоны (парадигмы).
- •Унифицированный процесс разработки по (rup)
- •1. Основные черты. Фазы и основные потоки работ.
- •2. Документ «Видения». Модель и словарь предметной области.
- •3. Функциональные и нефункциональные требования к системе. Варианты использования системы.
- •4. Прецеденты и отношения между вариантами использования (прецедентами).
- •5. Модель анализа и классы анализа.
- •6. Архитектурное представление.
3. Стратегия тестирования.
Принцип «черного ящика» (по спецификациям – формальное тестирование).
- анализируются спецификации входных и выходных данных и т.д., тесты должны охватить все варианты входных и выходных данных.
Проблемы:
Большое количество тестов. Надежность проверяется всеми возможными последовательностями с анализом поведения.
Полное тестирование выполнить невозможно.
В теории графов имеется понятие циклическое число – количество независимых путей выполнения процедуры. Независимые пути – это пути, которые различаются хотя бы одной ветвью управления. Циклическое число равно количеству ветвлений плюс одно ветвление: V(G) = P + 1.
Проблемы, связанные с проводимыми тестами:
долгое время подготовки тестов;
долгое время исполнения тестов;
возможные ошибки при составлении тестов и анализе результатов;
отсутствие контроля спецификаций;
отсутствие контроля отсутствующих путей;
пропуск ошибок из-за чувствительности к данным.
Количество всевозможных комбинаций входных данных превышает количество путей.
Вывод: полное тестирование невозможно.
Принцип «белого ящика» (по коду – содержательное тестирование).
- анализируется логика по тексту программы; требование к тесту – прохождение по всем ветвям пути, хотя бы один раз.
Проблемы:
При тестировании всей программы нет проверки на соответствие спецификациям.
Отсутствие необходимых путей (рассматриваются не все варианты, только те, что в коде)
Чувствительность к данным.
При большом количестве ветвлений в программе количество вариантов для тестирования становится непомерно большим.
Вывод: Очень много всевозможных путей, следовательно, полное тестирование невозможно.
4. Тестирование программного модуля.
Цель тестирования модуля: выявить несоответствие логики работы модуля с его спецификацией.
Модуль – минимальная единица программирования (процедура, метод, класс).
Составляется в соответствии со спецификацией тест как «черный ящик». Из спецификации выявляются классы эквивалентности для входных и выходных данных. Класс эквивалентности – множество однородных наборов данных.
Тестирование базового пути (каждая ветвь при ветвлении в модуле должна быть выполнена хотя бы 1 раз).
Выполняется в соответствии со стратегией содержательного тестирования (проверяется каждая ветвь).
Тестирование прохождения циклов (проверяются не все значения, по одному из диапазонов значений – крайние, промежуточное, все значения находятся в области допустимых значений).
Тестирование устойчивости к данным. Локальные переменные приняли граничные значения, возникла ситуация деления на ноль, переполнение.
5. Восходящее и нисходящее тестирование.
Цель интегрированного тестирования - выявление ошибок в механизмах интеграции модулей.
Порядок выполнения ИТ определяется порядком проектирования.
Восходящее тестирование – программа тестируется снизу вверх:
-автономно тестируются только модули нижнего уровня (модули, не вызывающие другие модули);
- далее происходит интеграция на более высоких уровнях.
Для тестирования снизу вверх необходимо количество драйверов (процедура, которая используется для тестирования других процедур) равное количеству модулей, за исключением родительского (корневого) модуля.
Недостаток: поздно выявляются принципиальные ошибки (только на высших уровнях).
Нисходящее тестирование – тестирование сверху вниз.
Автономно тестируется только модуль первого уровня.
На первом этапе для этого модуля создаются заглушки (stub), эмитирующие модули нижнего уровня. Так как это заглушки, а не сами модули, то тестирование ненадежно.
Ненадежность тестирования:
заглушки, а не сами модули (на первом этапе)
ограничение передачи данных модуля верхнего уровня
необходимость модуля нижнего уровня для модуля верхнего уровня (модулей ввода-вывода), решением чего является создание веток к модулям ввода/вывода
Недостатки:
низкая надежность тестирования модуля нижнего уровня (из-за недостаточности данных у модулей верхнего уровня)
наличие большого числа отложенных решений (создание большого количества заглушек или модулей-каркасов нижнего уровня).
Достоинства:
1. на ранних стадиях выявляются ошибки на функциональном уровне (функциональное тестирование);
2. меньшее количество тестов из-за ограниченности данных в дочерних модулях;
3. отсутствие необходимости в разработке драйверов (драйвер создать сложнее, чем заглушки).