Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Отладка и тестирование программ: основные подходы и ограничения (Применение отладки при разработке программного обеспечения)

Содержание:

ВВЕДЕНИЕ

Актуальность исследования. На сегодняшний день с развитием разработки программного обеспечения, появилась необходимость в его глубоком анализе, отладке и тестировании, которое является обязательной часть при написании любого программного продукта. От качества используемого отладочного инструментария и грамотного выбора методов отладки зависит качество и сроки получения программного продукта. Неисправленная вовремя ошибка может свести на нет все усилия по разработке программного продукта. Также и этап тестирования является немаловажным шагом в жизненном цикле программного обеспечения. Тестирование позволяет уменьшить процент возвратов на этап разработки от этапа внедрения. Чем более объемным и массово используемым является программный продукт, тем больше необходимость наличия этапа тестирования.

Объектом курсового исследования являются такие понятия как отладка и тестирование программ.

Предметом выступают основные виды и подходы к понятию отладка и тестирование программного обеспечения.

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

Данная цель будет достигнута решением ряда задач:

1. Изучить понятие отладки;

2. Рассмотреть классификацию видов отладки;

3. Дать обзор задач, уровней и видов тестирования и отладки программного обеспечения;

4. Проанализировать этапы тестирования программного обеспечения;

5. Описать методы «белого и черного ящиков»;

6. Выяснить отличия и взаимосвязь ручного и автоматизированного тестирования ПО.

Работа состоит из введения, трех глав, заключения и списка использованных источников.

1. Применение отладки при разработке программного обеспечения

1.1. Понятие отладки

Процесс разработки программного обеспечения (ПО) является сложным и многоэтапным. Методы разработки ПО с каждым годом совершенствуются и усложняются. Часто этапы разработки похожи друг на друга и выполняются одними и теми же людьми, поэтому их границы размыты и существует несколько точек зрения на них. Дадим несколько определений и поясним их[1].

Отладка — этап разработки программного обеспечения, на котором обнаруживают, локализуют и устраняют ошибки.

Тестирование — этап разработки программного обеспечения, на котором обнаруживают факт существования ошибки[2].

Перечисленные этапы часто переплетаются, но все же разделены — отладка не занимается проверкой на существование ошибок, а в процессе тестирования не следует искать их точное месторасположение и причину[3].

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

Классификация методов отладки:

• протоколирование;

• работа в интерактивном отладчике;

• диагностика в процессе исполнения;

• использование графических средств;

• визуальный просмотр кода;

• анализ crash dump.

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

Помимо этого данный способ отладки можно использовать в период эксплуатации программного продукта конечным пользователем. Этот подход прост в реализации и хорошо зарекомендовал себя в системах управления базами данных[4].

Работа в интерактивном отладчике позволяет:

• устанавливать точки остановки в программе;

• просматривать и редактировать значения переменных;

• исполнять программу по шагам.

Этот метод имеет несколько существенных недостатков[5]:

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

• Чрезвычайно высокая сложность низкоуровневой отладки приложения, написанного на языках высокого уровня.

• Реализации интерактивных отладчиков для высокоуровневых языков часто имеют серьезный недостаток: возможна отладка только так называемой «отладочной» сборки приложения, финальная же сборка может сильно отличаться от фактически отлаживаемой.

Несмотря на все недостатки, это довольно надежный и популярный способ отладки.

Диагностика в процессе исполнения — это различные проверки во время исполнения программы, например[6]:

• проверка состояния и целостности стека;

• проверка переполнения буфера;

• слежение за динамической памятью;

• различные проверки внутренней логики программы.

Код таких проверок может как создаваться самим компилятором в специальных режимах сборки программы, так и быть заложенным в код самой программы (различные макроопределения и asssert()). Также существуют специальные отладочные утилиты, следящие за состоянием памяти[7].

Этот метод отладки используется только в паре с другим методом, например работой в интерактивном отладчике, так как он способен только на обнаружение некорректного поведения программы, но не на исправление ошибки. Часто с помощью этого метода удается определить только место, где программа ведет себя некорректно, но не причину этой некорректности. Лучше всего этот метод применяется, когда приложение запущено не на машине разработчика, так как позволяет определить поведение приложения в различных условиях работы. В целом метод является скорее тестирующим, чем отладочным[8].

Использование графических средств. Графические средства не являются самостоятельным методом отладки, они лишь позволяют представить различную информацию более наглядно.

Визуализировать можно многое[9]:

• изменение значения какой-то переменной во времени;

• объем используемой памяти и загрузки процессора (известный пример - Диспетчер задач Microsoft Windows);

• структуру сложного объекта (дерева, графа);

• информацию, относящуюся к бизнес-логике приложения, например разметку изображения в задачах распознавания образов.

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

Визуальный просмотр кода представляет собой просмотр и логический анализ кода программного продукта и поиск проблемных мест. Используется вместе со всеми остальными методами отладки. Рекомендуется использовать его всегда, даже до первой компиляции программы. Позволяет избавиться от многих проблем еще на этапе дизайна и разработки.

До возникновения интерактивных средств разработки визуальный просмотр кода и протоколирование были единственными возможными средствами отладки. Развитие компиляторов с функциями проверки синтаксиса и семантики, а также оптимизации кода значительно снизило ценность этого метода. Тем не менее, он остается весьма эффективным средством поиска, устранения и, главное, предупреждения возможных ошибок и некорректного поведения. Только этот метод дает возможность рассмотреть все сценарии работы приложения и найти потенциально ненадежные места в коде программы[10].

Для визуального просмотра кода необходимо выполнение нескольких условий[11]:

• Хорошая декомпозиция. Только хорошо спроектированный код, достаточно ясный и простой, с функциями небольшого размера поддается визуальному просмотру. Функция длиной в несколько экранов почти не поддается логическому разбору. В случае переусложненного кода этот объем может сократиться до одной строки, например ((void(*)(void))0)().

• Высокая квалификация программиста, знание особенностей компиляции в ассемблерный код, распределения оперативной и стековой памяти.

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

