Как можно искать логическую ошибку в программе информатика 7 класс

[object Object]

Общие причиныПравить

[object Object]

Эта статья о логической ошибке в программировании. Об ошибках, связанных с нарушением логической правильности рассуждений, см. Логическая ошибка.

В программировании логической ошибкой называется баг, который приводит к некорректной работе программы, но не к краху программы.

Существование данного вида ошибок связано с неправильными действиями на этапе принятия решений.

В C++ логической ошибкой также называется особое исключение (logic_exception).

Запрос «Баг» перенаправляется сюда; см. также другие значения.

Програ́ммная оши́бка (арго баг ) — означает ошибку в программе или в системе, из-за которой программа выдает неожиданное поведение и, как следствие, результат. Большинство программных ошибок возникают из-за ошибок, допущенных разработчиками программы в её исходном коде, либо в её дизайне. Также некоторые ошибки возникают из-за некорректной работы инструментов разработчика, например из-за компилятора, вырабатывающего некорректный код.

Термин «программная ошибка» обычно употребляется для обозначения ошибок, проявляющих себя на стадии работы программы, в отличие, например, от ошибок проектирования или синтаксических ошибок. Отчет, содержащий информацию об ошибке также называют отчетом о проблеме (англ. ). Отчет о критической проблеме (англ. ), вызывающей аварийное завершение программы, называют крэш-репортом (англ. ).

Программные ошибки локализуются и устраняются в процессе тестирования и отладки программы.

Семантическая
отладка — это процесс нахождения и
исправления ошибок, связанных с
неправильным указанием логических
страниц данных.

Существует
3 способа отладки программы:

Пошаговая
отладка программ с заходом в подпрограммы;

Пошаговая
отладка программ с выполнением
подпрограммы как одного оператора;

Выполнение
программы до точки остановки.

Пошаговая
отладка программ заключается в том,
что выполняется один оператор программы
и, затем контролируются те переменные,
на которые должен был воздействовать
данный оператор.

Если
в программе имеются уже отлаженные
подпрограммы, то подпрограмму можно
рассматривать, как один оператор
программы и воспользоваться вторым
способом отладки программ.

Если
в программе существует достаточно
большой участок программы, уже отлаженный
ранее, то его можно выполнить, не
контролируя переменные, на которые он
воздействует. Использование точек
остановки позволяет пропускать уже
отлаженную часть программы. Точка
остановки устанавливается в местах,
где необходимо проверить содержимое
переменных или просто проконтролировать,
передаётся ли управление данному
оператору.

Тестирование
— это динамический контроль программы,
т.е. проверка правильности программы
при ее выполнении на компьютере.

Каждому
программисту известно, сколько времени
и сил уходит на отладку и тестирование
программ. На этот этап приходится около
50% общей стоимости разработки программного
обеспечения. Но не каждый из разработчиков
программных средств может верно,
определить цель тестирования. Нередко
можно услышать, что тестирование — это
процесс выполнения программы с целью
обнаружения в ней ошибок. Но эта цель
недостижима: ни какое самое тщательное
тестирование не дает гарантии, что
программа не содержит ошибок. Другое
определение: это процесс выполнения
программы с целью обнаружения в ней
ошибок. Отсюда ясно, что “удачным”
тестом является такой, на котором
выполнение программы завершилось с
ошибкой. Напротив, “неудачным” можно
назвать тест, не позволивший выявить
ошибку в программе. Определение также
указывает на объективную трудность
тестирования: это деструктивный ( т.е.
обратный созидательному ) процесс.
Поскольку программирование — процесс
конструктивный, ясно, что большинству
разработчиков программных средств
сложно “переключиться” при тестировании
созданной ими продукции. Основные
принципы организации тестирования:

необходимой
частью каждого теста должно являться
описание ожидаемых результатов работы
программы, чтобы можно было быстро
выяснить наличие или отсутствие ошибки
в ней;

 следует
по возможности избегать тестирования
программы ее автором, т.к. кроме уже
указанной объективной сложности
тестирования для программистов здесь
присутствует и тот фактор, что обнаружение
недостатков в своей деятельности
противоречит человеческой психологии
(однако отладка программы эффективнее
всего выполняется именно автором
программы);

 по
тем же соображениям организация —
разработчик программного обеспечения
не должна “единолично ” его тестировать
(должны существовать организации,
специализирующиеся на тестировании
программных средств);

 должны
