SoC 소프트웨어 컴포넌트 진단을 위한 레지스터 전송 그래프 기반 테스트 기술

읽는 시간: 8 분
...

📝 Abstract

A novel approach to evaluation of hardware and software testability, represented in the form of register transfer graph, is proposed. Instances of making of software graph models for their subsequent testing and diagnosis are shown.

💡 Analysis

1. 연구 배경 및 목표

  • 배경: 기존 SoC 설계에서는 하드웨어 테스트와 설계 검증 기술이 활발히 발전했지만, 소프트웨어 레이어에 적용 가능한 체계적인 모델과 진단 방법은 부족했다.
  • 목표: 하드웨어 테스트에서 사용되는 Thatte‑Abraham‑Sharshunov 레지스터 전송 모델을 소프트웨어 테스트에 적합하도록 변형하고, 이를 통해 소프트웨어 결함을 최소 테스트 패턴으로 정확히 찾아내는 기술을 제시한다.

2. 핵심 방법론

단계내용주요 포인트
① 그래프 모델링프로그램을 **노드(정보 모니터링 포인트)**와 리브(연산/코드 조각) 로 변환. 각 리브에 연산 종류(+, –, *, /, sin 등) 라벨링.- 분기문은 다중 리브로 표현.
- 동일 연산이 여러 경로에 존재하면 리브를 병합해 모델을 간소화.
② 테스트 합성모든 입출력 경로DNF(Disjunctive Normal Form) 로 기술하고, 각 경로가 활성화하는 리브 집합을 추출.- 최소 커버리지를 만족하는 테스트 패턴을 도출하기 위해 커버링 문제(set covering) 해결.
③ 결함 탐지표(FDT) 작성각 테스트 패턴에 대해 리브별 실행 여부를 0/1 행렬로 기록. 실제 실행 결과와 기대값을 비교해 응답 벡터 V 생성.- V의 ‘1’은 해당 패턴에서 결함이 발생했음을 의미.
④ 논리식 축소 및 진단응답 벡터를 기반으로 CNF → DNF 변환 후, Boolean 대수 법칙을 이용해 불필요한 항 제거. 최종적으로 가능한 결함 위치를 최소 집합으로 축소.- 예제에서는 “리브 5I의 연산 {1,2,5} 중 하나가 오류”라는 결론 도출.

3. 주요 기여

  1. 통합 모델 제시 – 하드웨어 레지스터 전송 그래프를 소프트웨어 테스트에 직접 적용, 설계·검증 단계의 통합 가능성을 열었다.
  2. 자동 테스트 생성 알고리즘 – 그래프 기반 DNF 전개와 집합 커버링을 이용해 최소 테스트 세트를 자동으로 산출, 테스트 비용을 크게 절감한다.
  3. 정형화된 결함 진단 절차 – Fault Detection Table과 Boolean 식 축소 과정을 체계화해, 결함 위치를 문장 수준까지 식별 가능하게 함.
  4. 실제 코드 적용 사례 – C++ 구현 예시와 오류 삽입 실험을 통해 방법론의 실용성을 입증하였다.

4. 강점

  • 모델 기반 접근으로 복잡한 분기·루프 구조를 시각적으로 파악 가능.
  • 테스트 최소화가 명시적으로 목표이므로 대규모 임베디드 소프트웨어에서도 적용 가능성 높음.
  • 하드웨어·소프트웨어 통합 검증을 위한 공통 언어(그래프) 제공, SoC 전체 검증 흐름을 단순화.

5. 한계 및 개선점

항목설명
스케일링그래프와 DNF 전개는 프로그램 규모가 커질수록 조합 폭발 위험이 있다. 대규모 시스템에서는 히스토리 기반 추출이나 샘플링 기법이 필요.
동적 특성 미반영현재는 정적 코드 흐름만 모델링하므로, 런타임 동적 메모리 할당, 인터럽트, 멀티스레드 등은 다루기 어렵다.
테스트 포인트 선정최소 테스트 포인트를 찾는 과정이 수동적이며, 자동화된 최적화 알고리즘(예: SAT/SMT 기반) 도입이 요구된다.
툴 체인 부재논문 수준의 알고리즘 제시만 있고, 실제 상용 툴이나 오픈소스 구현이 제공되지 않아 적용 장벽이 존재한다.

6. 향후 연구 방향

  1. 그래프 압축 및 추상화 – 대규모 소프트웨어에 대한 모듈화 그래프계층적 추상화를 도입해 복잡도 감소.
  2. 동적 분석 연계 – 런타임 프로파일링 데이터를 그래프에 통합, 동적 경로까지 포함한 테스트 생성.
  3. 자동화 툴 개발 – 파서 → 그래프 변환 → 테스트 합성 → 진단까지 일괄 수행하는 IDE 플러그인 혹은 CI 파이프라인 구현.
  4. 다중 목표 최적화 – 테스트 비용, 진단 해상도, 실행 시간 등을 동시에 고려하는 멀티오브젝티브 최적화 알고리즘 적용.

7. 결론 요약