Анализ crash dump появился как следствие изобретения механизма обработки исключений. В случае генерации программным продуктом специального исключения, сигнализирующего о неисправимой ошибке, происходит запись всего dump-a памяти приложения (содержимое регистров, состояние стека и др.) в специальный файл для последующего анализа. Используется в сочетании с протоколированием и другими методами отладки[12].

Каждый из описанных выше методов имеет свою область применения, некоторые методы нерационально или невозможно применять там, где успешно используются другие. Например, при использовании продукта конечным пользователем невозможно применить интерактивный отладчик. Поэтому введем классификацию видов отладки по фактическому месту запуска программного продукта.

1.2. Классификация видов отладки

Под непосредственной отладкой понимается такой процесс отладки, когда отлаживаемое приложение запущено на машине разработчика. Это самый распространенный вид отладки[13].

Под удаленной отладкой понимается такой процесс отладки, когда отлаживаемое приложение запущено на машине пользователя, а отладочный инструмент — на машине разработчика. Удаленная отладка используется[14]:

• при отладке приложения в условиях работы, которые нельзя воспроизвести на компьютере разработчика;

• при отладке ПО для отдельных устройств;

• при отладке кроссплатформенных приложений;

• при отладке распределенных систем.

Очевидно, что нет препятствий к тому, чтобы использовать методы удаленной отладки при непосредственной отладке, но обычно они менее эффективны и связаны с большими временными затратами. Также методы отладки можно сгруппировать по признаку использования дополнительных технических средств[15]:

• не требуют дополнительных средств (визуальный просмотр кода);

• требуют только сравнительно небольших дополнений в исходном коде программного продукта (протоколирование, диагностика в процессе исполнения);

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

Подробнее рассмотрим отладчики, реализованные в виде отдельных программных продуктов. Они могут обладать следующими свойствами и возможностями[16]:

• возможность просмотра текущих значений переменных;

• возможность изменения текущих значений переменных;

• возможность устанавливать (удалять) контрольные точки и условия остановки программы;

• кроссплатформенность;

• рефлексивность (возможность отладить отладчик им же самим);

• возможность удаленной работы;

• поддержка контекстно-зависимого графического вывода.

Если первые две возможности реализует большинство отладчиков, то остальные свойства встречаются у отладчиков гораздо реже.

2. Понятие тестирования программного обеспечения

2.1. Обзор задач, уровней и видов тестирования и отладки программного обеспечения

В настоящее время количество программных продуктов постоянно растет и для того, чтобы продукт был более конкурентоспособным, необходимо чтобы его качество обеспечивало удобство и достаточно высокую бесперебойную скорость работы, так как программное обеспечение является частью человеческой жизни (больницы, банки и т.д.). Тестирование является одним из критериев качества программного продукта, так как позволяет выявить недоработки, создать искусственные условия, при которых программа может работать некорректно или нестабильно[17]. Тестирование программного обеспечения (software testing)- это процесс анализа или эксплуатации программного обеспечения с целью выявления дефектов. Задачами тестирования являются[18]:

1. Создание документации и утверждение плана тестирования, которые включают цели тестирования, возможные допущения, признаки и условия успешного тестирования.

2. Проверка соответствия функциональности и работоспособности программного продукта с техническим заданием.

3. Анализ поведения программного продукта, в случае введения валидных или невалидных входных данных.

4. Обнаружение и устранение ошибок.

5. Проверка целостности программного продукта после возможного устранения ошибок.

6. Оценка готовности, качества и скорости работы разрабатываемого программного продукта.

7. Оценка и последующее снижение рисков.

Программный продукт тестируется на соответствие к определенным критериям и свойствам, которыми он должен обладать, и для определенного свойства программного продукта установлены соответствующие критерии и требования, что позволяет осуществлять оценку на соответствие. Требования к критериям и свойствам программного продукта[19]:

1. Надежность и производительность программного продукта. Данные свойства определяются скоростью работы при заданных входных данных.

2. Безопасность. Предполагает разграничение прав доступа к данным.

3. Функциональность. Предполагает соответствие работы программного продукта с техническим заданием.

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

5. Практичность программного продукта.

6. Отказоустойчивость программного продукта.

Процесс тестирования программного продукта предполагает проверку на соответствие вышеперечисленным показателям качествам, благодаря чему можно представить основную классификацию видов на уровни, виды и типы. Разные виды тестирования могут применяться для каждого из уровней тестирования. Соответственно к каждым видам совместно с уровнями тестирования, применяются типы тестовых испытаний. Ниже приведена классификация на уровни, виды и типы тестирования программного продукта[20].

Уровни тестирования[21]:

1. Модульное тестирование. Тестирование производится в основном разработчиком, который, зная программный код и алгоритм работы, проверяет отдельный модуль (функцию, класс) на наличие ошибок, корректность входных данных и возвращающихся аргументов функции. Модульное тестирование является составляющим процесса отладки программы разработчиком[22].

2. Интеграционное тестирование. Предполагает тестирование совокупности программных модулей на совместные ошибки между отлаженными функциями, правильный обмен данными между модулями. Тестирование производит разработчик, не участвовавший в написании кода к данному программному продукту при этом он проверяет и фиксирует входные и выходные данные для последующего системного тестирования.

3. Системное тестирование. Предполагает тестирование готовой интегрированной системы на ее соответствие техническому заданию, используя только интерфейс программного продукта, доступный пользователю[23].

4. Приемочное тестирование предполагает тестирование готовой программы реальными пользователей с помощью определенных сценариев.

5. Операционное тестирование. Определяет соответствие бизнес - модели и разработанного программного продукта.

Виды тестирования[24]:

1. Инсталляционное тестирование. Предполагает корректную установку программного продукта в соответствии с техническим заданием.

2. Функциональное тестирование. Предполагает проверку работы программного продукта на точное соответствие спецификации.

3. Тестирование производительности. Предполагает определение скорости работы программы, количества потребляемых ресурсов и соответствие требованиям производительности в спецификации.