являться правилом доскональное изучение
результатов каждого теста, чтобы не
пропустить малозаметную на поверхностный
взгляд ошибку в программе;

 необходимо
тщательно подбирать тест не только для
правильных (предусмотренных ) входных
данных, но и для неправильных
(непредусмотренных);

 при
анализе результатов каждого теста
необходимо проверять, не делает ли
программа того, что она не должна делать;

 следует
сохранять использованные тесты (для
повышения эффективности повторного
тестирования программы после ее
модификации или установки у заказчика);

 тестирования
не должно планироваться исходя из
предположения, что в программе не будут
обнаружены ошибки (в частности, следует
выделять для тестирования достаточные
временные и материальные ресурсы);

 следует
учитывать так называемый “принцип
скопления ошибок” : вероятность наличия
не обнаруженных ошибок в некоторой
части программы прямо пропорциональна
числу ошибок, уже обнаруженных в этой
части;

 следует
всегда помнить, что тестирование —
творческий процесс, а не относиться к
нему как к рутинному занятию.

Существует
два основных вида тестирования:
функциональное и структурное. При
функциональном тестировании программа
рассматривается как “черный ящик”
(то есть ее текст не используется).
Происходит проверка соответствия
поведения программы ее внешней
спецификации. Возможно ли при этом
полное тестирование программы? Очевидно,
что критерием полноты тестирования в
этом случае являлся бы перебор всех
возможных значений входных данных, что
невыполнимо.

Поскольку
исчерпывающее функциональное тестирование
невозможно, речь может идти о разработки
методов, позволяющих подбирать тесты
не “вслепую”, а с большой вероятностью
обнаружения ошибок в программе. При
структурном тестировании программа
рассматривается как “белый ящик”
(т.е. ее текст открыт для пользования).
Происходит проверка логики программы.
Полным тестированием в этом случае
будет такое, которое приведет к перебору
всех возможных путей на графе передач
управления программы (ее управляющем
графе). Даже для средних по сложности
программ числом таких путей может
достигать десятков тысяч.

Таким
образом, ни структурное, ни функциональное
тестирование не может быть исчерпывающим.
Рассмотрим подробнее основные этапы
тестирования программных комплексов.
В тестирование многомодульных программных
комплексов можно выделить четыре этапа:

тестирование
функций программного комплекса (т.е.
поиск различий между разработанной
программой и ее внешней спецификацией
);

тестирование
всего комплекса в целом (т.е. поиск
несоответствия созданного программного
продукта, сформулированным ранее целям
проектирования, отраженным обычно в
техническом задании).

На
первых двух этапах используются, прежде
всего, методы структурного тестирования,
т.к. на последующих этапах тестирования
эти методы использовать сложнее из-за
больших размеров проверяемого
программного обеспечения; последующие
этапы тестирования ориентированы на
обнаружение ошибок различного типа,
которые не обязательно связаны с логикой
программы.

12.
Данные в языке Си: константы и переменные.
Скалярные типы данных. Модификаторы
типов.

Как можно искать логическую ошибку в программе информатика 7 класс
Как можно искать логическую ошибку в программе информатика 7 класс
Как можно искать логическую ошибку в программе информатика 7 класс
Как можно искать логическую ошибку в программе информатика 7 класс
Как можно искать логическую ошибку в программе информатика 7 класс
Как можно искать логическую ошибку в программе информатика 7 класс

13.
Данные числовых типов в языке Си:
объявление, характеристика, допустимые
операции, приведение типов. Пример
использования.

14.
Операции языка Си. Приоритет операций.
Оператор и операция присваивания в
языке операции, приведение типов. Пример
использования.

Как можно искать логическую ошибку в программе информатика 7 класс
Как можно искать логическую ошибку в программе информатика 7 класс
Как можно искать логическую ошибку в программе информатика 7 класс
Как можно искать логическую ошибку в программе информатика 7 класс
Как можно искать логическую ошибку в программе информатика 7 класс

Выражение
может быть просто константой или сколь
угодно сложным выражением. В отличие
от Pascal или Modula-2, в которых для присваивания
используется знак «:=», в языке С
оператором присваивания служит
единственный знак присваивания
«=». Адресатом(получателем),
т.е. левой частью оператора присваивания
должен быть объект, способный получить
значение, например, переменная.

