KR101706098B1 - 소프트웨어 분석 방법 및 장치 - Google Patents

소프트웨어 분석 방법 및 장치 Download PDF

Info

Publication number
KR101706098B1
KR101706098B1 KR1020150136251A KR20150136251A KR101706098B1 KR 101706098 B1 KR101706098 B1 KR 101706098B1 KR 1020150136251 A KR1020150136251 A KR 1020150136251A KR 20150136251 A KR20150136251 A KR 20150136251A KR 101706098 B1 KR101706098 B1 KR 101706098B1
Authority
KR
South Korea
Prior art keywords
function
sub
functions
tree
syntax tree
Prior art date
Application number
KR1020150136251A
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 (주)씽크포비엘
Priority to KR1020150136251A priority Critical patent/KR101706098B1/ko
Priority to PCT/KR2016/010738 priority patent/WO2017052318A1/ko
Application granted granted Critical
Publication of KR101706098B1 publication Critical patent/KR101706098B1/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

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

소프트웨어 분석 방법 및 장치가 개시된다. 본 방법은, 소프트웨어의 소스 코드를 획득하는 단계를 포함할 수 있다. 여기서, 소스 코드는 하나의 메인 함수와 메인 함수가 호출하는 복수의 서브 함수를 포함하며, 복수의 서브 함수의 각각은 기본 라이브러리 또는 사용자 라이브러리로 분류되고, 주석, 함수 명, 입력 파라미터 명 및 내부 구현 텍스트를 포함하는 함수 정보를 포함할 수 있다. 본 방법은, 소스 코드를 연산하여 복수의 서브 함수로 구성되는 함수구문 트리를 생성하는 단계, 함수구문 트리를 구성하는 복수의 서브 함수 각각을 추상 레벨 또는 구체 레벨로 분류하는 단계, 함수구문 트리를 구성하는 복수의 서브 함수 각각의 기능을 추론하는 단계, 및 복수의 서브 함수 중 상기 추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록함수 구조화 트리를 생성하는 단계를 더 포함할 수 있다.

Description