4. Стрессовое тестирование. Предполагает проверку поведения системы при экстремальных нагрузках.

5. Нагрузочное тестирование. Предполагает проверку поведения системы при прогнозируемых нагрузках[25].

6. Конфигурационное тестирование. Предполагает проверку работы программного продукта на различных платформах.

7. Тестирование удобства использования.

8. Тестирование безопасности. Предполагает определение оценки уязвимости программного продукта к атакам, взломам.

Для проведения тестирования важным моментом является правильный и эффективно выбранный способ тестирования и тщательно продуманный набор правильных и неправильных входных данных, так как провести тесты абсолютно каждого возможного набора входных параметров практически невозможно, в дополнении необходимо данные действия согласовать с заказчиком. Тестирование позволяет убедить заказчика в том, что программный продукт соответствует требованиям и техническому заданию и является надежным. Тем самым, можно перечислить несколько правила тестирования, обеспечивающие качество программного продукта и доверие заказчика[26]:

1. Соблюдение условий заказчика и его критериев качества.

2. Продуманное формирование тестовых входных данных.

3. Поиск оптимального метода тестирования программного продукта в соответствии с критериями качества, которые требуются заказчику.

2.2. Этапы тестирования программного обеспечения

Для любого предприятие основной задачей является высокая производительность и получение готового продукта, либо оказание услуги. В связи с бурным процессом компьютеризации все отрасли переходят на автоматизацию процесса, для сокращения затрат и повышения прибыли. Тем самым основная ответственность перекладывается на компьютеры, а в частности даже на программное обеспечение, именно поэтому программное обеспечение должно быть на высоком уровне[27].

Разработкой программного обеспечения для различных отраслей занимаются не только отечественные, но и зарубежные специалисты. Однако только на разработке ПО деятельность не останавливается ещё необходимо тестирование и внедрение, а также, если необходимо, то обучение персонала.

Один из важнейших этапов - тестирование. Тестирование ПО представляет процедуру проверки работоспособности программы, выявление ошибок в работе программы, выявление конфликтующих программ. Таким образом, этап тестирование направлен[28]:

- на предварительную подготовку организации к внедрению ПО;

- на выявление ошибок и уязвимостей;

- на решение вопросов с конфликтующим ПО;

- на проверку правильности работы;

- на обучение сотрудников работе с ПО.

Этапы тестирования[29]:

1. Анализ.

2. Разработка стратегии тестирования и планирование процедур контроля качества.

3. Работа с требованиями.

4. Создание тестовой документации.

5. Тестирование прототипа.

6. Основное тестирование.

7. Стабилизация.

8. Эксплуатация.

Говоря о качестве тестирования, поднимается вопрос о том, что на сегодняшний день сотрудники отдела тестирования стали гораздо опытнее, тем самым из-за большой необходимости тестирования программного обеспечения умения и навыки тестеров растут. Это плодотворно сказывается на деятельности компаний из различных сфер. Так мы должны понимать, что чем лучше протестировано ПО, тем лучше оно работает и соответственно, тем меньше происходит сбоев и на выходе организация имеет большое число готовых продуктов надлежащего качества[30].

Говоря о негативных факторах, приводящих к ущербу для предприятия (именно связанных с ПО), выделим следующие[31]:

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

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

- уязвимости в ПО, которые позволяют злоумышленникам осуществить сбой или иное правонарушение, которое повлечёт за собой ущерб для компании.

В заключении необходимо ещё раз подчеркнуть важность отдела тестирования при разработке или внедрения программного обеспечения в организацию. Ведь именно сотрудники данного отдела своей деятельностью способны предотвратить возможный ущерб для предприятия[32]. Стоит также отметить, что на сегодняшний день навыки тестеров заметно выросли и уже сейчас большинство ПО обеспечения после прохождения "тестирования" и исправления багов в дальнейшем работают бесперебойно.

3. Стратегии тестирования программного обеспечения

Современный мир полон возможными инновационными технологиями, в то время как технический прогресс только набирает обороты. Одну из немаловажных ветвей развития информационных технологий занимает разработка и производство программного обеспечения (ПО). С каждым днём люди сталкиваются с десятками программ, приложений, которые автоматизируют множество действий в различных сферах жизнедеятельности человека. Стоит отметить, что в настоящее время компьютеризации подвержены практически все области человеческой жизни. Следовательно, качество ПО имеет особую важность: сегодня это доставляет не только комфортабельность от использования автоматизированных систем, сегодня ПО управляет оборудованиями в медицинских учреждениях, диспетчерскими системами в аэропортах, военными электронно-вычислительными системами, атомными реакторами и т.д[33].

Тестирование является одной из обязательных частей процесса производства ПО. Данный процесс направлен на поиск и устранение максимального количества ошибок. Следствием такой деятельности является повышение качества ПО по всем его характеристикам. Существующие на сегодняшний день методы тестирования программного обеспечения не позволяют однозначно и полностью устранить все дефекты и ошибки и установить корректность функционирования программного продукта[34].

Современное ПО весьма разнообразно, и для его тестирования требуется определённый своеобразный подход. В данной тематике рассмотрим примеры использования различных видов тестирования для разнообразных типов ПО: мобильные приложения, объектно-ориентированные системы, веб-приложения, распределённые системы[35].

Следует отметить, что для ПО, которое имеет достаточно большой объём, требуется применение автоматизации тестирования.

Существует две стратегии тестирования ПО – тестирование по принципу «белого ящика» и «чёрного ящика». Данные стратегии зависят от того, имеет ли инженер по контролю качества (тестировщик) доступ к исходному коду ПО, или же тестирование выполняется через пользовательский интерфейс либо прикладной программный интерфейс, предоставленный тестируемым модулем[36].

3.1. Метод «белого и черного ящиков»

При тестировании методом «белого ящика» (white-box testing, оно же структурное тестирование) разработчик теста имеет доступ к исходному коду программ и имеет возможность писать код, который связан с библиотеками тестируемого программного обеспечения[37]. На рисунке 1 представлено схематическое изображение данного метода.

«Белый ящик»