Как было показано
в предыдущем разделе на примере программы,
преобразующей
массив целых чисел,
приложение может
собираться и работать,
но не выполнять
полностью того,
что ему полагается
делать. Это
означает, что
текст программы не соответствует
спецификации поставленной задачи и
содержит логическую ошибку,
а возможно,
сразу и несколько
логических ошибок.

Из всех категорий
ошибок логические ошибки найти наиболее
трудно, так
как они берут свое начало в ошибочном
рассуждении при поиске решения задачи.
Такие ошибки
обнаруживаются на этапе выполнения
программы и приводят к неверным
результатам, к
остановке или «зависанию»
приложения.
Это делает
необходимым тестирование приложения
с различными наборами данных.
Только тщательное
тестирование на самых разнообразных
значениях данных может дать на практике
гарантию того,
что приложение
не содержит логических ошибок.

Читать также:  LiteManager Pro – бесплатная лицензия. Удаленный доступ и управление ПК и смартфонами

Самым простым
способом локализации логической ошибки
является пошаговое прослеживание
результатов выполнения всех операторов
программы. При
отладке приложения в VS
можно отображать
значения указанных переменных или
выражений в любой точке программы.

Вычисленные значения
можно, сравнивать с теми, что должны
быть, и если обнаруживается несоответствие,
то, логическая ошибка локализована.

Первый шаг отладки
приложения – это выбор команды Start
Debugging
(F5) на стандартной
панели инструментов или в меню Debug,
после чего приложение запускается в
режиме отладки.

Перед началом отладки
целесообразно определить то место в
программе, где возможна ошибка. Это, как
правило, позволяет существенно сократить
время, затрачиваемое на поиски ошибки.
В примере 2 ошибка может содержаться в
том фрагменте программы, который изменяет
значения элементов массива после их
ввода с клавиатуры.

Для того чтобы
отладчик прерывал выполнение программы
на определенной строке, необходимо
установить на этой строке точку
останова
.
Точка останова
– это просто
место (например, строка с оператором
программы), которое помечено для отладчика
и отображается красным кружком в поле
индикаторов
(узкое
поле серого цвета с левого края окна
редактора кода). Когда отладчик встречает
точку останова, то выполняющаяся
программа моментально останавливается
(до выполнения данной строки кода).

Установить точку
останова на какой-либо строке кода можно
при помощи щелчка по полю индикаторов
данной строки (рис. 16). Либо можно
установить курсор на нужной строке и
нажать клавишу F9.

Как можно искать логическую ошибку в программе информатика 7 класс

Просмотр
данных в отладчике

Когда выполнение
программы в сеансе отладки приостановлено
(например,
при помощи точки
останова), можно
изучить состояние и содержимое ее
переменных и объектов.
Для этого в VS
можно использовать
три вида окон:
Local
(Локальные)
,
Autos
(Видимые)
и Watch
(Контрольные).

Доступ к окнам можно
получить нажав
Debug->Windows->выбрать
нужное окно(Рис. 17)

Как можно искать логическую ошибку в программе информатика 7 класс

Рисунок 17. Доступ к
окнам

Окно Local
показывает
все переменные и их значения для текущей
области видимости отладчика.
Это дает вам
представление обо всем,
что имеется в
текущей выполняющейся функции.
Переменные в
этом окне организованы в список и
автоматически настраиваются отладчиком.
На рис.
18 показан пример
окна Local.
С его помощью
можно увидеть приложение нашего примера,
которое
приостановлено до обнуления соответствующих
элементов массива.
Обратите внимание,
что объект
(массив)
a
развернут для
того, чтобы
показать значения его элементов в момент
остановки выполнения программы.
По мере установки
значений результаты будут отображаться
в столбце Value.

Однако очень часто
просмотр всех локальных переменных
дает слишком много информации, чтобы в
ней можно было разобраться. Так может
происходить тогда, когда в области
видимости данного процесса или функции
находится слишком много операторов.
Для того

чтобы увидеть
значения, связанные с той строкой кода,
на которую вы смотрите, можно использовать
окно Autos.
Это окно показывает значения всех
переменных и выражений, имеющихся в
текущей выполняющейся строке кода или
в предыдущей строке кода. На рис. 19

показано окно Autos
для той же
самой строки кода, которая показана на
рис. 18. Обратите внимание на разницу.

