KR101767481B1 - 프로그램 분석 장치 및 프로그램 분석 제공 방법 - Google Patents

프로그램 분석 장치 및 프로그램 분석 제공 방법 Download PDF

Info

Publication number
KR101767481B1
KR101767481B1 KR1020160059317A KR20160059317A KR101767481B1 KR 101767481 B1 KR101767481 B1 KR 101767481B1 KR 1020160059317 A KR1020160059317 A KR 1020160059317A KR 20160059317 A KR20160059317 A KR 20160059317A KR 101767481 B1 KR101767481 B1 KR 101767481B1
Authority
KR
South Korea
Prior art keywords
graph
source code
defect
program
file
Prior art date
Application number
KR1020160059317A
Other languages
English (en)
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 코드마인드(주)
Application granted granted Critical
Publication of KR101767481B1 publication Critical patent/KR101767481B1/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/3604Software analysis for verifying properties of programs
    • 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/366Software debugging using diagnostics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3696Methods or tools to render software testable

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 프로그램 분석 방법 및 프로그램 분석 장치에 관한 것이다. 본 발명의 제 1 측면에 따르면 프로그램 분석 장치로서, 검사 대상이 되는 소스코드를 수신하는 코드수신부, 상기 소스코드를 분석함에 따라 상기 소스코드에 대응되는 제1그래프를 생성하는 코드변환부, 생성된 제1그래프를 저장하는 그래프저장부, 및 상기 저장된 제1그래프를 표시하는 표시부를 포함할 수 있다.

Description

