Программная ошибка. Определения

Содержание

Слайд 2

Философия программной ошибки Программная ошибка - отклонение в поведении программы от

Философия программной ошибки

Программная ошибка - отклонение в поведении программы от ожидаемого:
соответствие

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

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

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

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

Слайд 3

Защита от ошибок и устойчивость программы Средства фиксации ошибок: сохранение максимально

Защита от ошибок и устойчивость программы

Средства фиксации ошибок: сохранение максимально

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

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

Устойчивость: восстановление контекста при аварийной перезагрузке, восстановление соединений (поддержка сессий)

Слайд 4

Деятельности, связанные тестированием

Деятельности, связанные тестированием

Слайд 5

Деятельности, связанные тестированием Отладка – неполное начальное тестирование программы с целью

Деятельности, связанные тестированием

Отладка – неполное начальное тестирование программы с целью

получения исходной работоспособной версии программы (альфа-версии)
Отладка – процесс исправления известной ошибки, включающий ее воспроизведение, поиск и локализацию дефекта (тестирование – процесс поиска ошибки)
Верификация – способ формального доказательства правильности
программного кода путем анализа утверждений о состоянии данных (предикаты) и их преобразовании операциями и операторами программы (недостаток – затраты, соизмеримые с разработкой)
Инспекция кода – анализ работоспособного кода на предмет возможных ошибок. см. http://ermak.cs.nstu.ru/cprog гл.2. Анализ программ
Артефакты процесса отладки:
минимизация тестовых данных
эксперименты над программой. Статистика «черного ящика»
локализация дефекта. Метод половинного деления
трассировка как средство обнаружения закономерностей (преимущества log-а перед обычными средствами отладки)
предположение об ошибке. Инспекция кода
закономерности поведения программы с ошибкой сложнее, чем безошибочной (нарушение соглашений и инвариантов)
Слайд 6

Характеристики ошибок Условия появления ошибки: при определенном значении или наборе значений

Характеристики ошибок

Условия появления ошибки:
при определенном значении или наборе значений
при определенной

последовательности значений
при определенных временных сочетаниях (гонки)
со случайным временем появления
дефектный код, вызывается внешними событиями, в случайные моменты времени
отсутствие ресурсов на момент выполнения
накопление определенного количества данных (переполнение)
исполнение последовательности команд пользователем
2. Момент проявления:
в момент исполнения кода
наведенная – дефект приводит к нарушениям (целостность данных), которые вызываю сбой позднее
3. Характер последствий, уровень ущерба:
Снижение потребительских свойств программы
Локальная устранимая ошибка
Частичный восполнимый ущерб
Частичный невосполнимый ущерб
Катастрофа
Слайд 7

Характеристики ошибок 4. Воздействие на программу (возможные причины): наблюдаемый или тестируемый

Характеристики ошибок

4. Воздействие на программу (возможные причины):
наблюдаемый или тестируемый ошибочный

результат
нарушение целостности внутренних данных, дефект структуры данных – наведенные ошибки
зависание (линейное зацикливание)
фатальная ошибка – завершение программы (рекурсивное зацикливание)
фатальная ошибка – деградация функционала (перехваченное исключение)
деградация по производительности или ресурсам (утечки памяти)
5. Виды ошибок по отношению к структуре кода
опечатка
крайняя ситуация (граничное условие)
методологическая ошибка алгоритма
методологическая ошибка архитектуры
6. Затраты на исправление
исправление выражения/оператора
исправление фрагмента кода в отдельном методе
рефакторинг
реинжиниринг
изменения программной архитектуры проекта
Слайд 8

Причины появления ошибок "Я понял. Оказывается, это неправильные программисты. И они,

Причины появления ошибок

"Я понял. Оказывается, это неправильные программисты. И они,

наверное, делают неправильный код". Винни Пух

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

Слайд 9

Классификация ошибок Ошибки, связанные с особенностями языка, компилятора или системы исполнения

Классификация ошибок

Ошибки, связанные с особенностями языка, компилятора или системы исполнения

кода
Могут быть обнаружены формально:
синтаксический контроль источников синхронных исключений (Java)
синтаксический контроль инициализации локальных переменных (Java)
Уровень контроля – исторически сложившийся, также связан с моделью исполнения программы (адресная арифметика в Си).
Пример run-time дефекта в Си: возврат указателя на локальную переменную
Слайд 10

Ошибки вычислений и преобразований 2. Дефекты диапазонов представления данных. Пример: DataOutputStream.writeUTF

Ошибки вычислений и преобразований

2. Дефекты диапазонов представления
данных. Пример: DataOutputStream.writeUTF использует