Окна Watch
в VS позволяют
настраивать собственный список переменных
и выражений, за которыми нужно наблюдать
(рис. 20). Окна Watch
выглядят и
ведут себя точно так же, как и окна Local
и Autos.
Кроме того, те элементы, которые вы
размещаете в окнах Watch,
сохраняются между сеансами отладки.

Как можно искать логическую ошибку в программе информатика 7 класс

Как можно искать логическую ошибку в программе информатика 7 класс

Вы получаете доступ
к окнам Watch
из меню или панели инструментов Debug
(рис. 17).
Четыре окна Watch
(которые называются Watch
1
, Watch
2
, Watch
3
и Watch
4
) позволяют
настроить четыре списка элементов, за
которыми необходимо наблюдать. Эта
возможность может быть особенно полезна
в том случае, когда каждый список
относится к отдельной области видимости
вашего приложения.

Переменную или
выражение в окно Watch
1
можно добавить
из редактора кода. Для этого в редакторе
кода выделите переменную (или выражение),
щелкните по ней правой кнопкой мыши и
выберите пункт Add
Watch.
При этом выделенная переменная (или
выражение) будет помещена в окно Watch
1
. Вы можете
также перетащить выделенный элемент в
это окно.

Как можно искать логическую ошибку в программе информатика 7 класс

Пошаговое
прохождение для поиска ошибки

После того как в
нашем примере отладчик,
встретив точку
останова, прервал
выполнение программы,
далее можно
выполнять код по шагам (режим
трассировки
).
Для этого можно
выбрать команду Step
into
на панели
инструментов Debug
или нажать
функциональную клавишу F11(Рис.
21). Это приведет
к последовательному выполнению кода
по одной строке,
что позволит
вам видеть одновременно и ход выполнения
приложения, и
состояние объектов программы по мере
выполнения кода.
Команда Step
into
(F11) позволяет
продвигаться по коду по одной строке.
Вызов этой
команды выполнит текущую строку кода
и поместит курсор на следующую выполняемую
строку. Важное
различие между Step
into
и другими
похожими командами состоит в

том,
как Step
into
обрабатывает
строки кода, в
которых содержатся вызовы функций.
Если вы находитесь
на строке кода,
которая вызывает
другую функцию программы,
то выполнение
команды Step
into
перенесет вас
на первую строку этой функции.

Если сделать так в
нашем примере,
то вы увидите
ошибку: обнуление
элементов массива должно начинаться
не с элемента с индексом i1,
а со следующего
элемента i1+1.

Команда Step
out
(F10) позволяет
вам сохранять фокус в текущей функции
(не заходя в вызываемые ею подпрограммы),
т. е. вызов Run
out
приведет к
выполнению строки за строкой, но не
заведет вас в вызовы функций и при этом
следующей выполняемой

строкой для пошагового
прохождения станет следующая за вызовом
функции строка.

Как можно искать логическую ошибку в программе информатика 7 класс

Рис 21. Команда Step
Into

Одной из более
удобных (и
часто упускаемых)
функциональных
возможностей набора инструментов
отладки является функция Run
to
cursor
( Выполнить до текущей позиции)
.
Она работает в
полном соответствии со своим названием.
Вы устанавливаете
курсор на некий код и вызываете эту
команду. Приложение
компилируется и выполняется до тех пор,
пока не доходит
до той строки,
где находится
курсор. В
этой точке отладчик прерывает приложение
и выдает вам эту строку кода для пошагового
прохождения.
Рис. 22.

Как можно искать логическую ошибку в программе информатика 7 класс

Рисунок 22. Вызов
команды Run
To
Cursor

Продолжить отладку
после точки останова можно повторным
нажатием на кнопку F5 (Start
Debugging).

Как можно искать логическую ошибку в программе информатика 7 класс

Рисунок 23. Результат
работы программы после исправления
ошибки

Рассмотрим пошаговое
выполнение программы с использованием
окна Watch
на простейшем примере.

Запускаем
трассировку(Step
Into
)
нажатием
F11 либо
Debug>Step
Into
.
Открываем
окно Watch(Debug>Windows>Watch>Watch1).
Переход на
следующий шаг осуществляется нажатием
кнопки F11.

Как можно искать логическую ошибку в программе информатика 7 класс

Рисунок 24. Окно
редактора кода в начале трассировки.

Как можно искать логическую ошибку в программе информатика 7 класс

Рисунок 25. Значение
переменных перед первым прохождением
цикла

Как можно искать логическую ошибку в программе информатика 7 класс

