Для получения дополнительной информации об ошибке можно выполнить добавочные тесты или использовать специальные методы и средства:
— интегрированные средства отладки;
Отладочный вывод. Метод требует включения в программу дополнительного отладочного вывода в узловых точках. Узловыми считают точки алгоритма, в которых основные переменные программы меняют свои значения. Например, отладочный вывод следует предусмотреть до и после завершения цикла изменения некоторого массива значений. (Если отладочный вывод предусмотреть в цикле, то будет выведено слишком много значений, в которых, как правило, сложно разбираться.) При этом предполагается, что, выполнив анализ выведенных значений, программист уточнит момент, когда были получены неправильные значения, и сможет сделать вывод о причине ошибки.
Назовите цель разбиения исходных данных программ на классы эквивалентности. Приведите пример выделения классов эквивалентности для какойлибо задачи
Основы педагогической психологии как средство продуктивности образовательного процесса
Единственный в мире Музей Смайликов
Самая яркая достопримечательность Крыма
Скачать 1.01 Mb.
30. Методы получения дополнительной информации об ошибках.
Наиболее распространенными и наименее эффективными для отладки являются так называемые методы ‘грубой силы’. К ним относят:
2) отладку с использованием операторов печати по всей программе;
3) отладку с использованием автоматических средств.
Дампы памяти практически невозможно использовать при программировании на языке высокого уровня, поэтому на этом способе отладки останавливаться не будем
Расстановка печатей в программе бессистемно вряд ли может ускорить отладку. Для системной расстановки нужны четкие представления о структуре алгоритма (схема работы программы или блок-схема). Серьезным недостатком этого метода отладки является тот факт, что печати, вставляемые в программу, изменяют ее, вследствие чего могут послужить дополнительным источником ошибок.
31. Общая методика отладки программ.
1й этап – изучение проявления ошибки. Результатом выполнения этапа должна быть локализация ошибки. При этом можно использовать методы индукции и дедукции и средства получения дополнительной информации об ошибке.
2й этап – выполняется, если произошло “зависание” или не удалось локализовать ошибку, используя методы 1го этапа
3й этап – определение причины ошибки. После локализации ошибки выдвигаются версии о ее природе. Эти версии необходимо проверить, используя отладочные средства для просмотра последовательности операторов и значений переменных
4й этап – исправление ошибки. Здесь нужно помнить 1 вещь – небрежное исправление может породить новые ошибки.
5й этап – повторное тестирование
32. Критерии качества программ.
3) легкость применения
Функциональность — это способность выполнять набор функций, определенных его внешними спецификациями.
Процессы. Способы создания WinAPI и POSIX процессов.
Надежность ПП — это способность безотказно выполнять заданные функции при заданных условиях в течение заданного периода времени с высокой степенью вероятности. Легкость применения — это способность минимизировать затраты пользователя подготовку и ввод исходных данных и оценку полученных результатов, а также вызывать положительные эмоции пользователя.
Эффективность — это отношение уровня услуг, предоставляемых ПП, к объему используемых вычислительных ресурсов.
Сопровождаемость — это такие характеристики ПП, которые позволяют минимизировать усилия по внесению изменений при обнаружении ошибок в ПП и при его модификации. Не последнюю роль в повышении сопровождасмости играют комментарии к тексту программы!
Мобильность — это способность ПП быть перенесенным из одной вычислительной среды (окружения) в другую, в частности, с одной ЭВМ на другую (применяют термин «перенос с одной платформы на другую»)
Хорошим считается такой стиль оформления программ, который облегчает восприятие программного кода как для самого автора, так и для других программистов , которым, возможно, придется его читать и модифицировать. Стиль оформления включает:
1) правила именования объектов программы (переменных, функций, типов данных и т.п.)
2) правила оформления модулей
3) стиль оформления текстов программ (Это с сайта ответ)
Ответ с лекции
Стиль оформления программы:
— включает в себя правила наименования объектов, правла формирования модулей, стиль оформления текстов
-способы экономии памяти
-способ уменьшения времени выполения
- Эффективность программ: способы экономии памяти
- Эффективность программ: способы экономии времени выполнения.
Первый способ связан с учетом времени выполнения операций в ЭВМ:
• сложение и вычитание выполняются быстрее, чем умножение и деление (в связи с чем Х+Х выполнясгся быстрее, чем ^ 2*Х)
• целочисленная арифметика быстрее арифметики вещественных чисел (поэтому (i+i+j)* 0,5 быстрее» чем i+0,5*j, так как в первом варианте одна операция с вещественными числами, а во втором – две)
• в целочисленной арифметике операции умножения иди деления на числа, кратные 2, можно заменить соответствующим количеством сдвигов.
• обращение к функции требует больших временных затрат, чем умножение и деление.
Далее для уменьшения времени выполнения необходимо анализировать циклические участки программы с большим количеством повторений.
При их написании необходимо по возможности:
1) выносить вычисление константных, т.е. не зависящих от параметров цикла выражений из циклов.
2) избегать длинных операций умножения и деления, заменяя их по возможности сложением, вычитанием и сдвигами
3) минимизировать преобразования типов в выражениях
4) оптимизировать запись условных выражений – исключать лишние проверки.
5) исключать многократные обращения к элементам массивов по индексам
6) избегать использования различных типов в выражении и т.п.
- Программирование “с защитой от ошибок”.
Любая из ошибок программирования, которая не обнаруживается на этапах компиляции и компоновки программы, в конечном счете может проявиться тремя способами; привести к выдаче системного сообщения об ошибке, «зависанию» компьютера или получению неверных результатов.
Однако до того, как результат работы программы становится фатальным, ошибки обычно много раз проявляются в виде неверных промежуточных, результатов, неверных управляющих переменных, неверных типов данных, индексах структур данных и т. п.
Программирование, при котором применяют специальные приемы раннего обнаружения и нейтрализации ошибок, было названо защитным или программированием с защитой от ошибок. При его использовании существенно уменьшается вероятность получения неверных результатов.
Детальный анализ ошибок и их возможных ранних проявлений показывает, что целесообразно проверять:
• правильность выполнения операций ввода-вывода;
• допустимость промежуточных результатов (значений управляющих переменных, значений индексов, типов данных значений числовых аргументов и т. д.)
Проверки правильности выполнения операций ввода-вывода. Причинами неверного определения исходных данных могут являться как внутренние ошибки — ошибки устройств ввода-вывода или программного обеспечения, так и внешние ошибки — ошибки пользователя. При этом принято различать:
• ошибки передачи — аппаратные средства, например, вследствие неисправности, искажают данные;
• ошибки преобразования — программа неверно преобразует исходные данные из входного формата во внутренний формат;
• ошибки перезаписи — пользователь ошибается при вводе данных, например, вводит лишний или другой символ;
• ошибки данных — пользователь вводит неверные данные. Ошибки передачи обычно контролируются аппаратно. Для защиты от ошибок преобразования данные после ввода обычно сразу демонстрируют пользователю («эхо»). При этом выполняют сначала преобразование во внутренний формат, а затем обратно. Однако предотвратить все ошибки преобразования на данном этапе обычно крайне сложно, поэтому соответствующие фрагменты программы тщательно тестируют, используя методы эквивалентного разбиения и граничных значений (см. раздел «тестирование»).
Обнаружить и устранить ошибки перезаписи можно, только если пользователь вводит избыточные данные», например, контрольные суммы. Если ввод избыточных данных по каким-либо причинам нежелателен, то следует по возможности проверять вводимые данные, хотя бы контролировать интервалы возможных значений, которые обычно определены в техническом задании, и выводить введенные данные для проверки пользователю. Неверные данные обычно может обнаружить только пользователь
37. Стихийное программирование. Этапы совершенствования архитектуры программ.
Суть его в том, чтобы из операторов языка программирования сконструировать программу, выполняющую некоторое (заданное) преобразование данных. Ни набор операторов, ни порядок их применения никак не регламентировался. В общем случае для такого программирования, чем больше операторов в языке программирования, тем лучше.
Главный недостаток разработанного таким образом ПО – большие трудности его сопровождения. Программы, написанные без регламентации применения операторов языка программирования, имеют структуру “итальянского спагетти” из-за частого применения в таких программах оператора перехода goto. Как правило, в таких программах может разобраться только автор, они плохо пригодны для тиражирования и превращения в товар.
В конце 60-х начале 70-х годов в сфере ПО обозначились трудности, порожденные расширением области применения компьютеров. Возросшая мощность вычислительной техники и появление языков высокого уровня позволили приступить к автоматизации процессов, с которыми люди перестали справляться или к которым еще не приступали из-за их высокой вычислительной сложности.
Знаменательной датой в истории программирования стал 1968 год. Тогда создавшееся в программировании положение обсуждалось на международной конференции, получившей название “Кризис программного обеспечения”. В этом году Чарльз Хоар и Николаус Вирт впервые указали на необходимость придания языку программирования свойств, которые превратили бы его в “инструмент надежного создания сложных программ”. Однако настоять на этом им не удалось.
Несколько позже автор структурного программирования голландский ученый Дийкстра (в некоторых источниках Дейкстра) выпустил работу под названием “заметки по структурному программированию”, в которой доказывал, что большинство программ сложны и неуправляемы из-за отсутствия в них четкой математической структуры.
38. Структурное программирование. Определение подхода, цель и принципы.
Цель структурного программирования – разработка программы, которой присуща определенная структура, основанная на применении принципов структурного программирования.
- Каждый программный модуль (блок, функция, процедура) должен иметь только один вход и один выход.
В программах рекомендуется применять 4 типа конструкций:
а) последовательность (модулей, операторов)
б) разветвление (условный оператор)
Перечеркивание означает, что Q может отсутствовать.
г) выбор из нескольких альтернатив (или переключатель)
- разработку программ рекомендуется вести сверху – вниз или по нисходящей стратегии.
Суть нисходящей стратегии в том, что проектировщик должен приступить к работе, имея только концептуальный абстрактный замысел о том, что система или программа будет делать. Затем этот замысел постепенно конкретизируется шаг за шагом, тем самым погружаясь в подробности окончательного программного продукта до тех пор, пока не будет достигнуто «дно», под которым понимаются программные модули, реализующие отдельные функции или процедуры преобразования данных (принцип декомпозиции).
Обобщением проектирования сверху – вниз является и разработка ПО по этому же принципу. Это означает, что до проработки всех деталей можно реализовать для системы скелет верхнего уровня и убедиться в том, что система работоспособна.
40.Принципы модульного программирования.
Приступая к разработке ПП следует помнить, что ПП является большой системой, поэтому должны приниматься меры по ее упрощению. Одним из основополагающих принципов упрощения является принцип “разделяй и властвуй”, который получил научное название декомпозиция. При разработке ПП этот принцип реализуют путем разработки большой программы по частям, которые называют программными модулями, а сам такой метод разработки программ называют модульным программированием
Принципы модульного программирования позволяют получать программные комплексы минимальной сложности. Эти принципы следующие:
а) усиление внутренних связей в каждом модуле (иначе принцип называется повышением прочности модуля);
б) ослабление взаимосвязи между модулями (иначе этот принцип называется ослаблением сцепления модулей).
41. Основные понятия объектно-ориентированного программирования
Несмотря на то что в различных источниках делается акцент на те или иные особенности внедрения и применения ООП, три основных (базовых) понятия ООП остаются неизменными. К ним относятся:
Инкапсуляция — это механизм, который объединяет данные и методы, манипулирующие этими данными, и защищает и то и другое от внешнего вмешательства или неправильного использования. Когда методы и данные объединяются таким способом, создается объект.
Наследование — это процесс, посредством которого один объект может наследовать свойства другого объекта и добавлять к ним черты, характерные только для него. В итоге создается иерархия объектных типов, где поля данных и методов «предков» автоматически являются и полями данных и методов «потомков».
Полиморфизм — это свойство, которое позволяет одно и то же имя использовать для решения нескольких технически разных задач. Полиморфизм подразумевает такое определение методов в иерархии типов, при котором метод с одним именем может применяться к различным родственным объектам. В общем смысле концепцией полиморфизма является идея «один интерфейс — множество методов». Преимуществом полиморфизма является то, что он помогает снижать сложность программ, разрешая использование одного интерфейса для единого класса действий. Выбор конкретного действия в зависимости от ситуации возлагается на компилятор.
Основными понятиями ООП являются объект (экземпляр класса), класс , метод и сообщение (запрос)
Источник: topuch.com
Средства получения справки и отладки программ
Это окно используется для отслеживания значений переменных или выражений. Можно одновременно задавать несколько контрольных выражений. Можно использовать контрольные значения для задания моментов останова программы.
Определяемое пользователем контрольное выражение позволяет следить в процессе пошагового выполнения программы за изменением значения этого выражения.
Чтобы определить новое контрольное выражение, выполните команду Add Watch (Добавить контрольное значение) из меню Debug. Кнопка панели инструментов
Рис. 3.12. Добавление нового контрольного значения
Вводимое в строку Expression (см. рис. 3.12) выражение может быть переменной, свойством или любым другим допустимым в Visual Basic выражением. Если в окне модуля перед выполнением команды Add Watch было выделено некоторое выражение, то оно автоматически отображается в строке Expression.
Допускается перетаскивание мышью выделенного выражения из окна модуля в окно контрольных значений Watches.
Контекст контрольного выражения ( Context ) — это область определения контрольного выражения:·поле Procedure отображает имя процедуры, в которой вычисляется введенное выражение. Допускается выбор всех процедур модуля либо отдельной процедуры.
Поле Module отображает имя модуля, в котором вычисляется выражение. Допускается выбор всех модулей либо отдельного модуля.
Строка Project отображает имя текущего проекта. Вычисление выражений вне текущего проекта невозможно.
- При выборе контекста контрольного выражения всегда следует задавать самую узкую область определения вычисляемого выражения, удовлетворяющую поставленной задаче. Выбор всех процедур или всех модулей может значительно замедлить выполнение, поскольку контрольное выражение вычисляется после выполнения каждой инструкции.
В области Watch Type (Тип контрольного значения) можно задать реакцию Visual Basic на значение контрольного выражения:
- Watch Expression (Контрольное выражение) отображает в окне контрольных значений заданное выражение и его значение.
- Break When Value is True (Останов, если значение выражения истинно) — выполнение программы автоматически прерывается, когда значение выражения становится истинным или ненулевым (недопустимо для строковых выражений).
- Break When Value Changes (Останов при изменении значения выражения) — выполнение программы автоматически прерывается при изменении значения выражения в указанном контексте.
Введенное выражение и его значение отображаются в окне Watches ( рис. 3.13).
Рис. 3.13. Окно контрольных значений
Значения автоматически обновляются в этом окне при прерывании программы, при переходе к следующему шагу, а также после выполнения каждой инструкции в окне Immediate. В окне контрольных значений выводится значение выражения , которое оно имеет в контексте, определенном процедурой и модулем.
Команда Edit Watch (Изменить контрольное значение) из меню Debug позволяет отредактировать или удалить контрольное выражение.
Команда доступна только при установленном контрольном значении, даже если окно контрольных значений закрыто.
Окно диалога Edit Watch ( рис. 3.14)похоже на окно Add Watch и элементы окна Edit Watch устанавливаются точно также как элементы окна Add Watch. Кнопка панели инструментовФункциональные клавиши Ctrl+W.
Рис. 3.14. Добавление контрольного выражения
Команда Quick Watch (Контрольное значение) из меню Debug выводит окно диалога Quick Watch с текущим значением выделенного в тексте процедуры выражения. Эта команда служит для просмотра текущего значения переменной, свойства объекта или другого выражения, для которого не задано контрольное выражение.
Рис. 3.15. Окно контрольных значений Quick Watch
Для добавления просматриваемого в окне Quick Watch ( рис. 3.15) выражения в список контрольных выражений следует нажать кнопку Add. Кнопка панели инструментовфункциональные клавиши Shift+F9.
- Контрольные выражения не сохраняются вместе с программой.
Контрольные точки или точки останова
Точка останова ( Breakpoint ) представляет собой строку процедуры, на которой разработчик во время отладки планирует остановить выполнение программы. Обычно точки останова используются в больших программах с целью определения их поведения. Имеет смысл устанавливать контрольные точки там, где предположительно может возникнуть ошибка, или в местах, которые отмечают прохождение логических частей программы, например, окончание ввода данных, расчет промежуточных результатов и т.п.
Для установки контрольной точки переместитесь на нужную строку процедуры и нажмите пиктограммуМожно выполнить команду Debug-Toggle Breakpoint (Отладка-Точка останова) или нажать клавишу F9. Можно сделать щелчок на вертикальную полосу слева от строки процедуры. Строка подсвечивается цветом точки останова ( Breakpoint Text ), задаваемым на вкладке Editor Format команды Tools-Options. Обычно это коричневый цвет.
При достижении точки останова программа не прерывается, а переходит в режим отладки , который позволяет посмотреть возможное место ошибки и исправить его. Продвижение от одной точки останова к другой в режиме выполнения программы производится нажатием кнопки Runклавишей F5 или командой Run.
Если точка останова задана в строке, содержащей несколько операторов, разделенных двоеточием (:), останов происходит в первой инструкции такой строки.
Если точки останова больше не нужны, их надо снять. Отмена всех точек останова производится командой Clear All Breakpoints (Снять все точки останова) из меню Debug или клавишами Ctrl+Shift+F9. Отменить действие этой команды нельзя.
Для снятия одной точки останова выполните команду Toggle Breakpoint из меню Debug для строки процедуры, содержащей точку останова. Можно нажать клавишу F9 или пиктограммуМожно сделать щелчок на установленную точку на вертикальной полосе слева от строки процедуры. Точка останова удаляется и подсветка строки снимается.
- Нельзя установить точку останова на пустой строке или на строке, содержащей неисполняемые инструкции, например комментарии, объявление переменных .
- Точки останова не сохраняются вместе с программой.
Трассировка или пошаговое выполнение программы
Поскольку последовательность выполнения операторов программы не всегда очевидна, можно выполнять программу по шагам — команду за командой или процедуру за процедурой. При таком способе отладки можно отследить порядок выполнения операторов и наблюдать реакцию программы на выполнение каждого оператора.
Для запуска пошагового режима можно нажать одну из кнопокпанели инструментов Debug или выполнить соответствующие команды из меню Debug. Трассировку можно выполнять с начала программы или с точки останова после прерывания программы. При трассировке на вертикальной полосе слева от выполняемого оператора расположена стрелка — указатель выполняемого оператора .
Источник: intuit.ru