NASA의 개발자는 프로그래밍 세계에서 가장 어려운 직업 중 하나입니다. 이들은 코드를 작성하고 안전한 미션 크리티컬 애플리케이션을 개발하는 데 주력합니다.
이 경우 엄격한 코딩 규칙을 따르는 것이 중요합니다. 이러한 규칙은 소프트웨어 코딩 방법, 사용해야 하는 언어 기능 등과 같은 소프트웨어 개발의 여러 측면을 다룹니다.
좋은 코딩 표준에 동의하기는 어렵지만 NASA JPL(제트 추진 연구소)에서는 "Powers of Ten: Rules for Development Secure Critical Code"라는 코딩 규칙을 고수합니다.
JPL은 오랫동안 C 언어를 사용해왔기 때문에 이 규칙은 주로 C 프로그래밍 언어로 작성하는 데 적용됩니다. 그러나 이러한 규칙은 다른 프로그래밍 언어에도 쉽게 적용될 수 있습니다.
JPL의 수석 과학자인 Gerard J. Holzmann이 개발한 이 엄격한 코딩 규칙은 주로 보안에 중점을 두고 있습니다.
NASA의 미션 크리티컬 코드 작성을 위한 10가지 규칙:
1. 모든 코드를 매우 간단한 제어 흐름 구조로 제한합니다. goto 문, setjmp 또는 longjmp 구조, 간접 또는 직접 재귀 호출이 없습니다.
2. 모든 루프에는 고정된 상한이 있어야 합니다. 루프가 미리 설정된 반복 상한에 도달할 수 없는지 탐지 도구를 통해 정적으로 확인해야 합니다. 이 상한을 정적으로 증명할 수 없는 경우 이 원칙을 위반한 것으로 간주될 수 있습니다.
3. 초기화 후에는 동적 메모리 할당을 사용하지 마세요.
4. 한 줄에 하나의 명령문, 한 줄에 하나의 선언이라는 표준 형식을 참조할 경우 함수의 길이는 종이 한 장을 초과해서는 안 됩니다. 일반적으로 이는 함수당 60줄 이하의 코드를 의미합니다.
5. 코드의 어설션 밀도는 평균적으로 함수당 2개의 어설션만큼 낮습니다. 어설션은 실제 실행에서 발생할 가능성이 없는 상황을 감지하는 데 사용됩니다. 어설션에는 부작용이 없어야 하며 부울 테스트로 정의되어야 합니다. 어설션이 실패하면 어설션에 실패한 함수 호출자에게 오류 조건을 반환하는 등 명시적인 복구 작업이 수행되어야 합니다. 정적 도구의 경우, 절대 실패하지 않거나 실행되지 않는다는 것을 정적 도구로 입증할 수 있는 모든 주장은 이 규칙을 위반합니다(예를 들어, 쓸모 없는 주장(true) 문을 추가하여 이 규칙을 충족하는 것은 불가능합니다).
6. 데이터 개체는 가장 작은 범위에서 선언되어야 합니다.
7. void가 아닌 함수의 반환 값은 함수가 호출될 때마다 확인되어야 하며, 해당 매개변수의 유효성은 각 함수 내에서 확인되어야 합니다.
8. 전처리기의 사용은 헤더 파일과 간단한 매크로 정의를 포함하는 것으로 제한됩니다. 기호 접합, 가변 인수 목록(타원) 및 재귀 매크로 호출은 허용되지 않습니다. 모든 매크로는 완전한 구문 단위로 확장 가능해야 합니다. 조건부 컴파일 지시문의 사용은 종종 모호하지만 항상 피할 수 있는 것은 아닙니다. 이는 대규모 소프트웨어 개발에서도 헤더 파일을 여러 번 포함하지 않는 표준 관행을 넘어서 하나 또는 두 개 이상의 조건부 컴파일 지시문에 대한 타당한 이유가 있어야 함을 의미합니다. 코드에서 이 작업을 수행할 때마다 도구 기반 검사기에 의해 플래그가 지정되어야 하며 그럴 만한 이유가 있습니다.
9. 포인터 사용은 제한되어야 합니다. 특히 포인터 역참조 수준은 1개 이하이어야 합니다. 포인터 역참조 작업은 매크로 정의나 유형 선언에 암시적으로 포함될 수 없습니다. 또한 함수 포인터는 허용되지 않습니다.
10. 개발 첫날부터 컴파일러에서 가장 높은 수준의 경고 옵션을 켜서 코드를 컴파일해야 합니다. 이 설정에서 코드는 경고 없이 컴파일되어야 합니다. 코드는 하루에 한 번 이상 소스 코드 정적 분석 도구를 사용하여 검사해야 하며 경고 없이 통과해야 합니다.
이러한 규칙과 관련하여 NASA는 다음과 같이 말했습니다.
이 규칙은 자동차의 안전벨트와 같습니다. 처음에는 조금 불편할 수도 있지만, 시간이 지나면 습관이 되어 사용하지 않을 수 없게 됩니다.
작가 소개:
Adarsh Verma는 Fossbytes의 공동 창립자입니다. 그는 항상 오픈 소스, 기술적 혁신 및 완전성에 세심한 관심을 기울인 존경받는 기업가입니다. 이메일을 통해 그에게 연락할 수 있습니다 — [email protected]
위 내용은 훌륭한 NASA 프로그래머를 위한 10가지 프로그래밍 원칙의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!