N -версия программирования
N Программирование -версий (NVP), также известное как многоверсионное программирование или разнородное программное обеспечение с несколькими версиями , представляет собой метод или процесс в разработке программного обеспечения , при котором несколько функционально эквивалентных программ независимо генерируются из одних и тех же исходных спецификаций. [1] Концепция программирования N -версий была введена в 1977 году Лимингом Ченом и Альгирдасом Авизенисом с центральной гипотезой о том, что «независимость усилий по программированию значительно уменьшит вероятность возникновения идентичных ошибок программного обеспечения в двух или более версиях программы». [1] [2] Целью NVP является повышение надежности работы программного обеспечения за счет обеспечения отказоустойчивости или избыточности . [1]
подход NVP
[ редактировать ]Общие этапы программирования N -версии:
- Разрабатывается первоначальная спецификация предполагаемой функциональности программного обеспечения. В спецификации должны быть однозначно определены: функции, форматы данных (к которым относятся векторы сравнения, c-векторы и индикаторы состояния сравнения, cs-индикаторы), точки перекрестной проверки (cc-points), алгоритм сравнения и ответы на алгоритм сравнения. [1] [2]
- На основе спецификаций независимо разрабатываются две или более версии программы, каждая группой, не взаимодействующей с другими. [1] Реализации этих функционально эквивалентных программ используют разные алгоритмы и языки программирования. [1] В различных точках программы в программное обеспечение встроены специальные механизмы, позволяющие управлять программой со стороны среды выполнения N -версии (NVX). [2] К этим специальным механизмам относятся: векторы сравнения (c-векторы, структура данных, представляющая состояние программы), индикаторы состояния сравнения (cs-индикаторы) и механизмы синхронизации. [1] Полученные программы называются N -версией программного обеспечения (NVS). [2]
- некоторая среда выполнения N Разработана -версии (NVX), которая запускает программное обеспечение N -версии и принимает окончательные решения по программам N -версии в целом, учитывая выходные данные каждой отдельной программы N -версии. [2] Реализация алгоритмов принятия решений может варьироваться от простого принятия наиболее часто встречающегося вывода (например, если большинство версий согласны с каким-то выводом, то он, скорее всего, будет правильным) до более сложного алгоритма. [3]
Критика
[ редактировать ]- Исследователи утверждают, что разные команды программистов могут совершать схожие ошибки. [4] В 1986 году Найт и Левесон провели эксперимент по оценке предположения о независимости NVP. Они обнаружили, что предположение о независимости сбоев в N -версии статистически не удалось. программах [4] [5] [6]
- Слабость программы NVP заключается в алгоритме принятия решений. Вопрос корректности программы NVP частично зависит от алгоритма, который NVX использует для определения того, какой вывод является «правильным», учитывая множество выходных данных каждой отдельной программы N -версии. [3] Теоретически вывод из нескольких независимых версий с большей вероятностью будет правильным, чем вывод из одной версии. [3] Однако ведутся споры о том, достаточны ли улучшения разработки N -версии, чтобы оправдать время, дополнительные требования и затраты на использование метода NVP. [3] В частности, при определенных моделях надежности и проектных усилиях было показано, что улучшения за счет использования НВП меньше, чем если бы все усилия были сосредоточены на повышении надежности одной версии. [7]
- «Были серьезные споры относительно реализации всего потенциала программирования n-версий, поскольку предполагается, что независимость приведет к статистически независимым ошибкам. Факты показали, что эта предпосылка может быть ошибочной [12]». [1]
Приложения
[ редактировать ]Программирование N -версии применялось к программному обеспечению при переключении поездов, выполнении расчетов управления полетом на современных авиалайнерах, электронном голосовании (система SAVE) и обнаружении эксплойтов нулевого дня , среди прочего. [2] [3] [4]
См. также
[ редактировать ]- Резервирование (инжиниринг)
- Тройное модульное резервирование
- Избыточность данных
- Отказоустойчивый дизайн
- Инженерия надежности
- Техника безопасности
Ссылки
[ редактировать ]- ^ Jump up to: а б с д и ж г Программирование N-версии: отказоустойчивый подход к надежности работы программного обеспечения , Лиминг Чен; Авизиенис, А., Отказоустойчивые вычисления, 1995, «Основные события двадцати пяти лет», Двадцать пятый международный симпозиум, том, выпуск, 27-30 июня 1995 г., страниц: 113-
- ^ Jump up to: а б с д и ж А. А. Авизиенис, « Методология программирования N-версий ». Архивировано 3 ноября 2005 г. в Wayback Machine , «Отказоустойчивость программного обеспечения», под редакцией М. Лю, John Wiley & Sons, 1995.
- ^ Jump up to: а б с д и Либурд, Сойини. Система электронного голосования N- версии (Диссертация) . Массачусетский технологический институт. Кафедра электротехники и информатики, 2004 г.
- ^ Jump up to: а б с Лайош Надь, Ричард Форд и Уильям Аллен. Программирование N-версии для обнаружения эксплойтов нулевого дня . Тематическая конференция IEEE по кибербезопасности 2006 г., Дейтона-Бич, Флорида, апрель 2006 г.
- ^ Найт, Дж. К. и Левесон, Н. Г. 1986. Экспериментальная оценка предположения о независимости в многоверсионном программировании . IEEE Транс. Программное обеспечение англ. 12, 1 (январь 1986 г.), 96–109.
- ^ Найт, Дж. К. и Левесон, Н. Г. 1990. Ответ на критику эксперимента Найта и Левесона . Программное обеспечение SIGSOFT. англ. Примечания 15, 1 (январь 1990 г.), 24–35.
- ^ Ша, Л. (июль 2001 г.). «Используя простоту, чтобы контролировать сложность». Программное обеспечение IEEE . 18 (4): 20–28. дои : 10.1109/MS.2001.936213 . ISSN 1937-4194 .