Рисунок 1. Метод «Белого ящика»[38]

При тестировании методом «чёрного ящика», схему которого можно увидеть на рисунке 2, тестировщик имеет доступ к ПО только через те же интерфейсы, что и заказчик или пользователь, либо через внешние интерфейсы, позволяющие другому компьютеру либо другому процессу подключиться к системе для тестирования.

«Черный ящик»

Рисунок 2. Метод «Черного ящика»[39]

Сопоставив два метода, можно сделать вывод, что метод «белого ящика» основывается на принципе тестирования, управляемом логикой программы. Происходит подбор таких тестов, которые смогут обеспечить выполнение максимально возможного количества маршрутов, логических циклов и ветвлений тестируемого ПО. Метод «чёрного ящика» основывается на функциональном тестировании. Таким образом, происходит проверка входных и выходных данных, не прибегая к логике тестируемого ПО[40].

Основные методы тестирования для объектно-ориентированных программ – это модульное тестирование (выполняет тестировщик классов); интеграционное тестирование (выполняет тестировщик целостности); системное тестирование (выполняет системный тестировщик)[41]. Модульное и интеграционное тестирования – это особые формы внутреннего базового тестирования, в которых применяют средства автоматизации.

Модульное тестирование – это тестирование программы на уровне отдельно взятых модулей, функций или классов. Цель модульного тестирования состоит в выявлении локализованных в модуле ошибок в реализации алгоритмов, а также в определении степени готовности системы к переходу на следующий уровень разработки и тестирования. Модульное тестирование проводится по принципу «белого ящика», т.е. основывается на знании внутренней структуры программы и часто включает те или иные методы анализа покрытия кода. В ходе данного тестирования разрабатываются тестовые драйверы для проверки функциональности, входящие в класс методов. При тестировании классов тестовый драйвер создаёт один или большее число экземпляров тестируемого класса и осуществляет прогон тестовых случаев. Пример оформления результатов модульного тестирования приведён в таблице 1[42].

Таблица 1

Результаты модульного тестирования

№ теста

Test1

Название теста

DeleteTest

Тестируемый метод

SelectItem.Delete

Описание теста

Проверка удаления выбранного элемента с указанным индексом

Степень важности ошибки

Фатальная

Ожидаемый результат

Элемент с указанным индексом удаляется из списка, список обновляется

Результат теста

Тест пройден

Интеграционное тестирование – тестирование корректного взаимодействия классов, входящих в различные модули. Тестирование основано на принципе «белого ящика». Тестировщик целостности должен быть специалистом как в области разработки программных продуктов, так и в области тестирования. Взаимодействие объектов представляет собой запрос одного объекта на выполнение другим объектом одной из операций получателя и всех видов обработки, необходимых для завершения этого запроса[43].

Наиболее часто используют два направления интеграции объектно-ориентированных систем: тестирование, основанное на потоках, и тестирование, основанное на использовании[44]. Для первого направления объектом интеграции является набор классов, обслуживающий единичный ввод данных в систему. Иными словами, средства обслуживания каждого потока интегрируют и тестируют отдельно. Согласно второму вначале интегрируют и тестируют независимые классы. Далее работают с первым слоем зависимых классов (которые используют независимые классы), со вторым слоем и т.д. Выбор одного из способов тестирования зависит от особенностей конкретного ПО, например, первое направление хорошо работает для тестирования систем управления базами данных (СУБД), а второе – для тестирования задач математического моделирования. Достаточность количества тестов для первого направления определяется просмотром потоков данных из всех классов эквивалентности. Для второго направления реализованы методики, позволяющие писать тестовые драйверы на основе тестирования разбиений или состояний[45].

Необходимой документацией для проведения тестирования на основе состояний также служит диаграмма схем состояний, которая фиксирует динамику поведения класса. Этот способ предоставляет возможность получить набор тестов, проверяющих поведение класса и некоторых других классов, которые сотрудничают с ним. Разработанные тесты должны обеспечить покрытие всех состояний. То есть эти тесты должны пройти через всевозможные переходы через все состояния объекта. Для каждого такого перехода следует написать тестовый драйвер. Остальные состояния тестируются по аналогичной схеме[46].

Пример оформления результатов интеграционного тестирования представлен в таблице 2.

Таблица 2

Результаты интеграционного тестирования[47]

Номер теста

Test2

Название теста

IndexTest

Названия взаимодействующих классов

Admin, User

Описание теста

Проверяется, что пользователю, который не является администратором, идёт отказ в доступе к домашней странице администратора

Степень важности ошибки

Фатальная

Ожидаемый результат

Пользователю выдаётся ошибка с текстом «Доступ запрещён»

Результат теста

Тест пройден

Системное тестирование – это тестирование по принципу «чёрного ящика» правильности функционирования системы в целом. Системный тестировщик рассматривает ПО с точки зрения пользователя. Особую роль системное тестирование приобретает для тестирования распространённых в настоящее время веб-приложений и распределённых систем[48].

В процессе построения набора тестов при функциональном (системном) тестировании необходимо проверить[49]:

− полноту реализации функциональных возможностей системы;

− эффективность защиты от искажения данных и некорректных действий;

− качество пользовательского интерфейса программы;

− тестирование практичности; тестирование баз данных;

− тестирование надёжности и доступности;

− корректность документации.

Системное тестирование также включает оценочное тестирование:

− тестирование удобства пользования;

− стрессовое тестирование, тестирование безопасности;

− тестирование производительности на разной аппаратуре;

− тестирование удобства установки и обслуживания, совместимости.

Стрессовое тестирование проводят при повышенных запросах на ресурсы системы (по количеству, частоте, размеру-объёму). Тестирование безопасности проверяет фактическую реакцию защитных механизмов, встроенных в систему, на проникновение. В ходе тестирования безопасности тестировщику разрешается найти ключ входа в систему, используя некоторые данные, и выполнить атаку системы с помощью специальных утилит, анализирующих защиты[50].

Тестирование производительности проверяет скорость работы ПО в компьютерной системе.

