В работе рассматривается проблематика повышения надежности программных архитектур. Проблемы взаимодействия наукоемких дисциплин при решении задач надежности отказоустойчивых архитектур. Актуальность вопроса уязвимости и надежности системы в целом.
Разрабатываемое программное обеспечение может обладать различной степенью надежности как при проектировании, так и в конечном решении. На надежность его будут влиять множество факторов. Большинство отрицательных факторов можно исключить путем применения различных методик и принципов написания программного кода. Качество конечного программного продукта, поставляемого на открытый рынок, является определяющим фактором для успеха и конкурентоспособности предприятий, занятых в данной сфере. Недостаточная надежность сложных программных средств может нанести ущерб, значительно превышающий положительный эффект от их применения в таких критических областях как управление движением, технологические процессы, оборона, медицина, финансовые операции, космические технологии. При работе таких систем недопустимы программные сбои.
Шалыгин В. Ф. пишет: «Уязвимость компьютерной системы — это присущее системе неудачное свойство, которое может привести к реализации угрозы». [5] А также, как таковая уязвимость хорошо описана в работах Грибунина В. Г. и Чудовского В. В.: «Уязвимость — это некая слабость, которая дает возможность выявить характерные особенности и недостатки объекта защиты, облегчающие проникновение злоумышленника к охраняемым сведениям». [3, с.10] Поэтому данное свойство уязвимого программное обеспечение, вызванное разными факторами, в том числе и ошибками в программном коде, негативно влияет на надежность системы в целом. В данном аспекте необходимо повышать надежность системы различными методами как аппаратно, так и программно. К охраняемым сведениям может относится любая информация: персональная, коммерческая, конфиденциальная и т. д.
Повышение надежности программного обеспечения может вести по разным известным методикам, применяя промежуточное тестирование на различных этапах создания, применять различные правила исключающие ошибки в коде, использовать фаззинг и т. д. При всем при этом остаются «неизвестные» факторы влияющие не только на стабильную работу итогового продукта, но и на безопасность при его использовании в целом, при этом не учитываются условия при которых возможны или присущи недекларируемые возможности. Проблема заключается в самой концепции написания программного продукта. Любой программный продукт, с потенциальной уязвимостью в программном коде, ставит под угрозу безопасность различных системы: автоматизированных, автономных и т. д. Еще одна проблематика надежности программного обеспечения — это использование потенциально надежного продукта в потенциально ненадежной среде, за исключением программных средств спецификой который и является выявления уязвимостей в небезопасных средах.
Другая проблема заключается во взаимодействии различных областей знаний при создании программной среды. Как правило компания или отдельная группа программистов опираются на ограниченное количество условий и используют как правило навыки и знания одной или двух областей. При всем при этом основополагающий фактор остается цена итогового продукта в которую включены все издержки создания. Стремление быстро выпустить на рынок программный продукт, компания разработчик опирается именно на критерий при котором она получит наибольшую прибыль. Таким образом, надежность данных программных продуктов остается на низком уровне. Во внимание не берутся программные продукты, которые проходят государственное лицензирование в соответствующих органах.
Однако применение других научных знаний, либо прибегнув к специалистам из других областей например таких как системный анализ и применения их решения, могло бы повысить надежность программных архитектур, на стадии написания кода. Алгоритмы применяемые в данных областях оказали бы положительную тенденцию в развитии повышения надежности программных архитектур. Очевидно, что решая данную проблему в системном анализе мы получим показатели надежности. Существующие модели оценки надежности позволяют произвести оценку качественных показателей программного обеспечения на основании данных, полученных при тестировании. Все модели надежности подразделяются на аналитические и эмпирические. Аналитические модели позволяют измерить и оценить количественные показатели надежности, основываясь на данных о поведении программы в процессе ее тестирования. Эмпирические модели основаны на анализе структурной особенности программного обеспечения. В них рассматривается зависимость показателей надежности от количества межмодульных связей, циклов в модулях и т. д. Эмпирические модели включены в классификационную схему, так как они позволяют выявить взаимосвязь между сложностью автоматизированных систем обработки данных и их надежностью. Эти модели используются на этапе проектирования ПО, когда осуществляется разбиение будущей системы на модули и известна общая структура системы. В совокупности этих теорий разработчики бы получили большее представление о правильности написания программного кода. Специальные алгоритмы и методы использующиеся в задачах системного анализа могли бы не просто повысить надежность программного продукта на любой стадии готовности, но и создать саму концепцию написания кода. На данный момент существуют сугубо специфичные отказоустойчивые программные архитектуры, решая проблему надежности, с помощью эволюционных алгоритмов, но как таковой основы для любых сред, специфик, самой концепции нет.
Учитывая сложность и размеры современных программных систем, для решения задачи поиска оптимального варианта архитектуры, соответствующего наибольшей надежности будущей системы при допустимых затратах на ее разработку, требуется развитие модельно-алгоритмического аппарата, позволяющего автоматизировать этап архитектурного проектирования.
Таким образом рассчитать тяжесть последствий при отказе программных продуктов, а также недополученную прибыль на время их восстановления, очень сложно, но она будет всегда. А если это связано с защищаемыми данными, в том числе конфиденциальными данными, коммерческой тайной или государственной тайной, стоимостным эквивалентом можно и не ограничиться.
Литература:
1. Бахтизин, В. В. Учебное пособие по дисциплине Надежность программного обеспечения, Минск, 2007.
2. ГОСТ 27.301–95 Надежность в технике. Расчет надежности. Основные положения.
3. Грибунин В. Г., Чудовский В. В. Комплексная система защиты информации на предприятии. Учебное пособие. — М.: Издательский центр «Академия», 2009.
4. Черкесов, Г. Н. Надежность аппаратно-программных комплексов.– СПб.: Питер, 2005.
5. Шальгин В. Ф. информационная безопасность компьютерных систем и сетей. Москва ИД «Форум» Инфра-М, 2008г.
6. Шеенок, Д. А. Инструментальное средство проектирования оптимальной архитектуры отказоустойчивых программных систем // Программная инженерия. № 6. — 2013. — С. 20–26.