Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

N -версионное программирование (NVP), также известное как многоверсионное программирование или многоверсионное разнородное программное обеспечение , представляет собой метод или процесс в разработке программного обеспечения, при котором несколько функционально эквивалентных программ независимо генерируются из одних и тех же исходных спецификаций. [1] Концепция программирования N- версии была введена в 1977 году Лимингом Ченом и Альгирдасом Авизиенисом с центральной гипотезой о том, что «независимость усилий по программированию значительно снизит вероятность возникновения идентичных ошибок программного обеспечения в двух или более версиях программы». . [1] [2] Целью NVP является повышение надежности работы программного обеспечения путем встраиванияотказоустойчивость или избыточность . [1]

Подход NVP [ править ]

Общие шаги программирования N- версии:

  1. Разработана начальная спецификация предполагаемой функциональности программного обеспечения. Спецификация должна однозначно определять: функции, форматы данных (которые включают векторы сравнения, c-векторы и индикаторы состояния сравнения, cs-индикаторы), точки перекрестного контроля (cc-точки), алгоритм сравнения и ответы на алгоритм сравнения. [1] [2]
  2. На основе спецификаций независимо друг от друга разрабатываются две или более версии программы, каждая из которых не взаимодействует с другими. [1] Реализации этих функционально эквивалентных программ используют разные алгоритмы и языки программирования. [1] В различных точках программы в программное обеспечение встроены специальные механизмы, которые позволяют управлять программой с помощью среды выполнения N- версии (NVX). [2] К этим специальным механизмам относятся: векторы сравнения (c-векторы, структура данных, представляющая состояние программы), индикаторы состояния сравнения (cs-индикаторы) и механизмы синхронизации. [1] Полученные программы называются N-версия программного обеспечения (NVS). [2]
  3. Разработана некоторая среда выполнения N- версии (NVX), которая запускает программное обеспечение N- версии и принимает окончательные решения по программе N- версии в целом с учетом результатов каждой отдельной программы N- версии. [2] Реализация алгоритмов принятия решений может варьироваться от простой, например, принятие наиболее часто встречающихся выходных данных (например, если большинство версий согласны с некоторыми выходными данными, то это, вероятно, будет правильным) до более сложных алгоритмов. [3]

Критика [ править ]

  • Исследователи утверждают, что разные команды программистов могут совершать похожие ошибки. [4] В 1986 году Knight & Leveson провели эксперимент по оценке предположения о независимости в NVP, они обнаружили, что предположение о независимости от сбоев в программах N- версии статистически не выполняется. [4] [5] [6]
  • Слабость программы NVP заключается в алгоритме принятия решения. Вопрос о правильности программы NVP частично зависит от алгоритма, который использует NVX для определения того, какой вывод является «правильным» с учетом множества выводов каждой отдельной программы N- версии. [3] Теоретически вывод нескольких независимых версий с большей вероятностью будет правильным, чем вывод одной версии. [3] Однако ведутся споры о том, достаточно ли улучшений в разработке N- версии, чтобы оправдать время, дополнительные требования и затраты на использование метода NVP. [3]
  • «Было много споров относительно реализации полного потенциала программирования n-версий, поскольку в нем делается предположение, что независимость приведет к статистически независимым ошибкам. Факты показали, что это предположение может быть ошибочным [12] ». [1]

Приложения [ править ]

Программирование в N- версии применялось к программному обеспечению при переключении поездов, выполнении вычислений управления полетом на современных авиалайнерах, электронном голосовании (система SAVE) и обнаружении уязвимостей нулевого дня , среди прочего. [2] [3] [4]

См. Также [ править ]

Ссылки [ править ]

  1. ^ a b c d e f g Программирование N-версии: отказоустойчивый подход к надежности работы программного обеспечения , Лиминг Чен; Авизиенис А., Отказоустойчивые вычисления, 1995, «Основные моменты двадцати пяти лет». Двадцать пятый международный симпозиум по теме, выпуск, 27-30 июня 1995 г., страницы: 113-
  2. ^ Б с д е ф A.A. Авизенис, « Методология программирования N-версии ». Архивировано 3 ноября 2005 г. на Wayback Machine , Software Fault Tolerance, под редакцией М. Лю, John Wiley & Sons, 1995.
  3. ^ a b c d e Либурд, Сойини. Система электронного голосования N- версии (Диссертация) . Массачусетский Институт Технологий. Кафедра электротехники и компьютерных наук, 2004 г.
  4. ^ a b c Лайош Надь, Ричард Форд и Уильям Аллен. Программирование N-версии для обнаружения эксплойтов нулевого дня . Тематическая конференция IEEE по кибербезопасности 2006 г., Дейтона-Бич, Флорида, апрель 2006 г.
  5. ^ Knight, JC и Leveson, NG 1986. Экспериментальная оценка предположения о независимости в многоверсионном программировании . IEEE Trans. Софтв. Англ. 12, 1 (январь 1986 г.), 96–109.
  6. ^ Knight, JC и Leveson, NG 1990. Ответ на критику эксперимента Knight & Leveson . SIGSOFT Softw. Англ. Примечания 15, 1 (январь 1990 г.), 24–35.

Внешние ссылки [ править ]

  • Программирование N-версии в RKBExplorer