Как называется процесс исправления ошибок в программе, при этом цель исправить все ошибки не ставится? — ответ на тест
· 0
Вопрос: Как называется процесс исправления ошибок в программе, при этом цель исправить все ошибки не ставится? Ответ: отладка.
Ответы на тесты
Информатика — ответы на вопросы тестаКак называется процесс исправления ошибок в программе, при этом цель исправить все ошибки не ставится? — ответ на тест
процесс поиска, локализации и исправления ошибок в компьютерной программе. На всех этапах разработки программного обеспечения О. п. тесно связана с тестированием программ. В процессе тестирования (напр., с использованием спец. подобранных наборов исходных данных) могут достигаться такие состояния программы, в которых фиксируются расхождения с заданными спецификациями. О. п. обеспечивает поиск причин этих расхождений (локализацию ошибок) и соответствующую корректировку программы. В процессе трансляции (см. ) и выполнения программы (которая реализует некоторую функцию) компьютер, используя свои аппаратно-программные ресурсы, доопределяет (напр., вызывает из библиотеки стандартные подпрограммы) частично определённую программой функцию до т. н. тотально определённой. Т. о. судить о правильности или неправильности результатов выполнения программы можно только сравнивая заданную спецификацию функции с результатами её вычислений, что и осуществляется в процессах тестирования и отладки.
Методы отладки программного обеспечения
Отладка программы в любом случае предполагает обдумывание и логическое осмысление всей имеющейся информации об ошибке. Большинство ошибок можно обнаружить по косвенным признакам посредством тщательного анализа текстов программ и результатов тестирования без получения дополнительной информации. При этом используют различные методы:
Метод ручного тестирования. Это — самый простой и естественный способ данной группы. При обнаружении ошибки необходимо выполнить тестируемую программу вручную, используя тестовый набор, при работе с которым была обнаружена ошибка.
Метод очень эффективен, но не применим для больших программ, программ со сложными вычислениями и в тех случаях, когда ошибка связана с неверным представлением программиста о выполнении некоторых операций.
Данный метод часто используют как составную часть других методов отладки.
Метод основан на тщательном анализе симптомов ошибки, которые могут проявляться как неверные результаты вычислений или как сообщение об ошибке. Если компьютер просто «зависает», то фрагмент проявления ошибки вычисляют, исходя из последних полученных результатов и действий пользователя. Полученную таким образом информацию организуют и тщательно изучают, просматривая соответствующий фрагмент программы. В результате этих действий выдвигают гипотезы об ошибках, каждую из которых проверяют. Если гипотеза верна, то детализируют информацию об ошибке, иначе — выдвигают другую гипотезу. Последовательность выполнения отладки методом индукции показана на рис. 10.3 в виде схемы алгоритма.
Самый ответственный этап — выявление симптомов ошибки. Организуя данные об ошибке, целесообразно записать все, что известно о ее проявлениях, причем фиксируют, как ситуации, в которых фрагмент с ошибкой выполняется нормально, так и ситуации, в которых ошибка проявляется. Если в результате изучения данных никаких гипотез не появляется, то необходима дополнительная информация об ошибке. Дополнительную информацию можно получить, например, в результате выполнения схожих тестов.
В процессе доказательства пытаются выяснить, все ли проявления ошибки объясняет данная гипотеза, если не все, то либо гипотеза не верна, либо ошибок несколько.
По методу дедукции вначале формируют множество причин, которые могли бы вызвать данное проявление ошибки. Затем анализируя причины, исключают те, которые противоречат имеющимся данным. Если все причины исключены, то следует выполнить дополнительное тестирование исследуемого фрагмента. В противном случае наиболее вероятную гипотезу пытаются доказать. Если гипотеза объясняет полученные признаки ошибки, то ошибка найдена, иначе — проверяют следующую причину (рис. 10.4).
Метод обратного прослеживания. Для небольших программ эффективно применение метода обратного прослеживания. Начинают с точки вывода неправильного результата. Для этой точки строится гипотеза о значениях основных переменных, которые могли бы привести к получению имеющегося результата. Далее, исходя из этой гипотезы, делают предложения о значениях переменных в предыдущей точке. Процесс продолжают, пока не обнаружат причину ошибки.
Методы О. п. для последовательных и параллельных вычислит. процессов существенно различаются. Для характерна повторяемость результатов при выполнении программы с одними и теми же исходными данными. Поэтому для отслеживания и контроля состояний вычислит. процесса при их отладке применяют О. п.: ручную, пошаговую, О. п. по предварительно заданным т. н. точкам останова и др. При ручной О. п. (desk checking) анализ состояния вычислит. процесса (используя исходные данные, при работе с которыми была обнаружена ошибка) выполняет непосредственно разработчик на основании своего опыта, знаний и интуиции. В процессе пошаговой О. п. (single-step operation) состояние вычислит. процесса анализируют после выполнения каждого оператора (команды) программы. О. п. по предварительно заданным точкам останова программы (breakpoints – меткам операторов) позволяет после выполнения заданного заранее множества операторов приостановить на время выполнение программы, напр. для просмотра состояний выбранных параметров. Проводят также анализ зафиксированных состояний выделенных областей памяти (dump) отлаживаемого процесса и его программно-аппаратного окружения. При О. п. обратного выполнения (reversible execution) осуществляют анализ вычислит. процесса начиная с состояния, в котором зафиксирована ошибка, и заканчивая состоянием, идентифицируемым как причина ошибки. Трассировка (tracing) предоставляет для анализа информацию о поведении программы, которая содержит в т. ч. данные о потоке управления, т. е. последовательности событий (путей) в процессе выполнения программы. Информация, необходимая для анализа О. п., как правило, собирается автоматически в процессе тестирования О. п. и сохраняется в файле спец. формата (Log – журнал). Состав и структура сохраняемой в журнале информации определяется разработчиком заранее. Для сбора информации об О. п. часто применяют т. н. инструментацию отлаживаемой программы, т. е. преобразование исходной программы в функционально эквивалентную, которая в заданных точках расширена операторами, фиксирующими выбранное подмножество состояний вычислит. процесса. Инструментация программы не нарушает результатов вычислений отлаживаемого процесса, но влияет на время его выполнения. Для О. п. последоват. процессов с недетерминированным окружением следует создавать спец. условия (напр., спец. множества тестов – тестовые наборы), позволяющие учитывать все варианты недетерминированных взаимодействий отлаживаемой программы с программно-аппаратным окружением.
При О. п. следует учитывать, что порядок выполнения операторов (команд) каждого из процессов при параллельных вычислениях сохраняется, однако порядок выполнения операторов разных процессов недетерминирован (свойство интерливинга), что может привести к получению разных результатов выполнения параллельных процессов (на одном и том же наборе данных). Если параллельные процессы независимы, т. е. совместно не используют общих переменных и иных общих ресурсов, а также не обмениваются сообщениями, то их отладка может быть сведена к отладке нескольких параллельных процессов. Если вышеперечисленные условия не выполняются, то в процессе О. п. необходимо локализовать и проанализировать точки (области) параллельных вычислит. процессов, в которых сосредоточено их взаимовлияние; чаще всего в этих точках процесс выполнения операторов разных процессов необходимо упорядочить (синхронизовать). Т. е. в программы процессов следует внести такие изменения, которые гарантируют при исполнении программ независимый (инвариантный) от интерливинга результат вычислений.
При отладке параллельных программ обычно применяют следующие методы. Анализ выполнения параллельных процессов на предмет возникновения недопустимой ситуации – одновременного доступа к общему ресурсу нескольких процессов, и обеспечение условий, исключающих данную ситуацию. Локализация точек изменения общего ресурса одним из параллельных процессов, анализ влияния этих изменений на др. параллельные процессы, а также обеспечение синхронизации процессов в локализованных точках. Локализация и анализ точек недетерминированного взаимодействия параллельных процессов и создание спец. условий (напр., спец. тестовые наборы), позволяющих учитывать все варианты недетерминированных взаимодействий. Результатом корректировки программы в процессе отладки может являться не только исправление найденных ошибок, но и внесение в программу новых ошибок (т. н. индуцированных ошибок), что приводит к повторному циклу тестирования и отладке программ.
Отладка программы — один их самых сложных этапов разработки программного обеспечения, требующий глубокого знания:
специфики управления используемыми техническими средствами,
среды и языка программирования,
природы и специфики различных ошибок,
методик отладки и соответствующих программных средств.
— это процесс локализации и исправления ошибок, обнаруженных при тестировании программного обеспечения. называют процесс определения оператора программы, выполнение которого вызвало нарушение нормального вычислительного процесса. Доя исправления ошибки необходимо определить ее , т. е. определить оператор или фрагмент, содержащие ошибку. Причины ошибок могут быть как очевидны, так и очень глубоко скрыты.
целом сложность отладки обусловлена следующими причинами:
требует от программиста глубоких знаний специфики управления используемыми техническими средствами, операционной системы, среды и языка программирования, реализуемых процессов, природы и специфики различных ошибок, методик отладки и соответствующих программных средств;
психологически дискомфортна, так как необходимо искать собственные ошибки и, как правило, в условиях ограниченного времени;
возможно взаимовлияние ошибок в разных частях программы, например, за счет затирания области памяти одного модуля другим из-за ошибок адресации;
отсутствуют четко сформулированные методики отладки.
соответствии с этапом обработки, на котором проявляются ошибки, различают (рис. 10.1):
— ошибки, фиксируемые компилятором (транслятором, интерпретатором) при выполнении синтаксического и частично семантического анализа программы; — ошибки, обнаруженные компоновщиком (редактором связей) при объединении модулей программы;
— ошибки, обнаруженные операционной системой, аппаратными средствами или пользователем при выполнении программы.
Синтаксические ошибки относят к группе самых простых, так как синтаксис языка, как правило, строго формализован, и ошибки сопровождаются развернутым комментарием с указанием ее местоположения. Определение причин таких ошибок, как правило, труда не составляет, и даже при нечетком знании правил языка за несколько прогонов удается удалить все ошибки данного типа.
Следует иметь в виду, что чем лучше формализованы правила синтаксиса языка, тем больше ошибок из общего количества может обнаружить компилятор и, соответственно, меньше ошибок будет обнаруживаться на следующих этапах. В связи с этим говорят о языках программирования с защищенным синтаксисом и с незащищенным синтаксисом. К первым, безусловно, можно отнести Pascal, имеющий очень простой и четко определенный синтаксис, хорошо проверяемый при компиляции программы, ко вторым — Си со всеми его модификациями. Чего стоит хотя бы возможность выполнения присваивания в условном операторе в Си, например:
if (c = n) x = 0; /* в данном случае не проверятся равенство с и n, а выполняется присваивание с значения n, после чего результат операции сравнивается с нулем, если программист хотел выполнить не присваивание, а сравнение, то эта ошибка будет обнаружена только на этапе выполнения при получении результатов, отличающихся от ожидаемых */
Ошибки компоновки, как следует из названия, связаны с проблемами,
обнаруженными при разрешении внешних ссылок. Например, предусмотрено обращение к подпрограмме другого модуля, а при объединении модулей данная подпрограмма не найдена или не стыкуются списки параметров. В большинстве случаев ошибки такого рода также удается быстро локализовать и устранить.
К самой непредсказуемой группе относятся ошибки выполнения. Прежде всего они могут иметь разную природу, и соответственно по-разному проявляться. Часть ошибок обнаруживается и документируется операционной системой. Выделяют четыре способа проявления таких ошибок:
• появление сообщения об ошибке, зафиксированной схемами контроля выполнения машинных команд, например, переполнении разрядной сетки, ситуации «деление на ноль», нарушении адресации и т. п.;
появление сообщения об ошибке, обнаруженной операционной системой, например, нарушении защиты памяти, попытке записи на устройства, защищенные от записи, отсутствии файла с заданным именем и т. п.;
«зависание» компьютера, как простое, когда удается завершить программу без перезагрузки операционной системы, так и «тяжелое», когда для продолжения работы необходима перезагрузка;
несовпадение полученных результатов с ожидаемыми.
. Отметим, что, если ошибки этапа выполнения обнаруживает пользователь, то в двух первых случаях, получив соответствующее сообщение, пользователь в зависимости от своего характера, степени необходимости и опыта работы за компьютером, либо попробует понять, что произошло, ища свою вину, либо обратится за помощью, либо постарается никогда больше не иметь дела с этим продуктом. При «зависании» компьютера пользователь может даже не сразу понять, что происходит что-то не то, хотя его печальный опыт и заставляет волноваться каждый раз, когда компьютер не выдает быстрой реакции на введенную команду, что также целесообразно иметь в виду. Также опасны могут быть ситуации, при которых пользователь получает неправильные результаты и использует их в своей работе.
Причины ошибок выполнения очень разнообразны, а потому и локализация может оказаться крайне сложной. Все возможные причины ошибок можно разделить на следующие группы:
неверное определение исходных данных,
накопление погрешностей результатов вычислений (рис. 10.2).
Н е в е р н о е о п р е д е л е н и е и с х о д н ы х д а н н ы х происходит, если возникают любые ошибки при выполнении операций ввода-вывода: ошибки передачи, ошибки преобразования, ошибки перезаписи и ошибки данных. Причем использование специальных технических средств и программирование с защитой от ошибок (см.§ 2.7) позволяет обнаружить и предотвратить только часть этих ошибок, о чем безусловно не следует забывать.
Л о г и ч е с к и е о ш и б к и имеют разную природу. Так они могут следовать из ошибок, допущенных при проектировании, например, при выборе методов, разработке алгоритмов или определении структуры классов, а могут быть непосредственно внесены при кодировании модуля.
последней группе относят:
ошибки некорректного использования переменных, например, неудачный выбор типов данных, использование переменных до их инициализации, использование индексов, выходящих за границы определения массивов, нарушения соответствия типов данных при использовании явного или неявного переопределения типа данных, расположенных в памяти при использовании нетипизированных переменных, открытых массивов, объединений, динамической памяти, адресной арифметики и т. п.;
, например, некорректные вычисления над неарифметическими переменными, некорректное использование целочисленной арифметики, некорректное преобразование типов данных в процессе вычислений, ошибки, связанные с незнанием приоритетов выполнения операций для арифметических и логических выражений, и т. п.;
ошибки межмодульного интерфейса, например, игнорирование системных соглашений, нарушение типов и последовательности при передачи параметров, несоблюдение единства единиц измерения формальных и фактических параметров, нарушение области действия локальных и глобальных переменных;
другие , например, неправильная реализация логики программы при кодировании, игнорирование особенностей или ограничений конкретного языка программирования.
а к о п л е н и е п о г р е ш н о с т е й результатов числовых вычислений возникает, например, при некорректном отбрасывании дробных цифр чисел, некорректном использовании приближенных методов вычислений, игнорировании ограничения разрядной сетки представления вещественных чисел в ЭВМ и т. п.
Все указанные выше причины возникновения ошибок следует иметь в виду в процессе отладки. Кроме того, сложность отладки увеличивается также вследствие влияния следующих факторов:
опосредованного проявления ошибок;
возможности взаимовлияния ошибок;
возможности получения внешне одинаковых проявлений разных ошибок;
отсутствия повторяемости проявлений некоторых ошибок от запуска к запуску – так называемые стохастические ошибки;
возможности устранения внешних проявлений ошибок в исследуемой ситуации при внесении некоторых изменений в программу, например, при включении в программу диагностических фрагментов может аннулироваться или измениться внешнее проявление ошибок;
написания отдельных частей программы разными программистами.
Инструменты для отладки программ
Разработаны спец. программные средства (инструменты) для проведения О. п., среди которых наиболее популярны т. н. и. Они имеют удобный пользовательский интерфейс, позволяют проводить О. п. пошагово и с предварительно заданными (заказанными) точками останова, просматривать и изменять состояние выделенной области памяти, контролировать разл. информацию на этапе выполнения. Отладчики часто интегрированы в систему разработки кода программ (напр., Eclipse CDT, MS Visual Studio). Широко используются инструменты динамич. и статич. анализа. (напр., Valgrind) контролируют время выполнения участков кода программы, находят точки (области) некорректной работы с памятью и объектами операционной системы и др. (напр., Klocwork) выявляют ошибки выхода (обращения) за границы массивов, потенциальные проблемы безопасности, т. н. утечки памяти, некорректность использования системных ресурсов и др. Популярны также сканеры интерфейсов (напр., Wireshark, позволяющий осуществлять сетевой мониторинг). Однако для анализа типичных ошибок параллельных или многопоточных приложений, напр. т. н. гонки данных, тупиков (взаимной блокировки процессов), потоков в состоянии ожидания, потерянных сигналов, требуются специализир. средства отладки параллельных приложений (напр., Intel Thread Checker). Следует отметить, что наиболее эффективно комплексное применение инструментов О. п., поскольку конкретные программные средства обеспечивают поиск лишь определённых типов ошибок.
Похожие вопросы и ответы
Программирование на языке высокого уровня — итоговое тестирование
Ваш адрес email не будет опубликован. Обязательные поля помечены
Сохранить моё имя, email и адрес сайта в этом браузере для последующих моих комментариев.