본문으로 건너뛰기
고급약 40분

DO-178C 와 설계보증수준(DAL) — 목표·독립성·증거의 구조

항공 탑재 소프트웨어의 승인은 "시험을 했다" 가 아니라 "규격이 정한 목표를 충족했음을 증거로 보였다" 로 이뤄진다. 고장 상태의 심각도가 소프트웨어 수준(DAL A~E) 을 정하고, 수준이 충족할 목표 수와 독립성 요구를 정하는 구조를 따라가고, QA 가 실제로 만드는 계획 문서와 증거 꾸러미를 설계한다.

  • #DO-178C
  • #DAL
  • #설계보증수준
  • #독립성
  • #추적성
  • #항공SW
  • #인증

개념

왜 DO-178C 를 먼저 보는가

국방·항공우주 QA 를 배우는 데 공개 규격인 DO-178C 부터 보는 것이 가장 효율적이다. 이유는 두 가지다.

첫째, 구조가 그대로 드러난다. 위험의 심각도 → 소프트웨어 수준 → 충족할 목표 → 목표마다 요구되는 증거와 독립성이라는 사슬이 명시적으로 짜여 있다. 이 사슬을 한 번 이해하면 다른 규격 환경(레슨 1 의 국방 사업 문서를 포함해) 의 문서를 읽는 속도가 달라진다.

둘째, 공개 자료로 확인할 수 있다. 규격 본문은 유료로 배포되지만, 구조와 수준 구분은 널리 공개되어 있어 인용 가능한 범위가 넓다. 이 레슨에서 숫자를 쓰는 부분은 공개 확인된 범위이고, 목표별 세부 요구와 각 조항의 정확한 문장은 규격 원문에서 확인한다.

다만 선을 그어 둔다. DO-178C 는 "항공기 탑재 소프트웨어" 의 규격이다. 지상 장비, 위성 데이터 처리, 일반 국방 정보체계에 그대로 적용되지 않는다. 사업에 적용되는 규격이 무엇인지는 레슨 1 에서 다룬 대로 사업 문서에서 확인한다.

사슬의 시작 — 심각도가 수준을 정한다

이 체계의 출발점은 소프트웨어가 아니라 고장이 났을 때 항공기와 탑승자에게 무슨 일이 일어나는가 다. 소프트웨어 수준(software level, 흔히 DAL — Design Assurance Level 로 불린다) 은 그 결과의 심각도에서 따라온다.

수준고장 상태(failure condition)
ACatastrophic
BHazardous
CMajor
DMinor
ENo Safety Effect

중요한 함의 — 코드의 복잡도나 규모가 수준을 정하지 않는다. 아주 단순한 코드도 그 고장이 파국적이면 A 이고, 아주 복잡한 코드도 안전 영향이 없으면 E 다. QA 가 받아 드는 수준은 체계 안전 분석의 결과물 이며, QA 가 정하지 않는다. 각 심각도 용어의 정확한 정의와 판정 절차는 체계 안전 쪽 규격·지침에서 확인한다 (정의 문장과 판정 절차 — 원문 확인).

수준이 정하는 것 — 목표 수와 독립성

수준이 정해지면 충족해야 하는 목표(objective) 의 수 와 그중 독립성을 갖고 충족해야 하는 수 가 따라온다. 공개 자료가 널리 인용하는 값은 이렇다.

수준목표 수그중 독립성 요구
A7130
B6918
C625
D262
E00

이 표에서 읽어야 할 것은 숫자 자체가 아니라 모양 이다.

  • A 와 B 의 목표 수 차이는 작다(71 대 69). 반면 독립성 요구는 30 대 18 로 크게 벌어진다. A 와 B 를 가르는 것은 "무엇을 더 하는가" 보다 "누가 하는가" 라는 뜻이다
  • C 에서 독립성이 5 로 떨어지고, D 는 목표 수 자체가 26 으로 줄어든다
  • E 는 목표가 0 이다. 안전 영향이 없다고 분류되면 이 규격의 활동이 요구되지 않는다. 그래서 수준 분류 자체가 사업 비용을 결정하는 지점 이고, 분류를 낮추려는 압력이 생기는 지점이기도 하다

