Тестирование надежности программного обеспечения

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

Обзор

Надежность программного обеспечения — это вероятность того, что программное обеспечение будет работать правильно в указанной среде и в течение заданного периода времени. Используя следующую формулу, вероятность отказа вычисляется путем тестирования выборки всех доступных входных состояний. Среднее время между отказами (MTBF) = Среднее время до отказа (MTTF) + Среднее время ремонта (MTTR)

Вероятность = Количество неуспешных случаев / Общее количество рассматриваемых случаев

Набор всех возможных входных состояний называется входным пространством. Чтобы найти надежность программного обеспечения, нам нужно найти выходное пространство из заданного входного пространства и программного обеспечения. [1]

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

  1. время работы,
  2. количество циклов включения-выключения,
  3. и календарное время.

Если ограничения касаются времени работы или если фокус на первой точке улучшения, то можно применить ускорения сжатого времени, чтобы сократить время тестирования. Если фокус на календарном времени (т.е. если есть предопределенные сроки), то используется усиленное стресс-тестирование . [2] [4]

Измерение

Доступность программного обеспечения измеряется средним временем наработки на отказ (MTBF). [5]

MTBF состоит из среднего времени до отказа (MTTF) и среднего времени ремонта (MTTR). MTTF — это разница во времени между двумя последовательными отказами, а MTTR — это время, необходимое для устранения отказа. [6]

М Т Б Ф = М Т Т Ф + М Т Т Р {\displaystyle MTBF=MTTF+MTTR}

Устойчивая доступность отображает процент работоспособности программного обеспечения.

А = М Т Т Ф М Т Т Ф + М Т Т Р = М Т Т Ф М Т Б Ф {\displaystyle A={\frac {MTTF}{MTTF+MTTR}}={\frac {MTTF}{MTBF}}}

Например, если MTTF для программного обеспечения = 1000 часов, то программное обеспечение должно работать в течение 1000 часов непрерывной работы.

Для того же программного обеспечения, если MTTR = 2 часа, то . М Т Б Ф = 1000 + 2 = 1002 {\displaystyle MTBF=1000+2=1002}

Соответственно, А = 1000 / 1002 0,998 {\displaystyle A=1000/1002\приблизительно 0,998}

Надежность программного обеспечения измеряется с точки зрения частоты отказов ( ). λ {\displaystyle \лямбда}

λ = 1 М Т Б Ф {\displaystyle \lambda ={\frac {1}{MTBF}}}
Р ( т ) = е λ т {\displaystyle R(t)=e^{-\lambda \cdot t}}

Надежность программного обеспечения — это число от 0 до 1. Надежность увеличивается, когда ошибки или дефекты в программе устраняются. [7] Существует множество моделей роста надежности программного обеспечения (SRGM) ( Список моделей надежности программного обеспечения ), включая логарифмическую, полиномиальную, экспоненциальную, степенную и S-образную.

Цели проверки надежности

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

Вторичные цели

Второстепенными целями испытаний на надежность являются:

  1. Найти перцептивную структуру повторяющихся неудач.
  2. Найти количество отказов, произошедших за определенный промежуток времени.
  3. Чтобы найти средний срок службы программного обеспечения.
  4. Выявить основную причину неудачи.
  5. Проверка работоспособности различных модулей программного обеспечения после проведения профилактических мероприятий.

Точки определения целей

Некоторые ограничения на создание целей включают в себя:

  1. Поведение программного обеспечения должно быть определено в заданных условиях.
  2. Цель должна быть достижимой.
  3. Должны быть предусмотрены временные ограничения. [8]

Важность проверки надежности

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

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

Чтобы проверить надежность программного обеспечения путем тестирования:

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

Виды испытаний на надежность

Тестирование надежности программного обеспечения включает в себя тестирование функций, нагрузочное тестирование и регрессионное тестирование . [11]

Тестирование функций

Тестирование функций проверяет функции, предоставляемые программным обеспечением, и проводится в следующие этапы:

  • Каждая операция в программном обеспечении выполняется один раз.
  • Взаимодействие между двумя операциями сокращается и
  • Каждая операция проверяется на правильность ее выполнения.

За функциональным тестом следует нагрузочный тест. [11]

Тест под нагрузкой

Этот тест проводится для проверки производительности программного обеспечения при максимальной рабочей нагрузке. Любое программное обеспечение работает лучше до определенного объема рабочей нагрузки, после чего время отклика программного обеспечения начинает ухудшаться. Например, веб-сайт можно протестировать, чтобы увидеть, сколько одновременных пользователей он может поддерживать без ухудшения производительности. Это тестирование в основном помогает для баз данных и серверов приложений . Нагрузочное тестирование также требует тестирования производительности программного обеспечения , которое проверяет, насколько хорошо некоторое программное обеспечение работает под рабочей нагрузкой. [11]

Регрессионный тест

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

Планирование испытаний

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

Проблемы при разработке тестовых случаев

Вот некоторые распространенные проблемы, возникающие при разработке тестовых случаев:

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

Повышение надежности посредством тестирования

