Автор работы: Пользователь скрыл имя, 26 Ноября 2013 в 22:35, статья
Идеальных программ не существует. Все люди грешны и все программисты делают ошибки в своих проектах. Даже идеально протестированная программа может дать сбой. Почему? Дело в том, что наши программы живут в окружении других программ, написанных другими программистами. Причем сейчас не идет речь о совместимости с ОС и аппаратными ресурсами. Вам сильно повезло, если вы знаете, с какими программами (интерфейсами) предстоит взаимодействовать вашему творению. Но ошибки могут быть и здесь.
Роман Новиков.
Обзор систем отслеживания ошибок
Самые
большие ошибки, подобно толстым
канатам, часто состоят из множества
мелких. Возьмите канат и разделите
его на нити, из которых он состоит,
и вы сможете легко порвать
их одну за другой. Вы подумаете: "Вот и все, что было!".
Но скрутите эти нити вместе, и вы получите
нечто потрясающее.
Виктор Гюго. Отверженные. Ч. 2, кн. 5, гл.
10
Введение
Идеальных программ не существует. Все люди грешны и все программисты делают ошибки в своих проектах. Даже идеально протестированная программа может дать сбой. Почему? Дело в том, что наши программы живут в окружении других программ, написанных другими программистами. Причем сейчас не идет речь о совместимости с ОС и аппаратными ресурсами. Вам сильно повезло, если вы знаете, с какими программами (интерфейсами) предстоит взаимодействовать вашему творению. Но ошибки могут быть и здесь.
Например, я сталкивался с ситуацией, когда моя программа, которую я много раз тестировал и прогонял по всевозможным юнит тестам, при переезде на другой сервер начинала работать совершенно неправильно. В чем может быть проблема? Во-первых, на сервере стояла более новая ОС, но для моей программы это было не страшно. Выяснилось, что ошибка происходит на несколько звеньев раньше в процессе вычислений. И скрипт, написанный другим программистом под более старую версию ОС, выдавал некорректные данные для моей программы. Это пример показывает, что ошибки в программе могут вызываться «внешним миром», в котором она живет. Однако мне повезло, ведь я прекрасно знал, что может влиять на работу программы. Ошибку я нашел достаточно быстро, т.к. мне хватило лишь проверки входных данных, чтобы узнать место в системе, где появился сбой.
Но бывает иначе. Ошибка, похожа на мину замедленного действия, которая ждет своего часа и находится в самых неожиданных местах. Достаточно вспомнить пример с выходом Service pack 3 для Windows XP. У небольшой группы пользователей это обновление ОС вызывало постоянную перезагрузку компьютера. Выяснилось, что все пострадавшие были владельцами компьютеров Hewlett-Packard с процессором AMD. Бывший менеджер по политике безопасности Microsoft Джеспер Йоханссон в своем блоге высказал возможные причины ошибки. Он предположил, что HP использовала при первоначальной инсталляции один и тот же образ как для компьютеров на базе Intel, так и на базе AMD. В результате получилось, что в обоих случаях за управление питанием компьютера отвечает файл intelppm.sys, однако Microsoft создавала этот файл для работы на процессорах Intel, для процессоров AMD служит файл amdk8.sys. Это показывает, какими изощренными могут быть сбои, когда программный продукт предназначен для огромного числа пользователей. И ошибка не всегда может заключаться в программе.
Учитывая, что многие фирмы, производящие ПО, стараются уменьшить цикл производства в ущерб тестированию, программистам приходится постоянно взаимодействовать с Support службой. Работники саппорта принимают от пользователей заявления об ошибках, регистрируют их и дальше с ними разбираются разработчики. Если же компания осознает, что необходимо проводить тщательное тестирование продукта, перед его запуском, то программистам приходится опять-таки принимать отчеты об ошибках, но теперь уже от тестировщиков ПО.
Задача регистрации и
Что это такое?
Система отслеживания ошибок (англ. bug tracking system) — прикладная программа, разработанная с целью помочь разработчикам программного обеспечения (программистам, тестировщикам и др.) учитывать и контролировать ошибки (баги), найденные в программах, а также следить за процессом устранения этих ошибок. Так описаны в Wikipedia bug tracking system (далее BTS).
BTS помогает программисту следить за ошибками. Когда вы замечаете ошибку, необходимо собрать о ней максимальное количество доступной информации. Необходимо быть предельно точным в наблюдениях. Особенно это касается отчетов об ошибках, приходящих от пользователей.
Можно привести пример Энди Ханта, автора книги «Программист-прагматик»: он разрабатывал графический редактор, и в ходе разработки появилась специфическая ошибка, которую обнаружил тестировщик. Программа «падала» когда тестировщик проводил кистью прямую линию. Программист утверждал, что программа работает замечательно и у него ошибка не проявляется. Несколько дней между тестером и программистом продолжался спор. Наконец, все собрались в одной комнате, тестировщик провел линию от ВЕРХНЕГО ПРАВОГО угла до НИЖНЕГО ЛЕВОГО. Программа зависла. Программист охнул и признался, что он проводил черту только из НИЖНЕГО ЛЕВОГО к ВЕРХНЕМУ ПРАВОМУ углу. Этот пример иллюстрирует, насколько важны подробные отчеты и сбор полной информации об ошибках.
Как правило, BTS позволяет хранить информацию об ошибке в следующем виде:
Это минимальный набор требований к БД BTS, на самом же деле многие системы багтрэкинга позволяют вести намного более подробный учет ошибок. В чем то, они напоминают системы управления проектами. А многие из них интегрированы с такими системами.
Необходимо заметить, что системы отслеживания ошибок могут быть полезны не только для программистов. Отчеты о «работе над ошибками» могут использовать менеджеры проекта. Фактически такие отчеты позволяют судить о производительности программистов, при работе по улучшению работы ПО. При обработке отчетов необходимо учитывать приоритет ошибок и сложность их устранения. Менеджер должен понимать, что некоторые ошибки могут быть трудно устранимы, в силу архитектуры системы. Бессмысленно требовать скорейшего устранения ошибок в системных модулях: непродуманные действия по устранению одной ошибки могут породить сотни других ошибок.
Обзор
В данном обзоре я рассмотрю несколько наиболее распространенных систем отслеживания ошибок:
BUGS - the Bug Genie
www.thebuggenie.com
Это свободная система отслеживания ошибок, распространяемая по Mozilla Public License 1.1. Для управления предоставляется веб-интерфейс. Система кроссплатформенная, написана на PHP. Проект достаточно успешно развивается, последняя версия BUGS вышла в марте 2008.
BUGS предоставляет базовый набор инструментов для регистрации ошибок, расстановки приоритетов, формировании задач для разработчиков. Эта система позволяет оповещать всех разработчиков, которые могут быть связаны с ошибкой. Система отслеживает ошибки в зависимости от версии и конфигурации ПО. Все ошибки сохраняются в единую БД, представляющую собой базу знаний об ошибках в проекте. Далее по этой БД можно формировать подробные отчеты. BUGS поддерживает возможность устанавливать blocker bugs - ошибки, которые могут блокировать выпуск релиза.
В последних версиях разработчики BUGS улучшили формат отчетов. Что особенно приятно: BUGS обладает user-friendly интерфейсом. Для работы с этой BTS вам не потребуется копаться в горах мануалов.
Недостаток BUGS - отсутствие распределенной многопользовательской работы. Невозможно работать удаленно с несколькими серверами или несколькими БД. В силу этого можно рекомендовать, BUGS для небольших команд разработчиков. Благо BUGS это open source продукт и требует для своей работы стандартный набор: Apache, PHP, MySQL.
Bugzilla
www.bugzilla.org
Bugzilla – это одна из наиболее популярных систем багтрэкинга. В 1998 году Netscape представила первый релиз этой системы. Bugzilla является свободным ПО и распространяется по Mozilla Public License. Собственно, разработку этой системы сейчас ведет Mozilla Foundation.
Bugzilla пользуются более 800 (!) компаний по всему миру. Среди них встречаются такие гиганты как NASA, Id Software, Red Hat, Novell и другие. Почему же эта система пользуется такой популярностью?
В Bugzilla нет той огромной функциональности, присущей Enterprise BTS. Однако эта система включает достаточно большой набор функций, которые необходимы для контроля ошибок в небольшом и среднем проекте.
Разработчик Bugzilla Max Kanat-Alexander в своем блоге указал,
что одна из системных проблем Bugzilla –
это выбор Perl в качестве языка программирования.
Макс указывает, что принцип Perl TMTOWTDI(There
More Than One Way To Do It) не всегда помогает в разработке,
т.к. позволяет быстро реализовывать некоторые
вещи, представляющие не всегда лучший
выход из проблемы. Также Макс говорит
о проблеме «читабельности» кода на Perl,
которая усложняет поддержку перловых
программ. Кроме того, программы, написанные
на Perl, далеко не лучшим образом работают
с памятью. Подробнее со всеми замечаниями
можно ознакомиться здесь: http://avatraxiom.livejournal.
Возвращаясь к обзору Bugzilla, отмечу, что, несмотря на все проблемы, Bugzilla работает достаточно устойчиво и предоставляет разработчикам неплохой базовый функционал:
Система предоставляет отличную базу знаний для ошибок, по которой можно весьма легко формировать отчеты. Bugzilla имеет стандартный веб-интерфейс.
С помощью Bugzilla достаточно просто управлять пользователями, обмениваться сообщениями с другими разработчиками внутри системы. Очень понравилось, что Bugzilla умеет визуализировать информацию: менеджерам очень понравятся всевозможные таблицы, графики и диаграммы, вид которых можно настраивать.
Bugzilla можно интегрировать с другими программами, для управления проектами:
К недостаткам Bugzilla можно отнести сложность установки, зависимость от модулей Perl, сложность администрирования и несколько неприглядный интерфейс. Bugzilla для работы требует Apache, Perl и базу MySQL.
Систему Bugzilla можно рекомендовать достаточно широкому кругу пользователей, которых устроит стандартный набор функций. Этот проект активно развивается (последняя версия вышла в мае 2008), так что скоро можно будет ожидать добавления новых функций, которые сделают систему удобнее для использования. Bugzilla проверена временем, а это важный аргумент в пользу этой системы.
JIRA
www.atlassian.com/software/jir
Систему отслеживания ошибок JIRA называют «bug tracking системой номер один». Попробуем разобраться, почему эта система от компании Atlassian заслужила такого звания.
Ответ будет простым: JIRA обладает на сегодняшний день наиболее широкой функциональностью среди систем отслеживания ошибок. В целом JIRA повторяет архитектуру Bugzilla. Процесс баг трэкинга следующий:
Создаваясь, сообщение обязательно имеет Assignie – ответственного, адресата (если такового не указать система в зависимости от настроек конкретного проекта либо автоматом «направит» сообщение, то есть адресует его, лидеру проекта (указывается при создании проекта), либо укажет необходимость выбрать адресата, если проект настроен так, чтобы сообщения не могли быть безадресными. «Получатель» может перенаправить его далее или вернуть писавшему ("петля разработчик-тестировщик").
Каждому Issue можно поставить приоритет важности, адресовать на себя, добавить комментарий. При чём как общий комментарий, видимый всеми, так и комментарий направленный одному человеку – очень приятная фишка, когда ведущий разработчик переадресует сообщение своему коллеге, указывая какую-то техническую подробность, которая нужна только ему.
Сообщения можно установить статус IN PROGRESS – в начале работы над ним, и соответственно указав, когда работы над ним закончены. Особо хочется указать на работу с версиями и статусами с точки зрения просмотра списков сообщений. Система поддерживает возможность создания персонифицированных сообщений.
Аккаунты пользователей управляются как администратором, так и самим пользователем. Пользователи могут быть объединены в группы – то есть совершенно привычная структура. При чём как отдельному пользователю так и группе можно запретить/разрешить одно вполне конкретное действие (к примеру такая экзотика, как запрет на удаление аттачей и создание комментариев для менеджеров из других проектов).
JIRA идеально подходит для крупных проектов, с большим штатом тестировщиков. Используя JIRA можно работать под различными ОС, создавать и вести «схемы безопасности» для каждого из проектов. То есть можем создать группу пользователей на конкретный проект, раздать на этот же проект права, или использовать стандартную схему безопасности на этот проект. JIRA можно успешно интегрировать с subversion.
Эта BTS обладает одним существенным недостатком: она платная. Стоимость установки JIRA на один сервер начинается от $1200. Однако, это не такая высокая цена для компании, которая способна оплатить штат тестировщиков. JIRA можно смело рекомендовать разработчикам больших распределенных проектов.