KR100868762B1 - 임베디드용 소프트웨어의 오류 검출 방법 - Google Patents

임베디드용 소프트웨어의 오류 검출 방법 Download PDF

Info

Publication number
KR100868762B1
KR100868762B1 KR1020060120954A KR20060120954A KR100868762B1 KR 100868762 B1 KR100868762 B1 KR 100868762B1 KR 1020060120954 A KR1020060120954 A KR 1020060120954A KR 20060120954 A KR20060120954 A KR 20060120954A KR 100868762 B1 KR100868762 B1 KR 100868762B1
Authority
KR
South Korea
Prior art keywords
error
application software
operating system
err
detect
Prior art date
Application number
KR1020060120954A
Other languages
English (en)
Other versions
KR20080050118A (ko
Inventor
김한철
임근수
이승원
유정준
이재돈
신용삼
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020060120954A priority Critical patent/KR100868762B1/ko
Priority to US11/984,105 priority patent/US8589889B2/en
Publication of KR20080050118A publication Critical patent/KR20080050118A/ko
Application granted granted Critical
Publication of KR100868762B1 publication Critical patent/KR100868762B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • G06F9/454Multi-language systems; Localisation; Internationalisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명은 임베디드 시스템의 응용 소프트웨어의 오류를 검출하는 방법 및 장치에 관한 것으로, 응용 소프트웨어의 개발 언어 및 응용 소프트웨어가 실행되는 운영 체제를 판단하고, 이러한 응용 소프트웨어의 특정 함수 내의 오류를 검사하기 위해 삽입된 오류 검사 구문을 판단 결과에 따른 오류 검사 구문으로 치환하고, 치환된 결과에 따라 함수 내에서 발생한 오류에 대한 예외 처리(exception handling)를 수행하고, 예외 처리에 따른 오류 정보를 로깅함으로써, 개발언어 및 운영체제에 상관없이 오류를 자동으로 검출하고 로깅할 수 있는 효과가 있다.
Figure R1020060120954
오류, 검증, 임베디드, 응용 소프트웨어

Description

임베디드용 소프트웨어의 오류 검출 방법{Method of error detecting method for embedded sofeware}
도 1 은 종래의 다양한 임베디드 운영체제 기반에서 각기 다른 개발언어로 응용 소프트웨어를 개발할 때 오류 검출 기능을 설명하기 위한 블록도이다.
도 2 는 본 발명의 일 실시 예에 따른 개발언어 및 운영체제에 독립적인 오류 검증 시스템 및 에러 검출기를 설명하기 위한 블록도이다.
도 3 은 도 2 의 오류 검증 시스템의 구체적인 구성을 설명하기 위한 블록도이다.
도 4 는 본 발명의 다른 실시 예에 따른 오류 검증 시스템에서의 응용 소프트웨어를 재사용하는 방법을 설명하기 위한 흐름도이다.
도 5 및 6 은 본 발명의 또 다른 실시 예에 따른 개발언어 및 운영체제에 독립적인 오류 검출 알고리즘을 설명하기 위한 흐름도이다.
도 7 은 본 발명의 또 다른 실시 예에 따른 오류 검출 장치의 개략적인 구성을 도시한 블록도이다.
도 8 은 본 발명의 또 다른 실시 예에 따른 메모리 침범 오류 검출(Memory Access Violation Exception Handling)을 설명하기 위한 흐름도이다.
도 9 은 본 발명의 또 다른 실시 예에 따른 제로 값으로 나눈 오류 검 출(Divide By Zero Simulation Exception Handling)을 설명하기 위한 흐름도이다.
도 10 는 본 발명의 또 다른 실시 예에 따른 스택 오버 플로우 검출(Stack Overflow Exception Handling)을 설명하기 위한 흐름도이다.
<도면의 주요 부분에 대한 부호의 설명>
1105: 개발 언어 1200: 응용 소프트웨어
1300: 오류 검출 장치 1510,1520: 임베디드 운영체제
1600: 오류 검증 시스템 2120: API 래퍼
2220: API 래퍼 저장부 700: 판단부
710: 치환부 720: 예외 처리부
730: 오류 로깅부 740: 저장부
본 발명은 오류 검출 방법에 관한 것으로, 임베디드 시스템의 응용 소프트웨어 오류를 검출하는 방법 및 장치에 관한 것이다.
임베디드 시스템은 마이크로 프로세서 혹은 마이크로 컨트롤러를 내장(embedded)하여 원래 제작자가 지정한 기능만을 수행하는 장치를 의미하여, 일반적으로 보다 큰 시스템의 일부로서 특별한 업무를 수행하기 위한 하드웨어와 소프 트웨어를 포함하고 있는 특정한 응용시스템을 말한다.
이러한 임베디드 시스템은 다양한 응용분야, 예를 들면 공장자동화, 가정자동화, 로봇제어, 공정제어를 포함하는 제어분야, 핸드폰, PDA, 스마트폰, LBS 등을 포함하는 단말기기 분야, 프린터, 인터넷 냉장고, 게임기, HDTV 등을 포함하는 정보가전기기 분야, 교환기, 라우터, 홈서버, 홈 게이트웨이 등을 포함하는 네트워크 기기 분야 등 다양하게 적용되고 있다.
한편, 다양한 임베디드 시스템 응용분야의 증가와 디지털화에 따라 기능이 점점 복잡해지고 있으며, 하드웨어 기종의 증가와 다양한 운영체제 기반에 다양한 개발언어로 임베디드 소프트웨어를 개발하고 있다. 이에 따라 버그수도 증가하고 있다.
이러한 변화 속에서 다수의 프로그램을 임베디드 단말기에서 오류 또는 버그를 테스트 또는 디버깅하는 경우, 하드웨어 또는 운영체제와의 종속관계에 의한 오류가 발생하여 순수한 응용 소프트웨어의 오류를 잡는 데 시간이 오래 소요되었다. 또한, 운영체제에서 예외 처리를 지원하지 않는 열악한 임베디드 개발환경의 경우 응용 소프트웨어의 예외 상황을 검출하기가 어려웠다.
도 1 은 다양한 임베디드 운영체제 기반에서 각기 다른 개발언어로 응용 소프트웨어를 개발할 때 오류 검출 기능에 대한 기술 구성을 비교한 것이다.
종래에는 MPU(Memory Protection Unit)을 지원하는 운영체제(1510)의 경우 개발언어1(1101)에서는 "_try", "_except()", 개발언어2(1102)에서는 "try", "catch()", 개발언어3(1103)에서는 "Try", "Catch" 등을 통해 각기 기능은 비슷하지만, 다른 이름의 함수나 매크로를 이용하여 오류를 검출하였다. C언어 등과 같이 오류 검출 기능이 없는 개발언어에서는 자동으로 치명적인 오류를 검출하지 못하거나 운영체제에서 지원하는 다양한 형태의 API를 통해 일부 예외적인 오류 사항을 파악하였을 뿐이다.
또한, MPU(Memory Protection Unit)을 지원하지 않는 대부분의 작은 규모의 운영체제(1520)의 경우 개발언어1(1101), 개발언어2(1102), 개발언어3(1103)에서 예외 처리 기능을 제공하더라도 이를 지원하지 않는 운영체제(1521)에서는 치명적인 오류를 검출할 수 없었다. 그러나 일부 하드웨어 예외 처리 기능을 통해 오류 검출 기능을 지원하는 운영체제(1522)에서는 개발언어k(1104)에 상관없이 운영체제에서 지원하는 오류 검출 기능(1404)을 이용할 수 있다.
그러나 이와 같은 종래기술에는 많은 문제점이 있는데, 첫째, 운영체제 위에서 응용 소프트웨어를 개발하면서, 하드웨어 문제가 발생하면, 이러한 하드웨어 문제를 개선한 후 응용 소프트웨어를 검증하거나, 운영체제와 통합되면서 복잡한 오류 발생으로 응용 소프트웨어만의 순수한 버그를 발견하고 안정화하는 데 시간이 많이 소요된다는 점과, 둘째, 예외 처리를 지원하지 않는 열악한 운영체제나 개발언어 등의 환경에서는 응용 소프트웨어의 자동 오류 검출이 불가능하여 디버깅하는 데 어렵다는 점과, 셋째, 개발환경에 따라 예외 처리 API가 다른 형태로 지원되거나, 지원되지 않는 경우가 있어서 미들웨어 등과 같이 다양한 운영체제에서 재사용을 목적으로 한 소프트웨어의 경우 예외 처리를 하면서 재사용하기에 어렵다는 점과, 넷째, 기존에 제공하는 예외 처리 API만을 사용하여 코딩할 경우 예외 발생 구간을 줄이면서 디버깅하고 로깅하는 등의 처리를 위해 소스 라인이 증가하고 코드 판독성을 저해하면서 소스를 복잡하게 하는 문제점이 있었다.
본 발명은 전술한 종래기술의 문제점을 해결하기 위해 도출된 것으로, 하드웨어 및 운영체제와 상관없이, 데스크탑에서 임베디드용 소프트웨어를 검증하는 시스템을 제공하는 데 목적이 있다.
본 발명의 다른 목적은 개발언어 및 운영체제에 상관없이 오류를 자동으로 검출하고 로깅하는 기능을 제공하는 오류 검출 방법 및 장치를 제공하는 데 목적이 있다.
본 발명의 또 다른 목적은 개발언어 및 운영체제와 상관없는 오류 검증 시스템 및 오류 검출기를 제공함으로써 데스크탑에서 개발한 응용소프트웨어 및 오류 검사 코드를 변경하지 않고서 임베디드 시스템에 재사용하는 방법을 제공하는 데 목적이 있다.
본 발명의 기술적 과제를 달성하기 위한 임베디드 시스템용 응용 소프트웨어의 오류를 검증하는 데스크탑 오류 검증 시스템은 상기 임베디드 시스템의 다수의 운영체제에서 지원하는 API에 대해 각각의 운영체제에 따른 API 래퍼(wrapper)를 포함하고, 상기 API 래퍼는 상기 API의 기능에 상응하는 데스크탑 운영체제에서 지원하는 API로 치환되고, 상기 API 래퍼가 상기 치환된 API를 호출하여 상기 응용 소프트웨어의 오류를 검증하는 것을 특징으로 한다.
본 발명의 다른 기술적 과제를 달성하기 위한 응용 소프트웨어의 오류를 검출하는 방법은 상기 응용 소프트웨어의 개발 언어 및 상기 응용 소프트웨어가 실행되는 운영 체제를 판단하는 단계; 상기 응용 소프트웨어의 특정 함수 내의 오류를 검사하기 위해 삽입된 소정의 오류 검사 구문을 상기 판단 결과에 따른 오류 검사 구문으로 치환하는 단계; 및 상기 치환된 결과에 따라 상기 함수 내에서 발생한 오류에 대한 예외 처리를 수행하고, 상기 예외 처리에 따른 오류 정보를 로깅하는 단계를 포함한다.
본 발명의 또 다른 기술적 과제를 달성하기 위한 응용 소프트웨어의 오류를 검출하는 방법은 상기 응용 소프트웨어의 오류 검사하기 위한 함수의 시작 및 끝 부분에 ERR_DETECT_TRY 및 ERR_DETECT_CATCH를 넣어 코딩하는 단계; 상기 ERR_DETECT_TRY에서 Try 타입 및 상기 응용 소프트웨어가 실행되는 운영체제를 판단하고, 상기 판단 결과에 따른 TRY 구문으로 치환하는 단계; 상기 함수 내에서 오류가 발생한 경우, 상기 ERR_DETECT_CATCH에서 Catch 타입 및 상기 응용 소프트웨어가 실행되는 운영체제를 판단하고, 상기 판단 결과에 따른 Catch 구문으로 치환하는 단계; 및 상기 오류에 대한 예외 처리 코드를 검색하여, 상기 검색된 예외 처리 코드에 따라 예외 처리하고, 상기 예외 처리에 따른 오류 정보를 로깅하는 단계를 포함한다.
본 발명의 또 다른 기술적 과제를 달성하기 위한 데스크탑에서 개발한 응용 소프트웨어 및 오류 검사 구문을 수정하지 않고 임베디드 시스템에 탑재하여 상기 응용 소프트웨어의 오류를 검출하는 방법은 상기 임베디드 시스템의 다수의 운영체 제에서 지원하는 API에 대해 각각의 운영체제에 따른 API 래퍼(wrapper)를 포함하는 상기 데스크탑의 오류 검증 시스템을 통해 상기 응용 소프트웨어의 특정 함수에 포함된 오류 검사 구문에 따라 오류를 상기 데스크탑에서 검증하는 단계; 상기 검증된 응용 소프트웨어를 상기 임베디드 시스템에 탑재하는 단계; 상기 응용 소프트웨어의 개발 언어 및 상기 응용 소프트웨어가 실행되는 임베디드 시스템의 운영체제를 판단하는 단계; 상기 오류 검사 구문을 상기 판단 결과에 따라 상기 개발 언어 및 운영체제에 상응하는 오류 검사 구문으로 치환하는 단계; 및 상기 치환된 결과에 따라 상기 함수 내에서 발생한 오류를 예외 처리하고, 상기 예외 처리에 따른 오류 정보를 로깅하는 단계를 포함한다.
본 발명의 또 다른 기술적 과제를 달성하기 위한 응용 소프트웨어의 오류를 검출하는 장치는 상기 응용 소프트웨어의 개발 언어 및 상기 응용 소프트웨어가 실행되는 운영 체제를 판단하는 판단부; 상기 응용 소프트웨어의 특정 함수 내의 오류를 검사하기 위해 삽입된 소정의 오류 검사 구문을 상기 판단 결과에 따른 오류 검사 구문으로 치환하는 치환부; 상기 치환된 결과에 따라 상기 함수 내에서 발생한 오류를 예외 처리하는 예외 처리부; 및 상기 예외 처리에 따른 오류 정보를 로깅하는 오류 로깅부를 포함한다.
본 발명의 또 다른 기술적 과제를 달성하기 위한 상기 방법들을 컴퓨터에서 실행할 수 있는 프로그램을 기록한 기록매체를 포함한다.
본 발명의 세부 및 개선사항은 종속항에 개시된다. 
이하, 첨부한 도면들을 참조하여 본 발명의 바람직한 실시 예들을 상세히 설 명한다.
도 2는 본 발명의 일 실시 예에 따른 개발언어 및 운영체제에 독립적인 오류 검증 시스템 및 에러 검출기를 설명하기 위한 블록도이다.
도 2를 참조하면, 도면의 상부에는 개발언어1,...,k(1101 내지 1105), 응용 소프트웨어1,...,n(1200), 에러 검출기(1300), 임베디드 운영체제1(1510) 및 오류 검증 시스템(1600)이 도시되어 있고, 도면의 하부에는 오류 검출 기능이 없는 운영체제1,...,m(1521) 및 오류 검출 기능이 있는 운영체제(1522)를 포함하는 임베디드 운영체제2(1520)가 도시되어 있다.
개발언어(1101 내지 1105)는 응용 소프트웨어를 개발하기 위한 프로그래밍 언어로서, 예를 들면 비주얼 베이직(visual basic), C++, 자바(Java) 등이 될 수 있으며, 각각의 언어에서 선언하는 오류, 에러 또는 버그를 검출하고 처리하는데 필요한 예외 처리(Exception handling) 구문은 서로 상이할 뿐만 아니라 예외 처리 자체를 지원하지 않는 언어도 있다.
일반적으로, 임베디드 운영체제는 그 실시간 처리의 제한 조건을 기준으로 경성 실시간 운영체제(Hard Real-Time OS)와 연성 실시간 운영체제(Soft Real-Time OS)로 나눌 수 있으며, 응용 프로그램의 실행 환경에 따라 쓰레드 기반 운영체제(thread-based RTOS)와 프로세스 기반 운영체제(process-based RTOS)로 분류된다.
쓰레드 기반 운영체제는 운영체제 커널과 응용 프로그램이 동일한 실행환경, 즉 주소 공간을 공유하며, 예를 들면 VxWorks, pSOS, Nuclleus Plus, μC/OS 등을 포함하고, 프로세스 기반 운영체제는 운영체제 커널과 응용 프로그램이 프로세스 수행모델을 따르기 때문에 응용 프로그램은 커널과 다른 주소 공간에서 실행되며, 예를 들면 Windows CE, Windows NT Embedded 4.0, Embeded Linux 등을 포함한다.
이러한 운영체제들은 각각의 운영체제에 적합한 API 만을 지원하는데, 예를 들면 Windows CE는 임베디드 시스템용으로 새로이 디자인된 운영체제이지만 대부분의 Win32 API를 지원하므로 Windows 운영체제로 분류되고, 전체 Win32 API 중에서 임베디드용 시스템에 적합한 API만을 지원한다.
임베디드 운영체제1(1510)은 MPU를 지원하는 운영체제이고, 운영체제2(1520)는 MPU를 지원하지 않는 작은 규모의 운영체제이다.
오류 검증 시스템(1600)은 개발언어(1105) 및 운영체제(1510, 1520)와 상관없이 데스크탑에서 응용 소프트웨어(1200)를 개발하고 테스트하면서 오류를 자동으로 검출하고 검증한다. 기존의 운영체제(1510, 1520)에서 예외 처리를 지원하지 않는 경우 또는 운영체제에서 바로 응용 소프트웨어를 개발할 경우 응용 소프트웨어만의 안정화에 시간이 많이 소요되었으나, 해당 검증 시스템(1600)을 통해 데스크탑 운영체제에서 임베디드 운영체제(1510, 1520)에서 지원하는 API를 이용하여 공용해서 개발하고 테스트시 오류 검증에 효과가 있다. 또한, 프로그램 소스 변경마다 개발 보드에 다운로드하여 실행하는 시간을 절감할 수 있다. 오류 검증 시스템(1600)의 구체적인 구성은 도 3을 참조하여 후술한다.
에러 검출기(1300)는 예외 처리 기능을 지원하지 않는 열악한 운영체제(1521) 등의 환경과 각기 다른 운영체제에서 다양한 API 형태로 제공되는 경우에 도 응용 소프트웨어(1200)의 오류를 자동으로 검출할 수 있고, 데스크탑의 오류 검증시스템(1600)을 이용하여 1차적으로 안정화된 응용 소프트웨어(1200)를 임베디드 시스템의 다양한 운영체제(1510, 1520)에서도 응용 소프트웨어(1200)의 수정 없이 공용으로 사용 가능하도록 한다. 에러 검출기(1300)의 에러 검출 알고리즘과 구체적인 기능은 후술한다.
도 3은 도 2의 오류 검증 시스템의 구체적인 구성을 설명하기 위한 블록도이다.
도 3을 참조하면, 오류 검증 시스템(1600)은 개발언어(1105) 및 운영체제(1510, 1520)와 상관없이 데스크탑 운영체제(2310)에서 다양한 개발 언어1,...,k(1105)를 이용하여 개발된 응용 소프트웨어(1200)를 테스트하면서 오류를 자동으로 검출하고 검증할 수 있다.
도 3에는 이러한 기능을 제공하는 오류 검증 시스템(1600)이 도시되어 있으며, 터미널 콘솔 및 GUI 모니터링 환경 제공부(2110), 다수의 임베디드 운영체제용 API 래퍼(wrapper)(2120) 및 API 래퍼 저장부(2220)가 도시되어 있다.
데스크탑 운영체제(2310)에서 동작하며 임베디드 운영체제(2120)의 API를 래퍼를 제공하여 데스크탑에서 개발하지만 임베디드 운영체제(2120)에서 개발하는 것과 동일한 기능을 제공하는 환경에서 개발도구 및 디버깅 환경이 풍부한 장점을 활용할 수 있다. 임베디드 시스템에서의 운영체제는 다양한 API를 제공한다. 이러한 API를 데스크탑 운영체제에서 그대로 이용하면서 응용 소프트웨어를 개발하기 위해서는 각 운영체제별로 API 래퍼(2120)를 지원해야 한다.
여기서 래퍼(wrapper)는 실제 데이터의 앞에서 어떤 틀을 잡아 주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램을 의미하여, 활동범위를 설정하고 좀더 중요한 다른 프로그램의 실행을 가능하게 하는 프로그램이나 스크립트를 의미한다.
운영체제별 API 래퍼(2120)는 도 3에 도시된 바와 같이 크게 9가지 기능으로 구성될 수 있다. 운영체제(2120)별로 지원하는 타스크(Task) 관리 API를 같은 이름의 타스크 관리 API 래퍼(2121)로 정의하고, 이를 데스크탑 운영체제(2310)에서 지원하는 타스크 관리 API(2221)로 대치한다. 여기서 타스크란 운영체제에서 하나의 작업 단위를 의미하며, 타스크는 각각의 우선 순위가 할당되어 있고, CPU 레지스터 세트를 가지고 있으며, 자신의 스택 영역을 가지고 있어서 각 타스크 별로 독립적인 프로그램을 수행할 수 있다. 따라서, 운영체제에서는 타스크 관리를 하며, 이러한 기능을 수행하는 API가 타스크 관리 API이다.
이러한 구성으로 인하여 데스크탑 운영체제에서 개발되지만 내부적으로 임베디드 운영체제에서 타스크 기능을 수행한다.
이와 같이, 운영체제(2120)의 스케쥴러 API 래퍼(2122)는 데스크탑용 스케쥴러 API(2222)로 대치되고, 타이머 API 래퍼(2123)는 데스크탑용 타이머 API(2223)로 대치되고, 동기화 API 래퍼(2124)는 데스크탑용 동기화 관리 API(2224)로 대치되고, 프로세스 통신 API 래퍼(2125)는 데스크탑용 프로세스 통신 API(2225)로 대치되고, 메모리 관리 API 래퍼(2126)는 데스크탑용 메모리 관리 API(2226)로 대치되고, 디바이스 입출력 시스템 API 래퍼(2127)는 데스크탑용 입출력 시스템 API(2227)로 대치되고, 파일 시스템 API 래퍼(2128)는 데스크탑용 파일 시스템 API(2228)로 대치되고, 이 밖에 임베디드 운영체제에서 지원하는 기타 다양한 기능의 API 래퍼(2129)는 이에 맞는 데스크탑용 API(2229)로 치환된다. 여기서 치환하는 것의 의미는, 예를 들면, 오류 검증시스템에서 실행모듈을 생성하는 API래퍼 명을 CreateTask라고 가정하였을 때, A라는 OS는 NuCreateTask라는 함수명을 사용하고, B라는 OS는 TaskCreate라는 함수명을 사용한다고 가정하였을 경우, 데스크탑에서는 WindowsXP OS이지만, 오류 검증시스템에서 A라는 OS를 사용하는 것을 가정하고 프로그래밍을 하였을 경우, 애플리케이션 개발자는 CreateTask라는 함수명을 사용하면 래퍼 하단에서 NuCreateTask, 즉 A라는 OS에 맞는 함수명으로 호출된다는 것을 의미한다. 이후, 애플리케이션을 A라는 OS에서 B라는 OS로 포팅할 경우, 애플리케이션의 수정 없이, 래퍼 밑의 NuCreateTask만 TaskCreate라는 함수명으로 호출되도록 자동으로 치환된다면 OS에 상관없이 애플리케이션을 다양한 운영체제에 적용하는 것을 빠르게 구현할 수 있다.
구체적으로, 도 3에서 하위의 데스크탑용 API(2221~2229)는 동일하게 이용되면서 각 운영체제별로 API 래퍼(2120)가 이를 호출하게 된다. 따라서 데스크탑 운영체제(2310) 기반 오류 검증 시스템에서의 응용 소프트웨어는 임베디드 운영체제(2120) 기반에서 개발하는 것과 동일한 코드에 의해 소스를 수정하지 않고서도 오류 검증 테스트를 수행할 수 있다.
API 래퍼 저장부(2220)는 소스 레벨에서 상용 또는 비상용 임베디드 운영체제(2120)에 대해 미리 래퍼(2121~2129)들이 준비되지 않은 경우 또는 기존 임베디드 운영체제(2120)에서 추가되는 API들의 경우, 일일이 소스를 수정할 필요없이 기존에 데스크탑에서 지원하는 API(2221~2229)들과 매핑할 수 있는 테이블을 저장하여 임베디드 운영체제에서 실행할 수 있는 환경을 제공한다. API 래퍼 저장부(2220)에서, 임베디드 환경에서 필요로 하는 스택 크기 및 메모리 크기를 제한적으로 설정할 수 있다. 따라서, 데스크탑 환경에서 응용 소프트웨어(1200)를 개발하더라도 임베디드의 제약적 환경을 제공한다.
터미널 콘솔 및 GUI 모니터링 환경 제공부(2110)는 임베디드 환경에서의 화면 출력 및 터미널 제어와 동일한 환경을 데스크탑 운영체제에 제공한다.
도 4 는 본 발명의 다른 실시 예에 따른 오류 검증 시스템에서의 응용 소프트웨어를 임베디드 시스템에서 재사용하는 방법을 설명하기 위한 흐름도이다.
도 4를 참조하면, 먼저, 단계 400에서 전술한 오류 검증 시스템을 이용하여 데스크탑 운영체제에서 다양한 개발언어로 응용 소프트웨어를 개발한다. 이어, 단계 402에서 개발된 응용 소프트웨어를 데스크탑 운영체제에서 1차적으로 오류 검출을 하는데, 여기서 오류 검출은 다양한 디버깅 환경에서 수행될 수 있으며, 이러한 과정을 거쳐 개발된 응용 소프트웨어를 안정화한다. 단계 404에서, 안정화된 응용 소프트웨어의 프로그램 소스를 수정하지 않고 임베디드 운영체제에 탑재한다. 단계 406에서, 본 발명의 바람직한 실시 예에 따른 에러 검출기를 이용하여 탑재된 응용 소프트웨어의 오류를 검출한다.
도 4와 같이 데스크탑 운영체제(2310)에서 오류 검증 시스템(1600)을 이용하여 개발하고 안정화한 응용 소프트웨어(1200)를 소스 수정 없이 임베디드 운영체 제(1510, 1521)로 탑재하여 재사용할 수 있다.
종래에 데스크탑에서 개발한 임베디드 소프트웨어를 임베디드 시스템에 탑재하는 경우, 소스 코드를 수정하여 탑재하거나, 또는 응용 예외 처리를 지원하지 않는 열악한 운영체제(1521) 및 개발언어 등의 환경에서 응용 소프트웨어(1200)를 디버깅 및 안정화하는 데 어려움이 있었다.
하지만, 본 발명의 바람직한 실시 예에 따라, 응용 소프트웨어를 데스크탑 운영체제(2310)에서 오류 검증 시스템(1600)을 통해 응용 소프트웨어(1200)를 다양한 개발도구와 편리한 개발환경을 통해 개발 및 디버깅하고, 롱런 테스트를 실시하여 1차 안정화하여 해당 코드를 임베디드 운영체제(1510, 1521)에 소스 수정 없이 그대로 재활용할 수 있다. 이는 응용 소프트웨어에 임베디드 운영체제(1510, 1521)에서 지원하는 API를 사용하였다면 오류 검증 시스템(1600)에서 같은 이름의 API 래퍼(2120)를 통해 소스가 수정이 되지 않고, 에러 검출기(1300)에서 지원하는 API는 운영체제 및 개발언어에 상관없이 동작하기 때문에 역시 소스의 수정 없이 재사용이 가능한 것이다. 예를 들면, 초경량부터 하이엔드 제품인 세탁기, MP3플레이어, 휴대폰 등의 정보 단말기 개발자는 개발 보드 없이 오류 검증 시스템(1600)을 통해 순수하게 미들웨어 및 애플리케이션 등의 응용 소프트웨어(1200)를 개발하고, 에러 검출기(1300)를 활용하여 예외 검출을 지원하지 않는 운영체제(1510)에서의 응용 소프트웨어를 데스크탑 운영체제에서(2310) 1차적으로 많은 오류를 검출하고, 안정화를 실시할 수 있다. 그에 따라 기존에 하드웨어 및 운영체제(1510, 1521)와 통합에 따른 부작용으로 인해 응용 소프트웨어(1200) 오류 검출 소요 시간을 최대한 단축할 수가 있다.
이러한 에러 검출기(1300)의 구체적인 알고리즘은 도 5 및 6 을 참조하여 설명한다.
도 5 및 6은 본 발명의 또 다른 실시 예에 따른 개발언어 및 운영체제에 독립적인 오류 검출 알고리즘을 설명하기 위한 흐름도이다.
도 5 및 6을 참조하여, 개발언어, 운영체제 및 개발언어에서 다양한 형태로 지원하는 예외 처리 방법과 예외 처리를 지원하지 않는 환경에 대해 독립적으로 대응할 수 있는 에러 검출 방법에 대한 알고리즘을 설명한다.
전술한 것처럼, 이러한 에러 검출 알고리즘을 통해 도 4의 오류 검증 시스템(1600)에서 응용 소프트웨어 개발 시 사용했던 오류 검출 방법으로 안정화했던 개발 소스를 다른 운영체제 및 하드웨어에서 재사용할 수가 있다.
먼저, 하기 표 1의 좌측에 도시된 바와 같이, 응용 소프트웨어 개발시 오류를 검사하기 위한 구간의 시작 부분 [003]에 ERR_DETECT_TRY를 넣어 코딩하고, 오류 검사 구간의 마지막 부분 [020]에 ERR_DETECT_CATCH를 넣어 코딩한다.
이는 [001] 내지 [021] 사이의 함수 내부에서 치명적인 오류 발생시 [020]에서 오류가 검출되고 로깅되어 Example API함수 내에서 특정 시간에 오류가 발생했음을 확인할 수 있다.
또한, 표 1의 우측에 도시된 바와 같이, 함수 내부에 1개 이상을 추가한 경우이다. 즉, [003]에 ERR_DETECT_TRY를 넣고, [010]에 ERR_DETECT_CATCH를 넣어 코딩하고, [012]에 ERR_DETECT_TRY를 넣고, [020]에 ERR_DETECT_CATCH를 넣어 코딩 한다.
이는 [001] 내지 [021] 사이의 치명적 오류 발생시 [010] 및 [020]에서 오류가 검출되고 로깅되어 Example API함수 내의 특정 구간 및 시간에 오류가 발생했음을 확인할 수 있다.
이러한 응용 소프트웨어 개발자를 위한 간단한 인터페이스는 사용자에 응용 소프트웨어 개발에 편리함을 제공한다.
Figure 112006089555765-pat00001
또한, 응용 소프트웨어의 오류를 검출하는 데 있어서도 유리한 효과가 있는데, 예를 들면, n개의 애플리케이션 소스가 있다고 가정하고, 각 애플리케이션 소스별로 m개의 함수가 있다고 가정하자. 이와 같이 n x m개의 수만 개 이상의 함수들로 응용 소프트웨어가 구현되어 있을 경우, 하드웨어 및 운영체제와 상관없이 개발자의 실수로 인해 오류를 찾기란 매우 어렵다. 게다가 하드웨어 및 운영체제와의 통합된 결함으로 응용 소프트웨어의 오류를 검출하는 시간이 더욱더 소요된다.
전술한 것처럼, 모든 함수에 기본적으로 ERR_DETECT_TRY 및 ERR_DETECT_CATCH의 두 가지 매크로만을 오류를 검출하기 위한 구간의 시작과 끝에 넣어 코딩하면, n x m x 2개의 매크로만이 추가되지만, 기존의 방식으로 하면 n x m x 2 x "오류 처리를 위한 코딩 라인" x "오류 로깅 라인" x "구간의 변경 회수" 등의 작업이 필요하게 된다.
또한, 시스템에서 제공하는 Try, Catch 구문의 사용법과 타입이 달라서 이식성이 부족하며, 이러한 기능을 제공하지 않는 경우 모든 소스에서 찾아서 해당 줄을 모두 주석 처리 또는 삭제해야 한다. 이러한 두 가지의 매크로는 내부적으로 개발언어 및 운영체제를 비교하여 제공하는 구문으로 치환하여 소스 코드의 수정 없이 이식성을 제공할 수 있다.
이렇게 ERR_DETECT_TRY 및 ERR_DETECT_CATCH가 추가되어 코딩된 응용 소프트웨어의 오류 검출 알고리즘이 도 5 및 도 6에 개시된다.
본 발명의 바람직한 실시 예에 따른 오류 검출기(1300)는, 단계 500에서, ERR_DETECT_TRY 구문은 Try의 타입 및 운영체제를 비교한다. 여기서 Try의 타입은 "_try {", "try {", "Try {", "RRM_HANDLER_TRY(...)", "__try {" 등 개발언어에 따라 상이하고, 오류 검출 기능이 없는 환경은 자체 오류 검출 알고리즘을 제공하고, 기타 다른 환경에서 지원하는 Try 등이 있다. 단계 502에서, 이러한 Try구문이 일치하는지 판단하여 일치하지 않는 경우 단계 504에서, 개발언어 및 운영체제에서 지원하는 Try 핸들러 종류에 따라 치환한다. 즉, ERR_DETECT_TRY는 Try의 타입, 운영체제를 비교하여 해당 구분으로 치환된다.
그리고 단계 506에서, 예외 처리를 검색할 준비를 한다. 여기서 예외(Exception)는 응용 소프트웨어가 알고리즘의 정상적인 흐름을 벗어나 다른 경로로 폭주하는 경우로서, 에러 또는 버그를 포함하며, 컴퓨터 시스템의 동작 도중 예기치 않았던 이상 상태가 발생하고 그로 인해 수행중인 프로그램이 영향을 받는 것을 의미한다. 예를 들면, 예외 처리는 프로그래머의 선언에 의해 catch/finally, throws, throw 등의 구문으로 처리된다. catch는 예외가 발생되었을 경우 해당하는 예외를 잡아내어 프로그램의 흐름을 복구할 것인지 종료할 것인지를 결정하며, 예외가 발생한 곳에서 직접 처리하거나 처리할 곳을 지적하여 예외를 던져(throw) 처리할 수 있다.
단계 508에서, ERR_DETECT_CATCH는 ERR_DETECT_TRY가 시작된 이하 구간에서 치명적인 오류 발생시 시스템을 종료하지 않고, 예외 상황을 처리할 준비를 한 후, Catch 타입, 운영체제를 비교한다. 이어, 단계 510에서, Catch가 일치하는지 판단하여 일치하지 않는 경우, 단계 512에서 운영체제 및 개발언어에서 지원하는 CATCH 핸들러 종류에 따라 치환한다. 즉, "} _except(1) {", "RRM_HANDLER_CATCH ()", "} catch(...) {", 오류 검출 기능이 없는 환경은 자체 Catch 알고리즘을 제공, 기타 다른 환경에서 지원하는 Catch 핸들러 등으로 변경한다.
그리고 단계 514에서, 시스템 오류 종류를 검색한다. 즉, 해당 운영체제 및 개발언어에서 지원하는 API래퍼로 치환되어 예외처리를 통해 오류가 발생한 소스 명과 라인을 인식한다.
단계 516에서, 현재 발생한 예외처리 코드(Exception Code)를 검색한다. 여기서 하기의 표 2에 도시된 바와 같이 예외처리 코드 중에서 해당 오류를 선택하게 된다.
표 2에는 발명의 바람직한 실시 예에 따라 도 7 내지 도 9를 참조하여 설명할 ERCESS_VIOLATION, ERR_DIVIDE_BY_ZERO 및 ERR_STACK_OVERFLOW 등이 기재되어 있다.
Figure 112006089555765-pat00002
이러한 예외 처리 코드를 선택하고, 오류를 로깅할 준비를 한다.
도 6에는 도 5 를 참조하여 설명한 예외 처리를 확인한 후, 발생한 오류를 로깅하는 방법을 설명하는 흐름도가 도시되어 있다.
먼저, 로깅하기 전에 멀티 타스크 및 쓰레드에 따라 예외 상황이 동시 다발적으로 발생하여 로깅하는 도중 오류를 방지하기 위해 우선 뮤텍스로 처리 순서를 동기화한다. 여기서 뮤텍스(Mutex)는 MUTual EXclusion의 줄임말로서, '상호 배제'를 실행하는 것이다. 즉, 임계 구역을 가진 쓰레드들이 동시에 실행되지 않고 서로 배제되어 실행되게 하는 것이며, 여기서 임계구역(Critical Section)란 프로그램상에서 동시에 실행될 경우 문제를 일으킬 수 있는 부분을 의미한다. 만약 어떠한 쓰레드에서 임계구역을 실행하고 있으면 다른 쓰레드들은 그 임계 구역에 접근할 수 없고 앞의 스레드가 임계 구역을 벗어나기를 기다려야 한다.
단계 600에서, 전술한 오류를 로깅하는 뮤텍스를 자주 생성할 필요가 없기 때문에 기존에 생성되어 있는 뮤텍스가 있는지 조사하고, 단계 602에서, 기존에 생성되어 있는 뮤텍스가 있는지 판단하여, 단계 604에서, 기존에 생성된 뮤텍스가 없다면 새롭게 생성하고, 단계 606에서, 기존의 뮤텍스 핸들 또는 새롭게 생성된 뮤텍스 핸들을 오픈한다.
이어, 단계 608에서, 다른 타스크 등에서 뮤텍스 구간을 사용하고 있는지 검사하고, 단계 610에서, 다른 타스크에서 뮤텍스 구간을 사용하고 있다면 잠시 대기한다. 이어, 단계 612에서, 오류를 로깅하기 위해 뮤텍스 락(lock)을 실시한다. 그리고 단계 614에서, 하기의 표 3에 도시된 바와 같이, 현재 발생한 예외가 발생한 시간, 오류 종류, 소스 명, 소스 라인 등을 로깅한다.
여기서, 로깅의 방법은 실시간 중 히스토리로서 방대한 양으로 저장되어 임베디드 단말기의 용량과 파일의 관리가 용이하지 않기 때문에, 설정에 의해 시간, 분 등의 단위로 저장되도록 할 수 있다. 또한, 선택적으로 로깅 파일을 주기적으로 지우거나, 테스트 실시 기간에는 지우지 않게 하는 등의 방법이 사용될 수도 있다. 또한, 선택적으로 네트워크에 연결된 단말기의 경우 주기적으로 원격 데스크탑 또는 서버에 로깅 내용을 다운로드 하고, 단말기의 저장공간을 확보할 수도 있다.
Figure 112006089555765-pat00003
이어, 단계 616에서, 뮤텍스 락을 해제한다.
마지막으로, 시스템 종료시에는 기존에 생성되어 있던 오류 파일 로깅의 뮤텍스는 해제한다.
전술한 바와 같이, 오류를 검사하기 위한 구간의 시작과 끝에 단 2개의 ERR_DETECT_TRY, ERR_DETECT_CATCH 기능으로 개발언어 및 운영체제와 상관없이 소스를 재사용할 수 있도록 자동 오류 검출과 로깅 기능을 제공할 수 있다.
이렇게 코딩하고 컴파일 후에 실행하면 사용자에게 시스템이 다운되는 등의 오류 사항을 보여주지 않을 수 있고, 다른 시스템에 영향을 덜 끼치면서 예외적인 오류 사항들이 로깅되어 롱 런 테스트 및 납품 후 유지 보수시 효과적으로 활용할 수 있다.
도 7은 본 발명의 또 다른 실시 예에 따른 오류 검출 장치(1300)의 개략적인 블록도이다.
도 7을 참조하면, 오류 검출 장치(1300)는 판단부(700), 치환부(710), 예외 처리부(720), 오류 로깅부(730) 및 저장부(740)를 포함한다.
판단부(700)는 응용 소프트웨어의 개발 언어와 응용 소프트웨어가 실행되는 임베디드 시스템의 운영 체제를 판단한다.
치환부(710)는 응용 소프트웨어의 데스크탑에서 응용 소프트웨어를 개발하면서 코딩된 오류 검사 구간에 포함된 ERR_DETECT_TRY 및 ERR_DETECT_CATCH를 판단부(700)에서 판단 결과에 따른 오류 검사 구문, 즉 "_try {", "try {", "Try {", "RRM_HANDLER_TRY(...)", "__try {" 등 개발언어에 따라 상이하고, 기타 다른 환경에서 지원하는 Try 와, "} _except(1) {", "RRM_HANDLER_CATCH ()", "} catch(...) {", 오류 검출 기능이 없는 환경은 자체 Catch 알고리즘을 제공, 기타 다른 환경에서 지원하는 Catch로 치환한다.
예외 처리부(720)는 치환부(710)에서 치환된 결과에 따라 함수 내에서 발생한 오류를 예외 처리한다. 그리고 오류 로깅부(730)는 예외 처리에 따른 오류 정보를 로깅한다.
또한, 저장부(740)는 오류를 검사할 수 있는 오류 검사 알고리즘을 저장하고 있는데, 이는 개발 언어 및 운영체제에서 오류 검사를 지원하지 않는 경우, 즉 오류 검출 기능이 없는 환경에서 자체 Try, Catch 알고리즘을 제공한다.
도 8은 본 발명의 또 다른 실시 예에 따른 메모리 침범 오류 검출(Memory Access Violation Exception Handling)을 설명하기 위한 흐름도이다.
도 8을 참조하면, 단계 800에서, 함수 내에 구간마다 시작과 끝 구간에 ERR_DETECT_TRY, ERR_DETECT_CATCH를 각각 설치한다. 표 4에서는 [43]에 ERR_DETECT_TRY 및 [48]에 ERR_DETECT_CATCH를 코딩하고, [50]에 ERR_DETECT_TRY 및 [54]에 ERR_DETECT_CATCH를 코딩하고, [56]에 ERR_DETECT_TRY 및 [60]에 ERR_DETECT_CATCH를 각각 코딩한다.
단계 802에서, 첫 번째 메모리 침범이 발생한 경우, [48]의 ERR_DETECT_CATCH에서 오류를 검출한다. 즉, 표 4에 도시된 바와 같이, 할당된 메모리 사이즈가 "100" 이다. 하지만, [45]에서 "100000", 즉 메모리 침범이 발생한 경우, [48]의 ERR_DETECT_CATCH에서 오류를 검출하고, 단계 804에서 오류를 로깅한다. 이어, 단계 806에서, 두 번째 메모리 침범이 발생한 경우, [52]에서 "200000"이 설정된 경우, [54]의 ERR_DETECT_CATCH에서 오류를 검출하고, 단계 808에서 오류를 로깅한다. 단계 810에서, 이러한 메모리 침범이 발생한 경우 시스템이 다운되지 않고 계속 실행된다. 그리고 표 5에 도시된 바와 같은 로그파일이 생성되어 개발자는 이 로그파일을 통해 오류 발생 시간, 종류, 소스 이름, 소스 라인을 분석할 수 있다.
Figure 112006089555765-pat00004
Figure 112006089555765-pat00005
구체적으로, 메모리 영역을 벗어나서 다른 영역의 메모리를 침범하였을 경우, 자동으로 감지하고 사용자에게는 시스템 다운 없이 실행할 수 있다. 기본적으로 함수 내에 시작과 끝 구간에 ERR_DETECT_TRY, ERR_DETECT_CATCH를 실시한다. 표 4에서는 함수 내에 2곳에 메모리를 잘못 사용하였을 경우, 기존에는 처음 메모리를 침범한 곳만 알려주는 데, 세부적으로 구간별로 ERR_DETECT_TRY, ERR_DETECT_CATCH를 실시하여 기존에 비해 코드 작성이 용이하면서 첫 번째 예외 상황 발생시 [48]의 ERR_DETECT_CATCH에서 검출하지만, 시스템은 종료되지 않고 이후를 실행하여 두 번째 예외 상황 발생시 [54]의 ERR_DETECT_CATCH에서 검출하여 개발자의 오류를 로깅을 통해 두 곳의 치명적인 오류 상황을 파악할 수가 있다. 로그파일에서와 같이 오류 발생 시간, 종류, 소스 이름, 소스 라인을 분석할 수가 있다.
따라서, 특정 함수 구간 내 개발자의 실수로 오류가 발생한 위치를 모두 검출해 주면서 시스템 다운을 막고 N개의 예외 처리시 개발과 오류 검출을 용이하게 한다. 또한, 오류 검증 시스템에서도 메모리 크기를 설정하여 임베디드 시스템의 제약된 메모리 환경을 제공할 수 있다.
도 9는 본 발명의 또 다른 실시 예에 따른 제로 값으로 나눈 오류 검출(Divide By Zero Simulation Exception Handling)을 설명하기 위한 흐름도이다.
도 9를 참조하면, 단계 900에서, 함수의 시작과 끝 구간에 ERR_DETECT_TRY, ERR_DETECT_CATCH를 설치한다. 표 6에 도시된 바와 같이, [19]의 ERR_DETECT_TRY 및 [26]의 ERR_DETECT_CATCH가 코딩되어 있다. 이어, 단계 902에서, [23]의 제로값으로 나눈 오류 발생시, [26]의 ERR_DETECT_CATCH에서 오류를 검출한다. 단계 904에서, 오류를 로깅한다. 단계 906에서, 시스템은 다운되지 않고 정상적으로 계속 실행되고, 단계 908에서, 표 7에 도시된 바와 같은 로그 파일을 이용하여 오류를 분석한다.
Figure 112006089555765-pat00006
Figure 112006089555765-pat00007
구체적으로, iData의 변수가 0로 입력되고, 이때 분모로 나눈 경우 컴파일시 오류가 검출되지 않고, 예외 처리를 하지 않으면 시스템이 종료되기도 한다. 예외 처리를 실시한 경우 ERR_DETECT_CATCH에서 자동으로 검출하여 로깅을 실시하게 되며 로그 파일에는 시간, 종류, 소스명, 소스 라인 등이 기록된다. 제로 값으로 나눈 오류는 해당 함수 내에서 만의 경미한 오류이며 이로 인해 다른 영역으로 오류를 발생시키지 않는 시스템 전체가 다운될 필요가 없는 사항이다. 따라서 오류를 로깅하여 개발자가 롱 런 테스트 후에 차후 분석할 수 있도록 하고, 디버깅 없이 롱 런 테스트하고, 사용자가 사용하는 경우 시스템의 다운 없이 정상 작동되도록 한다.
도 10은 본 발명의 또 다른 실시 예에 따른 스택 오버 플로우 검출(Stack Overflow Exception Handling)을 설명하기 위한 흐름도이다.
도 10을 참조하면, 단계 1000에서, 함수의 시작과 끝 구간에 ERR_DETECT_TRY, ERR_DETECT_CATCH 를 설치한다. 표 8에 도시된 바와 같이, [10]의 ERR_DETECT_TRY 및 [14]의 ERR_DETECT_CATCH가 코딩되어 있다. 이어, 단계 1002에서, 스택 오버 플로우 발생시, [14]의 ERR_DETECT_CATCH에서 오류를 검출한다. 단계 1004에서, 오류를 로깅한다. 단계 1006에서, 시스템은 다운되지 않고 정상적으로 계속 실행되고, 단계 1008에서, 표 9에 도시된 바와 같은 로그 파일을 이용하여 오류를 분석한다.
Figure 112006089555765-pat00008
Figure 112006089555765-pat00009
구체적으로, SimulateStackOverflowAdoptExcept() 함수에서 스택 오버 플로우 발생시, 함수 안으로 들어가지 않고 바로 호출한 상위 함수인 SimulateException() 내의 ERR_DETECT_CATCH에서 오류를 자동으로 검출하여 로깅을 실시한다. 로그파일 내에는 SimulateStackOverflowAdoptExcept() 함수 안에서 스택 오버 플로우가 발생했지만, 이전에 호출된 시점의 [14]의 ERR_DETECT_CATCH에서 오류가 발생했음을 시간, 오류 종류, 소스 명, 소스 라인을 기록하게 된다. 역시 시스템 정지 없이 실행하여 사용자에게 불신감을 주지 않고 작동하면서, 개발자는 이러한 로그 파일의 수집을 통해 개발시 안정화뿐만 아니라 지속적인 유지보수 및 패치를 제공할 수 있다. 또한, 오류 검증 시스템에서도 타스크별 스택 크기를 설정하여 임베디드 시스템의 제약된 타스크별 스택 환경을 제공할 수 있다.
본 발명은 또한 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광 데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다.
이상 본 발명의 바람직한 실시 예들을 기초로 설명되었지만, 당업자들은 본 발명이 속하는 기술분야의 기술적 사상이나 필수적 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시 예들은 모든 면에서 예시적인 것이며 한정적인 것이 아닌 것으로서 이해되어야 한다. 본 발명의 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 한정되며, 특허청구범위의 의미 및 범위 그리고 그 등가 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.
본 발명에 따른 임베디드 시스템의 다수의 운영체제에서 지원하는 API에 대해 각각의 운영체제에 따른 API 래퍼(wrapper)를 포함하고, API 래퍼는 상기 API의 기능에 상응하는 데스크탑 운영체제에서 지원하는 API로 치환되고, 상기 API 래퍼가 상기 치환된 API를 호출함으로써, 하드웨어 및 운영체제와 상관없이 데스크탑에서 임베디드용 소프트웨어를 검증할 수 있다.
또한, 본 발명에 따른 응용 소프트웨어의 개발 언어 및 응용 소프트웨어가 실행되는 운영 체제를 판단하고, 응용 소프트웨어의 특정 함수 내의 오류를 검사하기 위해 삽입된 오류 검사 구문을 판단 결과에 따른 오류 검사 구문으로 치환하고, 치환된 결과에 따라 함수 내에서 발생한 오류를 예외 처리하고, 예외 처리에 따른 오류 정보를 로깅함으로써 개발언어 및 운영체제에 상관없이 오류를 자동으로 검출 하고 로깅할 수 있는 효과가 있다.
또한, 본 발명에 따른 개발언어 및 운영체제와 상관없는 오류 검증 시스템 및 오류 검출 장치를 사용함으로써 데스크탑에서 개발한 응용소프트웨어 및 오류 검사 코드를 변경하지 않고서 임베디드 시스템에 재사용할 수 있는 효과가 있다.

Claims (18)

  1. 삭제
  2. 임베디드 시스템용 응용 소프트웨어의 오류를 검증하는 데스크탑 오류 검증 시스템에 있어서,
    상기 임베디드 시스템의 다수의 운영체제에서 지원하는 API에 대해 각각의 운영체제에 따른 API 래퍼(wrapper); 및
    데스크탑 운영체제에서 지원하는 API와 매핑할 수 있는 테이블을 저장하는 API 래퍼 저장부를 포함하고,
    상기 테이블에 저장된 API 래퍼가 상기 API의 기능에 상응하는 데스크탑 운영체제에서 지원하는 API로 치환되고, 상기 API 래퍼가 상기 치환된 API를 호출하여 상기 응용 소프트웨어의 오류를 검증하는 것을 특징으로 하는 데스크탑 오류 검증 시스템.
  3. 제 2 항에 있어서,
    상기 API 래퍼 저장부는,
    상기 임베디드 시스템 환경에서 필요로 하는 스택 크기 및 메모리 크기 정보를 저장하는 것을 특징으로 하는 데스크탑 오류 검증 시스템.
  4. 삭제
  5. 응용 소프트웨어의 오류를 검출하는 방법에 있어서,
    (a) 상기 응용 소프트웨어의 개발 언어 및 상기 응용 소프트웨어가 실행되는 운영 체제를 판단하는 단계;
    (b) 상기 응용 소프트웨어의 특정 함수 내의 오류를 검사하기 위해 삽입된 소정의 오류 검사 구문을 상기 판단 결과에 따른 오류 검사 구문으로 치환하는 단계; 및
    (c) 상기 치환된 결과에 따라 상기 함수 내에서 발생한 오류에 대한 예외 처리(exception handling)를 수행하고, 상기 예외 처리에 따른 오류 정보를 로깅(logging)하는 단계를 포함하는 오류 검출 방법.
  6. 제 5 항에 있어서,
    상기 (a) 단계는,
    상기 응용 소프트웨어의 개발 언어 및 상기 운영체제에서 오류 검사를 지원하는지를 판단하는 단계를 더 포함하고,
    상기 (b) 단계는 상기 개발 언어 및 상기 운영체제에서 지원하는 오류 검사 구문으로 치환하는 것을 특징으로 하는 오류 검출 방법.
  7. 제 5 항에 있어서,
    상기 (a) 단계는,
    상기 개발언어 및 상기 운영체제에서 오류 검사를 지원하지 않는 경우, 소정의 오류 검사 알고리즘을 제공하는 단계를 더 포함하고,
    상기 (c) 단계는 상기 오류 검사 알고리즘에 따라 예외처리를 수행하는 것을 특징으로 하는 오류 검출 방법.
  8. 제 5 항에 있어서,
    상기 오류 정보는,
    오류가 발생한 시간, 오류 종류, 소스 이름 및 소스 라인 중 적어도 하나 이상을 포함하는 것을 특징으로 하는 오류 검출 방법.
  9. 제 5 항에 있어서,
    상기 오류 검사 구문은,
    상기 응용 소프트웨어의 함수 내에 오류를 검사하기 시작 부분에 삽입하는 ERR_DETECT_TRY 및 끝 부분에 삽입하는 ERR_DETECT_CATCH를 포함하는 것을 특징으 로 하는 오류 검출 방법.
  10. 제 5 항에 있어서,
    상기 (c) 단계는,
    상기 오류를 로깅하는 순서를 동기화하기 위해 뮤텍스(MUTEX)로 처리 순서를 동기화하는 단계를 더 포함하는 것을 특징으로 하는 오류 검출 방법.
  11. 제 5 항에 있어서,
    상기 응용 소프트웨어는 데스크탑에서 개발되고, 상기 개발된 응용 소프트웨어는 임베디드 시스템에서 실행되는 것을 특징으로 하는 오류 검출 방법.
  12. 응용 소프트웨어의 오류를 검출하는 방법에 있어서,
    상기 응용 소프트웨어의 오류 검사하기 위한 함수의 시작 및 끝 부분에 ERR_DETECT_TRY 및 ERR_DETECT_CATCH를 넣어 코딩하는 단계;
    상기 ERR_DETECT_TRY에서 Try 타입 및 상기 응용 소프트웨어가 실행되는 운영체제를 판단하고, 상기 판단 결과에 따른 TRY 구문으로 치환하는 단계;
    상기 함수 내에서 오류가 발생한 경우, 상기 ERR_DETECT_CATCH에서 Catch 타입 및 상기 응용 소프트웨어가 실행되는 운영체제를 판단하고, 상기 판단 결과에 따른 Catch 구문으로 치환하는 단계; 및
    상기 오류에 대한 예외 처리 코드를 검색하여, 상기 검색된 예외 처리 코드 에 따라 예외 처리를 수행하고, 상기 예외 처리에 따른 오류 정보를 로깅하는 단계를 포함하는 오류 검출 방법.
  13. 데스크탑에서 개발한 응용 소프트웨어 및 오류 검사 구문을 수정하지 않고 임베디드 시스템에 탑재하여 상기 응용 소프트웨어의 오류를 검출하는 방법으로서,
    (a) 상기 임베디드 시스템의 다수의 운영체제에서 지원하는 API에 대해 각각의 운영체제에 따른 API 래퍼(wrapper)를 포함하는 상기 데스크탑의 오류 검증 시스템을 통해 상기 응용 소프트웨어의 특정 함수에 포함된 오류 검사 구문에 따라 오류를 상기 데스크탑에서 검증하는 단계;
    (b) 상기 검증된 응용 소프트웨어를 상기 임베디드 시스템에 탑재하는 단계;
    (c) 상기 응용 소프트웨어의 개발 언어 및 상기 응용 소프트웨어가 실행되는 임베디드 시스템의 운영체제를 판단하는 단계;
    (d) 상기 오류 검사 구문을 상기 판단 결과에 따라 상기 개발 언어 및 운영체제에 상응하는 오류 검사 구문으로 치환하는 단계; 및
    (e) 상기 치환된 결과에 따라 상기 함수 내에서 발생한 오류에 대한 예외 처리를 수행하고, 상기 예외 처리에 따른 오류 정보를 로깅하는 단계를 포함하는 오류 검출 방법.
  14. 제 5 항 내지 제13항 중 어느 한 항에 따른 방법을 실행하기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
  15. 응용 소프트웨어의 오류를 검출하는 장치에 있어서,
    상기 응용 소프트웨어의 개발 언어 및 상기 응용 소프트웨어가 실행되는 운영 체제를 판단하는 판단부;
    상기 응용 소프트웨어의 특정 함수 내의 오류를 검사하기 위해 삽입된 소정의 오류 검사 구문을 상기 판단 결과에 따른 오류 검사 구문으로 치환하는 치환부;
    상기 치환된 결과에 따라 상기 함수 내에서 발생한 오류에 대한 예외 처리를 수행하는 예외 처리부; 및
    상기 예외 처리에 따른 오류 정보를 로깅하는 오류 로깅부를 포함하는 오류 검출 장치.
  16. 제 15 항에 있어서,
    상기 응용 소프트웨어의 개발 언어 및 상기 운영체제에서 오류 검사를 지원하는지를 판단하고, 상기 개발 언어 및 상기 운영체제 지원하는 오류 검사 구문으로 치환하는 것을 특징으로 하는 오류 검출 장치.
  17. 제 15 항에 있어서,
    상기 오류를 검사할 수 있는 오류 검사 알고리즘을 저장하는 저장부를 더 포함하고,
    상기 개발 언어 및 운영체제에서 오류 검사를 지원하지 않는 경우 상기 오류 검사 알고리즘에 따라 상기 함수 내에서 발생한 오류에 대한 예외 처리를 수행하는 것을 특징으로 하는 오류 검출 장치.
  18. 제 15 항에 있어서,
    상기 로깅된 오류 정보를 주기적으로 소정의 네트워크로 연결된 서버에 다운로드하는 것을 특징으로 하는 오류 검출 장치.
KR1020060120954A 2006-12-01 2006-12-01 임베디드용 소프트웨어의 오류 검출 방법 KR100868762B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020060120954A KR100868762B1 (ko) 2006-12-01 2006-12-01 임베디드용 소프트웨어의 오류 검출 방법
US11/984,105 US8589889B2 (en) 2006-12-01 2007-11-13 Apparatus and method of detecting errors in embedded software

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020060120954A KR100868762B1 (ko) 2006-12-01 2006-12-01 임베디드용 소프트웨어의 오류 검출 방법

Publications (2)

Publication Number Publication Date
KR20080050118A KR20080050118A (ko) 2008-06-05
KR100868762B1 true KR100868762B1 (ko) 2008-11-17

Family

ID=39805624

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060120954A KR100868762B1 (ko) 2006-12-01 2006-12-01 임베디드용 소프트웨어의 오류 검출 방법

Country Status (2)

Country Link
US (1) US8589889B2 (ko)
KR (1) KR100868762B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101110021B1 (ko) 2010-01-29 2012-02-29 한국과학기술원 소프트웨어에서의 상호작용 패턴을 이용한 결함 검출 방법
US11847017B2 (en) 2021-12-13 2023-12-19 Hyundai Motor Company Method for determining a reset cause of an embedded controller for a vehicle and an embedded controller for a vehicle to which the method is applied

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101019209B1 (ko) * 2007-04-25 2011-03-04 이화여자대학교 산학협력단 임베디드 소프트웨어의 인터페이스 자동 추출 장치 및 그방법
ITTO20070915A1 (it) * 2007-12-19 2009-06-20 Antonio Remollino Procedimento per la verifica di codici per elaboratore e relativo sistema di verifica
US8572577B2 (en) * 2008-06-20 2013-10-29 International Business Machines Corporation Monitoring changes to data within a critical section of a threaded program
US8549491B2 (en) * 2008-12-05 2013-10-01 Electronics And Telecommunications Research Institute Apparatus and method for application testing of embedded system
US8782607B2 (en) * 2009-02-20 2014-07-15 Microsoft Corporation Contract failure behavior with escalation policy
US8327336B2 (en) * 2009-03-18 2012-12-04 International Business Machines Corporation Enhanced thread stepping
KR101012108B1 (ko) * 2009-07-21 2011-02-07 한국원자력연구원 임베디드 시스템 결함검출률 평가 장치 및 그 방법
KR101042979B1 (ko) * 2009-10-23 2011-06-21 한국항공대학교산학협력단 임베디드 시스템의 신뢰성 평가를 위한 시뮬레이션 커널을 이용하는 오류주입시험 장치
KR101234701B1 (ko) * 2011-08-24 2013-02-19 주식회사 미니게이트 서버 플랫폼의 오류 처리 시스템
KR101295644B1 (ko) * 2011-11-11 2013-09-16 한국전자통신연구원 스마트폰 앱 검증 시스템 및 그 방법
US8793661B1 (en) * 2012-04-27 2014-07-29 Google Inc. Programmer specified conditions for raising exceptions and handling errors detected within programming code
US10289467B2 (en) * 2013-03-28 2019-05-14 Hewlett Packard Enterprise Development Lp Error coordination message for a blade device having a logical processor in another system firmware domain
US9652353B2 (en) * 2013-10-15 2017-05-16 Oracle International Corporation Monitoring business transaction failures involving database procedure calls
US9703536B2 (en) 2014-08-11 2017-07-11 International Business Machines Corporation Debugging code using a question and answer system based on documentation and code change records
US9904614B2 (en) * 2015-04-03 2018-02-27 NodeSource, Inc. Source code inspection and verification
US9639450B2 (en) 2015-06-17 2017-05-02 General Electric Company Scalable methods for analyzing formalized requirements and localizing errors
KR101690075B1 (ko) 2015-12-18 2016-12-27 주식회사 한글과컴퓨터 로그기반 소스코드파일 이슈도 구현 방법
US10372194B2 (en) * 2016-02-09 2019-08-06 International Business Machines Corporation Optimizing use of location services in mobile applications to improve battery consumption
US10223236B2 (en) 2017-02-03 2019-03-05 International Business Machines Corporation Dynamic crash detection and debugging assistance
US10120656B1 (en) * 2017-11-07 2018-11-06 Bank Of America Corporation Robotic process automation system for functional evaluation and improvement of back end instructional constructs
US10831670B2 (en) 2017-11-22 2020-11-10 Blackberry Limited Method and system for low latency data management
US11209997B2 (en) * 2017-11-22 2021-12-28 Blackberry Limited Method and system for low latency data management
US10346287B1 (en) 2018-06-06 2019-07-09 The United States Of America, As Represented By The Secretary Of The Navy Detection of degenerate software forms in object oriented code
US11436830B2 (en) 2020-03-11 2022-09-06 Bank Of America Corporation Cognitive robotic process automation architecture

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040096238A (ko) * 2003-05-07 2004-11-16 삼성전자주식회사 소스 코드상에서 api의 예외처리를 검사하는 방법 및시스템
KR20060041561A (ko) * 2004-11-09 2006-05-12 엘지전자 주식회사 임베디드 시스템의 디버깅 방법

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5379432A (en) * 1993-07-19 1995-01-03 Taligent, Inc. Object-oriented interface for a procedural operating system
US6785843B1 (en) * 2001-02-23 2004-08-31 Mcrae Andrew Data plane restart without state change in a control plane of an intermediate network node
JP2003091432A (ja) 2001-09-19 2003-03-28 Nec Corp ソフトウェア評価システム、ソフトウェア評価ツール
JP2004272830A (ja) 2003-03-12 2004-09-30 Hitachi Ltd ソフトウェア開発支援装置
US7519951B2 (en) * 2003-09-30 2009-04-14 International Business Machines Corporation Multi-attribute dynamic link library packaging
JP2005284785A (ja) 2004-03-30 2005-10-13 Jfe Steel Kk プログラム開発装置
KR100580071B1 (ko) 2004-10-05 2006-05-16 주식회사 팬택앤큐리텔 메모리 오류 검출방법
US7478265B2 (en) * 2004-10-14 2009-01-13 Hewlett-Packard Development Company, L.P. Error recovery for input/output operations
US7949904B2 (en) * 2005-05-04 2011-05-24 Microsoft Corporation System and method for hardware error reporting and recovery
US8015549B2 (en) * 2005-05-10 2011-09-06 Novell, Inc. Techniques for monitoring application calls
US7774757B1 (en) * 2005-07-13 2010-08-10 Oracle America, Inc. Dynamic verification of application portability
US20070283327A1 (en) * 2006-06-02 2007-12-06 Microsoft Corporation Hierarchical test verification using an extendable interface
US7765440B2 (en) * 2006-06-29 2010-07-27 Intel Corporation Method and apparatus for OS independent platform recovery

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040096238A (ko) * 2003-05-07 2004-11-16 삼성전자주식회사 소스 코드상에서 api의 예외처리를 검사하는 방법 및시스템
KR20060041561A (ko) * 2004-11-09 2006-05-12 엘지전자 주식회사 임베디드 시스템의 디버깅 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101110021B1 (ko) 2010-01-29 2012-02-29 한국과학기술원 소프트웨어에서의 상호작용 패턴을 이용한 결함 검출 방법
US11847017B2 (en) 2021-12-13 2023-12-19 Hyundai Motor Company Method for determining a reset cause of an embedded controller for a vehicle and an embedded controller for a vehicle to which the method is applied

Also Published As

Publication number Publication date
US8589889B2 (en) 2013-11-19
KR20080050118A (ko) 2008-06-05
US20080282229A1 (en) 2008-11-13

Similar Documents

Publication Publication Date Title
KR100868762B1 (ko) 임베디드용 소프트웨어의 오류 검출 방법
US8726225B2 (en) Testing of a software system using instrumentation at a logging module
US7818721B2 (en) Dynamic application tracing in virtual machine environments
US8762971B2 (en) Servicing a production program in an integrated development environment
US8954930B2 (en) System and method for reducing test effort by object risk analysis
WO2018072493A1 (zh) 编译方法和编译系统
EP2442230B1 (en) Two pass automated application instrumentation
CN105630463B (zh) 用于检测jar包冲突的方法及装置
Zhang et al. Pensieve: Non-intrusive failure reproduction for distributed systems using the event chaining approach
US7900198B2 (en) Method and system for parameter profile compiling
US7882495B2 (en) Bounded program failure analysis and correction
US7530056B1 (en) Method and system for detecting runtime defects in a program by comparing correct and incorrect runs
US7512933B1 (en) Method and system for associating logs and traces to test cases
US20120331449A1 (en) Device, method and computer program product for evaluating a debugger script
CN110046479B (zh) 一种基于安卓操作系统的链接库文件反调试方法及装置
US8683450B2 (en) Systems, methods, and media for testing software patches
US20200310779A1 (en) Validating a firmware compliance policy prior to use in a production system
US20080127119A1 (en) Method and system for dynamic debugging of software
US20080127118A1 (en) Method and system for dynamic patching of software
Dong et al. Flaky test detection in Android via event order exploration
US20090100413A1 (en) Stack Walking Enhancements Using Sensorpoints
US6738778B1 (en) Method and apparatus for monitoring the execution of a program
CN106708550B (zh) 一种共享对象库加载的方法及装置
Jiang et al. Fuzzing error handling code in device drivers based on software fault injection
US20150007139A1 (en) Optimizing error parsing in an integrated development environment

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
J201 Request for trial against refusal decision
AMND Amendment
B701 Decision to grant
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121016

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20131022

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20141022

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20151019

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20161018

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20171018

Year of fee payment: 10