- •Билет 1. Базовые понятия программирования. Действие, процесс, алгоритм, программа.
- •Билет 2. Функциональная структура эвм. Основные устройства эвм, их функциональные характеристики.
- •1972Г – Дейкстра – Книга о базисе и структурированном программировании.
- •Выбор из нескольких альтернатив. Реализация в Pascal.
- •Документирование программы:
- •1. Постановка задачи (спецификация задачи: в спецификации различают две существенно разные ее части: функциональную и эксплуатационную спецификацию.
- •Классификация алгоритмов внутренней сортировки
- •Концепция структурного программирования:
- •Локализация и исправление ошибок в системе отладки
- •Метод деления пополам.
- •Мобильность программ, отличие турбо паскаля от стандартного
- •Надежность программы, организация надежного ввода.
- •Основные декомпазиционные структуры программ
- •Основные правила композиции структурированных программ.
- •Основные стратегии проектируемых алгоритмов
- •Основные действия при отладке
- •Побочный эффект
- •1. Использовать процедуры с параметрами (чистые процедуры), за исключением явных случаев, когда параметры не нужны. Доводы в пользу использования чистых процедур:
- •2. Глобальные переменные в процедуре целесообразно использовать в след. Основных случаях:
- •Правила записи программируемого модуля
- •Скалярные типы данных в языке Pascal.
- •Структурные уровни яп
- •Массивы.
- •Функциональное и структурное тестирование
- •Характеристика восходящих и нисходящих способов отладки
- •Цель и содержание отладки:
- •Чистые процедуры. Правила и способы подстановки параметров
- •Эффективность программы
Массивы.
Массив – структурна переменная, все компоненты которой одного типа.
Свойства:
1) К любой компоненте можно обратиться. Она явно обозначена, прямой доступ.
2) Чисто компонент определяется при описании и в программе не меняется
3) Каждой компоненте сопоставляется индекс, который опр местом в массиве.
Типовые действия над массивами:
- ввод массива;
- просмотр элементов массива, поиск;
- накопление суммы, произведения;
- нахождение экстремума.
Описание типа массива задается следующим образом:
<имя типа> = ARRAY [ <сп.инд.типов>] OF <тип>
Здесь <имя типа> - правильный идентификатор;
ARRAY, OF - зарезервированные слова (массив, из);
<сп.инд.типов> - список из одного или нескольких индексных типов, разделенных запятыми; квадратные скобки, обрамляющие список, - требование синтаксиса;
<тип> - любой тип Турбо Паскаля.
В качестве индексных типов в Турбо Паскале можно использовать любые порядковые типы, кроме LONGINT и типов-диапазонов с базовым типом LONGINT.
Обычно в качестве индексного типа используется тип-диапазон в котором задаются границы изменения индексов.
В Турбо Паскале можно одним оператором присваивания передать все элементы одного массива другому массиву того же типа, например:
var
a,b begin
array [1. .5] of Single;
a := b;
end
После этого присваивания все пять элементов массива А получат те же значения, что и в массиве В. Однако над массивами не определены операции отношения. Нельзя, например, записать (if a=b then).
Сравнить два массива можно поэлементно.
Требования к качеству
Функции
С точки зрения использования процедур функцию можно рассматривать как частный случай процедур общего вида, когда требуется вычислить только одно значение. Но если рассматривать функцию как структурную единицу в программе, то роль у нее иная: ФУНКЦИЯ является операцией в выражении в то время как процедура является самостоятельным действием. В Паскале существуют специальные средства для работы с функцикями.
Ф-ция описывается в след. виде:
{<Раскрываемая абстракция>}
function <имя функции>(<список описаний аргументов>):<тип>
<тело функции>
Т.к. функция вычисляет только одно значение, то тип ее может быть только скалярный. Тело функции содержит след. оператор присваивания:
<имя функции>:=<выражение>
Т.к. список формальных параметров содержит только аргументы, то подстановка формальных параметров производится только по значению.
Вызов функции производится из выражения с помощью указателя функции.
Проектирование функций и процедур: процедура-действие, функция-операция.
Пример:
function Summa(x,eps:real):real;
repeat
s:=s+a;
until (abs(a)<eps);
summa:=s (Имя ф-ции находится только в левой части. Его нельзя использовать как простую переменную. Так, в теле ф-ции использование ее имени в правой части оператора присваивания Sum:=Sum+a было бы воспринято системой как ошибочная попытка вызова этой функции без параметра).
Функциональное и структурное тестирование
Способы тестирования:
Существуют два основных подхода к тестированию отдельного модуля: функциональное и структурное тестирование.
При функциональном тестировании программный модуль рассматривается как черный ящик, его внутренняя структура не учитывается. При структурном тестировании выбор тестовых ситуаций определяется структурой программы.
ФУНКЦИОНАЛЬНОЕ ТЕСТИРОВАНИЕ:
Цель функционального тестирования - найти расхождение между программой и ее внешними спецификациями. Необходимым условием успешного функционального тестирования является наличие четких и точных внешних спецификаций. При функциональном подходе исчерпывающее тестирование реальных задач невозможно из-за огромного числа комбинаций входных и выходных данных. Задачей тестирования является выделение наиболее реальных ситуаций и пренебрежение малозначительными ситуациями.
Тесты должны строиться для всех входных условий, а также на границах, всех областей допустимых значений на входе и областей изменения на выходе. Тесты должны проверять поведение программы у функциональных границ также в случаях ввода недопустимых или непредусмотренных данных.
При проектировании функциональных тестов, надлежит выполнить следующие рекомендации
1) Просматривая разделы "Входные данные". "Аномалии" принимать во внимание область определения входных данных. Тесты рекомендуется строить для допустимых, граничных и недопустимых значений входных данных.
2) Просматривая раздел "Выходные данные", установить функциональные границы, которые будут определяться областью значений результатов. Построить тесты, учитывая эти функциональные границы.
СТРУКТУРНОЕ ТЕСТИРОВАНИЕ:
Качество структурного тестирования определяется степенью, в какой тесты покрывают логику программы. Критерий исчерпывающего тестирования - это выполнение каждого пути программы (т.е. последовательности инструкций от начала до конца программы). Реально тестирование всех путей программы практически неосуществимо, так как число путей при наличии циклов может быть бесконечно большим. Поэтому вместо полного тестирования реализуемый и достаточно надежный критерий тестирования ветвей: каждая ветвь алгоритма должна быть пройдена хотя бы один раз.
Исходными тестовыми наборами данных при структурном тестировании могут служить функциональные тесты. Вначале тестирование ветвей проводим для этих тестовых наборов данных. Если в результате проверки не все ветви пройдены, то следует добавить соответствующие тестовые наборы данных.
Тестовые наборы данных готовятся, как правило, вручную. Подготовка программы для тестирования зависит от метода тестирования.
МЕТОД ТЕСТОВЫХ СЧЕТЧИКОВ:
Суть метода состоит в том, что в начало и конец алгоритма, в начало и конец циклов, а также в каждую ветвь алгоритма вставляется "счетчик" - некоторая переменная. В начале алгоритма все счетчики обнуляются.
При выполнении алгоритма на некотором тестовом наборе значение счетчика увеличивается на единицу при каждом прохождении участка куда вставлен этот счетчик.
Набор тестов должен быть таким, чтобы при выполнении всей совокупности тестов этого набора каждый из счетчиков хотя бы один раз изменял свое значение.
Поскольку все счетчики выполняют одни и те же функции, целесообразно организовать их в массив.