Для системного тестирования ПО реализованы следующие методики формирования тестовых наборов[51]: эквивалентное разбиение для входных данных; анализ граничных значений; предположение об ошибке, использование UML-диаграммы взаимодействия, UML-диаграммы деятельности, а также UML-диаграммы схем состояний разрабатываемого ПО. Пример оформления результатов системного тестирования приведён в таблице. 3.

Таблица 3

Результаты системного тестирования[52]

Номер теста

Test3

Описание теста

Добавление сервера

Входные данные

Поле «Имя сервера»: srv02. Поле «Сетевой адрес»: (не задано). Поле «Описание»: (не задано)

Ожидаемые результаты

Сообщение: «Поле «Адрес сервера» должно быть заполнено»

Реальные результаты

Сообщение: «Поле «Адрес сервера» должно быть заполнено»

Результаты теста

Тест пройден

Особое внимание стоит уделить методике системного тестирования ПО, предназначенного для работы в Интернете. Существует четыре основных отличия между локальными и распределёнными вычислениями, которые следует учитывать при тестировании веб-приложений: реактивность (время реакции системы), латентность (разница во времени доступа к удалённым и локальным объектам), возможный частичный отказ в сети и параллелизм операции с данными[53].

При тестировании практичности веб-приложений необходимо оценивать связь узла с пользователем. Тестировщик фиксирует действия пользователя и его реакцию, чтобы определить, с каким типом трудностей сталкивается пользователь и как он их преодолевает. Тестовые примеры по практичности являются чётко заданным и несложным набором задач, которому должны следовать участники. Результаты тестирования практичности должны быть документированы.

При тестировании форм необходимо подтвердить, что каждое поле работает так, как требовалось не только разработчиком, но и для использования конечным пользователем. При тестировании содержимого страницы необходимо проверить, что информация, предоставляемая узлом, корректна. Тесты, подтверждающие корректность содержимого страницы с точки зрения пользователя, делят на две категории: подтверждение адекватного функционирования каждой компоненты и подтверждение того, что содержимое каждой из них корректное в различных браузерах[54].

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

Тестирование баз данных – важная составляющая тестирования веб-приложений, поскольку информация на веб-узлах обычно хранится в базах данных. В некоторых приложениях[55] есть данные, вводимые пользователем, которые затем становятся частью баз данных.

Тестирование баз данных выполняют на двух уровнях: административных и пользовательских функций.

Для обнаружения уязвимых мест в приложении, которые могли бы позволить несанкционированный доступ пользователя к системе, предназначено тестирование безопасности[56].

При тестировании надёжности и доступности необходимо оценить доступность веб-узла в любое время по запросу пользователя. Такая оценка достигается путём тестирования приложения в пиковое время использования (в периоды маркетинговой стимуляции и циклов высокой активности).

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

Таким образом, были проведены анализ и оценка методов, которые необходимы для проведения тестирования для определённого программного обеспечения – в данном случае для объектно-ориентированных систем, веб-приложений и распределённых систем. Было отмечено соответствие каждого вида тестирования конкретному типу ПО и разделения между этими видами. В дальнейшем работа по анализу и оценке методов тестирования будет развиваться, затрагивая уже другие области ПО[58].

3.2. Отличия и взаимосвязь ручного и автоматизированного тестирования ПО

В процесс ручного тестирования не задействуется стороннее программное обеспечение. Как правило тестировщик составляет тест-план, моделирующий различные действия пользователя, по которому впоследствии и осуществляется проверка. Данный вид тестирование является локализованным, тестировщик концентрируется на внесенных изменения и связанных с ними частями, а не на программном продукте в целом. Чаще всего он не знает в какой именно части программного кода были внесены изменения, поэтому появляется риск упустить ошибку в неожиданных местах[59].

Во избежание подобных ситуаций разработаны специальные автоматизированные тесты, при которых задействуются программные средства тестирования и проверки результатов его выполнения. Автоматизированное тестирование ПО позволяет упростить процесс и сократить время тестирования. К таким программным средствам относят различные тестовые фреймворки и инструменты на базе определенных языков программирования, позволяющие запрограммировать тестовые сценарии. Примерами таких фреймворков и инструментов являются Google testing framework, TestNG, Junit, Selenium, Selenide, Protractor и другие. Автотесты, написанные при их помощи различных позволят в короткие сроки проверить большой объем программного кода, конечно же, при условии, что реализовано должное покрытие кода[60].

Казалось бы, если вдруг придется поставить выбор между трудоемким, трудозатратным и продолжительным по времени ручным тестированием и разработкой автоматизированных тестов, выбор очевиден в пользу автоматизации. Но, как показывает практика, такой выбор не всегда является верным. Автоматизированные тесты достаточно трудоемки, и их разработка требует длительного промежутка времени и, как правило, отдел тестирования не успевает дописать автоматизированный тест, так как за время его разработки часть программного кода тестируемого приложения может быть изменена и дополнена новыми частями. В результате чего стопроцентное покрытие программного кода осуществить практически невозможно. Как правило, автоматизированные тесты покрывают неизменную, постоянную часть программного кода. Это связано с тем, что исправление одной ошибки может повлечь за собой появление новой, отследить которую вручную весьма трудно[61].

Мартин и Мак-Клер (Martin & mcClure) подытожили собранные Боэмом (Boehm) данные об эффективности исправления найденных ошибок:

− если для исправления ошибки нужно изменить не более десяти операторов, вероятность того, что это будет сделано правильно с первого раза, составляет 50 процентов;

− если для исправления ошибки нужно изменить около пятидесяти операторов, вероятность того, что это будет сделано правильно с первого раза, составляет 20 процентов. Проблема заключается не только в том, что программист не сможет исправить ошибку до конца, а в том, что исправления могут иметь побочные эффекты. Например, исправление одной ошибки способно привести к появлению другой. Именно поэтому автоматические тесты нужны и их наличие необходимо[62].