목표 수는 규격의 부속 표(Annex A) 에 수준별로 정리되어 있다. 각 목표의 내용, 요구되는 산출물, 그리고 "with independence" 가 붙는 목표가 구체적으로 무엇인지는 규격 원문의 해당 표에서 확인한다.

독립성은 사람 분리이고, 기록으로 증명된다

"with independence" 는 검증하는 사람이 그 대상을 만든 사람이 아님 을 뜻한다. 요구사항을 쓴 사람이 그 요구사항을 검토하지 않고, 코드를 쓴 사람이 그 코드를 검증하지 않는다. 그리고 그 분리가 문서로 명확히 드러나야 한다.

QA 실무로 옮기면 이렇다.

  • 검토·시험 기록에 작성자와 검증자가 별개 이름으로 남는다
  • 조직적으로 분리가 어려운 소규모 팀에서는 누가 무엇을 만들었고 누가 검증했는지 를 항목 단위로 기록해 분리를 보인다
  • 자동화 도구가 검증을 수행하는 경우, 도구와 그 사용 자체에 조건이 붙는다 (도구 자격 — 뒤에서 다룬다)

독립성에서 가장 흔한 실패는 조직이 아니라 기록 이다. 실제로는 다른 사람이 검증했는데 기록에 그 사실이 보이지 않아 증거가 되지 못한다. QA 가 양식을 설계할 때 작성자·검증자 칸을 분리 해 두는 단순한 조치가 사업 후반의 재작업을 막는다.

생애주기 데이터 — 계획서부터 시작한다

이 체계에서 QA 가 만지는 문서는 시험 절차서 하나가 아니다. 계획 문서가 먼저 나오고, 그 계획대로 했음을 나중에 증거로 보인다.

계획 계열에는 인증 연계 계획, 개발 계획, 검증 계획, 형상관리 계획, 품질보증 계획이 있고, 표준 계열에는 요구사항·설계·코딩 표준이 있다. 그 뒤에 요구사항·설계·소스 코드·실행 코드, 검증 케이스와 절차, 검증 결과, 추적 데이터, 형상 색인, 문제 보고, 그리고 완료를 선언하는 요약 문서가 따른다. 각 문서의 정확한 명칭·약어·요구 내용·제출 시점은 규격 원문과 사업의 인증 계획에서 확인한다(원문 확인).

QA 입장에서 실질적으로 중요한 세 가지는 이렇다.

1) 검증 계획이 시험 설계를 구속한다. "어떤 방법으로 어느 목표를 충족할지" 를 계획에 써서 승인받은 뒤에 시험을 만든다. 계획에 없는 방법으로 얻은 결과는 쓰기 어렵다. 그래서 계획 단계에서 QA 가 참여하지 않으면 나중에 손발이 묶인다.

2) 완료는 선언이 아니라 대조다. 모든 목표에 대해 "이 목표는 이 증거로 충족됐다" 를 표로 맞추는 작업이 마지막에 온다. 그 표를 염두에 두고 처음부터 증거에 목표 식별자 를 달아 두면 마지막이 수월하다.

3) 문제 보고가 생애주기 데이터다. 결함 관리 도구가 아니라 납품 산출물 로 다뤄진다. 결함의 상태 전이와 종결 근거가 추적 가능해야 한다.

검증은 시험만이 아니다

이 체계에서 "검증(verification)" 은 시험보다 넓다. 검토(review), 분석(analysis), 시험(test) 세 수단이 모두 검증 방법으로 쓰인다. 어떤 목표는 시험으로 충족할 수 없고 분석으로만 충족된다.