본 논문은 레지스터 전송 그래프를 기반으로 SoC 소프트웨어 컴포넌트의 테스트와 결함 진단을 체계화한 최초의 시도 중 하나이다. 그래프 모델링 → 테스트 합성 → 결함 탐지표 → 논리식 축소라는 일련의 절차를 통해 최소 테스트 패턴으로도 높은 진단 정확도를 달성한다. 다만, 규모 확대와 동적 특성 반영을 위한 추가 연구가 필요하며, 이를 위한 자동화 툴 및 알고리즘 개발이 향후 과제로 남는다.

📄 Content

SoC 소프트웨어 구성 요소 진단 기술

Svetlana Chumachenko, Wajeb Gharibi, Anna Hahanova, Aleksey Sushanov
컴퓨터공학부, 하르코프 국립 전자통신대학, 레닌 거리 14, 하르코프, 우크라이나, 61166, 전화: (057) 70‑21‑421, (057) 70‑21‑326
이메일: hahanov@kture.kharkov.ua; kiu@kture.kharkov.ua


초록

레지스터 전송 그래프 형태로 표현된 하드웨어·소프트웨어 테스트 가능성을 평가하기 위한 새로운 접근법을 제안한다. 이후 테스트와 진단을 위해 소프트웨어 그래프 모델을 만드는 사례를 제시한다.


1. 서론

SoC(시스템‑온‑칩) 서비스 문제를 효과적으로 해결할 수 있는 하드웨어 테스트 및 테스트 가능 설계 기술이 다수 존재한다[1‑10]. 반면, 전자 기술 시장에서는 이와 같은 문제를 해결하기 위한 효율적인 모델과 방법이 부족한 실정이다.

SoC 소프트웨어 구성 요소의 테스트 가능 설계와 진단을 실현하기 위해, 레지스터 전송 및 제어 그래프 형태의 범용 소프트웨어 구성 요소 모델을 개발하였다. 또한 소프트웨어 진단을 위한 알고리즘을 제시하고, 실제 진단 기술 적용 사례를 논의한다. 본 연구의 목표는 하드웨어 테스트 방법을 SoC 소프트웨어 구성 요소 서비스에 적용하는 것이다.

연구 과제는 다음과 같다.

  1. Thatte‑Abraham‑Sharshunov 레지스터 전송 모델[4,5]을 소프트웨어 테스트 문제 해결에 맞게 변형한다.
  2. 결함 탐지 테이블을 이용해 결함이 있는 명령문을 진단하는 모델을 적용한다.

2. 소프트웨어 진단 기술

대규모 소프트웨어 개발 프로젝트에서 명령문의 정확성 검증은 매우 시급한 과제이다. 복잡한 프로그램은 수많은 분기(branch)를 포함하고, 모든 논리 경로에 대해 검증을 수행하는 일은 사실상 불가능에 가깝다. 따라서 본 절에서는 그래프 구조로 소프트웨어 알고리즘을 표현하고, 이를 기반으로 테스트 생성 및 결함 진단을 수행하는 방법을 예시와 함께 설명한다.

2.1 문제 정의

다음과 같은 함수들의 합을 계산하는 프로그램을 검증한다고 가정한다.

[ F(x)=\begin{cases} x+3, & x<2\[2mm] 2x-3, & 2\le x<12\[2mm] -3x+7, & x\ge 12 \end{cases} \qquad w(x)=\begin{cases} \sin!\bigl(x+\frac{\pi}{3}\bigr), & x<\frac{2}{3}\pi\[2mm] \sin(\pi x)+2, & x\ge\frac{2}{3}\pi \end{cases} ] [ F = f + w ]

위 수식을 구현한 C++ 코드(Listing 3.1)는 다음과 같다.

CPP
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    const double Pi = 3.14159;
    double F, w, f, x;

    cin >> x;
    if (x < 2)               f = x + 3;
    else if ((x >= 2) && (x < 12)) f = 2 * x - 3;
    else                     f = -3 * x + 7;

    if (x < 2./3.*Pi)        w = sin(x + Pi/3);
    else                     w = sin(Pi * x) + 2;   // ← 정상 코드

    F = f + w;
    cout << F << endl;
    return 0;
}
클릭하여 더 보기

오류 상황
위 코드에서 else w = sin(Pi * x) + 2;else w = sin(Pi * x) - 2; 로 잘못 입력했다고 가정한다. 이때 테스트 기술을 이용해 잘못된 명령문을 찾아야 한다.

소프트웨어 진단 절차는 다음 네 단계로 구성된다.

2.2 1) 레지스터 전송 그래프 작성

그래프의 간선(rib) 은 코드 조각 혹은 개별 연산을 의미하고, 정점(point) 은 레지스터·변수·메모리 등 정보 모니터링 지점을 나타낸다(그림 1).

  • 각 정점은 테스트 포인트(관찰선) 역할을 하며, 필요에 따라 assertion을 형성한다.
  • 간선마다 연산 종류를 부여한다. 예를 들어 {1}‑덧셈, {2}‑곱셈, {3}‑뺄셈, {4}‑나눗셈, {5}‑삼각함수(sin) 등이다.
  • 분기가 존재하면 해당 정점에서 나가는 간선 수는 branch에 의해 생성된 하위 블록 수와 같다.