프로그램 분석 장치 및 프로그램 분석 제공 방법{METHOD AND DEVICE FOR ANALYZING PROGRAM}
본 발명은 프로그램 분석 장치 및 프로그램 분석 제공 방법에 관한 것으로, 보다 상세하게는 온더플라이(on-the-fly) 방식에 따라 결함 추적이 가능한 프로그램 분석 장치 및 그 방법에 관한 것이다.
소프트웨어 개발 시 소스코드는 잠재적인 실행오류와 보안약점을 가질 수 있다, 특히, 소프트웨어 개발 프로세스에 따라 설계하고 개발하여 테스트를 거치더라도 소스코드에 존재하는 오류 또는 약점을 손쉽게 도출하기 어렵다. 따라서 소스코드에 존재하는 오류 또는 약점을 보다 쉽게 찾기 위한 기법으로서 정적 분석이 제안되고 있다.
정적 분석은 컴퓨터 프로그램 소스코드를 실행하지 않고 분석하여 프로그램 동작을 예측하는 기법을 말한다. 정적 분석은 소프트웨어의 보안성 및 품질 검사 도구로서 최근 많이 활용되고 있다.
이러한 정적 분석 도구는 전체 프로그램을 구성하는 모든 파일들에 대한 분석이 모두 처리되어 종료되어야 분석이 완료되며, 이에 전체 프로그램이 대규모 소스코드로 구성되는 경우에는 몇 시간 이상의 분석시간이 걸린다는 불편함이 있었다.
또한 이러한 정적 분석 도구는 요약된 값을 다루기 때문에 거짓양성(false positive)를 가질 수 밖에 없는데, 결과적으로 검출된 결함이 거짓양성인지 여부는 개발자가 판단해야 하기 때문에 개발자가 개발 과정에서 느끼게 되는 부담이 상당하다는 문제점이 있었다.
따라서 상술된 문제점을 해결하기 위한 기술의 개발이 필요하게 되었다.
관련하여 선행기술 문헌인 한국특허출원번호 제10-2010-0057732호에서는 다수의 프로그램 정적 분석 도구를 사용하는 환경에서 상기 다수의 정적 분석 도구들을 통합적으로 관리하는 장치 및 시스템에 관해 기재할 뿐, 상술된 문제점을 해결하고 있지 못하다.
한편, 전술한 배경기술은 발명자가 본 발명의 도출을 위해 보유하고 있었거나, 본 발명의 도출 과정에서 습득한 기술 정보로서, 반드시 본 발명의 출원 전에 일반 공중에게 공개된 공지기술이라 할 수는 없다.
본 발명의 일실시예는 프로그램 분석 장치 및 프로그램 분석 방법을 제시하는 데에 목적이 있다.
또한 본 발명의 일실시예는, 온더플라이 방식과 결함추적 기능이 동시에 제공되는 프로그램 분석 장치 및 방법을 제시하는 데에 목적이 있다.
또한 본 발명의 일실시예는, 코딩 작업 중에도 결함이 검출될 수 있도록 하고 결함이 검출될 때마다 바로 알려줄 수 있는 프로그램 분석 장치 및 방법을 제시하는 데에 목적이 있다.
또한 본 발명의 일실시예는, 개발자가 쉽게 소스코드를 이해할 수 있는 프로그램 분석 장치 및 방법을 제시하는 데에 목적이 있다.
또한 본 발명의 일실시예는, 개발자가 결함의 원인을 보다 직관적으로 파악할 수 있고 오탐 여부를 보다 정확하게 판독할 수 있도록 하는 프로그램 분석 장치 및 방법을 제시하는 데에 목적이 있다.
상술한 기술적 과제를 달성하기 위한 기술적 수단으로서, 본 발명의 일실시예에 따르면 프로그램 분석 장치는, 검사 대상이 되는 소스코드를 수신하는 코드수신부, 상기 소스코드를 분석함에 따라 상기 소스코드에 대응되는 제1그래프를 생성하는 코드변환부, 생성된 제1그래프를 저장하는 그래프저장부, 및 상기 저장된 제1그래프를 표시하는 표시부를 포함할 수 있다.
또한 본 발명의 일실시예에 따르면, 코드수신부는 추가적으로, 열람되고 있는 파일의 소스코드를 검사 대상이 되는 소스코드로서 결정할 수 있다.
또한 본 발명의 일실시예에 따르면, 프로그램 분석 장치는 생성된 제1그래프에 기초하여 상기 소스코드 내에서의 결함을 탐지하는 결함탐지부를 더 포함할 수 있다.
또한 본 발명의 일실시예에 따르면, 결함탐지부는 추가적으로, 상기 소스코드에 결함이 존재한다면, 결함이 탐지된 파일 이름, 파일 내 소스코드에서 결함이 발견된 라인 번호, 함수 정의, 호출된 함수, 관련 변수, 제어 흐름 및 데이터 흐름 중 적어도 하나를 포함하는 결함경로정보를 생성할 수 있으며, 표시부는 추가적으로, 상기 결함경로정보를 상기 제1그래프와 함께 표시할 수 있다.
또한 본 발명의 일실시예에 따르면, 결함탐지부는 추가적으로, 상기 소스코드에 결함이 존재한다면 상기 결함에 대응되는 제2그래프를 생성하며, 표시부는 추가적으로, 상기 제2그래프를 상기 제1그래프와 함께 표시할 수 있고, 상기 제2그래프는 상기 제1그래프의 하나 이상의 노드 및 하나 이상의 에지를 포함하되, 상기 결함이 발생된 노드 및 상기 결함의 원인이 되는 노드 간의 경로를 포함할 수 있다.
또한 본 발명의 일실시예에 따르면, 프로그램 분석 장치는 상기 소스코드에 대한 정적 분석을 수행할 수 있다.
또한 본 발명의 일실시예에 따르면, 프로그램 분석 장치는 수신된 소스코드에 기초하여 상기 수신된 소스코드의 분석 이전에 분석되어야 할 소스코드 파일을 추천하는 추천부를 더 포함할 수 있다.
또한 본 발명의 일실시예에 따르면, 프로그램 분석 장치가 프로그램을 분석하는 방법은, 검사 대상이 되는 소스코드를 수신하는 단계, 상기 소스코드를 분석함에 따라 상기 소스코드에 대응되는 제1그래프를 생성하는 단계, 및 상기 생성된 제1그래프를 표시하는 단계를 포함할 수 있다.
또한 본 발명의 일실시예에 따르면, 소스코드를 수신하는 단계는, 열람되고 있는 파일의 소스코드를 검사 대상이 되는 소스코드로서 결정하는 단계를 포함할 수 있다.
또한 본 발명의 일실시예에 따르면, 프로그램 분석 방법은, 상기 제1그래프에 기초하여 상기 소스코드 내에서의 결함 유무를 판단하는 단계, 및 판단결과 상기 소스코드에 결함이 존재한다면, 결함이 탐지된 파일 이름, 파일 내 소스코드에서 결함이 발견된 라인 번호, 함수 정의, 호출된 함수, 관련 변수, 제어 흐름 및 데이터 흐름 중 적어도 하나를 포함하는 결함경로정보를 생성하는 단계를 더 포함할 수 있다.
또한 본 발명의 일실시예에 따르면, 프로그램 분석 방법은, 상기 제1그래프에 기초하여 소스코드의 결함 유무를 판단하는 단계, 및 판단결과 상기 소스코드에 결함이 존재한다면 제2그래프를 생성하는 단계를 더 포함할 수 있으며, 상기 제2그래프는 상기 제1그래프의 하나 이상의 노드 및 하나 이상의 에지를 포함하되, 상기 결함이 발생된 노드 및 상기 결함의 원인이 되는 노드 간의 경로를 포함할 수 있다.
또한 본 발명의 일실시예에 따르면, 프로그램 분석 방법은, 수신된 소스코드에 기초하여 상기 수신된 소스코드의 분석 이전에 분석되어야 할 소스코드 파일을 추천하는 단계를 더 포함할 수 있다.
또한 본 발명의 일실시예에 따르면, 컴퓨터 판독 가능한 기록매체는 프로그램 분석 방법을 수행하며, 상기 프로그램 분석 방법은 검사 대상이 되는 소스코드를 수신하는 단계, 상기 소스코드를 분석함에 따라 상기 소스코드에 대응되는 제1그래프를 생성하는 단계, 및 상기 생성된 제1그래프를 표시하는 단계를 포함할 수 있다.
또한 본 발명의 일실시예에 따르면, 프로그램 분석 장치에 의해 수행되며 기록매체에 저장된 컴퓨터 프로그램은 프로그램 분석 방법을 수행하며, 상기 프로그램 분석 방법은 검사 대상이 되는 소스코드를 수신하는 단계, 상기 소스코드를 분석함에 따라 상기 소스코드에 대응되는 제1그래프를 생성하는 단계, 및 상기 생성된 제1그래프를 표시하는 단계를 포함할 수 있다.
전술한 본 발명의 과제 해결 수단 중 어느 하나에 의하면, 본 발명의 일실시예는 프로그램 분석 장치 및 프로그램 분석 방법을 제시할 수 있다.
또한, 본 발명의 과제 해결 수단 중 어느 하나에 의하면, 온더플라이 방식과 결함추적 기능이 동시에 제공되는 프로그램 분석 장치 및 프로그램 분석 방법을 제시할 수 있다.
또한, 본 발명의 과제 해결 수단 중 어느 하나에 의하면, 코딩 작업 중에도 결함이 검출될 수 있도록 하고 결함이 검출될 때마다 바로 알려줄 수 있도록 함으로써 코딩 작업과 분석 작업이 동시에 이루어지도록 한다. 이를 통해 개발자는 코딩 컨텍스트를 기억하고 있을 때 바로 결함 수정을 할 수 있어 결함 수정 시 소요되는 비용을 최소화시킬 수 있다.
또한, 본 발명의 과제 해결 수단 중 어느 하나에 의하면, 소스코드의 구조를 그래프 형식으로 탐색할 수 있는 코드 브라우징 기능을 제공할 수 있다. 이를 통해 개발자는 자신의 소스코드를 용이하게 이해할 수 있다.
또한, 본 발명의 과제 해결 수단 중 어느 하나에 의하면, 소스코드의 결함 발생 지점과 원인 지점을 시각적으로 보여줄 수 있다. 이를 통해 개발자는 결함의 원인을 보다 직관적으로 파악할 수 있고 오탐 여부를 보다 정확하게 판독할 수 있다.
본 발명에서 얻을 수 있는 효과는 이상에서 언급한 효과들로 제한되지 않으며, 언급하지 않은 또 다른 효과들은 아래의 기재로부터 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
도 1은 본 발명의 일실시예에 따른 프로그램 분석 장치를 도시한 블록도이다.
도 2는 본 발명의 일실시예에 따른 프로그램 분석 방법을 설명하기 위한 순서도이다.
도 3은 본 발명의 일실시예에 따른 프로그램 분석 방법을 설명하기 위한 예시도이다.
아래에서는 첨부한 도면을 참조하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 본 발명의 실시예를 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
명세서 전체에서, 어떤 부분이 다른 부분과 "연결"되어 있다고 할 때, 이는 "직접적으로 연결"되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 "전기적으로 연결"되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.
이하 첨부된 도면을 참고하여 본 발명을 상세히 설명하기로 한다.
도 1은 본 발명의 일실시예에 따른 프로그램 분석 장치를 설명하기 위한 구성도이다.
프로그램 분석 장치(100)는 소스코드 분석, 그래프 시각화 등과 관련된 각종 정보를 저장하여 소스코드의 분석을 가능하게 한다. 또한, 프로그램 분석 장치(100)는 소스코드에 대한 정적 분석을 수행하는 장치일 수 있다.
이러한 프로그램 분석 장치(100)는 애플리케이션이 설치된 전자단말기로 구현될 수 있거나 또는 서버-클라이언트 시스템으로 구현될 수 있으며, 상기 시스템은 유저와의 인터랙션을 위한 클라이언트가 설치된 전자단말기를 포함할 수 있다.
이때 전자단말기는, 유저와의 인터랙션이 가능한 인터페이스를 포함할 수 있는 컴퓨터나 휴대용 단말기, 텔레비전, 웨어러블 디바이스(Wearable Device) 등으로 구현될 수 있다. 여기서, 컴퓨터는 예를 들어, 웹 브라우저(WEB Browser)가 탑재된 노트북, 데스크톱(desktop), 랩톱(laptop)등을 포함하고, 휴대용 단말기는 예를 들어, 휴대성과 이동성이 보장되는 무선 통신 장치로서, PCS(Personal Communication System), PDC(Personal Digital Cellular), PHS(Personal Handyphone System), PDA(Personal Digital Assistant),GSM(Global System for Mobile communications), IMT(International Mobile Telecommunication)-2000, CDMA(Code Division Multiple Access)-2000, W-CDMA(W-Code Division Multiple Access), Wibro(Wireless Broadband Internet), 스마트폰(Smart Phone), 모바일 WiMAX(Mobile Worldwide Interoperability for Microwave Access) 등과 같은 모든 종류의 핸드헬드(Handheld) 기반의 무선 통신 장치를 포함할 수 있다. 또한, 텔레비전은 IPTV(Internet Protocol Television), 인터넷 TV(Internet Television), 지상파 TV, 케이블 TV 등을 포함할 수 있다. 나아가 웨어러블 디바이스는 예를 들어, 시계, 안경, 액세서리, 의복, 신발 등 인체에 직접 착용 가능한 타입의 정보처리장치로서, 직접 또는 다른 정보처리장치를 통해 네트워크를 경유하여 원격지의 서버에 접속하거나 타 단말과 연결될 수 있다.
또한, 전자단말기는, 소스코드를 수신하거나, 또는 소스코드의 분석 결과에 따른 그래프 등을 표시하기 위한 인터페이스를 제공할 수 있으며, 인터페이스를 통해 유저의 클릭, 터치, 탭 등을 감지함에 따라 소스코드를 수신할 수 있으며, 소스코드를 분석한 결과에 관한 정보를 표시할 수 있다.
그리고 서버는 유저와의 인터랙션을 위한 클라이언트가 설치된 전자단말기와 네트워크를 통해 통신이 가능한 컴퓨팅장치로 구현될 수 있으며, 데이터를 저장할 수 있는 저장장치가 포함될 수 있거나 또는 제 3 의 서버(미도시)를 통해 데이터를 저장할 수도 있다.
프로그램 분석 장치(100)는 상술된 바와 같은 전자단말기 또는 서버-클라이언트 중 어느 하나의 형태로 구현될 수 있다.
한편 도 1에서 도시된 바와 같이, 본 발명의 일 실시예에 따른 프로그램 분석 장치(100)는 검사 대상이 되는 소스코드를 수신하는 코드수신부(110)를 포함한다.
이때 코드수신부(110)는 소스코드가 기재된 파일로서 소스코드를 수신할 수 있다.
또한 코드수신부(110)는 하나 이상의 소스코드 파일을 저장해둘 수 있으며 유저에 의해 열람되고 있는 소스코드 파일을, 검사 대상이 되는 소스코드로 결정할 수 있다. 이를 통해 유저는 자신이 열람하고 있는 소스코드에 관한 그래프를 확인하거나 소스코드의 결함 추적이 가능해지며, 코딩 컨텍스트를 기억하고 있을 때 바로 결함을 수정할 수 있다.
한편, 본 발명의 일 실시예에 따른 프로그램 분석 장치(100)는 소스코드에 대응되는 그래프를 생성하는 코드변환부(120)를 더 포함할 수 있다.
이때 그래프는 다양한 종류의 그래프로 구현될 수 있으며, 예를 들어, 힙(heap)으로 구현될 수 있다. 그리고 그래프는 하나 이상의 노드와 하나 이상의 엣지로 구성될 수 있는데, 노드는 문장, 호출, 메소드에 대응될 수 있으며, 엣지는 각 노드 간의 연결관계를 나타낼 수 있다.
일 실시예에 따른 코드변환부(120)는 소스코드를 파일 별로 수신함에 따라 파일 각각에 대응되는 그래프를 생성할 수 있다.
이때 코드변환부(120)는 소스코드 분석 도중에 발생하는 모든 자료구조를 그래프 형태로 코드베이스에 저장할 수 있다.
관련하여 코드변환부(120)는 소스코드를 수신하고 분석 도중 발생되는 모든 자료구조를 실시간으로 그래프로 구축하기 위해서, 선택적으로 우선 처리할 대상을 선정하여 처리할 수 있다. 예를 들어 코드변환부(120)는, 그래프로 구현되어야 하는 모듈에 대해서는 우선권을 부여하여 먼저 처리될 수 있도록 할 수 있는데, 예를 들면, 그래프 구현과 직접적인 관련이 있으면서 비용이 저렴한 프로세스를 먼저 처리할 수 있다. 아울러 그래프를 구성하는 노드 중 일 노드에 대응되는 소스코드의 파일의 처리는, 그래프를 구성하지 않는 소스코드의 파일 처리보다 우선해서 처리될 수 있다.
또 다른 실시예에 따른 코드변환부(120)는 소스코드를 판독하여 어휘 분석(lexical analysis) 및 구문분석(syntactic analysis)를 통해 추상 구문 트리(abstract syntax tree)를 생성할 수 있다. 그에 따라 코드변환부(120)는 소스코드의 언어 종류에 상관없이 동일 프로세스를 수행하는 소스코드에 대해서는 동일하거나 유사한 그래프를 생성할 수 있다. 이를 통해 다양한 언어에 대해 호환성이 높은 그래프를 생성할 수 있다.
관련하여 예를 들어, C++의 catch구문과 Java의 catch구문은 그 모양과 실행이 차이가 있지만, catch 구문을 비워 두는 것은 양쪽 언어에서 모두 보안취약점으로 간주될 수 있다. 이때 코드변환부(120)는 C++의 catch구문과 Java의 catch구문 각각을 서로 매칭시켜두고, 소스코드를 그래프로 변환함에 따라, C++이든 Java이든 동일한 모습의 그래프를 생성할 수 있다. 그에 따라 이후에 설명되는 결함탐지부(140)가, 언어와 상관없이 서브 그래프가 없는 catch 노드의 존재하는지 여부를 판단하여 catch 구문에 결함이 있는지 여부를 판단할 수 있다.
다른 실시예에 따른 코드변환부(120)는 소스코드를 분석하여 제어흐름 그래프, 자료흐름 그래프 및 함수호출 그래프를 생성할 수 있다.
관련하여 제어흐름 그래프는 함수 내의 코드들이 어떤 흐름이 가능한지 그래프의 형태로 나타낸 것이며, 자료흐름 그래프는 코드 내에서 생성된 값이 어떤 변수에 저장되어 전달되는지를 그래프의 형태로 나타낸 것이며, 함수호출 그래프는 프로시저 또는 메소드가 호출될 수 있는지를 그래프의 형태로 나타낸 것이다.
코드변환부(120)는, 유저의 요청에 따라, 또는 결함 발생 지점 또는 결함 발생 원인 지점과 관련된 그래프로서, 제어흐름 그래프, 자료흐름 그래프 및 함수호출 그래프 중 적어도 하나를 생성할 수 있다.
다른 실시예에 따른 코드변환부(120)는 소스코드의 일부가 변경되면 전체 소스코드 파일 전부를 다시 분석하지 않고 변경된 부분만을 재분석하여 그래프를 갱신할 수 있다.
한편, 본 발명의 일 실시예에 따른 프로그램 분석 장치(100)는 코드변환부(120)에 의해 생성된 그래프를 저장하는 그래프저장부(130)를 더 포함할 수 있다.
그래프저장부(130)는 코드변환부(120)에 의해 그래프가 갱신될 때마다 갱신된 그래프를 저장할 수 있다.
또한 소스코드에 하나 이상의 버전이 존재할 수 있음에 따라, 그래프저장부(130)는 소스코드에 대응되는 버전 별로 각기 상이한 그래프를 저장할 수 있으며, 해당 버전의 그래프와 이전 버전의 그래프 간의 변경된 부분을 구별하여 저장할 수 있다.
또한 그래프저장부(130)는 소스코드 및 해당 소스코드의 분석정보를 매칭하여 저장해둘 수 있으며, 해당 소스코드에 대응되는 그래프 또한 매칭하여 저장해둘 수 있다. 이를 통해 소스코드, 분석정보 및 그래프가 공유될 수 있어, 프로그램 분석을 위한 각 모듈이 독립적이고 병렬적으로 동작할 수 있다.
상술된 바와 같은 그래프저장부(130)는 데이터베이스로 구현될 수 있으며, 예를 들어 그래프 DB(graph database)로 구현될 수 있다.
한편, 본 발명의 일 실시예에 따른 프로그램 분석 장치(100)는 소스코드 내의 결함을 탐지하는 결함탐지부(140)를 더 포함할 수 있다.
결함탐지부(140)는 저장된 그래프에 대한 질의를 수행함으로써 소스코드 내의 결함을 탐지할 수 있다.
예를 들어, SQL인젝션의 일 예로서 JAVA 코드가 다음과 같이 기술될 수 있다.
Figure 112016046212758-pat00001
이러한 코드에 대해 외부 입력이 SQL 문장에 직접 사용되는 경우를 검출하도록 질의를 작성하면 다음과 같다.
Figure 112016046212758-pat00002
상술된 질의를 통해 getProperty 결과값의 데이터 흐름이 prepareStatement의 인수값으로 전달됨을 확인하고 getProperty 및 prepareStatement 간의 데이터 흐름에 관한 정보를 생성할 수 있다.
상술된 바와 같이 결함을 탐지한 결함탐지부(140)는 결함경로정보 및 결함 추적그래프 중 적어도 하나를 생성할 수 있다.
즉, 결함탐지부(140)는 결함경로정보를 생성할 수 있는데, 결함경로정보는, 결함이 탐지된 파일 이름, 파일 내 소스코드에서 결함이 발견된 라인 번호, 함수 정의, 호출된 함수, 관련 변수, 제어 흐름 및 데이터 흐름 중 적어도 하나를 포함할 수 있다.
또한 결함탐지부(140)는 결함경로정보에 기초하여 결함 추적그래프를 생성할 수 있으며, 결함경로정보와 함께 저장할 수 있다.
이때 결함 추적그래프는, 소스코드에 대응되는 그래프의 노드 및 엣지 중 적어도 하나를 포함함으로써 해당 그래프 상에 오버래핑되어 표시될 수 있다. 또한 결함 추적그래프는 결함과 관련된 노드들에 대해서는 상세하게 표시할 수 있으며, 결함과 관련되지 않은 노드는 추상화시켜 표시하거나 생략할 수 있다. 또한 결함 추적그래프는 결함이 발생된 원인을 나타내는 노드에서부터, 결함이 발생된 지점을 나타내는 노드까지의 경로를 연결하여 직관적으로 결함의 발생 지점 및 원인 지점을 파악하도록 할 수 있다. 즉 결함 추적그래프는 데이터 흐름, 제어 흐름 또는 호출 관계에 의한 추적 경로를 시각적으로 그래프화하여 유저의 결함 추적을 용이하게 한다.
이와 관련하여 결함 종류에 따라 결함이 발생된 원인이 존재하지 않을 수 있다. 이때, 결함탐지부(140)는 결함이 발생된 지점의 노드만을 결함 추적그래프로서 제공할 수 있다.
또한 결함 종류에 따라, 결함이 발생된 원인 및 결함이 발생된 지점이 복수 개일 수 있다. 이때, 결함탐지부(140)는 각각의 원인 및 지점을 연결하는 결함 추적그래프를 복수 개 생성할 수 있고, 또는 가장 치명적인 결함 발생 지점을 탐색하여 탐색된 결함 발생 지점에 대응되는 결함 추적그래프를 생성할 수 있다.
결함탐지부(140)는 결함경로정보 또는 결함 추적그래프와 함께, 해당 결함을 수정하는 가이드를 제공하는 결함 수정 안내 정보를 추가로 제공할 수 있다. 이를 위해, 결함탐지부(140)는 결함경로정보에 포함되는 정보에 매칭되는 결함 수정 안내 정보를 저장할 수 있으며, 또는 결함 추적그래프의 형상에 대응되는 결함 수정 안내 정보를 저장할 수 있다. 이러한 결함 수정 안내 정보는 기저장되거나, 타 유저들의 결함 수정 방법을 분석하여 학습함으로써 저장될 수 있다. 이와 같이 결함 수정 안내 정보를 함께 제공함으로써 유저는 소스코드를 보다 용이하게 수정할 수 있어 결함을 보다 빠르게 해결할 수 있다.
한편, 본 발명의 일 실시예에 따른 프로그램 분석 장치(100)는 소스코드에 대응되는 그래프를 표시하는 표시부(150)를 더 포함할 수 있다.
이때 표시부(150)는 그래프에 대응되는 소스코드를 함께 표시할 수 있다.
또한 표시부(150)는 그래프에 대응되는 소스코드에서 발견된 결함 내용도 함께 표시할 수 있다. 이때 결함 내용으로서 결함경로정보 및 결함 추적그래프 중 적어도 하나가 포함될 수 있다.
또한 표시부(150)는 소스코드에 대응되는 그래프와 함께, 결함경로정보 및 결함 추적그래프 중 적어도 하나를 표시할 수 있다.
또한 표시부(150)는 소스코드에 대응되는 그래프와 함께, 결함경로정보 및 결함 추적그래프 중 적어도 하나를 표시하면서, 결함 수정 안내 정보도 표시할 수 있다.
아울러 표시부(150)는 그래프의 일 노드에 대한 유저의 입력이 있으면 노드에 대응되는 소스코드에서의 라인 번호를 하이라이트하여 표시하거나 반대로, 라인 번호에 대응되는 노드를 하이라이트하여 표시할 수 있다.
한편 본 발명의 일 실시예에 따른 프로그램 분석 장치(100)는 우선 열람할 소스코드 파일을 추천하는 추천부(미도시)를 더 포함할 수 있다.
즉, 소스코드를 분석함에 있어 먼저 분석되어야 하는 소스코드 파일이 존재하는 경우, 추천부(미도시)는 먼저 분석되어야 할 소스코드 파일을 추천해줄 수 있으며, 그에 따라 유저가 해당 소스파일을 먼저 열람하도록 하여 해당 소스코드 파일이 먼저 분석되도록 유도할 수 있다.
한편 본 실시예에서 사용되는 '~부'라는 용어는 소프트웨어 또는 FPGA(field programmable gate array) 또는 ASIC 와 같은 하드웨어 구성요소를 의미하며, '~부'는 어떤 역할들을 수행한다. 그렇지만 '~부'는 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. '~부'는 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다. 따라서, 일 예로서 '~부'는 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램특허 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들, 및 변수들을 포함한다.
구성요소들과 '~부'들 안에서 제공되는 기능은 더 작은 수의 구성요소들 및 '~부'들로 결합되거나 추가적인 구성요소들과 '~부'들로부터 분리될 수 있다.
뿐만 아니라, 구성요소들 및 '~부'들은 디바이스 또는 보안 멀티미디어카드 내의 하나 또는 그 이상의 CPU 들을 재생시키도록 구현될 수도 있다.
한편 도 2는 본 발명의 일실시예에 따른 프로그램 분석 방법의 순서도를 도시한 것이다.
도 2에 도시된 실시예에 따른 프로그램 분석 방법은 도 1에 도시된 프로그램 분석 장치(100)에서 시계열적으로 처리되는 단계들을 포함한다. 따라서, 이하에서 생략된 내용이라고 하더라도 도 1에 도시된 프로그램 분석 장치(100)에 관하여 이상에서 기술한 내용은 도 2에 도시된 실시예에 따른 프로그램 분석 방법에도 적용될 수 있다.
도 2는 도 3을 참조하여 이하에서 후술된다. 이때 도 3은 본 발명의 일실시예에 따른 프로그램 분석 방법을 설명하기 위한 예시도로서, 유저와의 인터랙션이 가능한 인터페이스를 포함하는 전자단말기(300)가 본 발명의 일실시예에 따른 프로그램 분석 방법에 따른 분석결과를 유저에게 표시하는 모습을 도시한 것이다.
도 2에서 도시된 바와 같이, 프로그램 분석 장치(100)는 검사 대상이 되는 소스코드를 수신할 수 있다 (S210).
이때 유저가 열람하고 있는 소스코드의 파일을 검사 대상이 되는 소스코드로 결정할 수 있다.
이와 같이 분석할 소스코드가 결정되면, 프로그램 분석 장치(100)는 소스코드에 대응되는 그래프를 생성할 수 있다 (S220). 이때 그래프는 힙으로 구현될 수 있으며 생성된 그래프는 그래프 DB에 저장될 수 있다.
한편 프로그램 분석 장치(100)는 소스코드에 결함이 있는지 여부를 탐지할 수 있다 (S230).
프로그램 분석 장치(100)는 결함이 없다고 판단되면 소스코드에 대응되는 그래프를 제공할 수 있다.
반면 프로그램 분석 장치(100)는 소스코드에 결함이 있다고 판단하면, 결함에 대응되는 결함 추적그래프 및 결함경로정보 중 적어도 하나를 생성할 수 있다 (S240).
프로그램 분석 장치(100)는 생성된 그래프가 복수 개이면 복수 개의 그래프 중 적어도 하나를 표시할 수 있으며 (S250), 예를 들어 소스코드에 대응되는 그래프만을 표시할 수 있고, 또는 소스코드에 대응되는 그래프와 함께, 결함 추적그래프를 함께 표시할 수 있다. 또한 프로그램 분석 장치(100)는 그래프와 함께, 결함경로정보도 함께 표시할 수 있다.
관련하여 도 3에서 도시된 바와 같이, 프로그램 분석 장치(100)는 현재 열람되어 분석되고 있는 소스코드를 소스코드 영역(310)을 통해 제공할 수 있으며, 소스코드 영역(310)을 통해 유저는 자신이 코딩하고 있는 소스코드를 확인할 수 있다. 또한 프로그램 분석 장치(100)는 소스코드에 결함이 발견되면 결함에 대응되는 결함경로정보를 결함표시영역(320)을 통해 제공할 수 있으며 이를 통해 유저는 어떤 부분에서 결함이 발생하였는지 확인할 수 있다. 또한 프로그램 분석 장치(100)는 소스코드에 대응되는 그래프 상에, 결함과 관련된 결함 추적그래프를 오버래핑하여 표시하는 그래프표시영역(330)을 제공함으로써, 유저로 하여금 한눈에 결함 발생 원인 및 결함 발생 지점을 확인하도록 할 수 있다.
한편 설명의 편의상, 도 2에서는 단계S220 내지 단계S240 각각이 순차적으로 수행되는 것으로 도시되었으나, S220 및 S230이 동시에 수행됨에 따라 소스코드에 대응되는 그래프와 결함 추적그래프가 동시에 생성될 수 있다.
한편, 프로그램 분석 장치(100)는 소스코드를 분석하기 이전에 분석되어야 할 소스코드의 파일을 탐색하여 추천해줄 수 있다. 그리고 추천에 따라 유저가 다른 파일을 열람하게 된다면, 열람된 파일을 검사 대상이 되는 소스코드의 파일로 결정하고 본 발명의 일실시예에 따른 프로그램 분석 방법을 수행할 수 있다.
도 2를 통해 설명된 실시예에 따른 프로그램 분석 방법은 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터에 의해 실행가능한 명령어를 포함하는 기록 매체의 형태로도 구현될 수 있다. 컴퓨터 판독 가능 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 가용 매체일 수 있고, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체를 모두 포함한다. 또한, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 모두 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 모두 포함한다. 통신 매체는 전형적으로 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 또는 반송파와 같은 변조된 데이터 신호의 기타 데이터, 또는 기타 전송 메커니즘을 포함하며, 임의의 정보 전달 매체를 포함한다.
또한 본 발명의 일실시예에 따르는 프로그램 분석 방법은 컴퓨터에 의해 실행 가능한 명령어를 포함하는 컴퓨터 프로그램(또는 컴퓨터 프로그램 제품)으로 구현될 수도 있다. 컴퓨터 프로그램은 프로세서에 의해 처리되는 프로그래밍 가능한 기계 명령어를 포함하고, 고레벨 프로그래밍 언어(High-level Programming Language), 객체 지향 프로그래밍 언어(Object-oriented Programming Language), 어셈블리 언어 또는 기계 언어 등으로 구현될 수 있다. 또한 컴퓨터 프로그램은 유형의 컴퓨터 판독가능 기록매체(예를 들어, 메모리, 하드디스크, 자기/광학 매체 또는 SSD(Solid-State Drive) 등)에 기록될 수 있다.
따라서 본 발명의 일실시예에 따르는 프로그램 분석 방법은 상술한 바와 같은 컴퓨터 프로그램이 컴퓨팅 장치에 의해 실행됨으로써 구현될 수 있다. 컴퓨팅 장치는 프로세서와, 메모리와, 저장 장치와, 메모리 및 고속 확장포트에 접속하고 있는 고속 인터페이스와, 저속 버스와 저장 장치에 접속하고 있는 저속 인터페이스 중 적어도 일부를 포함할 수 있다. 이러한 성분들 각각은 다양한 버스를 이용하여 서로 접속되어 있으며, 공통 머더보드에 탑재되거나 다른 적절한 방식으로 장착될 수 있다.
여기서 프로세서는 컴퓨팅 장치 내에서 명령어를 처리할 수 있는데, 이런 명령어로는, 예컨대 고속 인터페이스에 접속된 디스플레이처럼 외부 입력, 출력 장치상에 GUI(Graphic User Interface)를 제공하기 위한 그래픽 정보를 표시하기 위해 메모리나 저장 장치에 저장된 명령어를 들 수 있다. 다른 실시예로서, 다수의 프로세서 및(또는) 다수의 버스가 적절히 다수의 메모리 및 메모리 형태와 함께 이용될 수 있다. 또한 프로세서는 독립적인 다수의 아날로그 및(또는) 디지털 프로세서를 포함하는 칩들이 이루는 칩셋으로 구현될 수 있다.
또한 메모리는 컴퓨팅 장치 내에서 정보를 저장한다. 일례로, 메모리는 휘발성 메모리 유닛 또는 그들의 집합으로 구성될 수 있다. 다른 예로, 메모리는 비휘발성 메모리 유닛 또는 그들의 집합으로 구성될 수 있다. 또한 메모리는 예컨대, 자기 혹은 광 디스크와 같이 다른 형태의 컴퓨터 판독 가능한 매체일 수도 있다.
그리고 저장장치는 컴퓨팅 장치에게 대용량의 저장공간을 제공할 수 있다. 저장 장치는 컴퓨터 판독 가능한 매체이거나 이런 매체를 포함하는 구성일 수 있으며, 예를 들어 SAN(Storage Area Network) 내의 장치들이나 다른 구성도 포함할 수 있고, 플로피 디스크 장치, 하드 디스크 장치, 광 디스크 장치, 혹은 테이프 장치, 플래시 메모리, 그와 유사한 다른 반도체 메모리 장치 혹은 장치 어레이일 수 있다.
전술한 본 발명의 설명은 예시를 위한 것이며, 본 발명이 속하는 기술분야의 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 쉽게 변형이 가능하다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 예를 들어, 단일형으로 설명되어 있는 각 구성 요소는 분산되어 실시될 수도 있으며, 마찬가지로 분산된 것으로 설명되어 있는 구성 요소들도 결합된 형태로 실시될 수 있다.
본 발명의 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.
100: 프로그램 분석 장치
110: 코드수신부 120: 코드변환부
130: 그래프저장부 140: 결함탐지부
150: 표시부