Тогда возникает вопрос: – «Как поступить с частями кода, которые еще не покрыты автоматическими тестами? К примеру, если это новая функциональность программного обеспечения?». В таком случае, конечно же, эффективным и быстрым будет осуществление ручной проверки кода, в процессе которой обнаруживаются дефекты, далее программисты их исправляют, и так продолжается до тех пор, пока продукт не приобретает должную стабильность[63]. И только после проведения такой проверки, можно заниматься написанием автоматических тестов.

Зачастую «ручной тестировщик» перед проверкой составляет конкретный тест-план, по которому осуществляет проверку программного кода[64]. Данный тест-план в дальнейшем может послужить псевдокодом для написания автоматических тестов.

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

Итак, совместное использование автоматизированного и ручного тестирования значительно ускоряет процесс анализа программного кода в целом. Повторяющиеся один за одним тесты, достаточно сложно выполнять вручную, поэтому значительно проще запустить автотест. А вот для тестирования новых функциональных возможностей программного приложения, релиз которого не следует откладывать, необходимо сначала осуществить ручное тестирование, по причинам, которые были описаны ранее.

ЗАКЛЮЧЕНИЕ

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

Сбои в работе АС приводят к простою, а значит и потере прибыли. Поэтому в процессе создания АС большое внимание уделяется обеспечению их качества.

В первую очередь качество АС обеспечивается качеством его программного обеспечения. Качество ПО, в свою очередь, характеризуется набором свойств, рассматриваемых с точки зрения заинтересованных сторон, таких как бизнес-заказчик, конечные пользователи, разработчики и тестировщики, инженеры поддержки, сотрудники отделов обучения, продаж и маркетинга. Все эти люди могут иметь различное представление о том, насколько высоко качество ПО. Таким образом, постановка задачи обеспечения качества основана на определении заинтересованных сторон, выявлении критериев для оценки качества и последующего нахождения рационального решения, удовлетворяющего поставленным критериям. Тестирование – это один из наиболее действенных способов обеспечения качества разработки ПО.

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

В более широком смысле тестирование – это одна из техник контроля качества, включающая в себя активности по планированию и управлению процессом, проектированию тестов, непосредственного выполнения тестирования и анализу полученных результатов.

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Описание книг одного-трех авторов

Блэк Р. Ключевые процессы тестирования. Планирование, подготовка, проведение, совершенствование – М.: Издательство «Лори», 2017.

В. В. Кулямин. Технологии программирования. Компонентный подход. М. Интернет-университет информационных технологий — БИНОМ. Лаборатория знаний, 2017

Вигерс, Карл. Разработка требований к программному обеспечению / Карл Вигерс , Джой Битти. - М.: БХВ-Петербург, Русская Редакция, 2014

Винниченко И.В. Автоматизация процессов тестирования / И.В. Винниченко. – СПб.: Питер, 2015

Инструменты параллельного программирования в системах с общей памятью. 2-е изд. М., 2010

Канер Сэм. Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений: Пер. с англ. /Сэм Канер, Джек Фолк, Енг Кек Нгуен. – К.: Издательство «ДиаСофт», 2001

Керниган, Брайан Практика программирования / Брайан Керниган , Роб Пайк. - М.: Вильямс, 2015

Котляров В. П., Коликова Т.В. Основы тестирования программного обеспечения – М.: Интернет-Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2016

Орлик С. Основы программной инженерии по SWEBOK (Software Engineering Body of Knowledge). Программная инженерия. Тестирование программного обеспечения. Сopyright, 2017

Хант Э. Программист-прагматик. Путь от подмастерья к мастеру / Э. Хант, Д. Томас. - М.: ЛОРИ, 2016

Описание учебников и учебных пособий

Вишневская Т.И., Романова Т.Н. Технология программирования: метод. указ. к лаборат. практикуму. Ч. 1. – М.: МГТУ им. Н.Э. Баумана, 2017

Макгрегор Дж., Сайкc Д. Тестирование объектноориентированного программного обеспечения: практическое пособие разработчикам, менеджерам проектов, программистам. – М.: DiaSoft, 2012

Поляк, Б. Т. Введение в оптимизацию / Б.Т. Поляк. - М.: Ленанд, 2014

Сенченко П.В. Надежность, эргономика и качество АСОИУ: учеб. пособие. – Томск: ТУСУР, 2015

Технология программирования. Основы современного тестирования программного обеспечения, разработанного на C#: учеб. пособие / под общ. ред. В.П. Котлярова. – СПб.: СПбГПУ, 2014

Описание статьи из периодического издания

Ананченко И.В., Распопа Е.А., Хаджиев И.В. Практики тестирования в сфере локализации программного обеспечения // Современные наукоемкие технологии. - 2018. - № 7.

Волосенков В.О., Морозов А.В. Способ построения средств комплексной отладки программного обеспечения специализированных ЭВМ, функционирующих в режиме реального времени // Вестник Оренбургского государственного университета. - 2016. - № 2

Волосенков В.О., Попрыгина Е.В. Способ автоматизации отладки параллельных программ // Проблемы безопасности российского общества. - 2015. - № 2

Галимова Е.Ю. Метод выбора между ручным и автоматизированным тестированием, основанный на свойствах программного продукта // Вестник Дон.ГТУ. 2016, – Т. 16. – № 4(87).

Золотухина Е.Б., Макарова Е.А., Беляков А.А.Обзор методов тестирования программного обеспечения // Аллея науки. - 2018. - Т. 4. - № 6 (22)

Казыханов А.А., Байрушин Ф.Т. К Вопросу О Тестировании Отраслевого Программного Обеспечения // Аллея науки. - 2018. - Т. 2. - № 1 (17)

Крякушина Ю.А. Оценка методов тестирования // Электронные средства и системы управления. - 2016. - № 1-2

Лопатина К.И., Темникова Е.А. Ручное и автоматизированное тестирование программного обеспечения отличия и взаимозаменяемость // Вестник современных исследований. - 2017. - № 10-1 (13)

Нестеренко Е.И., Куклина К.Е., Шведенко П.В. Обзор задач, уровней и видов тестирования программного обеспечения // Новая наука: Проблемы и перспективы. - 2016. - № 2-1 (61)

