Тестирование надежности программного обеспечения
Тестирование надежности программного обеспечения — это область тестирования программного обеспечения, которая относится к тестированию способности программного обеспечения функционировать в заданных условиях окружающей среды в течение определенного периода времени. Тестирование надежности программного обеспечения помогает обнаружить множество проблем в конструкции и функциональности программного обеспечения.
Обзор
[ редактировать ]Надежность программного обеспечения — это вероятность того, что программное обеспечение будет работать правильно в определенной среде и в течение заданного периода времени. Используя следующую формулу, вероятность отказа рассчитывается путем тестирования выборки всех доступных входных состояний. Среднее время наработки на отказ (MTBF) = Среднее время наработки на отказ (MTTF) + Среднее время на ремонт (MTTR)
- Вероятность = количество неудачных случаев / общее количество рассматриваемых случаев.
Набор всех возможных входных состояний называется входным пространством. Чтобы определить надежность программного обеспечения, нам нужно найти выходное пространство из заданного входного пространства и программного обеспечения. [1]
Для тестирования надежности данные собираются на различных этапах разработки, таких как этапы проектирования и эксплуатации. Тесты ограничены из-за ограничений, таких как ограничения по стоимости и времени. Статистические выборки получаются из программных продуктов для проверки надежности программного обеспечения. Как только собрано достаточно данных или информации, проводятся статистические исследования. Ограничения по времени решаются путем применения фиксированных дат или крайних сроков для проведения тестов. После этого этапа разработка программного обеспечения прекращается и начинается этап фактического внедрения. Поскольку существуют ограничения по затратам и времени, данные собираются тщательно, чтобы каждая информация имела определенную цель и имела ожидаемую точность. [2] Для достижения удовлетворительных результатов испытаний на надежность необходимо позаботиться о некоторых характеристиках надежности. Например, среднее время до отказа (MTTF). [3] измеряется тремя факторами:
- время работы,
- количество циклов включения-выключения,
- и календарное время.
Если ограничения касаются времени работы или если основное внимание уделяется первой точке улучшения, то можно применить сжатое ускорение времени, чтобы сократить время тестирования. Если упор делается на календарное время (т.е. если есть заранее определенные сроки), то усиленное стресс-тестирование . используется [2] [4]
Измерение
[ редактировать ]программного обеспечения Доступность измеряется средним временем наработки на отказ (MTBF). [5]
MTBF состоит из среднего времени до отказа (MTTF) и среднего времени до ремонта (MTTR). MTTF — это разница во времени между двумя последовательными сбоями, а MTTR — это время, необходимое для устранения сбоя. [6]
Устойчивая доступность представляет собой процент работоспособности программного обеспечения.
Например, если MTTF = 1000 часов для программного обеспечения, то программное обеспечение должно работать в течение 1000 часов непрерывной работы.
Для того же программного обеспечения, если MTTR = 2 часа, то .
Соответственно,
Надежность программного обеспечения измеряется интенсивностью отказов ( ).
Надежность программного обеспечения представляет собой число от 0 до 1. Надежность увеличивается, когда из программы удаляются ошибки или ошибки. [7] Существует множество моделей роста надежности программного обеспечения (SRGM) ( Список моделей надежности программного обеспечения ), включая логарифмическую, полиномиальную, экспоненциальную, степенную и S-образную.
Цели тестирования надежности
[ редактировать ]Основной целью тестирования надежности является проверка производительности программного обеспечения в заданных условиях без каких-либо корректирующих мер с использованием известных фиксированных процедур с учетом его спецификаций.
Второстепенные цели
[ редактировать ]Вторичными задачами тестирования надежности являются:
- Найти перцептивную структуру повторяющихся неудач.
- Найти количество отказов, произошедших за заданный промежуток времени.
- Чтобы найти средний срок службы программного обеспечения.
- Выявить основную причину неудачи.
- Проверка работоспособности различных модулей ПО после проведения профилактических мероприятий.
Баллы для определения целей
[ редактировать ]Некоторые ограничения на создание целей включают в себя:
- Поведение программного обеспечения должно быть определено в заданных условиях.
- Цель должна быть осуществимой.
- Должны быть предусмотрены временные ограничения. [8]
Важность тестирования надежности
[ редактировать ]Применение компьютерного программного обеспечения распространилось во множество различных областей, причем программное обеспечение является неотъемлемой частью промышленных, коммерческих и военных систем. Из-за множества применений в системах, критически важных для безопасности, надежность программного обеспечения в настоящее время является важной областью исследований. Хотя разработка программного обеспечения становится самой быстроразвивающейся технологией прошлого столетия, не существует полной, научной и количественной меры для ее оценки. Тестирование надежности программного обеспечения используется как инструмент для оценки этих технологий разработки программного обеспечения. [9]
Для повышения производительности программного продукта и процесса разработки программного обеспечения необходима тщательная оценка надежности. Тестирование надежности программного обеспечения важно, поскольку оно очень полезно для менеджеров программного обеспечения и практиков. [10]
Чтобы проверить надежность программного обеспечения посредством тестирования:
- Необходимо выполнить достаточное количество тестовых случаев в течение достаточного времени, чтобы получить разумную оценку того, как долго программное обеспечение будет работать без сбоев. Длительные тесты необходимы для выявления дефектов (таких как утечка памяти и переполнение буфера), для возникновения которых требуется время.
- Распределение тестовых примеров должно соответствовать фактическому или запланированному рабочему профилю программного обеспечения. Чем чаще выполняется функция или подмножество программного обеспечения, тем больший процент тестовых случаев должен быть отведен этой функции или подмножеству.
Виды испытаний надежности
[ редактировать ]Тестирование надежности программного обеспечения включает в себя функциональное тестирование, нагрузочное тестирование и регрессионное тестирование . [11]
Функциональный тест
[ редактировать ]Функциональное тестирование проверяет функции, предоставляемые программным обеспечением, и проводится в следующие этапы:
- Каждая операция в программе выполняется один раз.
- Взаимодействие между двумя операциями сокращается и
- Каждая операция проверяется на правильность ее выполнения.
За функциональным тестом следует нагрузочный тест. [11]
Нагрузочный тест
[ редактировать ]Этот тест проводится для проверки производительности программного обеспечения при максимальной рабочей нагрузке. Любое программное обеспечение работает лучше до некоторой нагрузки, после которой время отклика программного обеспечения начинает ухудшаться. Например, веб-сайт можно протестировать, чтобы определить, сколько одновременных пользователей он может поддерживать без снижения производительности. Это тестирование в основном помогает для баз данных и серверов приложений . Нагрузочное тестирование также требует тестирования производительности программного обеспечения , которое проверяет, насколько хорошо некоторое программное обеспечение работает под рабочей нагрузкой. [11]
Регрессионный тест
[ редактировать ]Регрессионное тестирование используется для проверки наличия каких-либо новых ошибок в результате предыдущих исправлений ошибок. Регрессионное тестирование проводится после каждого изменения или обновления функций программного обеспечения. Это тестирование является периодическим и зависит от продолжительности и особенностей программного обеспечения. [11]
Планирование испытаний
[ редактировать ]Тестирование надежности обходится дороже по сравнению с другими типами тестирования. Таким образом, при проведении испытаний на надежность требуется правильное управление и планирование. Этот план включает в себя процесс тестирования, который необходимо реализовать, данные о его среде, график тестирования, точки тестирования и т. д.
Проблемы при разработке тест-кейсов
[ редактировать ]Некоторые распространенные проблемы, возникающие при разработке тестовых примеров, включают в себя:
- Тестовые случаи можно разработать, просто выбрав только допустимые входные значения для каждого поля в программном обеспечении. Когда в определенный модуль вносятся изменения, предыдущие значения могут фактически не тестировать новые функции, появившиеся после старой версии программного обеспечения.
- В программном обеспечении могут быть некоторые критические прогоны, которые не обрабатываются ни одним из существующих тестовых примеров. Поэтому необходимо обеспечить, чтобы все возможные типы тестовых примеров были рассмотрены путем тщательного выбора тестовых примеров. [11]
Повышение надежности посредством тестирования
[ редактировать ]Исследования при разработке и проектировании программного обеспечения помогают повысить надежность продукта. Тестирование надежности по существу проводится для устранения режима отказа программного обеспечения. Испытания на срок службы продукта всегда следует проводить после завершения части проекта или, по крайней мере, завершения проектирования в целом. [12] Анализ отказов и улучшение конструкции достигаются посредством испытаний.
Тестирование роста надежности
[ редактировать ][12] Это тестирование используется для проверки новых прототипов программного обеспечения, которые изначально должны часто выходить из строя. Выявляются причины отказов и принимаются меры по уменьшению дефектов. Предположим, T — общее накопленное время прототипа. n(T) — количество отказов от начала до времени T. График n(T)/T представляет собой прямую линию. Этот график называется графиком Дуэйна. Можно узнать, какую надежность можно получить после всех остальных циклов испытаний, и исправить это.
решение уравнения 1 относительно n(T),
где K - это e^b. Если значение альфа в уравнении равно нулю, надежность не может быть повышена, как ожидалось, при заданном количестве отказов. Если альфа больше нуля, совокупное время T увеличивается. Это объясняет, что количество ошибок не зависит от длины теста.
Разработка тест-кейсов для текущей версии
[ редактировать ]Если в текущую версию программного обеспечения добавляются новые функции, то написание тестового примера для этой операции выполняется иначе.
- Сначала спланируйте, сколько новых тестовых примеров нужно написать для текущей версии.
- Если новая функция является частью какой-либо существующей функции, поделитесь с ними тестовыми примерами новых и существующих функций.
- Наконец, объедините все тестовые примеры из текущей версии и предыдущей и запишите все результаты. [11]
Существует предопределенное правило для расчета количества новых тестовых случаев для программного обеспечения. Если N — вероятность возникновения новых операций для новой версии программного обеспечения, R — вероятность появления используемых операций в текущей версии, а T — количество всех ранее использованных тестовых примеров, тогда
Оценка надежности на основе эксплуатационных испытаний
[ редактировать ]Метод эксплуатационного тестирования используется для проверки надежности программного обеспечения. Здесь проверяется, как программное обеспечение работает в соответствующей операционной среде. Основная проблема этого типа оценки – создание такой операционной среды. Такой тип моделирования наблюдается в некоторых отраслях, таких как атомная промышленность, авиастроение и т. д. Прогнозирование будущей надежности является частью оценки надежности.
Для проверки надежности программного обеспечения используются два метода эксплуатационного тестирования:
- Оценка надежности установившегося режима
- В этом случае мы используем обратную связь от поставляемых программных продуктов. В зависимости от этих результатов мы можем предсказать будущую надежность следующей версии продукта. Это похоже на выборочное тестирование физических продуктов.
- Прогнозирование роста надежности
- Этот метод использует документацию процедуры тестирования. Например, рассмотрим разработанное программное обеспечение и то, что мы создаем различные новые версии этого программного обеспечения. Мы учитываем данные тестирования каждой версии и на основе наблюдаемой тенденции прогнозируем надежность новой версии ПО. [13]
Оценка и прогноз роста надежности
[ редактировать ]При оценке и прогнозировании надежности программного обеспечения мы используем модель роста надежности. В процессе работы программного обеспечения любые данные о его отказах сохраняются в статистической форме и передаются в качестве входных данных в модель роста надежности. Используя эти данные, модель роста надежности может оценить надежность программного обеспечения.
Много данных о модели роста надежности доступно благодаря вероятностным моделям, претендующим на представление процесса отказа. Но не существует модели, которая лучше всего подходила бы для всех условий. Поэтому мы должны выбирать модель, исходя из подходящих условий.
Оценка надежности на основе безотказной работы
[ редактировать ]В этом случае надежность программного обеспечения оценивается с использованием следующих допущений:
- Если обнаружен дефект, то будет ли его кто-то устранять.
- Исправление дефекта не окажет никакого влияния на надежность программного обеспечения.
- Каждое исправление в программном обеспечении является точным. [13]
См. также
[ редактировать ]- Тестирование программного обеспечения
- Нагрузочное тестирование
- Регрессионное тестирование
- Инженерия надежности
- Список моделей надежности программного обеспечения
Ссылки
[ редактировать ]- ^ Надежность программного обеспечения . Хоанг Фам.
- ^ Jump up to: а б Э. Э. Льюис. Введение в инженерию надежности .
- ^ «МТТФ» .
- ^ Рекомендуемая практика IEEE по надежности программного обеспечения , IEEE, doi : 10.1109/ieeestd.2017.7827907 , ISBN 978-1-5044-3648-9
- ^ Роджер Прессман (1982). Программная инженерия: подход практикующего специалиста . МакГроу Хилл.
- ^ «Подходы к тестированию надежности и постановка целей тестирования надежности» .
- ^ Адитья П. Матур. Основы тестирования программного обеспечения . Публикации Пирсона.
- ^ Справочник по надежности и жизненным испытаниям . Дмитрий Кечечиоглу.
- ^ Статистическая основа оценки надежности программного обеспечения . М. Се.
- ^ Моделирование надежности программного обеспечения . М. Се.
- ^ Jump up to: а б с д и ж Джон Д. Муса (2004). Проектирование надежности программного обеспечения: более надежное программное обеспечение, быстрее и дешевле . МакГроу-Хилл. ISBN 0-07-060319-7 .
- ^ Jump up to: а б Э.Э. Ливис (15 ноября 1995 г.). Введение в инженерию надежности . ISBN 0-471-01833-3 .
- ^ Jump up to: а б «Проблема оценки надежности». CiteSeerX 10.1.1.104.9831 .
{{cite web}}
: Отсутствует или пусто|url=
( помощь )