QA 가 여기서 얻을 실무적 함의는 "시험으로 덮을 수 없는 요구를 알아보는 능력" 이다. 예컨대 특정 조건이 절대 발생하지 않음을 보이는 것은 시험으로 보이기 어렵고 분석의 영역이다. 시험으로 안 되는 것을 억지로 시험으로 덮으려 하면 의미 없는 케이스가 늘어난다. 모듈 58 레슨 2 의 문서 검토 기법과 모듈 58 레슨 1 의 오라클 논의가 여기서 그대로 쓰인다.

요구 층과 양방향 추적

레슨 1 에서 본 층 구조가 이 규격에서는 명시적이다. 상위 요구(high-level requirements) 와 저수준 요구(low-level requirements), 그리고 설계와 코드가 구분되고, 각 층 사이에 추적이 요구된다.

추적은 양방향이다.

  • 위에서 아래로 — 모든 요구가 설계·코드·시험으로 구현·검증되었는가
  • 아래에서 위로 — 구현된 모든 것이 어느 요구에 근거하는가

아래에서 위로의 추적이 중요한 이유는 근거 없는 코드 를 찾아내기 위해서다. 어느 요구에도 대응하지 않는 코드는 요구 누락이거나 불필요한 기능이다. 안전이 걸린 소프트웨어에서 "왜 있는지 설명되지 않는 코드" 는 그 자체로 문제다. 이 관점은 레슨 3 의 구조 커버리지 결과를 해석할 때 다시 쓰인다.

보충 규격 네 종 — 도구와 방법에 붙는 조건

DO-178C 에는 네 개의 보충 문서가 함께 나왔다. 각각 이런 역할이다.

문서다루는 것
DO-330소프트웨어 도구 자격(tool qualification) 고려사항
DO-331모델 기반 개발·검증 보충
DO-332객체지향 기술 및 관련 기법 보충
DO-333정형 기법(formal methods) 보충

QA 가 당장 체감하는 것은 DO-330(도구 자격) 이다. 검증 활동을 도구에 맡기려면 그 도구에 요구되는 조건이 따로 있다. 커버리지 측정 도구, 자동 시험 생성 도구, 정적 분석 도구를 쓰는 것이 자유롭지 않고, 도구를 바꾸는 것도 사업 변경 이다. 실무 함의는 단순하다 — 도구 선택을 QA 가 임의로 하지 않고, 계획 단계에서 합의해 문서에 적는다. 자격 요구의 범위와 구분은 DO-330 원문과 사업의 인증 계획에서 확인한다(원문 확인).

DO-333(정형 기법) 은 공개 자료가 정형 검증을 시험을 보완하되 대체하지는 않는 수단으로 설명한다. "정형 기법을 썼으니 시험을 생략한다" 는 결론으로 가지 않는다는 점이 QA 에게 중요하다. 정확한 적용 조건은 원문에서 확인한다.

실무에서 왜 필요한가

항공·방산 소프트웨어 사업에서 QA 가 후반에 무너지는 가장 흔한 경로는 "시험은 다 했는데 증거가 목표에 매핑되지 않는 것" 이다. 기능은 검증됐고 결함도 잡았는데, 목표 71개에 대해 "이 목표는 이 문서의 이 부분으로 충족됐다" 를 채울 수 없다. 그 시점에 남은 선택은 산출물을 다시 쓰는 것뿐이고, 일정에 그 시간은 없다.

반대로 목표 매핑을 처음부터 걸어 두면 사업이 전혀 다르게 흘러간다. 시험 케이스마다 요구 식별자와 목표 식별자가 붙어 있고, 결과에 작성자·검증자가 분리돼 기록되어 있으면, 마지막 대조는 표 한 장을 생성하는 일이 된다.

