N-버전 프로그래밍
N-version programmingN-버전 프로그래밍(NVP)은 다변수 프로그래밍 또는 다중 버전 이종 소프트웨어로도 알려져 있으며, 기능적으로 동등한 여러 프로그램이 동일한 초기 사양에서 독립적으로 생성되는 소프트웨어 엔지니어링의 방법이나 프로세스다.[1] N버전 프로그래밍의 개념은 1977년 "프로그래밍 노력의 독립성이 프로그램의 둘 이상의 버전에서 동일한 소프트웨어 결함이 발생할 확률을 크게 감소시킬 것"[1][2]이라는 중앙 추측과 함께 리밍 첸과 알기르다스 아비지에니스에 의해 도입되었다. NVP의 목적은 내결함성 또는 중복성에 구축함으로써 소프트웨어 운용의 신뢰성을 향상시키는 것이다.[1]
NVP 접근법
N-버전 프로그래밍의 일반적인 단계는 다음과 같다.
- 소프트웨어의 의도된 기능성에 대한 초기 사양이 개발된다. 규격은 함수, 데이터 형식(비교 벡터, c-벡터 및 비교 상태 표시기, cs-indicator 포함), 교차 체크 포인트(cc-points), 비교 알고리즘 및 비교 알고리즘에 대한 응답을 명확히 정의해야 한다.[1][2]
- 명세서로부터, 둘 이상의 버전의 프로그램은 각각 다른 버전과 상호 작용하지 않는 그룹에 의해 독립적으로 개발된다.[1] 기능적으로 동등한 프로그램의 구현은 서로 다른 알고리즘과 프로그래밍 언어를 사용한다.[1] 프로그램의 다양한 지점에서 프로그램이 N-버전 실행 환경(NVX)에 의해 제어될 수 있도록 하는 특별한 메커니즘이 소프트웨어에 내장되어 있다.[2] 이러한 특별한 메커니즘에는 비교 벡터(c-벡터, 프로그램 상태를 나타내는 데이터 구조), 비교 상태 지표(cs-indicator), 동기화 메커니즘이 포함된다.[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]
- 그는 "n버전 프로그래밍은 독립성이 통계적으로 독립적인 실수로 이어질 것이라는 가정을 하기 때문에 n-버전 프로그래밍으로부터 완전한 잠재력을 실현하는 것에 대해 상당한 논쟁이 있었다. 증거에 따르면 이 전제는 결함이 있을 수 있다 [12]. [1]
적용들
N-버전 프로그래밍은 열차의 개폐, 현대 항공기에 대한 비행 제어 연산 수행, 전자 투표(SAVE 시스템), 제로 데이 악용 검출 등에서 소프트웨어에 적용되었다.[2][3][4]
참고 항목
참조
- ^ a b c d e f g N-Version Programming: 소프트웨어 운영의 신뢰성에 대한 결함-관용 접근법, Liming Chen; Avizienis, A, Fault-Tolertant Computing, 1995, '25년의 하이라이트', 1995년 6월 27-30일 Vol, Iss, 1995년 6월 11페이지:3
- ^ a b c d e f A.A. Avizienis, "N-버전 프로그래밍의 방법론" 2005-11-03 Wayback Machine, Software Fault Tolerance에 보관, M에 의해 편집. 류, 존 와일리 & 선즈, 1995년
- ^ a b c d e 리버드, 소이니. N-버전 전자 투표 시스템(Sergy). 매사추세츠 공과대학교. 2004년 전기 공학 및 컴퓨터 과학 학부.
- ^ a b c Lajos Nagy, Richard Ford, William Allen. 제로 데이 악용 탐지를 위한 N-버전 프로그래밍. 2006년 4월 플로리다 데이토나 비치에서 열린 2006 IEEE 사이버 보안 관련 주제 회의.
- ^ 나이트, J. C.와 Leveson, N. G. 1986. 다단계 프로그래밍에서 독립성 가정에 대한 실험적 평가. IEEE 트랜스. 소프트w. Eng. 12, 1 (1986년 1월), 96-109.
- ^ 나이트, J. C.와 리본, N. G. 1990. 나이트&레브슨 실험의 비판에 대한 회신. SIGSoft Softw. 영어 노트 15, 1 (1990년 1월), 24-35.