1291.15 상태 머신 수정 시 회귀 오류 발생 위험
1. 회귀 오류의 정의
회귀 오류(regression error)란 시스템의 한 부분을 수정한 결과, 이전에 올바르게 동작하던 다른 부분이 의도치 않게 오동작하게 되는 결함을 지칭한다. 회귀 오류는 수정이 미치는 간접적 영향을 설계자가 예측하지 못하거나, 영향 범위를 과소평가할 때 발생한다. 유한 상태 머신(FSM)에서 회귀 오류는 상태와 전이의 높은 결합도(coupling)와 전이의 비국소적 영향(non-local effect)에 의하여 특히 빈번하게 발생한다.
2. FSM에서 회귀 오류가 발생하는 메커니즘
2.1 전이 조건 수정의 연쇄 효과
FSM에서 전이 \delta(q_A, \sigma) = q_B의 가드 조건(guard condition)을 수정하면, q_A로부터 시작되는 모든 실행 경로에 영향이 미친다. 수정된 가드 조건이 더 넓은 범위의 입력을 수용하면, 이전에 q_A에서 다른 상태로 전이되던 경로가 q_B로 리다이렉션될 수 있다. 역으로, 가드 조건이 더 좁아지면 이전에 q_B로 진행하던 경로가 차단되어 예상치 못한 상태 체류(state stalling)가 발생할 수 있다.
2.2 대상 상태 변경의 경로 파괴
전이 \delta(q_A, \sigma)의 대상 상태를 q_B에서 q_C로 변경하면, q_A \rightarrow q_B를 거쳐 후속 상태에 도달하던 기존 실행 경로가 파괴된다. q_B에 도달하기 위한 유일한 경로가 q_A로부터의 전이였다면, q_B는 도달 불능(unreachable) 상태가 되며, q_B에서 시작되는 모든 하류 경로(downstream path)가 실행 불가능해진다.
2.3 상태 추가에 의한 전이 누락
새로운 상태 q_{\text{new}}를 추가할 때, q_{\text{new}}에 대한 모든 필수 전이(긴급 전이, 공통 이벤트 처리 등)가 정의되지 않으면, q_{\text{new}}에 진입한 후 특정 이벤트에 대하여 반응하지 않는 회귀 오류가 발생한다. 이는 “열린 전이(open transition)“로 불리며, FSM의 완전성(completeness) 위반에 해당한다.
2.4 상태 제거에 의한 경로 절단
기존 상태 q_{\text{old}}를 제거할 때, q_{\text{old}}를 대상으로 하는 전이가 갱신되지 않으면 존재하지 않는 상태로의 전이(dangling transition)가 발생한다. 또한 q_{\text{old}}를 중간 경유지로 사용하던 실행 경로가 절단되어, 기존에 도달 가능했던 상태가 도달 불능이 될 수 있다.
3. 회귀 오류 탐지의 어려움
3.1 경로 기반 탐지의 조합적 복잡도
FSM에서 회귀 오류를 탐지하려면 수정된 전이를 포함하는 모든 실행 경로를 열거하고 각 경로의 올바름을 검증해야 한다. n개의 상태를 가진 FSM에서 길이 L 이하의 실행 경로 수는 O(n^L)에 달하며, 순환(cycle)이 존재하는 경우 무한한 경로가 존재할 수 있다. 이로 인하여 경로 기반(path-based) 회귀 테스트의 완전한 실행은 비실용적이다.
3.2 간접적 영향의 비가시성
FSM에서 전이 수정의 간접적 영향은 수정 지점에서 여러 전이를 거쳐야 관찰되는 경우가 많다. 이러한 간접적 영향은 수정 시점에서는 가시적이지 않으며, 특정 입력 시퀀스에 의해서만 발현되므로 테스트 과정에서 누락될 위험이 높다.
3.3 상태 공간의 부분적 탐색
실무적으로 FSM의 회귀 테스트는 전체 상태 공간의 일부만을 탐색하며, 미탐색 영역에 회귀 오류가 잠복할 가능성이 항시 존재한다. 모델 검사(model checking) 도구를 활용하면 상태 공간의 완전한 탐색이 가능하나, 상태 폭발에 의하여 대규모 FSM에서는 모델 검사 자체가 비실용적일 수 있다.
4. 회귀 오류의 실무적 영향
로봇 시스템에서 회귀 오류의 발현은 물리적 안전에 직결될 수 있다:
- 긴급 전이 누락: 새로 추가된 상태에서 비상 정지 전이가 정의되지 않아, 해당 상태에서 비상 정지 명령에 반응하지 않는 오류가 발생한다.
- 교착 상태(deadlock) 발생: 전이 수정으로 인하여 특정 상태에서 어떤 이벤트에 대해서도 전이가 정의되지 않은 교착 상태가 발생한다.
- 활성 잠금(livelock) 발생: 전이 수정이 순환 경로를 생성하여 시스템이 유한한 상태들 사이를 무한히 순환하지만 유의미한 진행이 이루어지지 않는 오류가 발생한다.
5. 회귀 오류 방지 전략과 한계
FSM에서 회귀 오류를 방지하기 위한 전략은 다음과 같으나, 각 전략은 고유한 한계를 수반한다:
| 전략 | 내용 | 한계 |
|---|---|---|
| 도달 가능성 분석 | 모든 상태가 초기 상태에서 도달 가능한지 검증 | 상태 수에 비례하는 계산 비용 |
| 완전성 검사 | 모든 상태-이벤트 쌍에 전이가 정의되었는지 검증 | 의도적 이벤트 무시와 구별 어려움 |
| 교착 상태 탐지 | 전이가 없는 비수락 상태의 존재 여부 확인 | 가드 조건에 의한 동적 교착은 탐지 불가 |
| 회귀 테스트 스위트 | 주요 실행 경로에 대한 테스트 반복 수행 | 경로 커버리지의 완전성 보장 불가 |
6. 행동 트리에서의 회귀 오류 제한
행동 트리에서 노드의 수정이 다른 노드에 미치는 영향은 트리 구조에 의하여 구조적으로 제한된다. 하나의 서브트리를 수정해도 형제 서브트리(sibling subtree)의 동작은 변경되지 않으며, 부모 노드의 제어 흐름 규칙이 유지되는 한 전체 트리의 상위 수준 행동도 보존된다. 이러한 구조적 격리(structural isolation)는 수정의 파급 효과를 해당 서브트리 내부로 한정함으로써 회귀 오류의 발생 범위를 근본적으로 제한한다.
7. 참고 문헌
- Colledanchise, M., & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- Leung, H. K. N., & White, L. (1989). “Insights into Regression Testing.” Proceedings of the Conference on Software Maintenance, 60–69.
v0.1.0