그리고 이 구조를 이해하는 것은 일정과 비용을 말할 수 있게 되는 것 이다. "이 기능은 수준 B 입니다" 라는 말에 담긴 작업량 — 목표 69개, 그중 18개는 독립성 요구, 구조 커버리지 요구(레슨 3), 추적 데이터, 계획 문서 — 을 설명할 수 있는 QA 는 착수 협의에서 발언권을 갖는다. 수준 하나가 올라가면 비용이 얼마나 늘어나는지를 근거와 함께 말할 수 있기 때문이다.

채용 관점에서 DO-178 경험은 국내에서 희소하고 해외 이동성이 있는 이력 이다. 항공 전자, 무인기, 위성 탑재 소프트웨어, 그리고 완성차의 기능안전 쪽으로도 문법이 통한다. 공고에는 "DO-178B/C", "DAL", "MC/DC", "인증 대응", "추적성 관리" 같은 말이 적히고, 면접에서는 구조를 설명할 수 있는지 를 본다.

실습 과제

과제 1 — 수준 분류의 영향 설명서 (25분)

가상의 항공 탑재 장비 기능 5개를 상상해 적고(예: 비행 제어 명령 계산, 계기 표시, 정비 로그 기록, 승객 안내 방송, 자가 진단), 각각에 수준을 가정 한다. 수준은 QA 가 정하지 않으므로 "체계 안전 분석에서 이렇게 분류되었다고 가정한다" 고 명시한다.

그 다음 수준이 한 단계 올라가면 무엇이 늘어나는가 를 기능별로 적는다.

  • 목표 수와 독립성 요구의 변화(위 표를 근거로)
  • 늘어나는 산출물
  • 사람 배치의 변화(누가 검증할 수 없게 되는가)
  • 일정 영향의 추정과 그 근거

마지막에 "수준 분류를 낮추자는 제안이 나왔을 때 QA 가 할 말" 을 한 문단으로 쓴다. 분류는 안전 분석의 결과이며 QA 가 협상 대상으로 삼을 수 없다는 점을 포함한다.

과제 2 — 목표 매핑표 설계 (25분)

목표 충족을 증거로 대조하는 매핑표 를 설계한다. 실제 목표 목록은 규격 원문이 필요하므로, 표의 구조와 운영 방식 을 설계하는 것이 과제다.

  • 열 구성(목표 식별자·충족 방법·증거 위치·독립성 여부·검증자·상태)
  • 하나의 증거가 여러 목표를 충족할 때의 표현
  • 미충족·부분 충족 상태의 표기와 그때 함께 적을 것
  • 요구사항이 변경될 때 이 표에서 무엇이 무효가 되는가
  • 표를 자동 생성 하려면 시험 케이스와 결과에 어떤 정보가 있어야 하는가

마지막에 "이 표를 사업 막바지에 처음 만들면 왜 실패하는가" 를 세 가지 이유로 쓴다.

과제 3 — 독립성 기록 양식 (20분)

독립성 요구를 기록으로 증명 하는 양식을 만든다.

  1. 요구사항 검토, 설계 검토, 코드 검증, 시험 절차 검토, 시험 결과 확인 다섯 활동에 대해 각각 작성자·검증자 칸이 분리된 양식을 설계한다
  2. 같은 사람이 양쪽에 들어가면 양식 수준에서 걸리도록 하는 장치를 넣는다
  3. 소규모 팀에서 조직 분리가 어려울 때, 항목 단위로 분리를 보이는 방법을 쓴다
  4. 도구가 검증을 수행한 경우의 기록 방식을 설계한다(도구명·버전·설정·자격 상태)

과제 4 — 검증 수단 배분 (20분)

아래 요구사항들에 대해 검토·분석·시험 중 어느 수단으로 검증할지 배분하고 근거를 적는다. 시험으로 덮을 수 없는 것을 골라내는 것이 요점이다.

  1. "입력값이 허용 범위를 벗어나면 마지막 유효값을 유지한다"
  2. "이 모듈은 동적 메모리 할당을 사용하지 않는다"
  3. "연산 주기는 정해진 주기 안에 완료된다"
  4. "두 입력이 동시에 유효하지 않은 상태는 발생하지 않는다"
  5. "표시 값의 단위는 요구사항에 명시된 단위와 일치한다"
  6. "코딩 표준의 금지 구문을 사용하지 않는다"