소프트웨어 분석 방법 및 장치 {Method and Apparatus For Software Analysis}
본 발명은 소프트웨어 분석 방법 및 장치에 관한 것이다.
소프트웨어는 현장 모니터링, 위험 감지 및 분석, 위험 경보 및 전파, 현장 대응, 안전 교육 등에 활용됨으로써 재난을 예방하고, 재난으로 발생한 피해를 최소화하며, 재난으로부터의 신속한 복구를 위해 광범위하게 사용되고 있다. 미국, 유럽, 일본 등 주요 선진국에서는 각 국에 심각한 피해를 주는 재해나 재난사고 예방과 대응을 위한 지능형 재난방재 시스템 개발을 적극적으로 전개하고 있으며, 최근에는 드론과 로봇을 이용하여 재난을 방지하거나 재난 현장에 투입하기 위한 연구개발이 활발하게 이루어지고 있다.
한편, 소프트웨어 자체가 재난 안전사고의 원인이 될 수도 있다. 에너지 관리시스템의 소프트웨어 오류로 인해 세계 최고 수준의 전력망과 기술을 가진 미국에서 역사상 최대 규모의 정전 사고가 발생한 바 있고, 자동차 전자제어장치(Electronic control unit)에 내장된 소프트웨어 결함에 의해 급발진 사고가 발생한 적도 있다. 이렇듯 자동차, 철도, 항공, 전력, 국방, 의료, 금융, 통신 등의 부분에서 소프트웨어의 의존도가 높아짐에 따라 소프트웨어 오류로 인한 인명, 재난의 피해 범위와 규모가 확대되고 있어, 소프트웨어의 안전(Software safety)을 체계적으로 관리해야 하는 필요성이 대두되고 있다.
IoT 및 산업 전반에 소프트웨어가 확산되면서 소프트웨어 결함 및 장애로 인한 인명살상이나 재난 손실의 위험이 증가됨에 따라 소프트웨어 안전진단의 중요성이 날로 부각되고 있으나, 소프트웨어 안전진단은 현재 소수의 도메인 소프트웨어 안전진단 전문가들의 경험을 기반으로 수행되어 있어 소프트웨어 산업 확산 속도에 크게 못 미치고 있는 상황이다.
더욱이, 소프트웨어 안전진단을 위해서는 소프트웨어 요구사항문서를 분석하는 작업이 선행되어야 하기 때문에 소프트웨어 요구사항문서가 분실되었거나, 소프트웨어 개발 후 소스 코드를 여러 번의 수정하거나 기능을 추가한 경우에는 위험에 대해 분석할 수 있는 정보가 없거나 매우 부족하기 때문에 요구사항문서를 기초로 하는 소프트웨어 안전진단을 할 수 없는 상황이 발생하게 된다.
본 발명의 과제는 도메인 소프트웨어 안전진단 전문가들의 직접적인 도움 없이 소프트웨어 위험성을 확인할 수 있도록 소프트웨어 안전진단을 간편하게 제공해주는 소프트웨어 분석 방법 및 장치를 제공하는 것이다.
본 발명의 다른 과제는 소프트웨어 구조에 관한 문서(즉, 요구사항문서)가 없어서 그 구조를 파악하기 어려운 상황에서도 소스 코드를 분석하여 어떤 서브 함수가 위험한지의 정보가 포함된 기능목록 구조화를 하여 소프트웨어 안전진단을 제공해주는 소프트웨어 분석 방법 및 장치를 제공하는 것이다.
본 발명이 해결하고자 하는 과제들은 이상에서 언급한 과제들에 제한되지 않으며, 언급되지 않은 또 다른 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
본 발명의 실시예의 일 특징에 따르면, 소프트웨어 분석 방법이 제공된다. 본 방법은, 소프트웨어의 소스 코드를 획득하는 단계를 포함할 수 있다. 여기서, 상기 소스 코드는 하나의 메인 함수와 상기 메인 함수가 호출하는 복수의 서브 함수를 포함하며, 상기 복수의 서브 함수의 각각은 기본 라이브러리 또는 사용자 라이브러리로 분류되고, 주석, 함수 명, 입력 파라미터 명 및 내부 구현 텍스트를 포함하는 함수 정보를 포함한다. 본 방법은, 상기 소스 코드를 연산하여 상기 복수의 서브 함수로 구성되는 함수구문 트리를 생성하는 단계, 상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각을 추상 레벨 또는 구체 레벨로 분류하는 단계, 상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각의 기능을 추론하는 단계, 및 상기 복수의 서브 함수 중 상기 추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록함수 구조화 트리를 생성하는 단계를 더 포함할 수 있다.
일 실시예에서, 상기 소스 코드를 연산하여 상기 복수의 서브 함수로 구성되는 함수구문 트리를 생성하는 단계는, 상기 소스 코드를 스캔하고 파싱하여 추상구문 트리(abstract syntax tree)를 생성하는 단계, 및 구문 분석기(semantic analyzer)를 이용하여 상기 추상구문 트리를 함수구문 트리로 변환하는 단계를 포함할 수 있다.
일 실시예에서, 상기 추상 레벨 또는 구체 레벨로 분류하는 단계는 상기 복수의 서브 함수 각각에 대해서 상호호출 관계를 산출하는 단계, 상기 상호호출 관계를 기초로 상기 해당 서브 함수가 다른 서브 함수를 참조하는 개수인 원심성 값 및 다른 함수가 상기 해당 서브 함수를 참조하는 개수인 구심성 값을 구하는 단계, 상기 해당 서브 함수의 상기 원심성 값 및 상기 구심성 값을 기초로 상기 해당 서브 함수의 불안정성 값을 산출하는 단계, 및 상기 불안정성 값이 제1 기준 값 이상이면 상기 해당 서브 함수를 상기 추상 레벨로 분류하고, 상기 불안정성 값이 상기 제1 기준 값 미만이면 상기 해당 서브 함수를 상기 구체 레벨로 분류하는 단계를 포함할 수 있다.
일 실시예에서, 소프트웨어 분석 방법은 상기 복수의 서브 함수 중 상기 추상 레벨로 분류된 서브 함수들 각각을 루트 노드로 정의 하고, 상기 루트 노드를 시작으로 트리를 구성하는 단계를 더 포함할 수 있다. 여기서 상기 트리에서는, 다른 서브 함수를 호출하는 서브 함수를 부모 노드로 정의하고 상기 부모 노드에 해당하는 서브 함수가 호출하는 다른 서브 함수를 자식 노드로 정의할 수 있다.
일 실시예에서, 상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각의 기능을 추론하는 단계는 상기 함수구문 트리를 구성하는 상기 복수의 서브 함수를 상기 기본 라이브러리에 속하는 제1 서브 함수 그룹과 상기 사용자 라이브러리에 속하는 제2 서브 함수 그룹으로 분류하는 단계, 상기 소스 코드가 작성된 프로그래밍 언어에서 사전에 정의된 기능 목록을 기초로 상기 제1 서브 함수그룹의 서브 함수들의 각각의 기능을 추론하는 제1 서브 함수그룹 의미 추론 단계, 및 상기 제2 서브 함수 그룹의 서브 함수들 각각의 함수 정보를 기초로 상기 제2 서브 함수 그룹의 서브 함수들 각각의 기능을 추론하는 제2 서브 함수그룹 의미 추론 단계를 포함할 수 있다.
일 실시예에서, 상기 제2 서브 함수그룹 의미 추론 단계는 상기 제2 그룹의 서브 함수들 각각의 함수 정보를 텍스트 마이닝하여 주제 DB에서 가장 유사한 기능을 도출하고, 상기 가장 유사한 기능을 상기 해당 제2 그룹 서브 함수의 기능으로 매핑하는 단계를 포함할 수 있다.
일 실시예에서, 상기 추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록함수 구조화 트리를 생성하는 단계는 상기 복수의 서브 함수 중 추상 레벨로 분류된 서브 함수들을 부모 노드들로 정의하고, 상기 부모 노드들에 해당하는 서브 함수들 각각이 호출하는 적어도 하나의 다른 서브 함수를 상기 해당 부모 노드의 자식 노드로 정의하는 추상 수준에 따른 함수 구조화 트리 재작성 단계, 및 상기 재배열된 함수구문 트리에 포함된 복수의 노드들 각각에 대해서, 상기 해당 노드에 대응하는 서브 함수와 형제 노드에 대응하는 서브 함수의 기능이 동일한 경우, 상기 해당 노드에 대응하는 서브 함수와 형제 노드에 대응하는 서브 함수를 그룹핑하는 단계를 포함할 수 있다. 여기서, 상기 형제 노드는 상기 해당 노드와 부모 노드가 동일한 노드로 정의된다.
일 실시예에서, 상기 생성된 기능목록함수 구조화 트리를 그래픽 유저 인터페이스로 제공하는 단계를 더 포함할 수 있다.
일 실시예에서, 상기 산출된 원심성 값 및 상기 산출된 구심성 값을 기초로 불안정성 값을 산출하는 단계는, 수식 1에 따라 불안정성 값을 계산하는 단계를 포함할 수 있다.
수식 1:
Figure 112015093730899-pat00001
일 실시예에서, 상기 제1 기준 값은 0.8일 수 있다.
일 실시예에서 상기 산출된 원심성 값 및 상기 산출된 구심성 값을 기초로 불안정성 값을 산출하는 단계는, 상기 산출된 불안정성 값이 제2 기준 값 이하인 경우 상기 해당 서브 함수를 위험성 높은 함수로 분류하는 단계를 더 포함할 수 있다.
본 발명의 실시예의 다른 특징에 따르면 소프트웨어 분석 장치가 제공된다. 본 소프트웨어 분석 장치는 입력된 소스 코드를 연산하여 복수의 서브 함수로 구성되는 함수구문 트리를 생성하도록 구성된 함수구분 트리 생성 모듈을 포함할 수 있다. 이 경우 상기 소스 코드는 하나의 메인 함수와 상기 메인 함수가 호출하는 복수의 서브 함수를 포함하며, 상기 복수의 서브 함수의 각각은 기본 라이브러리 또는 사용자 라이브러리로 분류되고, 주석, 함수 명, 입력 파라미터 명 및 내부 구현 텍스트를 포함하는 함수 정보를 포함할 수 있다. 본 장치는, 상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각을 추상 레벨 또는 구체 레벨로 분류하도록 구성된 추상/구체 레벨 분류 모듈, 상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각의 기능을 추론하도록 구성된 함수기능 추론 모듈, 및 상기 복수의 서브 함수 중 상기 추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록함수 구조화 트리를 생성하도록 구성된 기능목록함수 구조화 트리 생성 모듈을 더 포함할 수 있다.
일 실시예에서, 상기 기능목록함수 구조화 트리 생성 모듈은 상기 복수의 서브 함수 중 추상 레벨로 분류된 서브 함수들을 부모 노드들로 정의하고, 상기 부모 노드들에 해당하는 서브 함수들 각각이 호출하는 적어도 하나의 다른 서브 함수를 상기 해당 부모 노드의 자식 노드로 정의하는 추상 수준에 따른 함수 구조화 트리로 재작성하고, 상기 재배열된 함수구문 트리에 포함된 복수의 노드들 각각에 대해서, 상기 해당 노드에 대응하는 서브 함수와 형제 노드에 대응하는 서브 함수의 기능이 동일한 경우, 상기 해당 노드에 대응하는 서브 함수와 형제 노드에 대응하는 서브 함수를 그룹핑하도록 더 구성될 수 있다. 이 경우, 상기 형제 노드는 상기 해당 노드와 부모 노드가 동일한 노드로 정의된다.
본 발명의 실시예들에 따른 소프트웨어 분석 방법 및 장치에 따르면, 도메인 소프트웨어 안전진단 전문가들의 직접적인 도움 없이 소프트웨어 위험성을 확인할 수 있도록 하여 소프트웨어 안전진단을 간편하게 제공해 주는 효과가 제공된다.
본 발명의 실시예들에 따른 소프트웨어 분석 방법 및 장치에 따르면, 소프트웨어 구조에 관한 문서가 없어 그 구조를 파악하기 어려운 상황에서도 소프트웨어 안전진단을 제공해주는 등 사용의 편의성을 제공해 주는 효과가 있다.
도 1은 본 발명의 일 실시예에 따른 소프트웨어 분석을 제공하기 위한 예시적인 프로세스의 흐름도이다.
도 2는 본 발명의 일 실시예에 따라 소스 코드를 어휘 분석하여 토큰 열로 분석하고, 파서(Parser)를 이용하여 구문 분석하는 과정을 나타내는 도면이다.
도 3은 본 발명의 일 실시예에 따라 추상구문 트리를 연산하여 생성한 함수구문 트리를 도시하는 도면이다.
도 4a 내지 도 4d는 도 3의 함수구문 트리를 구성하는 일부 서브 함수의 상호호출 관계를 나타내는 도면이다.
도 5는 본 발명의 일실시예에 따라 도 4a 내지 도 4d의 서브 함수를 추상 레벨과 구체 레벨로 분류한 표이다.
도 6은 도 3의 함수구문 트리의 일부를 추상 레벨에 따른 함수 구조화 트리로 재작성하는 과정을 나타내는 도면이다.
도 7은 본 발명의 일 실시예에 따른 도메인(전문) 영역의 주제, 일반 기능 목록의 주제가 미리 정의된 DB 정보를 도시하는 도면이다.
도 8은 본 발명의 일 실시예에 따른 추론된 기능이 동일한 서브 함수들을 그룹핑하는 과정을 나타내는 도면이다.
도 9는 본 발명의 일 실시예에 따른 기능목록 함수 구조화 트리를 도시하는 도면이다.
도 10은 소프트웨어를 분석하기 위한 예시적인 장치를 도시한 도면이다.
본 발명의 이점들과 특징들 그리고 이들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해 질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 것이며, 본 실시예들은 단지 본 발명의 개시가 완전하도록 하며 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려 주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다.
본 명세서에서 사용되는 용어는 단지 특정한 실시예를 설명하기 위해 사용되는 것으로 본 발명을 한정하려는 의도에서 사용된 것이 아니다. 예를 들어, 단수로 표현된 구성 요소는 문맥상 명백하게 단수만을 의미하지 않는다면 복수의 구성 요소를 포함하는 개념으로 이해되어야 한다. 또한, 본 발명의 명세서에서, '포함하다' 또는 '가지다' 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것일 뿐이고, 이러한 용어의 사용에 의해 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성이 배제되는 것은 아니다.
본 명세서에 기재된 실시예에 있어서 '모듈' 혹은 '부'는 적어도 하나의 기능이나 동작을 수행하는 기능적 부분을 의미하며, 하드웨어 또는 소프트웨어로 구현되거나 하드웨어와 소프트웨어의 결합으로 구현될 수 있다. 또한, 복수의 '모듈' 혹은 복수의 '부'는 특정한 하드웨어로 구현될 필요가 있는 '모듈' 혹은 '부'를 제외하고는 적어도 하나의 모듈로 일체화되어 적어도 하나의 프로세서로 구현될 수 있다.
덧붙여, 다르게 정의되지 않는 한 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미가 있는 것으로 해석되어야 하며, 본 발명의 명세서에서 명백하게 정의하지 않는 한 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 첨부된 도면을 참조하여 본 발명의 실시예를 보다 상세히 설명한다. 다만, 이하의 설명에서는 본 발명의 요지를 불필요하게 흐릴 우려가 있는 경우, 널리 알려진 기능이나 구성에 관한 구체적 설명은 생략하기로 한다.
도 1은 본 발명의 일 실시예에 따른 소프트웨어 분석을 제공하기 위한 예시적인 프로세스의 흐름도이다. 도 1에 도시된 바와 같이, 예시적인 실시예에서, 소프트웨어 분석은 소스 코드를 획득하는 단계(S110)로부터 시작된다. 분석하고자 하는 소스 코드를 획득한 후, 스캐너(Scanner)를 이용하여 소스 코드를 대상으로 하여 어휘 분석을 실시하여 소스 코드를 토큰(Token) 열로 모두 분리하고, 어휘 분석을 통해 만들어진 토큰 열에 대해서 파서(Parser)를 이용하여 구문 문석을 수행하여 추상구문 트리(Abstract syntax tree)를 생성한다(S120). 일 실시예에서, 소스 코드는 하나의 메인 함수와 메인 함수가 호출하는 복수의 서브 함수를 포함하며, 복수의 서브 함수의 각각은 기본 라이브러리 또는 사용자 라이브러리로 분류되고, 주석, 함수 명, 입력 파라미터 명 및 내부 구현 텍스트를 포함하는 함수 정보를 포함할 수 있다.
단계(S130)에서는 구문분석 결과로 생성된 추상구문 트리를 의미 분석기(Semantic Analyzer)를 이용하여 함수의 의미에 따라 필요한 정보를 유추 또는 분석하여 함수구문 트리로 변환할 수 있다. 단계(S140)에서는 함수구문 트리를 구성하는 복수의 서브 함수 간의 상호호출 관계를 기초로 복수의 서브 함수 각각을 추상 레벨 또는 구체 레벨로 분류할 수 있다. 단계(S150)에서는 함수구문 트리를 추상 수준에 따른 함수 구조화 트리를 재작성할 수 있다. 단계(S160)에서는 재작성된 함수 구조화 트리를 구성하는 복수의 서브 함수 각각의 기능을 추론할 수 있다. 단계(S170)에서는 추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록 함수 구조화 트리를 생성할 수 있다.
도 2는 본 발명의 일 실시예에 따라 소스 코드를 어휘 분석하여 토큰 열로 분석하고, 파서(Parser)를 이용하여 구문 분석하는 과정을 나타내는 도면이다. 이하, 도 2를 참고로 도 1의 단계(S120)를 보다 구체적으로 설명한다. 도 2에 도시된 바와 같이, 예시적인 실시예에서 획득한 소스 코드는 아래와 같다.
소스 코드:
if x = 10 then x+5
else 30
일 실시예에 있어서, 소스 코드가 작성된 프로그래밍 언어에서 사전에 정의되어 있는 스캐너 및 파서를 이용하여 소스 코드를 어휘 분석하면, 'if', 'then' 및 'else'는 예약어로 분석되고, 'x'는 식별자로 분석되며, 수학 기호인 '=' 및 '+'는 수학 기호로서 분석되고, '10', '5' 및 '30'은 정수로 분석됨을 알 수 있다. 일 실시예에서, 스캐너는 렉서 제너레이터(Lexer generator)를 이용할 수 있다. 분석된 토큰 열 각각에 대해 파서를 이용하여 구문 분석을 하면 추상구문 트리(abstract syntax tree)를 생성할 수 있다. 일 실시예에서, 파서는 파서 제너레이터(Parser generator)를 이용할 수 있다.
도 3은 본 발명의 일 실시예에 따라 추상구문 트리를 연산하여 생성한 함수구문 트리를 도시하는 도면이다. 이하, 도 3을 참고로 도 1의 단계(S130)를 보다 구체적으로 설명한다.
추상구문 트리에 대해서 구문 분석기(semantic analyzer)를 이용하여 필요한 정보를 유추 및 분석함으로써 추상구문 트리를 추상화하여 함수구문 트리를 생성할 수 있다. 일 실시예에 있어서, 함수구문 트리는 복수의 서브 함수의 상호호출 관계를 도시할 수 있다. 도 3의 예시적인 함수구문 트리는 함수 명('sysdev_class_remvoe_file')을 가지는 함수를 루트 노드로 하여 복수의 서브 함수들의 상호호출 관계에 따라 복수의 서브 함수들을 부모 노드 또는 자식 노드로 연결한 트리이다.
도 4a 내지 도 4d는 도 3의 함수구문 트리를 구성하는 복수의 서브 함수 중 일부 서브 함수들의 상호호출 관계를 나타내는 도면이다.
일 실시예에서, 함수구문 트리를 구성하는 복수의 서브 함수 각각에 대해 상호호출 관계를 확인할 수 있다. 예컨대, 도 4a에서 함수 명('sysfs_drop_dentry')을 가지는 서브 함수는 함수 명('sysfs_addrm_finish')을 가지는 서브 함수에 의해 호출된다. 도 4a에서 함수 명('sysfs_drop_dentry')을 가지는 서브 함수는 9개의 서브 함수를 호출하는데, 각 서브 함수 명은 'sysfs_type', 'mutex_unlock', '_d_drop', 'd_put', 'd_unhashed', 'dget_locked', 'mutex_lock', 'iput', 및 'ilookup' 이다.
도 4b에서 함수 명('sysfs_addrm_finish')을 가지는 서브 함수는 함수 명('sysfs_hash_and_remove')을 가지는 서브 함수에 의해 호출된다. 도 4b에서 함수 명('sysfs_addrm_finish')을 가지는 서브 함수는 6개의 서브 함수를 호출하는데, 각 서브 함수 명은 'sysfs_deactivate', 'sysfs_put', 'unmap_bin_file', mutex_unlock', 'sysfs_drop_dentry' 및 'iput'이다.
도 4c에서 함수 명('list_empty')을 가지는 서브 함수는 6개의 서브 함수에 의해 호출되는데, 호출하는 서브 함수의 함수 명은 'unmap_mapping_range', 'dput', '_mutex_unlock_common_slowpath', 'dentry_lru_del', '_mutex_lock_common' 및 '_mutex_trylock_slowpath'이다.
도 4d에서 함수 명('mutex_unlock')을 가지는 서브 함수는 4개의 서브 함수에 의해 호출되는데, 호출하는 서브 함수의 함수명은 'sysfs_addrm_finish', 'sysfs_drop_dentry', 'unmap_bin_file' 및 'sysfs_addrm_start'이다. 한편, 함수 명('mutex_unlock')을 가지는 서브 함수는 2개의 서브 함수를 호출하는데, 각 서브 함수 명은 '_mutex_unlock_slowpath' 및 'mutex_clear_owner'이다.
도 5는 본 발명의 일 실시예에 따라 도 4a 내지 도 4d의 서브 함수를 추상 레벨과 구체 레벨로 분류한 표이다. 도 5를 참고하여 도 1의 단계(S140)를 보다 상세하게 설명한다.
도 1의 단계(S140)에서 복수의 서브 함수 각각을 추상 레벨 또는 구체 레벨로 분류한다. 일 실시예에서, 복수의 서브 함수 각각을 추상 레벨 또는 구체 레벨로 분류하는 것은 복수의 서브 함수 각각에 대해서 상호호출 관계를 기초로 분류할 수 있다. 일 실시예에서, 해당 서브 함수의 상호호출 관계를 기초로 해당 서브 함수가 다른 서브 함수를 참조하는 개수인 원심성 값 및 다른 함수가 해당 서브 함수를 참조하는 개수인 구심성 값을 구할 수 있으며, 이를 기초로 해당 서브 함수의 불안정성 값을 산출할 수 있다. 일 실시예에서, 불안정성은 아래 수학식 1에 의해 구할 수 있다.
Figure 112015093730899-pat00002
도 4a 내지 4d에 도시된 서브 함수 각각의 원심성 값, 구심성 값 및 불안정성 값을 아래와 같이 구할 수 있다.
도 4a에서 함수 명('sysfs_drop_dentry')을 가지는 서브 함수는 9개의 서브 함수를 호출하고, 1개의 서브 함수에 의해 호출되므로 원심성은 9이고, 구심성은 1이다. 따라서, 불안정성은 0.9이다.
도 4b에서 함수 명('sysfs_addrm_finish')을 가지는 서브 함수는 6개의 서브 함수를 호출하고, 1개의 서브 함수에 의해 호출되므로 원심성은 6이고, 구심성은 1이다. 따라서, 불안정성은 0.86이다.
도 4c에서 함수 명('list_empty')을 가지는 서브 함수는 0개의 서브 함수를 호출하고, 6개의 서브 함수에 의해 호출되므로 원심성은 0이고, 구심성은 6이다. 따라서, 불안정성은 0이다.
도 4d에서 함수 명('mutex_unlock')을 가지는 서브 함수는 2개의 서브 함수를 호출하고, 4개의 서브 함수에 의해 호출되므로 원심성은 2이고, 구심성은 4이다. 따라서, 불안정성은 0.33이다.
일 실시예에 있어서, 불안정성 값이 제1 기준 값 이상이면 해당 서브 함수를 추상 레벨로 분류하고, 불안정성 값이 제1 기준 값 미만이면 해당 서브 함수를 구체 레벨로 분류할 수 있다. 제1 기준 값은 복수의 서브 함수의 불안정성의 분포를 기초로 결정되거나, 사전 정의된 값일 수 있다.
도 5에 도시된 바와 같이, 일 실시예에 있어서, 불안정성에 대한 제1 기준 값이 0.8이라면, sysfs_drop_dentry의 불안정성 값 및 sysfs_addrm_finish의 불안정성 값은 제1 기준 값인 0.8보다 크므로 sysfs_drop_dentry 및 sysfs_addrm_finish은 추상 레벨로 분류되며, list_empty의 불안정성 값 및 mutex_unlock의 불안정성 값은 제1 기준 값인 0.8보다 작으므로 list_empty 및 mutex_unlock은 구체 레벨로 분류될 수 있다.
도 6은 도 3의 함수구문 트리의 일부를 추상 레벨에 따른 함수 구조화 트리로 재작성하는 과정을 나타내는 도면이다. 도 6을 참고하여, 단계(S150)를 보다 상세하게 설명한다.
일 실시예에서, 복수의 서브 함수 중 추상 레벨로 분류된 서브 함수들을 부모 노드들로 정의하고, 부모 노드들에 해당하는 서브 함수들 각각이 호출하는 적어도 하나의 다른 서브 함수를 해당 부모 노드의 자식 노드로 정의하여 추상 레벨에 따른 함수 구조화 트리를 생성할 수 있다.
일 실시예에서, 추상 레벨로 분류된 'sysfs_drop_dentry' 및 'sysfs_addrm_finish'는 부모 노드가 되고, 부모 노드로부터 시작하여 호출 관계를 참조하여 트리를 재작성할 수 있다. 예컨대, 함수 명('sysfs_drop_dentry')을 가지는 서브 함수는 9개의 서브 함수를 호출하는데, 호출되는 각 서브 함수 명은 'sysfs_type', 'mutex_unlock', '_d_drop', 'd_put', 'd_unhashed', 'dget_locked', 'mutex_lock', 'iput', 및 'ilookup' 이므로, 각 서브 함수가 자식 노드가 될 수 있다. 호출된 서브 함수 각각은 다시 다른 서브 함수를 호출하여 이를 자식 노드를 가질 수 있다. 예컨대, 'iput' 서브 함수는 다시 'list_empty'를 호출하여 자식노드로 가지게 된다.
도 7은 본 발명의 일 실시예에 따른 도메인(전문) 영역의 주제, 일반 기능 목록의 주제가 미리 정의된 DB 정보를 도시하는 도면이다. 도 7을 참고하여 도 1의 단계(S160)를 보다 상세하게 설명한다.
도 1의 단계(S160)에서 복수의 서브 함수 각각의 기능을 추론할 수 있다. 일 실시예에서, 복수의 서브 함수 각각의 기능을 추론하는 것은 함수구문 트리를 구성하는 복수의 서브 함수를 기본 라이브러리에 속하는 제1 서브 함수 그룹과 사용자 라이브러리에 속하는 제2 서브 함수 그룹으로 분류하고, 소스 코드가 작성된 프로그래밍 언어에서 사전에 정의된 기능 목록을 기초로 제1 서브 함수그룹의 서브 함수들의 각각의 기능을 추론하고, 제2 서브 함수 그룹의 서브 함수들 각각의 함수 정보를 기초로 제2 서브 함수 그룹의 서브 함수들 각각의 기능을 추론할 수 있다.
일 실시예에서, 제2 그룹의 서브 함수들 각각의 함수 정보에 대해 텍스트 마이닝 기법을 이용하여 주제 DB에서 가장 유사한 기능을 도출하고, 가장 유사한 기능을 해당 제2 그룹 서브 함수의 기능으로 매핑하므로써 제2 서브 함수그룹 의미 추론할 수 있다. 이때 함수 정보는 주석, 함수 명, 입력 파리미터 명, 내부 구현 텍스트 등 서브 함수 내의 모든 텍스트 정보를 포함할 수 있다. 즉, 각 서브 함수의 함수 정보와 DB 정보에 대해 상호 텍스트 유사도를 비교함으로써 가장 높은 유사도를 가지는 주제를 도출하여 해당 서브 함수에 매핑할 수 있다. 예컨데, 함수 정보와 DB 정보의 문자열('Stream', 'Exit', 'Save', 'Delete', 'Directory', 'Path', 'Close', 'Print', 'Print as', 'Recent') 의 유사도를 비교하여 높은 유사도를 가지는 경우 해당 서브 함수의 기능은 "파일"로 추론될 수 있다.
일 실시예에서, 텍스트 마이닝 기법은 "문서 분류(Text Classfication)와 문서 클러스터링(Text Clustering)", "토픽 트랙킹(Topic Tracking)", "웹 마이닝(Web Mining)", "질의응답 시스템(Question Answering)", "Concept linkage", "문서 요약(Summarization)", "Duo-Mining" 및 "정보 추출(Information Extraction)" 기법 중 적어도 하나를 사용할 수 있다.
도 8은 본 발명의 일 실시예에 따른 추론된 기능이 동일한 서브 함수들을 그룹핑하는 과정을 나타내는 도면이다. 도 8을 참고하여 도 1의 단계(S170)를 보다 상세하게 설명한다.
추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록함수 구조화 트리를 생성할 수 있다. 일 실시예에서, 복수의 서브 함수 중 추상 레벨로 분류된 서브 함수들을 부모 노드들로 정의하고, 부모 노드들에 해당하는 서브 함수들 각각이 호출하는 적어도 하나의 다른 서브 함수를 해당 부모 노드의 자식 노드로 정의하는 추상 수준에 따른 함수 구조화 트리 재작성할 수 있다. 일 실시예에서 재작성된 함수구문 트리에 포함된 복수의 노드들 각각에 대해서, 해당 노드에 대응하는 서브 함수와 형제 노드에 대응하는 서브 함수의 기능이 동일한 경우, 해당 노드에 대응하는 서브 함수와 형제 노드에 대응하는 서브 함수를 그룹핑할 수 있다. 이때, 형제 노드는 해당 노드와 부모 노드가 동일한 노드를 의미한다.
즉, 서로 다른 서브 함수의 유추된 기능이 동일한 경우, 2개의 함수를 1개로 그룹핑하고, 하위 서브 함수들도 그룹핑할 수 있다. 예컨대, 함수 명이 'sysfs_drop_dentry'인 서브 함수의 유추된 기능이 "삭제"이고, 함수 명이 'sysfs_addrm_finish'인 서브 함수의 유추된 기능이 "삭제"인 경우, 두 개의 서브 함수를 동일한 기능을 기준으로 그룹핑하고(즉, "삭제('sysfs_drop_dentry', 'sysfs_addrm_finish')"), 해당 서브 함수가 호출하는 함수들도 하위 그룹으로 그룹핑할 수 있다.
도 9는 본 발명의 일 실시예에 따른 기능목록 함수 구조화 트리를 도시하는 도면이다.
일 실시예에서, 최상위 부모 노드들은 주제("File", "Edit", "Options", "Analyze", "Allocate", "Help")를 나타내며, 각 주제와 서브 함수의 기능에 매핑된 경우, 해당 서브 함수를 부모 노드의 자식 노드로 정의할 수 있다. 예컨데, 주제("Edit")과 매핑된 함수 명('Tolerances', 'NodeDOF', 'Allocation Data', 및 'Process Data')의 서브 함수들의 기능은 "Edit"으로 동일하다.
일 실시예에서 기능목록 함수 구조화 트리를 그래픽 유저 인터페이스로 제공함으로써, 사용자가 기능목록 함수 구조화 트리를 보다 직관적으로 인식할 수 있도록 해 줄 수 있다. 일 실시예에서, 복수의 서브 함수에 대해서 불안정성 값이 일정 설정 수준(가령 0.3) 이하인 서브 함수를 따로 표시하여 해당 서브 함수가 포함된 모듈이 다른 모듈에서 참조가 많이 되고 있는 위험한 모듈임을 쉽게 알 수 있게 할 수 있다.
이상에서 설명한 바와 같이 본 발명은 실물형상인 소스 코드로부터 함수 목록을 도출하므로 위험 요소를 판단할 때 누락의 실수 및 위험을 예방할 수 있고, 함수 간의 의존 관계의 빠른 식별이 가능하게 되어 집중해서 위험을 분석해야 할 함수 또는 모듈이 무엇인지 빠르게 확인이 가능하다.
더욱이, 함수 간의 구조 분서의 이해도 및 정확도의 향상을 기대할 수 있으며, 함수 목록의 자동 도출을 통해 시간 및 인력에 대한 비용 절감 효과를 기대할 수 있다.
도 10은 소프트웨어를 분석하기 위한 예시적인 소프트웨어 분석 장치(100)를 도시한 도면이다. 상술된 바와 같이, 예시적인 실시예에서, 소프트웨어 분석 장치(100)는 프로세싱부(110), 저장부(120) 및 입출력부(130)를 포함할 수 있다. 프로세싱부(110), 저장부(120), 및 입/출력부(130)는 서로 연결되어(연결은 도 10에 도시되지 않음), 서로 간에 통신하도록 한다. 분석 장치(100)는 분산 프로세서를 포함할 수 있고, 분석 장치(100)의 각 부분(예를 들면, 프로세싱부(110), 저장부(120), 및 입/출력부(130))은 분산 프로세서를 포함할 수 있다. 소프트웨어 분석 장치(100)는 소프트웨어를 분석하는 것에 연관된 동작을 수행할 수 있다. 예를 들면, 프로세싱부(110)는 소프트웨어 분석을 실행하고, 저장부(120)로부터 소프트웨어 분석 메트릭들을 검색하고, 소프트웨어 분석 메트릭들을 저장할 수 있다. 저장부(120)는 소프트웨어를 분석하는 것에 연관된 모든 파라미터들을 저장할 수 있다.
소프트웨어 분석 장치(100)는 프로세싱부(110)를 포함할 수 있다. 프로세싱부(110)는 입력된 소스 코드를 연산하여 복수의 서브 함수로 구성되는 함수구문 트리를 생성하도록 구성된 함수구분 트리 생성 모듈(112) - 소스 코드는 하나의 메인 함수와 메인 함수가 호출하는 복수의 서브 함수를 포함하며, 복수의 서브 함수의 각각은 기본 라이브러리 또는 사용자 라이브러리로 분류되고, 주석, 함수 명, 입력 파라미터 명 및 내부 구현 텍스트를 포함하는 함수 정보를 포함함-, 함수구문 트리를 구성하는 복수의 서브 함수 각각을 추상 레벨 또는 구체 레벨로 분류하도록 구성된 추상/구체레벨 분류 모듈(114), 함수구문 트리를 구성하는 복수의 서브 함수 각각의 기능을 추론하도록 구성된 함수 기능 추론 모듈(116), 및 복수의 서브 함수 중 추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록함수 구조화 트리를 생성하도록 구성된 기능목록함수 구조화 트리 생성 모듈(118)을 포함할 수 있다.
일 실시예에 있어서, 기능목록함수 구조화 트리 생성 모듈(118)은 복수의 서브 함수 중 추상 레벨로 분류된 서브 함수들을 부모 노드들로 정의하고, 부모 노드들에 해당하는 서브 함수들 각각이 호출하는 적어도 하나의 다른 서브 함수를 해당 부모 노드의 자식 노드로 정의하는 추상 수준에 따른 함수 구조화 트리로 재작성하고, 재배열된 함수구문 트리에 포함된 복수의 노드들 각각에 대해서, 해당 노드에 대응하는 서브 함수와 형제 노드에 대응하는 서브 함수의 기능이 동일한 경우, 해당 노드에 대응하는 서브 함수와 형제 노드에 대응하는 서브 함수를 그룹핑하도록 더 구성될 수 있다. 이 경우, 형제 노드는 해당 노드와 부모 노드가 동일한 노드이다.
이상으로 설명한 프로세싱부(110)는, 응용 주문형 집적 회로(Application Specific Integrated Circuits: ASICs), 디지털 신호 처리기(Digital Signal Processors: DSPs), 디지털 신호 처리 소자(Digital Signal Processing Devices: DSPDs), 프로그램 가능 논리 소자(Programmable Logic Devices: PLDs), 현장 프로그램 가능 게이트 어레이(Field-Programmable Gate Arrays: FPGAs), 프로세서(processors), 제어기(controllers), 마이크로 컨트롤러(micro-controllers) 및 마이크로 프로세서(microprocessors) 중 적어도 하나에 기반한 하드웨어 플랫폼(hardware platform)으로서 구현될 수 있다. 프로세싱부(110)는 또한 전술한 하드웨어 플랫폼 상에서 실행 가능한 펌웨어(firmware)/소프트웨어 모듈로 구현될 수 있다. 이 경우, 소프트웨어 모듈은 적절한 프로그램(program) 언어로 쓰여진 소프트웨어 애플리케이션(application)에 의해 구현될 수 있다.
소프트웨어 분석 장치(100)는 저장부(120)를 더 포함할 수 있다. 예시적인 실시예에서, 저장부(120)는 소프트웨어 분석으로부터 나온 메트릭들을 저장할 수 있다.
소프트웨어 분석 장치(100)는 추가적인 특징/기능을 가질 수 있다. 예를 들면, 소프트웨어 분석 장치(100)는 자기 또는 광 디스크, 테이프, 플래시, 스마트 카드 또는 그들의 조합을 포함하지만 이에 제한되지는 않는 추가적인 저장장치(이동식 저장장치 및/또는 비이동식 저장장치)를 포함할 수 있다. 메모리와 같은 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위한 임의의 방법이나 기술로 구현된 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD, 또는 다른 광학 저장장치, 자기 카세트, 자기 테이프, 자기 디스크 저장장치 또는 다른 자기 저장 디바이스, USB 호환 메모리, 스마트 카드, 또는 원하는 정보를 저장하도록 사용되고 분석 장치(100)에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만 이에 한정되지는 않는다. 이러한 임의의 컴퓨터 저장 매체는 분석 장치(100)의 일부일 수 있다.
소프트웨어 분석 장치(100)는 입/출력부(130)를 더 포함할 수 있다. 입/출력부(130)는 소프트웨어를 분석하는 데에 이용되는, 상술된 바와 같은 컴포넌트들을 제공 및/또는 수신할 수 있다. 입/출력부(130)는 또 다른 시스템, 저장 장치 및/또는 데이터 스트림과 서로 데이터를 주고받을 수 있다. 입/출력부(130)는 여러 종류의 소프트웨어 분석에 대한 입력들을 수신하고, 여러 종류의 소프트웨어 분석에 분석 결과들을 제공할 수 있다. 일 실시예에서, 입/출력부(130)는 키보드, 마우스, 펜, 음성 입력 디바이스, 터치 입력 디바이스 등과 같은 입력 디바이스(132)를 가질 수 있다. 디스플레이, 스피커, 프린터 등과 같은 출력 디바이스(134) 역시 포함될 수 있다.
입/출력부(130)는 자신이 다른 디바이스들과 통신하도록 하는 통신 연결(들)(136)을 더 포함할 수 있다. 통신 연결(들)(136)은 통신 매체의 일례이다. 제한되지 않는 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 네트워크와 같은 유선 매체, 및 음향, RF, 적외선 및 다른 무선 매체와 같은 무선 매체를 포함한다. 본원에서 사용될 때 컴퓨터 판독가능 매체라는 용어는 저장 매체 및 통신 매체 모두를 포함한다.
소프트웨어 분석의 여러 실시예들이 컴퓨터화된 시스템에 특히 적합할 것으로 예상되지만, 본 명세서 내의 범주를 제한하도록 의도되지 않는다. 반대로, 본원에서 사용될 때, "컴퓨터 시스템"이라는 용어는 디바이스가 실제로 전자, 기계, 논리, 또는, 가상인지의 여부와는 관계없이, 디바이스 자체의 동작 및 실행을 제어하기 위해 정보를 저장 및 처리하고 및/또는 저장된 정보를 이용할 수 있는 임의의 모든 디바이스들을 포함하도록 의도된다.
본원에 기술된 다양한 기술들은 하드웨어 또는 소프트웨어 또는, 가능할 경우, 두 가지 모두의 조합에 연계하여 구현될 수 있다. 따라서, 반복적인 동적 및 정적 소프트웨어 분석에 대한 방법 및 장치, 또는 이것의 특정한 양태나 부분은 플로피 디스켓, CD-ROM, 하드 드라이브, 또는 임의의 다른 기계 판독가능 저장 매체와 같은 유형의 매체(tangible media) 내에 포함된 프로그램 코드(즉, 명령어)의 형태를 취할 수 있으며, 프로그램 코드가 컴퓨터와 같은 기계에 로드되고 기계에 의해 실행될 때, 그 기계는 반복적으로, 동적 및 정적으로 소프트웨어를 분석하기 위한 장치가 된다.
더하여, 프로그램(들)은 어셈블리나 기계 언어로 구현될 수 있다. 어느 경우에서도, 언어는 컴파일되거나 해석된 언어일 수 있고, 결합된 반복적인 동적 및 정적 소프트웨어 분석은, 전기적 배선이나 케이블링을 통하는 것, 광섬유를 통하는 것, 또는 임의의 다른 형태의 전송을 통하는 것과 같이, 소정의 전송 매체를 통해 전송되는 프로그램 코드 형태로 구현된 통신을 통해 실시될 수 있으며, 프로그램 코드가 EPROM, 게이트웨이, PLD(programmable logic device), 클라이언트 컴퓨터, 또는 이와 비슷한 것과 같은 기계로 수신되고 로드되어, 기계에 의해 실행될 때, 그 기계는 반복적인 동적 및 정적 소프트웨어 분석을 위한 장치가 된다. 범용 프로세서 상에서 구현된다면, 프로그램 코드는 프로세서와 결합되어 반복적인 동적 및 정적 소프트웨어 분석의 기능을 호출하도록 동작하는 독특한 장치를 제공할 것이다. 추가로, 반복적인 동적 및 정적 소프트웨어 분석에 관련하여 이용되는 임의의 저장 기술은 언제나 하드웨어와 소프트웨어의 조합일 수 있다.
소프트웨어 분석이 다양한 도면의 예시적인 실시예와 관련하여 기술되어져 왔지만, 다른 유사한 실시예들이 이용될 수 있고, 또는 본 발명을 벗어나지 않고서 반복적인 동적 및 정적 소프트웨어 분석의 동일한 기능을 수행하기 위한 수정 및 추가가, 설명된 실시예들에 대해 만들어질 수 있다는 것이 이해되어야 한다. 그러므로, 본원에 기술된 소프트웨어 분석은 어떤 단일 실시예로 한정되어서는 아니되며, 첨부 청구항에 따른 범위 및 범주안에서 이해되어져야 한다.
110: 프로세싱 부
112: 함수구문 트리 생성 모듈
114: 추상/구체 레벨 분류 모듈
116: 함수기능 추론 모듈
118: 기능목록 구조화 트리 생성 모듈
120: 저장부
130: 입출력부
132: 출력 디바이스
134: 입력 디바이스
136: 통신 연결