Рисунок 26. Окно
редактора кода перед первым прохождением
цикла

Как можно искать логическую ошибку в программе информатика 7 класс

Рисунок
27. Значения переменных после выполнения
операции а=а+1

Как можно искать логическую ошибку в программе информатика 7 класс

Рисунок
28. Значения переменных после выполнения
операции b=b+2

Как можно искать логическую ошибку в программе информатика 7 класс

Рисунок
29. Значения переменных после выполнения
операции S=(S*a)+(S/b)

Как можно искать логическую ошибку в программе информатика 7 класс

Рисунок
30. Значения переменных после выполнения
операции i++

Читать также:  Индивидуальная адаптированная программа для ребенка с интеллектуальной недостаточностью, ФГОС

Как можно искать логическую ошибку в программе информатика 7 класс

Рисунок
31. Значения переменных после прохождения
циклаКак можно искать логическую ошибку в программе информатика 7 класс

Рисунок 32. Вывод
итогового значения на экран

Урок 21§23. Как разрабатываются программы?

Содержание урока

Этапы разработки программ

Методы проектирования программ

Вопросы и задания

Практическая работа № 19 «Отладка программы»

ПримечанияПравить

[object Object]

ПримечанияПравить

  1. Бирюков Б. В., Васюков В. Л. // Новая философская энциклопедия / Ин-т философии РАН; Нац. обществ.-науч. фонд; Предс. научно-ред. совета В. С. Стёпин, заместители предс.: А. А. Гусейнов, Г. Ю. Семигин, уч. секр. А. П. Огурцов. — 2-е изд., испр. и допол. — М.: Мысль, 2010. — ISBN 978-5-244-01115-9.
  2. Роман Фишман. Ложные корреляции: как Николас Кейдж влияет на смерть в бассейне Архивная копия от 7 февраля 2019 на Wayback Machine // Популярная механика, 26.04.2016
  3. Почему корреляция не подразумевает причинно-следственной связи Архивная копия от 24 июня 2021 на Wayback Machine // datascience.eu
  4. Лебедева О. П. Логика: учеб.-метод. пособие. МГИУ, 2008. — 127 с.
  5. Аристотель. О софистических опровержениях // Сочинения в 4 томах. — М.: Мысль, 1978. — Т. 2. — С. 687.

Отчёты об ошибкахПравить

Основная масса ошибок обычно отлаживается на этапе компиляции и тестирования программы. Однако некоторая часть ошибок всё же попадает в публикуемую версию и проявляется на компьютерах конечных пользователей в процессе эксплуатации ПО. Для повышения качества программного обеспечения пользуются специальными программами, цель которых — отловить ошибку в целевом приложении, собрать необходимую информацию о её симптомах и отправить отчёт по интернету к разработчикам данного ПО.

Словесные уловкиПравить

  • Одноимённость (омонимия): например, слово «лук» может означать растение и оружие.
  • Двусмысленность (амфиболия): выражение в целом двусмысленно и может толковаться в обе стороны, например, «день сменяет ночь» или «казнить нельзя помиловать». Амфиболия может основаться и на омонимии, порождая такие выражения как «он прослушал лекцию».
  • Соединение (оксюморон): сочетание несочетаемого, противоречащая себе фраза, например, «звонкая тишина», «знойный мороз».
  • Разъединение: разделение целого на части и приписывание целому свойств частей. Например, «Пять — это три плюс два, три — нечётное число, два — чётное, значит, пять — чётное и нечётное число одновременно».
  • Ударение или произношение: логические ошибки, построенные на неверном произношении или ударении (например, за́мок и замо́к; больша́я или бо́льшая часть). Для русского языка эта проблема менее актуальна, чем для греческого.
  • Форма выражения: ошибки, связанные с формой выражения — подменой мужского рода женским и наоборот, подменой среднего рода мужским или женским за счет одинаковости окончаний; или подменой качества количеством и наоборот; отождествления результата с процессом, состояния — с действием и т. п.

Эквивокация — ошибка, заключающаяся в использовании одного и того же слова в разных значениях в одном рассуждении. Частный случай — учетверение терминов.

  • «Все вулканы — горы. Все гейзеры — вулканы. Следовательно, все гейзеры — горы». В первой посылке слово «вулканы» обозначает «горы, из которых изливается огнедышащая магма», а во второй посылке этим же словом «вулканы» обозначено всякое извержение из недр Земли.
  • «Он — старый морской волк. Волки живут в лесу. Значит, он живёт в лесу». В первой посылке слово «волк» используется в качестве метафоры, а во второй посылке — в прямом значении.

