Функциональное тестирование, методы формирования тестовых наборов.
Одним из способов проверки программ является тестирование с управлением по данным или по принципу «черного ящика». В этом случае программа рассматривается как «черный ящик», и целью тестирования является выяснение обстоятельств, в которых поведение программы не соответствует спецификации.
Для обнаружения всех ошибок в программе, используя управление по данным, необходимо выполнить исчерпывающее тестирование, т. е. тестирование на всех возможных наборах данных. Для тех же программ, где исполнение команды зависит от предшествующих ей событий, необходимо проверить и все возможные последовательности. Очевидно, что проведите исчерпывающего тестирования для подавляющего большинства случаев невозможно. Поэтому обычно выполняют «разумное» или «приемлемое» тестирование, которое ограничивается прогонами программы на небольшом подмножестве всех возможных входных данных. Этот вариант не дает гарантии отсутствия отклонений от спецификаций.
Правильно выбранный тест должен уменьшать, причем более чем на единицу, число других тестов, которые должны быть разработаны для обеспечения требуемого качества программного обеспечения.
При функциональном тестировании различают следующие методы формирования тестовых наборов:
эквивалентное разбиение;
анализ граничных значений;
анализ причинно-следственных связей;
предположение об ошибке.
Эквивалентное разбиение
Метод эквивалентного разбиения заключается в следующем. Область всех возможных наборов входных данных программы по каждому параметру разбивают на конечное число групп – классов эквивалентности. Наборы данных такого класса объединяют по принципу обнаружения одних и тех же ошибок: если набор какого-либо класса обнаруживает некоторую ошибку, то предполагается, что все другие тесты этого класса эквивалентности тоже обнаружат эту ошибку и наоборот.
Разработку тестов методом эквивалентного разбиения осуществляют в два этапа: на первом выделяют классы эквивалентности, а на втором – формируют тесты.
Выделение классов эквивалентности является эвристическим процессом, однако целесообразным считают выделять в отдельные классы эквивалентности наборы, содержащие допустимые и недопустимые значения некоторого параметра. При этом существует ряд правил:
если некоторый параметр х может принимать значения в интервале [1, 999], то выделяют один правильный класс 1 < х < 999 и два неправильных: х < 1 и х>999;
если входное условие определяет диапазон значений порядкового типа, например, «в автомобиле могут ехать от одного до шести человек», то определяется один правильный класс эквивалентности и два неправильных: ни одного и более шести человек;
если входное условие описывает множество входных значений и есть основания полагать, что каждое значение программист трактует особо, например, «типы графических файлов: bmp, jpeg, vsd», то определяют правильный класс эквивалентности для каждого значения и один неправильный класс, например, txt;
если входное условие описывает ситуацию «должно быть», например, «первым символом идентификатора должна быть буква», то определяется один правильный класс эквивалентности (первый символ – буква) и один неправильный (первый символ – не буква);
если есть основание считать, что различные элементы класса эквивалентности трактуются программой неодинаково, то данный класс разбивается на меньшие классы эквивалентности.
Анализ граничных значений
Граничные значения – это значения на границах классов эквивалентности входных значений или около них. Анализ показывает, что в этих местах резко увеличивается возможность обнаружения ошибок. Например, если в программе анализа вида треугольника было записано А + В ≥ С вместо А + В > С, то задание граничных значений приведет к ошибке: линия будет отнесена к одному из видов треугольника.
Применение метода анализа граничных значений требует определенной степени творчества и специализации в рассматриваемой проблеме. Тем не менее, существует несколько общих правил для применения этого метода:
если входное условие описывает область значений, то следует построить тесты для границ области и тесты с неправильными входными данными для ситуаций незначительного выхода за границы области, например, если описана область [-1.0, +1.0], то должны быть сгенерированы тесты: -1.0, + 1.0,-1.001 и+1.001;
если входное условие удовлетворяет дискретному ряду значений, то следует построить тесты для минимального и максимального значений и тесты, содержащие значения большие и меньшие этих двух значений, например, если входной файл может содержать от 1 до 255 записей, то следует проверить 0, 1, 255 и 256 записей;
если существуют ограничения выходных значений, то целесообразно аналогично тестировать и их: конечно не всегда можно получить результат вне выходной области, но, тем не менее, стоит рассмотреть эту возможность;
если некоторое входное или выходное значение программы является упорядоченным множеством, например, это последовательный файл, линейный список или таблица, то следует сосредоточить внимание на первом и последнем элементах этого множества.
Анализ причинно-следственных связей
Анализ причинно-следственных связей позволяет системно выбирать высокорезультативные тесты. Метод использует алгебру логики и оперирует понятиями «причина» и «следствие». Причиной в данном случае называют отдельное входное условие или класс эквивалентности. Следствием – выходное условие или преобразование системы. Идея метода заключается в отнесении всех следствий к причинам, т. е. в уточнении причинно-следственных связей. Данный метод дает полезный побочный эффект, позволяя обнаруживать неполноту и неоднозначность исходных спецификаций.
Предположение об ошибке
Часто программист с большим опытом находит ошибки, «не применяя никаких методов». На самом деле он подсознательно использует метод «предположение об ошибке».
Процедура метода предположения об ошибке в значительной степени основана на интуиции. Основная его идея заключается в том, чтобы перечислить в некотором списке возможные ошибки или ситуации, в которых они могут появиться, а затем на основе этого списка составить тесты. Другими словами, требуется перечислить те особые случаи, которые могут быть не учтены при проектировании.
Yandex.RTB R-A-252273-3- Сущность и актуальность дисциплины «Технологии программирования», основные понятия и определения дисциплины.
- Жизненный цикл программного средства.
- Модели жизненного цикла по.
- Модель с промежуточным контролем
- Спиральная модель
- Спиральная или итерационная схема разработки программного обеспечения
- Изменение жизненного цикла программного обеспечения при использовании case-технологий.
- Качество программного обеспечения.
- Модели качества по
- Метрики качества программного обеспечения.
- Измерение и оценка качества по, стандартный метод оценки значений показателей качества.
- Управление качеством пс.
- Требования стандарта к организации системы качества
- Диалоговые программы, типы диалога, формы диалога.
- Спецификация пс.
- Определение требований к программному средству.
- Спецификация качества программного средства.
- Функциональная спецификация программного средства.
- Методы контроля внешнего описания программного средства.
- Способы записи алгоритмов.
- Представление основных структур алгоритмов.
- Псевдокоды.
- Flow-формы.
- Диаграммы Насси-Шнейдермана.
- Классификация структур данных.
- Файловые структуры, физическая организация файлов.
- Логическая организация файлов.
- Документирование файлов.
- Модульные программы, модули и их свойства.
- Сцепление и связность модулей.
- Нисходящая и восходящая разработка программного обеспечения.
- Программирование «с защитой от ошибок».
- Основные подходы программирования, «стихийное» программирование.
- Основные подходы программирования, структурный подход к программированию.
- Основные подходы программирования, объектный подход к программированию.
- Основные подходы программирования, компонентный подход и case-технологии.
- 36. Процедурное (императивное) программирование
- 37.Функциональное программирование.
- 38. Декларативное программирование
- 39. Объектно-ориентированное программирование
- 40.Объектно-ориентированные языки программирования.
- 41. Спецификация программного обеспечения при структурном подходе.
- 42.Диаграммы переходов состояний.
- 43. Функциональные диаграммы
- 44. Диаграмма потоков данных
- 45. Моделирование управляющих процессов с помощью диаграмм потоков данных
- 46. Структуры данных и диаграммы отношений компонентов данных
- 47. Диаграммы Джексона.
- 48. Скобочные диаграммы Орра
- 49. Сетевая модель данных
- 50. Проектирование программного обеспечения при структурном подходе
- 54. Метод пошаговой детализации для проектирования структуры по
- 55. Структурные карты Констайна.
- 56. Проектирование структур данных
- 57. Представление данных в оперативной памят
- 60. Проектирование программного обеспечения, основанное на декомпозиции данных Методикой Варнье-Орра
- 61. Case-технологии, основанные на структурных методологиях анализа и проектирования
- 63. Определение «вариантов использования»
- 64. Диаграммы вариантов использования
- 65. Построение концептуальной модели предметной области
- 69. Проектирование программного обеспечения при объектном подходе
- 70. Разработка структуры программного обеспечения при объектном подходе
- Определение отношений между объектами.
- Диаграммы последовательностей этапа проектирования.
- Диаграммы кооперации.
- Уточнение отношений классов.
- Интерфейсы в uml.
- Проектирование классов.
- Проектирование методов класса.
- Компоновка программных компонентов.
- Проектирование размещения программных компонентов для распределенных программных систем.
- Методы доказательства правильности программ.
- Метод индуктивных утверждений Флойда.
- Метод Хора доказательства правильности программ.
- Виды контроля качества разрабатываемого программного обеспечения.
- Формирование тестовых наборов, основные подходы.
- Ручной контроль программного обеспечения, методы ручного контроля.
- I. Контроль обращений к данным
- 2. Контроль вычислений
- 3. Контроль передачи управления
- 4. Контроль межмодульных интерфейсов
- Структурное тестирование, критерии формирования тестовых наборов.
- Функциональное тестирование, методы формирования тестовых наборов.
- Тестирование модулей и комплексное тестирование.
- Оценочное тестирование.
- Отладка программного обеспечения.
- Классификация ошибок программного обеспечения.
- Методы отладки программного обеспечения.
- Методы и средства получения дополнительной информации об ошибках.
- Общая методика отладки программного обеспечения.
- Документирование и стандартизация.
- Виды программных документов.
- Основные правила оформления программной документации.
- Основные инженерные подходы к созданию программ.
- Классификация технологических подходов к созданию программ.
- Классификация технологических подходов к созданию программ, подходы со слабой формализацией.
- Классификация технологических подходов к созданию программ, строгие каскадные подходы.
- Классификация технологических подходов к созданию программ, строгие каркасные подходы.
- Классификация технологических подходов к созданию программ, генетические подходы.
- Классификация технологических подходов к созданию программ, подходы на основе формальных преобразований.
- Классификация технологических подходов к созданию программ, ранние подходы быстрой разработки.
- Классификация технологических подходов к созданию программ, адаптивные технологические подходы.
- Классификация технологических подходов к созданию программ, подходы исследовательского программирования.
- Особенности и компоненты case-средств.
- Объектно-ориентированные case-средства анализа и проектирования.
- Структурные case-средства анализа и проектирования.
- Case-средства компании ibm Rational Software, средство визуального моделирования Rational Rose.
- Системы автоматизированного проектирования и их место среди других автоматизированных систем.
- Структура сапр.
- Разновидности сапр.
- Понятие о cals-технологиях.