Claims (14)

  1. 소프트웨어 분석 방법으로서,
    소프트웨어의 소스 코드를 획득하는 단계 - 상기 소스 코드는 하나의 메인 함수와 상기 메인 함수가 호출하는 복수의 서브 함수를 포함하며, 상기 복수의 서브 함수의 각각은 기본 라이브러리 또는 사용자 라이브러리로 분류되고, 주석, 함수 명, 입력 파라미터 명 및 내부 구현 텍스트를 포함하는 함수 정보를 포함함 -,
    상기 소스 코드를 연산하여 상기 복수의 서브 함수로 구성되는 함수구문 트리를 생성하는 단계,
    상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각을 추상 레벨 또는 구체 레벨로 분류하는 단계,
    상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각의 기능을 추론하는 단계, 및
    상기 복수의 서브 함수 중 상기 추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록함수 구조화 트리를 생성하는 단계를 포함하고,
    상기 추상 레벨 또는 구체 레벨로 분류하는 단계는
    상기 복수의 서브 함수 각각에 대해서 상호호출 관계를 산출하는 단계,
    상기 상호호출 관계를 기초로 해당 서브 함수가 다른 서브 함수를 참조하는 개수인 원심성 값 및 다른 함수가 상기 해당 서브 함수를 참조하는 개수인 구심성 값을 구하는 단계,
    상기 해당 서브 함수의 상기 원심성 값 및 상기 구심성 값을 기초로 상기 해당 서브 함수의 불안정성 값을 산출하는 단계, 및
    상기 불안정성 값이 제1 기준 값 이상이면 상기 해당 서브 함수를 상기 추상 레벨로 분류하고, 상기 불안정성 값이 상기 제1 기준 값 미만이면 상기 해당 서브 함수를 상기 구체 레벨로 분류하는 단계를 포함하는, 소프트웨어 분석 방법.
  2. 제1항에 있어서,
    상기 소스 코드를 연산하여 상기 복수의 서브 함수로 구성되는 함수구문 트리를 생성하는 단계는
    상기 소스 코드를 스캔하고 파싱하여 추상구문 트리(abstract syntax tree)를 생성하는 단계, 및
    구문 분석기(semantic analyzer)를 이용하여 상기 추상구문 트리를 함수구문 트리로 변환하는 단계를 포함하는, 소프트웨어 분석 방법.
  3. 삭제
  4. 제1항에 있어서,
    상기 방법은
    상기 복수의 서브 함수 중 상기 추상 레벨로 분류된 서브 함수들 각각을 루트 노드로 정의 하고, 상기 루트 노드를 시작으로 트리를 구성하는 단계 - 상기 트리에서는, 다른 서브 함수를 호출하는 서브 함수를 부모 노드로 정의하고 상기 부모 노드에 해당하는 서브 함수가 호출하는 다른 서브 함수를 자식 노드로 정의함 - 를 더 포함하는 소프트웨어 분석 방법.
  5. 소프트웨어 분석 방법으로서,
    소프트웨어의 소스 코드를 획득하는 단계 - 상기 소스 코드는 하나의 메인 함수와 상기 메인 함수가 호출하는 복수의 서브 함수를 포함하며, 상기 복수의 서브 함수의 각각은 기본 라이브러리 또는 사용자 라이브러리로 분류되고, 주석, 함수 명, 입력 파라미터 명 및 내부 구현 텍스트를 포함하는 함수 정보를 포함함 -,
    상기 소스 코드를 연산하여 상기 복수의 서브 함수로 구성되는 함수구문 트리를 생성하는 단계,
    상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각을 추상 레벨 또는 구체 레벨로 분류하는 단계,
    상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각의 기능을 추론하는 단계, 및
    상기 복수의 서브 함수 중 상기 추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록함수 구조화 트리를 생성하는 단계를 포함하고,
    상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각의 기능을 추론하는 단계는
    상기 함수구문 트리를 구성하는 상기 복수의 서브 함수를 상기 기본 라이브러리에 속하는 제1 서브 함수 그룹과 상기 사용자 라이브러리에 속하는 제2 서브 함수 그룹으로 분류하는 단계,
    상기 소스 코드가 작성된 프로그래밍 언어에서 사전에 정의된 기능 목록을 기초로 상기 제1 서브 함수그룹의 서브 함수들의 각각의 기능을 추론하는 제1 서브 함수그룹 의미 추론 단계, 및
    상기 제2 서브 함수 그룹의 서브 함수들 각각의 함수 정보를 기초로 상기 제2 서브 함수 그룹의 서브 함수들 각각의 기능을 추론하는 제2 서브 함수그룹 의미 추론 단계를 포함하는, 소프트웨어 분석 방법.
  6. 제5항에 있어서,
    상기 제2 서브 함수그룹 의미 추론 단계는
    상기 제2 그룹의 서브 함수들 각각의 함수 정보를 텍스트 마이닝하여 주제 DB에서 가장 유사한 기능을 도출하고, 상기 가장 유사한 기능을 상기 해당 제2 그룹 서브 함수의 기능으로 매핑하는 단계를 포함하는 소프트웨어 분석 방법.
  7. 소프트웨어 분석 방법으로서,
    소프트웨어의 소스 코드를 획득하는 단계 - 상기 소스 코드는 하나의 메인 함수와 상기 메인 함수가 호출하는 복수의 서브 함수를 포함하며, 상기 복수의 서브 함수의 각각은 기본 라이브러리 또는 사용자 라이브러리로 분류되고, 주석, 함수 명, 입력 파라미터 명 및 내부 구현 텍스트를 포함하는 함수 정보를 포함함 -,
    상기 소스 코드를 연산하여 상기 복수의 서브 함수로 구성되는 함수구문 트리를 생성하는 단계,
    상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각을 추상 레벨 또는 구체 레벨로 분류하는 단계,
    상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각의 기능을 추론하는 단계, 및
    상기 복수의 서브 함수 중 상기 추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록함수 구조화 트리를 생성하는 단계를 포함하고,
    상기 추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록함수 구조화 트리를 생성하는 단계는
    상기 복수의 서브 함수 중 추상 레벨로 분류된 서브 함수들을 부모 노드들로 정의하고, 상기 부모 노드들에 해당하는 서브 함수들 각각이 호출하는 적어도 하나의 다른 서브 함수를 상기 해당 부모 노드의 자식 노드로 정의하는 추상 수준에 따른 함수 구조화 트리 재작성 단계, 및
    상기 재작성된 함수 구조화 트리에 포함된 복수의 노드들 각각에 대해서, 상기 해당 노드에 대응하는 서브 함수와 형제 노드에 대응하는 서브 함수의 기능이 동일한 경우, 상기 해당 노드에 대응하는 서브 함수와 형제 노드에 대응하는 서브 함수를 그룹핑하는 단계 - 상기 형제 노드는 상기 해당 노드와 부모 노드가 동일함 - 를 포함하는, 소프트웨어 분석 방법.
  8. 제7항에 있어서,
    상기 생성된 기능목록함수 구조화 트리를 그래픽 유저 인터페이스로 제공하는 단계를 더 포함하는 소프트웨어 분석 방법.
  9. 제1항에 있어서,
    상기 산출된 원심성 값 및 상기 산출된 구심성 값을 기초로 불안정성 값을 산출하는 단계는, 수식 1에 따라 불안정성 값을 계산하는 단계를 포함하는, 소프트웨어 분석 방법.
    수식 1:
    Figure 112016083546906-pat00003
  10. 제9항에 있어서,
    상기 제1 기준 값은 0.8인, 소프트웨어 분석 방법.
  11. 제9항에 있어서,
    상기 산출된 원심성 값 및 상기 산출된 구심성 값을 기초로 불안정성 값을 산출하는 단계는, 상기 산출된 불안정성 값이 제2 기준 값 이하인 경우 상기 해당 서브 함수를 위험성 높은 함수로 분류하는 단계를 더 포함하는 소프트웨어 분석 방법.
  12. 프로그램을 기록한 컴퓨터 판독가능 기록매체로서, 상기 프로그램은 명령어들을 포함하고, 상기 명령어들은 컴퓨터에 의해 실행될 때 제1항, 제2항 및 제4항 제11항 중 어느 한 항에 따른 방법을 수행하는, 컴퓨터 판독가능 기록매체.
  13. 소프트웨어 분석 장치로서,
    입력된 소스 코드를 연산하여 복수의 서브 함수로 구성되는 함수구문 트리를 생성하도록 구성된 함수구분 트리 생성 모듈 - 상기 소스 코드는 하나의 메인 함수와 상기 메인 함수가 호출하는 복수의 서브 함수를 포함하며, 상기 복수의 서브 함수의 각각은 기본 라이브러리 또는 사용자 라이브러리로 분류되고, 주석, 함수 명, 입력 파라미터 명 및 내부 구현 텍스트를 포함하는 함수 정보를 포함함- ,
    상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각을 추상 레벨 또는 구체 레벨로 분류하도록 구성된 추상/구체 레벨 분류 모듈,
    상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각의 기능을 추론하도록 구성된 함수기능 추론 모듈, 및
    상기 복수의 서브 함수 중 상기 추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록함수 구조화 트리를 생성하도록 구성된 기능목록함수 구조화 트리 생성 모듈을 포함하고,
    상기 추상/구체 레벨 분류 모듈은
    상기 복수의 서브 함수 각각에 대해서 상호호출 관계를 산출하고,
    상기 상호호출 관계를 기초로 해당 서브 함수가 다른 서브 함수를 참조하는 개수인 원심성 값 및 다른 함수가 상기 해당 서브 함수를 참조하는 개수인 구심성 값을 구하고,
    상기 해당 서브 함수의 상기 원심성 값 및 상기 구심성 값을 기초로 상기 해당 서브 함수의 불안정성 값을 산출하고,
    상기 불안정성 값이 제1 기준 값 이상이면 상기 해당 서브 함수를 상기 추상 레벨로 분류하고, 상기 불안정성 값이 상기 제1 기준 값 미만이면 상기 해당 서브 함수를 상기 구체 레벨로 분류하도록 더 구성되는, 소프트웨어 분석 장치.
  14. 소프트웨어 분석 장치로서,
    입력된 소스 코드를 연산하여 복수의 서브 함수로 구성되는 함수구문 트리를 생성하도록 구성된 함수구분 트리 생성 모듈 - 상기 소스 코드는 하나의 메인 함수와 상기 메인 함수가 호출하는 복수의 서브 함수를 포함하며, 상기 복수의 서브 함수의 각각은 기본 라이브러리 또는 사용자 라이브러리로 분류되고, 주석, 함수 명, 입력 파라미터 명 및 내부 구현 텍스트를 포함하는 함수 정보를 포함함- ,
    상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각을 추상 레벨 또는 구체 레벨로 분류하도록 구성된 추상/구체 레벨 분류 모듈,
    상기 함수구문 트리를 구성하는 상기 복수의 서브 함수 각각의 기능을 추론하도록 구성된 함수기능 추론 모듈, 및
    상기 복수의 서브 함수 중 상기 추론된 기능이 동일한 서브 함수들을 구조화하여 기능목록함수 구조화 트리를 생성하도록 구성된 기능목록함수 구조화 트리 생성 모듈을 포함하고,
    상기 기능목록함수 구조화 트리 생성 모듈은
    상기 복수의 서브 함수 중 추상 레벨로 분류된 서브 함수들을 부모 노드들로 정의하고, 상기 부모 노드들에 해당하는 서브 함수들 각각이 호출하는 적어도 하나의 다른 서브 함수를 상기 해당 부모 노드의 자식 노드로 정의하는 추상 수준에 따른 함수 구조화 트리로 재작성하고,
    상기 재작성된 함수 구조화 트리에 포함된 복수의 노드들 각각에 대해서, 상기 해당 노드에 대응하는 서브 함수와 형제 노드에 대응하는 서브 함수의 기능이 동일한 경우, 상기 해당 노드에 대응하는 서브 함수와 형제 노드 - 상기 형제 노드는 상기 해당 노드와 부모 노드가 동일함 - 에 대응하는 서브 함수를 그룹핑하도록 더 구성되는, 소프트웨어 분석 장치.
