
- •1. Основные этапы развития программирования как науки. Стихийное программирование.
- •2 Этап.
- •3 Этап.
- •4 Этап.
- •2. Структурный подход к программированию.
- •3. Объектный подход к программированию.
- •4. Процедуры с параметрами. Описание, пример.
- •5. Функции с параметрами. Описание, пример.
- •6. Область действия идентификаторов при использ. Проц. И функц.
- •7. Способы передачи параметров. Формальные и фактич. Параметры.
- •Параметры-значения
- •Параметры-константы
- •8. Параметры – значения. Механизм работы.
- •9. Параметры – переменные. Механизм работы.
- •10. Параметры – константы. Механизм работы.
- •11. Рекурсия. Понятия, пример.
- •12. Строки в delphi. Способы реализации строк. Основные процедуры. И функции.
- •13. Записи в delphi. Пример программы.
- •15. Модули в delphi. Понятие, описание, использование.
- •16. Программирование с использованием динамической памяти. Структура оперативной памяти. Понятие указателя.
- •17. Указатели. Описание в программе. Допустимые операции.
- •Операции над указателями
- •Нулевой указатель
- •18. Статические и динамические переменные. Динамические структуры данных.
- •19. Линейные списки. Основные операции над линейными списками.
- •20. Формы хранения информации. Их сравнение.
- •21. Стэк. Понятие, описание в программе, основные операции.
- •22. Очередь. Понятие, описание в программе, основные операции.
- •23. Списки. Понятие, описание в программе, основные операции.
- •25. Постфиксная, префиксная, инфиксная записи выражения.
- •26. Деревья. Понятия бинарного дерева. Способы представления д.
- •27. Бинарное дерево. Способы прохождения дерева.
- •28. Бинарное дерево поиска. Построение, использование.
- •Использование бинарных деревьев поиска Создание примеров деревьев поиска.
- •Симметричный метод прохождения.
- •Дублированные узлы
- •30. Графические средства delphi.
- •31.Понятие объекта. Основные свойства ооп.
- •32. Поля, методы и свойства объекта.
- •33. Использование конструктора и деструктора.
- •35. Основные операторы языка с.
- •36. Операторы инкремента и декремента. Операторы присваивания.
- •37. Функции scanf() и printf().
- •38. Способы задания развветвляющегося алгоритма в с. Пример.
- •39. Циклические алгоритмы. Виды циклов в с. Пример.
- •40. Табулирование функции одной переменной на заданном отрезке. Блок-схема. Программа.
- •41. Алгоритм вывода простых чисел меньше 100 в с.
- •42. Алгоритм разложения числа на простые множители в с.
- •43. Организация средства человеко-машинного интерфейса. Пользовательский интерфейс. Согласованность пи.
- •44. Стиль программирования. Критерии качества программы.
- •45. Тестирование программных продуктов.
44. Стиль программирования. Критерии качества программы.
Одним из важнейших признаков классификации языков программирования является принадлежность их к одному из стилей, основными из которых являются следующие: процедурный, функциональный, логический и объектно-ориентированный.
Процедурное программирование является отражением архитектуры традиционных ЭВМ, которая была предложена фон Нейманом в 40-х годах.
Программа на процедурном языке программирования состоит из последовательности операторов (инструкций), задающих процедуру решения задачи. Основным является оператор присваивания, служащий для изменения содержимого областей памяти. Концепция памяти как хранилища значений, содержимое которого может обновляться операторами программы, является фундаментальной в императивном программировании.
Выполнение программы сводится к последовательному выполнению операторов с целью преобразования исходного состояния памяти, то есть значений исходных данных, в заключительное, то есть в результаты. Таким образом, с точки зрения программиста имеются программа и память, причем первая последовательно обновляет содержимое последней.
Критерии качества программного обеспечения.
К критериям качества относят: правильность программы, надежность, эффективность, модифицируемость, возможность многократного использования, стиль программирования.
Программа называется правильной в случае, если семантика программы соответствует предъявляемым к ней требования, изложенным в спецификации этой программы.
Надежность программного обеспечения - характеристика способности системы программного обеспечения выполнять возложенные на нее функции при поступлении требований на их выполнение. Программа, являющаяся правильной может считаться ненадежной, если спецификации, которым она удовлетворяет, не охватывает всех требований пользователя к этой системе. С другой стороны программа не являющаяся полностью правильной считается надежной, если допущенные в ней ошибки незначительные, либо если пользователь достаточно просто может их избежать.
Эффективность программного обеспечения может характеризоваться двумя способами:
1. С учетом объема используемой памяти;
2. С учетом быстродействия программы.
Скорость работы и расход памяти являются характеристиками, вступающими в противоречие. Быстрые алгоритмы обычно занимают большие объемы при реализации, а программы с экономией памяти выполняются более долго.
Модифицируемость. Программа должна быть написана так, чтобы любые изменения в алгоритме требовали минимальных исправлений текста программы.
Возможность многократного использования. Программа должна быть универсальна, т.е. давать решение при различных входных данных.
Стиль программирования предполагает читабельность. Такие программы содержат необходимые комментарии, и оформлены так, что видны логические блоки.
45. Тестирование программных продуктов.
Тестирование предназначено для проверки работоспособности программ, устанавливает факт наличия ошибки. Цель проверяющего – заставить программу сбиться.
Многообразие методов тестирования базируется на двух крайних стратегиях.
Тестирование программы как «черного ящика» (тестирование по входу-выходу).
Тестирование программы как «белого ящика».
Тестирование программы как «черного ящика».
Исследуемая программа рассматривается как черный ящик. Подаются данные на вход программы, получают и анализируют выходные данные. Тестовые данные составляются и используются без учета знаний о внутренней структуре программы.
Тестирование программы как «белого ящика».
Цель – проверить каждый путь, каждую ветвь, каждый оператор. При этом спецификация программы не используется. Тестирование путей предполагает их выполнение по крайней мере дин раз. Путь программы определяется значением входных данных. Каждый путь состоит из последовательности линейных участков, которые связаны командами условного перехода. Если команды условного перехода не коррелируют друг с другом, то число различных реализуемых путей программы может достигать 2N, где N – число команд условных переходов.
Наиболее распространенная стратегия – «черного ящика»:
Методы разработки тестов стратегии по входу – выходу (черного ящика):
Проверка в нормальных условиях.
Анализ граничных значений.
Проверка в исключительных ситуациях.
Предположение об ошибке.
Проверка в нормальных условиях предполагает тестирование на основе данных, которые характерны для реальных условий функционирования программы.
Анализ граничных значений включает тестирование ситуаций, возникающих при экстремальных значениях входных данных, которые должны восприниматься программой как правильные данные. Для цифровых данных - это начальное и конечное значения допустимой области изменения переменной, для нецифровых - типичные символы, охватывающие все возможные ситуации.
Проверка в исключительных ситуациях проводится с использованием данных, значения которых лежат за пределами допустимой области изменения. Программа должна сама отвергать любые данные, которые она не в состоянии обрабатывать правильно.
Предположение об ошибке. Идея его заключается в том, чтобы перечислить все возможные ошибки и ситуации, в которых могут появиться ошибки, а затем писать тесты.
Тестирование многомодульных программ.
Одна из основных целей модульного построения программ – это обеспечение ее легкого тестирования. Каждый модуль должен предназначаться для выполнения одной функции.
Основные подходы тестирования, использующиеся при слиянии модулей в более крупные единицы.
Восходящее тестирование – программа собирается и тестируется снизу вверх. Модули самого низшего уровня (не вызывающие других модулей) тестируются изолированно, автономно. После того, как тестирование этих модулей завершено, вызов их должен быть так же надежен, как вызов любой стандартной функции языка. Затем тестируются модули, непосредственно вызывающие уже проверенные. Эти модули более высокого уровня тестируются не автономно, а вместе с уже проверенными модулями более низкого уровня. Процесс повторяется до тех пор, пока не будет достигнута вершина.
Недостатки:
невозможно выявить серьезные ошибки в алгоритме и «верхних» сопряжениях почти до момента окончания разработки проекта, что приводит к многочисленным переделкам программы;
при каждом новом тестировании элементов различного уровня требуются новые тестовые данные, что требует большого объема работы.
Нисходящее тестирование - программа собирается и тестируется сверху вниз. Изолированно тестируется только головной модуль, затем с ним соединяются один за другим модули, непосредственно вызываемые им, и тестируется полученная комбинация. Процесс повторяется до тех пор, пока не будут собраны и проверены все модули. Если тестируемый модуль вызывает модуль более низкого уровня, который в данный момент еще не существует, то для имитации функций недостающих модулей программируются модули – заглушки. В заглушку встраивают фиксированные выходные данные, которые она всегда и возвращает.