Автор: Пользователь скрыл имя, 07 Ноября 2011 в 21:11, статья
В статье были рассмотрены некоторые определения программных ошибок и подходы к их классификации. Анализ различных вариантов классификации показал, что работа по классификации программных ошибок далека от завершения. Имеющиеся варианты классификации больше похожи на перечень возможных проблем, а не на продуманную схему систематизации знаний в этой области. По ходу описания существующих классификаций намечены некоторые пути их совершенствования.
Потери времени. Имеются в виду потери времени из-за неудачного интерфейса программы.
Меню. Меню должны быть простыми и логичными, поэтому все недостатки меню можно считать ошибками программы или же потенциальным источником ошибок при эксплуатации программного изделия.
Командные строки. В некоторых случаях ввод команд может быть предпочтительнее выбора из меню. Речь идет о чисто интерфейсных вещах: учет регистра в командах может приводить к ошибкам, соблюдение единого порядка параметров в командах, не распознаются полные имена в командах, не допускаются сокращения, сложная команда в одной строке, отсутствие возможности пакетного ввода, отсутствие возможности редактирования команд.
Нестандартное использование клавиатуры. Рассматриваются различные неудобства пользователя, приводящие к его ошибкам, связанные с отсутствием возможности использовать клавиши, их непривычное использование, возможность осуществить ввод недопустимых символов, отсутствие индикаторов состояния клавиатуры, отсутствие реакции на управляющие клавиши.
Пропущенные команды. Ошибки связаны с невозможностью или с существенными трудностями пользователя при изменениях состояния программы. Сюда входят ошибки, связанные с невозможностью выйти из какой-то программы или из какого-то режима, прервать или приостановить выполнение программы, отсутствие возможности резервного копирования (по-моему, это в первую очередь функциональная ошибка), отсутствие команды отмены, отсутствие запросов на подтверждение команд для некоторых ответственных операций, отсутствие режима автоматического периодического сохранения данных (по-моему, это также функциональная ошибка).
Обработка ошибок пользователем. Не предусмотрены пользовательские проверки вводимых данных (по-моему, это в первую очередь функциональная ошибка), сложно исправить допущенную ошибку, не предусмотрена возможность записи комментариев (по-моему, это можно считать как функциональной ошибкой, так и ошибкой в интерфейсе в зависимости от того, что представляет собой этот комментарий), отсутствуют средства отображения связей между переменными.
Разное. Очень эклектичный раздел. Сюда входят ошибки, связанные с защитой информации (неадекватные средства защиты и избыточная защита), которые необходимо выделить в самостоятельный раздел. Невозможность спрятать меню (недостаток интерфейса), отсутствие поддержки стандартных функций операционной системы, отсутствие поддержки длинных имен файлов (функциональные ошибки).
Негибкость программы. В разделе рассматриваются возможные проблемы настройки пользовательского интерфейса программы. Отмечается, что негибкость программы – это не всегда недостаток, т.к. программы с простым фиксированным интерфейсом как правило более просты в изучении и в эксплуатации. Выделяются следующие виды ошибок: невозможность отключить звук, отсутствие переключателя учета регистра, несовместимость с аппаратным обеспечением (по-моему, не из этого раздела), игнорирование инициализации устройств, выполненной извне (имеется в виду, что программа не может выполнить настройки конкретного оборудования, а только посылает какой-то ограниченный набор команд (по-моему, не из этого раздела), не предусмотрено отключение функции автоматического сохранения, невозможность замедлить (ускорить) прокрутку текста, отсутствие возможности повторить последнее действие или выяснить, каким оно было, невозможно выполнить только что настроенную команду, не сохраняются настроенные параметры программы (мне кажется, что это функциональный недостаток, причем возможна ситуация, когда настройка некоторых параметров пользователем невозможна по соображениям безопасности), побочные эффекты настройки, излишне высокая степень настраиваемости.
Кто здесь главный? В этом пункте авторы работы [5] опять возвращаются к ошибкам в сообщениях программ и недостаткам команд. Получился как бы еще один раздел «Разное», который включает следующие ошибки: навязывание ненужных ограничений, дружественность к новичкам, создающая неудобства для опытных пользователей, навязчивая предупредительность и неудачная попытка сделать программу интеллектуальной, запрос информации без необходимости, ненужное повторение действий, ненужные ограничения.
Производительность. Авторы отмечают существование нескольких трактовок этого понятия: 1) скорость программы, 2) производительность работы пользователя, 3) субъективное восприятие пользователем характеристик производительности программы. В связи с этим возможна ситуация, когда высокоскоростная программа с неудачным пользовательским интерфейсом кажется медленнее, чем на самом деле. Какая-то логика в этом безусловно есть, но представляется более правильным разделить производительность программы при решении ее основных функциональных задач, которая в большинстве случаев не зависит от пользователей и может быть точно замерена, и производительность непосредственно интерфейса. При всей субъективности этой характеристики она может быть оценена на стадии разработки интерфейса, а затем и измерена специальными средствами.
В разделе выделяются следующие подразделы: низкоскоростная программа (ошибки проектирования и кодирования), задержка реакции на действия пользователя, большое время ответа, программа не распознает ввод, отсутствие предупреждений о длительных операциях, отсутствие индикаторов хода работы, проблемы тайм-аутов (здесь речь идет об искусственных ограничениях времени ввода данных или паузах при совершении каких-то действий), надоедливая программа, избыточная информация, передавая по медленным сетям (проблема рассматривается только с точки зрения интерфейса пользователя, хотя проблема должна решаться при проектировании системы в целом). Далее приводятся ряд ошибок, которые явно не из этого раздела: выходная информация должна быть полной и понятной пользователю, невозможно получить определенные данные, невозможно перенаправить вывод, формат, неподходящий для дальнейшей обработки (речь идет об ошибках в программных интерфейсах, явно напрашивается вывод - выделить их в раздел: «Ошибки взаимодействия программ»), слишком мало или слишком много выходной информации, абсурдная степень точности, невозможность форматирования заголовков таблиц и подписей рисунков, невозможность изменения масштаба графиков. Необходимо отметить, что последние 2 пункта являются слишком частными, поэтому вызывает сомнение необходимость включать настолько частные ошибки в общую классификацию.
Авторы
работы [5] подчеркивают, что вопросы производительности
нельзя рассматривать без учета работы
пользователя, поэтому выделяются такие
«узкие места», как: все, что повышает вероятность
ошибок пользователя, громоздкая схема
исправления ошибок, все, что ставит пользователя
в тупик, неоправданное увеличение количества
действий, необходимых для достижения
определенного результата.
Обработка ошибок.
Предотвращение ошибок. Программа должна быть защищена от недопустимого ввода и неправильной эксплуатации. Должна быть предусмотрена проверка вводимых данных. Можно использовать методы аппаратного обнаружения и исправления ошибок.
Выделяются подпункты:
неверное начальное состояние;
неадекватная проверка пользовательского ввода;
неадекватная защита от испорченных данных;
не выполнена проверка переданных параметров;
недостаточная защита от ошибок операционной системы;
не выполняется проверка версии;
недостаточная
защита от неправильного использования
(«защита от дурака»).
Выявление ошибок. Программа должна контролировать правильность данных.
Выделяются подпункты:
переполнение;
невозможные значения;
непроверенные данные;
флаги ошибок;
аппаратные сбои;
сравнение данных;
восстановление после ошибок;
автоматическое исправление ошибок;
отсутствие сообщения об ошибке;
не установлен флаг ошибки;
куда возвращается управление? (Ошибки передачи управления после сбоя);
прекращение выполнения программы из-за ошибки. Имеются в виду возможные ошибки из-за не корректной обработки такой ситуации;
обработка аппаратных отказов;
ну
нет у меня нужного диска! Программа
должна предусматривать какой-то выход
из ситуации, когда пользователь не
в состоянии выполнить
Ошибки, связанные с граничными условиями.
Выделяют следующие типы таких ошибок:
неправильная обработка граничного значения;
неверное граничное условие;
неправильная обработка данных, не соответствующих граничным условиям.
Выделяются следующие подпункты:
числовые ограничения;
ограничения на равенство;
количественные ограничения;
пространственные ограничения;
ограничения времени (имеются в виду вопросы, связанные с поведением системы на границах заданных в программе временных интервалов);
условия циклов;
ограничения объема памяти;
ограничения, связанные со структурой данных;
ограничения, связанные с аппаратным обеспечением;
невидимые границы.
Раздел
представляется очень эклектичным.
Напрашивается вывод о вынесении ошибок,
связанных с циклами, использованием памяти,
ошибок в структурах данных в отдельные
разделы. Представляется, что наличие
того или иного ограничения не может являться
главным критерием классификации. Также
все ошибки, связанные с аппаратным обеспечением
должны быть собраны в отдельном разделе
и там структурированы.
Ошибки вычислений.
Авторы работы [5] выделяют следующие причины возникновения таких ошибок:
неверная логика (может быть следствием, как ошибок проектирования, так и кодирования);
неправильно выполняются арифметические операции (как правило – это ошибки кодирования);
неточные вычисления (могут быть следствием, как ошибок проектирования, так и кодирования). Очень сложная тема, надо выработать свое отношение к ней с точки зрения разработки безопасного ПО.
Выделяются подпункты:
устаревшие константы;
ошибки вычислений;
неверно расставленные скобки;
неправильный порядок операторов;
неверно работает базовая функция;
переполнение и потеря значащих разрядов;
ошибки отсечения и округления;
путаница с представлением данных;
неправильное преобразование данных из одного формата в другой;
неверная формула;
неправильное
приближение.
Начальное и последующие состояния (Ошибки инициализации).
Представляется не очень обоснованным их выделение в самостоятельный раздел, хотя они важны.
Выделяются подпункты:
не присвоены начальные значения;
не инициализирована переменная, управляющая циклом;
не инициализирован указатель;
не очищена строка;
не инициализированы регистры;
не сброшен флаг;
данные должны были инициализироваться в другом месте;
не
выполнена повторная
предположение (не верное), что данные не были инициализированы;
путаница со статическими и динамическими переменными;
не
предполагавшаяся модификация данных,
выполняемая другими
ошибочная инициализация;
зависимость
от инструментальных средств, которых
может не быть.