|
Шпаргалка
по ИСЭ 21 билет
билеты с
1 по 5
1. Разработка программ: Пост.
задачи, специфик. Прогр.; Метод пошаг. Детализ., архит. проект.
1.Неформ. постановка –
Задачу ставит заказчик, а
приним. разработчик. Между З и Р должен сост. диалог, цель кот.о
выяснить одинаково ли они поним. задачу. В НФ постановке
оговариваются общие условия работы прогр., ввода и вывода
данных. 2.Форм. постановка задачи – Задача формализ. на
языке (математике, логике), определяются: Область исх. данных,
область реш. задачи, связи (формулы) между ИД и рез-таты. Необх.
для анализа задания на предмет существования решения задачи.
3.Разработка и поиск алгоритма – Разрабат. алгоритм, если
задача новая. Если задача решалась – найти алгоритм.
4.Специф. данных – Оговар. условия, как размещать данные на
внешн. носителях. 5.Специф. функций – Кажд. возм. случай
при реш. задачи оформл. как некот. функция, описыв. ее вх. и вых.
данные. 6.Проектирование – Составление эскиза прогр., в
котором зафикс. все ф-ии зад., как некоторые подзадачи. Проект
прогр. желат. иерархический, т.е. являться эскизом, в котором
выделены крупные подзадачи, на след. этапе выделенные подзадачи
разбиваются на свои подзадачи. В эскизе или архитект. проекте
выделяются осн. функции и указыв. вх. и вых. данные.
7.Программирование – Прогр. д/а быть наглядной. Имена
переменных д/ы отображать смысловые значения величин,не д.б.
слишком длинными. Прога надо разумно снабдить комментариями.
Основой для разработки проги д/н служить структурный подход,
базирующийся на исполнении управленч. структур 3-х типов:
следование; ветвление; цикл. Для наглядности рекомендуется
писать меньшее число операторов на одной строке. 8.Отладка –
Процесс выявл., локализ. устранения ошибок в алгоритме и
программе, осуществл. с помощью тестирования. 9.Тестиров. –
Процесс подготовки тестов и вып-я проги для этих тестов с
целью доказ-ва факта наличия в проге ошибки. 10.Опытная
эксплуатация – Разработка сложн. или больших по объему прог
соотв-т некот технологии прогр-я, согласно кот. достаточно
объемная задача проги м.б. выделена в самост-ю прогр.единицу
типа прога. Поэтому, если использ-ся технология прогр-я «сверху-вниз»
(пошаговая детализация),то можно создать на первом уровне
приемлемую по восприятию прогу, где достаточно сложные задачи
решаются подпрогами. Причем необяз-но эти подпроги
разарабатывать немедленно. Их разработку м. отложить на более
позднее время, заменив их для начала «заглушками» - подпроги,
имитир. основные рез-ты соответ-х подпрог. Если и сама подпрога
окажется сложной, процесс м. повторить.
Специф. проги
– единств. критерий проверки на правильность написанной проги.
Основой спецификации проги явл. согласов. с заказчиком
постановка задачи (письменно описать, что д/а, и что не д/а
делать прога).
2. Структ. программирование:
Язык PDL,
структурное программирование. Читабельность и оформление
программ.
После составления эскиза, необх.
уточнить выдел. задачи на языке проектиров.
PDL, в котором соединены естественный язык и язык
реализации. От языка программиров. принял зад. набор операторов,
а от естественного неопределенный внутр. синтаксис.
Группы операторов
PDL:
1.
Операторы выбора if,
case; 2. Операторы цикла
for,repeat,while; 3. Описание
данных; 4. Другие операторы goto,
собственные операторы; 5. Предложение на естественном
языке;
Структурное
программирование является мет. составления хорошо структурир.
прог, удобных для чтения и поним. человеком, прослежив. их
работы внес. в них исправлений. В записи алгоритма наряду с
правилами обработки данных, д/ы содерж. и указание о порядке их
вып. Структ. прогр-е предлагает любую прогу строить из станд.
логич. структур, число типов которых ограничено. Суть которых
объясняется с помощью блок-схем. Следование – Эта
структура представл. собой послед-сть блоков
s1,s2,…, sn,
кот. выполняются друг за другом в порядке следования в тексте.
Ветвление – Эта управл. структура, кот. в завис.
от усл. В опред. выбор вып. 1 из 2, зад. в этой структуре блоков
s1 и s2.
Повторение типа делать пока – Данная стр-ра
представляет собой цикл, в кот. зад. блок S
исполн. повт., пока зад. усл. вып. Если усл. не вып. при 1 же
проверке, то S вообще не будет исполн..
Читабельн. программ –
След. заботиться о том, чтобы
каждый оператор и каждая отдельная их последоват. были записаны
наиб. понятным образом. Структ. данных нередко играет важн. роль
при написании удобочит. программы, поэтому она должна выбир.я не
менее тщательно, чем алгоритм решения программы. Имена и метки д/ы
выбир. так, чтобы нести большую смысловую нагрузку и тем самым
облегчить чтение программы. В мировой практике получил широкое
распростр. способ мнемонич. имен – объедин. в одно слово нач.
отрезков слов, описыв. переменную. При этом длина отрезка должна
быть такой чтобы представл. слово дов. легко восстан. подготовл.
читателем. Имена д/ы быть не похоже друг на друга. Все имена
данных д/ы быть отнесены к определ. типу. Связные слова в тексте
следует распол. др. под др. (begin end).
Если вы пишете комм., то они должны нести максимум информации,
внутри программы они должны пояснять существо процесса а не
называть его. Рекоменд. оставлять м/у частями прогр. пустые
строки; Исп.ь базовые управляющие структуры; Соблюдать абзацный
отступ; Выравн. Альтернат. ветви оператора. Оформление
программы: Модуль по возм. должен быть самодокум. Внутри
текста докум. д/а исп. как м/о меньше, и не отвлекать от осн.
текста. Она должна доп. текст, а не прилаг. к нему.
3. Тестиров. программ: методы
тестиров.. Типы ошибок. Классиф. ошибок.
Тестирование
– процесс подготовки тестов и вып. прогри для этих тестов с
целью док-ва факта наличия в программе ошибки.
Тестирование
– это любая деятельность, направленная на обнаружение ошибок в
программном продукте. Тестирование проводится для того, чтобы
найти ошибки в программе и тем самым повысить ее надежность, а
следовательно, ценность. Если мы тестируем программу, то нам
нужно окупить затраты на тестирование, каким-либо образом
повысив стоимость программы. Это можно сделать только повысив
надежность программы, ради чего тестирование и проводится.
Повысить надежность можно только исправлением ошибок, внесенных
в процессе разработки. После тестирования нельзя гарантировать
отсутствие ошибок, можно лишь говорить о некотором уровне
уверенности в правильности работы системы.
Ошибка программы – наличие в
программе дефекта, который проявляется в том, что программа не
может быть выполнена или результаты работы программы отличаются
от ожидаемых. Виды ошибок: Синтаксические-ошибки
компиляции (результат незнания языка программирования или
невнимательность программирования).Обнаруж-ся на этапе
трансляции проги. Логические (результат грубого просмотра,
непонимания алгоритма программы, иногда непонимание смысла
некоторых конструкций языка прогр-я. Ошибки в логике программы,
но обусловленные внешними по отношению к алгоритму факторами,
т.е. алгоритм правильный, а прога составлена неправильно).
Семантические ошибки - ошибки времени выполнения - прога,
кот. пытается сделать что-нибудь запрещенное во время ее
выполнения.(деление на 0). Алгоритмические Доказательство
наличия в программе ошибки называется тестированием программы.
Методы тестирования
Класс 1. «Черного ящика»
- разработка тестов осущ-ся
без использ-я знаний о стр-ре проги, без привлечения сведений о
логике проги,т.е. известна прога, но не известна постановка
задачи. Тестирование программы с применение всего множества
возможных наборов исходных данных называют исчерпывающим. По
определению если при исчерпывающем тестировании не обнаружено
ошибок, то программа корректна.
Долгое время
основным способом тестирования было тестирование методом
"черного ящика" - программе подавались некоторые данные на вход
и проверялись результаты, в надежде найти несоответствия. При
этом как именно работает программа считается несущественным.
Этот подход до сих пор является самым распространенным в
повседневной практике, но у него есть целый ряд недостатков.
Во-первых, таким способом невозможно найти взаимоуничтожающихся
ошибок, во-вторых, некоторые ошибки возникают достаточно редко
(ошибки работы с памятью) и потому их трудно найти и
воспроизвести.
Метод эквивалентных разбиений:
Два теста эквивалентны,
если они обнаруживают одну и ту же ошибку. Все множество
исчерпывающих тестов разбивают на области-классы эквивалентности
и в каждой области проводят по одному или нескользкому тесту,
если ошибок нет, то все ок. Метод граничных значений:
Граничные условия – это ситуация возникающая непосредственно на,
выше или ниже границ входных выходных классов эквивалентности.
Анализ граничных значений отличается от эквивалентного
разбиением в двух отношениях. 1) выбор любого элемента в классе
эквивалентности в качестве предварительного при анализе
граничных значений осуществляется таким образом, чтобы проверить
тестом каждую границу класса. 2) при разработке тестов
рассматриваются не только входные условия, но и пространство
результатов. Если метод применяется правильно, то он является
одним из наиболее полезных методов проектирования тестов. Однако
он часто оказывается неэффективным из-за того что внешне
выглядит простым а границы условий могут быть едва уловимыми, и
следовательно их определение связано с большими трудностями.
Метод предположение об ошибке: Основная идея заключается в
том, чтобы перечислить в некотором списке возможные ошибки или
ситуации, в кот они могут появиться. Потом на основании этого
списка составить тесты. Например ситуация деление на ноль
значить нужно подобрать данные для теста дающего в знаменателе
ноль.
Требуется перечислить те
специальные случаи, кот могут быть не учтены в спецификации.
Класс2. «Белого ящика»
Основываются на знании логич
структуры проги, т.е. известен текст проги.
Метод тестирования, которые изучают не только внешнее
поведение программы, но и ее внутреннее устройство (исходные
тексты). Такие методики обобщенно называют тестированием "белого
ящика". Назовем некоторых представителей этого класса методик:
чтение программ, формальные просмотры программ, инспекции и
т.п.). Основной трудностью подобных методов является сложность
отслеживания вычислений времени выполнения.
При тестировании программы как белый ящик происходит проверка
логики программы. Полным тестированием в этом случае будет
такое, которое приведет к перебору всех возможных путей. Даже
для средних по сложности программ числом таких путей может
достигать десятков тысяч.
Метод покрытия элементарных
указаний: Необходимо
покрыть столько тестов сколько их достаточно чтобы покрыть все
элементарные операторы. Рекомендуется как можно меньше тестов.
Положительная сторона метода – возможность проверить все ли
указания используются. Негативная сторона – нельзя проверить
ошибки условия.
Метод покрытия всех ветвей:
Ветвь покрывается
тестом, если при выполнении программы для этого теста указания
ветви использовались. Для покрытия всех ветвей собирается
наименьшее количество тестов. Метод покрытия элементарных
условий: Условие – любая форма условного выражения.
Элементарное условие – один операнд условного выражения. Они
предварительно и тщательно проверяются на правильность записи.
Согласно методу нужно столько тестов, чтобы проверить, что
каждое элементарное условие на этих тестах имело истинное и
ложное значение. Классификация ошибок: Программист
обязан знать: Источник ошибок – не
понимание Р задачи З, его поспешность перехода к последующим
этапам или игнорирование этого этапа. Классы ошибок, Как
идентифицировать ошибку и обязан уметь: Локализовать
место ошибки; Устроить так, чтобы не допустить новую ошибку; На
каждом этапе программирования может появиться ошибка.
Отладка-процсс
устранен ошбок,кот имеет3этапа:-обнруж признковошибок,-локализац
ошибки, - исправление ошибки.Локализац ошбки:Установить
класс ошбки(алгоритм или семантич,для чего желат перепроверить
формал.постанзадачи и проект проги.Если здесь обнаруж ошбка,то
надо исправить ее в проге.Возмож прогу придется перепис
заново.Если харр ошбки не ясен(семант или алгоритм),то
выдвигается неск гипотез о прич ошбки:1.правильно печатается
резт(м/б что ошбки в операторах печати)2.правильно ли передаются
в проге или подпроге исхданные (м/б нарушен интерфейс со средой)
.Виды семантич ошбок:а)ошибки ввода/вывода б)
ошбки при обращении к f.в)ошбки
при работе с циклами и переключателями.г)ошбки при раб со
строками д)ошбки в сравнениях. I.
типичные ошибки при вводе: -неправильно размещ данные на
носителях info; - несоотв
типов,форматов и данных; - конец файла обнаружен раньше,чем
ожидался (не хват данных); - неправ указ файлов в функциях
открытия файла. II. ошбки описания
данных: - нечеткое знание правил опредления действия имен(облсть
действия и обл описния); - использ правил умолчания языка.
III.ошбки при обращении к данным:использ
перемен,знач кот не опредлено;-выход индекса массива за его
границы; - попытка обратиться к памяти по неопределен адресу.
IV. ошибки вычислений:-не
акууратное использ разл типов данных в арифметич действиях; -
деление на 0,потеря точности,исчезноваение порядка.
V. ошбки при сравнении:
-сравнение разнотипных данных; -сравнение действит числе на
равнество (0 и 1); - неизвестн способ вычисления функции.VI.
ошбки в передачах управления: - бесконечный циклы; -
мертвые операторы; - неточность в условиях цикла; - несоотв
операторынх скобок(begin и
end).VII.
ошбки при передаче аргументов в вызываемых подпрогах: -
нарушение несоотв м/ду аргументами и параметрами по
колву,типу,по порядку следов.-изменен ие входного парам,если он
не м/изменяться, т.к. передается по знач или по ссылке.
4. Статич., автоматич. и
динамич. переменные.
Переменные
– это именов. область памяти, в которой хранятся данные
определенного типа. У переем. есть имя значение. Имя служит для
обращения к области памяти, в которой храниться значение. Во
время выполнения программы значение переменной можно изменять.
Перед исп. любая перем. д/а быть описана. Объявл. перем. в лок.
области видимости вводит лок. объект. Сущ, неск. видов таких
объектов: автоматические, статические,
динамические, различ. временем жизни и характеристиками
заним. памяти. Самый простой метод – это объявление перем.
внутри функций. Если перем. объявлена внутри ф-ии, каждый раз,
когда ф-ия вызывается, под переменную автоматически отводится
память. Когда ф-ия завершается, память, занимаемая переменными,
освобождается. Такие переменные называют автоматич..
При создании автоматич. перем. они никак не инициализ., т.е.
знач. автоматической перем. сразу после ее создания не
определено, и нельзя предсказать, каким будет это значение.
Соотв., перед исп. Автоматич. перем. Необх. либо явно инициализ.
их, либо присвоить им какое-либо значение. Др. способ выдел.
памяти – статич. Если переменная определена вне
ф-ии, память для нее отводится статически, 1 раз в нач. вып.
программы, и переменная уничтож. только тогда, когда вып.
программы заверш. М/о статически выдел. память и под перем.,
определ. внутри ф-ии или блока. Неинициализир. статич. лок.
объекты получают значение 0. А автоматич. объекты в подобной
ситуации получают случ. значения. Время жизни глоб. и лок.
объектов четко определено. Однако иногда необх. иметь объекты,
временем жизни кот. м/о управлять. Выдел. памяти под них и ее
освобожд. зависят от действий вып. прогри. Напр., м/о отвести
память под текст сообщения об ошибке только в том случае, если
ош. действит. имела место. Если програ выдает неск. таких
сообщений, размер выдел. строки будет разным в завис. от длины
текста, т.е. подчин. типу ошибки, произош. во время исполн.
прогр. Третий вид объектов позволяет программисту полностью
управлять выдел. и освобожд. памяти. Такие объекты назыв.
динамич. размещаемыми или, для краткости, просто динамич..
Динамич. объект “живет” в пуле своб. памяти, назыв. кучей.
Программист создает его с помощью оператора new, а уничтожает с
помощью оператора delete. Динамич. размещаться м/т как единичный
объект, так и массив объектов. Размер массива, размещаемого в
куче, разреш. задавать во время выполнения. Динамич.
перем. называется выделенный участок динамич. памяти, доступ к
которой осущ. через указатели. Динамич. память (куча) – это
свободная память, в кот. м/о выдел. место во время вып. проги
соответствии с потребн.
5. Мех. передачи данных в
подпрограммах: Факт. и форм. параметры. Рекурсия.
Подпроги – набор операторов, вып.
нужное действие и не зависящ от др частей исх кода. Прога разбив
на множ мелких подпрог, кажд из кот выпол одно из действ,
предусмотр исх заданием. Чтобы работа подпроги имела смысл, ей
надо получ данные из внеш проги, кот эту подпрогу вызывает.
Данные передаются подпроге в виде парам или аргум, кот обыч
описыв в ее заголов так же, как перемен. Во время созд подпроги
заранее неизв, какие конкретно парам она может и будет получ.
Поэтому в кач перемен, выступ. в роли ее аргум в заголов, м/использ
произв. допуст. назв., даже совпад. с уже имеющимися. Компилятор
все равно поймет, что это не одно и то же. Парам, кот указыв в
заголов подпроги, назыв формальными. Они нужны только для
описан тела подпроги. А парам (конкрет знач), кот указыв в
момент вызова подпроги,наз фактическими парам.При выполн
операторов подпроги формальн парам как бы временно заменятся на
фактич.
Ф-ию можно рассматривать как
операцию, определенную пользователем. В общем случае она
задается своим именем. Операнды функции, или формальные
парам, задаются в списке парам, через запятую. Такой список
заключается в круглые скобки. Рез-том ф-ии м/т быть знач.,
которое назыв. возвращ. Выполнение ф-ии происх. тогда, когда в
тексте программы встречается оператор вызова. Если ф-ия приним.
параметры, при ее вызове должны быть указаны фактические
параметры, аргум. Их перечисл. внутри скобок, через запятую.
Ф-ия, которая прямо или косв вызывает сама себя, назыв
рекурсивной. Такая ф-ия обязат. д/а определ. условие
окончания, в противном случае рекурсия будет продолж.
бесконечно. Подобную ошибку так иногда и называют – бесконечная
рекурсия. Рекурс. Ф-ии обычно вып. медл., чем их нерекурсивные
(итеративные) аналоги. Это связ. с затратами времени на вызов
ф-ии. Однако, как правило, они компактнее и понятнее. Рекурс.
подпрога (процед., ф-ия) предназн. для реш. Зад. путем многокр.
повторения 1 и того же метода. В некот. смысле рекурсивность
похожа на цикл типа while<условие>do.
поэтому в рекурсии нужно соблюдать 2 требования: 1) необх-мо
условие окончания рекурсии; 2) каждый шаг рекурсии должен
приближать к условию окончания рекурсии. Каждая активация рекурс.
подпроги создает в операт. памяти новые локальные перем. с
неопределенными значениями и формальные параметры согласно
способу передачи значения и сохр. старые лок. перем. и
фактические параметры, т.о. при рекурсии идет доп. расход операт.
памяти.
|