Статья опубликована в рамках: Научного журнала «Студенческий» № 8(8)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2
ВОЗМОЖНЫЕ МЕТОДЫ ОЦЕНКИ НАДЕЖНОСТИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
В статье рассмотрены особенности современных взглядов на оценку надежности программного обеспечения и определены общие подходы к решению вопросов повышения объективности этих подходов. Рассмотрена возможность применения методов из классической теории надежности для оценки надежности и отказоустойчивости программного обеспечения.
Ключевые слова: программное обеспечение, надежность программного обеспечения, тестирование компьютерных программ, оценка надежности, ошибка в программе, отказ программы, структурные схемы надежности, автоматизация бизнес-процессов
Если только представить, какую долю всех бизнес-процессов компаний во всем мире охватывает автоматизация, то вопрос об актуальности исследований может быть снят. Актуальность и важность вопроса становится очевидной. Если взглянуть на историю развития информационных технологий, то можно сказать, что с середины двадцатого века началась разработка программ, которые являлись не сложными по своей структуре. Но со временем тенденции изменились, технический прогресс позволил нам получить невероятные вычислительные возможности
И сейчас с большой долей уверенности можно сказать, что в первую очередь на рынке востребовано технически сложное программное обеспечение.
Сегодня программное обеспечение редко используется для решения лишь одной задачи, а требуется комплексная автоматизация бизнес-процессов компании или множества компаний [1]. И эти условия диктует, прежде всего, сам бизнес, ведь не адаптируясь к этим условиям, компания быстро становится неконкурентоспособной. Поэтому над новыми заказами трудится внушительная команда специалистов. Кроме того, нередко специалистам приходится сопровождать унаследованное программное обеспечение, реинжиниринг или доработка которого, также ведет к его значительному усложнению и увеличивает возможное количество ошибок.
В итоге, компания получает потенциально низко-надежное программное обеспечение и сталкивается с проблемами по оценке надежности и принятию мер для обеспечения безотказной работы.
Интерес к изучению вопроса о надежности программного обеспечения возник совсем недавно, в связи с усложнением разрабатываемых программ и повышением требований к автоматизации. Область остается очень молодой и разработки, которые существуют сейчас, к сожалению, не удовлетворяют требованиям современного мира. Существующих моделей надежностей программного обеспечения немного, и они не отвечают на многие вопросы, а полагаются в большей степени на статистику, собранную при тестировании.
В связи с вышесказанным можно выделить основную цель в вопросе исследований надежности программного обеспечения – это повышение его отказоустойчивости. Так же можно выделить основные задачи изучения надежности:
Найти как можно больше ошибок. Условимся, что аппаратное обеспечение достаточно надежно, чтобы не принимать во внимание его возможные отказы. В таком случае вся ответственность будет возлагаться на разработчика. И основной задачей данного этапа остается поиск и исправление максимально возможного числа ошибок программы. Исправляя ошибки, специалист повышает надежность программы.
Выявить потенциально уязвимые места в программе и обеспечить некоторую избыточность, которая позволит избежать отказов.
Возникает вполне справедливый вопрос, как оценить вероятность отказа, не зная, сколько ошибок допустил разработчик? Именно на эти вопросы и стремятся ответить существующие модели надежности программного обеспечения.
Данные модели надежности неплохо работают, если нам необходимо оценить надежность небольшого участка программы. Но когда речь идет о технически сложном и масштабном программном продукте, то, например, внести достаточное количество искусственных ошибок по модели Миллса для репрезентативной оценки – слишком трудоемкая задача [2]
Нужно отметить, что современное программное обеспечение рекомендуется разрабатывать с учетом иерархичности и модульности. Каждый модуль или программный блок, представляет собой часть программы, для которой можно оценить вероятность отказа или вероятность безотказной работы, используя существующие методы.
Программные блоки могут быть выделены с различной степенью детализации. На рисунке 1 представлена блок-схема алгоритма, где каждый элемент – это группа программных операторов, выполняющая определенные функции.
Рисунок 1. блок-схема алгоритма.
На блок-схеме присутствуют ветвление и цикл. Проверка и выполнение условия всегда приводится к линейному алгоритму, так как нельзя пойти по двум ветвям одновременно. Так же, если условиться, что алгоритм выполняется одним процессором, то и цикл будет выполняться линейно.
Если каждый элемент выделить в отдельный блок, мы получим последовательную линейную схему алгоритма, которая очень похожа на структурные схемы надежности из классической теории надежности технических объектов [3]. На рисунке 2 представлены некоторые возможные структурные схемы надежности по представленному на рисунке 1 алгоритму.
Рисунок 2. некоторые возможные структурные схемы надежности.
Мировой опыт в оценке надежности программных продуктов не большой, но можно предположить, что вполне успешно найдут свое применение в данном вопросе разработки из общепризнанной классической теории надежности технических объектов. Если назвать полученные схемы структурными схемами надежности, тогда возможно оценить вероятность безотказной работы каждого блока по любому выбранному способу, а затем рассчитать вероятность безотказной работы программно системы в целом, применяя правила умножения вероятностей. Таким образом, можно получить оценку надежности всей программы.
Структурные схемы надежности в разрезе программного обеспечения могут быть очень гибким инструментом. Можно так же выбрать степень детализации в зависимости от поставленных целей. Например, детализацию схемы можно выбрать в зависимости от архитектуры программы, либо, если требуется рассмотреть более подробно какой-то вычислительный алгоритм, то каждый блок структурной схемы может включать в себя лишь один оператор языка высокого уровня. При необходимости можно детализировать схему и разобрать надежность одного оператора высокого уровня, оценив вероятность безотказной работы машинной команды.
Структурные схемы - довольно гибкий и наглядный инструмент для комплексной оценки надежности программного обеспечения. Проведя необходимый анализ и наблюдение, воспользовавшись существующими моделями надежности и опытом из классической надежности технических средств, можно получить довольно показательную оценку, на основании которой следует разработать комплекс мер для повышения качества и надежности систем автоматизации.
Список литературы:
- Клюйков, Д. С., Фролов Е.М. Программный модуль автоматизированного анализа экспериментальных данных // Новые материалы и технологии -НМТ-2012 : матер. Всерос. науч.-техн. конф. 20-22 нояб. 2012 г. / МАТИ - Рос. гос. технол. ун-т им. К.Э. Циолковского. – М., 2012. – С. 144-145.
- Липаев В.В. Надежность программных средств. – М.: Синтез, 1998. – 246 с.
- Черкесов Н.Г. Надежность аппаратно-программных комплексов. – СПб.: Питнр, 2005. – 479 с.
Комментарии (1)
Оставить комментарий