Файл: Отладка и тестирование программ: основные подходы и ограничения (Теоретические аспекты отладки и тестирования ПО).pdf
Добавлен: 28.03.2023
Просмотров: 109
Скачиваний: 2
СОДЕРЖАНИЕ
1. Теория тестирования программного обеспечения
1.1 Критерии качества программного обеспечения
1.2 Методики проведения тестирования программного обеспечения
1.2. Теория отладки программного обеспечения
1.2.1 Виды ошибок в программном обеспечении
1.2.2 Методики отладки программного обеспечения
2. Практические аспекты отладки и тестирования ПО
2.1. Практика тестирования программного обеспечения
2.1.1 Отчеты об ошибках и системы их обработки
2.1.2 Основные инструменты тестировщика
2.1.3 Практические методы тестирования ПО
2.2. Практика отладки программного обеспечения
2.2.1 Инструменты отладки программного обеспечения
Организация процесса передачи и устранения проблем может быть автоматизирована. Первый очевидный способ – это хранение всех отчетов в электронном виде. Также в хорошо организованной структуре должна быть система взаимодействия между сотрудниками, которые принимают участие в процессе поиска и устранения ошибок в программном обеспечении.
Раньше многие компании применяли различные примитивные методы обработки ошибок и их исправления – отчеты о проблемах передавались на бумажных носителях, а стадии их выполнения регистрировались в специальных журналах, но такие методы уже практически не используются в связи с быстрым ростом компьютеризации и появлением множества средств по автоматизации этого процесса. (Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений / Сэм Канер, Джек Фолк, Енг Кек Нгуен 2001. – 131-132с)
Чаще всего для составления описания ошибки и его дальнейшей передачи на практике используются специальные системы – багтрекеры. Багтрекер – это система для приема, хранения, отслеживания состояния отчетов об ошибках, а по окончанию, закрытия заявки на устранение ошибки.
Одним из популярных багтрекеров на сегодняшний день является Bugzilla (URL: https://www.bugzilla.org/).
«Bugzilla - приложение для отслеживания ошибок. Приложения подобного рода позволяют разработчику или группам разработчиков отслеживать ошибки в приложениях и запросы на дополнение приложений новой функциональностью. Написанное на Perl, Bugzilla de-facto является стандартом для систем отслеживания ошибок в приложениях, служащая эталоном, с которой сравниваются другие системы со схожей функциональностью. Фактически, Bugzilla используется во многих корпорациях для разработки собственного программного обеспечения для корпоративных нужд.» пишут о Bugzilla ее разработчики. (Russian Mozilla Team URL: http://mozilla-russia.org/products/bugzilla/ )
Bugzilla используют многие крупные проекты, вот список самых известных из них:
Бесплатные проекты:
Веб-браузер Mozilla: https://bugzilla.mozilla.org/
Создатели ядра ОС Linux: http://bugzilla.kernel.org/
Рабочее окружение GNOME: http://bugzilla.gnome.org/
Рабочее окружение KDE: http://bugs.kde.org/
Веб-сервер Apache Project: https://bz.apache.org/bugzilla/
Офисный пакет LibreOffice: https://bugs.documentfoundation.org/
Офисный пакет Open Office: https://bz.apache.org/ooo/
Среда разработки Eclipse: http://bugs.eclipse.org/bugs/
Создатели следующих дистрибутивов ОС Linux:
Red Hat: https://bugzilla.redhat.com/
Gentoo: http://bugs.gentoo.org/
Novell: https://bugzilla.novell.com/
(Сайт Bugzilla URL: https://www.bugzilla.org/installation-list/ ).
Список отчетов об ошибках в Bugzilla
На рисунке выше вы можете видеть, как выглядит список обнаруженных ошибок в системе отслеживания ошибок Bugzilla. Каждой ошибке присвоен номер, также видно кто ее обнаружил, какой операционной системой он при этом пользовался и видно кратное описание самой ошибки. Например, под номером 457850 зафиксирована ошибка, при которой веб-браузер Firefox зависает при печати документа.
Что ж, из вышесказанного ясно, что тестер должен находить и описывать ошибки, а получившиеся отчеты передавать дальше для дальнейшей их обработки и устранения причин возникновения. Для решения этой задачи используются специальные системы отслеживания ошибок.
2.1.2 Основные инструменты тестировщика
Теперь поговорим о том, какие же есть инструменты, позволяющие производить тестирование программного обеспечения на практике и что они из себя представляют.
- Персональный компьютер, терминал или рабочая станция. В современном мире вообще что-либо редко делается без помощи компьютера, а у ж тем более разработка программного обеспечения. Для тестирования обязательно запаситесь одним таким, а лучше двумя, это резко повысит эффективность за счет того, что на одном будет запускаться тестируемая программа, а на втором система отслеживания ошибок, в которую вы будете прямо во время тестирования вносить информацию.
- Текстовый редактор. Служит для вводы и редактирования руководств, планов тестирования, отчетов, записей, писем. Пользоваться текстовым редактором во время тестирования вы будете очень много, так что лучше позаботьтесь о выборе самого оптимального и удобного для вас варианта.
- Процессор планов. Это программа, предназначенная для составления и редактирования информации в иерархическом структурированном виде с возможность сортировки, поиска и фильтрации. Удобна при составлении плана тестирования, списка функций, подробных отчетов и списков задач. Рекомендуется использовать отдельный специализированный процессор планов, а не те ограниченные версии, встроенные в текстовые редакторы.
- Редактор электронных таблиц. Поможет вам составить необходимые таблицы для отчетов и прочей документации.
- Утилиты для сравнения файлов. Выбор таких утилит достаточно богат. Их функция – сравнивать два файла и выводить список различий между ними, в случае обнаружения таковых. Самые лучшие образцы предлагают перечень действий, которые необходимо выполнить для получения из одного файла другого. Как правило такие программы поставляются вместе с операционными системами, например, в DOS это команда fc, а в Linux команда diff. Но функционал встроенных в операционную систему программ для сравнения файлов довольно скуден и если вы чувствуете его нехватку, то рекомендуется использовать программное обеспечение сторонних разработчиков. Также, стоит обратить внимание, что утилиты сравнения файлов бывают предназначены для сравнения разных типов файлов: двоичных файлов, изображений, текстовых файлов, архивов и других. От их назначения зависит формат вывода отчета после сравнения файлов, это нужно учитывать и использовать под каждую конкретную задачу утилиту, предназначенную для нее.
- Просмотровики файлов. Это программы, предназначенные для просмотра информации внутри файлов самых разных форматов.
- Конверторы файлов. Конверторы файлов предназначены для преобразования одного типа файлов в другой. Могут работать с различными видами файлов, будь то музыка, тексты, изображения, архивы и так далее. Например, можно с помощью такой программы конвертировать изображение из формата BMP в формат TIFF.
- Утилиты для создания скриншотов. Это программы, предназначенные для создания копий экрана и сохранения их в файл на жесткий диск. Возможно на практике понадобится несколько таких программ, так как некоторые из них несовместимы с различными видами видеопотока. Эти средства очень удобны в работе, порой намного проще показать программисту снимок ошибки, нежели пытаться описать ее словами.
- Утилиты поиска текста. Позволяют найти в исходном коде программы нужные строки. Простейшие варианты таких утилит встроены в текстовые редакторы.
10) Устройства и утилиты для видео-захвата. Данные средства помогут вам запечатлеть ошибку на видео. Видеозапись является хорошим способом рассказать программисту о увиденной вами ошибке и ваших действиях перед ее появлением.
11) Диагностическое программное обеспечение. Это специальные утилиты, предназначенные для анализа аппаратного и программного состояния компьютера. Они помогают осуществлять диагностику компьютера и лучше понимать процессы, происходящие в нем и причины возникновения ошибок в разрабатываемом программном обеспечении. Такая программа, к примеру, может сделать дамп памяти в момент ошибки, который можно отправить программисту для последующего его анализа. Таких утилит довольного много и можно выбрать именно ту, которая подходит для решения конкретной задачи по сбору данных.
12) Таймер. Таймер применяется в тех ситуациях, когда нужно получать точные данные о таймаутах, времени задержки на действия пользователя, времени выполнения долгих операций, таких как обработка больших объемов данных. Рекомендуется использовать программные таймеры, нежели физические варианты, имеющие явные недостатки и не дающие возможности измерять очень малые интервалы времени.
13) Система отслеживания проблем. Да, это тоже считается инструментом для тестировщика, системы отслеживания проблем обсуждались в разделе «2.1.1 Отчеты об ошибках и системы их обработки».
14) Программист. В случае, если тестировщик впал в ступор, зациклился на определенной проблеме или не может ее воспроизвести, рекомендуется обратиться к программисту. Консультация программиста поможет лучше понять процессы, происходящие внутри программы и отталкиваться от этого при проведении тестирования. Также можно попросить программиста написать специальный диагностический код, помогающий в тестировании. Программист может помочь сэкономить тестировщику от часа до нескольких дней работы.
(Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений / Сэм Канер, Джек Фолк, Енг Кек Нгуен 2001. – 265-266с)
Отталкиваясь от всего вышесказанного можно сделать вывод, что в своей работе тестировщики программного обеспечения совсем не обделены инструментарием. Также, важно понимать, что выбор правильного инструмента для проведения тестов это очень важная составляющая и от нее зависит качество, скорость и эффективность проводимых тестов.
2.1.3 Практические методы тестирования ПО
На практике, при тестировании программного обеспечения, необходимо понимать, что никакое разумное количество тестов не даст точной уверенности в том, что программа не имеет ошибок. Вызвано это тем, что тестирующий не в силах перебрать все возможные комбинации входных данных даже для маленькой программы. Например, для тестирования перебора всех входных данных для трех полей Фамилия (20 символов, 26 вариантов каждого символа), Адрес (20 символов, 26 вариантов каждого символа) и Номер телефона (10 символов, 10 вариантов каждой цифры) понадобится 10 в 66й степени тестов, что при переборе в триллион тестов в секунду с момента окончания Всемирного потопа, на данный было бы закончено на 1%. Поэтому стоит сконцентрировать свое внимание на самых эффективных тестах и самых слабых местах программы, куда скорее всего могли попасть ошибки. Для этого разработано и используются на практике несколько основных тестовых методик, каждая из которых применима в той или иной ситуации.
Неполное тестирование подразумевает, что вам необходимо использовать тесты, позволяющие найти разные ошибки, а не приводящие к одним и тем же, тем самым повышая вероятность найти ошибку.
Структурированное базисное тестирование. Данная методика заключается в том, что тестирующий тестирует каждый оператор хотя бы один раз. Если оператор является меняющим ход выполнения программы, например, if или while, необходимо учитывать сложность выражения внутри его циклов и условий, чтобы оператор был протестирован полностью. При применении такого метода необходимо покрыть программу минимально необходимым количеством тестов, каждый из которых проверяет каждый путь.
Минимальное число тестов, нужных для базисного тестирования, найти очень просто:
- Стоит начать с единицы для последовательного пути выполнения метода
- Необходимо прибавлять единицу для каждого из операторов if, while, repeat, for, and и or или их аналогов;
3) Необходимо прибавлять единицу для каждого блока case; если отсутствует блок по умолчанию, прибавляем еще единицу.
Таким образом, мы получаем количество необходимых тестов.
Тестирование, основанное на потоках данных. Главная идея этого метода в том, что подразумевается, что использование данных не менее подвержено ошибкам, нежели поток управления.
Данные могут находиться в трех состояниях: определение, использование, уничтожение. Также, данные характеризуются как входные и выходные. В данной методике тестировщик должен уделять максимальное внимание на правильность перехода данных между этими состояниями и ошибки, вызываемые неправильными переходами данных из одного состояния в другое, во время инициализации и уничтожения.
Разделение на классы эквивалентности подразумевает, что если два теста дают на выходе одни и те же ошибки, то необходимо использовать лишь один из них. Данный метод не стоит применять после проверки программы базисным тестированием и тестированием, основанным на потоках данных. Также данный метод эффективен, когда вы не работаете с исходным кодом программы, а лишь осуществляете тестирование внешней логики.
Метод угадывания заключается в том, что тестирующий, опираясь на свою интуицию и накопленный опыт, создает тесты на основе обдуманных предположений об источниках ошибок в программе.
В заключение хочу сказать, что создавая тесты для программ, желательно придерживаться следующего правила: любой тест должен быть таким, чтобы его можно было проверить вручную и отбросить особенности работы ЭВМ, влияющие на качество выполнения теста в определенных условиях. (Совершенный код / Стив Макконнелл 2010. – 496-507 с)
2.2. Практика отладки программного обеспечения
В данной главе мы рассмотрим инструменты и методики отладки приложений.
2.2.1 Инструменты отладки программного обеспечения
Основным инструментом во время отладочного процесса является отладчик. Отладчик - это программа, позволяющая искать ошибки в других программах. К отладчикам, например, относится GNU Debugger, который позволяет отлаживать программы, написанные на языках программирования Ada, C, C++, Objective-C, Pascal и многих других языках. (URL: http://www.gnu.org/software/gdb/)
Но также, очень часто отладчики встроены непосредственно в среду разработки, например, в среды разработки Microsoft Visual Studio, Borland C++, Dev-C++, Android Studio, Atmel Studio и другие. Такой подход позволяет разработчикам не искать дополнительного отладочного программного обеспечения, а пользоваться уже встроенным.
Windows-отладчики делятся на два больших вида – это отладчики уровня пользователя и отладчики уровня ядра. Первые имеют графический интерфейс и позволяют отлаживать приложения на пользовательском уровне (например, в Visual Studio), а вторые же на уровне ядра операционной системы. Второй вид, в основном, примеряется разработчиками драйверов.
(Отладка Windows приложений / Джон Роббинс 2009. – 102-103 с)