Урок 25§33. Линейные алгоритмы

[object Object]

Вопросы и задания

1. Верно ли, что для каждой задачи существует единственный алгоритм решения? Ответ обоснуйте.

2. Сталкивались ли вы уже с алгоритмами, которые нельзя назвать линейными?

3. Как вы думаете, какие задачи невозможно решить с помощью линейных алгоритмов?

4. Как можно сравнить два различных алгоритма решения одной и той же задачи? Как выбрать лучший их них?

5. Два друга по-разному ищут ошибки в программах. Кирилл, написав программу, сразу запускает её для того, чтобы транслятор обнаружил все синтаксические ошибки. Даниил же сначала внимательно изучает текст программы и пытается найти ошибки сам, а потом уже запускает её на выполнение. Чем хорош каждый из методов?

6. Чем различаются синтаксические и логические ошибки?

7. Как можно искать логическую ошибку в программе?

8. К какому типу ошибок относится случай, когда выполнение программы не останавливается (программа зацикливается)?

9. Выполните по указанию учителя задания в рабочей тетради.

Подготовьте сообщение «Роботы вокруг нас»

Следующая страница Как можно искать логическую ошибку в программе информатика 7 класс Практическая работа № 21 «Линейные программы для Робота»

Cкачать материалы урока
Как можно искать логическую ошибку в программе информатика 7 класс

ПоследствияПравить

  • Авария ракеты-носителя «Ариан-5» (4 июня 1996) — пример одной из самых дорогостоящих компьютерных ошибок в истории.
  • Ошибки в программном обеспечении медицинского ускорителя Therac-25 привели к превышению доз облучения нескольких людей.
  • Финансовая организация Knight Capital Group потеряла 440 миллионов долларов за 45 минут из-за ошибки в программе высокочастотного трейдинга[6].

Поиск и исправление ошибокПравить

Для отладки программы (англ. ) разработчиками ПО используются специальные программы-отладчики (англ. ). Например, в операционной системе Windows можно использовать программу WinDbg из пакета Microsoft Debugging Tools for Windows. Для GNU/Linux и ряда других UNIX-подобных операционных систем существует отладчик GDB (GNU Debugger).

СсылкиПравить

[object Object]

СсылкиПравить

  • Уязвимости в исходных кодах, «Компьютерная газета». Продолжение: Уязвимости в исходных кодах. Перепечатка: 1 часть (недоступная ссылка), 2 часть (недоступная ссылка).
  • 10 худших ошибок в программировании в истории человечества
  • 2010 CWE/SANS Top 25 Most Dangerous Software Errors частичный перевод на русский 25 самых опасных ошибок при создании программ
  • Ошибки, обнаруженные в Open Source проектах разработчиками PVS-Studio с помощью статического анализа. Можно найти полезные примеры при подготовки статей и презентаций.

Этапы разработки программ

[object Object]

Уроки 40 — 41§33. Линейные алгоритмы

Содержание урока

Что такое линейный алгоритм?

Какие могут быть ошибки?

Вопросы и задания

Практическая работа № 21 «Линейные программы для Робота»

Практическая работа № 22 «Вычислительные задачи»

ПримерыПравить

В этом примере задачей функции является возвращение среднего для двух переданных чисел. Ошибка кроется в неучёте приоритета операторов (деление в выражении вычисляется до операции сложения) и отсутствии по этой причине скобок.

    

              /* правильная запись (a + b) / 2 */

Виды логических ошибокПравить

  • Подмена тезиса (лат. ) — логическая ошибка в доказательстве, состоящая в том, что начав доказывать некоторый тезис, постепенно в ходе доказательства переходят к доказательству другого положения, сходного с тезисом, но имеющего совершенно иное значение.
  • Круговое рассуждение (лат. circulus in probando) — логическая ошибка, при которой начало рассуждения содержит конечную цель: «если А — истинно, то {… …} следовательно, А — истинно».

Использование ложных и недоказанных аргументов, утверждений