short в качестве счетчика длины, размер строки ограничен 2^15
3. Дефекты явного и неявного преобразования типов данных:
потеря значащих разрядов при уменьшении размерности целых
арифметическое и логическое расширение для знаковых и беззнаковых
автоматическое расширение коротких типов

1. Операции с вещественными числами – дискретность шкалы вещественных чисел

Слайд 11

Ошибки структурирования и разработки кода 1. Дефекты инициализации – инициализация отсутствует,

Ошибки структурирования и разработки кода

1. Дефекты инициализации – инициализация отсутствует,

выполнена «не по месту», не тем значением

2. Лишний или недостающий шаг цикла
3. Дефект смещения на один шаг цикла (на элемент последовательности)
4. Дефект начального или конечного шага цикла

Слайд 12

Ошибки форматов входных данных ошибка в программе, сгенерировавшей входной файл, что

Ошибки форматов входных данных

ошибка в программе, сгенерировавшей входной файл, что привело

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

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

Слайд 13

Ошибки соглашений по данным Соглашения по данным – допустимые конфигурации элементов

Ошибки соглашений по данным

Соглашения по данным – допустимые конфигурации элементов и

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

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

Слайд 14

Ошибки реактивности и производительности зависание GUI – асинхронное исполнение продолжительных по

Ошибки реактивности и производительности

зависание GUI – асинхронное исполнение продолжительных по времени

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

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

Слайд 15

Дефекты общего доступа и разделения данных Контекст – множество имен, видимых

Дефекты общего доступа и разделения данных

Контекст – множество имен, видимых напрямую

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

Дефекты общего доступа и разделения данных Компоненты контекста: глобальные данные и

Дефекты общего доступа и разделения данных

Компоненты контекста:
глобальные данные и функции или

текущее пространство имен (Си++)
имена импортированных классов
статические методы и данные текущего класса
методы и данные текущего класса (текущий объект)
незатененные данные и неперекрытые методы базового класса
для вложенных и анонимных классов – данные и методы родительского класса
для анонимных классов, создаваемых внутри методов, локальные переменные и формальные параметры с модификатором final
формальные параметры текущего метода
локальные переменные текущего метода
Затенение – перекрытие одинаковых имен в разных компонентах контекста (например, данных текущего класса – параметрами метода)
Слайд 17

Дефекты общего доступа и разделения данных Дилемма ссылка – значение Шаблоны

Дефекты общего доступа и разделения данных

Дилемма ссылка – значение
Шаблоны проектирования: объект-значение,

приспособленец
Побочные эффекты и дефекты доступа по ссылке. Доступность ссылки на объект дает потенциальную возможность изменения его содержимого. Поэтому ошибки возможны даже при хорошей модульной организации кода и его малой связности по управлению. Меры предотвращения:
Уровень 1 – закрытость данных: безусловное закрытие прямого доступа к данным вне класса (private, доступ через пару методов get/set):
независимость внутреннего представления
возможность локализовать ошибку, связанную с доступом к данным
возможность добавить средства ограничения доступа, генерации событий и сбора статистики для этих данных
Уровень 2 – средства «раздачи» ссылок и контроля доступа в объектам. Объекты создаются и сохраняются в отдельном классе, сам класс «раздает» ссылки на эти объекты и подсчитывает их количество (имеются методы «получения» и «возвращения» ссылки). По максимуму, класс сохраняет ссылки на «запросивших доступ» и может делать к ним обратные вызовы
Слайд 18

Сравнение String и StringBuffer % времени сбора мусора Сохранившиеся поколения Особенности

Сравнение String и StringBuffer

% времени сбора мусора

Сохранившиеся поколения

Особенности среды исполнения, программного

и аппаратного окружения
Слайд 19

моделирование двумерного массива через одномерный [i][j]=[i*n+j] двумерный массив – массив ссылок

моделирование двумерного массива через одномерный [i][j]=[i*n+j]
двумерный массив – массив ссылок на

объекты – линейные массивы

Эксперимент Java

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

Парадокс двумерного массива (http://habrahabr.ru/post/211747/)
обработка по столбцам на порядок медленнее, чем по строкам.
предположение – влияние процессорного кэша

Слайд 20

на границе 3Мб эффект кэширования перестает работать для «вертикали» Результаты изменений Java (Desktop)

на границе 3Мб эффект кэширования перестает работать для «вертикали»

Результаты изменений Java

(Desktop)
Слайд 21

Результаты изменений C++ (Desktop)

Результаты изменений C++ (Desktop)

Слайд 22

Результаты изменений Java (Fly IQ245)

Результаты изменений Java (Fly IQ245)

Слайд 23

Результаты изменений Java (AM2308G)

Результаты изменений Java (AM2308G)