Тестирование надежности ПО — это область тестирования ПО, которая относится к проверке способности ПО функционировать в заданных условиях окружающей среды в течение определенного периода времени. Тестирование надежности ПО помогает обнаружить множество проблем в дизайне и функциональности ПО .
Надежность программного обеспечения — это вероятность того, что программное обеспечение будет работать правильно в указанной среде и в течение заданного периода времени. Используя следующую формулу, вероятность отказа вычисляется путем тестирования выборки всех доступных входных состояний. Среднее время между отказами (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-образную.
Основной целью тестирования надежности является проверка производительности программного обеспечения в заданных условиях без каких-либо корректирующих мер с использованием известных фиксированных процедур с учетом его спецификаций.
Второстепенными целями испытаний на надежность являются:
Некоторые ограничения на создание целей включают в себя:
Применение компьютерного программного обеспечения перешло во многие различные области, причем программное обеспечение является неотъемлемой частью промышленных, коммерческих и военных систем. Из-за его многочисленных применений в критически важных для безопасности системах надежность программного обеспечения в настоящее время является важной областью исследований. Хотя программная инженерия становится самой быстроразвивающейся технологией прошлого века, не существует полной, научной, количественной меры для ее оценки. Тестирование надежности программного обеспечения используется как инструмент для оценки этих технологий программной инженерии. [9]
Для улучшения производительности программного продукта и процесса разработки программного обеспечения требуется тщательная оценка надежности. Тестирование надежности программного обеспечения важно, поскольку оно очень полезно для менеджеров и практиков программного обеспечения. [10]
Чтобы проверить надежность программного обеспечения путем тестирования:
Тестирование надежности программного обеспечения включает в себя тестирование функций, нагрузочное тестирование и регрессионное тестирование . [11]
Тестирование функций проверяет функции, предоставляемые программным обеспечением, и проводится в следующие этапы:
За функциональным тестом следует нагрузочный тест. [11]
Этот тест проводится для проверки производительности программного обеспечения при максимальной рабочей нагрузке. Любое программное обеспечение работает лучше до определенного объема рабочей нагрузки, после чего время отклика программного обеспечения начинает ухудшаться. Например, веб-сайт можно протестировать, чтобы увидеть, сколько одновременных пользователей он может поддерживать без ухудшения производительности. Это тестирование в основном помогает для баз данных и серверов приложений . Нагрузочное тестирование также требует тестирования производительности программного обеспечения , которое проверяет, насколько хорошо некоторое программное обеспечение работает под рабочей нагрузкой. [11]
Регрессионное тестирование используется для проверки того, были ли введены новые ошибки в результате предыдущих исправлений ошибок. Регрессионное тестирование проводится после каждого изменения или обновления функций программного обеспечения. Это тестирование является периодическим и зависит от длины и функций программного обеспечения. [11]
Тестирование надежности является более дорогостоящим по сравнению с другими типами тестирования. Таким образом, при проведении тестирования надежности требуется надлежащее управление и планирование. Этот план включает в себя процесс тестирования, который должен быть реализован, данные о его среде, график тестирования, контрольные точки и т. д.
Вот некоторые распространенные проблемы, возникающие при разработке тестовых случаев:
Исследования в ходе разработки и проектирования программного обеспечения помогают повысить надежность продукта. Тестирование надежности в основном выполняется для устранения режима отказа программного обеспечения. Тестирование срока службы продукта всегда должно проводиться после завершения части проектирования или, по крайней мере, завершения всего проектирования. [12] Анализ отказов и улучшение дизайна достигаются посредством тестирования.
[12] Это тестирование используется для проверки новых прототипов программного обеспечения, которые изначально должны часто выходить из строя. Причины сбоев выявляются, и принимаются меры по сокращению дефектов. Предположим, что T — это общее накопленное время для прототипа. n(T) — это количество сбоев от начала до времени T. График, нарисованный для n(T)/T, представляет собой прямую линию. Этот график называется графиком Дуэйна. Можно узнать, насколько можно повысить надежность после всех других циклов тестирования, и исправить это.
решая ур.1 относительно n(T),
где K — это e^b. Если значение альфа в уравнении равно нулю, надежность не может быть улучшена, как ожидалось, для заданного числа отказов. Для альфа больше нуля кумулятивное время T увеличивается. Это объясняет, что число отказов не зависит от длины теста.
Если в текущую версию программного обеспечения добавляются новые функции, то написание тестового случая для этой операции выполняется иначе.
Существует предопределенное правило для расчета количества новых тестовых случаев для программного обеспечения. Если N — вероятность появления новых операций для нового выпуска программного обеспечения, R — вероятность появления используемых операций в текущем выпуске, а T — количество всех ранее использованных тестовых случаев, то
Метод эксплуатационного тестирования используется для проверки надежности программного обеспечения. Здесь проверяется, как работает программное обеспечение в соответствующей ему эксплуатационной среде. Основная проблема этого типа оценки заключается в построении такой эксплуатационной среды. Такой тип моделирования наблюдается в некоторых отраслях, таких как атомная промышленность, авиастроение и т. д. Прогнозирование будущей надежности является частью оценки надежности.
Для проверки надежности программного обеспечения при эксплуатационном тестировании используются два метода:
При оценке и прогнозировании надежности программного обеспечения мы используем модель роста надежности. В процессе эксплуатации программного обеспечения любые данные о его отказе сохраняются в статистической форме и подаются в качестве входных данных в модель роста надежности. Используя эти данные, модель роста надежности может оценить надежность программного обеспечения.
Доступно много данных о модели роста надежности с вероятностными моделями, претендующими на представление процесса отказа. Но нет модели, которая лучше всего подходит для всех условий. Поэтому мы должны выбрать модель на основе соответствующих условий.
В этом случае надежность программного обеспечения оценивается с использованием следующих предположений:
{{cite web}}
: Отсутствует или пусто |url=
( помощь )