예를 들어 다음 코드 조각을 그래프로 표현하면

CPP
if (x < 2)          f = x + 3;
else if ((x>=2)&&(x<12)) f = 2*x - 3;
else                f = -3*x + 7;
클릭하여 더 보기

정점 X에서 세 개의 간선이 나가며, 각각 x+3, 2*x-3, -3*x+7 연산을 담당한다. 이 연산 결과는 각각 정점 R₁, R₂, R₃ 에서 확인된다.

다음 분기

CPP
if (x < 2./3.*Pi)   w = sin(x + Pi/3);
else                w = sin(Pi*x) + 2;
클릭하여 더 보기

는 또 다른 두 개의 간선을 생성한다. 최종적으로 F = f + w; 연산은 모든 경로에서 수행되며, 결과는 최종 정점 Y 에서 확인된다.

이와 같이 그래프 기반 표현은 가능한 모든 실행 경로를 시각화하고, 이후 테스트·진단 단계에서 최소 테스트 집합을 설계하는 기반을 제공한다.

2.3 2) 테스트 합성 및 분석

각 간선을 디스정규형(DNF) 로 기술한다. DNF의 한 항은 입력 포트 → 출력 포트 사이의 1차원 경로이며, 해당 경로가 포함하는 내부 선(간선)들의 집합을 의미한다. 예시로 다음과 같은 DNF 항들을 얻을 수 있다.

[ Y_3 \leftarrow X,\quad Y_2 \leftarrow X,\quad Y_{15} \leftarrow X,\quad Y_{14} \leftarrow X ]

이들 항을 모두 합치면 전체 테스트가 된다. 그러나 전체 테스트는 중복이 많아 실제 적용 시 비효율적이다. 따라서 최소 커버링 문제를 풀어 필요 최소 테스트 패턴을 도출한다.

예를 들어 경로 X14Y 를 활성화하는 테스트는 다음과 같은 연산을 포함한다.

  • A₆₄₁I (덧셈) → 1I (첫 번째 명령) → 4I (네 번째 명령)

이와 같은 방식으로 모든 경로를 커버하도록 테스트를 설계한다.

2.4 3) 결함 탐지 테이블(Fault Detection Table, FDT) 작성

FDT는 간선 위의 코드 조각이 실제로 관찰점에 데이터를 전달했는지를 기록한다. 테스트 수행 후 얻은 출력 응답 벡터 V 에서, 특정 테스트 패턴에 대해 관찰점에서 오류가 발생하면 해당 위치에 1을 기록한다.

테스트 패턴I₁I₂I₃I₄I₅
Y₃←X10101
Y₂←X01110

위 표에서 Ijkj번째 간선 위의 k번째 명령을 의미한다. 예를 들어 2I₂ 는 간선 2 위의 두 번째 명령을 가리킨다.

2.5 4) 진단

응답 벡터 V 에서 1이 나타난 위치를 기반으로 가능한 결함 집합을 도출한다. 이때 CNF → DNF 변환을 수행하고, 불 대수 법칙을 이용해 중복되는 항을 제거한다. 최종적으로 얻은 최소 DNF 항은 가능한 결함 위치를 정확히 가리킨다.

예시에서는

[ F = { I_{5,1}, I_{5,2}, I_{5,5} } ]

와 같이 간선 5 위의 명령 {1,2,5} 중 하나가 오류임을 밝혀냈다. 실제 오류는 5I₁ (덧셈 대신 뺄셈) 로, 코드에서는

CPP
else w = sin(Pi * x) - 2;   // 오류 발생 부분
클릭하여 더 보기

와 같이 -2 가 잘못 들어간 경우였다.


3. 결론

본 논문에서는 디지털 SoC 구성 요소에 대한 효율적인 테스트·진단을 가능하게 하는 소프트웨어 테스트 가능 설계 기술을 제시하였다. 주요 성과는 다음과 같다.

  1. 레지스터 전송·제어 그래프 기반의 범용 모델을 제시하여, 하드웨어·소프트웨어 모두에 적용 가능한 테스트 가능 설계, 테스트 합성, 분석 절차를 제공한다.
  2. 그래프 모델을 이용한 소프트웨어 테스트·진단 기술을 제안하고, 실제 C++ 코드에 적용한 사례를 통해 그 유효성을 입증하였다.
  3. 최소 테스트 패턴을 생성함으로써 테스트 시간결함 탐지 비용을 크게 절감할 수 있음을 확인하였다.

향후 연구에서는 테스트 포인트를 추가하여 진단 해상도를 높이는 방안과, 대규모 임베디드 시스템에 대한 자동화된 테스트 패턴 생성 알고리즘을 개발할 계획이다.


참고 문헌

  1. Francisco DaSilva, Yervant Zorian, Lee Whetsel, Karim Arabi, Rohit Kapur, “Overview of the IEEE P1500 Standard”, ITC International Test Conference, 2003, pp. 988‑997.

이 글은 AI가 자동 번역 및 요약한 내용입니다.

검색 시작

검색어를 입력하세요

↑↓
ESC
⌘K 단축키