KR1020150136251A 2015-09-25 2015-09-25 소프트웨어 분석 방법 및 장치 KR101706098B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020150136251A KR101706098B1 (ko) 2015-09-25 2015-09-25 소프트웨어 분석 방법 및 장치
PCT/KR2016/010738 WO2017052318A1 (ko) 2015-09-25 2016-09-26 소프트웨어 분석 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150136251A KR101706098B1 (ko) 2015-09-25 2015-09-25 소프트웨어 분석 방법 및 장치

Publications (1)

Publication Number Publication Date
KR101706098B1 true KR101706098B1 (ko) 2017-02-23

Family

ID=58315483

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150136251A KR101706098B1 (ko) 2015-09-25 2015-09-25 소프트웨어 분석 방법 및 장치

Country Status (1)

Country Link
KR (1) KR101706098B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118568004A (zh) * 2024-07-31 2024-08-30 荣耀终端有限公司 文件检查方法、电子设备、存储介质及芯片系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011170697A (ja) * 2010-02-19 2011-09-01 Panasonic Corp ソフトウェア構造分析装置
JP2013156786A (ja) * 2012-01-30 2013-08-15 Hitachi Automotive Systems Ltd ソフトウェアの構造可視化プログラムおよびシステム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011170697A (ja) * 2010-02-19 2011-09-01 Panasonic Corp ソフトウェア構造分析装置
JP2013156786A (ja) * 2012-01-30 2013-08-15 Hitachi Automotive Systems Ltd ソフトウェアの構造可視化プログラムおよびシステム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118568004A (zh) * 2024-07-31 2024-08-30 荣耀终端有限公司 文件检查方法、电子设备、存储介质及芯片系统

Similar Documents

Publication Publication Date Title
Campos et al. Model checking interactor specifications
US9535821B1 (en) Displaying violated coding rules in source code
KR20150074020A (ko) 데이터에 규칙 지정 및 적용
Bashir et al. Big data management and analytics metamodel for IoT-enabled smart buildings
Morgado et al. Dynamic reverse engineering of graphical user interfaces
US20160098563A1 (en) Signatures for software components
Grathwohl et al. KAT+ B!
KR101734418B1 (ko) 소프트웨어 위험분석 방법 및 장치
CN114579203A (zh) 脚本文件检查方法、装置、电子设备及存储介质
CN114661290A (zh) 一种脚本错误的处理方法、装置、设备及存储介质
JP2018169693A (ja) 情報処理装置、情報処理方法および情報処理プログラム
KR101706098B1 (ko) 소프트웨어 분석 방법 및 장치
US8909579B2 (en) Identifying invariant candidates based on proofs
CN104461890B (zh) 一种航管训练系统开发中Qt程序内存使用静态检查方法
WO2017052318A1 (ko) 소프트웨어 분석 방법 및 장치
JP2007535013A (ja) コンピュータプログラムの設計
KR102021018B1 (ko) Bim 품질 체크 규칙 정의 장치 및 그의 bim 품질 체크 규칙 정의 방법
US9754213B2 (en) Reasoning over cyclical directed graphical models
Elazhary A cloud-based framework for context-aware intelligent mobile user interfaces in healthcare applications
CN115408535A (zh) 事故知识图谱构建方法、装置、存储介质及电子设备
CN110084528B (zh) 核电厂人因失误数据收集方法、装置、设备及介质
CN111027073B (zh) 漏洞检测方法、装置、设备及存储介质
Liu et al. An ontology pattern for emergency event modeling
Singh et al. Design and implementation of testing tool for code smell rectification using c-mean algorithm
CN113886215A (zh) 接口测试方法、装置及存储介质

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20200115

Year of fee payment: 4