Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Bilety_po_AiP.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.1 Mб
Скачать
  1. Технология разработки программ. Технология и методы тестирования программ.

  1. Постановка задачи - составление точного и понятного словесного описания того, как должна работать будущая программа, что должен делать пользователь в процессе ее работы.

  2. Разработка интерфейса (интерфейс - способ общения) - создание экранной формы (окна программы).

  3. Составление алгоритма.

  4. Программирование - создание программного кода на языке программирования.

  5. Отладка программы - устранение ошибок.

  6. Тестирование программы - проверка правильности ее работы.

  7. Создание документации, помощи.

Качество (программных средств) можно определить как совокупную характеристику исследуемого ПО с учётом следующих составляющих:

  • Надёжность

  • Сопровождаемость -  процесс улучшения, оптимизации и устранения дефектов программного обеспечения (ПО) после передачи в эксплуатацию

  • Практичность

  • Эффективность

  • Мобильность

  • Функциональность

Тестирование – выполнение программы с целью обнаружения факта наличия в программе ошибки.

Отладка – определение места ошибки и внесение исправлений в программу.

Принципы тестирования:

- Ошибки в программе есть

- Тест – совокупность исходных данных и ожидаемых результатов

- Тесты готовятся заранее, до выхода на машину

- Первые тесты разрабатываются после получения задания на разработку программы до написания программного кода

- Перед началом тестирования следует сформулировать цели, которые должны быть достигнуты в ходе тестирования

- В процессе необходимо фиксировать тесты и результаты

- Тесты должны быть одинаково тщательны как для правильных, так и для неправильных входных данных

- После исправления необходимо повторное тестирование

- Ошибки кучкуются

- Необходимо проверить 2 момента: программа делает то, что должна делать, не делает того, чего делать не должна

- Результаты теста необходимо изучать досконально и объяснять полностью

- Недопустимо ради упрощения тестирования изменять программу

- Окончательное тестирование программы лучше проводить не ее автору, а другому человеку

Критерии полноты тестирования – критерии, по которым производится классификация всех возможных вариантов выполнения программы с точки зрения ее правильности

После выбора критерия:

  1. Удачен ли данный тест? (удалось ли с его помощью найти ошибки?)

  2. Достаточен ли набор тестов или нужны еще

Критерии черного ящика определяют тестирование с точки зрения решения поставленной задачи без учета устройства программы.

Критерии белого ящика учитывают структуру.

Критерии черного ящика:

- тестирование функций

- тестирование классов входных данных

- тестирование ОДЗ

1. Нормальные условия

2. Граничные (экстремальные условия)

3. Исключительные условия (выход за границу класса)

  1. Рекурсивные алгоритмы: определение и виды рекурсии. Реализация рекурсии и использование стека. Рекурсия и итерация. Примеры, сравнение.

Алгоритм называется рекурсивным, если:

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

2. хотя бы один шаг этого алгоритма представляет собой обращение к , который в свою очередь вызывает . Такая рекурсия называется косвенной.

Реализация рекурсии

, причем и

1)

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

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

При компиляции процедуры необходимо решить один важный вопрос: как быть с ее локальными переменными и параметрами, передаваемыми по значению? Есть два варианта:

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

2. Динамическое распределение памяти, при таком распределении, память для локальных данных выделяется при вызове процедуры или функции. Такая процедура называется реентерабельной. Код такой процедуры называют чистым кодом.

Модель стека

Стек представляет собой область памяти со смежными адресами. Размер стека фиксирован. Его размер определяется до начала выполнения программы. Базовый адрес – начало стека.

Для стека выполняются две операции:

1. Поместить данные в вершину стека (втолкнуть, push)

2. Вытолкнуть, pop

Стек в программировании используется для нескольких целей:

1. как вспомогательная рабочая память для организации вычислений

2. реализация вызовов процедур и функций

При вызовах процедур и функций в стек помещается информация о параметрах, которые передаются в процедуру или функцию. Для передачи параметров в стеке выделяется целый блок. При вызове функции через стек возвращается еще и результат.

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

Сравнение рекурсии и итерации

Рекурсия:

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

Итерация:

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

При выполнении сравнения можно учитывать разные критерии.

1. Самый распространенный – это эффективность алгоритма. В данном случае под эффективность понимаются время процессора и объем занятой программой (и данными) памяти. В данном случае не трудно заметить явное преимущество итеративного метода по сравнению с рекурсивным.

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

Вывод: В тех случаях, когда не требуется получать очень быстрый отклик программы, рекурсия помогает сэкономить на разработке программы.

на примере чисел Фибоначчи:

рекурсия:

function Fr(n:integer):integer;

begin if n=1 or n=2 then Fr:=1

else Fr:=Fr(n-1)+Fr(n-2);

end;

итерация:

function Fi(n:integer):integer;

var i,n1,n2,result: integer;

begin n1:=1,n2:=1;{установка начальных значений}

result:=1; {на тот случай,если n=1 или 2}

for i:=3 to n do {не выполняется если n<3}

begin

result:=n1+n2; {соот-ет осн формуле чисел Фиб}

n2:=n1; {сдвиг значений на один индекс}

n1:=result; {----||----}

end;

Fi:=result; {установление значения функции}

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]