Claims (14)

  1. 열람되고 있는 파일의 소스코드를 검사 대상이 되는 소스코드로서 결정하고, 검사 대상이 되는 소스코드를 수신하는 코드수신부;
    상기 소스코드를 분석함에 따라 상기 소스코드에 대응되는 제1그래프를 생성하는 코드변환부;
    생성된 제1그래프에 기초하여 상기 소스코드 내에서의 결함을 탐지하여 결함이 존재하면 상기 결함에 대응되는 제2그래프 및 결함경로정보를 생성하는 결함탐지부;
    생성된 제1그래프를 저장하는 그래프저장부;
    상기 제2그래프 및 결함경로정보를 상기 제1그래프와 함께 표시하는 표시부; 및
    수신된 소스코드에 기초하여 상기 수신된 소스코드의 분석 이전에 분석되어야 할 소스코드 파일을 추천하는 추천부를 포함하고,
    상기 제2그래프는,
    상기 제1그래프의 하나 이상의 노드 및 하나 이상의 에지를 포함하되, 상기 결함이 발생된 노드 및 상기 결함의 원인이 되는 노드 간의 경로를 포함하고,
    상기 코드변환부는,
    상기 제1그래프를 생성하되, 상기 소스코드에서 그래프로 구현되어야 하는 모듈을 추출하고, 추출한 모듈 중 처리 비용이 적은 프로세스 순으로 파일의 처리를 수행하는, 프로그램 분석 장치.
  2. 삭제
  3. 삭제
  4. 삭제
  5. 삭제
  6. 제 1 항에 있어서,
    상기 프로그램 분석 장치는 상기 소스코드에 대한 정적 분석을 수행하는, 프로그램 분석 장치.
  7. 삭제
  8. 프로그램 분석 장치가 프로그램을 분석하는 방법으로서,
    열람되고 있는 파일의 소스코드를 검사 대상이 되는 소스코드로서 수신하는 단계;
    수신된 소스코드에 기초하여 상기 수신된 소스코드의 분석 이전에 분석되어야 할 소스코드 파일을 추천하는 단계;
    상기 소스코드를 분석함에 따라 상기 소스코드에 대응되는 제1그래프를 생성하는 단계;
    상기 제1그래프에 기초하여 상기 소스코드 내에서의 결함 유무를 판단하는 단계;
    판단결과 상기 소스코드에 결함이 존재한다면, 결함경로정보 및 제2그래프를 생성하는 단계; 및
    상기 제2그래프 및 결함경로정보를 상기 제1그래프와 함께 표시하는 단계를 포함하고,
    상기 제2그래프는 상기 제1그래프의 하나 이상의 노드 및 하나 이상의 에지를 포함하되, 상기 결함이 발생된 노드 및 상기 결함의 원인이 되는 노드 간의 경로를 포함하고,
    상기 제1그래프를 생성하는 단계는,
    상기 소스코드에서 그래프로 구현되어야 하는 모듈을 추출하고, 추출한 모듈 중 처리 비용이 적은 프로세스 순으로 파일의 처리를 수행하는 단계를 포함하는, 프로그램 분석 방법.
  9. 삭제
  10. 삭제
  11. 삭제
  12. 삭제
  13. 제 8 항에 기재된 방법을 수행하는 프로그램이 기록된 컴퓨터 판독 가능한 기록매체.
  14. 프로그램 분석 장치에 의해 수행되며, 제 8 항에 기재된 방법을 수행하기 위해 기록매체에 저장된 컴퓨터 프로그램.
KR1020160059317A 2016-04-07 2016-05-16 프로그램 분석 장치 및 프로그램 분석 제공 방법 KR101767481B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20160042836 2016-04-07
KR1020160042836 2016-04-07

Publications (1)

Publication Number Publication Date
KR101767481B1 true KR101767481B1 (ko) 2017-08-11

Family

ID=59651639

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160059317A KR101767481B1 (ko) 2016-04-07 2016-05-16 프로그램 분석 장치 및 프로그램 분석 제공 방법

Country Status (1)

Country Link
KR (1) KR101767481B1 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190030490A (ko) * 2017-09-14 2019-03-22 국방과학연구소 프로그램 소스 코드의 보안 취약점 검출 장치 및 방법
CN109871319A (zh) * 2019-01-18 2019-06-11 深圳壹账通智能科技有限公司 项目代码扫描方法、装置、计算机设备及存储介质
KR102353190B1 (ko) * 2020-08-21 2022-01-20 국방과학연구소 프로그램을 검사하는 전자 장치 및 이의 검사 방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008181311A (ja) * 2007-01-24 2008-08-07 Toshiba Corp リファクタリング支援装置及びプログラム
JP2012221394A (ja) * 2011-04-13 2012-11-12 Nec Commun Syst Ltd テスト支援システム、テスト支援方法、及びプログラム
KR101588027B1 (ko) * 2014-10-10 2016-01-25 (주)씽크포비엘 소프트웨어 현지화를 위한 테스트 케이스 생성 장치 및 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008181311A (ja) * 2007-01-24 2008-08-07 Toshiba Corp リファクタリング支援装置及びプログラム
JP2012221394A (ja) * 2011-04-13 2012-11-12 Nec Commun Syst Ltd テスト支援システム、テスト支援方法、及びプログラム
KR101588027B1 (ko) * 2014-10-10 2016-01-25 (주)씽크포비엘 소프트웨어 현지화를 위한 테스트 케이스 생성 장치 및 방법

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190030490A (ko) * 2017-09-14 2019-03-22 국방과학연구소 프로그램 소스 코드의 보안 취약점 검출 장치 및 방법
KR102014266B1 (ko) * 2017-09-14 2019-08-26 국방과학연구소 프로그램 소스 코드의 보안 취약점 검출 장치 및 방법
CN109871319A (zh) * 2019-01-18 2019-06-11 深圳壹账通智能科技有限公司 项目代码扫描方法、装置、计算机设备及存储介质
KR102353190B1 (ko) * 2020-08-21 2022-01-20 국방과학연구소 프로그램을 검사하는 전자 장치 및 이의 검사 방법