각 항목에 대해 시험만으로 충족하려 하면 무엇이 부족한가 를 한 줄 적는다.

과제 5 — 도구 사용 계획 (15분)

검증에 쓸 도구 3개를 가정하고(커버리지 측정, 정적 분석, 시험 실행 자동화) 각각에 대해 계획 문서에 적을 항목을 설계한다.

  • 도구가 수행하는 활동과, 그 결과를 무엇의 증거로 쓰는가
  • 도구 출력이 틀렸을 때 생기는 위험
  • 도구를 바꾸게 되면 무엇을 다시 해야 하는가
  • 자격 요구 여부를 확인할 경로(원문 확인 으로 남길 것)

자가 체크리스트

  • DO-178C 가 항공기 탑재 소프트웨어의 규격이며 다른 영역에 그대로 적용되지 않음을 안다
  • 고장 상태 심각도 → 소프트웨어 수준 → 목표·독립성이라는 사슬을 설명할 수 있다
  • 코드 복잡도나 규모가 수준을 정하지 않는다는 점을 설명할 수 있다
  • 수준 A~E 와 각 수준의 고장 상태 구분을 말할 수 있다
  • 수준별 목표 수와 독립성 요구의 모양(A·B 차이는 주로 독립성) 을 읽어낼 수 있다
  • 수준 E 가 목표 0 이라는 사실이 분류의 비용 함의를 만든다는 것을 안다
  • 독립성이 사람 분리이며 기록으로 증명된다는 점을 설명할 수 있다
  • 작성자·검증자 칸을 분리한 양식이 왜 실질적 조치인지 말할 수 있다
  • 계획 문서가 먼저 나오고 시험 설계가 그것에 구속된다는 순서를 안다
  • 완료가 선언이 아니라 목표-증거 대조라는 것을 알고 목표 식별자를 미리 붙일 수 있다
  • 문제 보고가 납품 산출물로 다뤄진다는 점을 안다
  • 검증이 검토·분석·시험 세 수단이며 시험으로 덮을 수 없는 요구가 있음을 안다
  • 상위 요구·저수준 요구의 구분과 양방향 추적의 목적을 설명할 수 있다
  • 근거 없는 코드를 찾는 것이 아래에서 위로의 추적 목적임을 안다
  • 보충 규격 네 종(DO-330·331·332·333) 의 역할을 구분할 수 있다
  • 도구 자격 요구가 도구 선택과 교체를 제약한다는 실무 함의를 안다
  • 정형 기법이 시험을 대체하지 않는다는 점을 안다

흔한 실수

목표 수를 외워 자신의 근거로 쓴다. 공개 인용 값은 구조를 이해하는 데 쓰고, 사업 문서와 규격 원문의 표로 대조한다. 판본과 보충 규격 적용에 따라 달라질 수 있다.

수준을 QA 가 조정하려 한다. 수준은 체계 안전 분석의 결과다. "이건 B 로 내려도 되지 않나요" 는 QA 의 발언이 아니다. 비용 영향을 설명하는 것은 QA 의 일이고, 분류를 바꾸는 것은 아니다.

복잡한 코드를 높은 수준으로 착각한다. 수준은 고장 결과에서 온다. 단순한 코드가 A 일 수 있고, 그 사실이 작업량 추정을 완전히 바꾼다.

독립성을 조직도로만 해결한다. 사람은 분리됐는데 기록에 안 보인다. 양식에 작성자·검증자가 분리되어 있지 않으면 사실상 증거가 없다.

