Место в программе где ошибка себя проявляет или становится очевидной это обнаружения
Главная / Лекции / Технология разработки программных продуктов
- Отсутствие заданий начальных значений переменных.
- Неверные условия окончания цикла.
- Неверную индексацию цикла.
- Отсутствие задания условий инициирования цикла.
- Неправильное указание ветви алгоритма для продолжения процесса решения задачи.
- ошибки из-за недостаточного знания или понимания программистом языка программирования или самой машины
- ошибки, допущенные при программировании алгоритма, когда команды, используемые в программе, не обеспечивают последовательности событий, установленной алгоритмом.
- Пропуск некоторых операторов.
- Отсутствие необходимых данных.
- Непредусмотренные данные.
- Неверный формат данных.
- неверная синтаксическая конструкция программы
- программа выдает неверные результаты
- пропуск необходимого знака пунктуации
- несогласованность скобок
- пропуск нужных скобок
- неправильное формирование оператора
- неверное образование имени переменной
- неправильное использование арифметических операторов
- неверное написание зарезервированных слов
- Противоречивые команды.
- Отсутствие условий окончания цикла.
- Дублирование или отсутствие меток.
- Отсутствие описания массива.
- Запрещенный переход.
- Если ошибок много, то в первую очередь устранить очевидные.
- Обратиться к руководству по программированию на данном языке (справка).
- Выбрать хороший отладочный компилятор.
- Присваивание.
- Ввод.
- Чтение из файла.
3.2. Обнаружение ошибок.
3.3. Методы отладки.
- Отладка в соответствии с общим предложением "расставить операторы печати по всей программе"
Недостатки:- расстановка операторов печати заставляет программиста работать методом проб и ошибок
- в процессе отладки придется протестировать большое число данных
- требуется изменять программу при отладке. Эти изменения могут скрыть ошибку или внести новую
- стоимость использования методов данной категории для больших программ или систем может быть слишком высокой
- Отладка с использованием автоматических средств
Достоинства:- не нужно вносить изменения в программу
- Метод индукции.
Индукция - это анализ от частного к целому. Просматривая симптомы ошибки, установленные одним или несколькими тестами и взаимосвязи между ними, можно обнаружить причину ошибки. - Метод дедукции.
Данный метод позволяет на основе некоторых общих теорий или предпосылок, используя операторы исключения или уточнения, прийти к определенному заключению (обнаружить место ошибки). Чтобы сделать заключение мы должны просмотреть всю имеющуюся в нашем распоряжении информацию: все результаты всех тестов обо всех ошибках. Выдвинутые гипотезы поочередно исключаются из рассмотрения. - Прослеживание логики в обратном порядке.
Метод локализации для небольших ошибок. Отладка начинается в точке программы, где был обнаружен некоторый результат. Для этой точки на основании полученного результата следует установить, какими должны быть значения переменных. Мысленно выполняя из данной точки программы в обратном порядке и опять рассуждая примерно так: "Если бы в этой точке состояние программы было таким, то в другой точке должно быть следующее состояние", можно достаточно быстро и точно локализовать ошибку, т.е. найти место в программе между точкой, где состояние программы соответствовало ожидаемому и точкой, в которой состояние программы отличалось от ожидаемого.
- Трассировку программ
- Просмотр изменения значений контролируемых переменных и выражений в процессе трассировки
- Модификацию значений переменных для тестирования программы
- Просмотр значений фактических параметров, вызванных подпрограмм
- Работу с точками прерывания.
- Просмотр выходной информации
- Команду Debug/Add Watch (Ctrl+F7)
- При активном окне Watches можно использовать клавиши Insert для добавления выражения и Del - для удаления.
Пример:
A[10], 5 - начиная с 10-го выведет 5 элементов
Изменение переменных в процессе выполнения программы.
По команде Debug/Evaluate/Modify (Ctrl+F4) на экране разворачивается дополнительное окно, содержащее три поля и 4 кнопки. Чтобы изменить значение переменной надо перейти в окно New Value и внести исправления, затем нажать кнопку Modify. В поле Result появится новое значение переменной. Модифицировать можно только значения переменных.
В окно Expression можно ввести имя любой переменной программы или любое допустимое выражение, которое надо вычислить. Выражение строится в соответствии с синтаксисом языка Pascal.
Работа с процедурами и функциями.
При каждом вызове подпрограммы Pascal запоминает вызов и передаваемые подпрограммой фактические параметры в стеке вызова. Каждый раз во время очередного останова программы, при ее трассировке, можно запросить текущий стек вызова с помощью команды Debug/Call Stack (Ctrl+F3).
Задать/отключить точку останова - Ctrl+F8.
-
Отдельные программы следует тестировать сразу после их написания, чтобы убедиться, что каждая из них удовлетворяет своей спецификации.
Для разработки тестов на данном этапе применяется метод "ситуация-эффект".
Под ситуацией понимают условие или совокупность условий, а под эффектом - действия, которые должна выполнить программа при выполнении этого условия.
Задача: программа получает на входе 3 значения, воспринимает их как стороны треугольника и выводит его вид.
- Сложность программ
- Возможны отклонения от правильного понимания спецификации программы.
- Пользователь может вносить изменения в постановку задачи.
- Метод "черного ящика". Основан на принципе "вход-выход". Программе подаются некоторые данные на вход и проверяются результаты, в надежде найти несоответствия. При этом как именно работает программа считается несущественным. При таком подходе необходимо иметь спецификацию программы для того, чтобы было с чем сравнивать результаты.
- Метод "белого ящика". В этом методе тестовые данные получают путем анализа логики программы.
- Выделяют классы эквивалентности.
- Строят тесты.
- правильные (представляющие правильные входные данные)
- неправильные (ошибочные входные данные)
- если входное условие описывает область значений, то определяется один правильный класс и 2 неправильных.
- если входное условие описывает множество входных значений, каждый из которых программа трактует особо, то определяется правильный класс эквивалентности для каждого значения и один неправильный класс.
- если входное условие описывает ситуацию "должна быть", то определяется 1 правильный и 1 неправильный классы.
- если есть основание считать, что различные элементы класса эквивалентности трактуются программой неодинаково, то данный класс разбивается на меньшие классы.
- Назначение каждому классу эквивалентности уникального №
- Проектирование новых тестов, каждый из которых покрывает как можно большее количество неоткрытых правильных классов.
- Запись тестов, каждый из которых покрывает 1 и только 1 из непокрытых неправильных классов.
- В качестве некоторых тестовых данных используют экстремальные значения. Например, если целая величина должна находиться в диапазоне от a до b, то следует проверить: a-1, a, a+1, b-1, b, b+1.
- Используют специальные значения. К ним относятся: константы, 0, 1, пустая строка, пустой файл, строка из одного символа и т.д.
- Для циклов, организованных с помощью оператора Do, выбрать значения, при которых цикл выполняется 0, 1 и максимальное число раз.
l Принцип 1: ориентация предприятия-разработчика на потребителя-заказчика. «Предприятия зависят от своих потребителей и, таким образом, должны понимать текущие и будущие потребности потребителей-заказчиков, удовлетворять их требования и стремиться превзойти их ожидания»
l Принцип 2: лидерство-руководство. «Лидеры обеспечивают единство назначения и направления деятельности предприятия. Они должны создавать и поддерживать внутреннюю окружающую среду, в которой специалисты могут в полной мере участвовать в достижении стратегических целей предприятия»
l Принцип 3: вовлечение персонала. «Люди составляют сущность предприятия на всех уровнях, и их полноценное участие в деятельности способствует применению их способностей на благо целей предприятия»
l Принцип 4: процессный подход. «Желаемый результат достигается более эффективно, когда требуемые ресурсы и деятельность специалистов предприятия управляются как единый связанный процесс»
l Принцип 5: системный подход к административному управлению. «Выявление и понимание задач и административное управление системой взаимосвязанных процессов для заданной стратегической цели, повышает эффективность и результативность предприятия»
l Принцип 6: постоянное усовершенствование. «Непрерывное усовершенствование процессов и повышение качества продукции должно быть постоянной стратегической целью предприятия и его специалистов»
l Принцип 7: подход к принятию решений основанный на фактах. «Эффективные решения должны базироваться на анализе только реальных данных и достоверной информации»
l Принцип 8: взаимовыгодные отношения с поставщиками. «Предприятие-пользователь и его поставщики-разработчики взаимозависимы, и взаимовыгодные отношения между ними повышают способность обоих производить качественную продукцию»
10. Проектный подход к разработке программного обеспечения: характеристики проекта, его миссия и цели, основные участники. Жизненный цикл проекта.
11. Что характеризует тип данных? Простые и структурированные типы данных.
12. Общая классификация структур данных.
13. Методы тестирования программного обеспечения.
14. Отладка программ и защитное программирование.
l Точка обнаружения ошибки — это место в программе, где ошибка себя проявляет или становится очевидной. Точка обнаружения должна выявляться первой
l Точка происхождения ошибки — это место в программе, где возникают условия для появления ошибки
l эхо-печать всех введенных данных
l печать информации о ходе вычислительных операций
l печать информации о работе логической части программы
Это метод организации программного кода таким образом, чтобы при работе системы последствия проявления ошибки в программе не приводили бы к сбоям
Это такой стиль написания программ, при котором появляющиеся ошибки легко обнаруживаются и идентифицируются программистом
l Общее недоверие - входные данные каждого модуля должны тщательно анализироваться в предположении, что они ошибочны
l Немедленное обнаружение - каждая программная ошибка должна быть выявлена как можно раньше, что упрощает установление ее причины
l Изолирование ошибок - ошибки в одном модуле должны быть изолированы так, чтобы не допустить их влияние на другие модули (за счет введения так называемых брандмауэров)
15. Модели жизненного цикла программного обеспечения. Побудительные причины изучения моделей жизненного цикла. Подходы к моделированию жизненного цикла.
16. Последовательная модель жизненного цикла и ее модификации.
17. Эволюционные и инкрементные модели жизненного цикла.
18. Жизненный цикл ПО и методологии программирования. Жесткие и гибкие стратегии в методологиях программирования, их характерные черты и границы применимости.
Отладка программы - один их самых сложных этапов разработки программного обеспечения.
9.1. Классификация ошибок
Отладка — это процесс локализации и исправления ошибок, обнаруженных при тестировании программного обеспечения. Локализацией называют процесс определения оператора программы, выполнение которого вызвало нарушение нормального вычислительного процесса. Для исправления ошибки необходимо определить ее причину, т. е. определить оператор или фрагмент, содержащие ошибку. Причины ошибок могут быть как очевидны, так и очень глубоко скрыты.
В соответствии с этапом обработки, на котором проявляются ошибки, различают (рис. 9.1):
синтаксические ошибки - ошибки, фиксируемые компилятором (транслятором, интерпретатором) при выполнении синтаксического и частично семантического анализа программы;
ошибки компоновки — ошибки, обнаруженные компоновщиком (редактором связей) при объединении модулей программы;
ошибки выполнения - ошибки, обнаруженные операционной системой, аппаратными средствами или пользователем при выполнении программы.
Рис. 9.1. Классификация ошибок по этапу обработки программы
Синтаксические ошибки относят к группе самых простых, так как синтаксис языка, как правило, строго формализован, и ошибки сопровождаются развернутым комментарием с указанием ее местоположения. Определение причин таких ошибок, как правило, труда не составляет, и даже при нечетком знании правил языка за несколько прогонов удается удалить все ошибки данного типа.
Следует иметь в виду, что чем лучше формализованы правила синтаксиса языка, тем больше ошибок из общего количества может обнаружить компилятор и, соответственно, меньше ошибок будет обнаруживаться на следующих этапах. В связи с этим говорят о языках программирования с защищенным синтаксисом и с незащищенным синтаксисом. К первым, безусловно, можно отнести Pascal, ко вторым - С со всеми его модификациями.
Ошибки компоновки, как следует из названия, связаны с проблемами, обнаруженными при разрешении внешних ссылок. Например, предусмотрено обращение к подпрограмме другого модуля, а при объединении модулей данная подпрограмма не найдена или не стыкуются списки параметров. В большинстве случаев ошибки такого рода также удается быстро локализовать и устранить.
К самой непредсказуемой группе относятся ошибки выполнения. Прежде всего они могут иметь разную природу, и соответственно по-разному проявляться. Часть ошибок обнаруживается и документируется операционной системой. Выделяют четыре способа проявления таких ошибок:
• несовпадение полученных результатов с ожидаемыми.
Причины ошибок выполнения очень разнообразны, а потому и локализация может оказаться крайне сложной. Все возможные причины ошибок можно разделить на следующие группы:
• неверное определение исходных данных,
• накопление погрешностей результатов вычислений.
Неверное определение исходных данных происходит, если возникают любые ошибки при выполнении операций ввода-вывода.
Логические ошибки имеют разную природу. Так они могут следовать из ошибок, допущенных при проектировании, например, при выборе методов, разработке алгоритмов или определении структуры классов, а могут быть непосредственно внесены при кодировании модуля. К последней группе относят:
• ошибки некорректного использования переменных,
• ошибки межмодульного интерфейса,
• другие ошибки кодирования.
Накопление погрешностей результатов числовых вычислений возникает, например, при некорректном отбрасывании дробных цифр чисел, некорректном использовании приближенных методов вычислений, игнорировании ограничения разрядной сетки представления вещественных чисел в ЭВМ и т. п.
9.2. Методы отладки программного обеспечения
Большинство ошибок можно обнаружить по косвенным признакам посредством тщательного анализа текстов программ и результатов тестирования без получения дополнительной информации. При этом используют различные методы:
Метод ручного тестирования.
Это - самый простой и естественный способ данной группы. При обнаружении ошибки необходимо выполнить тестируемую программу вручную, используя тестовый набор, при работе с которым была обнаружена ошибка.
Метод очень эффективен, но не применим для больших программ, программ со сложными вычислениями и в тех случаях, когда ошибка связана с неверным представлением программиста о выполнении некоторых операций. Данный метод часто используют как составную часть других методов отладки.
Самый ответственный этап - выявление симптомов ошибки. Организуя данные об ошибке, целесообразно записать все, что известно о ее проявлениях, причем фиксируют, как ситуации, в которых фрагмент с ошибкой выполняется нормально, так и ситуации, в которых ошибка проявляется. Если в результате изучения данных никаких гипотез не появляется, то необходима дополнительная информация об ошибке. Дополнительную информацию можно получить, например, в результате выполнения схожих тестов.
В процессе доказательства пытаются выяснить, все ли проявления ошибки объясняет данная гипотеза, если не все, то либо гипотеза не верна, либо ошибок несколько.
По методу дедукции вначале формируют множество причин, которые могли бы вызвать данное проявление ошибки. Затем, анализируя причины, исключают, те, которые противоречат имеющимся данным. Если все причины исключены, то следует выполнить дополнительное тестирование исследуемого фрагмента. В противном случае наиболее вероятную гипотезу пытаются доказать. Если гипотеза объясняет полученные признаки ошибки, то ошибка найдена, иначе - проверяют следующую причину.
Метод обратного прослеживания.
Для небольших программ эффективно применение метода обратного прослеживания. Начинают с точки вывода неправильного результата. Для этой точки строится гипотеза о значениях основных переменных, которые могли бы привести к получению имеющегося результата. Далее, исходя из этой гипотезы, делают предположения о значениях переменных в предыдущей точке. Процесс продолжают пока не обнаружат причину ошибки.
9.3. Методы и средства получения дополнительной информации
Для получения дополнительной информации об ошибке можно выполнить добавочные тесты или использовать специальные методы и средства
• интегрированные средства отладки,
Метод требует включения в программу дополнительного отладочного вывода в узловых точках. Узловыми считают точки алгоритма, в которых основные переменные программы меняют свои значения. При этом предполагается, что, выполнив анализ выведенных значений, программист уточнит момент, когда были получены неправильные значения, и сможет сделать вывод о причине ошибки.
Данный метод не очень эффективен и в настоящее время практически не используется.
Интегрированные средства отладки.
Большинство современных сред программирования (Delphi, Builder C++, Visual Studio и т. д.) включают средства отладки, которые обеспечивают максимально эффективную отладку. Они позволяют:
• выполнять программу по шагам, причем как с заходом в подпрограммы, так и выполняя их целиком,
• предусматривать точки останова,
• выполнять программу до оператора указанного курсором и т.п..
Отладка с использованием независимых отладчиков.
При программировании программ иногда используют специальные программы - отладчики, которые позволяют выполнить любой фрагмент программы в пошаговом режиме и проверить содержимое интересующих программиста переменных. Как правило, такие отладчики позволяют отлаживать программу только в машинных командах, представленных в 16-ричном коде.
9.4. Общая методика отладки программного обеспечения
Суммируя все сказанное выше, можно предложить следующую методику отладки программного обеспечения, написанного на универсальных языках программирования для выполнения в операционных системах MS DOS и Win32:
Если ошибка не найдена или система просто «зависла», переходят ко второму этапу.
2 этап- локализация ошибки - определение конкретного фрагмента, при выполнении которого произошло отклонение от предполагаемого вычислительного процесса. При этом, если были получены неправильные результаты, то в пошаговом режиме проверяют ключевые точки процесса формирования данного результата.
Как подчеркивалось выше, ошибка не обязательно допущена в том месте, где она проявилась. Если в конкретном случае это так, то переходят к следующему этапу.
3 этап - определение причины ошибки - изучение результатов второго этапа и формирование версий возможных причин ошибки. Эти версии необходимо проверить, возможно, используя отладочные средства для просмотра последовательности операторов или значений переменных.
4 этап - исправление ошибки - внесение соответствующих изменений во все операторы, совместное выполнение которых привело к ошибке.
5 этап - повторное тестирование - повторение всех тестов с начала, так как при исправлении обнаруженных ошибок часто вносят в программу новые.
Отладка программы – это процесс поиска и устранения ошибок. Часть ошибок формального характера, связанных с нарушением правил записи конструкций языка или отсутствием необходимых описаний, обнаруживает транслятор, производя синтаксический анализ текста программы. Транслятор выявляет ошибки и сообщает о них, указывая их тип и место в программе. Такие ошибки называются ошибками времени трансляции или синтаксическими ошибками.
Ошибочные ситуации могут возникнуть и при выполнении программы, например, деление на нуль или извлечение корня квадратного из отрицательного числа. Такие ошибки называются ошибками времени выполнения.
Программа, не имеющая ошибок трансляции и выполнения, может и не дать верных результатов из-за логических ошибок в алгоритме, т. е. алгоритмических или семантических ошибок. Ошибки подобного рода могут возникнуть на любом этапе разработки программы: постановки задачи, разработке математической модели или алгоритма. Необходим действенный контроль над процессом вычислений, позволяющий предотвращать или своевременно обнаруживать ошибки подобного рода. Для этого используются как качественный анализ задачи, основанный на различного рода интуитивных соображениях и правдоподобных рассуждениях, так и контрольный просчет или тестирование программы.
Тестирование программы – это выполнение программы на наборах исходных данных (тестах), для которых известны результаты, полученные другим методом. Система тестов подбирается таким образом, чтобы
а) проверить все возможные режимы работы программы;
б) по возможности, локализовать ошибку.
При тестировании программы простой и действенный метод дополнительного контроля над ходом её выполнения – получение контрольных точек, т. е. контрольный вывод промежуточных результатов.
Для проверки правильности работы программы иногда полезно также выполнить проверку выполнения условий задачи (например, для алгебраического уравнения найденные корни подставляются в исходное уравнение и проверяются расхождения левой и правой частей).
33. ВИДЫ ОШИБОК В ПРОГРАММАХ
Об ошибках в программе сигнализируют некорректная работоспособность программы либо ее полное невыполнение. В наше время для обозначения ошибки в программе используют термин «Баг» (с англ. Bug-жук).
Есть несколько типов ошибок:
1) Логическая ошибка. Это, пожалуй, наиболее серьезная из всех ошибок. Когда написанная программа на любом языке компилирует и работает правильно, но выдает неправильный вывод, недостаток заключается в логике основного программирования. Это ошибка, которая была унаследована от недостатка в базовом алгоритме. Сама логика, на которой базируется вся программа, является ущербной. Чтобы найти решение такой ошибки нужно фундаментальное изменение алгоритма. Вам нужно начать копать в алгоритмическом уровне, чтобы сузить область поиска такой ошибки. (пример: задача программы вывести сумму двух чисел а и b.
varc,a,b:integer;
2) Синтаксическая ошибка.Каждый компьютерный язык, такой как C, Java, Perl и Python имеет специфический синтаксис, в котором будет написан код. Когда программист не придерживаться "грамматики" спецификациями компьютерного языка, возникнет ошибка синтаксиса. Такого рода ошибки легко устраняются на этапе компиляции.
3) Ошибка компиляции.Компиляция это процесс, в котором программа, написанная на языке высокого уровня, преобразуется в машиночитаемую форму. Многие виды ошибок могут происходить на этом этапе, в том числе и синтаксические ошибки. Иногда, синтаксис исходного кода может быть безупречным, но ошибка компиляции все же может произойти. Это может быть связано с проблемами в самом компиляторе. Эти ошибки исправляются на стадии разработки.
vara:array[1..5] of integer;
6) Ошибки ресурса. Ошибка ресурса возникает, когда значение переменной переполняет максимально допустимое значение. Переполнение буфера, использование неинициализированной переменной, нарушение прав доступа и переполнение стека - примеры некоторых распространенных ошибок.
vara:integer;
7) Ошибка взаимодействия. Они могут возникнуть в связи с несоответствием программного обеспечения с аппаратным интерфейсом или интерфейсом прикладного программирования. В случае веб-приложений, ошибка интерфейса может быть результатом неправильного использования веб-протоколов
Синтаксические ошибки – это ошибки в записи конструкций языка программирования (чисел, переменных, функций, выражений, операторов, меток, подпрограмм).
Семантические ошибки – это ошибки, связанные с неправильным содержанием действий и использованием недопустимых значений величин.
Для опытных разработчиков информация статьи может быть очевидной и если вы себя таковым считаете, то лучше добавьте в комментариях полезных советов.
Как обнаружить ошибку
Прочитай информацию об исключении
Если выполнение программы прерывается исключением, то это первое место откуда стоит начинать поиск.
В каждом языке есть свои способы уведомления об исключениях. Например в JavaScript для обработки ошибок связанных с Web Api существует DOMException. Для пользовательских сценариев есть базовый тип Error. В обоих случаях в них содержится информация о наименовании и описании ошибки.
Каким бы языком вы не пользовались, не поленитесь изучить каким образом язык предоставляет информацию об исключениях и что эта информация означает.
Пример неявного переопределения параметров - использование интерцептора, который изменяет этот параметр в запросе и о котором вы не знаете.
Разверните стек
Загуглите текст ошибки
Очевидное правило, которым не все пользуются. Применимо к не типовым ошибкам, например связанным с конкретной библиотекой или со специфическим типом исключения. Поиск по тексту ошибки помогает найти аналогичные случаи, которые даже если не дадут конкретного решения, то помогут понять контекст её возникновения.
Прочитайте документацию
Если ошибка связана с использованием внешней библиотеки, убедитесь что понимаете как она работает и как правильно с ней взаимодействовать. Типичные ошибки, когда подключив новую библиотеку после прочтения Getting Started она не работает как ожидалось или выбрасывает исключение. Проблема может быть в том, что базовый шаблон подключения библиотеки не применим к текущему приложению и требуются дополнительные настройки или библиотека не совместима с текущим окружением. Разобраться в этом поможет прочтение документации.
Проведите исследовательское тестирование
Если используете библиотеку которая не работает как ожидалось, а нормальная документация отсутствует, то создайте тесты которые покроют интересующий функционал. В ассертах опишите ожидаемое поведение. Если тесты не проходят, то подбирая различные вариации входных данных выясните рабочую конфигурацию. Цель исследовательских тестов помочь разобраться без документации, какое ожидаемое поведение у изучаемой библиотеки в разных сценариях работы. Получив эти знания будет легче понять как правильно использовать библиотеку в проекте.
Бинарный поиск
Где обитают ошибки
Ошибки в своём коде
Ошибки в чужом коде
Если над проектом работает больше одного разработчика, чей код взаимодействует друг с другом, возможна ситуация, когда ошибка происходит в чужом коде. Может сложиться впечатление, что если программа раньше работала, а сломалась только после того, как вы добавили свой код, то проблема в этом коде. На деле может быть, что ваш код обращается к уже существующему чужому коду, но передаёт туда граничные значения данных, работу с которыми забыли протестировать и обработать такие случаи.
В зависимости от соглашений на проекте исправляйте такие ошибки как свои собственные, либо сообщайте о них автору и ждите внесения правок.
Ошибки в библиотеках
Ошибки могут падать во внешних библиотеках к которым нет доступа и в таком случае непонятно что делать. Такие ошибки можно разделить на два типа. Первый- это ошибки в коде библиотеки. Второй- это ошибки связанные с невалидными данными или окружением, которые приводят к внутреннему исключению.
Первый случай хотя и редкий, но не стоит о нём забывать. В этом случае можно откатиться на другую версию библиотеки и создать Issue с описанием проблемы. Если это open-source и нет времени ждать обновления, можно собрать свою версию исправив баг самостоятельно, с последующей заменой на официальную исправленную версию.
Во втором случае определите откуда из вашего кода пришли невалидные данные. Для этого смотрим стек выполнения и по цепочке прослеживаем место в котором библиотека вызывается из нашего кода. Далее с этого места начинаем анализ, как туда попали невалидные данные.
Ошибки не воспроизводимые локально
Ошибка воспроизводится на develop стенде или в production, но не воспроизводится локально. Такие ошибки сложнее отлавливать потому что не всегда есть возможность запустить дебаг на удалённой машине. Поэтому убеждаемся, что ваше окружение соответствует внешнему.
Проверьте версию приложения
На стенде и локально версии приложения должны совпадать. Возможно на стенде приложение развёрнуто из другой ветки.
Проверьте данные
Проблема может быть в невалидных данных, а локальная и тестовая база данных рассинхронизированы. В этом случае поиск ошибки воспроизводим локально подключившись к тестовой БД, либо сняв с неё актуальный дамп.
Проверьте соответствие окружений
Коварные ошибки
Похожая ситуация и с одинаково названными типами. Если сборка включает несколько проектов в которых присутствуют одинаково названные классы, то можно по ошибке обращаться не к тому который требуется. Чтобы избежать обоих случаев, убедитесь, что в месте возникновения ошибки идёт обращение к правильным типам и методам.
Дополнительные материалы
Алгоритм отладки
Проверь гипотезу - если гипотеза проверку не прошла то п.3.
Убедись что исправлено - если не исправлено, то п.3.
Подробнее ознакомиться с ним можно в докладе Сергея Щегриковича «Отладка как процесс».
Чем искать ошибки, лучше не допускать ошибки. Прочитайте статью «Качество вместо контроля качества», чтобы узнать как это делать.
Итого
При появлении ошибки в которой сложно разобраться сперва внимательно и вдумчиво читаем текст ошибки.
Смотрим стек выполнения и проверяем, не находится ли причина возникновения выше по стеку.
Если по прежнему непонятно, гуглим текст и ищем похожие случаи.
Если проблема при взаимодействии с внешней библиотекой, читаем документацию.
Если нет документации проводим исследовательское тестирование.
Если не удается локализовать причину ошибки, применяем метод Бинарного поиска.
Читайте также: