KR20150106458A - 소스 위치가 결여된 코드 세그먼트들을 가지는 소스 코드를 모델링하기 위한 방법 - Google Patents

소스 위치가 결여된 코드 세그먼트들을 가지는 소스 코드를 모델링하기 위한 방법 Download PDF

Info

Publication number
KR20150106458A
KR20150106458A KR1020157024120A KR20157024120A KR20150106458A KR 20150106458 A KR20150106458 A KR 20150106458A KR 1020157024120 A KR1020157024120 A KR 1020157024120A KR 20157024120 A KR20157024120 A KR 20157024120A KR 20150106458 A KR20150106458 A KR 20150106458A
Authority
KR
South Korea
Prior art keywords
code
pigment
source
node
nodes
Prior art date
Application number
KR1020157024120A
Other languages
English (en)
Other versions
KR101597599B1 (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 구글 인코포레이티드
Publication of KR20150106458A publication Critical patent/KR20150106458A/ko
Application granted granted Critical
Publication of KR101597599B1 publication Critical patent/KR101597599B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Stored Programmes (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

위치를 가지지 않는 코드 세그먼트들을 모델링하기 위한 시스템 및 방법이 개시된다. 소스 코드는 코드 엘리먼트들을 표현하는 노드들 및 노드들 사이의 관계들을 표현하는 엣지들을 가지는 데이터 그래프로 색인되고 모델링된다. 그러나, 일부 코드 엘리먼트들은 히든(hidden) 또는 임플리싯(implicit)이며, 따라서 위치 정보가 결여되어 있다. 이런 경우들에, 코드 피그먼트들이 그래프에서 노드들로서 생성되고 표현된다. 피그먼트 노드들은 특별히 지정되어, 상기 피그먼트 노드들이 실제 소스 코드 노드들로부터 쉽게 구분된다. 그 후 그래프는 히든(hidden) 또는 임플리싯(implicit) 코드들과 인터렉션하는 노드들에서 코드 피그먼트들에 대한 위치 정보를 포함하도록 업데이트된다. 그 후 데이터 그래프는 사용자에게 제공되거나, 코딩 도구들(coding tools)에 의해 사용될 서비스로서 제공된다.

Description

소스 위치가 결여된 코드 세그먼트들을 가지는 소스 코드를 모델링하기 위한 방법 {A METHOD FOR MODELING SOURCE CODE HAVING CODE SEGMENTS THAT LACK SOURCE LOCATION}
소프트웨어 개발자들은 소스 코드를 여러 개의 서로 다른 프로그래밍 언어들로 작성한다. 각 프로그래밍 언어는 구별되는 신택스(syntax) 및 시맨틱들(semantics)를 가진다. 코드 브라우저들, 통합 개발 환경(Integrated Development Environments, IDEs) 및 역사적인 분석 도구들을 포함하는 코딩 도구들(coding tools)은 이들 도구들이 소프트웨어 개발자들에게 유용하기 위해 소스 코드 언어들을 이해할 수 있어야 한다. 대다수 도구들이 하나 또는 두 개의 언어들을 표현하는 것에는 능하지만, 다른 언어들을 지원하는 것에는 어려움을 가진다. 모든 프로그래밍 언어들 전반에 걸쳐서 지원하는 적절한 도구를 가지기 위해서는, 모든 도구들에 의해 사용될 수 있는 단일 코드 모델이 있어야 한다. 모든 언어들에 대한 소스 코드의 시맨틱들 및 신택스를 표현하는 것은 각 언어들의 뉘앙스들을 이해하는 복잡한 데이터 모델 및 서비스를 요한다. 또한 데이터 모델 및 서비스는 임의의 프로그래밍 언어 및 언어들 전반으로부터 엘리먼트들을 색인하고 엘리먼트들 사이의 관계들을 디스플레이할 수 있어야 한다.
본 명세서는 일반적으로 데이터 모델링에 관련된, 구체적으로는 소스 위치들이 결여된 코드 세그먼트들을 모델링하기 위한 방법들 및 시스템들에 관련된 기술들을 기재한다.
일반적으로, 본 명세서에 기재된 본 발명의 한 양태는 소스 코드를 모델링하기 위한 시스템 및 방법에서 이용된다. 대표적인 시스템은 하나 이상의 프로세싱 디바이스들 및 명령어들을 저장하는 하나 이상의 저장 디바이스들을 포함하며, 상기 명령어들은 하나 이상의 프로세싱 디바이스들에 의해 실행될 때 상기 하나 이상의 프로세싱 디바이스들로 하여금 소스 위치(source location)를 가지지 않는 코드 세그먼트들(code segments)을 포함하는 소스 코드를 수신하게 하며; 상기 수신된 소스 코드를 색인하게 하며; 코드 엘리먼트들(code elements)을 표현하는 복수의 노드들(nodes) 및 엘리먼트들 사이의 관계들(relationships)에 대한 복수의 엣지들(edges)을 포함하는 상기 색인된 소스 코드로부터 데이터 모델을 생성하게 하며; 각 노드들에 관련될 상기 소스 위치를 결정하게 하며; 코드 세그먼트들 중 하나를 히든(hidden) 또는 임플리싯(implicit) 코드 세그먼트로 인식함에 응답하여, 상기 코드 세그먼트에 대한 피그먼트(figment) 표현을 생성하게 하며; 및 상기 생성된 피그먼트를 상기 코드 세그먼트의 노드와 관련된 상기 소스 위치로 할당(assignment)하게 한다. 대표적인 방법은 소스 위치(source location)를 가지지 않는 코드 세그먼트들(code segments)을 포함하는 소스 코드를 수신하는 단계; 상기 수신된 소스 코드를 색인하는 단계; 코드 엘리먼트들(code elements)을 표현하는 복수의 노드들(nodes) 및 엘리먼트들 사이의 관계들(relationships)에 대한 복수의 엣지들(edges)을 포함하는 상기 색인된 소스 코드로부터 데이터 모델을 생성하는 단계; 각 노드들에 관련될 상기 소스 위치를 결정하는 단계; 코드 세그먼트들 중 하나를 히든(hidden) 또는 임플리싯(implicit) 코드 세그먼트로 인식함에 응답하여, 상기 코드 세그먼트에 대한 피그먼트(figment) 표현을 생성하는 단계; 및 상기 생성된 피그먼트를 상기 코드 세그먼트의 노드와 관련된 상기 소스 위치로 할당하는 단계를 포함한다. 소스 위치를 가지지 않는 코드 세그먼트를 표현하는 데이터 모델을 사용하기 위한 제2의 대표적인 방법은 소스 위치를 가지지 않는 코드 세그먼트를 포함하는 코드에 대한 데이터 모델을 요청하는 단계; 소스 위치를 가지지 않는 상기 코드 세그먼트의 피그먼트 표현을 포함하는 상기 요청된 데이터 모델을 수신하는 단계; 및 선택적으로 최종 사용자에게 상기 코드 세그먼트의 상기 피그먼트 표현을 디스플레이하는 단계를 포함한다.
이들 및 다른 실시예들은 하나 이상의 다음의 구성들을 선택적으로 포함한다: 피그먼트 노드는 상기 데이터 모델에서 상기 노드를 다른 노드들로부터 구분하기 위해 특별히 주석이 달리며(annotated); 상기 데이터 모델은 사용자에게 제공되며; 상기 데이터 모델은 어플리케이션 프로그래밍 인터페이스(Application Programming Interface, API)를 통해 제공되며; 상기 데이터 모델은 사용자 인터페이스를 통해 사용자에게 제공되며; 상기 데이터 모델은 커맨드 라인 코드(command line code)를 통해 사용자에게 제공되며; 상기 피그먼트 표현의 내용은 유효한 코드 신택스(valid code syntax)이며; 상기 피그먼트 표현의 내용은 코드 행동(code behavior)을 모델링하지만, 유효한 코드 신택스를 표현하지 않으며; 상기 히든 또는 임필리싯 코드 세그먼트를 사용하는 소스 코드에 대한 노드와 상기 생성된 피그먼트를 표현하는 노드와의 사이에 엣지(edge)가 있으며; 상기 데이터 모델을 상기 피그먼트 표현에 대한 메터데이터를 포함하며; 상기 메터데이터는 최종 사용자로부터 피그먼트 표현을 보이거나 숨기는데 사용되며; 상기 메터데이터는 코드 세그먼트가 피그먼트라는 정보를 디스플레이하는데 사용되며; 상기 메터데이터는 코드 세그먼트가 피그먼트를 포함한다는 정보를 디스플레이하는데 사용되며; 및 데이터 모델은 어플리케이션 프로그래밍 인터페이스를 사용하여 요청된다.
본 발명의 하나 이상의 실시예들의 세부사항들은 첨부 도면들 및 아래의 설명과 함께 기술되며, 첨부 도면들은 단지 도시로서 제공된다. 본 발명의 다른 구성들, 양태들 및 이점들 설명, 도면들 및 청구항들로부터 명백해질 것이다. 다양한 도면들에서 동일한 참조 번호들 및 기호들은 동일한 구성요소들을 표시한다.
도 1a는 대표적인 코드 세그먼트를 도시하는 블록 다이어그램이다.
도 1b는 대표적인 코드 세그먼트를 도시하는 블록 다이어그램이다.
도 2는 도1a 및 도1b에 정의된 코드 세그먼트들에 대한 데이터 모델을 도시하는 블록 다이어그램이다.
도 3은 두 코드 세그먼트들을 색인(Indexing)하고 그래핑(graphing)하는 대표적인 프로세스를 도시하는 블록 다이어그램이다.
도 4는 도 3에서 정의된 코드 세그먼트들에 대한 데이터 모델을 도시하는 블록 다이어그램이다.
도 5는 히든(hidden) 및/또는 임플리싯(implicit) 코드에 대한 코드 피그먼트들(figments)을 포함하는 도 3에서 정의된 코드 세그먼트들에 대한 대표적인 모델을 도시하는 블록 다이어그램이다.
도 6은 매크로(macro)를 색인하고 그래핑하는 대표적인 프로세스를 도시하는 블록 다이어그램이다.
도 7은 도 6에서 정의된 매크로에 대한 데이터 모델을 도시하는 블록 다이어그램이다.
도 8은 히든 및/또는 임플리싯 코드에 대한 코드 피그먼트들을 포함하는 도 6에 정의된 매크로에 대한 대표적인 모델을 도시하는 블록 다이어그램이다.
도 9는 히든 및/또는 임플리싯 코드를 표현하는 코드 피그먼트들을 생성하기 위한 대표적인 방법의 흐름도이다.
도 10은 대표적인 컴퓨팅 디바이스를 도시하는 블록 다이어그램이다.
도 11은 소스 위치를 가지지 않는 코드 세그먼트를 표현하는 데이터 모델을 사용하기 위한 대표적인 방법의 흐름도이다.
대표적인 데이터 모델 및 서비스는 언어-중립적, 특징적인(canonical) 소스 코드 및 컴파일러 메터데이터(compiler metadata)의 표현을 제공한다. 모델은 소스 코드를 데이터 그래프로서 표현한다. 데이터 그래프는 데이터를 저장하고 포인트들(points), 호출된 노드들(called nodes) 및 라인들(lines), 호출된 엣지들(called edges)의 유한한 집합을 사용하여 데이터 사이의 관계를 보여주는 데이터 구조이다. 그래프 내에서 관계들은 도 2에서 도시된 바와 같이 엣지들을 사용하여 서로 연결된 노드들에 의해 표현된다.
소스 코드로부터 데이터 그래프 모델을 생성하기 위하여, 소스 코드는 반드시 그래프를 형성하는 노드들 및 엣지들의 세트로 해석되어야 한다. 정확도의 높은 레벨들에 이르는 편리한 방법은 그 소스 코드에 대해 존재하는 컴파일러들을 재사용하는 것이다. 컴파일러에는 데이터 그래프 모델에 대한 노드들 및 엣지들을 구성하도록 컴파일러로부터 데이터를 추출하는 인덱서들(indexers)이 제공된다.
도 1a 및 도 1b는 소스 코드 파일들의 2개의 예시적 스니펫들(snippets)을 도시하며, 이들은 단어들 "hello world"를 출력하기 위해 함께 사용될 수 있다. 도 1a에서 파일 "stdio.h"(105)는 라인 2에 함수 "printf"의 정의를 포함하며, 이는 문자열에 대한 포인터인 "format"을 인수(argument)로서 취하고(take in), "format"에 의해 포인팅된 문자열을 출력에 기입(write)한다. 도 1b에서, 파일 "hello.c"(110)는 라인 2에 "stdio.h" 파일을 포함하고, "main"(라인 3)이라는 함수에서 문자열 "hello world"를 표준 출력에 기입하기 위해, 라인 4에서"stdio.h"로부터의 "printf"의 정의를 사용한다. 데이터 모델은 소스 코드 스니펫들을 도 2에 도시된 그래프와 유사한 그래프로서 표현한다. 도 2는 2개의 파일들 "hello.c"(232)와 "stdio.h"(234)를 2개의 노드들 사이의 양방향 엣지들에 의해 표현되는 "포함하는/~에 의해 포함되는(includes/included by)" 관계와 함께 그래프에서 노드들로서 도시한다. 파일 "hello.c"를 표현하는 노드는 2개의 노드들 사이의 "선언하는/~에 의해 선언되는(declares/declared by)" 관계를 도시하는 양방향 엣지에 의해 함수 "main"(224)을 표현하는 노드에 연결된다. 파일 "stdio.h"(234)를 표현하는 노드는 "선언하는/~에 의해 선언되는" 관계 엣지에 의해 "printf"(222)에 대한 노드에 연결된다. "printf"가 소스 코드에서 "main"에 의해 호출됨에 따라, "main"(224)을 표현하는 노드는 "호출하는/~에 의해 호출되는(calls/called by)" 관계 반사 엣지(relationship mirrored edge)에 의해 "printf"(222)를 표현하는 노드에 연결된다. 그래프에서, "main"(224)에 대한 노드와 "printf"(222)에 대한 노드 둘 다는 그들이 리턴(return)하는 빌트-인 타입들(built-in types)과 관계들을 갖는다. "main"(224)은 void 리턴(204)을 가지며 "printf"는 "int"(206)를 리턴한다.
상기 논의된 바와 같이, 노드들은 소스 코드의 세그먼트들을 표현하기 위해 생성된다. 노드들은 빌트-인 타입들(built-in types); 파라미터화된 타입들(parameterized types); 복합 타입들(composite types); 포인터 타입들(pointer types); 기호들의 선언들(declarations of symbols); 사용자 정의 타입들(user-defined types); 참조들(references); 메소드들(methods); 메소드 호출들(method calls); 필드들(fields); 할당들(assignments); 코멘트들(comments); 인라인 문서(inline documentation) 및 파일들과 같은 엘리먼트들의 수개의 서로 다른 타입들을 표현한다. 각 노드는 노드에 대한 전역 고유 식별자(globally unique identifier); 엘리먼트의 종류; 디스플레이 이름; 소스 코드에서 엘리먼트에 대한 위치; 엘리먼트의 수정자들(element's modifiers); 크기(dimensions) 및 소스 코드에서 엘리먼트 주위에 존재하는 코드의 스니펫들을 포함하는 특정 정보를 포함한다. 노드는 언리졸브드(unresolved), 코멘트(comment), 로스트(lost), 네임스페이스(namespace), 패키지(package), 모듈(module), 클래스(class), 구조(structure), 인터페이스(interface), 열거(enumeration), 열거 상수(enumeration constant), 함수(function), 메소드(method), 컨스트럭터(constructor), 필드(field), 로컬(local), 파라미터(parameter), 변수(variable), 속성(property), 불리언(boolean), 문자(character), 문자열(string), 정규 표현(regular expression), 인테져(integer), 플로트(float), 고정 숫자(fixed number), 유리수(rational number), 복소수(complex number), 큰 숫자(big number), 오브젝트(object), 인스턴스(instance), 파일(file), 디렉토리(directory), 기호 연결(symbolic link), 진단(diagnostic), 포인터(pointer), 참조(reference), 가명(alias), 눌(null), 보이드(void), 유닛(unit), 변량형(variatic type), 파라미터형(parameter type), 변수형(variable type), 특수형(spcialization type), 기호(symbol), 이름(name), 값(value), 용법(usage), 어레이(array), 세트(set), 지도(map), 리스트(list), 투플(tuple) 및 유니온(union)과 같은 수개의 종류들 중 하나일 수 있지만, 그에 제한되지 않는다.
엣지들은 데이터 모델에서 엘리먼트들 사이의 관계들을 표현한다. 이들 엣지들은 양방향적이며, 제1 노드로부터 제2 노드까지의 각 엣지는 제2 노드로부터 제1 노드까지의 반사 엣지(mirrored edge)를 가진다는 것을 의미한다. 확장하는/~에 의해 확장되는(extends/extended by); 구현하는/~에 의해 구현되는(implements/implemented by); 오버라이드하는/오버라이드되는(overrides/~에 의해 overridden by); 상속하는/~에 의해 상속되는(inherits/inherited by); 선언하는/~에 의해 선언되는(declares/declared by); 캡처하는/~에 의해 캡처되는(captures/captured by); 기본 타입/구성 타입(base type/composing type); 타입을 가지는/~타입의(has type/is type of); 리턴 타입/~에 의해 리턴되는(return type/returned by); 호출하는/~에서 호출되는(call/called at); 인스턴스화하는/~에서 인스턴스화되는(instantiate/instantiated at); 참조하는/~에서 참조되는(reference/referenced at); 속성을 가지는/~의 속성(has property/property of); 선언을 가지는/~의 선언(declaration/declaration of); 정의를 가지는/~의 정의(has definition/definition of); 입력을 가지는/~에 의해 소비되는(has input/consumed by); 출력을 가지는/~에 의해 생산되는(has output/produced by); 생성하는/~에 의해 생성되는(generates/generated by); ~에 제한되는/~에 엑세스가 허용되는(restricted to/allowed access to); 사용 컨텍스트/폐쇄된 사용(usage context/enclosed usage); 주석이 달린/~의 주석(annotated with/annotation of); 부모/자식(parent/child); 및 던지는/~에 의해 던져지는(throws/thrown by)을 포함하는 엣지 쌍들의 몇 가지 서로 다른 종류들이 있다.
일부 예에서, 데이터 모델은 소스 위치를 가지지 않는 엘리먼트들에 관한 시맨틱 정보를 저장하는데, 이는 코드의 일부 조각들이 히든 또는 임플리싯이고 물리적 위치를 가지지 않기 때문이다. 위치를 가지지 않는 코드의 예시들은 기본 컨스트럭터들(default constructors); 매크로 확장들(macro expansions); 템플릿 인스턴스화들(template instantiations); 정적으로 색인가능한 런타임 오브젝트들(statically indexable runtime objects); 임플리싯 함수 인수들(implicit function arguments); 람다 확장들(lambda expansions), 문서 커멘트들(document comments), 상수 폴딩(constant folding) 및 생성된 코드(generated code)를 포함한다.
히든 또는 임플리싯 코드 세그먼트들은 참조되거나, 사용되거나 또는 그렇지 않으면 소스 코드의 다른 부분들에 링크된다. 이들 코드 세그먼트들이 위치를 결여하고 있는 것은 문제가 있다. 만약 사용자가 상기 언급된 코드 세그먼트들 중 하나를 호출하는 소스 코드에서의 장소(place)로부터 상기 세그먼트로 데이터 그래프를 순회(traverse)하기 원하는 경우, 소스 코드에서 히든 또는 임플리싯 코드 세그먼트에 대한 실제 물리적 장소가 없으며, 그러므로 데이터 그래프에서 상기 엘리먼트에 대한 위치가 없으므로 보통의 "jump" 함수가 작동하지 않는다. 또한 히든 또는 임플리싯 코드 세그먼트들은 소스 언어에서 유효한 신택스(valid syntax)인 표현을 가지지 않는다.
히든 또는 임플리싯 코드가 있는 특정 경우들에, 통상적 데이터 모델들은 사용가능한 소스 위치가 없다고 사용자에게 전하는 메시지들을 자주 보여준다. 대안적으로 다른 통상적 모델들은 소스 코드의 관련된 조각을 가리키는(point) 위치를 합성(synthesize)한다. 비록 이 합성하는 접근은 소프트웨어 개발자들이 소스를 이해하기에는 충분하지만, 상기 접근은 정적 분석 도구들(static analysis tools)에 대해서는 사용할 수 없다. 예를 들면, 기본 컨스트럭터들의 경우에, 만약 사용자가 컨스트럭터의 인스턴스화를 클릭하면, 데이터 그래프 모델은 사용자를 클래스의 선언으로 안내한다. 대부분의 사용자들은 그들이 기본 컨스트럭터를 클릭한 경우, 왜 데이터 그래프 모델이 그들을 임플리싯 기본 컨스트럭터를 생성하게 하는 선언으로 안내하는지 이해한다. 그러나, 정적인 분석 도구는 이 특별한 지식을 가지고 있지 않다. 그러므로, 만약 히든 또는 임플리싯 코드가 있는 경우에 정적 분석 도구들이 소스 코드를 리팩터(refactor)하려면, 상기 도구는 상기 코드를 유효한 코드로 재작성(rewrite)할 가능성이 가장 크다. 다른 통상적 모델은 커스텀 사용자 인터페이스를 빌딩하기(building)를 포함하지만, 이 모델은 히든/임플리싯 데이터의 각 종류가 메터데이터 뿐만 아니라 커스텀 UI를 저장하는 그것의 고유의 방식을 가질 것을 요구한다.
대표적인 데이터 그래프 모델은 히든 또는 임플리싯 코드 세그먼트들에 대한 대안적인 위치들을 건너뛰거나 합성하지 않는다. 대신에, 대표적인 모델은 코드 피그먼트들을 생성하는 것에 의해 히든/임플리싯 코드 세그먼트들의 표현들을 나타낸다. 대표적인 방법은 소스 코드 내에서 히든/임플리싯 코드 세그먼트들을 인식한다. 이들 피그먼트들은 실제 컴파일된 코드이거나 심지어 소스 언어에서 유효한 신택스일 필요도 없다. 그러나, 피그먼트들은 히든 또는 임플리싯 코드를 유의미한 방식으로 표현해야 한다. 최종 사용자가 피그먼트를 이해할 수 있도록 피그먼트들이 본래의 소스 언어에 가능한 한 가까운 신택스를 가지는 것은 바람직하다.
소스 위치를 가지지 않는 코드 세그먼트들을 모델링하기 위한 대표적인 방법은 도 9에 도시된 바와 같이 소스 코드를 수신하는 것(901)으로 시작한다. 그 후 소스 코드는 색인되어야 한다(903). 데이터 모델은 엘리먼트들을 표현하기 위한 노드들 및 노드들 사이의 관계들을 표현하기 위한 엣지들을 사용하여 상기 색인된 소스 코드로부터 생성된다(905). 각 노드에 대해, 소스 위치가 결정된다(907). 만약 노드에 의해 표현된 코드 세그먼트가 히든 또는 임플리싯이면, 코드 세그먼트의 코드 피그먼트 표현이 생성된다(909). 그 후 피그먼트 위치는 히든 또는 임플리싯 코드의 임의의 양태를 표현하는 임의의 노드에서 위치를 모델링하는데 사용된다(911). 또한 피그먼트 노드들은 피그먼트 노드들을 실제 노드들로부터 구별하기 위해 특별히 주석이 달린다. 그 후 데이터는 사용자 인터페이스, 어플리케이션 프로그래밍 인터페이스 또는 어떤 다른 메커니즘을 통해 최종 사용자(913)에게 제공된다.
도 3은 대표적인 서비스가 대표적인 데이터 그래프 모델을 생성하기 위해 2개의 자바 파일들을 검색하는 프로세스를 도시한다. Demo.java() (305)는 라인 3에 Tester 클래스의 기본 컨스트럭터에 대한 호출을 갖는다. Tester 클래스는 Tester.java (303)에 정의되지만, Tester.java (303)에 기본 컨스트럭터의 명시적 정의는 없다. 그러므로, 이 컨스트럭터에 대한 소스 코드는 없으며, 컴파일러는 상기 코드에 대한 플레이스홀더(placeholder)로서의 기본 구현을 생략한다.
도 4는 Demo.java() (305)와 Tester.java() (303)와의 사이에서의 인터렉션을 위한 데이터 그래프 모델의 부분적 구현예이다. 상기 논의된 바와 같이, 노드들은 소스 코드에서의 엘리먼트들을 기술한다. 이 예시에서, 각 노드는 고유의 식별자 (티켓 네임) 및 소스 위치를 갖는다. 노드들은 라벨이 붙은 엣지들(labeled edges)을 통해서 관계된다. Demo.java 라인 3 (409)으로부터 Tester 컨스트럭터 (404, 라인 3)로의 호출이 있을 때, 컨스트럭터의 사용(usage)(412)과 컨스트럭터 노드(408)와의 사이에 엣지를 생략하기는 어려우며, 이는 컨스트럭터 노드(408)를 기술하는 노드에 첨부된 소스 위치가 없기 때문이다.
도 5에 도시된 것과 같은 대표적인 데이터 그래프 모델에서, 피그먼트(519)는 임플리싯 Tester 컨스트럭터(521)를 표현하기 위해 추가된다. 스스로 컴파일할 수 없는 자바 코드의 스니펫인 이 피그먼트(519)는 사용자가 임플리싯 코드를 이해하도록 컨스트럭터에 관한 충분한 정보를 포함한다. 피그먼트(519)를 기술하는 노드는 노드에 도시된 것과 같이 노드가 피그먼트라는 것을 표시하는 "figment: true"와 같은 특별한 주석과 함께 라벨이 붙여진다. 그 후 Tester 컨스트럭터(509)를 기술하는 노드는 새롭게 추가된 피그먼트를 가리키는 노드의 위치를 갖도록 수정된다.
도 6은 매크로(601)를 정의하고 사용하는 C++ 파일을 모델링하기 위한 대표적인 프로세스를 도시한다. 매크로는 어떤 입력 시퀀스가 정의된 절차에 따라 대체 입력 시퀀스에 어떻게 맵핑되어야 하는지 특정하는 규칙 또는 패턴이다.
도 7은 도 6의 소스 코드를 색인할 때 생성될 수 있는 데이터 그래프의 부분적 구현예이다. 이 그래프에서, 소스 코드의 라인 10 (703)에 "IntegerContainer"의 사용(usage)을 모델링하기 어려우며, 이는 스트럭트(struct) (704, 라인 7)가 라인 7 (703)에서 매크로에 대한 호출에 의해 도입되었으나, 스트럭트의 정의에 대한 실제 소스 코드가 존재하지 않기 때문이다. 추가적으로, 라인 11(703)에 "IntegerContainer" 타입의 필드 값은 "IntegerContainer"에 대한 실제 소스 코드가 없으므로 모델링하기 어렵다. "IntegerContainer"는 위치가 누락된 채(711) 그래프에 놓여진다. 또한 "IntegerContainer"의 값도 위치가 없이(713) 그래프에 통합된다.
도 8은 새 파일 "//figments/container.cc/IntegerContainer"(804)를 생성하는 대표적인 그래프를 도시하며, 이는 IntegerContainer 스트럭트(807)의 정의를 포함한다. 그 후, 이 새 파일(804)은 IntegerContainer STRUCT(805)를 표현하는 노드 뿐만 아니라 IntegerContainer value FIELD(816)에 대한 노드 둘 다에 대한 위치 정보로서 사용된다. 게다가, 사용 노드(usage node)(817)는 원본 소스 파일에서 값(value) 필드의 타입과 타입데프(typedef)의 정의와의 사이에 추가될 수 있다. 추가적으로, 피그먼트가 사용자 액션에 의해 생성된 시맨틱들(semantics)을 표현하므로, 매크로의 사용(803)과 피그먼트 파일(804)과의 사이에 생성된 엣지가 있을 수 있고, 이는 이들 두 노드들 사이에서 "피그먼트/~의 피그먼트(FIGMENT/FIGMENT_OF)" 관계를 정의한다.
위치 정보는 코드 세그먼트의 위치에 관한 유용한 정보의 임의의 종류일 수 있다. 도면들에서 위치 정보는 파일 및 라인 번호로 도시되었지만, 이 정보는 단지 예시적 목적들로 도시되었다.
대표적인 실시예에서, 코딩 도구들 및 사용자 인터페이스들은 코드를 최종 사용자에게 표현하기 위해 피그먼트들과 함께 향상된 데이터 모델을 사용한다. 소스 위치를 가지지 않는 코드 세그먼트를 표현하는 데이터 모델을 사용하기 위한 대표적인 방법은 도 11에 도시된 것과 같이 데이터 모델을 요청하는 것으로 시작한다(1101). 데이터 모델은 대표적인 데이터 그래프 모델 서비스에 대한 어플리케이션 프로그래밍 인터페이스(API) 호출들을 사용하여 요청된다. 수신된 데이터 모델은 소스 위치를 가지지 않는 적어도 하나의 코드 세그먼트를 포함한다. 수신된 데이터 모델은 소스 위치를 가지지 않는 코드 세그먼트의 피그먼트 표현을 포함한다(1103). 그 후 이 데이터 모델은 최종 사용자에게 디스플레이된다(1105). 소스 위치를 가지지 않는 코드 세그먼트의 피그먼트 표현에 더하여, 데이터 모델은 피그먼트 표현에 관한 메터데이터를 포함한다. 이 메터데이터는 피그먼트들인 모델 노드들과 피그먼트가 아닌 노드들과의 사이에 구분을 포함한다. 또한 데이터 모델은 소스 위치가 없는 코드 세그먼트를 포함하는 노드와 소스 위치가 없는 코드 세그먼트를 표현하는 노드와의 사이에 엣지 관계들을 제공한다. 엣지 관계는 "~의 피그먼트/피그먼트를 갖는(FIGMENT_OF/HAS_FIGMENT)" 관계로 모델링된다. 코드 도구들 및 사용자 인터페이스들은 메터데이터, 엣지 관계들 및 어떤 정보를 사용자에게 디스플레이할 지 결정하기 위한 다른 제공된 정보를 사용한다.
도 10은 코드 세그먼트들이 소스 위치들을 가지지 않을 때 데이터 모델에서 코드 세그먼트들을 모델링하기 위해 배열된 대표적인 컴퓨터(1000)의 하이-레벨 블록 다이어그램이다. 매우 기본적인 구성에서(1001), 컴퓨팅 디바이스(1000)는 전형적으로 하나 이상의 프로세서들(1010) 및 시스템 메모리(1020)를 포함한다. 메모리 버스(1030)는 프로세서(1010)와 시스템 메모리(1020)와의 사이에서 통신하기 위해 사용된다.
원하는 구성에 따라서는, 프로세서(1010)는 마이크로프로세서(μP), 마이크로컨트롤러(μC), 디지털 신호 프로세서(DSP) 또는 그것들의 임의의 조합을 포함하나 그에 제한되지는 않는 임의의 타입일 수 있다. 프로세서(1010)는 레벨 1 캐쉬(1011) 및 레벨 2 캐쉬(1012)와 같은 하나 이상의 레벨들의 캐싱(caching), 프로세서 코어(1013) 및 레지스터들(1014)을 포함한다. 프로세서 코어(1013)는 산술연산장치(arithmetic logic unit, ALU), 부동 소수점 연산 유닛(floating point unit, FPU), 디지털 신호 프로세싱 코어(DSP Core) 또는 그것들의 임의의 조합을 포함한다. 또한 메모리 컨트롤러(1016)는 프로세서(1010)와 함께 사용되거나, 또는 일부 구현예들에서 메모리 컨트롤러(1015)는 프로세서(1010)의 내부적 부분일 수 있다.
원하는 구성에 따라서는, 시스템 메모리(1020)는 휘발성 메모리(RAM과 같은), 비휘발성 메모리(ROM, 플래시 메모리 등과 같은) 또는 그것들의 임의의 조합을 포함하나 그에 제한되지 않는 임의의 타입일 수 있다. 시스템 메모리(1020)는 전형적으로 운영 체제(1021), 하나 이상의 어플리케이션들(1022) 및 프로그램 데이터(1024)를 포함한다. 어플리케이션(1022)은 이메일 주석들을 이중 필터링하기 위한 시스템을 포함하며, 따라서 사용자가 취할 가능성이 큰 행동들과 관련된 주석들만을 사용자에게 보여준다. 프로그램 데이터(1024)는 명령어들을 저장하는 것을 포함하며, 이 명령어들은 하나 이상의 프로세싱 디바이스들에 의해 실행될 때, 이메일 텍스트로부터 실행가능한 아이템들(actionable items)을 파싱(parsing)하고, 이들 실행가능한 아이템들을 그에 따라 행동할 가능성이 큰 사용자에게만 디스플레이하도록 필터링하기 위한 시스템 및 방법을 구현한다. 일부 실시예들에서, 어플리케이션(1022)은 운영 체제(1021)에서 프로그램 데이터(1024)와 함께 동작하도록 배치된다.
컴퓨팅 디바이스(1000)는 기본 구성(1001)과 요구되는 임의의 디바이스들 및 인터페이스들 사이의 통신을 용이하게 하기 위해 추가적인 구성들 또는 기능, 및 추가적인 인터페이스들을 가질 수 있다.
시스템 메모리(1020)는 컴퓨터 스토리지 미디어의 예시이다. 컴퓨터 스토리지 미디어는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD 또는 다른 광학 스토리지, 자기 카세트, 자기 테이프, 자기 디스크 스토리지 또는 다른 자기 스토리지 디바이스들 또는 원하는 정보를 저장하는데 사용될 수 있고 컴퓨팅 디바이스(1000)에 의해 엑세스될 수 있는 임의의 다른 매체를 포함하나 그에 제한되지 않는다. 임의의 상기 컴퓨터 스토리지 미디어는 디바이스(1000)의 일부일 수 있다.
컴퓨팅 디바이스(1000)는 휴대전화, 스마트폰, PDA, 퍼스널 미디어 플레이어 디바이스, 타블렛 컴퓨터(타블렛), 무선 웹-와치(web-watch) 디바이스, 퍼스널 헤드셋 디바이스, 특수 용도의 디바이스(application-specific device) 또는 임의의 상기 기능들을 포함하는 하이브리드 디바이스와 같은 소형 폼 팩터(small-form factor)의 이동식(또는 모바일) 전자 디바이스의 일부로서 구현될 수 있다. 또한 컴퓨팅 디바이스(1000)는 랩톱 컴퓨터 및 비-랩톱 컴퓨터 둘 다를 포함하는 퍼스널 컴퓨터로서 구현될 수 있다.
전술한 상세한 설명은 블록 다이어그램들, 흐름도들 및/또는 예시들의 사용을 통해 디바이스들 및/또는 프로세스들의 다양한 실시예들을 제시한다. 상기 블록 다이어그램들, 흐름도들 및/또는 예시들이 하나 이상의 기능들 및/또는 동작들을 포함하는 범위에서, 상기 블록 다이어그램, 흐름도들 또는 예시들 내의 각 기능 및/또는 동작은 넓은 범위의 하드웨어, 소프트웨어, 펌웨어 또는 그것들의 가상적인 임의의 조합에 의해 개별적으로 및/또는 집합적으로 구현될 수 있다는 것이 본 기술분야 내에 있는 자들에 의해 이해될 것이다. 하나의 실시예에서, 본 명세서에 기술된 발명의 여러 부분들은 주문형 반도체(Application Specific Integrated Circuits, ASICs), 필드 프로그래머블 게이트 어레이들(Field Programmable Gate Arrays, FPGAs), 디지털 신호 프로세서들(DSPs) 또는 다른 통합된 형태들을 통해 구현될 수 있다. 그러나, 통상의 기술자는 본 명세서에 기술된 실시예들의 일부 양태들은 전부 또는 부분적으로, 하나 이상의 컴퓨터들에서 작동중인 하나 이상의 컴퓨터 프로그램들로서(예를 들면, 하나 이상의 컴퓨터 시스템들에서 작동중인 하나 이상의 프로그램들로서), 하나 이상의 프로세서들에서 작동중인 하나 이상의 프로그램들로서(예를 들면, 하나 이상의 마이크로프로세서들에서 작동중인 하나 이상의 프로그램들로서), 펌웨어로서 또는 그것들의 가상적인 임의의 조합으로서 집적회로에서 동등하게 구현될 수 있다는 것과 회로를 디자인하고 및/또는 소프트웨어 및/또는 펌웨어에 대한 코드를 작성하는 것은 본 발명에 비추어 통상의 기술자의 기술 내에서 충분히 이루어질 것이라는 것을 인식할 것이다. 게다가, 통상의 기술자들은 본 명세서에 기술된 발명의 메커니즘들이 다양한 형태들의 프로그램 물로서 배포될 수 있다는 것과 본 명세서에 기술된 발명의 도시적인 실시예는 실질적으로 배포를 수행하는데 사용되는 비일시적 신호 베어링 매체(signal bearing medium)의 특정 타입에 관계없이 적용된다는 것을 인식할 것이다. 비일시적 신호 베어링 매체의 예시들은 플로피 디스크, 하드 디스크 드라이브, 컴팩트 디스크(CD), 디지털 비디오 디스크(DVD), 디지털 테이프, 컴퓨터 메모리 등과 같은 기록가능 타입 매체; 및 디지털 및/또는 아날로그 통신 매체(예를 들면, 광섬유 케이블, 웨이브가이드(waveguide), 유선 통신 링크, 무선 통신 링크 등)와 같은 전송 타입 매체 포함하나 그에 제한되지 않는다.
본 명세서에서 실질적으로 임의의 복수형 및/또는 단수형 용어들의 사용과 관련하여, 통상의 기술자들은 문맥 및/또는 어플리케이션에 적절한 경우 복수형으로부터 단수형으로 및/또는 단수형으로부터 복수형으로 해석할 수 있다. 다양한 단수형/복수형 치환들이 명료성을 위해 본 명세서에 분명하게 기재된다.
이와 같이, 본 발명의 특정 실시예들이 기술되었다. 다른 실시예들도 후술하는 청구항들의 범위 내에 있다. 일부 경우들에, 청구항들에서 인용된 동작들은 서로 다른 순서에서 수행될 수 있고, 여전히 원하는 결과들을 달성한다. 게다가, 첨부하는 도면들에 도시된 프로세스들은 원하는 결과를 달성하기 위해 도시된 특정 순서 또는 순차적 순서를 필수적으로 요구하지 않는다. 일부 구현예들에서는, 멀티태스킹 및 병행 프로세싱은 이점이 있다.

Claims (14)

  1. 소스 코드를 모델링하기 위한 방법으로서,
    소스 위치(source location)를 가지지 않는 코드 세그먼트들(code segments)을 포함하는 소스 코드를 수신하는 단계(901);
    상기 수신된 소스 코드를 색인하는 단계(903);
    코드 엘리먼트들(code elements)을 표현하는 복수의 노드들(nodes) 및 엘리먼트들 사이의 관계들(relationships)에 대한 복수의 엣지들(edges)을 포함하는 상기 색인된 소스 코드로부터 데이터 모델을 생성하는 단계(905);
    각 노드들에 관련될 상기 소스 위치를 결정하는 단계(907);
    코드 세그먼트들 중 하나를 히든(hidden) 또는 임플리싯(implicit) 코드 세그먼트로 인식함에 응답하여, 상기 코드 세그먼트에 대한 피그먼트(figment) 표현을 생성하는 단계(909); 및
    상기 생성된 피그먼트를 상기 코드 세그먼트의 노드와 관련된 상기 소스 위치로서 할당(assignment)하는 단계(909)를 포함하는 것을 특징으로 하는 방법.
  2. 제1항에 있어서,
    피그먼트 노드는 상기 데이터 모델에서 상기 노드를 다른 노드들로부터 구분하기 위해 특별히 주석이 달리는(annotate) 것을 특징으로 하는 방법.
  3. 제1항에 있어서,
    상기 데이터 모델을 사용자에게 제공하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  4. 제3항에 있어서,
    상기 데이터 모델은 사용자에게 API, 사용자 인터페이스 및/또는 커맨드 라인 코드(command line code)를 통해 제공되는 것을 특징으로 하는 방법.
  5. 제1항에 있어서,
    상기 피그먼트 표현의 내용은 유효한 코드 신택스(valid code syntax)인 것을 특징으로 하는 방법.
  6. 제1항에 있어서,
    상기 피그먼트 표현의 내용은 코드 행동(code behavior)을 모델링하지만, 유효한 코드 신택스를 표현하지 않는 것을 특징으로 하는 방법.
  7. 제1항에 있어서,
    상기 히든 또는 임필리싯 코드 세그먼트를 사용하는 상기 소스 코드에 대한 상기 노드와 상기 생성된 피그먼트를 표현하는 노드와의 사이에 엣지(edge)를 더 포함하는 것을 특징으로 하는 방법.
  8. 소스 코드를 모델링하기 위한 시스템으로서,
    하나 이상의 프로세싱 디바이스들 및
    명령어들을 저장하는 하나 이상의 저장 디바이스들을 포함하며,
    상기 명령어들은 하나 이상의 프로세싱 디바이스들에 의해 실행될 때 상기 하나 이상의 프로세싱 디바이스들로 하여금:
    소스 위치(source location)를 가지지 않는 코드 세그먼트들(code segments)을 포함하는 소스 코드를 수신하게 하며(901);
    상기 수신된 소스 코드를 색인하게 하며(903);
    코드 엘리먼트들(code elements)을 표현하는 복수의 노드들(nodes) 및 엘리먼트들 사이의 관계들(relationships)에 대한 복수의 엣지들(edges)을 포함하는 상기 색인된 소스 코드로부터 데이터 모델을 생성하게 하며(905);
    각 노드들에 관련될 상기 소스 위치를 결정하게 하며(907);
    코드 세그먼트들 중 하나를 히든(hidden) 또는 임플리싯(implicit) 코드 세그먼트로 인식함에 응답하여, 상기 코드 세그먼트에 대한 피그먼트(figment) 표현을 생성하게 하며(909); 및
    상기 생성된 피그먼트를 상기 코드 세그먼트의 노드와 관련된 상기 소스 위치로서 할당(assignment)하게 하는 것을 특징으로 하는 시스템.
  9. 제8항에 있어서,
    피그먼트 노드는 상기 데이터 모델에서 상기 노드를 다른 노드들로부터 구분하기 위해 특별히 주석이 달리는(annotate) 것을 특징으로 하는 시스템.
  10. 제8항에 있어서,
    상기 데이터 모델을 사용자에게 제공하는 것을 더 포함하는 것을 특징으로 하는 시스템.
  11. 제8항에 있어서,
    상기 데이터 모델은 사용자에게 API, 사용자 인터페이스 및/또는 커맨드 라인 코드(command line code)를 통해 제공되는 것을 특징으로 하는 시스템.
  12. 제8항에 있어서,
    상기 피그먼트 표현의 내용은 유효한 코드 신택스(valid code syntax)인 것을 특징으로 하는 시스템.
  13. 제8항에 있어서,
    상기 피그먼트 표현의 내용은 코드 행동(code behavior)을 모델링하지만, 유효한 코드 신택스를 표현하지 않는 것을 특징으로 하는 시스템.
  14. 제8항에 있어서,
    상기 히든 또는 임필리싯 코드 세그먼트를 사용하는 상기 소스 코드에 대한 상기 노드와 상기 생성된 피그먼트를 표현하는 노드와의 사이에 엣지(edge)를 더 포함하는 것을 특징으로 하는 시스템.
KR1020157024120A 2013-02-06 2014-02-04 소스 위치가 결여된 코드 세그먼트들을 가지는 소스 코드를 모델링하기 위한 방법 KR101597599B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/760,641 US9116780B2 (en) 2013-02-06 2013-02-06 Method for modeling source code having code segments that lack source location
US13/760,641 2013-02-06
PCT/US2014/014591 WO2014123856A1 (en) 2013-02-06 2014-02-04 A method for modeling source code having code segments that lack source location

Publications (2)

Publication Number Publication Date
KR20150106458A true KR20150106458A (ko) 2015-09-21
KR101597599B1 KR101597599B1 (ko) 2016-02-25

Family

ID=50231507

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157024120A KR101597599B1 (ko) 2013-02-06 2014-02-04 소스 위치가 결여된 코드 세그먼트들을 가지는 소스 코드를 모델링하기 위한 방법

Country Status (9)

Country Link
US (2) US9116780B2 (ko)
EP (1) EP2954408A1 (ko)
JP (1) JP5974191B2 (ko)
KR (1) KR101597599B1 (ko)
CN (2) CN104969188B (ko)
AU (1) AU2014215529B2 (ko)
BR (1) BR112015018808A8 (ko)
DE (1) DE202014010926U1 (ko)
WO (1) WO2014123856A1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2504122A (en) * 2012-07-19 2014-01-22 Ibm Locating software units of a software module to facilitate software refactoring
US9116780B2 (en) * 2013-02-06 2015-08-25 Google Inc. Method for modeling source code having code segments that lack source location
US9753960B1 (en) * 2013-03-20 2017-09-05 Amdocs Software Systems Limited System, method, and computer program for dynamically generating a visual representation of a subset of a graph for display, based on search criteria
US9952843B2 (en) * 2014-05-15 2018-04-24 Nvidia Corporation Partial program specialization at runtime
CN107015905A (zh) * 2016-06-02 2017-08-04 阿里巴巴集团控股有限公司 查询源代码的方法和装置
US10628959B2 (en) * 2017-05-03 2020-04-21 International Business Machines Corporation Location determination using street view images
US10623444B2 (en) * 2017-07-17 2020-04-14 General Electric Company Apparatus and method for analysis of binary targets to generate security policy
US10901804B2 (en) 2017-12-15 2021-01-26 Fujitsu Limited Apparatus and method to select services for executing a user program based on a code pattern included therein
CN113704384A (zh) * 2021-08-27 2021-11-26 挂号网(杭州)科技有限公司 语音识别生成代码的方法及装置、电子设备、存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070226708A1 (en) * 2006-03-24 2007-09-27 International Business Machines Corporation Source-to-source transformation for language dialects
KR20090056525A (ko) * 2007-11-30 2009-06-03 인하대학교 산학협력단 객체 분할을 이용한 객체지향프로그램의 동적 분할시스템및 그 방법
JP5659238B2 (ja) * 2010-10-27 2015-01-28 株式会社日立製作所 ソースコード変換方法およびソースコード変換プログラム

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03113571A (ja) * 1989-09-27 1991-05-14 Nippon Telegr & Teleph Corp <Ntt> パターン認識方法
JPH03240128A (ja) * 1990-02-17 1991-10-25 Mitsubishi Electric Corp モジュール構成図自動生成システム
US5345380A (en) * 1990-12-18 1994-09-06 Bell Communications Research, Inc. System and processes specifying customized customer telecommunication services using a graphical interface
US5596703A (en) * 1993-10-22 1997-01-21 Lucent Technologies Inc. Graphical display of relationships
JP2002527814A (ja) * 1998-10-13 2002-08-27 コデイジェン テクノロジーズ コーポレイション コンポーネント・ベース型ソース・コード・ジェネレータ
GB2360370B (en) * 2000-03-14 2002-04-24 Inventec Corp Software driver installation method
US6907599B1 (en) * 2001-06-15 2005-06-14 Verisity Ltd. Synthesis of verification languages
US8762962B2 (en) * 2008-06-16 2014-06-24 Beek Fund B.V. L.L.C. Methods and apparatus for automatic translation of a computer program language code
GB0907171D0 (en) * 2009-04-27 2009-06-10 Springsource Ltd Method and apparatus for automatically generating source code files in a storage unit
JP5385102B2 (ja) 2009-11-24 2014-01-08 株式会社野村総合研究所 ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム
CN102110048B (zh) * 2009-12-28 2014-07-09 国际商业机器公司 用于基于框架的应用程序的回归测试选择方法和装置
CN101872313B (zh) * 2010-05-18 2012-12-12 重庆大学 开发功能可重组智能控件化虚拟仪器的方法
US20110302563A1 (en) * 2010-06-08 2011-12-08 Avaya Inc. Program structure recovery using multiple languages
CN102156640A (zh) * 2011-04-19 2011-08-17 山东浪潮金融信息系统有限公司 一种数据操作代码生成方法
US8516443B2 (en) * 2011-05-26 2013-08-20 Oracle International Corporation Context-sensitive analysis framework using value flows
US8695021B2 (en) * 2011-08-31 2014-04-08 Microsoft Corporation Projecting native application programming interfaces of an operating system into other programming languages
US20140214731A1 (en) * 2012-11-13 2014-07-31 MNB Technologies, Inc. Method and System for Automated Computer Program Generation
US9659085B2 (en) * 2012-12-28 2017-05-23 Microsoft Technology Licensing, Llc Detecting anomalies in behavioral network with contextual side information
US9116780B2 (en) * 2013-02-06 2015-08-25 Google Inc. Method for modeling source code having code segments that lack source location
CN110795080A (zh) * 2019-10-21 2020-02-14 山东舜知信息科技有限公司 一种基于数据库注释的代码自动生成系统及构建方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070226708A1 (en) * 2006-03-24 2007-09-27 International Business Machines Corporation Source-to-source transformation for language dialects
KR20090056525A (ko) * 2007-11-30 2009-06-03 인하대학교 산학협력단 객체 분할을 이용한 객체지향프로그램의 동적 분할시스템및 그 방법
JP5659238B2 (ja) * 2010-10-27 2015-01-28 株式会社日立製作所 ソースコード変換方法およびソースコード変換プログラム

Also Published As

Publication number Publication date
AU2014215529A1 (en) 2015-08-27
US20140223415A1 (en) 2014-08-07
CN104969188B (zh) 2017-05-17
JP2016509737A (ja) 2016-03-31
EP2954408A1 (en) 2015-12-16
CN104969188A (zh) 2015-10-07
DE202014010926U1 (de) 2017-01-18
JP5974191B2 (ja) 2016-08-23
US20150324194A1 (en) 2015-11-12
KR101597599B1 (ko) 2016-02-25
AU2014215529B2 (en) 2015-12-17
CN107273109B (zh) 2020-11-10
WO2014123856A1 (en) 2014-08-14
BR112015018808A8 (pt) 2018-01-02
US9116780B2 (en) 2015-08-25
CN107273109A (zh) 2017-10-20
BR112015018808A2 (pt) 2017-07-18

Similar Documents

Publication Publication Date Title
KR101597599B1 (ko) 소스 위치가 결여된 코드 세그먼트들을 가지는 소스 코드를 모델링하기 위한 방법
US9256401B2 (en) Editor visualization of symbolic relationships
KR101354803B1 (ko) 유형 추론 및 유형 지향 후기 바인딩
EP3365772B1 (en) Missing include suggestions for external files
US8516458B2 (en) System representation and handling techniques
JP5893038B2 (ja) ユーザ定義型のコンパイル時境界検査
TWI556170B (zh) 將作業系統之原始應用程式介面投射至其它程式語言(二)
KR20040111099A (ko) 코드 세그먼트들을 생성, 관리, 및 사용하는 시스템 및방법
Córdoba-Sánchez et al. Ann: A domain-specific language for the effective design and validation of Java annotations
RU2347269C2 (ru) Система и способ декларативного определения и использования подклассов внутри разметки
US20160062748A1 (en) Embedded domain specific languages as first class code artifacts
JP5600301B2 (ja) システム表現およびハンドリング技術
Trætteberg Integrating dialog modeling and domain modeling: the case of diamodl and the eclipse modeling framework
JP2022531515A (ja) コンピュータ支援コンピュータプログラミングのシステムおよび方法
Jiang et al. Using OCL in executable UML
Gomanyuk An approach to creating development environments for a wide class of programming languages
Juhár et al. A review of source code projections in integrated development environments
Kresowaty FxCop and code analysis: Writing your own custom rules
Marschall Taking Smalltalk Reflection to the sub-method Level
Eichelberger et al. Object‐oriented processing of Java source code

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190208

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20200213

Year of fee payment: 5