계획서를 형식으로 본다. 검증 계획에 쓰지 않은 방법으로 얻은 결과는 쓰기 어렵다. 계획 단계에 QA 가 들어가지 않으면 후반에 선택지가 사라진다.

목표 매핑을 마지막에 만든다. 증거는 있는데 목표에 연결할 수 없는 상태가 가장 비싸다. 증거를 만드는 순간 목표 식별자를 붙인다.

결함 관리를 내부 도구 문제로 본다. 문제 보고는 생애주기 데이터다. 상태 전이와 종결 근거가 추적 가능해야 하고, 도구 안에만 있고 산출물로 나오지 않으면 곤란하다.

시험으로 모든 것을 덮으려 한다. "발생하지 않음" 이나 "사용하지 않음" 같은 요구는 분석·검토의 영역이다. 억지로 시험을 만들면 케이스는 늘고 증거는 약해진다.

아래에서 위로의 추적을 건너뛴다. 요구 → 시험만 보면 근거 없는 코드를 못 찾는다. 안전이 걸린 코드에서 설명되지 않는 코드는 그 자체로 결함 신호다.

도구를 중간에 바꾼다. 편한 도구를 발견해 교체하면 계획 변경과 재검증이 따라온다. 도구는 계획 단계에서 합의하고 문서에 적는다.

정형 기법으로 시험을 생략한다. 보충 규격은 보완 수단으로 다룬다. 적용 조건을 원문으로 확인하지 않은 생략은 인증에서 되돌아온다.

참고 자료

  • RTCA/EUROCAE DO-178C(ED-12C) 원문 — 목표 표(Annex A), 생애주기 데이터 정의, 각 목표의 요구 내용과 독립성 표기는 원문에서 확인한다(조항·표 — 원문 확인)
  • DO-330 / DO-331 / DO-332 / DO-333 원문 — 도구 자격, 모델 기반, 객체지향, 정형 기법 각 보충의 적용 조건(원문 확인)
  • FAA 가 공개한 소프트웨어 관련 기술 보고서와 지침 문서 — 공개 자료로 구조를 확인하는 데 유용하다. 구체적 요구는 규격 원문이 정본이다
  • 체계 안전 쪽 규격·지침 — 고장 상태 심각도의 정의와 판정 절차는 소프트웨어 규격이 아니라 이쪽에 있다(규격 번호와 정의 — 원문 확인)
  • 사업의 인증 연계 계획과 검증 계획 — 최종적으로 우리를 구속하는 문서
  • 모듈 63 레슨 1 — 국방 규격 환경 읽기: 같은 구조를 비공개 영역에서 확인하는 방법
  • 모듈 63 레슨 3 — MC/DC 구조 커버리지: 이 레슨의 목표 중 커버리지 부분을 실제 작업으로
  • 모듈 35 레슨 2 — 기능안전 규격의 활동 구조: 안전 규격 일반의 공통 골격
  • 모듈 58 레슨 1·2 — 오라클과 문서 검토 기법: 검증 수단 중 검토·분석에 해당하는 기법

낯선 말 풀이

이 레슨에 나온 약어입니다. 본문에서도 처음 나올 때 점선으로 표시해 두었습니다 (제목과 링크 글자는 그대로 둡니다).

DO-178C — 항공 소프트웨어 인증 지침
비행기에 들어가는 소프트웨어를 어떻게 만들고 증명해야 하는지 정한 문서.
QA — 품질보증
만든 것이 쓸 만한지 확인하고, 애초에 덜 망가지게 만드는 방법을 정하는 일. "테스트"는 그 일의 일부다.
MC/DC — 변형 조건·결정 커버리지
조건이 여러 개 붙은 판단문에서, 각 조건이 혼자서 결과를 바꾸는 경우까지 모두 확인했는지 재는 기준.
ED-12C — 항공 소프트웨어 인증 지침(유럽판)
항공 소프트웨어 인증 지침의 유럽 쪽 같은 문서. 내용은 사실상 같다.

용어집 전체 보기