Тестирование-книга. Ю. Н. Артеменко Научный редактор
Скачать 6.27 Mb.
|
Не сохраняются настроенные параметры программы Прекрасно, если программа позволяет пользователю отключить звук. Но главное — чтобы эта установка сохранялась и пользователю не приходилось повторять ее при каждом запуске. Побочные эффекты настройки Изменение одних функций программы не должно влиять на работу других. Если же такие взаимосвязи неизбежны, они должны быть четко документированы. Кроме того, необходимо сообщать о них пользователю каждый раз, когда он настраивает взаимосвязанные функции. Высокая степень настраиваемости Существуют настолько гибкие программы, что практически все их ас пекты могут быть настроены пользователем. Проектирование таких про грамм — задача чрезвычайно сложная, поскольку повышение гибкости ни в коем случае не должно быть достигнуто за счет концептуальной целос тности и продуманности интерфейса. Конструктор программы должен уметь проанализировать ее с точки зрения опытного пользователя, понять, что ему может быть нужно от программы, как она может быть использо вана, какие ее аспекты могут потребовать настройки, а какие, наоборот, должны работать раз и навсегда определенным образом. Следует учитывать, что настройка продукта требует от пользователя его длительного изучения, а также определенных конструкторских способно стей. Поэтому программа с самого начала должна иметь вид законченно го, целостного и продуманного продукта, чтобы с ней мог работать и неопытный или временный пользователь. Кто здесь главный? Некоторые программы ведут себя довольно высокомерно. Их сообще ния крайне коротки, а стиль абсолютно непростителен — например, 4 8 0 Часть III: Управление проектами и группами пользователь не может ни отменить свою команду, ни изменить введенные данные. Такие вещи абсолютно недопустимы. Программы должны быть просты в использовании и максимально дружественны. Их задача — облег чать работу людей, а не усложнять ее. Навязывание ненужных ограничений Некоторые программы требуют, чтобы пользователь вводил данные в определенном порядке, завершал одну задачу перед переходом к другой, принимал решения, не проанализировав возможных последствий. Вот при меры. • Почему, разрабатывая форму ввода, пользователь должен определять имя, тип, ширину и другие характеристики поля до того, как оно будет нарисовано на экране? Все эти параметры необходимо опре делить до использования формы, но в процессе проектирования ее внешнего вида вполне можно обойтись и без них. • Описывая задания в системе управления проектом, ее пользователь должен прежде всего перечислить все задачи, затем всех сотрудни ков, а затем распределить между ними работу. Если система не дает пользователю возможности перераспределять задания между сотруд никами, едва ли она будет пригодна для практического использова ния. Очень многие ограничения налагаются программистом просто из-за ошибочного видения работы пользователей. "Для их же пользы" он закре пил в программе "оптимальную" последовательность действий. Дружественность к новичкам, создающая неудобства для опытных пользователей В программе, оптимизированной для новичка, задания могут быть раз биты на множество коротких понятных действий. Однако для опытного пользователя обязательно должен предусматриваться более быстрый способ их выполнения. Навязчивая предупредительность и неудачная попытка сделать программу интеллектуальной Предупредительность и искусственный интеллект программы — это ее способность спрогнозировать дальнейшие действия пользователя и выпол нить соответствующие команды, не дожидаясь его указаний. Это замеча тельная способность, если только предположения программы оказываются верными. Аналогичным образом прекрасной функцией может быть автома тическое исправление ошибок, если только программа не "исправляет" Приложение: Распространенные программные ошибки 4 8 1 правильные данные. Люди делают достаточно собственных ошибок, чтобы терпеть еще и постоянные ошибки не в меру предупредительной програм мы. Наилучшим решением проблемы является предоставление пользовате лю возможности подтвердить каждое автоматическое действие программы или отказаться от него. Запрос информации без необходимости Некоторые программы запрашивают у пользователя информацию, ко торую никогда не используют или просто однажды отображают на экране либо же просят его повторно ввести уже введенные однажды данные (не проверить и подтвердить их правильность, а именно ввести повторно). Как ни странно, такие ошибки чрезвычайно распространены. Ненужное повторение действий Если пользователь допустил ошибку в середине длинной последователь ности действий, некоторые программы заставляют его все повторить сна чала. Другие заставляют его подтверждать каждый шаг при выполнении каких-либо нестандартных действий. Все это — неоправданные потери времени пользователей. Ненужные ограничения Зачем ограничивать количество полей или записей в базе данных, ко личество символов в текстовом документе, почему бы не допустить ввод в ячейки электронной таблицы нечисловых данных? В программе не долж но быть ограничений, которые никак не влияют на ее производительность или надежность. Производительность Многие опытные пользователи считают производительность программы одной из ее важнейших характеристик. Существует несколько определений производительности. • Скорость программы, т.е. скорость выполнения ею стандартных за дач. Например, как быстро текстовый процессор перемещается к концу файла? • Производительность работы пользователя. Эта характеристика отно сится к быстроте выполнения более крупных заданий. Например, сколько времени потребуется пользователю на ввод и печать пись ма? • Ощущение производительности. Насколько быстрой программа ка жется пользователю? 4 8 2 Часть III: Управление проектами и группами В любом случае работа высокоскоростной программы с неудачным пользовательским интерфейсом кажется медленнее, чем на самом деле. Низкоскоростная программа Многие ошибки проектирования и кодирования приводят к замедлению работы программы. Программа может выполнять ненужную работу, напри мер, инициализировать области памяти, которые перед использованием обязательно будут перезаписаны. Или же программа может без необходи мости повторять определенные действия, например, делать внутри цикла то, что может быть один раз выполнено вне его. Любая задержка реакции на действия пользователя представляет собой проблему. Даже пауза в четверть секунды может нарушить его концентра цию и привести к существенному увеличению времени выполнения всего задания. Медленное реагирование Программа должна немедленно отображать вводимые пользователем данные. Если пользователь замечает паузу между нажатием клавиши и появлением символа на экране, значит, программа реагирует слишком медленно, а это повышает вероятность ошибки пользователя. Быстрая ре акция важна для любых событий — перемещения мыши, светового пера, голосового ввода. Как повысить производительность работы пользователя Даже программу с мгновенной реакцией нельзя назвать производитель ной, если она замедляет работу пользователя. Вот примеры "узких мест": • все, что повышает вероятность ошибок пользователя; • громоздкая схема исправления ошибок, когда программа, например, заставляет пользователя повторно вводить большое количество ин формации; • все, что ставит пользователя в тупик, заставляя его обращаться к руководству или справочной системе; • неоправданное увеличение количества действий, необходимых для достижения определенного результата: отсутствие сокращений, раз биение задач на мелкие подзадачи, требование подтверждения не значительных команд и т.п. Конкретные ошибки перечисленных типов описаны в других разделах данного приложения. Одним из эффективных методов давления на руко водство в целях повышения производительности программы является про- Приложение: Распространенные программные ошибки 4 8 3 ведение сравнительных испытаний, показывающих преимущество уже имеющихся на рынке аналогичных программ. Время ответа Хорошая программа не должна заставлять пользователя ждать. Она мгновенно распознает команды пользователя и назначает им наивысший приоритет. Например, введите несколько строк текста, пока текстовый процессор переформатирует экран. Он должен немедленно прекратить форматирование и отобразить введенный текст. Программа, занятая другими задачами, не распознает ввод Программа, ориентированная на ввод данных, должна распознавать ввод даже тогда, когда она занята другой работой. Она запоминает вводи мые пользователем данные и отображает их чуть позднее. Отсутствие предупреждений о длительных операциях Если на выполнение очередного действия программе потребуется более нескольких секунд, она должна сообщить об этом пользователю и указать предполагаемую длительность процесса, чтобы он мог спланировать соб ственное время. Кроме того, необходимо предоставить пользователю воз можность отмены команды. Отсутствие индикаторов хода работы Выполнение очень длительных заданий желательно сопровождать инди каторами, указывающими, какая часть работы уже выполнена и какая еще осталась. Проблемы тайм-аутов Некоторые программы ограничивают время, выделенное пользователю для ввода данных. За исключением аркадных игр, едва ли найдутся случаи, в которых такое ограничение действительно необходимо. Тайм-ауты могут быть не только слишком короткими, но и слишком длинными. Например, перед выполнением какого-нибудь длительного за дания в программе может быть предусмотрена пауза, в течение которой пользователь может это задание отменить. Если пауза слишком длительна, это тормозит работу. Кроме того, один и тот же тайм-аут одним людям, ждущим его окон чания, может показаться длинным, а другим, вводящим данные, слишком коротким. 4 8 4 Часть III: Управление проектами и группами Надоедливая программа Бип! Вы уверены? Бип! Ваш диск заполнен на 85%. Пожалуйста, поскорее его освободите. Бип! Вы действительно уверены? Бип! За последний час вы ни разу не сохраняли текст. Бип! Ваш диск заполнен на 86%. Пожалуйста, поскорее его освободите. Бип! Пожалуйста, введите еще раз свой пароль. Бип! Вы ничего не вводите вот уже десять минут. Пожалуйста, выйди те из системы. Бип! Ваш диск заполнен на 86%. Пожалуйста, поскорее его освободите. Бип! Вы не ответили на 14 сообщений. Напоминания, предупреждения и вопросы, разумеется, полезны, но во всем следует соблюдать меру. Вам действительно нужна справочная информация и графика при скорости обмена 300 бод? При низкоскоростном соединении с сервером программ и данных, когда компьютер пользователя работает в режиме терминала, программа должна быть написана так, чтобы через соединение передавался минимум информации. Справочная система, длинные меню, красивые картинки — все эти преимущества современного интерфейса могут просто выводить пользователя из себя, когда они медленно-медленно прорисовываются на экране. Нередко в подобных ситуациях наилучшим решением является интерфейс командной строки. Подобным же образом испытывать терпение пользователя может и красивая, но медленная печать. Для сложных, но не необходимых графи ческих изображений стоит предусматривать быстро печатаемые черновые варианты. Вывод Выходная информация программы должна быть полной и понятной читающему ее человеку или программе. Она должна включать все необхо димое пользователю и быть представлена в желаемом им формате. Выход ная информация должна направляться на любое указанное пользователем устройство. Невозможно получить определенные данные У пользователя должна быть возможность получить (увидеть и распеча тать) любые данные, которые он ввел, включая и техническую информа- Приложение: Распространенные программные ошибки 4 8 5 цию, например, формулы, введенные в ячейки электронной таблицы, или определения полей базы данных. Невозможно перенаправить вывод У пользователя должна быть возможность направить вывод программы на указанное им устройство. Например, очень часто возникает необходи мость сохранить предназначенные для печати данные в дисковом файле. Затем их можно отредактировать или напечатать в другой программе, бо лее быстрой или удобной. Программа не должна препятствовать пользователю направлять данные на неожиданные устройства — плоттеры, ленточные накопители и т.п. Формат, неподходящий для дальнейшей обработки Если программа должна сохранять данные в формате, понятном другой программе, необходимо проверить их совместимость. Это означает, что следует раздобыть копию второй программы, сохранить данные в первой и прочитать во второй. Об этом тесте часто забывают, особенно если про граммы разработаны разными компаниями. Слишком мало или слишком много выходной информации У пользователя должна быть возможность модифицировать отчет, что бы распечатать только необходимую информацию. Зачем ему просматри вать ворох распечаток в поиске двух-трех строчек? Избыток информации является почти таким же серьезным недостатком, как и ее отсутствие. Невозможность форматирования выходной информации Полученные данные пользователь может захотеть представить в удобном ему виде: что-то выделить, подчеркнуть, что-то отделить, перегруппировать определенные данные. Для этого программа может сохранять данные в формате какого-нибудь распространенного текстового процессора. Абсурдная степень точности Глупо представлять результат операции 4,2 + 3,9 в виде 8,1000000. Выходные данные, как правило, должны округляться до степени точности входных или же просто соответствовать заранее определенному формату. 4 8 6 Часть III: Управление проектами и группами Невозможность форматирования заголовков таблиц и подписей рисунков Следует предоставлять пользователю возможность изменять положение, шрифт и даже текст подписей и заголовков таблиц, диаграмм, графиков и т.п. Невозможность изменения масштаба графиков У пользователя должна быть возможность изменить заданный по умол чанию масштаб формируемых программой графиков и диаграмм. Обработка ошибок Ошибки в подсистемах обработки ошибок чрезвычайно распростране ны. Программа может не распознавать все возможные ошибки, не предот вращать те из них, которые легко могут быть предотвращены, или плохо справляться с их последствиями. Предотвращение ошибок В книге Йордана (Yourdon, 1975) целая глава посвящена технике пре дотвращения ошибок. Программы должны быть защищены от недопусти мого ввода и неправильной эксплуатации. Простейшим способом защиты является проверка вводимых данных. Неверное начальное состояние Если определенная область памяти должна содержать нули, программе не мешает это проверить, прежде чем ее использовать. Неадекватная проверка пользовательского ввода Недостаточно просто сказать человеку, что он не должен вводить чи сел, состоящих больше чем из трех цифр. Программа должна проверить, действительно ли введенные данные соответствуют этому условию. Если пользователь может что-то ввести, программа должна адекватно на это среагировать. Неадекватная защита от испорченных данных Где гарантия, что хранящиеся на диске данные в порядке? Возможно, кто-то редактировал файл, а может быть, он был испорчен в результате аппаратного сбоя. Даже если программист проверил файл после его запи си на диск, необходимо удостовериться, что к моменту чтения файл остался в том же состоянии. Приложение: Распространенные программные ошибки 4 8 7 Не выполнена проверка переданных параметров Подпрограмма не должна предполагать, что ее всегда вызывают пра вильно. Она должна сама удостовериться в адекватности переданных дан ных. Недостаточная защита от ошибок операционной системы В операционной системе имеются ошибки. Некоторые из них могут проявляться при обращении приложений к определенным интерфейсным функциям. Если, например, программист знает, что при попытке печати данных сразу после их сохранения на диске операционная система сбоит, он должен гарантировать, что программа ни при каких обстоятельствах не будет этого делать. Не выполняется проверка версии Если исполняемый код хранится в нескольких файлах, кто-то может попытаться использовать новую версию одних файлов со старой версией других. Модернизируя программное обеспечение, пользователи часто до пускают подобные ошибки. Поэтому программа должна проверять версии всех своих файлов и сообщать пользователю о несоответствиях. Недостаточная защита от неправильного использования Люди могут намеренно вводить в программу неверные данные, чтобы посмотреть, как она на это отреагирует. Мотиваций всех и каждого не предусмотришь. Утверждение, что ни один разумный человек не станет использовать программу подобным образом не защищает ее от людей не разумных. Выявление ошибок Как правило, у программ достаточно информации для определения правильности данных или их обработки. В этом разделе описаны некото рые часто игнорируемые программистами возможности выявления ошибок. Переполнение Переполнение — это ситуация, когда результаты вычислений слишком велики, чтобы программа могла их обработать. Часто так получается при сложении или умножении очень больших чисел, при делении на нуль или делении очень маленьких чисел. Программа обязательно должна проверять |