Другая логическая ошибка — «предвосхищение основания» (лат. ). Она заключается в том, что в качестве аргументов используются недоказанные, как правило, произвольно взятые положения: ссылаются на слухи, на ходячие мнения, высказанные кем-то предположения или даже на собственный вымысел, выдавая их за аргументы, якобы обосновывающие тезис. В действительности же доброкачественность таких доводов лишь предвосхищается, но не устанавливается с несомненностью.

Читать также:  Программы для машин для устранения ошибок

  • апелляция к личности оппонента, а не к его доводам (argumentum ad hominem)
    • переход на личности (ad personam): «Вы глупы и некрасивы, поэтому ваш тезис неверен».
    • поиск обстоятельств, якобы заставляющих оппонента выдвигать данный тезис (circumstantiae): «Вы говорите так, потому что хотите произвести впечатление на публику, поэтому ваш тезис неверен».
    • указание на то, что оппонент сам поступает вопреки своим доводам: (tu quoque): «Вы сами курите, поэтому ваши доводы о вреде курения неверны».
    • нахождение легко критикуемого единомышленника (reductio ad Hitlerum): «Гитлер тоже был вегетарианцем!».
  • апелляция к большинству (argumentum ad populum): «Все вокруг считают так, следовательно, это верно».
  • апелляция к авторитету (argumentum ad verecundiam): «Это мнение принадлежит авторитету, разве вы его не уважаете?». Используется и в обратную сторону: «Это мнение высказывал Гитлер, Вы что, согласны с Гитлером?»
  • апелляция к эмоциям, также называется аргументом к страсти (argumentum ad passiones), основана на манипулировании эмоциями, а не на использовании рациональной логической аргументации: «Подумайте о детях!».
  • апелляция к незнанию; отсутствие доказательств чего-то считается доказательством обратного (argumentum ad ignorantiam): «Привидения существуют, так как никто не доказал, что их нет».
  • «аргумент к тошноте» (argumentum ad nauseam), повторение тезиса (возможно, разными людьми) до тех пор, пока противная сторона не потеряет интерес к его оспариванию.
  • апелляция к личному опыту (анекдотическое свидетельство): «Мне это лекарство помогло, значит всем поможет».
  • апелляция к природе (лат. argumentum ad Naturam): «Это неестественно, значит это плохо».

Мнимая логическая связь

Логическая уловка, при которой мнимая, желаемая логическая связь выдаётся за истинную (non sequitur).

Систематическая ошибка отбора — ошибка, при которой на основании неподходящей выборки делается вывод о всём множестве (например, по одному примеру судят обо всех), частным случаем такой ошибки является ошибка выжившего.

«После» не значит «вследствие»

«После этого — значит по причине этого» (лат. post hoc ergo propter hoc) — логическая ошибка, при которой причинно-следственная связь отождествляется с хронологической, временной: «Если событие X произошло после события Y, значит, событие Y является причиной события X». При этом не допускается ни возможность случайного совпадения, ни наличие какого-либо фактора, воздействующего на события по отдельности.

Сходной ошибкой является утверждение существования причинно-следственной связи между событиями, совпавшими по времени: «Вместе с этим — значит вследствие этого» (лат. cum hoc ergo propter hoc).

Корреляция не является причинно-следственной связью

Корреляция между количеством телевизоров и продолжительностью жизни в стране не означает причинно-следственной связи между этими параметрами, так как они – следствие уровня экономического благополучия.

Доказательство через то же самое

— Мужчина называется мужчиной потому, что он мужественный.
— Вода называется водой потому, что она водянистая, — вставил Яша Полонский.

  • «В чем причина того, что опиум действует усыпляюще? Отвечаю: она в том, что опиум обладает способностью усыплять»
  • «Ваш менеджер — придурок, потому что он не умеет думать»
  • «Автор ворует чужие идеи, так как он плагиатор»
  • «Вода мокрая, так как она влажная»

Логическая ошибка, которая заключается в приписывании кому-то утверждений, которые на самом деле тот не делал, но которые якобы вытекают из его предыдущих утверждений.

Использование принципиально неопровержимых утверждений

Логическая ошибка, заключающаяся в использовании в качестве аргумента утверждения, которое принципиально невозможно опровергнуть.

Создатель ложной аналогии между объектами затем распространяет нужные ему свойства одного объекта на другой, делая тем самым ложное заключение.

Вывод о явлении в целом, сделанный на основе единичного факта (либо крайне малого количества фактов). Например:

  • «Вася опять не убрал свою комнату» → «Все мальчики такие неряхи»;
  • «Вчера моя начальница сделала мне необоснованный выговор» → «Все женщины — некомпетентные руководители».

