Программирование N-версии - N-version programming

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

Подход NVP

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

  1. Разработана начальная спецификация предполагаемой функциональности программного обеспечения. Спецификация должна недвусмысленно определять: функции, форматы данных (которые включают векторы сравнения, c-векторы и индикаторы состояния сравнения, cs-индикаторы), точки перекрестного контроля (cc-points), алгоритм сравнения и ответы на алгоритм сравнения.[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. ^ а б c d е ж грамм Программирование N-версии: отказоустойчивый подход к надежности работы программного обеспечения, Лиминг Чен; Авизиенис А., Отказоустойчивые вычисления, 1995, «Основные моменты двадцати пяти лет». Двадцать пятый международный симпозиум по теме, выпуск, 27-30 июня 1995 г., страницы: 113-
  2. ^ а б c d е ж А.А. Авизенис, "Методология программирования N-версииВ архиве 2005-11-03 на Wayback Machine, Software Fault Tolerance, под редакцией М. Лю, John Wiley & Sons, 1995.
  3. ^ а б c d е Либурд, Сойини. An N-версия системы электронного голосования (Диссертация). Массачусетский Институт Технологий. Кафедра электротехники и компьютерных наук, 2004 г.
  4. ^ а б c Лайош Надь, Ричард Форд и Уильям Аллен. Программирование N-версии для обнаружения эксплойтов нулевого дня. Тематическая конференция IEEE по кибербезопасности 2006 г., Дейтона-Бич, Флорида, апрель 2006 г.
  5. ^ Найт, Дж. К. и Левесон, Н. Г. 1986. Экспериментальная оценка предположения о независимости в многоверсионном программировании. IEEE Trans. Софтв. Англ. 12, 1 (январь 1986 г.), 96–109.
  6. ^ Найт, Дж. К. и Левесон, Н. Г. 1990. Ответ на критику эксперимента Найта и Левесона. SIGSOFT Softw. Англ. Примечания 15, 1 (январь 1990 г.), 24–35.

внешняя ссылка