Исследования в ходе разработки и проектирования программного обеспечения помогают повысить надежность продукта. Тестирование надежности в основном выполняется для устранения режима отказа программного обеспечения. Тестирование срока службы продукта всегда должно проводиться после завершения части проектирования или, по крайней мере, завершения всего проектирования. [12] Анализ отказов и улучшение дизайна достигаются посредством тестирования.

Тестирование роста надежности

[12] Это тестирование используется для проверки новых прототипов программного обеспечения, которые изначально должны часто выходить из строя. Причины сбоев выявляются, и принимаются меры по сокращению дефектов. Предположим, что T — это общее накопленное время для прототипа. n(T) — это количество сбоев от начала до времени T. График, нарисованный для n(T)/T, представляет собой прямую линию. Этот график называется графиком Дуэйна. Можно узнать, насколько можно повысить надежность после всех других циклов тестирования, и исправить это.

л н [ н ( Т ) Т ] = α л н ( Т ) + б ;                               . . . . . Э д : 1 {\displaystyle {\begin{alignedat}{5}ln\left[{\frac {n\left(T\right)}{T}}\right]=-\alpha ln\left(T\right)+b;\ \ \ \ \ \ \ \ \ \ \ \ \ \ .....Уравнение:1\end{alignedat}}}

решая ур.1 относительно n(T),

н ( Т ) = К Т 1 α ;                                       . . . . . . Э д : 2 {\displaystyle {\begin{alignedat}{5}n\left(T\right)=KT^{1-\alpha };\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ......Уравнение:2\end{alignedat}}}

где K — это e^b. Если значение альфа в уравнении равно нулю, надежность не может быть улучшена, как ожидалось, для заданного числа отказов. Для альфа больше нуля кумулятивное время T увеличивается. Это объясняет, что число отказов не зависит от длины теста.

Разработка тестовых случаев для текущей версии

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

  • Сначала спланируйте, сколько новых тестовых случаев необходимо написать для текущей версии.
  • Если новая функция является частью какой-либо существующей функции, то поделитесь с ними тестовыми примерами новых и существующих функций.
  • Наконец, объедините все тестовые случаи из текущей версии и предыдущей и запишите все результаты. [11]

Существует предопределенное правило для расчета количества новых тестовых случаев для программного обеспечения. Если N — вероятность появления новых операций для нового выпуска программного обеспечения, R — вероятность появления используемых операций в текущем выпуске, а T — количество всех ранее использованных тестовых случаев, то

        Н е ж Т е с т с а с е  с  ( с ты г г е н т г е л е а с е )   =  (   Н Р   )   Т       {\displaystyle {\begin{alignedat}{5}NewTestcases_{(currentrelease)}=\left({\frac {N}{R}}\right)*T\end{alignedat}}} 

Оценка надежности на основе эксплуатационных испытаний

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

Для проверки надежности программного обеспечения при эксплуатационном тестировании используются два метода:

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

Оценка и прогнозирование роста надежности

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

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

Оценка надежности на основе безотказной работы

В этом случае надежность программного обеспечения оценивается с использованием следующих предположений:

  • Если обнаружен дефект, то кто-то его устранит?
  • Устранение дефекта не повлияет на надежность программного обеспечения.
  • Каждое исправление в программном обеспечении является точным. [13]

Смотрите также

Ссылки

  1. ^ Надежность программного обеспечения . Хоанг Фам.
  2. ^ ab EELewis (1988). "Введение в технику надежности". Ядерная технология . 82 (2): 235. Bibcode : 1988NucTe..82..235K. doi : 10.13182/NT88-A34110.
  3. ^ "Ср.время до отказа".
  4. ^ Рекомендуемая практика IEEE по надежности программного обеспечения , IEEE, doi :10.1109/ieeestd.2017.7827907, ISBN 978-1-5044-3648-9
  5. ^ Роджер Прессман (1982). Программная инженерия: подход практиков . McGraw Hill. ISBN 978-0-07-050781-4.
  6. ^ «Подходы к тестированию надежности и установление целей тестирования надежности».
  7. ^ Адитья П. Матур. Основы тестирования программного обеспечения . Pearson publications.
  8. ^ Справочник по надежности и ресурсным испытаниям . Димитрий Кеджечиоглу.
  9. ^ Статистическая основа для оценки надежности программного обеспечения . М. Се.
  10. ^ Моделирование надежности программного обеспечения . М. Се.
  11. ^ abcdef Джон Д. Муса (2004). Инженерия надежности программного обеспечения: более надежное программное обеспечение, более быстрое и дешевое . McGraw-Hill. ISBN 0-07-060319-7.
  12. ^ ab EELiwis (1995-11-15). Введение в технику надежности . ISBN 0-471-01833-3.
  13. ^ ab "Проблема оценки надежности". CiteSeerX 10.1.1.104.9831 .  {{cite web}}: Отсутствует или пусто |url=( помощь )
  • Среднее время между отказами
  • Тестирование срока службы программного обеспечения
Взято с "https://en.wikipedia.org/w/index.php?title=Тестирование_надежности_программного_обеспечения&oldid=1272005128"