ПримечанияПравить

  1. Log Book With Computer Bug . National Museum of American History. Дата обращения: 26 июля 2019. Архивировано 1 июня 2019 года.
  2. Danis, Sharron Ann: «Rear Admiral Grace Murray Hopper». ei.cs.vt.edu (16 февраля 1997). Дата обращения: 20 января 2015. Архивировано 15 июня 2010 года.
  3. . Google. Дата обращения: 11 августа 2009. Архивировано 3 февраля 2012 года.
  4. . Архивировано 3 февраля 2012 года.
  5. Popper, Nathaniel. Knight Capital Says Trading Glitch Cost It $440 Million (англ.), New York Times (2 August 2012). Архивировано 5 октября 2017 года. Дата обращения: 13 ноября 2017.

ТакжеПравить

Этимология термина «баг»Править

[object Object]

Вопросы и задания

1. Верно ли, что для каждой задачи существует единственный алгоритм решения? Ответ обоснуйте.

2. Сталкивались ли вы уже с алгоритмами, которые нельзя назвать линейными?

3. Как вы думаете, какие задачи невозможно решить с помощью линейных алгоритмов?

4. Как можно сравнить два различных алгоритма решения одной и той же задачи? Как выбрать лучший их них?

5. Два друга по-разному ищут ошибки в программах. Кирилл, написав программу, сразу запускает её для того, чтобы транслятор обнаружил все синтаксические ошибки. Даниил же сначала внимательно изучает текст программы и пытается найти ошибки сам, а потом уже запускает её на выполнение. Чем хорош каждый из методов?

6. Чем различаются синтаксические и логические ошибки?

7. Как можно искать логическую ошибку в программе?

8. К какому типу ошибок относится случай, когда выполнение программы не останавливается (программа зацикливается)?

9. Выполните по указанию учителя задания в рабочей тетради.

Подготовьте сообщение «Роботы вокруг нас»

Следующая страница Как можно искать логическую ошибку в программе информатика 7 класс Практическая работа № 21 «Линейные программы для Робота»

Cкачать материалы урока
Как можно искать логическую ошибку в программе информатика 7 класс

ТакжеПравить

[object Object]

Отладка логических ошибокПравить

Одним из способов поиска этого типа ошибки является распечатка списка переменных в программе (во внешний файл или на экран). Хотя этот способ не работает, если ошибка заключается в вызове не той функции, он всё же является самым простым в случае неправильной реализации математического алгоритма.

Значение и классификация ошибок программного обеспеченияПравить

В зависимости от этапа разработки ПО, на котором выявляется ошибка, выделяют:

  • синтаксические ошибки (распознаваемые в качестве таковых транслятором и делающие компиляцию невозможной) — например отсутствие или несоответствие открывающей и закрывающей скобок;
  • предупреждения (warnings) компилятора — например, использование неинициализированной переменной. В этом случае компилятор может заметить, что программист делает что-то необычное (вероятно неверное), и сообщает об этом, однако программист сам принимает решение, игнорировать сообщение или нет;
  • ошибки времени исполнения, смысловые ошибки (семантические) — например вычитание переменных вместо сложения или ошибка сегментации.
  • Блокирующие (blockers) — делающие выполнение программы невозможным;
  • Критические (иногда ) — лишающие программу всей полезности;
  • Серьёзные;
  • Незначительные;
  • Косметические.

По времени появления:

  • Постоянно, при каждом запуске;
  • Иногда («плавающий» тип);
  • Только на машине у клиента (зависит от локальных настроек у клиента).

По месту и направлению:

  • Ошибки пользовательского интерфейса;
  • Системы обработки ошибок;
  • Ошибки, связанные с граничными условиями (например, некорректная обработка пустой строки или максимального числового значения);
  • Ошибки вычислений;
  • Ошибки управления потоками;
  • Ошибки обработки или интерпретации данных;
  • При состоянии гонки;
  • Повышение нагрузки;
  • Ошибки контроля версии и идентификаторов;
  • Ошибки тестирования.

В зависимости от характера ошибки, программы и среды исполнения, ошибка может проявляться сразу или наоборот — долгое время оставаться незамеченной (например Проблема 2038 года).

Также ошибка может проявляться в виде уязвимости, делающей возможным несанкционированный доступ к системе или DoS-атаку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *