Лекция 2. Основные понятия и классификация видов ошибок. ОÑ‚ладка прог

1.

ОСНОВНЫЕ ПОНЯТИЯ И
КЛАССИФИКАЦИЯ ВИДОВ ОШИБОК.
ОТЛАДКА ПРОГРАММ.

2.

ОСНОВНЫЕ ПОНЯТИЯ
И КЛАССИФИКАЦИЯ
ВИДОВ ОШИБОК

3.

Ошибка в программировании (или так
называемый баг)
• Ситуация у разработчиков, при которой определенный код
вследствие обработки выдает неверный результат. Причин
данному явлению множество: неисправность компилятора,
сбои интерфейса, неточности и нарушения в программном
коде.
• Баги обнаруживаются чаще всего в момент отладки или
бета-тестирования. Реже – после итогового релиза готовой
программы

4.

Классификация ошибок
• Серьезные неполадки. Это нарушения работоспособности
приложения, которые могут приводить к непредвиденным
крупным изменениям.
• Незначительные ошибки в программах. Чаще всего не
оказывают серьезного воздействия на функциональность
ПО.
• Блокирующие
(также может называться Blocker или
Showstopper). Критические проблемы в приложении или
аппаратном обеспечении. Приводят к выходу программы из
строя почти всегда. Для примера можно взять любое
клиент-серверное приложение, в котором не получается
авторизоваться через логин и пароль.

5.

Классификация ошибок
• Также существуют различные виды сбоев в плане частоты
проявления:
Постоянные - появляются независимо от используемой
платформы и выполненных клиентом манипуляций
«Разовые» - встречаются редко, чаще – при определенных
настройках и действиях со стороны пользователя.

6.

Типы ошибок
• Синтаксические ошибки
• Семантические ошибки
• Времени выполнения
• Логические ошибки
• Ошибки с памятью
• Взаимодействия
• Компиляционные

7.

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

8.

Семантические ошибки
• Семантические ошибки возникают, когда код синтаксически
корректен, но не имеет логического смысла. В этом случае
программа может выполняться, но она не делает то, что
подразумевалось.
• Например:
Использование неверных переменных в расчетах.
Неправильное использование операторов.
• Программа не вызывает сбоев, но результаты ее работы
будут ошибочными.

9.

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

10.

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

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

11.

Ошибки с памятью
• Сбои вроде «переполнение буфера» или «нехватка памяти».
Тесно связаны с «железом» устройства. Могут быть вызваны
действиями пользователя. Пример – запуск «свежих» игр на
стареньких компьютерах.
• Исправить ситуацию помогают основательные работы над
исходным кодом. А именно – полное переписывание
программы или «проблемного» фрагмента.

12.

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

13.

Компиляционные
• Встречается при разработке на языках высокого уровня. Во
время преобразований в машинный тип «что-то идет не
так». Причиной служат синтаксические ошибки или сбои
непосредственно в компиляторе.
• Наличие
подобных неполадок делает бета-тестирование
невозможным. Компиляционные ошибки устраняются при
разработке-отладке.

14.

Необычные баги
• Необычные
баги — это баги, которые особенно сложно
понять и исправить. Существует несколько типов необычных
багов, названных в основном в честь ученых, открывших
схожие парадоксальные явления:
Борбаг;
Мандельбаг;
Гейзенбаг;
Шрединбаг;
Баг фазы луны;
Статистический баг;
Альфа-баг (баг альфа-частицы);

15.

Борбаги
назван в честь модели атома Бора
• Баг,
который проявляется в определенных (но возможно
неизвестных) условиях.
•В
эту категорию попадают как самые простейшие баги с
очевидным происхождением, так и те, которые настолько сложно
найти и исправить, что они остаются в программе на этапе ее
использования. Иногда ошибка происходит только при вводе
определённого набора параметров или при возникновении
конкретных событий. Эти баги часто присутствуют в редко
вызываемых частях кода, и как следствие, могут очень долго
оставаться незамеченными. Их еще иногда называют
Призраками в коде.

16.

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

17.

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

18.

Шрединбаг
происходит от понятия мысленного эксперимента с котом
Шредингера
• Баги, которые проявляются после того, как кто-то, прочтя
код или использовав программу необычным образом,
замечает, что она вообще не должна была работать, и в этотто момент программа тут же и прекращает, пока баг не
починят.
• Представьте, что обнаружили в программе ошибку, которая
проявляется только когда пользователь выполняет очень
специфическую последовательность действий. Однако,
когда вы изучаете код, идя по стандартному пути
пользователя, которым идет 99% пользователей, ошибка
как будто бы исчезает, и программа работает совершенно
нормально.

19.

Баг фазы луны
Или «баг, зависящий от фазы луны»
• Проявляется в программном обеспечении из-за зависимости
от лунных циклов или временных значений.
• Программы, которые отличаются время-зависимым
поведением, склонны и к время-зависимым ошибкам,
которые могут возникнуть в определенной части процесса
или в конкретно время (например, 29 февраля или когда
происходит смена суток, месяца, года или века)

20.

Статистический баг
• Не
обнаруживаются при однократном прогоне, но
проявляются при многократном выполнении кода, который
предназначен для получения случайных (псевдослучайных)
результатов.
• Рассмотрим программу, которая генерирует случайные числа
для научного или бизнес-моделирования, и время от времени
выходные данные не совпадают с ожидаемыми. Эти
незначительные отклонения (которые часто имеют свойство
накапливаться!), свидетельствуют о наличии статистического
бага

21.

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

22.

ОТЛАДКА ПРОГРАММ.
МЕТОДЫ И ВИДЫ
ОТЛАДКИ ПРОГРАММ

23.

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

24.

