- •1. Базовые понятия пpогpаммиpования. Действие, пpоцесс, алгоритм, программа.
- •2. Функциональная структура эвм. Основные устройства эвм, их функциональные характеристики.
- •3. Представление данных в памяти эвм. Понятие переменной, константы, типа, диапазона значений.
- •4. Требования к качеству программного продукта. Основные критерии качества.
- •5. Этапы разработки программ. Роль каждого этапа в получении качественного программного продукта. Технология программирования.
- •1. Постановка задачи.
- •7. Исполнение программы.
- •6. Главная метафора процедурно-ориентированных языков. Стиль программирования.
- •7. Внешняя спецификация задачи, ее роль в процессе разработки программы. Состав внешней спецификации, структура документа.
- •8. Состав языка программирования. Синтаксис и семантика языка. Метаязык для записи синтаксических правил.
- •9. Структурные уровни языка программирования. Уровни языка Паскаль. Особенности языка Паскаль.
- •10. Простейшие конструкции языка Паскаль. Основные символы, слова, выражения.
- •11. Элементарные инструкции языков программирования. Особенности кодирования инструкции на язык Паскаль.
- •12. Кодирование арифметических, логических и литерных инструкций на язык Паскаль.(бл она хочет кодирование инструкций или выражений?)
- •13. Организация ввода данных из стандартного файла input. Процедуры ввода.
- •14. Ввод данных из текстового файла в Турбо-среде.
- •15. Вывод данных в текстовый файл в среде Турбо-Паскаль.
- •16. Концепция структурного программирования. Принцип Дейкстры.
- •17. Основные правила композиции структурированных программ. Базисы Вирта и Дейкстры. Эквивалентность базисов.
- •18. Последовательность действий. Особенность реализации в языке Паскаль.
- •19. Альтернативные действия. Альтернатива и полуальтернатива. Особенность реализации в языке Паскаль. Синтаксис и семантика.
- •20. Повторяемые действия. Реализация итерационных циклов пока и до в языке Паскаль. Синтаксис и семантика, особенность реализации.
- •22. Выбор из нескольких альтернатив. Реализация в стандартном и Турбо-Паскале.
- •23. Скалярные типы данных в языке Паскаль. Упорядоченные и неупорядоченные типы.
- •24. Структурный тип данных "массив". Реализация массивов переменной длины.
- •25. Правила записи программного модуля.
- •26. Основные стратегии проектирования алгоритмов, их сравнительная характеристика.
- •27. Основные декомпозиционные структуры программ. Сегменты-блоки и сегменты-процедуры, их спецификация.
- •28. Рабочий проект программы. Top-down граф.
- •29. Правила получения окончательной программы. Документация проекта.
- •30. Начальные шаги проектирования программы. Связь с внешней спецификацией. Основные варианты абстракций верхних уровней.
- •31. Процедуры языка Паскаль. Типы процедур. Правила выбора, описания и использования процедур.
- •32. Функции. Правила описания и использования.
- •33. Чистые процедуры. Правила и способы подстановки параметров. Механизм подстановки.
- •34. Структура программы. Локализация объектов.
- •35. Побочный эффект. Причины возникновения и правила предупреждения.
- •36. Цель и содержание отладки программы. Классификация ошибок. Уровни корректности программы в процессе отладки.
- •37. Основные действия при отладке. Контроль программы. Фазы контроля.
- •38. Характеристика восходящего и нисходящего способов отладки.
- •39. Локализация и исправление ошибок в процессе отладки в Турбо-среде.
- •40. Функциональное и структурное тестирование. Метод тестовых счетчиков.
- •41. Документирование программ в процессе разработки. Состав документации.
- •43. Эффективность программы. Средства стандартного и Турбо-Паскаля для повышения эффективности.
- •44. Надежность программы. Организация надежного ввода. Средства Паскаля для повышения надежности.
- •45. Эргономичность программы. Роль структурного программирования в повышении эргономичности.
- •46. Мобильность программ. Отличие версии Турбо-Паскаль от стандартного Паскаля.
- •47. Метод бисекции (деления пополам). Использование его в алгоритмах сортировки и решения уравнений.
- •48. Способы организации надежного ввода из стандартного файла, влияние на структуру программы.
- •49. Организация массива из текстового файла. Процедуры, обеспечивающие различную степень зависимости от входных данных.
- •Var f1:text
- •50. Локализация процедур Паскаля. Внешние процедуры.
- •51. Структурирование циклов. Метод объединения условий при решении задачи информационного поиска в файле.
- •53. Структурирование циклов. Метод флажка на примере организации надежного ввода с детальным анализом каждой переменной.
- •54. Организация процесса нисходящей разработки многомодульных программ. Самодокументирование процесса.
- •55. Независимость программы от данных при работе с массивами переменной длины. Обеспечение этого свойства на этапе спецификации задачи.
- •56. Экономия вычислений при суммировании рядов. Использование рекуррентных соотношений.
- •57. Метод трассировки при визуальном и компьютерном способах отладки.
38. Характеристика восходящего и нисходящего способов отладки.
Тест - совокупность специально подобранных входных данных и соответствующих им выходных данных, используемых для контроля правильности работы программы.
Тестовые результаты лучше получать путем, отличным от реализованного в программе.
Тестирование - испытание программы на множестве тестовых ситуаций с целью обнаружения ошибок.
Подготовка тестирования включает два шага:
- проектирование тестов;
- подготовка программы для тестирования (вставка дополнитель¬ных печатей, специальных операторов и т.д.).
Проектирование тестов - крайне важный и сложный процесс. Это связано с невозможностью "полного" тестирования программы, т.е. испытания всех режимов работы на всех возможных наборах данных. Стратегия проектирования - уменьшить эту неполноту и с помощью ограниченного набора тестов обеспечить достаточно высокую степень безошибочности работы программы.
Содержание теста определяется спецификацией задачи и логикой ее решения. Поэтому разработка тестов должна предшествовать этапу кодирования алгоритма и осуществляться параллельно с проектированием алгоритма.
Иначе говоря, разработка тестов является предусмотренным заранее и запланированным этапом. К моменту завершения проекта на языке проектирования (псевдокод) наборы тестовых данных также должны быть спроектированы. Эти наборы являются одновременно обязательным элементом документации программного продукта.
Способы тестирования:
В основе различных методов тестирования лежат два способа: восходящее и нисходящее тестирование.
При восходящем тестировании программа собирается и тестируется снизу вверх. Вначале проверяются модули нижнего уровня, т.е. сегменты, не содержащие абстракций. Затем совершается переход к модулям более высокого уровня, абстракции в которых заменены обращениями к оттестированным модулям и т.д. При этом необходимо для каждого модуля, представляющего собой внешнюю процедуру, написать специальную небольшую управляющую программу, которая должна содержать ввод тестовых данных, обращение к тестируемой процедуре и вывод тестовых результатов. Такая программа называется Драйвером.
Такой способ тестирования на первый взгляд кажется наиболее естественным. но он имеет существенный недостаток: проверка программы начинается с тестирования мелких деталей; проверка смысловых моментов откладывается на более позднее время. В результате серьезные принципиальные ошибки (ошибки во внешних спецификациях, сегментах высоких уровней) могут проявиться только на завершающей стадии работы и повлечь переделку всего проекта.
Нисходящее тестирование органически входит в процесс нисходящего проектирования программ. При таком способе тестирование начинается с главного модуля, одновременно с его проектированием. Вызываемые из главного модуля сегменты, для которых алгоритм еще не разработан, заменяются заглушками (имитаторами, болванками). Заглушки - это процедуры, которые моделируют работу соответствующего модуля. В простейшем случае заглушка при обращении к ней только осуществляет обмен данными, т.е. выдает фиксированные значения выходных данных и получает входные данные. В более сложном случае заглушка может содержать упрощенный алгоритм обработки полученных данных. В любом случае заглушка должна выдавать:
- сообщение о том, что она вызвана;
- полученные входные данные;
- выдаваемые выходные данные.
После окончания отладки головного модуля проводится проектирование и отладка сегментов первого уровня, а заглушки заменяются текстами соответствующих построенных алгоритмов. При этом драйвером для сегментов является головной модуль.
Процесс тестирования так же, как и процесс проектирования, продолжается до тех пор, пока не будут раскрыты все абстракции (устранены все заглушки).
Преимущество этого способа состоит в том, что прежде чем про¬ектируется и тестируется внутренняя логика некоторого сегмента, проверяются внешние связи (интерфейс) этого сегмента. Это дает возможность на ранних стадиях проектирования выявить серьезные смысловые ошибки, оставляя проверку деталей на более поздние стадии проектирования.
При проведении тестирования рекомендуется выполнять следующие общие правила.
1. В первую очередь лучше тестировать сегменты, осуществляющие ввод и вывод данных.
2. Рекомендуется одновременно раскрывать те абстракции, которые целесообразно тестировать совместно: ввод-вывод, обработка-вывод, ввод-обработка-вывод и др. В то же время раскрывать такую пару, как ввод-обработка, нецелесообразно, так как потребуются дополнительные инструкции вывода только для целей отладки.
3 При тестировании сегмента, содержащего абстракции, следует учитывать вид этих абстракций, которые могут раскрыться либо в виде блока, либо в виде процедуры. От этого зависит форма заглушки, так как блок должен включаться в сегмент, а процедура останется в виде автономного модуля.
4 В некоторых случаях целесообразно сочетать нисходящее тестирование с восходящим. Так, если раскрытие некоторой абстракции не слишком усложнит алгоритм, то можно не строить для нее заглушку, а раскрыть и отладить в виде процедуры, а потом испытывать сегмент более высокого уровня, используя построенную процедуру.