KR20040111099A - 코드 세그먼트들을 생성, 관리, 및 사용하는 시스템 및방법 - Google Patents

코드 세그먼트들을 생성, 관리, 및 사용하는 시스템 및방법 Download PDF

Info

Publication number
KR20040111099A
KR20040111099A KR1020040044850A KR20040044850A KR20040111099A KR 20040111099 A KR20040111099 A KR 20040111099A KR 1020040044850 A KR1020040044850 A KR 1020040044850A KR 20040044850 A KR20040044850 A KR 20040044850A KR 20040111099 A KR20040111099 A KR 20040111099A
Authority
KR
South Korea
Prior art keywords
code segment
code
file
library
source program
Prior art date
Application number
KR1020040044850A
Other languages
English (en)
Other versions
KR101098718B1 (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 KR20040111099A publication Critical patent/KR20040111099A/ko
Application granted granted Critical
Publication of KR101098718B1 publication Critical patent/KR101098718B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

코드 세그먼트 및 그 코드 세그먼트와 연계된 정보 소자들은 (즉, 메타 정보) XML 파일에 인코딩된다. 한 개 이상의 인코딩된 코드 세그먼트들은 인코딩된 코드 세그먼트들의 라이브러리 (library) 안에 저장된다. 인코딩된 코드 세그먼트는 선택되고 소스 코드 파일로 삽입될 수 있다. 인코딩된 코드가 소스 코드로 삽입될 때, 코드 세그먼트에 의해 요구된 연계된 소자들은 자동으로 포함되고, 수정을 요구할 수 있는 코드 세그먼트들의 일부들은 식별된다. 코드 세그먼트들은, 코드 세그먼트들의 공유가 용이하도록 관리되고 체계화된다.

Description

코드 세그먼트들을 생성, 관리, 및 사용하는 시스템 및 방법 {SYSTEM AND METHOD FOR CREATING, MANAGING AND USING CODE SEGMENTS}
본 발명은 프로그래밍 툴들에 관한 것이고, 특히 코드 세그먼트들을 생성, 관리, 및 사용하는 방법에 관한 것이다.
소프트웨어 솔루션들 (solutions)에 대한 필요가 생기면서, 프로그래머 능률을 증가시키는 것이 더욱 더 중요하게 되었다. 프로그래머 능률을 증가시키는 한 가지 방법은 이미 기록된 코드의 세그먼트들을 재사용하는 것이다. 관용적으로, 이것은 수동으로 해 왔다: 사용자는 코드 세그먼트를 찾고 저장하고, 그 자신의 새로운 환경에서 사용하기 위해 그것을 수정한다. 이것은 도움이 되지만, 몇 가지 경우들에서, 개발자가 필요한 특정 코드 세그먼트를 찾는 것은 어려울 수 있고, 일단 찾으면, 의도된 사용에 적합하도록 그 코드 세그먼트를 수정하는 것은 중요한 작업일 것이다.
만약 코드 세그먼트들을 더 쉽게 찾고 수정하게 하고 그 코드 세그먼트가 제공하는 솔루션이 더욱 견고하도록 하는 방법이 있다면 도움이 될 것이다.
코드 세그먼트와 그 코드 세그먼트와 연계된 정보 소자들 (elements)은 (예를 들어, 메타 정보) XML 파일, 혹은 또 다른 타입의 파일 혹은 데이타베이스에서함께 인코딩될 수 있다. 한 개 이상의 인코딩된 코드 세그먼트들은 인코딩된 코드 세그먼트들의 라이브러리로서 지속된다. 라이브러리의 저장소는 파일 시스템 혹은 데이타베이스일 수 있다. 인코딩된 코드 세그먼트는, 검색 동작을 사용해서, 선택될 수 있고, 소스 코드 파일에 삽입될 수 있다. 인코딩된 코드가 소스 코드에 삽입될 때, 코드 세그먼트에 의해 요구된 연계된 소자들이 자동으로 포함되고, 수정을 요구할 수 있는 코드 세그먼트들의 부분들이 식별된다. 코드 세그먼트들은, 코드 세그먼트들의 공유가 용이하도록 관리되고 체계화된다. 툴이 제공되는데, 이들에 의해 새 코드 세그먼트들이 생성되고, 추후 사용을 위해 라이브러리에 추가된다.
다음의 설명적 실시예들의 상세한 설명을 비롯해서, 앞의 요약은 첨부된 도면들과 함께 읽혀질 때 더 잘 이해된다. 본 발명을 설명하는 목적에서, 본 발명의 구성 예들이 도면들에서 도시된다. 그러나, 본 발명은 개시된 특정 방법들 및 수단들로만 제한되지는 않는다.
도1은 본 발명의 양태들이 구현될 수 있는 컴퓨팅 환경의 한 예를 도시하는 블럭도이다.
도2는 본 발명의 한 실시예에 대응해서 코드 세그먼트들을 생성, 관리, 및 재사용하는 시스템의 블럭도의 한 예이다.
도3은 본 발명의 한 실시예에 대응해서 코드 세그먼트들을 생성, 관리, 및 재사용하는 프로세스의 흐름도이다.
도4a-b들은 본 발명의 한 양태에 대응해서 인코딩된 코드 세그먼트의 한 예를 도시한다.
도5는 본 발명의 한 실시예에 대응해서 소스 프로그램으로 삽입하기 위해 코드 세그먼트를 선택하는 사용자 인터페이스의 스크린 샷 (screen shot)의 한 예이다.
도6은 본 발명의 한 실시예에 대응해서 소스 프로그램으로 삽입하기 위해 코드 세그먼트를 선택하는 또 다른 사용자 인터페이스이 스크린 샷의 예이다.
도7은 본 발명의 한 양태에 대응해서 소스 프로그램으로 코드 세그먼트를 삽입하는 프로세스의 흐름도이다.
도8은 본 발명의 한 양태에 대응해서 소스 프로그램으로 코드 세그먼트를 삽입할 때 디스플래이될 수 있는 사용자 인터페이스의 스크린 샷의 한 예이다.
도9는 본 발명의 한 양태에 대응해서 소스 프로그램으로 코드 세그먼트를 삽입할 때 디스플래이될 수 있는 사용자 인터페이스의 스크린 샷의 한 예이다.
도10은 본 발명의 한 양태에 대응해서 수정하기 위한 소자를 선택할 때 디스플래이될 수 있는 사용자 인터페이스의 스크린 샷의 한 예이다.
도11은 한 소자의 새 인스턴스 (instance)가 삽입을 위해 선택될 때 디스플래이될 수 있는 사용자 인터페이스의 스크린 샷의 한 예이다.
도12는 본 발명의 한 양태에 대응해서 디스플래이될 수 있는 사용자 인터페이스의 스크린 샷의 한 예이다.
도13a-c들은 도12에서 설명된 본 발명의 양태에 대응해서 인코딩된 코드 세그먼트의 한 예를 도시한다.
<주요 도면 부호 설명>
202: 컴퓨터
204: IDE
206: 편집기
208: 컴파일러
210: 실행 코드
212: 소스 파일
214: 디버거
216: 코드 세그먼트 관리자
222: 코드 세그먼트 라이브러리
코드 세그먼트와 그 코드 세그먼트와 연계된 정보 소자들은 (예를 들어, 요구된 참조들과 같은 코드 세그먼트와 연계된 메타 정보) 파일이나 파일들에 인코딩된다. 본 발명의 한 실시예에서, 코드 세그먼트 및 메타 정보는 XML 파일 내에 인코딩된다. 한 개 이상의 인코딩된 코드 세그먼트들은 인코딩된 코드 세그먼트들의 라이브러리 내에 저장된다. 라이브러리로부터 세그먼트가 선택되어지고 소스 코드 파일로 삽입될 수 있다. 세그먼트가 소스 코드로 삽입될 때, 코드 세그먼트에 의해 요구된 연계된 소자들이 자동 포함될 수 있다. 수정을 요구할 수 있는 코드 세그먼트의 부분들이 식별되고 수정 가능한 소자들 사이를 쉽게 네비게이션 (navigation)할 수 있는 수단이 제공된다. 코드 세그먼트를 수정하기 위한 팁들 (tips)이 디스플래이될 수 있다. 코드 세그먼트에 대한 코멘트들도 또한 디스플래이될 수 있다. 코드 세그먼트의 정확한 삽입의 검증이 수행될 수 있다. 코드 세그먼트들은, 코드 세그먼트들의 공유가 용이하도록 관리되고 체계화되는 것이 선호된다.
<컴퓨팅 환경의 예>
도1 및 다음의 논의는, 본 발명이 구현될 수 있는 적합한 컴퓨팅 환경의 간략하고 일반적 설명을 제공하는 것이 의도된다. 그러나, 핸드 핼드, 포터블, 및 모든 종류의 기타 컴퓨팅 디바이스들은 본 발명과 함께 사용되도록 사려됨이 이해되어야 한다. 일반 목적 컴퓨터가 아래 설명되지만, 이것은 단지 한 개의 예이고, 본 발명은 통신망 서버 상호운용 (interoperability) 및 상호작용 (interaction)을 단순히 갖을 것만을 클라이언트에게 요구한다. 그러므로, 본 발명은 소량의 혹은 최소의 클라이언트 리소스이 포함된 (즉, 클라이언트 디바이스가 WWW (World Wide Web)으로 단지 브라우져 혹은 인터페이스로서 동작하는 통신망 환경) 통신망에서 호스트 (host)되는 서비스들의 환경에서 구현될 수 있다, .
요구되지는 않았지만, 본 발명은, 개발자에 의한 사용을 위해서, 응용 프로그램 프로그래밍 인터페이스 (API)를 통해 구현될 수 있고, 그리고/또는, 클라이언트 워크스테이션들, 서버들, 혹은 기타 디바이스들과 같은 한 개 이상의 컴퓨터들에 의해 실행되는, 프로그램 모듈들과 같은, 일반 문맥의 컴퓨터 실행 가능한 명령들로써 기술될 수 있는 통신망 브라우징 소프트웨어 내에 포함될 수 있다. 일반적으로, 프로그램 모듈들은 특정 작업들을 수행하거나 특정 추상 데이타 타입들을 구현하는 루틴들, 프로그램들, 객체들, 구성 요소들, 데이타 구조들, 및 기타를 포함한다. 전형적으로, 프로그램 모듈들의 기능성은 원하는 대로 다양한 실시예들에서 조합되거나 배분된다. 더욱이, 이 기술의 숙련자들이라면, 본 발명이 기타 컴퓨터 시스템 구성들에서 실시될 수 있음을 이해할 것이다. 본 발명과 사용하기 적합할 수 있는 기타 잘 알려진 컴퓨팅 시스템들, 환경들, 및/또는 구성들은, 개인 컴퓨터들 (PCs), 자동 인출기들 (automatic teller machines), 서버 컴퓨터들, 핸드 핼드 혹은 랩탑 디바이스들, 멀티프로세서 시스템들, 마이크로프로세서 기반 시스템들, 프로그램 가능한 소비자 전자 제품들, 통신망 PC들, 미니 컴퓨터들, 메인프레임 컴퓨터들, 및 기타를, 하지만 거기에 국한되지 않고, 포함한다. 본 발명은, 작업들이 통신망 혹은 기타 데이타 전송 매체를 통해 링크 (link)된 원격 프로세싱 디바이스들에 의해 수행되는, 분산 컴퓨팅 환경들에서 또한 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈들은 메모리 저장 디바이스들을 포함하는 로컬 및 원격 컴퓨터 저장 매체들 모두에 위치될 수 있다.
그러므로, 도1은 본 발명이 구현될 수 있는적합한 컴퓨팅 시스템 환경(100)의 한 예를 도시하고, 위에서 명확히 했지만, 컴퓨팅 시스템 환경(100)은 단지 적합한 컴퓨팅 환경의 한 예일 뿐이고 본 발명의 사용 혹은 기능성의 범위에 어떤 제한을 제안하기 위해 의도되지 않는다. 컴퓨팅 환경(100)은 운영 환경(100)의 예에서 설명된 구성 요소들 중의 임의의 것 혹은 조합과 관련된 임의의 의존성 혹은 요구 사항을 갖는 것으로 해석되어서는 안된다.
도1의 참조에서, 본 발명을 구현하는 시스템의 한 예는 컴퓨터(110)의 한 형태로서 일반 목적 컴퓨팅 디바이스를 포함한다. 컴퓨터(110)의 구성 요소들은 처리 장치(120), 시스템 메모리(130), 및 처리 장치(120)로 시스템 메모리를 포함한 다양한 시스템 구성 요소들을 연결하는 시스템 버스(121)를, 하지만 거기에 국한되지 않고, 포함할 수 있다. 시스템 버스(121)는 메모리 버스 혹은 메모리 컨트롤러, 주변 버스, 및 다양한 버스 구조들 중 임의의 것을 사용하는 로컬 버스를 포함하는 몇 개의 타입들의 버스 구조들 중 임의의 것일 수 있다. 예를 들면, 그런 구조들은 산업 표준 구조 (ISA) 버스, 마이크로 채널 구조 (MCA) 버스, 진보된 ISA (EISA) 버스, 비디오 전자 표준 협회 (VESA) 로컬 버스, 및 주변 장치 연결 (PCI) 버스 (메자닌 버스라고도 알려짐)을, 하지만 거기에 국한되지 않고, 포함한다.
컴퓨터(110)는 다양한 컴퓨터 판독 가능한 매체들을 전형적으로 포함한다. 컴퓨터 판독 가능한 매체들은 컴퓨터(110)에 의해 액세스될 수 있는 임의의 매체들일 수 있고, 휘발성 및 비휘발성, 분리형 및 비분리형 매체들을 모두 포함한다. 예를 들어, 컴퓨터 판독 가능한 매체들은 컴퓨터 저장 매체들 및 통신 매체들을, 하지만 거기에 국한되지 않고, 포함할 수 있다. 컴퓨터 저장 매체들은 컴퓨터 판독 가능한 명령들, 데이타 구조들, 프로그램 모듈들, 혹은 기타 데이타와 같은 정보 저장을 위한 임의의 방법 혹은 기술로 구현되는 휘발성 및 비휘발성, 분리형 및 비분리형 매체들을 모두 포함한다. 컴퓨터 저장 매체들은 RAM, ROM, EEPROM, 플래쉬 메모리 혹은 기타 메모리 기술, CDROM, 디지탈 다용도 디스크들 (DVDs) 혹은 기타 광 디스크 저장 장치, 자기 카세트들, 자기 테입, 자기 저장 장치 혹은 기타 자기 저장 장치들, 혹은 원하는 정보를 저장하기 위해 사용되거나 컴퓨터(110)에 의해 액세스될 수 있는 임의의 기타 메체를, 하지만 거기에 국한되지 않고, 포함한다. 통신 매체들은 컴퓨터 판독 가능 명령들, 데이타 구조들, 프로그램 모듈들, 혹은 캐리어 웨이브 (carrier wave) 혹은 기타 운송 메카니즘과 같은 변조 데이타 신호의 기타 데이타를 전형적으로 구현하고, 임의의 정보 전달 매체들을 포함한다. "변조 데이타 신호"라는 용어는 그 자신의 특성 세트를 한 개 이상 갖고 있고 신호에서 정보를 인코딩하는 방식에서 변화되는 신호를 의미한다. 예를 들어, 통신 매체들은 유선 통신망 혹은 직접 유선 연결과 같은 유선 매체들, 및 음향, RF, 적외선, 및 기타 무선 매체들과 같은 무선 매체들을, 하지만 거기에 국한되지 않고, 포함한다. 위의 것들 중 임의의 것들의 조합들은 컴퓨터 판독 가능 매체들의 범위 내에 또한 포함되어야 하다.
시스템 메모리(130)는 읽기용 메모리 (ROM)(131) 및 랜덤 액세스 메모리 (RAM)(132)와 같은 휘발성 및/또는 비휘발성 메모리 형태로 컴퓨터 저장 매체들을 포함한다. 스타트업 (start-up)과 같은 때, 컴퓨터(110) 내의 소자들 간의 정보 전송을 돕는 기본 루틴들을 포함하는 기본 입/출력 시스템 (BIOS)(133)은 전형적으로 ROM(131)에 저장된다. RAM(132)은 즉시 액세스할 수 있고 그리고/또한 현재 처리 장치(120)에 의해 동작되고 있는 데이타 및/또는 프로그램 모듈들을 전형적으로 포함한다. 예를 들어, 도1은 운영 체제(134), 응용 프로그램들(135), 기타 프로그램 모듈들(136), 및 프로그램 데이타(137)를 ,하지만 거기에 국한되지 않고, 도시한다.
컴퓨터(110)는 또한 기타 분리형/비분리형, 휘발성/비휘발성 컴퓨터 저장 매체들을 포함할 수 있다. 단지 예로써, 도1은, 비분리형 비휘발성 자기 매체들로 읽고 쓰는 하드 디스크 드라이브(141), 분리형 비휘발성 자기 디스크(152)로 읽고 쓰는 자기 디스크 드라이브(151), 및 CD ROM 혹은 기타 광 매체들과 같은 분리형 비휘발성 광 디스크(156)로 읽고 쓰는 광 디스크 드라이브(155)를 도시한다. 운영 환경의 예에서 사용될 수 있는 기타 분리형/비분리형 휘발성/비휘발성 컴퓨터 저장 매체들은 자기 테입 카세트들, 플래쉬 메모리 카드들, 디지탈 다용도 디스크들, 디지탈 비디오 테입, 반도체 RAM, 반도체 ROM, 및 기타를, 하지만 거기에 국한되지 않고, 포함한다. 하드 디스크 드라이브(141)는 인터페이스(140)와 같은 비분리형 메모리 인터페이스를 통해 시스템 버스(121)로 전형적으로 연결되고, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 인터페이스(150)와 같은 분리형 메모리 인터페이스에 의해 시스템 버스(121)에 전형적으로 연결된다.
위에서 논의되고 도1에 도시된 드라이브들 및 그들의 연계된 컴퓨터 저장 장치 매체들은 컴퓨터 판독 가능 명령들, 데이타 구조들, 프로그램 모듈들, 및 컴퓨터(110)을 위한 기타 데이타의 저장을 제공한다. 예를 들어, 도1에서, 하드 디스크 드라이브(141)는 운영 체제(144), 응용 프로그램들(145), 기타 프로그램 모듈들(146), 및 프로그램 데이타(147)를 저장하는 것으로 도시된다. 이러한 구성 요소들은 운영 체제(134), 응용 프로그램들(135), 기타 프로그램 모듈들(136), 및프로그램 데이타(137)와 같거나 다를 수 있음을 주목한다. 운영 체제(144), 응용 프로그램들(145), 기타 프로그램 모듈들(146), 및 프로그램 데이타(147)는, 적어도 그들이 다른 복사본들임을 설명하기 위해 본 명세서에서 다른 숫자들이 주어진다. 사용자는 키보드(162) 및, 일반적으로 마우스, 트랙볼, 혹은 터치 패드라고 일컬어지는 포인팅 디바이스(162)와 같은 입력 디바이스들을 통해 컴퓨터(110)로 명령들 및 정보를 입력할 수 있다. 기타 입력 디바이스들 (도시 안됨)은 마이크로폰, 조이스틱, 게임 패드, 위성 접시, 스캐너, 혹은 기타를 포함할 수 있다. 이러한 그리고 다른 입력 장치들은 시스템 버스(121)로 연결된 사용자 입력 인터페이스(160)를 통해 처리 장치(120)로 종종 연결되지만, 병렬 포트, 게임 포트, 혹은 범용 직렬 버스 (USB)와 같은 기타 인터페이스 및 버스 구조들에 의해 연결될 수 있다.
모니터(191) 혹은 기타 타입의 디스플래이 디바이스는 또한 비디오 인터페이스(190)와 같은 인터페이스를 통해 시스템 버스(121)로 또한 연결된다. 노쓰브릿지 (Northbridge)와 같은 그래픽 인터페이스(182)는 시스템 버스(121)로 또한 연결될 수 있다. 노쓰브릿지는 CPU 혹은 호스트 처리 장치(120)와 통신하는 칩세트 (chipset)이고, 가속 그래픽 포트 (AGP) 통신에 대한 책임이 있다. 한 개 이상의 그래픽 처리 장치들 (GPUs)(184)은 그래픽 인터페이스(182)와 통신할 수 있다. 이 관점에서, GPU들(184)은 일반적으로 레지스터 저장 장치와 같은 온칩 (on-chip) 메모리 저장 장치를 포함하고, GPU들(184)은 비디오 메모리(186)와 통신한다. 그러나, GPU들(184)은 보조 처리 장치의 한 예일 뿐이고, 그러므로 다양한 보조 처리 장치들이 컴퓨터(110)에 포함될 수 있다. 모니터(191) 혹은 기타 타입의 디스플래이 디바이스는 또한, 비디오 메모리(186)와 교대로 통신할 수 있는 비디오 인터페이스(190)와 같은 인터페이스를 통해 시스템 버스(121)로 또한 연결된다. 모니터(191)에 추가해서, 컴퓨터들은 출력 주변 인터페이스(195)를 통해 연결될 수 있는 스피커들(197) 및 프린터(196)와 같은 기타 주변 출력 디바이스들을 또한 포함할 수 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 한 개 이상의 원격 컴퓨터들로 논리 연결들을 사용해서 통신망 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 개인 컴퓨터, 서버, 라우터, 통신망 PC, 피어 (peer) 디바이스, 혹은 기타 일반 통신망 노드일 수 있고, 단지 메모리 저장 디바이스(181)만이 도1에 도시되었지만, 컴퓨터(110)에 관련되어 위에 설명된 다수 혹은 전체 소자들을 전형적으로 포함한다. 도1에 도시된 논리 연결들은 구내 통신망 (LAN)(171) 및 광역 통신망 (WAN)(173)을 포함하지만, 또한 기타 통신망들을 포함할 수 있다. 그런 통신망 환경들은 사무실들, 기업체 컴퓨터 통신망들, 인트라넷들, 및 인터넷에서 일반적이다.
LAN 통신망 환경에서 사용될 때, 컴퓨터(110)는 통신망 인터페이스 혹은 어뎁터(170)를 통해 LAN(171)으로 연결된다. WAN 통신망 환경에서 사용될 때, 컴퓨터(110)는 인터넷과 같은 WAN(173)을 통해 통신을 개통하기 위한 모뎀(172) 혹은 기타 수단들을 전형적으로 포함한다. 외장 혹은 내장일 수 있는 모뎀(172)은 사용자 입력 디바이스(160) 혹은 기타 적합한 메카니즘을 통해 시스템 버스(121)로 연결될 수 있다. 통신망 환경에서, 컴퓨터(110)에 관련되어 도시된 프로그램 모듈들은, 혹은 그들의 일부, 원격 메모리 저장 디바이스에 저장될 수 있다. 예를 들어,하지만 거기에 국한되지 않고, 도1은 메모리 디바이스(181)에 상주하는 원격 응용 프로그램들(185)을 도시한다. 도시된 통신망 연결은 예일 뿐이고 컴퓨터들 간에 통신 링크를 개통하는 기타 수단들이 사용될 수 있음이 이해될 것이다.
이 기술에 보통 숙련자라면 컴퓨터(110) 혹은 기타 클라이언트 디바이스는 컴퓨터 통신망의 일부로서 배치될 수 있음을 이해할 수 있을 것이다. 이 관점에서, 본 발명은 임의의 수의 메모리 혹은 저장 장치들, 및 임의의 수의 응용 프로그램들, 및 임의의 수의 저장 장치들 혹은 볼륨들 (volumes)에서 발생하는 프로세스들을 갖는 임의의 컴퓨터 시스템에 관련이 있다. 본 발명은 원격 혹은 로컬 저장 장치를 갖는 통신망 환경에서 배치되는 서버 컴퓨터들 및 클라이언트 컴퓨터들을 갖는 환경에 적용될 수 있다. 본 발명은 프로그래밍 언어 기능, 인터프리테이션 (interpretation) 및 실행 능력들을 갖는 스탠드얼로운 (standalone) 컴퓨팅 디바이스에 또한 적용할 수 있다.
<코드 세그먼트들을 생성, 관리, 및 사용하기 위한 시스템 및 방법>
도2는 본 발명의 한 실시예에 따라 코드 세그먼트들을 생성, 관리, 및 사용하는 시스템의 블럭도이다. 도2에서, 컴퓨터(202)는 본 발명이 상주할 수 있는 사용자 혹은 개발 컴퓨터와 같은, 하지만 거기에 국한되지 않는, 컴퓨터를 나타낸다. 본 발명은 통합 디자인 환경의 한 구성 요소로서 혹은 스탠드얼로운 시스템으로서 구현될 수 있다. 툴 (tool)은 코드 세그먼트 관리자(216) 및 다음 중의 한 개 이상을 포함할 수 있다: 코드 세그먼트 라이브러리(222), 본 명세서에서 디버거(214)로 표현된 한 개 이상의 언어 디버거들, 한 개 이상의 언어 서비스들 (도시 안됨), 소스 코드(212)를 초안하고 편집하기 위한 편집기(206)로 표현된 한 개 이상의 편집기들, 및 컴파일러(208)로 표현된 한 개 이상의 컴파일러들. 이 기술에 보통 숙련자들이라면 디자인 환경 IDE(204)는 도2에 도시 안된 기타 구성 요소들도 또한 포함할 수 있음을 이해할 것이다.
소스 코드 파일(212)은 전형적으로 프로그래머 혹은 개발자가 타이핑하거나 편집하는 명령어들의 세트이고, 주어진 프로그래밍 언어 혹은 프로그래밍 언어들의 조합으로 기록된다. 소스 코드(212)는 전형적으로 한 개 이상의 문장들을 포함하고, 각 문장은 전형적으로 한 개 이상의 표현들 및/또는 개체들을 포함한다. 문장에서 표현 및/또는 개체들은 복수 구성 요소들로 구성될 수 있다. 소스 코드(212)는 편집기(206)에 의해 생성 혹은 수정되고, 안정된 저장 매체에서 지속될 수 있다.
응용 프로그램들은 디자인 환경 (예컨데, 예시적 통합 디자인 환경 (IDE)(204))을 사용해서 소스 코드(212)로부터 생성될 수 있다. 디자인 환경은 컴파일러(208)로 본 명세서에 표현된 한 개 이상의 컴파일러들, 한 개 이상의 언어 서비스들 (도시 안됨), 본명세서에서 디버거(214)로 표현된 한 개 이상의 디자인 툴들, 본 명세서에서 편집기(206)로 표현된 한 개 이상의 편집기들, 브라우져들 (도시 안됨), 및 기타를 포함할 수 있다. IDE(204)는, 예를 들어 마이크로소프트 비쥬얼 스튜디오 .NET (MICROSOFT VISUAL STUDIO .NET), 혹은 매크로미디어 (MACROMEDIA)의 드림위버 (DREAMWEAVER) 혹은 볼랜드 C++ 빌더 스튜디오 6(BORLAND C++ BUILDER STUDIO 6) 혹은 임의의 기타 소프트웨어 개발/디자인 툴, 컴파일러, 혹은 환경을 나타낼 수 있다.
IDE(204)와 같은 디자인 환경은 소스 코드(212)로부터 스탠드얼로운 실행 환경 (도시 안됨)에서 실행될 수 있는 실행 가능 코드(210)를 생성할 수 있고, 또는 인터프리팅 (interpreting)되거나 다시 컴파일되고 실행 환경에 의해 실행되는 중간 형태 코드를 생성할 수 있다. 그런 실행 환경은 디자인 환경 IDE(204)에 의해 소스 코드(212)로부터 컴파일된 코드를 실행하기 위해 요구되는 소자들을 포함할 수 있다. 실행 환경은 범용 디바이스 중간 언어 코드 (non-device specific intermediate language code)로부터 원시 코드 (native code)를 생성하는 소자들을 포함할 수 있다. 개발 및 실행 환경들은 다양한 클래스 라이브러리들을 (도시 안됨) 추가로 포함할 수 있다. 적합한 실행 환경은, 예를 들어 마이크로소프트 실행 시간 공통 언어 .NET (MICROSOFT COMMON LANGUAGE RUNTIME .NET) 혹은 자바 (JAVA) 혹은 임의의 기타 적합한 실행 환경을 나타낼 수 있다. 실행 가능 응용 프로그램은 한 개 이상의 컴퓨터들에 (도시 안됨) 공유 클래스 라이브러리들 및 실행 환경과 함께 로딩되고 실행될 수 있다.
편집기(206)는 컴퓨터 프로그램의 소스 코드(212)의 개발을 용이하게 한다. 편집기(206)는 베이직 (BASIC), 코볼 (COBOL), 포트란 (FORTRAN), C, C++, C#, 자바 (JAVA), J#, 비쥬얼 베이직 (VISUAL BASIC), 리얼 베이직 (REAL BASIC), 델파이 (DELPHI), ASP, 파스칼 (PASCAL), HTML, XML, 에이다 (ADA), 펄 (PERL), 딜런 (DYLAN), 파이쏜(PYTHON), 스몰토크 (SMALLTALK), TCL-TK, 에펠 (EIFFEL) 편집기,혹은 기타일 수 있다.
컴파일러(208)는 베이직 (BASIC), 코볼 (COBOL), 포트란 (FORTRAN), C, C++, C#, 자바 (JAVA), J#, 비쥬얼 베이직 (VISUAL BASIC), 리얼 베이직 (REAL BASIC), 델파이 (DELPHI), ASP, 파스칼 (PASCAL), HTML, XML, 에이다 (ADA), 펄 (PERL), 딜런 (DYLAN), 파이쏜(PYTHON), 스몰토크 (SMALLTALK), TCL-TK, 에펠 (EIFFEL) 컴파일러 혹은 인터프리터 혹은 임의의 기타 적합한 컴파일러 혹은 인터프리터를 나타낼 수 있다.
본 발명의 한 실시예에서, 코드 세그먼트는 코드 세그먼트 관리자(216)에 의해 수신되고, XML 파일과 같은 파일로 변환되고, 코드 세그먼트 라이브러리(222)에 저장된다. 그 다음, 코드 세그먼트 라이브러리(222)의 코드 세그먼트들은 아래 더욱 자세히 기술되는 것처럼 소스 코드에 삽입을 위해 이용될 수 있다.
도3은 본 발명의 한 실시예에 따라 코드 세그먼트들을 생성, 저장, 및 재사용하는 프로세스의 흐름도이다. 이제 도3을 참조해서, 스텝(302)에서, 저장 및 재사용을 위한 코드 세그먼트를 생성하기 위해, 소스 프로그램 내의 코드 섹션이 선택될 수 있다 (예컨데, 코드 섹션을 하일라이트하고 오른쪽 클릭킹해서, 혹은 임의의 기타 적합한 방법으로써). 본 발명의 한 실시예에서, 코드 세그먼트 라이브러리(222)에 포함되기 위해 코드 블럭을 선택할 때, 프로그램 편집기 사용자 인터페이스의 새 세션 (session)이 디스플래이된다. 이 시점에서, 본 발명의 한 실시예에서, 코드 세그먼트의 생성자 (creator)는 코드 세그먼트를 편집할 수 있고, 한 개 이상의 선택된 소자들 혹은 그 코드 세그먼트의 부분들을 위해 디폴트 값들을셋팅할 수 있고, 선택 부분을 수정 가능한 객체, 변수, 혹은 리터럴 (literal) 혹은 기타로 정의할 수 있고, 재사용을 위해 선택되면 코드 세그먼트의 그 부분을 수정하기 위한 도움말을 제공할 수 있다. 기대되는 수정의 타입도 또한 명시될 수 있다 (제한하지 않는 예로써, 객체, 변수, 혹은 리터럴 (literal)은 정수, 스트링, 혹은 클래스 타입일 수 있음). 타입들의 탬플릿 (template)은 수정 가능 소자와 연계될 수 있다. 예를 들어 코드 세그먼트가 데이타 소스와 인터랙팅 (interacting)하면, 코드 세그먼트는 데이타베이스 스키마 (schema) 및 그 스키마가 참조하는 강한 타입의 객체들과 연계될 수 있다. 추가로, 코드 세그먼트의 표제 및 그 코드 세그먼트를 찾기 위한 검색 키워드들이 제공될 수 있고, 재사용을 위해 선택되면 코드 세그먼트를 수정하기 위한 팁들 (tips) 및/또는 코멘트들이 코드 세그먼트에서 선택된 소자들을 위해 명시될 수 있다. 소스 프로그램에서 원래 사용으로부터 유도될 수 있는 세그먼트에 대한 메타 정보 (meta information)가 제공된다. 그것 및 사용자에 의해 요구된 추가 메타 정보는 코드 세그먼트와 연계될 수 있다.
본 발명의 한 실시예에서, 코드 세그먼트는 스텝(304)에서 XML 파일로 변환된다. 코드 세그먼트로부터 생성될 수 있는 XML 파일(400)의 예는 도4에 도시된다. 본 발명의 한 실시예에서 라이브러리(222)는 재사용을 위한 객체 집합이다. 설명적으로 인코딩된 코드 세그먼트(400)와 같은 한 개 이상의 인코딩된 코드 세그먼트들을 포함한다. 인코딩된 코드 세그먼트(400)는 다음 중 한 개 이상을 포함할 수 있다: 시작 및 끝 태그들 (402a, 402b) ("<title>")에 의해 표시되는 코드 세그먼트의 표제(404), 시작 및 끝 태그들 (408a, 408b) ("<uniqueid">)에 의해 표시되는 고유 식별자(406), 및, (코드 세그먼트의 버젼, 코드 세그먼트의 위치, 코드 세그먼트의 저자, 코드 세그먼트가 무엇을 하는지의 설명, 코드 세그먼트를 위한 도움 주제로의 범용 리소스 위치 탐색자 (URL), 코드 세그먼트가 속한 한 개 이상의 카테고리들, 코드 세그먼트를 찾을 때 사용될 수 있는 키워드들, 코드 세그먼트가 실행하도록 의도된 실행 환경 버젼, 실행하기 위해 코드 세그먼트에 의해 필요한 라이브러리들 및 어셈블리들과 같은 참조들, 코드 세그먼트에서 제어들, 객체들, 리터럴들, 및 기타의 선언들, 코드 세그먼트가 코딩된 프로그래밍 언어, 코드 세그먼트(410)의 실제 코드, 및 원하는 기타 정보를 포함하는 기타 등등. XML 파일에서, 코드 세그먼트의 이러한 부분들은 적절한 시작 및 끝 태그들에 의해 구분될 수 있고, 위에서 참조된 구분자 (delimiter)들로 선택된 구체적인 태그들은 단지 예들일 뿐이다. 임의의 적절한 태그들 혹은 지시자들 (indicators)이 지속 정보를 식별하기 위해 사용될 수 있다. 본 발명의 한 실시예에서, 파일은 XML 파일이고 메타 정보가 그 XML 파일에 인코딩되고, 또 다른 실시예에서 그 정보는 한 개 이상의 파일들 혹은 XML 파일들이 아닌 데이타베이스에 인코딩될 수 있음이 또한 이해될 것이다.
스텝(306)에서, 개발자 혹은 다른 사용자는 코드 재사용을 목적으로 라이브러리(222)의 인코딩된 코드 세그먼트(400)와 같은 인코딩된 코드 세그먼트들을 액세스할 수 있다. 본 발명의 한 실시예에서, 코드 세그먼트 라이브러리(222)의 인코딩된 코드 세그먼트들은 새 환경에서 재사용을 위해 개발 환경 내에서부터 액세스될 수 있다. 도5는, 프로그램 편집기 사용자 인터페이스가 디스플래이되고, 컨텍스트 메뉴(504)가 한 개의 가능한 옵션 "스니펫 (snippet)을 삽입하시오(504a)" (도5에서 "삽입"으로 간략화됨)으로서 디스플래이되는, 본 발명의 한 실시예의 스크린 샷(500)의 한 예를 설명한다. "스니펫 (snippet)을 삽입하시오"(504a)를 선택했을 때, "커맨드 라인의 인수들을 읽으시오" ("READ COM LINE ARGS(504c)"로 단축화됨)를 포함하는 가능한 인코딩된 코드 세그먼트들을 포함하는 "코드를 구현하시오(504b)"가 선택되는 액션 리스트가 디스플래이된다. 인코딩된 코드 세그먼트(504c)를 선택할 때, 선택된 인코딩된 코드 세그먼트의 코드 부분은 프로그램 소스 코드(212)로 삽입된다. 삽입을 위해 지정된 특정 위치에 정확하게 삽입되지 않은 코드 세그먼트들은 표시되거나 그렇지 않으면 선택이 거절된다.
본 발명의 한 실시예에서, 개발자 혹은 다른 사용자는, 인코딩된 코드 세그먼트(602)가 그렇게 선택된 도6의 스크린 샷(600)의 예에서 도시된 바와 같이, 드라이브 혹은 디렉토리의 컨텐츠들의 디스플래이를 가져오고 그 드라이브 혹은 디렉토리 컨텐츠 디스플래이 (즉, 라이브러리)로부터 인코딩된 코드 세그먼트를 선택하고 드래깅 (dragging)해서 코드 재사용 목적을 위한 라이브러리(222)의 인코딩 코드 세그먼트(400)와 같은 코드 세그먼트 라이브러리 멤버들을 액세스할 수 있다. 기타 실시예들에서, 코드 세그먼트는 편집기에서 사용을 위해 문자를 선택하는 임의의 일반적으로 알려진 방법들에 의해 선택될 수 있다. 선택된 코드 세그먼트가 삽입될 수 있는 위치를 표현하는 커서(604)는 수직 막대(606)에 의해 또한 표시된다. 한 실시예에서, 수직 막대(606)는 코드 세그먼트의 삽입을 위해 선택된 위치가 삽입을 위해 허용된 위치일 때만 디스플래이된다.
도7은 본 발명의 한 양태에 대응해서 소스 코드로 코드 세그먼트를 삽입하는 프로세스이다. 스텝(702)에서, 코드 세그먼트는 소스 코드로 삽입을 위해 선택된다. 도5 및 도6은, 위에 설명된 대로, 코드 세그먼트들을 선택하는 기타 방법들이 고려되지만, 삽입을 위해 코드 세그먼트를 선택하는 두 개의 방법들을 보인다.
스텝(704)에서, 인코딩된 코드 세그먼트는 이용 가능한 메타 정보를 결정하기 위해 파싱 (parsing)된다. 코드 세그먼트가 XML 파일로 인코딩되는 한 실시예에서, XML 코드는, 위에서 설명된 대로, XML 태그들에 의해 구분되는 메타 정보 소자들을 결정하기 의해 파싱된다.
스텝(706)에서, 코드 세그먼트 메타 정보의 프로그래밍 언어는 소스 코드 프로그래밍 언어와 비교된다. 프로그래밍 언어들이 호환성이 없으면, 코드 세그먼트의 삽입이 허용되지 않을 것이다. (예를 들어, 삽입을 위해 선택된 코드 세그먼트가 C++ 코드 세그먼트이면, 그 코드 세그먼트가 삽입되는 소스 코드는 C++ 코드이어야 한다. 본 발명이 구현될 수 있게 고려된 프로그래밍 언어들은 베이직, 코볼, 포트란, C, C++, C#, 자바, J#, 비쥬얼 베이직, 리얼 베이직, 델파이, ASP, 파스칼, HTML, XML, 에이다, 펄, 딜런, 파이쏜, 스몰토크, TCL-TK, 에펠 및 기타 프로그래밍 언어들을 포함한다.
스텝(708)에서, 소스 코드로의 코드 세그먼트 삽입 가능성이 결정된다. 예를 들어, 마이크로소프트 비쥬얼 베이직 언어에서, 특성은 방법으로 위치될 수 없고, 그러므로, 스텝(708)에서, 본 발명의 한 실시예에서, 방법으로의 특성 코드 세그먼트의 삽입은 허용되지 않을 것이다. 유사하게, 코드 라인들이 방법으로 캡슐화되지 않으면, 본 발명의 한 실시예에서, 코드 라인들은 서브 루틴, 특성, 혹은 함수와 같은 과정 내에 포함되어야 하기 때문에, 코드 라인들은 네임스페이스 (namespace) 혹은 모듈로 삽입될 수 없을 것이다. 본 발명의 한 실시예에서, 함수를 구성하는 코드 세그먼트는 또 다른 함수 안으로 삽입될 수 없다. 본 발명의 한 실시예에서, 클래스, 구조, 혹은 인터페이스 정의는 한 방법 안에 삽입될 수 없을 것이다. 위에 열거된 것들 및 기타 삽입 규칙들은 C# 및, 위에 열거된 것들과 같은, 다수의 기타 프로그래밍 언어들을 포함하는 다수의 기타 언어들로 적용할 수 있다.
스텝(710)에서, 코드 세그먼트는 지정된 위치에서 소스 코드로 복사된다 (예를 들어, 위치는 코드 세그먼트가 선택될 때 커서 위치에 의해 결정될 수 있음). 도8은, 경계선(806)에 의해 구분된 코드 세그먼트(802)는 소스 코드(804)로 삽입되는 본 발명의 한 실시예의 스크린 샷의 한 예를 설명한다. 코멘트들(814, 816)에 의해 설명된 것처럼, 한 개 이상의 코멘트들이 디스플래이될 수 있다. 코멘트들은 그것의 새 환경에서 코드 세그먼트를 수정하는 데에 도움되는 정보를 제공할 수 있고 (즉, 코멘트(814)), 혹은 도움말 혹은 기타 적합한 정보로의 링크를 포함할 수 있고 (즉, 코멘트(816)), 위에 논의된 대로, 코드 세그먼트가 생성될 때 코드 세그먼트 생성자 (originator)에 의해 들어온 코멘트 정보를 나타낼 수 있다.
스텝(712)에서, 코드 세그먼트 내에서 리터럴들, 컨트롤들, 및 객체들과 같은 필드들의, 하지만 거기에 국한되지 않고, 수정을 요구할 수 있는 각 소자가 식별된다 (예를 들어, 적절한 태그들로 구분된 XML 파일에서 메타 정보와 코드 세그먼트의 코드 부분에서 찾을 수 있는 식별된 컨트롤, 리터럴, 객체를 비교함으로써). 식별된 컨트롤들, 리터럴들, 객체들, 및 기타는, 컨트롤들(810, 812)에 의해 도8에서 설명된 바와 같이, 소스 코드에서 하일라이트되거나 그렇지 않으면 구별된다.
스텝(714)에서, 코드 세그먼트가 실행하기 위해 요구된 라이브러리들, 구성 요소들, 및 기타 프로그래밍 소자들을 나타내는 임포트들 (imports) 및 참조들은 인코딩된 코드 세그먼트 파일에서 검사되고, 소스 코드에 이미 포함되지 않은 그러한 임포트들 및 참조들은 소스 코드로 삽입된다 (예를 들어, 도12의 임포트 문장(1202)은 삽입되고, 참조들의 리스트는 "시스템 웹(1204)"을 포함하기 위해 업데이트된다).
스텝(716)에서, 캐럿 (carat) 혹은 커서 및 하일라이팅에 의해 표현된 포커스 (focus)는 수정이 요구될 수 있는 제1 소자 (즉, 텍스트 박스1(810))로 이동된다. 스텝(718)에서, 마커 (marker)는 활성화된다. 한 실시예에서, 활성화는, 경계선(820)에 의해 설명된 것처럼, 포커스를 갖는 소자 주위의 경계를 디스플래이함으로써 표시된다.
본 발명의 한 실시예에서, 한 개의 리터럴, 변수, 혹은 컨트롤을 변경하는 동작은 동일 코드 세그먼트 내에서 그 리터럴, 변수, 혹은 컨트롤의 모든 기타 인스턴스들을 자동 업데이트하는 결과를 가져온다. 예를 들어, 도8에서 도시된 바와 같이, "텍스트 박스1(810)"이 "텍스트 박스2"로 변경되었다고 가정하자. 본 발명의 한 실시예에서, "텍스트 박스1(810)"에서 "텍스트 박스2"로 변경할 때, "텍스트 박스1(812)"이 "텍스트 박스2"로 유사하게 자동으로 변경된다.
본 발명의 한 실시예에서, 구체적 사용자 액션 혹은 이벤트를 수신할 때 (예를 들어, CONTROL + SPACE의 입력과 같은, 하지만 거기에 국한되지 않고), 그 변수의 유효 대체물들의 리스트가 디스플래이된다. 본 발명의 한 실시예에서, 리스트 박스(1004)에 포함된 항목들은 디폴트 소자 및 소스 코드 내에 등장하는 임의의 비숫한 소자들을 포함한다. 예를 들어, 이제 도10을 참조해서, "텍스트 박스2(1002)"를 선택할 때 CONTROL-SPACE가 입력되면, 소자들 텍스트 박스1(1014) (디폴트) 및 그 형태에 존재하는 임의의 텍스트 박스 변수들 (예를 들어, 아이콘 혹은 이것이 소스 코드로부터의 소자임을 지시하는 지시자를 동반하는 텍스트 박스1(1008), 및 텍스트 박스2(1010))가 나타난다. 리스트의 항목들 중 한 개는 선택 소자의 또 다른 인스턴스를 선언하는 옵션을 제공할 수 있다. 예를 들어, 도10에서, 새 텍스트 박스(1006)는 그런 소자이다. 새 텍스트 박스(1006)의 선택은 도11의 라인(1102)에서 도시된 바와 같이, 텍스트 박스 변수의 새 인스턴스의 선언으로 귀결될 것이다. 도시된 예에서, "텍스트 박스1(1014)"는 이 소자를 위한 코드 세그먼트 창작자에 의해 지정된 디폴트 값이다. 본 발명의 한 실시예에서, 숫자는 고유 이름을 생성하기 위해 디폴트 값으로 자동 첨부된다. 또 다른 새 소자가 선언되면, 새 인스턴스의 이름은 다시 증가될 수 있다 (예를 들어, "텍스트 박스12"라는 고유 ID를 생성함).
본 발명의 한 실시예에서, 코드 세그먼트(802)의 경계선들(806)은 유지된다.탭 키를 누르는 것은 잠재적 수정을 위해 다음 표시 필드로 활성화를 이동할 것이다. 최종 표시 필드에 도달된 후에, 본 발명의 한 실시예에서, 다시 탭을 누르는 것은 코드 세그먼트의 제 1필드로 활성화들을 이동한다. 본 발명의 한 실시예에서, 언두(undo) 옵션은 코드 세그먼트를 그것의 원래 상태로 사용자가 리턴하도록 한다 (즉, 코드 세그먼트가 재사용을 위해 선택된 후, 그것이 처음에 소스 코드로 삽입되는 것처럼).
도9는 본 발명의 한 양태에 대응해서 디스플래이될 수 있는 팁을 도시한다. 팁(902)은 팁이 연계되어 있는 소자(904)가 선택될 때 디스플래이될 수 있다. 본 발명의 한 실시예에서, 팁은 팁이 연계된 필드로 커서를 움직임으로써 디스플래이된다.
본 명세서에서 설명된 다양한 기술들은 하드웨어 혹은 소프트웨어 혹은, 적절한 곳에서, 둘을 조합한 것과 연관해서 구현될 수 있다. 그러므로, 본 발명의 발명들 및 기구, 혹은 특정 양태들 혹은 그들의 일부들은, 플로피 디스켓들, CD ROM들, 하드 드라이브들, 혹은 임의의 기타 머신 판독 가능한 저장 매체와 같은 실체 매체들에서 구현되는 프로그램 코드 (즉, 명령들)의 형태를 가질 것이고, 프로그램 코드가 컴퓨터와 같은 머신으로 로드 (load)되고 실행될 때, 머신은 본 발명을 실시하기 위한 기구가 된다. 프로그램 가능한 컴퓨터들에서의 프로그램 코드의 실행의 경우, 컴퓨팅 디바이스는 일반적으로 프로세서, 프로세서에 의해 판독 가능한 저장 매체 (휘발성 및 비휘발성 메모리 및/또는 저장 소자들을 포함해서), 적어도 한 개의 입력 디바이스, 및 적어도 한 개의 출력 디바이스를 포함한다. 예를들어, 데이타 프로세싱 API 혹은 기타의 사용을 통해서와 같이, 본 발명의 도메인 고유 프로그래밍 모델들의 양태들의 생성 및/또는 구현을 사용할 수 있는 한 개 이상의 프로그램들은 컴퓨터 시스템과 통신하기 위한 상위 수준 절차형 혹은 객체 지향 프로그래밍 언어에서 구현되는 것이 선호된다. 그러나, 프로그램(들)은, 원하면, 어셈블리 혹은 기계 언어로 구현될 수 있다. 임의의 경우에서, 언어는 컴파일되거나 인터프리트되고, 하드웨어 구현들과 조합된다.
본 발명이 다양한 도면들의 선호된 실시예들과 연관해서 설명되는 가운데, 기타 유사 실시예들이 사용될 수 있거나, 수정 및 추가가 그 범위를 벗어나지 않고 본 발명의 동일 기능을 수행하기 위해 원하는 실시예들로 만들어질 수 있음이 이해된다. 그러므로, 본 발명은 임의의 한 개의 실시예로 제한되어서는 안되지만, 대신에 첨부된 청구항들에 대응해서 범위가 정해져야 한다.
코드 세그먼트와 그 코드 세그먼트의 메타 정보는 파일(들)에 저장된다. 본 발명의 한 실시예에서, 코드 세그먼트와 메타 정보는 XML 파일로 인코딩되고, 한 개 이상 인코딩된 코드 세그먼트들은 라이브러리에 저장된다. 필요할 때 라이브러리 코드 세그먼트들은 소스 코드에 삽입되어진다. 코드 세그먼트들의 공유가 용이하도록 코드 세그먼트들은 관리되고 체계화된다.

Claims (31)

  1. 재사용 가능한 코드 세그먼트들의 소스를 생성하는 방법에 있어서,
    코드 세그먼트를 상기 코드 세그먼트와 상기 코드 세그먼트와 연계된 정보를 포함하는 적어도 한 개의 파일로 변환하는 단계; 및
    코드 세그먼트들의 라이브러리에 상기 적어도 한 개의 파일을 저장하는 단계를 포함하고, 상기 코드 세그먼트들의 라이브러리는 한 개 이상의 소스 프로그램들에 포함되기 위해 재사용 코드 세그먼트들의 소스로서 사용될 수 있는
    방법.
  2. 제1항에 있어서, 상기 적어도 한 개 파일이 XML 파일인 방법.
  3. 제1항에 있어서, 상기 코드 세그먼트를 변환하는 단계는 상기 적어도 한 개 파일에 상기 코드 세그먼트를 포함시키는 단계를 포함하는 방법.
  4. 제1항에 있어서, 상기 코드 세그먼트를 변환하는 단계는 상기 적어도 한 개 파일에 저자를 포함하는 단계를 포함시키는 방법.
  5. 제1항에 있어서, 상기 코드 세그먼트를 변환하는 단계는 상기 코드 세그먼트가 기록되는 프로그래밍 언어를 상기 적어도 한 개 파일에 포함시키는 단계를 포함하는 방법.
  6. 제1항에 있어서, 상기 코드 세그먼트를 변환하는 단계는 상기 적어도 한 개 파일에 선택된 코드의 소자와 연계된 팁을 포함시키는 단계를 포함하는 방법.
  7. 제1항에 있어서, 상기 코드 세그먼트를 변환하는 단계는 상기 적어도 한 개 파일에 선택된 코드의 소자와 연계된 코멘트를 포함시키는 단계를 포함하는 방법.
  8. 제1항에 있어서, 상기 코드 세그먼트를 변환하는 단계는 상기 적어도 한 개 파일에서 상기 코드 세그먼트가 실행하기 위해 요구되는 적어도 한 개의 참조를 저장하는 단계를 포함하는 방법.
  9. 제1항에 있어서, 상기 코드 세그먼트를 변환하는 단계는 상기 코드 세그먼트가 실행될 것으로 기대되는 실행 환경의 버젼을 상기 적어도 한 개 파일에 포함시키는 단계를 포함하는 방법.
  10. 제2항에 있어서, 소스 프로그램에서 재사용을 위해 선택된 상기 코드 세그먼트 라이브러리에 저장된 상기 적어도 한 개 파일과 연계된 정보를 결정하기 위해 상기 XML 파일을 파싱하는 단계를 더 포함하는 방법.
  11. 제10항에 있어서, 상기 적어도 한 개 파일이 코딩된 프로그래밍 언어가 상기 소스 프로그램의 상기 코딩 언어와 일치한다는 결정에 응답해서, 상기 소스 프로그램에 상기 적어도 한 개 파일의 적어도 한 부분을 삽입하는 단계를 더 포함하는 방법.
  12. 제1항에 있어서, 상기 소스 프로그램에 삽입된 상기 적어도 한 부분은 한 코드 섹션을 포함하는 방법.
  13. 제1항에 있어서, 상기 소스 프로그램으로 삽입된 상기 적어도 한 부분은 참조를 포함하는 방법.
  14. 제13항에 있어서, 상기 참조는 객체 선언을 포함하는 방법.
  15. 제13항에 있어서, 상기 참조는 한 소자를 포함하고, 상기 소자는 상기 코드 세그먼트와 연계된 상기 소자의 외부 설명에 의해 결정되는 방법.
  16. 제13항에 있어서, 상기 참조는 리터럴 선언을 포함하는 방법.
  17. 제13항에 있어서, 상기 참조는 제어 선언을 포함하는 방법.
  18. 제1항에 있어서, 상기 소스 프로그램에 삽입되는 상기 적어도 한 부분은 상기 코드 세그먼트의 실행을 위해 요구되는 소자를 포함하는 방법.
  19. 제18항에 있어서, 상기 소자는 실행을 위해 상기 코드 세그먼트에 의해 요구되는 라이브러리를 포함하는 방법.
  20. 제13항에 있어서, 상기 적어도 한 부분은, 상기 적어도 한 부분이 상기 소스 프로그램에 이미 존재하지 않는 경우에만, 상기 소스 프로그램으로 삽입되는 방법.
  21. 제1항에 있어서, 상기 소자와 연계된 정보와 상기 적어도 한 개 파일 내의 코드를 비교함으로써, 상기 소스 프로그램에서 수정을 요구할 수 있는 상기 코드 세그먼트의 소자들을 결정하는 단계를 더 포함하는 방법.
  22. 제21항에 있어서, 상기 소스 프로그램에서 수정을 요구할 수 있는 적어도 한 개 소자는 상기 소스 프로그램으로 삽입되는 상기 코드 세그먼트의 다른 부분들로부터 구별되는 방법.
  23. 제22항에 있어서, 상기 코드 세그먼트의 상기 구별되는 소자와 연계되는 팁이 디스플래이되는 방법.
  24. 제22항에 있어서, 포커스 (focus)를 갖는 상기 적어도 한 개 소자는 상기 소자를 둘러싸는 경계선에 의해 구별되는 방법.
  25. 재사용을 위한 코드 세그먼트들을 생성하는 시스템에 있어서,
    코드 세그먼트 관리자를 포함하고, 상기 코드 세그먼트 관리자는 코드 세그먼트 라이브러리에 저장하기 위해 코드 세그먼트와 상기 코드 세그먼트와 연계된 정보를 적어도 한 개 파일로 변환하고, 상기 코드 세그먼트 라이브러리는 소스 프로그램에 포함하기 위해 재사용 가능한 코드 세그먼트들의 소스로서 사용될 수 있는 시스템.
  26. 제25항에 있어서, 상기 적어도 한 개 파일은 XML 파일을 포함하는 시스템.
  27. 제26항에 있어서, 상기 코드 세그먼트를 상기 XML 파일로 변환하는 단계는 상기 코드 세그먼트와 연계되는 적어도 한 개 타입의 메타 정보를 식별하는 단계 및 상기 메타 정보의 타입을 지시하는 지시자로 태깅된 상기 XML 파일에 상기 적어도 한 가지 타입의 메타 정보를 저장하는 단계를 포함하는 시스템.
  28. 제27항에 있어서, 상기 메타 정보 타입은 코드를 포함하는 시스템.
  29. 제27항에 있어서, 상기 메타 정보 타입은 참조를 포함하는 시스템.
  30. 제27항에 있어서, 상기 메타 정보 타입은 임포팅 (importing)을 위해 라이브러리를 포함하고, 상기 라이브러리는 실행을 위해 상기 코드 세그먼트에 의해 요구되는 시스템.
  31. 코드 세그먼트를 상기 코드 세그먼트 및 상기 코드 세그먼트와 연계된 정보를 포함하는 적어도 한 개 파일로 변환하는 단계; 및
    코드 세그먼트들의 상기 라이브러리에 상기 적어도 한 개 파일을 저장하는 단계에 있어서, 상기 코드 세그먼트들의 라이브러리는 한 개 이상의 소스 프로그램들에 포함되기 위한 재사용 가능한 코드 세그먼트들의 소스로서 사용될 수 있는 단계
    를 위한 컴퓨터 실행 가능한 명령들을 포함하는 컴퓨터 판독 가능 매체.
KR1020040044850A 2003-06-18 2004-06-17 재사용 가능한 코드 세그먼트들을 생성 및 재사용하는 컴퓨터화된 방법 및 컴퓨터 구현 시스템, 및 컴퓨터 판독 가능 저장 매체 KR101098718B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/464,397 US7526753B2 (en) 2003-06-18 2003-06-18 System and method for creating, managing and using code segments
US10/464,397 2003-06-18

Publications (2)

Publication Number Publication Date
KR20040111099A true KR20040111099A (ko) 2004-12-31
KR101098718B1 KR101098718B1 (ko) 2011-12-23

Family

ID=33418155

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040044850A KR101098718B1 (ko) 2003-06-18 2004-06-17 재사용 가능한 코드 세그먼트들을 생성 및 재사용하는 컴퓨터화된 방법 및 컴퓨터 구현 시스템, 및 컴퓨터 판독 가능 저장 매체

Country Status (5)

Country Link
US (1) US7526753B2 (ko)
EP (1) EP1489496B1 (ko)
JP (1) JP4619698B2 (ko)
KR (1) KR101098718B1 (ko)
CN (1) CN100354823C (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170023022A (ko) * 2014-06-30 2017-03-02 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 코드 추천 기법

Families Citing this family (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7328426B2 (en) 2003-08-13 2008-02-05 International Business Machines Corporation Editor with commands for automatically disabling and enabling program code portions
US8117593B1 (en) * 2004-06-10 2012-02-14 Siemens Industry, Inc. Method for highlighting selected tasks in a program code listing
US7661088B2 (en) * 2004-10-20 2010-02-09 Microsoft Corporation Systems and methods to efficiently and automatically effect population of custom controls onto a visual designer toolbox
WO2006043012A1 (en) * 2004-10-22 2006-04-27 New Technology/Enterprise Limited Data processing system and method
US8185868B1 (en) 2004-12-20 2012-05-22 The Mathworks, Inc. System and method for cell-based code editing and publishing
KR100673313B1 (ko) * 2004-12-30 2007-01-24 재단법인서울대학교산학협력재단 코드조각 번호 매김을 이용한 프로그램 간의 코드조각결합방법
US7574675B1 (en) * 2005-06-14 2009-08-11 Adobe Systems Incorporated Methods and apparatus to display content selections
US7698695B2 (en) * 2005-08-31 2010-04-13 International Business Machines Corporation Search technique for design patterns in Java source code
US8392872B2 (en) * 2005-11-19 2013-03-05 International Business Machines Corporation Pseudo translation within integrated development environment
US7962894B2 (en) * 2005-11-23 2011-06-14 Oracle International Corporation System and method for identifying non-supported features in a multiple code editor environment
US8141038B2 (en) * 2005-12-29 2012-03-20 International Business Machines Corporation Virtual RAS repository
US20070234316A1 (en) * 2006-03-07 2007-10-04 Sap Ag Methods and systems for development of software for complex systems
US20070250810A1 (en) * 2006-04-20 2007-10-25 Tittizer Abigail A Systems and methods for managing data associated with computer code
US8510647B2 (en) * 2006-04-29 2013-08-13 Jennifer Madden Computer programming and markup language source code visualization tool
US9009656B2 (en) * 2006-05-02 2015-04-14 International Business Machines Corporation Source code analysis archival adapter for structured data mining
US9128727B2 (en) * 2006-08-09 2015-09-08 Microsoft Technology Licensing, Llc Generation of managed assemblies for networks
TW200821926A (en) * 2006-11-07 2008-05-16 Sunplus Technology Co Ltd Method and system for function reference of development tool
US8762956B1 (en) 2007-01-31 2014-06-24 The Mathworks, Inc. Generating a report document from code
US8312418B2 (en) * 2007-12-10 2012-11-13 International Business Machines Corporation Visualization of implicit relationships in a trace query for model driven development
KR100994070B1 (ko) * 2008-03-19 2010-11-11 (주)케투씨소프트 예약된 컴포넌트 컨테이너 기반 소프트웨어 개발 방법 및장치
US20100235275A1 (en) * 2009-03-06 2010-09-16 Carl Ansley Card Processing
US9189244B2 (en) * 2009-08-18 2015-11-17 Adobe Systems Incorporated Methods and systems for managing data service specifications
US9244659B2 (en) * 2010-04-26 2016-01-26 International Business Machines Corporation Extensible meta model for capturing solution patterns
US20110265058A1 (en) * 2010-04-26 2011-10-27 Microsoft Corporation Embeddable project data
CN101853205A (zh) * 2010-06-23 2010-10-06 山东中创软件商用中间件股份有限公司 一种监控程序运行的方法和装置
US8370354B2 (en) 2010-06-30 2013-02-05 International Business Machines Corporation Acceleration of legacy to service oriented (L2SOA) architecture renovations
US20120159434A1 (en) * 2010-12-20 2012-06-21 Microsoft Corporation Code clone notification and architectural change visualization
CN102955695A (zh) * 2011-08-31 2013-03-06 鸿富锦精密工业(深圳)有限公司 三次元量测程序色彩管理系统及方法
CN103001981A (zh) * 2011-09-10 2013-03-27 深圳市龙视传媒有限公司 一种调用能力服务的方法及系统
US9785302B2 (en) * 2013-03-14 2017-10-10 Microsoft Technology Licensing, Llc Inline display and preview of related information for elements in a document
WO2015021554A1 (en) * 2013-08-15 2015-02-19 Immun.io Inc. Method and system for protecting web applications against web attacks
US9195440B2 (en) * 2013-11-26 2015-11-24 International Business Machines Corporation Intelligent data source selection in application development
US9141348B1 (en) * 2014-03-28 2015-09-22 The Mathworks, Inc. Using program code to generate help information, and using help information to generate program code
US20150301806A1 (en) * 2014-04-16 2015-10-22 The Mathworks, Inc. Tentative program code in an editor
US9747082B2 (en) 2014-12-18 2017-08-29 International Business Machines Corporation Optimizing program performance with assertion management
US9703552B2 (en) * 2014-12-18 2017-07-11 International Business Machines Corporation Assertions based on recently changed code
US9823904B2 (en) 2014-12-18 2017-11-21 International Business Machines Corporation Managed assertions in an integrated development environment
US9870205B1 (en) * 2014-12-29 2018-01-16 Palantir Technologies Inc. Storing logical units of program code generated using a dynamic programming notebook user interface
US9678855B2 (en) 2014-12-30 2017-06-13 International Business Machines Corporation Managing assertions while compiling and debugging source code
US9798539B2 (en) * 2015-07-31 2017-10-24 International Business Machines Corporation Comment linkage and display across the review cycle of an artifact
US9501274B1 (en) * 2016-01-29 2016-11-22 International Business Machines Corporation Qualitative feedback correlator
CN107239264B (zh) * 2016-03-28 2020-06-23 阿里巴巴集团控股有限公司 代码提示信息的生成方法及装置
CN106484427A (zh) * 2016-10-21 2017-03-08 福建中金在线信息科技有限公司 一种代码文件的生成方法及装置
CN106648332A (zh) * 2016-11-16 2017-05-10 惠州Tcl移动通信有限公司 一种智能终端快速选择的方法和系统
CN106951261A (zh) * 2017-03-27 2017-07-14 武汉斗鱼网络科技有限公司 数据管理方法及装置
CN110874216B (zh) * 2018-08-31 2023-07-28 广州虎牙信息科技有限公司 一种完备代码生成方法、装置、设备和存储介质
US11250018B2 (en) * 2019-06-25 2022-02-15 Periscope Data Inc. Method for automated query language expansion and indexing
CN112230809B (zh) * 2019-07-15 2023-08-18 腾讯科技(深圳)有限公司 计算机程序代码的选取方法、装置及存储介质
US11416245B2 (en) * 2019-12-04 2022-08-16 At&T Intellectual Property I, L.P. System and method for syntax comparison and analysis of software code
CN112364580A (zh) * 2020-11-13 2021-02-12 上海兆芯集成电路有限公司 自动在寄存器传输级设计文件中插入特定代码的方法及装置
US11875137B2 (en) * 2020-12-07 2024-01-16 Texas Instruments Incorporated Method and apparatus for adding new inline prompts to a program development environment

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5920868A (en) 1996-07-03 1999-07-06 Sun Microsystems, Inc. Cataloging apparatus for facilitating the re-use of distributed objects in a distributed object system
US6427230B1 (en) * 1998-11-09 2002-07-30 Unisys Corporation System and method for defining and managing reusable groups software constructs within an object management system
US6427228B1 (en) * 1999-05-12 2002-07-30 International Business Machines Corporation Combining a meta data file and java source code to dynamically create java classes and javabeans
US6981212B1 (en) * 1999-09-30 2005-12-27 International Business Machines Corporation Extensible markup language (XML) server pages having custom document object model (DOM) tags
US6714978B1 (en) * 1999-12-04 2004-03-30 Worldcom, Inc. Method and system for processing records in a communications network
WO2001052090A2 (en) * 2000-01-14 2001-07-19 Saba Software, Inc. Method and apparatus for a web content platform
US6675370B1 (en) * 2000-02-02 2004-01-06 International Business Machines Corporation System and method for imbedding hyperlinked language grammar notation in a “literate” programming environment
US6941510B1 (en) * 2000-06-06 2005-09-06 Groove Networks, Inc. Method and apparatus for efficient management of XML documents
US20030070159A1 (en) * 2000-08-04 2003-04-10 Intrinsic Graphics, Inc. Object decription language
US20020049790A1 (en) * 2000-08-08 2002-04-25 Ricker Jeffrey M Data interchange format transformation method and data dictionary used therefor
US7275079B2 (en) * 2000-08-08 2007-09-25 International Business Machines Corporation Common application metamodel including C/C++ metamodel
US6957416B2 (en) * 2001-01-31 2005-10-18 Hewlett-Packard Development Company, L.P. Document builder classes and methods
US7149734B2 (en) 2001-07-06 2006-12-12 Logic Library, Inc. Managing reusable software assets
US20030056195A1 (en) 2001-07-19 2003-03-20 Hunt Joseph R. Code generator
US7069547B2 (en) * 2001-10-30 2006-06-27 International Business Machines Corporation Method, system, and program for utilizing impact analysis metadata of program statements in a development environment
US7058886B1 (en) * 2001-12-18 2006-06-06 Open Invention Network Method and apparatus for declarative error handling and presentation
CA2479757A1 (en) * 2002-03-25 2003-10-09 Data Quality Solutions, Inc. Method and system for enterprise business process management
US7275207B2 (en) * 2002-03-28 2007-09-25 International Business Machines Corporation System and method in an electronic spreadsheet for displaying and/or hiding range of cells
US20030221184A1 (en) * 2002-05-22 2003-11-27 Gunjal Atul Narayan Template-based application development system
US20040187090A1 (en) * 2003-03-21 2004-09-23 Meacham Randal P. Method and system for creating interactive software

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170023022A (ko) * 2014-06-30 2017-03-02 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 코드 추천 기법

Also Published As

Publication number Publication date
CN100354823C (zh) 2007-12-12
US7526753B2 (en) 2009-04-28
KR101098718B1 (ko) 2011-12-23
JP2005011345A (ja) 2005-01-13
EP1489496A3 (en) 2007-09-05
CN1573693A (zh) 2005-02-02
JP4619698B2 (ja) 2011-01-26
EP1489496B1 (en) 2017-04-19
EP1489496A2 (en) 2004-12-22
US20040261059A1 (en) 2004-12-23

Similar Documents

Publication Publication Date Title
KR101098718B1 (ko) 재사용 가능한 코드 세그먼트들을 생성 및 재사용하는 컴퓨터화된 방법 및 컴퓨터 구현 시스템, 및 컴퓨터 판독 가능 저장 매체
US7269792B2 (en) System and method for generating high-function browser widgets with full addressability
Cunningham GATE, a general architecture for text engineering
JP5010551B2 (ja) 動的ウェブページコンテンツファイルからのサーバ側コード生成
US7937688B2 (en) System and method for context-sensitive help in a design environment
US6957439B1 (en) Method, system, and program for mapping objects in different language formats
KR101354803B1 (ko) 유형 추론 및 유형 지향 후기 바인딩
US6854123B1 (en) Method, system, and program for mapping standard application program interfaces (APIs) to user interface APIs
US20060101393A1 (en) System and Method for Building an Open Model Driven Architecture Pattern Based on Exemplars
US20050071805A1 (en) Developing applications using a metamodel
KR101597599B1 (ko) 소스 위치가 결여된 코드 세그먼트들을 가지는 소스 코드를 모델링하기 위한 방법
JP2002525744A (ja) テキスト・オブジェクトのコンパイル方法およびシステム
Bolin Closure: The definitive guide: Google tools to add power to your JavaScript
Hinkel NMF: a multi-platform modeling framework
Cunningham et al. Developing language processing components with GATE (a user guide)
Hostetter et al. Curl: a gentle slope language for the Web.
Price C# 10 and. NET 6–Modern Cross-Platform Development: Build apps, websites, and services with ASP. NET Core 6, Blazor, and EF Core 6 using Visual Studio 2022 and Visual Studio Code
US7657869B2 (en) Integration of external tools into an existing design environment
Gassner Flash Builder 4 and Flex 4 Bible
KR20040077410A (ko) 마크업 내부에서 명시적으로 서브클래스를 정의하고이용하는 시스템 및 방법
García-Pradales et al. An s (CASP) In-Browser Playground based on Ciao Prolog.
Etzel et al. Digital Visual Fortran programmer's guide
US20060101385A1 (en) Method and System for Enabling Roundtrip Code Protection in an Application Generator
Ali Advanced IOS 4 Programming: Developing Mobile Applications for Apple IPhone, IPad, and IPod Touch
Chiş et al. Moldable, context-aware searching with Spotter

Legal Events

Date Code Title Description
A201 Request for 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: 20141117

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20151118

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20161123

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20171117

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20181115

Year of fee payment: 8