Омарова М.О. Анализ инструментов отладки параллельных программ // Молодежный научно-технический вестник. - 2015. - № 9

Сенченко П.В. Обоснование целесообразности применения web-ориентированных технологий при разработке информационных систем электронного документооборота // Проблемы теории и практики управления. – 2016. – № 6

Описание интернет-источников

Geektimes / [Электронный ресурс] – Режим доступа: https://geektimes.ru/ (Дата обращения: 15.12.2018)

  1. habrahabr / [Электронный ресурс] – Режим доступа: https://habrahabr.ru/ (Дата обращения: 15.12.2018)

Software testing training and stoftware testing services [Электронный ресурс]. – Режим доступа: http://www.rbcsus.com/ (Дата обращения: 15.12.2018)

Tpl-it. Тестирование безопасности (security testing). Электронный ресурс]. Режим доступа: http://tpl-it.wikispaces.com/ /·+Тестирование +безопасности+%28security+testing%29 (дата обращения: 15.12.2018)

БЛОГ Web Программиста. Методы тестирования программного обеспечения). Электронный ресурс]. Режим доступа: http://juicehealth.ru/program/software-testing/495-software-testing-%20methods (дата обращения: 15.12.2018)

Про Тестинг. Тестирование Программного Обеспечения. [Электронный ресурс]. Режим доступа: http://www.protesting.ru/testing (дата обращения: 15.12.2018)

  1. Инструменты параллельного программирования в системах с общей памятью. 2-е изд. М., 2010

  2. Вигерс, Карл. Разработка требований к программному обеспечению / Карл Вигерс , Джой Битти. - М.: БХВ-Петербург, Русская Редакция, 2014

  3. Волосенков В.О., Попрыгина Е.В. Способ автоматизации отладки параллельных программ // Проблемы безопасности российского общества. - 2015. - № 2

  4. Инструменты параллельного программирования в системах с общей памятью. 2-е изд. М., 2010

  5. Волосенков В.О., Попрыгина Е.В. Способ автоматизации отладки параллельных программ // Проблемы безопасности российского общества. - 2015. - № 2.

  6. Волосенков В.О., Морозов А.В. Способ построения средств комплексной отладки программного обеспечения специализированных ЭВМ, функционирующих в режиме реального времени // Вестник Оренбургского государственного университета. - 2016. - № 2

  7. Омарова М.О. Анализ инструментов отладки параллельных программ // Молодежный научно-технический вестник. - 2015. - № 9

  8. Инструменты параллельного программирования в системах с общей памятью. 2-е изд. М., 2010

  9. Хант, Э. Программист-прагматик. Путь от подмастерья к мастеру / Э. Хант, Д. Томас. - М.: ЛОРИ, 2016

  10. Инструменты параллельного программирования в системах с общей памятью. 2-е изд. М., 2010

  11. Волосенков В.О., Морозов А.В. Способ построения средств комплексной отладки программного обеспечения специализированных ЭВМ, функционирующих в режиме реального времени // Вестник Оренбургского государственного университета. - 2016. - № 2

  12. Вигерс, Карл Разработка требований к программному обеспечению / Карл Вигерс , Джой Битти. - М.: БХВ-Петербург, Русская Редакция, 2014

  13. Керниган, Брайан Практика программирования / Брайан Керниган , Роб Пайк. - М.: Вильямс, 2015

  14. Хант, Э. Программист-прагматик. Путь от подмастерья к мастеру / Э. Хант, Д. Томас. - М.: ЛОРИ, 2016

  15. Керниган, Брайан Практика программирования / Брайан Керниган , Роб Пайк. - М.: Вильямс, 2015

  16. Поляк, Б. Т. Введение в оптимизацию / Б.Т. Поляк. - М.: Ленанд, 2014

  17. Орлик С. Основы программной инженерии по SWEBOK (Software Engineering Body of Knowledge). Программная инженерия. Тестирование программного обеспечения. Сopyright, 2017

  18. Котляров В. П., Коликова Т.В. Основы тестирования программного обеспечения – М.: Интернет-Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2016

  19. Блэк Р. Ключевые процессы тестирования. Планирование, подготовка, проведение, совершенствование – М.: Издательство «Лори», 2017.

  20. БЛОГ Web Программиста. Методы тестирования программного обеспечения). Электронный ресурс]. Режим доступа: http://juicehealth.ru/program/software-testing/495-software-testing-%20methods (дата обращения: 15.12.2018)

  21. Про Тестинг. Тестирование Программного Обеспечения. [Электронный ресурс]. Режим доступа: http://www.protesting.ru/testing (дата обращения: 15.12.2018)

  22. В. В. Кулямин. Технологии программирования. Компонентный подход. М. Интернет-университет информационных технологий — БИНОМ. Лаборатория знаний, 2017

  23. Tpl-it. Тестирование безопасности (security testing). Электронный ресурс]. Режим доступа: http://tpl-it.wikispaces.com/ /·+Тестирование +безопасности+%28security+testing%29 (дата обращения: 15.12.2018)

  24. Блэк Р. Ключевые процессы тестирования. Планирование, подготовка, проведение, совершенствование – М.: Издательство «Лори», 2017

  25. Золотухина Е.Б., Макарова Е.А., Беляков А.А.Обзор методов тестирования программного обеспечения // Аллея науки. - 2018. - Т. 4. - № 6 (22)

  26. Нестеренко Е.И., Куклина К.Е., Шведенко П.В. Обзор задач, уровней и видов тестирования программного обеспечения // Новая наука: Проблемы и перспективы. - 2016. - № 2-1 (61)

  27. Казыханов А.А., Байрушин Ф.Т. К Вопросу О Тестировании Отраслевого Программного Обеспечения // Аллея науки. - 2018. - Т. 2. - № 1 (17).

  28. Geektimes / [Электронный ресурс] – Режим доступа: https://geektimes.ru/ (Дата обращения: 15.12.2018)

  29. habrahabr / [Электронный ресурс] – Режим доступа: https://habrahabr.ru/ (Дата обращения: 15.12.2018)

  30. habrahabr / [Электронный ресурс] – Режим доступа: https://habrahabr.ru/ (Дата обращения: 15.12.2018)

  31. Geektimes / [Электронный ресурс] – Режим доступа: https://geektimes.ru/ (Дата обращения: 15.12.2018)

  32. Казыханов А.А., Байрушин Ф.Т. К Вопросу О Тестировании Отраслевого Программного Обеспечения // Аллея науки. - 2018. - Т. 2. - № 1 (17)

  33. Технология программирования. Основы современного тестирования программного обеспечения, разработанного на C#: учеб. пособие / под общ. ред. В.П. Котлярова. – СПб.: СПбГПУ, 2014

  34. Вишневская Т.И., Романова Т.Н. Технология программирования: метод. указ. к лаборат. практикуму. Ч. 1. – М.: МГТУ им. Н.Э. Баумана, 2017

  35. Сенченко П.В. Обоснование целесообразности применения web-ориентированных технологий при разработке информационных систем электронного документооборота // Проблемы теории и практики управления. – 2016. – № 6

  36. Сенченко П.В. Надежность, эргономика и качество АСОИУ: учеб. пособие. – Томск: ТУСУР, 2015

  37. Крякушина Ю.А. Оценка методов тестирования // Электронные средства и системы управления. - 2016. - № 1-2

  38. Вишневская Т.И., Романова Т.Н. Технология программирования: метод. указ. к лаборат. практикуму. Ч. 1. – М.: МГТУ им. Н.Э. Баумана, 2017

  39. Вишневская Т.И., Романова Т.Н. Технология программирования: метод. указ. к лаборат. практикуму. Ч. 1. – М.: МГТУ им. Н.Э. Баумана, 2017

  40. Крякушина Ю.А. Оценка методов тестирования // Электронные средства и системы управления. - 2016. - № 1-2

  41. Макгрегор Дж., Сайкc Д. Тестирование объектноориентированного программного обеспечения: практическое пособие разработчикам, менеджерам проектов, программистам. – М.: DiaSoft, 2012

  42. Крякушина Ю.А. Оценка методов тестирования // Электронные средства и системы управления. - 2016. - № 1-2

  43. Сенченко П.В. Обоснование целесообразности применения web-ориентированных технологий при разработке информационных систем электронного документооборота // Проблемы теории и практики управления. – 2016. – № 6

  44. Технология программирования. Основы современного тестирования программного обеспечения, разработанного на C#: учеб. пособие / под общ. ред. В.П. Котлярова. – СПб.: СПбГПУ, 2014

  45. Технология программирования. Основы современного тестирования программного обеспечения, разработанного на C#: учеб. пособие / под общ. ред. В.П. Котлярова. – СПб.: СПбГПУ, 2014

  46. Крякушина Ю.А. Оценка методов тестирования // Электронные средства и системы управления. - 2016. - № 1-2

  47. Макгрегор Дж., Сайкc Д. Тестирование объектноориентированного программного обеспечения: практическое пособие разработчикам, менеджерам проектов, программистам. – М.: DiaSoft, 2012

  48. Крякушина Ю.А. Оценка методов тестирования // Электронные средства и системы управления. - 2016. - № 1-2

  49. Сенченко П.В. Обоснование целесообразности применения web-ориентированных технологий при разработке информационных систем электронного документооборота // Проблемы теории и практики управления. – 2016. – № 6

  50. Макгрегор Дж., Сайкc Д. Тестирование объектноориентированного программного обеспечения: практическое пособие разработчикам, менеджерам проектов, программистам. – М.: DiaSoft, 2012

  51. Вишневская Т.И., Романова Т.Н. Технология программирования: метод. указ. к лаборат. практикуму. Ч. 1. – М.: МГТУ им. Н.Э. Баумана, 2017

  52. Технология программирования. Основы современного тестирования программного обеспечения, разработанного на C#: учеб. пособие / под общ. ред. В.П. Котлярова. – СПб.: СПбГПУ, 2014

  53. Сенченко П.В. Обоснование целесообразности применения web-ориентированных технологий при разработке информационных систем электронного документооборота // Проблемы теории и практики управления. – 2016. – № 6

  54. Крякушина Ю.А. Оценка методов тестирования // Электронные средства и системы управления. - 2016. - № 1-2

  55. Сенченко П.В. Обоснование целесообразности применения web-ориентированных технологий при разработке информационных систем электронного документооборота // Проблемы теории и практики управления. – 2016. – № 6

  56. Макгрегор Дж., Сайкc Д. Тестирование объектноориентированного программного обеспечения: практическое пособие разработчикам, менеджерам проектов, программистам. – М.: DiaSoft, 2012

  57. Software testing training and stoftware testing services [Электронный ресурс]. – Режим доступа: http://www.rbcsus.com/

  58. Крякушина Ю.А. Оценка методов тестирования // Электронные средства и системы управления. - 2016. - № 1-2

  59. Лопатина К.И., Темникова Е.А. Ручное и автоматизированное тестирование программного обеспечения отличия и взаимозаменяемость // Вестник современных исследований. - 2017. - № 10-1 (13)

  60. Канер Сэм. Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений: Пер. с англ. /Сэм Канер, Джек Фолк, Енг Кек Нгуен. – К.: Издательство «ДиаСофт», 2001

  61. Ананченко И.В., Распопа Е.А., Хаджиев И.В. Практики тестирования в сфере локализации программного обеспечения // Современные наукоемкие технологии. - 2018. - № 7.

  62. Винниченко И.В. Автоматизация процессов тестирования / И.В. Винниченко. – СПб.: Питер, 2015

  63. Винниченко И.В. Автоматизация процессов тестирования / И.В. Винниченко. – СПб.: Питер, 2015

  64. Галимова Е.Ю. Метод выбора между ручным и автоматизированным тестированием, основанный на свойствах программного продукта // Вестник Дон.ГТУ. 2016, – Т. 16. – № 4(87).