Реклама:

Особенно значительное снижение сложности тестирования за счет исключения нереализуемых маршрутов происходит в программах с циклами. Например, циклы, имеющие фиксированный параметр выхода из цикла, образуют нереализуемые маршруты при всех остальных значениях" параметра. Наличие в теле цикла нескольких предикатов и их (обычно неявная) логическая связь, а также корреляция с номером витка исполняемого цикла, приводят к тому, что при тестировании нет необходимости полного перебора всех условий в теле цикла на каждом его витке. Путем ручного неформального анализа в некоторых случаях удается эффективно выделять реализуемые маршруты с циклами, без анализа всех сочетаний несовместимых условий, при которых образуются нереализуемые маршруты.

Автоматизация выделения нереализуемых маршрутов ограничена технической сложностью переборного анализа предикатов на маршрутах и принципиальной сложностью идентификации несовместимых условий. Дополнительные трудности анализа несовместимости условий имеются в программах, написанных на языках низкого уровня (ассемблер), при неявном представлении предикатов в тексте программ. Поэтому имеются только отдельные работы, например [7],в которых предприняты попытки построить алгоритм выделения полной совокупности реализуемых маршрутов по текстам программ на языках высокого уровня. При этом вводится ряд серьезных ограничений на структуру и применяемые предикаты в программе, при которых такой анализ дает результаты. На практике немногие реальные модули удовлетворяют этим ограничениям, поэтому системы выделения нереализуемых маршрутов пока имеют только экспериментальное значение.

Тестирование корректности определения и использования данных на маршрутах исполнения программы. Если маршруты исполнения программы соответствуют правильным областям изменения входных данных, то целесообразно проверить корректность основных операций обработки данных на выделенных маршрутах. Эти проверки могут производиться путём символического анализа текста программы или накопления результатов обработки реальных данных при исполнении программы. Каждая величина на маршруте исполнения программы считывается из памяти и после использования для вычислений записывается в память ЭВМ для хранения и последующей обработки. Чередование операций чтения и записи переменных может быть нарушено в результате ошибок в программе. Для выявления таких ошибок проводится тестирование корректности записи и считывание реальных значений данных или статический анализ этих операций по'тексту программы.

Одни и те же ячейки оперативной памяти и регистры используются программой последовательно для хранения различных величин. Это позволяет экономить память и проводить сложные вычисления при ограничении на число программно доступных регистров и емкость оперативной памяти. При записи текстов программ на языках высокого уровня правильность распределения памяти и регистров для записи и чтения промежуточных переменных обеспечивается трансляторами. При использовании для подготовки программ макроязыков и автокодов контроль распределения памяти возлагается на программиста или осуществляется автоматизирование специальными средствами. В дальнейшем для определенности рассматривается только распределение регистров хотя это полностью относится и к распределению ячеек оперативной памяти.


⇐ Предыдущая страница| |Следующая страница ⇒