Ошибки

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

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

Арифметика

Деление на ноль.

Арифметическое переполнение или недополнение.

Потеря арифметической точности из-за округления или численно нестабильных алгоритмов.

Логика

Бесконечныециклы и бесконечная рекурсия.

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

Синтаксис

Использование неправильного оператора, например, выполнение присваивания вместо проверки на равенство. Например, в некоторых языках x=5 установит значение x равным 5, а x==5 проверит, равен ли x в настоящее время 5 или другому числу. Интерпретируемые языки допускают сбой такого кода. Компилируемые языки могут обнаруживать такие ошибки до начала тестирования.

Ресурс

Разыменование нулевого указателя.

Использование неинициализированной переменной.

Использование допустимой в остальном инструкции для неправильного типа данных (см. упакованное десятичное число/двоично-десятичное число).

Нарушения прав доступа.

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

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

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

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

Двойная бесплатная ошибка.

Многопоточность

Тупик, когда задача A не может продолжаться, пока не завершится задача B, но в то же время задача B не может продолжаться, пока не завершится задача A.

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

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

Интерфейс

Неправильное использование API.

Неверная реализация протокола.

Неправильная работа с оборудованием.

Неверные предположения о конкретной платформе.

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

Работа в команде

Нераспространяемые обновления; например программист меняет myAdd, но забывает изменить mySubtract, который использует тот же алгоритм. Эти ошибки смягчаются философией Не повторяйся.

Комментарии устарели или неверны: многие программисты предполагают, что комментарии точно описывают код.

Различия между документацией и продуктом.

Как отлаживать:

  • проверьте, где ошибка

print (переменная, тип) перед функцией или внутри

обводить подозрительные зоны отпечатками, пока не перестанет печатать

удаляйте дихотомические части кода, пока он не перестанет глючить

  • проверьте возможную причину
  • используйте отладчик

пдб

  • профилактика

модульное тестирование

писать небольшие функции: использовать чистые функции с параметрами в качестве переменных

Проблемы с машинным обучением

Модель не обучается

неправильная функция активации в качестве вывода

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

правильные функции стоимости

выполнение классификации или регрессии не требует одних и тех же функций стоимости.

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

форматирование данных

проблемы с параметрами