Методы отладки программного
обеспечения
• Метод ручного тестирования
• Метод индукции
• Метод дедукции
• Метод обратного прослеживания

25.

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

26.

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

27.

Метод дедукции
• Сначала
специалисты
предлагают
множество причин, по которым могла
возникнуть ошибка. Затем анализируют
их,
исключают
противоречащие
имеющимся данным. Если все причины
были
исключены,
проводят
дополнительное
тестирование.
В
обратном случае наиболее вероятную
причину пытаются доказать.

28.

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

29.

Как выполняется отладка в
современных IDE. Начало
• Ранние
отладчики, например GNU
Debugger,
представляли
собой
отдельные
программы
с
интерфейсами командной строки.

30.

Как выполняется отладка в
современных IDE. Продолжение
• Более
поздние,
например
первые
версии
Turbo
Debugger,
были
автономными,
но
имели собственный
графический
интерфейс
для
облегчения работы.

31.

Как выполняется отладка в
современных IDE. Ещё немного
• Инструмент
WinDbg,
представляющий собой
отладчик для Windows.
Этот
инструмент
особенно полезен при
работе
с
низкоуровневым кодом
и
операционной
системой.

32.

Как выполняется отладка в
современных IDE. Утилиты
• Debugging
Tools for Windows – это набор утилит,
разработанный для детальной проверки программ на
наличие ошибок.
• В этот комплект входят инструменты, такие как Dbgview для
мониторинга выходных данных отладки и Procmon для
отслеживания активности процессов и файловой системы.
Эти
утилиты
помогают
исследовать
проблемы,
возникающие в сложных программных средах.

33.

Как выполняется отладка в
современных IDE. Память
• Для
более специализированных
нужд можно использовать Dr.
Memory

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

34.

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

35.

Основные этапы отладки
• Разметка
кода: Процесс начинается с расстановки точек останова
(breakpoints) в критических местах кода, где наиболее вероятно присутствие
ошибок.
• Запуск отладки: Программа запускается в режиме отладки, что позволяет
видеть выполнение кода в реальном времени и остановиться в заранее
указанных точках.
• Анализ
переменных и стека: На этапе выполнения кода разработчики
обращают внимание на значения переменных и состояние стека вызовов
методов.
• Пошаговая отладка: Позволяет выполнять программу построчно, чтобы
выявить поведение каждого участка кода.
• Исправление ошибок: После обнаружения критических участков, изменения
вносятся непосредственно в код, и процесс отладки повторяется до полного
устранения всех ошибок.

36.

Средства отладки в Visual Studio
• Использование окна Watch (Контрольные значения): С его
помощью можно отслеживать значения переменных в
реальном времени и изменять их при необходимости.

37.

Средства отладки в Visual Studio
• Локальные
переменные (Locals):
Автоматическое
отображение
локальных
переменных и их
значений,
что
упрощает
анализ
текущего состояния
программы.

38.

Средства отладки в Visual Studio
• Выражение
Immediate (окно интерпретации): Здесь
можно выполнять команды на языке программирования,
изучать поведение отдельных участков кода и
экспериментировать с изменением переменных.

39.

Средства отладки в Visual Studio
• Анализ
Call Stack (стек вызовов): Эта функция
предоставляет информацию о текущем порядке вызова
методов, позволяя понять, как программный поток попал в
заданное место.

40.

Средства отладки в Visual Studio
• Интерактивные подсказки: При наведении курсора на
переменные в коде моментально отображается их текущее
значение, что ускоряет процесс поиска ошибок.

41.

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

42.

Советы по эффективной отладке

43.

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

44.

ОСНОВНЫЕ ПОНЯТИЯ
И КЛАССИФИКАЦИЯ
ВИДОВ ОШИБОК

45.

Техники тестирования требований
Взаимный просмотр
– Беглый просмотр
– Технический просмотр
– Формальная инспекция
Вопросы
• Тест-кейсы и чек-листы
• Исследование поведения системы
• Графическое представление
• Прототипирование

46.

Классификация тестирования
• По запуску кода на исполнение:

Статическое тестирование — без запуска.

Динамическое тестирование — с запуском.
• По доступу к коду и архитектуре приложения:

Метод белого ящика — доступ к коду есть.

Метод чёрного ящика — доступа к коду нет.

Метод серого ящика — к части кода доступ есть, к части — нет.
• По степени автоматизации:

Ручное тестирование — тест-кейсы выполняет человек.

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

47.

Классификация тестирования
По уровню детализации приложения (по уровню
тестирования):

Модульное (компонентное) тестирование — проверяются отдельные
небольшие части приложения.

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

Системное тестирование — приложение проверяется как единое целое.
По уровню функционального тестирования:

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

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

48.

Классификация тестирования
По уровню функционального тестирования:
– Расширенное тестирование — проверка всей функциональности,
заявленной в требованиях.

49.

Классификация тестирования
По принципам работы с приложением:
– Позитивное тестирование — все действия с приложением
выполняются строго по инструкции без никаких недопустимых
действий, некорректных данных и т.д. Можно образно сказать,
что приложение исследуется в «тепличных условиях».
– Негативное тестирование — в работе с приложением
выполняются (некорректные) операции и используются
данные, потенциально приводящие к ошибкам (деление на
ноль)

50.

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

51.

Классификация тестирования
• По уровню архитектуры приложения:
– Тестирование уровня представления — исследуются вопросы
удобства использования, скорости отклика интерфейса,
совместимости с браузерами, корректности работы интерфейсов.
– Тестирование уровня бизнес-логики — отвечает за проверку
основного набора функций приложения и строится на базе
ключевых требований к приложению, бизнес-правил и
общей проверки функциональности.
– Тестирование уровня данных — тестирование данных, проверка
соблюдения бизнес-правил, тестирование производительности.
English     Русский Правила