Similar Documents

Publication Publication Date Title
US10642608B2 (en) Associating a visualization of user interface with source code
US20200042648A1 (en) Recommending development tool extensions based on media type
US9075918B1 (en) System and method for creating change-resilient scripts
US10318595B2 (en) Analytics based on pipes programming model
CN105868096B (zh) 用于在浏览器中显示web页面测试结果的方法、装置及设备
US10191832B2 (en) Multi-language playback framework
CN104239158A (zh) 用于自动分析和链接错误日志的分析引擎
US11361149B2 (en) Techniques for web framework detection
CN117149658A (zh) 呈现代码实体调用之间的差异
KR101767481B1 (ko) 프로그램 분석 장치 및 프로그램 분석 제공 방법
CN111125555A (zh) 企业信息获取方法以及装置
CN113918864A (zh) 网站页面的测试方法、测试系统、装置、电子设备及介质
US20160292067A1 (en) System and method for keyword based testing of custom components
US9069899B2 (en) Integrating diagnostic information in development environment
US11119761B2 (en) Identifying implicit dependencies between code artifacts
CN115827125A (zh) 界面控件测试方法和设备
US11544179B2 (en) Source traceability-based impact analysis
US9477448B2 (en) Screen-oriented computing program refactoring
US20200310791A1 (en) Error checking of notebook code blocks
CN111104626B (zh) 信息存储方法和装置
US20230085901A1 (en) Aiding diagnosis of errors in code
CN116974888A (zh) 界面测试方法、装置、设备、介质及产品
CN117435276A (zh) 浏览器页面显示方法、装置、设备、存储介质及程序产品
WO2020260943A1 (en) Detecting relationships between web services in a web-based computing system
CN116578480A (zh) 页面测试方法、装置、介质以及电子设备

Legal Events

Date Code Title Description
AMND Amendment
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant