Обеспечение программного обеспечения
Обеспечение качества программного обеспечения ( SWA ) — это важнейший процесс разработки программного обеспечения, который обеспечивает надежность, безопасность и защищенность программных продуктов. [1] Он включает в себя различные виды деятельности, включая анализ требований, обзор проекта, проверку кода, тестирование и формальную проверку. Одним из важнейших компонентов обеспечения безопасности программного обеспечения являются методы безопасного кодирования, которые соответствуют принятым в отрасли стандартам и передовым практикам, например, тем, которые изложены Институтом программной инженерии (SEI) в их стандартах безопасного кодирования CERT (SCS). [2]
Еще одним важным аспектом обеспечения качества программного обеспечения является тестирование, которое должно проводиться на различных этапах процесса разработки программного обеспечения и может включать функциональное тестирование , тестирование производительности и тестирование безопасности . [3] Тестирование помогает выявить любые дефекты или уязвимости в программных продуктах до их выпуска. Кроме того, гарантия программного обеспечения включает в себя организационные и управленческие практики, такие как управление рисками и управление качеством, чтобы гарантировать, что программные продукты соответствуют потребностям и ожиданиям заинтересованных сторон. [4]
Целью гарантии программного обеспечения является обеспечение того, чтобы программное обеспечение не имело уязвимостей и функционировало так, как предполагалось, а также соответствовало всем требованиям и стандартам, регулирующим процесс разработки программного обеспечения. [3] Кроме того, гарантия программного обеспечения направлена на создание более безопасных программно-интенсивных систем. Для достижения этой цели необходим превентивный динамический и статический анализ потенциальных уязвимостей, а также рекомендуется целостное понимание на уровне системы. Анализ архитектурных рисков играет важную роль в любой программе безопасности программного обеспечения, поскольку недостатки проектирования составляют 50% проблем безопасности, и их невозможно обнаружить, глядя только на код. [5]
Следуя принятым в отрасли стандартам и лучшим практикам, включая методы тестирования и управления, а также проводя анализ архитектурных рисков, гарантия программного обеспечения может минимизировать риск сбоев системы и нарушений безопасности, что делает ее критически важным аспектом разработки программного обеспечения.
Инициативы
[ редактировать ]Инициативы по обеспечению качества программного обеспечения — это программы и мероприятия, предназначенные для обеспечения качества, надежности и безопасности программных систем. Эти инициативы важны, поскольку программное обеспечение используется в широком спектре приложений, от бизнес-операций до критической инфраструктуры, а дефекты или уязвимости в программном обеспечении могут иметь серьезные последствия.
Существует несколько типов инициатив по обеспечению качества программного обеспечения, в том числе:
- Сертификация и аккредитация. Эти программы устанавливают стандарты и рекомендации по разработке программного обеспечения и проверяют соответствие программных продуктов этим стандартам. Сертификация и аккредитация могут помочь гарантировать, что программные продукты надежны, безопасны и соответствуют нормам и отраслевым стандартам. [6]
- Обучение и образование. Эти инициативы предоставляют разработчикам программного обеспечения знания и навыки, необходимые для создания высококачественного и безопасного программного обеспечения. Обучение и образование могут включать курсы по тестированию программного обеспечения, методам безопасного кодирования, а также отраслевым стандартам и передовым практикам. [7]
- Анализ и тестирование кода. В этих инициативах используются инструменты и методы для анализа кода программного обеспечения и выявления дефектов и уязвимостей. Анализ и тестирование кода могут включать, среди прочего, статический анализ, динамический анализ и нечеткое тестирование. [8]
- Моделирование угроз и оценка рисков. Эти инициативы оценивают потенциальные риски и угрозы для программной системы и определяют стратегии по снижению этих рисков. Моделирование угроз и оценка рисков могут помочь обеспечить устойчивость программных систем к атакам и другим угрозам. [21]
Почему гарантия программного обеспечения имеет значение?
[ редактировать ]В современном цифровом мире программное обеспечение используется для управления широким спектром устройств и систем, включая автомобили , медицинские устройства , финансовые системы и военную технику . Поэтому обеспечение надежности и безопасности программных продуктов имеет решающее значение. Без надлежащего тестирования и проверки программное обеспечение может содержать дефекты и уязвимости, которые могут привести к сбоям системы, нарушениям безопасности и другим серьезным проблемам с негативными последствиями для отдельных лиц, бизнеса и общества в целом. [9]
Национальный институт стандартов и технологий (NIST) определяет гарантию программного обеспечения как «уровень уверенности в том, что программное обеспечение не содержит уязвимостей, либо намеренно заложенных в программное обеспечение, либо случайно вставленных в любой момент в течение его жизненного цикла, и что программное обеспечение функционирует должным образом». предполагаемым образом» [22] . Организации могут снизить риск дорогостоящих сбоев систем, утечки данных и других негативных последствий, обеспечив гарантию программного обеспечения.
Помимо потенциальных рисков, связанных с дефектами и уязвимостями программного обеспечения, существуют законодательные и нормативные требования, связанные с обеспечением качества программного обеспечения. Несоблюдение этих правил может повлечь за собой юридические и финансовые санкции. Например, на организации, разрабатывающие программное обеспечение для определенных отраслей, могут распространяться правила, требующие от них обеспечения безопасности и защищенности своих продуктов.
Многие критически важные функции, такие как национальная оборона, банковское дело, здравоохранение, телекоммуникации, авиация и контроль опасных материалов, зависят от правильной и предсказуемой работы программного обеспечения. [10] Если программно-емкие системы, поддерживающие эту деятельность, выйдут из строя, они могут быть серьезно нарушены. Поэтому организациям крайне важно внедрить методы и инструменты тестирования и проверки программного обеспечения, чтобы снизить риск сбоев системы и нарушений безопасности.
Исполнение
[ редактировать ]Проверка программного обеспечения осуществляется посредством ряда мероприятий, направленных на обеспечение надежности, безопасности и защищенности программных продуктов. Эти действия включают анализ требований, обзор проекта, проверку кода, тестирование и формальную проверку. [1]
- Анализ требований включает идентификацию и определение функциональных и нефункциональных требований к программному продукту. Это включает понимание цели программного обеспечения, его предполагаемых пользователей, а также любых соответствующих стандартов или правил, которые должны соблюдаться. [11]
- Анализ проекта включает в себя оценку проекта программного обеспечения, чтобы убедиться, что он соответствует требованиям и реализуем. Это включает в себя проверку конструктивных недостатков, ошибок или упущений, которые могут повлиять на надежность, безопасность или защищенность программного обеспечения. [24]
- Инспекции кода включают проверку кода на предмет его соответствия принятым в отрасли стандартам и передовым практикам. Сюда входит проверка качества кода, его читаемости и удобства сопровождения, а также выявление потенциальных уязвимостей или проблем безопасности. [2]
- Тестирование включает в себя выполнение программного обеспечения для выявления дефектов или уязвимостей, которые могут повлиять на его надежность, безопасность или защищенность. Это включает в себя функциональное тестирование, тестирование производительности и тестирование безопасности, а также другие типы тестирования. [3]
- Формальная проверка предполагает использование математических или логических методов для доказательства того, что программное обеспечение ведет себя так, как задумано, и не содержит каких-либо дефектов или уязвимостей. Сюда входят такие методы, как проверка модели, доказательство теорем и статический анализ. [1]
Техники
[ редактировать ]Тестирование и проверка программного обеспечения — это методы, используемые для выявления и устранения дефектов и уязвимостей в программном коде. Существует несколько типов методов тестирования и проверки, включая функциональное тестирование, тестирование производительности и тестирование безопасности. [3]
- Машинное обучение все чаще используется в проверке программного обеспечения для обнаружения проблем с программным обеспечением. Благодаря способности анализировать большие объемы данных машинное обучение может выявлять закономерности и аномалии, которые могут остаться незамеченными людьми. Использование машинного обучения может в конечном итоге улучшить качество и безопасность программного обеспечения. [12]
- Функциональное тестирование используется для проверки того, что программное обеспечение выполняет те функции, для которых оно предназначено. Этот тип тестирования включает в себя запуск программного обеспечения и тестирование его функций и возможностей, чтобы убедиться, что оно работает должным образом. [4]
- Тестирование производительности используется для измерения скорости, отзывчивости и стабильности программного обеспечения. Этот тип тестирования включает моделирование реальных сценариев, чтобы убедиться, что программное обеспечение может справиться с нагрузкой и хорошо работать в различных условиях. [4]
- Тестирование безопасности используется для выявления уязвимостей и недостатков программного обеспечения, которые могут быть использованы злоумышленниками. Этот тип тестирования предполагает использование различных методов для взлома безопасности программного обеспечения, таких как тестирование на проникновение и сканирование уязвимостей. [3]
- Помимо тестирования, проверки используются методы , чтобы убедиться в правильности программного кода и отсутствии дефектов. Сюда входят такие методы, как обзоры кода, формальная проверка и статический анализ. [1]
- Проверка кода включает проверку кода на соответствие принятым в отрасли стандартам и передовым практикам. Сюда входит проверка качества кода, его читаемости и удобства сопровождения, а также выявление потенциальных уязвимостей или проблем безопасности. [2]
- Формальная проверка предполагает использование математических или логических методов для доказательства того, что программное обеспечение ведет себя так, как задумано, и не содержит каких-либо дефектов или уязвимостей. Сюда входят такие методы, как проверка модели, доказательство теорем и статический анализ. [1]
- Статический анализ предполагает анализ программного кода без его выполнения для выявления потенциальных дефектов или уязвимостей. Сюда входят такие методы, как инструменты анализа кода и проверки кода. [2]
Инструменты
[ редактировать ]Инструменты тестирования и проверки программного обеспечения используются для выявления и устранения дефектов и уязвимостей в программном коде. Существует несколько типов инструментов тестирования и проверки, в том числе:
- Искусственный интеллект (ИИ) все чаще используется в сфере обеспечения безопасности программного обеспечения для выявления и устранения дефектов и уязвимостей в программном коде. Такие методы искусственного интеллекта, как машинное обучение и обработка естественного языка, можно использовать для автоматизации процессов тестирования и проверки, делая их быстрее и эффективнее. [13]
- Инструменты статического анализа . Эти инструменты анализируют исходный код программного приложения без его выполнения, чтобы выявить потенциальные дефекты или уязвимости. Инструменты статического анализа можно использовать для обнаружения проблем, связанных с качеством кода, безопасностью и соответствием стандартам кодирования. [14]
- Инструменты динамического анализа . Эти инструменты анализируют поведение программного приложения во время его работы, чтобы выявить дефекты или уязвимости, которые могут не быть очевидными в исходном коде. Инструменты динамического анализа можно использовать для обнаружения проблем, связанных с производительностью, использованием памяти и безопасностью. [25]
- Инструменты нечеткого тестирования. Эти инструменты генерируют случайные входные данные для программного приложения, чтобы проверить его устойчивость к неожиданным или искаженным данным. Инструменты нечеткого тестирования можно использовать для обнаружения проблем, связанных с проверкой ввода, управлением памятью и безопасностью. [25]
- Инструменты тестирования на проникновение. Эти инструменты имитируют атаки на программное приложение, чтобы выявить уязвимости, которыми могут воспользоваться злоумышленники. Инструменты тестирования на проникновение можно использовать для обнаружения проблем, связанных с безопасностью, таких как внедрение SQL, межсайтовый скриптинг и переполнение буфера. [15]
- Инструменты управления тестированием . Эти инструменты используются для управления процессом тестирования программного обеспечения, включая создание тестовых примеров, выполнение и составление отчетов. Инструменты управления тестированием могут помочь обеспечить проведение всех необходимых тестов, а также отслеживание и устранение дефектов. [24]
Альтернативные определения
[ редактировать ]Министерство внутренней безопасности США (DHS)
[ редактировать ]По данным DHS , гарантия программного обеспечения направлена на:
- Надежность – не существует уязвимостей, которые можно было бы использовать, как злонамеренно, так и непреднамеренно;
- Предсказуемое выполнение — обоснованная уверенность в том, что программное обеспечение при запуске функционирует так, как задумано;
- Соответствие — запланированный и систематический набор междисциплинарных действий, обеспечивающих соответствие программных процессов и продуктов требованиям, стандартам/процедурам.
Содействующие дисциплины SwA, сформулированные в совокупности знаний и основных компетенций: разработка программного обеспечения, системная инженерия, разработка безопасности информационных систем, обеспечение информации, тестирование и оценка, безопасность, безопасность, управление проектами и приобретение программного обеспечения. [16]
Обеспечение безопасности программного обеспечения — это стратегическая инициатива Министерства внутренней безопасности США (DHS), направленная на обеспечение целостности, безопасности и надежности программного обеспечения. Программа SwA основана на Национальной стратегии по обеспечению безопасности киберпространства – действие/рекомендация 2-14:
«DHS будет способствовать национальным государственно-частным усилиям по распространению лучших практик и методологий, которые способствуют целостности, безопасности и надежности при разработке программного кода, включая процессы и процедуры, которые уменьшают вероятность появления ошибочного кода, вредоносного кода или лазеек, которые могут быть взломаны. введено во время разработки». [17] Существуют программные инструменты с открытым исходным кодом для обеспечения безопасности программного обеспечения, которые помогают выявлять потенциальные уязвимости безопасности. [18]
Министерство обороны США (DoD)
[ редактировать ]Для Министерства обороны SwA определяется как «уровень уверенности в том, что программное обеспечение функционирует только так, как задумано, и не содержит уязвимостей, намеренно или непреднамеренно созданных или вставленных как часть программного обеспечения, на протяжении всего жизненного цикла». [19] Министерство обороны развивает SwA как надежную практику системного проектирования, о чем свидетельствуют две недавние публикации, финансируемые JFAC, а разработки возглавляются Институтом программной инженерии (SEI) и экспертами-практиками из Военных служб и АНБ. Руководство по SwA для менеджера программы показывает, как следует планировать, обеспечивать ресурсами и управлять SwA, а в Руководстве для разработчика рекомендуются адаптированные технические методы на протяжении всего жизненного цикла. [20] Оба эти документа являются первыми в своем роде и награждены. [21] Двумя организациями корпоративного масштаба, участвующими в создании возможностей SwA Министерства обороны, являются Объединенный федеративный центр обеспечения безопасности (JFAC). [22] и Сообщество практиков Министерства обороны США, которое работало как ежеквартальный коллегиальный форум, проводя 32 собрания подряд. Оба открыты для других частей правительства США. Устав JFAC доступен на его веб-сайте. Чтобы расширить ситуационную осведомленность о семействах коммерчески доступных инструментов SwA, JFAC профинансировал Институт оборонного анализа (IDA) для создания информационного ресурса о современном состоянии (SOAR). [23] Недавним нововведением в «инжиниринге» SwA на протяжении всего жизненного цикла является объединение выбранных элементов управления NIST 800-53 с инженерными задачами, так что результаты проектирования определяют структуру управления рисками (RMF) и побуждают к эксплуатации (ATO). Пакет, включающий описания элементов данных (DID), машиночитаемые форматы отчетов об уязвимостях и краткий обзор применения методов, доступен на веб-сайте JFAC. Другие прорывные инновации находятся в стадии разработки.
Проект Software Assurance Metrics and Tool Evaluation (SAMATE)
[ редактировать ]По данным проекта NIST SAMATE, [24] Обеспечение безопасности программного обеспечения — это «запланированный и систематический набор действий, который гарантирует, что программные процессы и продукты соответствуют требованиям, стандартам и процедурам, чтобы помочь достичь:
- Надежность – не существует уязвимостей, которые можно было бы использовать, как злонамеренного, так и непреднамеренного происхождения.
- Предсказуемое выполнение — оправданная уверенность в том, что программное обеспечение при запуске работает так, как задумано».
Национальное управление по аэронавтике и исследованию космического пространства (НАСА)
[ редактировать ]По мнению НАСА , обеспечение качества программного обеспечения — это «запланированный и систематический набор действий, который гарантирует, что программные процессы и продукты соответствуют требованиям, стандартам и процедурам. Он включает в себя дисциплины обеспечения качества, проектирования качества, проверки и валидации, отчетности о несоответствиях и корректирующих действий». действия, обеспечение безопасности и обеспечение безопасности и их применение в течение жизненного цикла программного обеспечения». Стандарт обеспечения программного обеспечения НАСА также гласит: «Применение этих дисциплин в течение жизненного цикла разработки программного обеспечения называется гарантией программного обеспечения». [25]
Группа управления объектами (OMG)
[ редактировать ]По мнению OMG , гарантия программного обеспечения — это «оправданная надежность в достижении установленных целей бизнеса и безопасности». [26]
Специальная группа по интересам SwA OMG (SIG), [27] работает с целевыми группами по платформам и доменам, а также другими организациями и группами индустрии программного обеспечения, внешними по отношению к OMG, для координации создания общей структуры для анализа и обмена информацией, связанной с надежностью программного обеспечения, путем содействия разработке спецификации для платформы Software Assurance Framework. [28] это будет:
- Создайте общую структуру свойств программного обеспечения, которую можно использовать для представления любых/всех классов программного обеспечения, чтобы поставщики и покупатели программного обеспечения могли представлять свои претензии и аргументы (соответственно), а также соответствующие доказательства, используя автоматизированные инструменты (для решения проблемы масштаба).
- Перед приобретением продукта убедитесь, что продукты в достаточной степени удовлетворяют этим характеристикам, чтобы системные инженеры/интеграторы могли использовать эти продукты для создания (составления) с их помощью более крупных гарантированных систем.
- Позволить отрасли улучшить прозрачность текущего состояния обеспечения качества программного обеспечения во время разработки программного обеспечения.
- Дать возможность отрасли разрабатывать автоматизированные инструменты, поддерживающие общую структуру.
Форум Software Assurance для улучшения программирования (SAFECode)
[ редактировать ]Согласно SAFECode , гарантия программного обеспечения — это «уверенность в том, что программное обеспечение, оборудование и услуги свободны от преднамеренных и непреднамеренных уязвимостей и что программное обеспечение функционирует так, как задумано». [29]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Ставру А., Бос Х., Портокалидис Г. и ван дер Мейден Р. (2017). Обеспечение программного обеспечения: дорожная карта . 60(1), 71-79: Сообщения ACM.
{{cite book}}
: CS1 maint: местоположение ( ссылка ) CS1 maint: несколько имен: список авторов ( ссылка ) - ^ СЭИ (й). Стандарты безопасного кодирования CERT . Институт программной инженерии.
- ^ ИСО (2015). ISO/IEC/IEEE 12207:2015 — Системная и программная инженерия . Процессы жизненного цикла программного обеспечения. ИСО.
- ^ ИИЭР (2019). IEEE 730-2019 — Стандарт IEEE для процессов обеспечения качества программного обеспечения . IEEE.
- ^ МакГроу, Гэри (2006). Безопасность программного обеспечения: построение безопасности в . Аддисон-Уэсли. п. 75. ИСБН 0-321-35670-5 .
- ^ «Гарантия программного обеспечения: что это такое и зачем мне это нужно?» (PDF) . Департамент внутренней безопасности .
- ^ Моделирование угроз . Майкрософт.
- ^ «Система рабочей силы NICE в области кибербезопасности» . НИСТ . Национальный институт стандартов и технологий. 13 ноября 2019 г.
- ^ «Гарантия программного обеспечения» . Национальный институт стандартов и технологий (NIST).
- ^ «Гарантия программного обеспечения» . Институт программной инженерии (SEI).
- ^ ИИЭР (2018). IEEE 1012-2016 — Стандарт IEEE для проверки и валидации систем и программного обеспечения . IEEE.
- ^ Х. Гиссума, А. Лаубер, А. Мкадем, Э. Сакс (2019). «Виртуальная тестовая среда для эффективной проверки обновлений программного обеспечения автомобильных систем с большим количеством вариантов» . Международная системная конференция IEEE 2019 (Sys Con ) . IEEE. стр. 1–8. дои : 10.1109/SYSCON.2019.8836898 . ISBN 978-1-5386-8396-5 . S2CID 199015634 .
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Дж. Гао, К. Тао, Д. Цзе, С. Лул (2019). Что такое тестирование программного обеспечения ИИ? и почему . Международная конференция IEEE по сервис-ориентированной системной инженерии (SOSE) 2019 г.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Глигорич М., Лопес К.В. и Пасареану К.С. Тестирование и анализ программного обеспечения в реальном мире . Коммуникации АКМ. п. 58(4), 66-75.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Ким Дж., Кантарчиоглу М. и Турайсингем Б. (2016). Проблемы безопасности и конфиденциальности в больших данных . Журнал больших данных. п. 3(1), 1-14.
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Обеспечьте безопасность дома (2 декабря 2011 г.). «DHS обеспечивает безопасность на веб-портале» . Создайте Securityin.us-cert.gov. Архивировано из оригинала 17 мая 2006 года . Проверено 8 мая 2013 г.
- ^ Обеспечьте безопасность дома (2 декабря 2011 г.). «Создайте безопасность в доме» . Создайте Securityin.us-cert.gov. Архивировано из оригинала 17 мая 2006 года . Проверено 8 мая 2013 г.
- ^ «Инструменты обеспечения открытого исходного кода (программного обеспечения)» . Архивировано из оригинала 11 сентября 2014 года.
- ^ ПУБЛИЧНЫЙ ЗАКОН 112–239 — ЯНВАРЬ. 2, 2013 г., ЗАКОН О РАЗРЕШЕНИИ НАЦИОНАЛЬНОЙ ОБОРОНЫ НА 2013 ФИНАНСОВЫЙ ГОД, раздел 933.
- ^ https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=538756 и https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=538771
- ^ и https://www.isc2.org/News-and-Events/Press-Room/Posts/2019/06/17/ISC2-Announces-2019-Information-Security-Leadership-Awards-Government-Winners
- ^ ПУБЛИЧНЫЙ ЗАКОН 113–66 — ДЕКАБРЬ. 26, 2013, ЗАКОН О РАЗРЕШЕНИИ НА НАЦИОНАЛЬНУЮ ОБОРОНУ НА 2014 ФИНАНСОВЫЙ ГОД, раздел 937
- ^ «Современные ресурсы» . ИДА . Проверено 27 сентября 2023 г.
- ^ "Главная страница - проект SAMATE" . Samate.nist.gov . Проверено 8 мая 2013 г.
- ^ NASA-STD-2201-93. Архивировано 2 июля 2006 г., в Wayback Machine "Стандарт обеспечения программного обеспечения", 10 ноября 1992 г.
- ^ Специальная группа по интересам (SIG) OMG Software Assurance (SwA) http://adm.omg.org/SoftwareAssurance.pdf. Архивировано 29 сентября 2011 г. на Wayback Machine и http://swa.omg.org/docs/softwareassurance. .v3.pdf Архивировано 12 октября 2006 г. в Wayback Machine.
- ^ «Омг Сва Сиг» . Swa.omg.org. 26 февраля 2010 г. Архивировано из оригинала 3 декабря 2020 г. . Проверено 8 мая 2013 г.
- ^ ИТ-система, соответствующая CISQ , omg.org [ мертвая ссылка ]
- ^ «Гарантия программного обеспечения: обзор лучших отраслевых практик» (PDF) . Архивировано из оригинала (PDF) 13 мая 2013 года . Проверено 8 мая 2013 г.
Внешние ссылки
[ редактировать ]- Информационный ресурс DHS «Build Security In»
- Портал сообщества практиков DHS SwA
- Проект NIST Software Assurance Metrics and Tool Evaluation (SAMATE)
- Группа управления объектами SwA SIG. Архивировано 3 декабря 2020 г. в Wayback Machine.
- Форум Software Assurance для улучшения программирования (SAFECode)
- Руководство и стандарт NASA по обеспечению качества программного обеспечения (см. обеспечение качества в IEEE 610.12 Стандартный глоссарий терминологии разработки программного обеспечения IEEE).
- Отчет о современном состоянии обеспечения безопасности программного обеспечения (SOAR)