KR20080099247A - 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터판독가능 매체 및 시스템 - Google Patents

데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터판독가능 매체 및 시스템 Download PDF

Info

Publication number
KR20080099247A
KR20080099247A KR1020087018255A KR20087018255A KR20080099247A KR 20080099247 A KR20080099247 A KR 20080099247A KR 1020087018255 A KR1020087018255 A KR 1020087018255A KR 20087018255 A KR20087018255 A KR 20087018255A KR 20080099247 A KR20080099247 A KR 20080099247A
Authority
KR
South Korea
Prior art keywords
code
api
computer readable
readable medium
classification
Prior art date
Application number
KR1020087018255A
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 마이크로소프트 코포레이션
Publication of KR20080099247A publication Critical patent/KR20080099247A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • 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
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements

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)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Adjustment And Processing Of Grains (AREA)
  • Endoscopes (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

적어도 하나의 코드 모듈과 연관된 데이터에 그 모듈의 사용법에 관한 안내를 제공하도록 주석이 첨부될 수 있다.
주석 첨부된 코드, 프로그래밍 안내, 프로파일러, 코드 모듈

Description

데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체 및 시스템{QUALITATIVELY ANNOTATED CODE}
본 발명은 코드의 사용법에 관한 안내를 제공하기 위해 주석 첨부된 코드를 작성하고 그 주석을 사용하는 도구, 시스템 및 방법에 관한 것이다.
애플리케이션, 프로그램, 함수, 및 기타의 프로그램가능하고 실행가능한 코드 모음(assemblage of code)은 통상적으로 제3자(즉, "고객") 사용을 위해 작성된다. 따라서, 효과적인 코드는 제3자 사용 시나리오가 가능하게 되도록 또 그 시나리오가 제3자의 기대를 충족시키도록 작성된다.
애플리케이션, 프로그램, 함수, 및 기타의 프로그램가능하고 실행가능한 코드 모음(assemblage of code)이 모듈화됨에 따라, 그 모듈의 사용에 관한 정성적 안내(qualitative guidance)를 제공하기 위해, 적어도 하나의 이러한 코드 모듈과 연관된 데이터에 주석이 첨부될 수 있다.
도 1은 주석 첨부된 코드(annotated code)를 작성하는 것 및 이를 이용하는 것 중 적어도 하나를 위한 예시적인 기술들을 구현하는 장치들이 네트워크를 통해 통신하는 것을 나타낸 도면.
도 2는 주석 첨부된 코드를 작성하는 것 및 이를 이용하는 것 중 적어도 하나를 위한 예시적인 기술들을 구현하는 실행 환경의 일례를 나타낸 도면.
도 3은 주석 첨부된 코드의 일례를 작성하는 도구와 관련한 예시적인 데이터 흐름을 나타낸 도면.
도 4는 주석 첨부된 코드를 이용하는 도구와 관련한 예시적인 데이터 흐름을 나타낸 도면.
첨부 도면을 참조하여 본 발명에 대해 기술한다.
코드의 사용법에 관한 안내를 제공하기 위해 주석 첨부된 코드를 작성하고 그 주석을 사용하는 도구, 시스템 및 방법이 본 명세서에 기술되어 있다. 게다가, 코드의 적어도 일부분에 주석을 첨부하는 것 및 그 주석을 사용하는 것에 관한 설명은 고객에게 코드의 부분들의 의도된 용도를 알려주는 데 이용될 수 있는 도구, 시스템, 프로세스, 명령어, 기법 및 루틴에 관련되어 있을 수 있다. 즉, 코드의 적어도 일부분에, 예를 들어, 개별적인 코드 부분들의 기능적 의도(functional intent)를 나타내는 퍼소나(persona) 또는 분류로 주석을 첨부함으로써, 고객들은 실행 중단(break)되거나 작동되지 않을(crash) 가능성이 없는 아주 효율적인 애플리케이션, 프로그램, 함수, 또는 기타 프로그램가능하고 실행가능한 코드 모음을 작성할 수 있게 된다. 게다가, 이러한 도구, 시스템, 및 프로세스는 네트워크 환경에서 하나 이상의 장치 또는 노드에 구현될 수 있다.
"모듈"은, 본 명세서에 기술되어 있는 바와 같이, 공통의 물리적 및/또는 논리적 자원을 이용할 수 있는 메서드, 클래스, DLL(dynamic link library), 프레임워크, 기타 등등의 개별적인 개체를 말하는 것일 수 있다.
"모음(assemblage)"은, 본 명세서에 기술되어 있는 바와 같이, 코드의 디플로이 단위(unit of deployment)를 말하는 것일 수 있다.
도 1은 코드의 사용법에 관한 안내를 제공하기 위해 주석 첨부된 코드를 작성하고 그 주석을 이용하기 위한 예시적인 기술들이 구현될 수 있는 예시적인 네트워크 환경(100)을 나타낸 것이다. 그렇지만, 이러한 예시적인 기술들은 네트워크 환경에 제한되지 않는다. 이러한 기술들은, 본 명세서에 기술된 바와 같이, 정성적 주석 첨부된 코드(qualitatively annotated code)(120)와 연관된 도구, 방법(예를 들어, 기법) 및 시스템을 포함할 수 있지만, 그에 한정되지 않는다. 도 1에서, 클라이언트 장치(105), 서버 장치(110) 및 "기타" 장치(115)는 네트워크(125)를 거쳐 서로 통신 연결되어 있을 수 있고, 또한 클라이언트 장치(105), 서버 장치(110) 및 "기타" 장치(115) 중 적어도 하나가 상기한 기술들을 구현할 수 있을지도 모른다.
클라이언트 장치(105)는 정성적 주석 첨부된 코드(120)를 작성하는 것 및 이를 이용하는 것 중 적어도 하나를 위한 예시적인 기술을 구현할 수 있는, 데스크톱 퍼스널 컴퓨터(PC), 워크스테이션, 메인프레임 컴퓨터, 인터넷 가전 기기, 셋톱 박스, 또는 게임 콘솔을 비롯한, 다양한 공지의 컴퓨팅 장치들 중 적어도 하나를 나타낼 수 있다. 클라이언트 장치(105)는 또한, 모바일(즉, 셀룰러) 전화, PDA(personal digital assistant), 랩톱 컴퓨터, 기타 등등을 비롯한, 유선 및/또는 무선 링크에 의해 네트워크(125)와 연관되어 있을 수 있는 적어도 하나의 장치를 나타낼 수 있다. 게다가, 클라이언트 장치(105)는 상기한 클라이언트 장치들을 다양한 규모로 및/또는 이들의 다양한 조합으로 나타낼 수 있다. "기타" 장치(115)는 또한 클라이언트 장치(15)의 상기 예들 중 어느 것으로도 구현될 수 있다.
서버 장치(110)는 정성적 주석 첨부된 코드(120)를 작성하는 것 및 이를 이용하는 것 중 적어도 하나에 대한 적어도 하나의 구현에 따라 다양한 데이터 및/또는 기능 중 임의의 것을 클라이언트 장치(105) 또는 "기타" 장치(115)에 제공할 수 있는 임의의 장치를 나타낼 수 있다. 이 데이터는 공개적으로 이용가능할 수 있거나, 다른 대안으로서 제한될 수 있다, 예를 들어, 어떤 사용자에만 또는 적절한 가입비 또는 사용료가 지불된 경우만으로 한정될 수 있다. 서버 장치(110)는 네트워크 서버, 애플리케이션 서버, 블레이드 서버(blade server), 또는 이들의 임의의 조합 중 적어도 하나일 수 있다. 통상적으로, 서버 장치(110)는 컨텐츠 소스(content source)일 수 있는 임의의 장치를 나타낼 수 있고, 클라이언트 장치(105)는 네트워크(125)를 통해 또는 오프라인 방식으로 이러한 컨텐츠를 수신할 수 있는 임의의 장치를 나타낼 수 있다. 그렇지만, 본 명세서에 기술된 예시적인 구현들에 따르면, 클라이언트 장치(105) 및 서버 장치(110)는 서로 교환가능하게 네트워크 환경(100)에서 전송 노드(sending node) 또는 수신 노드(receiving node)일 수 있다. "기타" 장치(115)도 역시 서버 장치(110)의 상기 예들 중 어느 것으 로도 구현될 수 있다.
"기타" 장치(115)는 본 명세서에 기술된 예시적인 기술들 중 하나 이상에 따라 정성적 주석 첨부된 코드(120)를 개발하고 및/또는 이를 이용할 수 있는 어떤 추가의 장치라도 될 수 있다. 즉, "기타" 장치(115)는, 예를 들어, 개별적인 코드 부분들의 기능적 의도를 나타내는 퍼소나(persona) 또는 분류로 코드의 적어도 일부분에 주석을 첨부할 수 있고 및/또는 할당된 퍼소나에 기초한 코드 부분의 사용법에 관한 안내를 고객에게 제공할 수 있는 장치를 나타낼 수 있다. 따라서, "기타" 장치(115)는 운영 체제, 인터프리터(interpreter), 변환기(converter), 컴파일러, 또는 이들 상에 구현되는 런타임 실행 환경(runtime execution environment) 중 적어도 하나를 갖는 컴퓨팅 장치 또는 처리 장치일 수 있다. 이들 예는 결코 제한하려는 것이 아니며, 따라서 그와 같이 해석되어서는 안된다.
네트워크(125)는 다양한 종래의 네트워크 토폴로지 및 유형 중 임의의 것을 나타낼 수 있으며, 유선 및/또는 무선 네트워크를 포함할 수 있다. 네트워크(125)는 또한 공개 프로토콜(public protocol) 및/또는 독점 프로토콜(proprietary protocol)을 비롯한 다양한 종래의 네트워크 프로토콜 중 어느 것이라도 이용할 수 있다. 네트워크(125)는, 예를 들어, 인터넷은 물론 802.11 시스템 등의 하나 이상의 근거리 통신망(개별적으로, "LAN"이라고도 함) 또는 더 큰 규모의 원거리 통신망(즉, "WAN") 또는 블루투스 등의 개인 영역 네트워크(personal area network)(즉, PAN)의 적어도 일부분을 포함할 수 있다.
장치(105, 110, 115) 중 적어도 하나에서의 컴퓨터 아키텍처는 통상적으로 하드웨어 및 소프트웨어의 관점에서 정의된 컴퓨팅 플랫폼을 갖는다. 컴퓨팅 장치에 대한 소프트웨어는 기능에 기초하여, 하드웨어 추상화 계층(hardware abstraction layer)("HAL"이라고도 함), 운영 체제("OS"라고도 함) 및 애플리케이션을 포함할 수 있는 여러 그룹들로 분류된다.
런타임 실행 환경은 OS와 애플리케이션, 프로그램, 함수 또는 기타 코드 모음 사이에 존재할 수 있다. 런타임 실행 환경은 애플리케이션, 프로그램, 함수 또는 기타 코드 모음이 처리 장치(105, 110,115) 중 임의의 하나 이상에서 특정의 태스크를 실행할 수 있는 공간으로서 역할할 수 있다. 보다 상세하게는, 런타임 실행 환경은 서버, 테스크톱 컴퓨터, 랩톱 컴퓨터, 및 모바일 처리/통신 장치를 비롯한 점차 광범위해지는 처리 장치(105, 110, 115) 상에서 실행 중인 애플리케이션에 추상화 및 서비스 계층을 제공함으로써 또한 애플리케이션에 메모리 관리 및 구성을 비롯한 기능들을 제공함으로써, 이러한 장치들 상에서의 애플리케이션, 프로그램, 함수 또는 기타 코드 모음의 실행의 신뢰성을 향상시킬 수 있다.
런타임 실행 환경은 프로그래밍 플랫폼(programming platform) 및 실행 플랫폼(execution platform) 중 적어도 하나로서 역할할 수 있다. 프로그래밍 플랫폼으로서, 런타임 실행 환경은 다수의 컴퓨팅 언어 중 하나로 작성되어 있을 수 있는 하나 이상의 타겟 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음을 중간 언어(intermediate language)(이후부터, "IL"이라고 함) 또는 바이트코드(bytecode)로 컴파일할 수 있다. IL은 통상적으로 플랫폼에 독립되어 있으며, 중앙 처리 장치(이후부터는 "CPU"라고 함)는 IL을 실행한다. 실제로, IL은 많은 CPU 기계어보 다 상위 레벨 언어이다.
실행 플랫폼으로서, 런타임 실행 환경은 컴파일된 IL을 네이티브 기계 명령어(native machine instruction)로 인터프리트(interpret)할 수 있다. 런타임 실행 환경은 이러한 명령어를 실행하기 위해 인터프리터 또는 컴파일러(예를 들어, JIT(just-in-time) 컴파일러)를 이용할 수 있다. 이와 상관없이, 네이티브 기계 명령어는 CPU에 의해 직접 실행될 수 있다. IL이 CPU-독립적이기 때문에, 그 CPU 플랫폼 상에서 실행 중인 OS가 적절한 런타임 실행 환경을 호스트하고 있는 한, IL은 어떤 CPU 플랫폼에서라도 실행될 수 있다.
다른 대안으로서, 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음의 적어도 일부분이 사전 컴파일(precompile)되어 런타임 실행 환경에 네이티브 이미지 파일(native image file)로서 설치될 수 있으며, 그에 따라 JIT 컴파일을 위해 CPU가 사용되는 일을 회피할 수 있다. 사실상, 사전 컴파일된 부분은 네이티브 플랫폼 실행 형식(native platform execution format)보다는 IL 형식(예를 들어, 어셈블리, 메서드 또는 유형)으로 배포되는 소프트웨어 컴포넌트이다. 이러한 사전 컴파일된 IL의 소스는 장치(105, 110, 115) 중 동일한 장치 또는 서로 다른 장치 상에서 비관리 실행 환경(non-managed execution environment) 또는 별도의 런타임 실행 환경 구현에 배치될 수 있다. 이 소스는 사전 컴파일된 IL이 대응하는 애플리케이션, 프로그램, 메서드, 함수, 또는 기타 프로그램가능하고 실행가능한 코드 모음의 설치 동안에 또는 그 설치 이전에 그 사전 컴파일된 IL을 디플로이(deploy)할 수 있다.
이와 상관없이, 정성적 주석 첨부된 코드(120)를 작성하고 및/또는 이를 이용하는 기술들이 구현될 수 있는 런타임 환경의 예들로는, 비쥬얼 베이직(Visual Basic) 런타임 환경, 예를 들어, 자바
Figure 112008053306593-PCT00001
(Java) 루틴을 실행하는 데 사용되는 자바
Figure 112008053306593-PCT00002
가상 머신(Java Virtual Machine) 런타임 환경, 또는 호출 루틴(calling routine)을 실행하기 이전에, 예를 들어, Microsoft .NET™ 애플리케이션을 기계어로 컴파일하는 CLR(Common Language Runtime)이 있다. 그렇지만, 이러한 런타임 환경의 리스트는 단지 예를 제공한 것에 불과하다. 본 명세서에 기술된 예시적인 기술들은 단지 이들 관리 실행 환경(managed execution environment)으로 제한되지 않는다. 보다 상세하게는, 이 예시적인 구현들은 관리 실행 환경으로만 제한되지 않는데, 그 이유는 하나 이상의 예가 테스트 환경(testing environment) 및/또는 비관리 실행 환경(unmanaged execution environment) 내에서 구현될 수 있기 때문이다.
IL로 컴파일된 애플리케이션, 프로그램, 함수 또는 기타 코드 모음은 "관리 코드(managed code)"라고 할 수 있으며, 그 때문에 런타임 실행 환경을 그 대신에 "관리 실행 환경(managed execution environment)"이라고 할 수 있다. 유의할 점은 실행되는 데 런타임 실행 환경을 이용하지 않는 코드를 네이티브 코드 애플리케이션(native code application)이라고 할 수 있다는 것이다.
도 2는 정성적 주석 첨부된 코드(120)(도 1 참조)를 개발하고 이를 이용하는 기술들이 구현될 수 있는 런타임 실행 환경(200)의 일례를 나타낸 것이다.
적어도 하나의 예시적인 구현에 따르면, 런타임 실행 환경(200)은 컴퓨팅 장 치 플랫폼에 대한 관리 코드의 실행을 용이하게 해줄 수 있다. 관리 코드는 애플리케이션-개발 기술의 코어 세트(core set)의 일부인 것으로 간주될 수 있고, 런타임 실행 환경(200)에서 실행되어 컴퓨팅 장치 플랫폼에 대응하는 서비스를 제공하기 위해 컴파일 또는 로드되는 애플리케이션, 프로그램, 함수 또는 기타 프로그램가능하고 실행가능한 코드 모음으로서 간주될 수 있다. 그에 부가하여, 런타임 실행 환경(200)은 관리 코드를 인터프리트 레벨(interpretive level)에서 명령어로 변환(translate)할 수 있으며, 이 명령어는 프록시(proxy)된 다음에 프로세서에 의해 실행될 수 있다. 다른 대안으로서, 관리 코드는 인터프리터, 또는 컴파일러, 또는 설치(install) 시에 네이티브 이미지(native image)로서 실행되도록 설계되어 있는 일종의 컴파일러에 의해 실행될 수 있다. 런타임 실행 환경(200)의 프레임워크는 또한 관리 애플리케이션(managed application)의 소프트웨어 구성 블록으로서 간주될 수 있는 클래스 라이브러리(class library)를 제공한다.
런타임 실행 환경(200)은 그렇지 않았으면 커널에 기대할지도 모르는 적어도 부분적인 기능[장치(105, 110, 115)(도 1 참조) 중 특정 장치의 자원 제약에 따라 컴퓨팅 장치 플랫폼에 없거나 있을 수 있음]을 제공할 수 있다. 따라서, 런타임 실행 환경(200)의 적어도 일례는 입/출력(이후부터, "I/O"라고 함) 루틴 관리, 컴파일링, 메모리 관리, 및 서비스 루틴 관리를 구현할 수 있다. 따라서, 런타임 실행 환경(200)은 I/O 컴포넌트(205), 컴파일러(210), 적어도 하나의 메모리 관리 컴포넌트(215), 서비스 루틴 관리 컴포넌트(220) 및 실행 컴포넌트(225)를 포함할 수 있다. 이하에서 더 상세히 기술되는 이들 컴포넌트는 예로서 제공된 것이고, 어느 특정 구현의 런타임 실행 환경(200)으로 제한하려는 것이 아니며, 이와 같이 추론해서도 안된다. 따라서, 이들 컴포넌트는 런타임 실행 환경(200)의 예들에서 그 컴포넌트들의 여러가지 조합 및 구성으로 구현될 수 있다.
런타임 실행 환경(200)의 I/O 컴포넌트(205)는 컴퓨팅 장치 플랫폼과 연관된 물리적 자원(예를 들어, 프로세서 및 주변 장치) 및 논리적 자원(예를 들어, 드라이버 또는 특정의 방식으로 분할되어 있는 물리적 자원)에의 동기 또는 비동기 액세스 중 적어도 하나를 제공할 수 있다. 보다 상세하게는, I/O 컴포넌트(205)는 런타임 실행 환경(200)에 안정된 시스템 처리량(system throughput) 및 I/O 요청을 하는 애플리케이션, 프로그램, 함수 또는 기타 프로그램가능하고 실행가능한 코드 모음의 더욱 유연한 수행을 제공할 수 있다.
컴파일러(210)는 컴파일된 IL을 런타임 실행 환경(200)에서 실행하기 위한 네이티브 기계 명령어(native machine instruction)로 인터프리트할 수 있는 런타임 실행 환경(200) 내의 컴포넌트를 참조할 수 있다. 게다가, 정성적 주석 첨부된 코드(qualitatively annotated code)(120)를 개발하고 이를 이용하는 기술들의 적어도 하나의 대안적인 구현에 따르면, 컴파일러(210)는, 프로파일링(profiling)/기록을 위해, 다양한 목적으로, 애플리케이션, 프로그램, 함수, 또는 기타 프로그램가능하고 실행가능한 코드 모음과 연관된 코드 모듈의 거동을 동적으로 계측할 수 있다. 코드 모듈은 런타임 실행 환경(200)으로 로드되거나 로드되지 않을 수 있다. 코드 모듈이 런타임 실행 환경(200)으로 로드되는 경우, 프로파일링은 각자의 코드 모듈과 런타임 실행 환경(200)의 하나 이상의 컴포넌트 간의 상호작용을 기록 하거나 다른 방식으로 추적하는 것을 포함할 수 있다. 각자의 코드 모듈과 런타임 실행 환경(200)의 특정 컴포넌트 간의 이러한 상호작용은 데이터, 파라미터 및 상태를 수신하는 것 및 전송하는 것을 포함한다. 프로파일링은 코드 모듈의 실행가능 부분을 건드리거나 그에 영향을 주지 않고 수행될 수 있으며, 컴파일 시에, 초기 런타임 시에, 또는 실행 경로(execution path)의 실행가능 부분의 실행과 관련하여 그 후 언제라도 수행될 수 있다.
로더(loader)(215)는 필요로 하는 어셈블리(assembly)를 찾아내어 판독하기 위해 호출될 수 있는 어셈블리 관리자(assembly manager)를 말하는 것일 수 있다. 로더(325)는 실행 환경(200)에 배치될 수 있지만, 비관리 실행 환경(즉, OS)의 적어도 한 구현은 그 안에 로더(325)를 포함하고 있을 수 있다. 로더(215)는, 런타임 실행 환경(200)으로 로드하기 위해, 디플로이 또는 설치 동안에 사전 컴파일된 IL을 획득할 수 있다. 따라서, 런타임 실행 환경(200)의 적어도 하나의 대안의 구현에 따르면, 로더(215)는 사실상 사전 컴파일된 IL의 런타임 실행 환경(200)에의 진입점으로서 역할할 수 있다.
메모리 관리 컴포넌트(220)는 가비지 컬렉션(garbage collection)을 구현하는 "가비지 컬렉터(garbage collector)"라고 할 수 있다. 가비지 컬렉션은, 메모리 힙(memory heap)의 스위프(sweep) 또는 스캔(scan) 시에, 객체가 더 이상 애플리케이션, 프로그램, 함수 또는 기타 코드 모음에 의해 사용되지 않는 것으로 판정되는 경우, 객체를 자동적으로 해방(즉, 할당 해제(deallocate))시키는 관리 코드 실행 환경(managed code execution environment)의 강인한 특징으로서 간주될 수 있다. 메모리 관리 컴포넌트(220)에 의해 구현되는 추가의 기능들로는, 컴퓨팅 장치 플랫폼에서 실행 중인 태스크들 간에 유한한 휘발성 RAM(즉, 메모리 힙) 저장 장치의 하나 이상의 연속적인 블록들 또는 일련의 연속적인 메모리 블록들을 관리하는 것, 컴퓨팅 장치 플랫폼에서 실행 중인 적어도 하나의 애플리케이션, 프로그램, 함수 또는 기타 프로그램가능하고 실행가능한 코드 모음에 메모리를 할당하는 것, 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음 중 적어도 하나에 의해 요청될 때 메모리의 적어도 일부를 해방시키는 것, 및 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음 중 임의의 것이 다른 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음 중 임의의 것에 할당된 메모리 공간에 무단으로 액세스하지 못하게 하는 것이 있을 수 있다.
서비스 루틴 관리자(service routine manager)(225)가 컴퓨팅 장치 플랫폼과 연관된 물리적 및 논리적 자원에 서비스 기능을 제공하기 위해 애플리케이션 지원 계층(application support layer)의 적어도 일부분으로서 포함될 수 있다. 정성적 주석 첨부된 코드(120)를 개발하고 및/또는 이를 이용하는 예시적인 기술들(예를 들어, 도구, 방법 및 시스템)이 서비스 루틴 관리자(225)에 의해 관리될 수 있다. 즉, 이러한 기술들은 이러한 기술들의 다양한 대안의 구현에 따라 컴파일러(210)(상기함), 서비스 루틴 관리자(225), 또는 런타임 실행 환경(200)의 어떤 다른 컴포넌트에 의해 단독으로 또는 서로 조합하여 구현될 수 있다. 서비스 루틴 관리자(225)의 이러한 참여는, 컴파일 시에, 초기 런타임 시에, 또는 코드 모듈의 실행가능 부분의 실행과 관련하여 그 후에 언제라도 코드 모듈의 실행가능 부분을 건드리거나 그에 영향을 주지 않고 행해질 수 있다.
실행 컴포넌트(230)는 컴퓨팅 장치 플랫폼의 관리 코드의 실행을 가능하게 해줄 수 있다. 보다 상세하게는, 정성적 주석 첨부된 코드(120)를 개발하고 및/또는 이를 이용하는 기술들의 구현과 관련하여, 실행 컴포넌트(230)는 컴파일 시에, 초기 런타임 시에, 또는 코드 모듈의 실행가능 부분의 실행 동안의 그 후 언제라도 하나 이상의 코드 모듈에 주석을 첨부하는 및/또는 그에 대한 주석을 해석하는 도구, 시스템 및 프로세스 중 하나 이상을 구현할 수 있는 런타임 실행 환경(200) 내의 예시적인 컴포넌트로서 역할할 수 있다.
도 3은 정성적 주석 첨부된 코드(120)(도 1 참조)와 연관된 하나 이상의 예시적인 기술들을 구현하는 예시적인 데이터 흐름(300)을 나타낸 것이다. 보다 상세하게는, 정성적 주석 첨부된 코드(120)는 특정의 코드 모듈의 적어도 하나의 정성적 성능 특성과 밀접한 관계가 있는 전형적인 퍼소나 또는 분류를 할당받은 코드를 말한다. 이러한 정성적 성능 특성은 특정의 코드 모듈의 기능적 의도(functional intent)를 포함할 수 있다. "기능적 의도"를 표시함으로써, 퍼소나 또는 분류는 특정의 코드 모듈의 정확한 기능을 기술하기 보다는 그 코드 모듈을 사용하기 적합한 하나 이상의 상황을 기술할 수 있다. 이와 상관없이, 이러한 성능 특성에 대한 언급은 단지 비제한적인 예로서 제공된다. 정성적 보안 특성(qualitative security characteristics)도 퍼소나 또는 분류가 각자의 코드 모듈에 할당되는 적어도 부분적인 기초로서 역할할 수 있다.
게다가, 정성적 주석 첨부된 코드(120)는 런타임 실행 환경(200)에 의해 컴 파일되거나 그를 위해 사전-컴파일되어 있는 관리 코드(managed code)일 수 있다. 이와 상관없이, 각자의 코드 모듈에 대한 잠재적인 성능-관련 고장이, 명확하게 예상되지는 않더라도, 예견될 수는 있으며, 따라서 바람직한 정도까지 회피될 수 있다.
그를 위해, 정성적 주석 첨부된 코드(120)는 강인한 일반화된 안내를 제공할 수 있다. 즉, 정량적 안내(quantitative guidance)가 아닌 정성적 안내(qualitative guidance)를 제공하여 각자의 코드 모듈에 대응하는 엄격한 규칙들이 코드에 대한 임의의 교정과 함께 수정되어야만 하도록 함으로써, 정성적 주석 첨부된 코드(120)에 대응하는 퍼소나 또는 분류가 코드에 대한 변경을 허용할 수 있으며 그에 따라 금지적 안내(prohibitive guidance)보다는 규범적 안내(prescriptive guidance)로서 역할할 수 있다.
게다가, 각자의 정성적 주석 첨부된 코드(120) 모듈에 할당된 각자의 퍼소나 또는 분류에 의해 제공되는 일반적인 안내는 코드(120)에 의해 호출될 수 있는 양호한 메서드, 코드(120)가 유발할 수 있는 거동, 코드(120)가 가질 수 있는 의존성을 나타낼 수 있거나, 또는 심지어 예를 들어 순환 복잡도(cyclomatic complexity) 등의 복잡도 파라미터(complexity parameter)에 기초한 소정의 복잡도(degree of complexity)를 나타낼 수 있다. 물론, 이러한 안내는 정성적 주석 첨부된 코드(120)에 할당된 퍼소나 또는 분류에 의해 영향을 받을 수 있는 광범위한 프로그래밍 인자들을 나타내기 위한 예로서만 제공된다.
이와 상관없이, 이하의 설명에서는, 다양한 동작들이 코드 주석 첨부 도 구(code annotating tool)(315)와 연관된 컴포넌트들에 의해 수행되는 것으로 기술된다. 이들 컴포넌트 중 임의의 특정의 컴포넌트와 관련하여 기술된 동작들이 컴포넌트 자체에 의해, 그 도구와 연관된 다른 컴포넌트들과 함께, 또는 런타임 실행 환경(200)(도 2 참조)의 하나 이상의 컴포넌트와 협력하여 특정의 컴포넌트에 의해 수행될 수 있다. 게다가, 코드 주석 첨부 도구(315)의 각각의 컴포넌트의 동작이 프로세서 또는 프로세서들에 의해 실행될 수 있고 하드웨어, 펌웨어 또는 소프트웨어로서 단독으로 또는 다양한 조합으로 구현될 수 있다.
코드 주석 첨부 도구(315)의 예시적인 구현이 오프라인 방식으로, 런타임 실행 환경(200)의 컴포넌트들 중 어느 것과도 분리되어 구현될 수 있다. 그렇지만, 코드 주석 첨부 도구(315)의 적어도 한 구현이 컴파일러(210), 서비스 루틴 관리자(220), 또는 런타임 실행 환경(200)의 어떤 다른 컴포넌트(단독으로 또는 서로 조합하여)의 임의의 일부분에 포함되어 있을 수 있다. 이러한 구현에서, 코드 주석 첨부 도구(315)는 실행 컴포넌트(225)에 의해 실행 또는 처리될 수 있다.
모듈(305)은, 예를 들어, 런타임 실행 환경(200) 내의 실행 컴포넌트(230)에 따라 실행가능한 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음에 대응하는 하나 이상의 실행가능 명령어 모듈을 말하는 것일 수 있다. 보다 상세하게는, 모듈(305)은 메서드, 클래스, DLL(dynamic link library), 프레임워크, 기타 등등의 개체를 말하는 것일 수 있다.
코드(310)는 모듈(305)과 연관되어 있는 애플리케이션 프로그래밍 인터페이스(이후부터 "API"라고 함)를 말하는 것일 수 있다. 보다 상세하게는, API(310) 는, 런타임 실행 환경(200) 또는 심지어 운영 체제에 의한 절차의 수행을 지시하기 위해, 클래스에 의해 노출되고 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음에 의해 사용되는 하나 이상의 메서드 또는 루틴으로 간주될 수 있다.
코드 주석 첨부 도구(315)는 적절한 퍼소나 또는 분류에 따라 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음에 대응하는 코드 모듈에 주석을 첨부하는 것을 용이하게 해줄 수 있는, 각자의 모듈의 기능적 의도 또는 할당된 퍼소나 또는 분류 중 적어도 하나에 따라 이러한 코드 모듈의 동작을 모니터링, 기록 및/또는 프로파일링하는 것을 용이하게 해줄 수 있는, 또한 코드 모듈의 의도 또는 코드 모듈에 할당된 퍼소나 또는 분류 중 적어도 하나에 따라 코드 모듈의 사용법에 관한 안내를 제공할 수 있는 다중-기능 도구를 말하는 것일 수 있다.
코드 주석 첨부 도구(315) 내에 배치되거나 다른 방식으로 그와 기능적으로 연관되어 있을 수 있는 분석기(320)는 코드 모듈의 기능적 의도(이에 한정되지 않음)를 비롯한 특성에 기초하여 적절한 주석 또는 분류를 코드 모듈과 연관시킬 수 있는 컴포넌트로서 간주될 수 있다. 분석기는 또한 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음에 대응하는 코드 모듈과 연관된 주석을 판독할 수 있으며, 또한 단독으로 또는 코드 주석 첨부 도구(315)의 다른 컴포넌트와 함께, 이러한 주석의 내용을 사용자에게 전달할 수 있다.
모듈(325)은, 예를 들어, 런타임 실행 환경(200) 내의 실행 컴포넌트(230)에 따라 실행가능한 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음에 대응하는 실행가능 명령어 모듈을 말하는 것일 수 있다. 보다 상세하게는, 모듈(325)은 코 드(310) 및 연관된 주석(330)을 포함하는 메서드, 클래스, DLL(dynamic link library), 프레임워크, 기타 등등의 개체를 말하는 것일 수 있다.
주석(330)은 코드(310)와 연관되어 있는 텍스트 파일을 말하는 것일 수 있다. 상세하게는, 주석(330)은 코드 주석 첨부 도구(315)에 의해 코드(310)에 할당된 퍼소나 또는 분류를 열거하고 있는 텍스트 파일(예를 들어, XML)일 수 있거나, 주석(300)은, 예를 들어, 코드(310)의 기능적 특성 또는 의도를 명확히 나타내고 있는 텍스트 파일일 수 있다. 주석(330)은 코드(310)와 연관되어 있고, 따라서 런타임 실행 환경(200) 내에 받아들여져 그에 의해 컴파일되어 모듈(325)의 일부로서 코드(310)에 첨부될 수 있다. 다른 대안으로서, 주석(330)은, 비록 코드(310)와 연관되어 있지만, 사전 컴파일되고 그에 따라 코드(310)와 별개인 런타임 실행 환경(200) 내에 받아들여질 수 있다. 예를 들어, 주석(330)은 실행가능 코드(200)의 개발자 또는 운영자로부터 네트워크(125)(도 1 참조)를 통해 온라인으로 런타임 실행 환경(200) 내에 받아들여질 수 있거나, 주석(330)은 상기한 개발자 또는 운영자 중 어느 하나로부터 오프라인 방식으로(예를 들어, 운송가능한 컴퓨터 판독가능 매체를 통해) 런타임 실행 환경(200) 내에 받아들여질 수 있다.
상기한 바와 같이, 주석(330)은 코드(310)에 할당된 퍼소나 또는 분류를 열거할 수 있다. 이러한 퍼소나 또는 분류는 코드(310)(예를 들어, API, 메서드 또는 루틴)의 기능적 의도를 나타내는 데이터를 제공할 수 있다. 즉, 이 데이터는 코드(310)의 사용이 적절할 수 있는 하나 이상의 상황을 나타낼 수 있다. 게다가, 우수한 코드 발생 또는 뛰어난 코드 프로파일링을 위해 고객에게 코드(310)의 의도 된 사용을 정성적으로 알려주기 위해, 분석기(320)에 의해 연관지워진 퍼소나 또는 분류는 통상적으로 분석된 특성과 관련하여 서로 관련이 있으며, 퍼소나 또는 분류는 통상적으로 믿을만한 안내를 제공하지만 예외 및/또는 창의성을 허용하는 근사로서 간주된다.
코드(310)에 할당된 퍼소나 또는 분류의 예로는, 단지 예시적인 예로서, 내부-루프 코드(inner-loop code), 처리량 코드(throughput code), 상호작용적 코드(interactive code), 및 시동 코드(startup code)가 있을 수 있다. 이러한 퍼소나의 용어는 단지 예로서 제공된 것이다. 퍼소나 또는 분류는 다양한 이름 중 어느 것이라도 할당받을 수 있지만, 각자의 퍼소나 또는 분류에 대한 코드의 기능적 의도 또는 기타 기능적 특성을 나타내는 이름을 할당하는 것이 더 나을 수 있다.
내부-루프 코드 퍼소나는 코드(310)가 더 큰 알고리즘의 일부인 클라이언트 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음에 의해 더 큰 루프에서 호출될 수 있다는 것을 나타낼 수 있다. 보다 상세하게는, 내부-루프 코드(310)는 대응하는 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음에 대해 "가장 내부에 있는" 코드로서 간주될 수 있다. 이의 예로는 비교 함수, 해싱 함수(hashing function), 하위-레벨 포맷팅 함수(low-level formatting function), 기타 등등이 있다. 이러한 코드의 경우, 메모리 할당이 방해받을 수 있다. 내부-루프 코드(330)와 연관된 주석(330)은 이러한 코드가 이하에 기술하는 예시적인 코드 퍼소나/분류(예를 들어, 처리량, 상호작용 및 시동) 중 임의의 것을 할당받은 코드에 의해 호출될 수 있음을 알려줄 수 있다.
처리량 코드 퍼소나(throughput code persona)는 코드(310)가 웹 페이지 등에서 배치 프로세스(batch process) 또는 서비스 프로세스(service process)에서 사용될 수 있다는 것을 나타낼 수 있다. 보다 상세하게는, 처리량 코드(throughput code)(310)는 임시 객체가 생성될 수 있고 따라서 어떤 메모리 할당히 허용될 수 있는 코드로서 간주될 수 있다. 이러한 코드는 통상적으로 웹 페이지 또는 비지니스-로직에 의해 구현될 수 있으며, 이러한 코드의 의도는 자원(예를 들어, 메모리)의 비용에 상관없이 실행되는 것이다. 처리량 코드에 대한 안내의 예는 처리량 코드가 기능적으로 내부-루프 코드와 호환되지 않으며 따라서 내부-루프 코드에 의해 호출될 수 없다는 것이다. 따라서, 처리량 코드(310)와 연관된 주석(330)은 내부-루프 퍼소나 또는 분류를 할당받은 코드를 호출하지 말도록 권고하거나 심지어 그를 금지시킬 수 있다.
상호작용 코드 퍼소나(interactive code persona)는 코드(310)가 상호작용 이벤트에 의해 구동되는 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음의 일부에 의해 사용될 수 있음을 나타낼 수 있다. 보다 상세하게는, 상호작용 코드(310)는 모드가 갑자기 변할 수 있는 코드로서 간주될 수 있으며, 이러한 코드의 의도는 그의 실행 동안에 가능한 한 적은 자원(예를 들어, 메모리)을 사용하는 것이다. 상호작용 코드에 대한 안내의 예는 상호작용 코드가 내부-루프 코드를 호출할 수 있다는 것이다. 따라서, 상호작용 코드(310)와 연관된 주석(330)은 내부-루프 퍼소나 또는 분류를 할당받은 코드를 호출하는 것을 옹호할 수 있다. 또다른 예로는 상호작용 코드가 처리량 코드를 호출하는 것이 있을 수 있지만, 이것은 있음직하지 않은 시나리오인데, 그 이유는 상호작용 코드가 사용되는 자원과 관련하여 절약하도록 의도되어 있고 처리량 코드가 자원의 비용에 상관없이 지속하도록 의도되어 있기 때문이다. 따라서, 상호작용 코드(310)와 연관된 주석(330)도 처리량 코드 퍼소나 또는 분류를 할당받은 코드를 호출하지 못하게 말릴 수 있다.
시동 코드 퍼소나(startup code persona)는 코드(310)가 대응하는 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음에 대한 시동 경로(startup path)에 등장할 수 있음을 나타낼 수 있다. 보다 상세하게는, 시동 코드(310)는 의존성(dependency) 및/또는 입/출력(IO)에 민감한 코드로서 간주될 수 있다. 시동 코드(310)와 연관된 주석은 다른 퍼소나 또는 분류를 할당받은 코드로부터의 호출을 못하게 하거나 거부할 수 있다.
그에 따라, 코드(310)에 대한 호출을 포함하는 애플리케이션, 프로그램, 함수, 또는 기타 프로그램가능/실행가능 코드 모음을 프로그래밍할 때, 주석(330)은 상호작용 안내(interactive guidance), 진단[즉, 프로파일러(profiler)] 안내(diagnostic guidance), 코드 발생 안내(code generating guidance), 코드 유지보수 안내(code maintenance guidance), 및 간섭 안내(inference guidance)(꼭 이에 한정되는 것은 아님)를 포함하는 안내를 프로그래밍 고객에게 제공할 수 있다. 상기한 이들 부류의 안내 전부는, 예를 들어, 코드(310)의 기지의 기능적 의도에 기초하여 분석기(320)에 의해 구현될 수 있다. 이들 예시적인 부류의 안내에 대해 이하에서 기술한다.
상호작용 프로그래밍 안내는 코드(310)와, 다른 퍼소나 또는 분류가 할당된, 예를 들어, API, 메서드 또는 루틴일 수 있거나 그렇지 않을 수 있는 보다 최근에 호출된 코드(310) 구현과의 기능적 호환성의 표시를 제공할 수 있다. 다른 대안으로서, 상호작용 프로그래밍 안내는, 상기 보다 최근에 호출된 코드(310) 구현과 관련하여, 코드(310)에 할당된 퍼소나 또는 분류에 대한 잠재적인 프로그래밍 위반을 경고하는 프로그래밍 규칙을 제공할 수 있다.
진단(즉, 프로파일러) 안내는 코드(310)에 대한 측정된 프로그래밍 이벤트에 관한 보고서 및/또는 코드(310)에 할당된 퍼소나 또는 분류를 제공할 수 있다. 보다 상세하게는, 코드(310)에 관한 프로그래밍 이벤트의 기록 및/또는 코드(310)가 할당된 퍼소나 또는 분류에 기초하여, 진단/프로파일러 안내는 코드(310)의 사용법에 관한 통계적 분석 및/또는 추천을 제공할 수 있다. 이 분석 및/또는 추천은 이전에 추천된 안내와 대조하여 코드(310)에 관한 프로그래밍 이벤트를 측정하는 것도 포함할 수 있다. 프로그래밍 이벤트의 기록은, 예를 들어, 분석기(320)에 의해 발생될 수 있으며, 프로그래밍 이벤트는 코드(310)를 이전에 호출한 함수 및 특정의 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음을 위해 코드(310)를 호출한 횟수를 포함할 수 있지만, 이에 한정되는 것은 아니다.
코드 발생 안내는 컴파일러[예를 들어, 컴파일러(210), 도 2 참조]에 프로그래밍 안내를 제공할 수 있다. 예를 들어, 코드 발생 안내는 코드(310)의 기능적 의도의 유망한 표시를 제공할 수 있으며, 따라서 컴파일러는 컴파일된 코드(310)의 특성을 이용하도록 코드(310)를 컴파일할 수 있다. 보다 상세하게는, 주석(330)에 의해 명확히 언급된 코드 발생 안내는 상호작용 코드(310)의 기능적 의도가 가능한 한 적은 자원을 사용하는 것임을 나타낼 수 있으며, 따라서 컴파일러는 코드(310)에 의해 사용되는 공간을 감소시키기 위해 콤팩트한 방식으로 코드(310)를 컴파일하도록 안내될 수 있다. 다른 대안으로서, 코드 발생 안내는 내부-루프 코드(310)의 기능적 의도가 그에 할당된 메모리를 갖지 않는 것임을 나타낼 수 있으며, 따라서 컴파일러는 속도에 있어서 최적화하는 방식으로 컴파일하도록 안내될 수 있다. 이들 시나리오는 단지 예로서 제공된 것이며, 결코 제한하는 것으로 해석되어서는 안된다.
코드 유지보수 안내는 코드(310)에 할당된 퍼소나 또는 분류에 대한 하나 이상의 이론적 근거(rationale)를 제공하는 프로그래밍 안내를 제공할 수 있다. 이러한 안내는 또한 코드(310)의 적어도 일부분이 변경된 경우에 코드(310)에 할당될 수 있는 퍼소나 또는 분류의 설명을 제공할 수 있다. 따라서, 코드 유지보수 안내는, 부분적으로, 특정의 퍼소나 또는 분류에 할당된 코드로부터 다른 퍼소나 또는 분류에 할당된 코드로의 전환을 안내할 수 있다.
간섭 안내는, 코드 주석 첨부 도구가 정적 분석 도구의 일부로서 이용될 때, 코드(310)에 대한 소급적 주석(retroactive annotation)을 제공할 수 있다. 즉, 이미 컴파일된 애플리케이션, 프로그램, 함수, 또는 기타 프로그램가능/실행가능 코드 모음의 경우, 분석기(320)는 코드(310)에 대한 퍼소나 또는 분류를 소급적으로 할당할 수 있다. 따라서, 코드(310)는 물론 코드(310)를 호출한 함수 및 코드(310)에 의해 호출된 함수의 분석이 고객에게 제공될 수 있다.
도 4는 정성적 주석 첨부된 코드(120)(도 1 참조)의 적어도 하나의 예시적인 구현을 작성하고 이를 이용하는 예시적인 데이터 흐름(400)을 나타낸 것이다. 보다 상세하게는, 예시적인 데이터 흐름(400)이 코드 발생기(code generator) 또는 코드 실행기(code enforcer) 중 어느 하나에 대해 구현될 수 있다.
이하의 설명에서, 다양한 동작들이 런타임 실행 환경(200)(도 2 참조) 또는 코드 주석 첨부 도구(315)(도 3 참조) 중 어느 하나와 연관된 컴포넌트들에 의해 수행되는 것으로 기술될 것이지만, 도 4에서의 참조 번호는 이전의 도면들의 참조 번호와 다를 수 있다. 이들 컴포넌트 중 임의의 특정 컴포넌트와 관련하여 기술되는 동작들이 그 컴포넌트 자체에 의해, 도구와 연관된 다른 컴포넌트들과 함께, 또는 런타임 실행 환경(200)의 하나 이상의 컴포넌트와 협력하여 특정 컴포넌트에 의해 수행될 수 있다. 그에 부가하여, 코드 주석 첨부 도구(315)의 컴포넌트 각각의 동작들이 프로세서 또는 프로세서들에 의해 실행될 수 있고, 하드웨어, 펌웨어 또는 소프트웨어로서 단독으로 또는 다양한 조합으로 구현될 수 있다.
데이터 흐름(400)의 제1 예시적인 구현은 수동 또는 자동 코드 발생기에 관한 것이다.
블록(405)는 API, 메서드, 또는 루틴 등의 코드 모듈에 영향을 줄 수 있는, 취해지거나 취해질 예정인 촉매 작용(catalytic action)을 말하는 것일 수 있다. 이러한 촉매 작용은 코드 모듈이 다른 코드 모듈에 의해 호출되는 것을 포함할 수 있다.
따라서, 데이터 모듈(410)은, 예를 들어, 런타임 실행 환경(200) 내의 실행 컴포넌트(230)에 따라 실행가능한 애플리케이션, 프로그램, 함수, 또는 기타 코드 모음에 대응하는 하나 이상의 실행가능 명령어 모듈을 말하는 것일 수 있다. 보다 상세하게는, 데이터 모듈(410)은 메서드, 클래스, DLL(dynamic link library), 프레임워크, 기타 등등의 개체를 말하는 것일 수 있다.
코드(415)는 데이터 모듈(410)과 연관되어 있는 API, 메서드 또는 루틴을 말하는 것일 수 있다. 보다 상세하게는, 코드(415)는, 런타임 실행 환경(200) 또는 심지어 운영 체제에 의한 절차의 수행을 지시하기 위해, 클래스에 의해 노출되고 애플리케이션, 프로그램, 함수, 또는 기타 프로그램가능하고 실행가능한 코드 모음에 의해 사용될 수 있다.
분석기(435)는 코드 모듈의 기능적 의도(이에 한정되지 않음)를 비롯한 특성에 기초하여 적절한 주석 또는 분류를 코드 모듈과 연관시킬 수 있는 컴포넌트를 말하는 것일 수 있다. 분석기(425)는 주석 첨부된 코드를 개발하고 및/또는 이를 이용하는 더 포괄적인 도구와 연관될 수 있거나, 다른 대안으로서, 심지어 런타임 실행 환경(200)의 컴포넌트(예를 들어, 컴파일러)로서 구현될 수 있다.
이와 상관없이, 데이터 모듈(410)에 포함된 또는 데이터 모듈(410)과 별개인 코드(415)를 수신하면, 분석기(435)는 코드(415)의 기능적 의도 또는 다른 기능적 특성을 판정하여 그에 따라 퍼소나 또는 분류를 코드(415)와 연관시키는 미리 정해진 알고리즘을 구현할 수 있다. 코드(415)의 퍼소나 또는 분류를 그의 기능적 의도에 기초하는 것은 단지 예로서 기술된 것이다.
주석 첨부된 안내(440)는 코드(310)와 연관된 텍스트 파일을 말하는 것일 수 있다. 상세하게는, 주석(440)은 코드 주석 첨부 도구(315)에 의해 코드(415)에 할당된 퍼소나 또는 분류를 열거하는 텍스트 파일(예를 들어, XML)일 수 있다. 다른 대안으로서, 주석 첨부된 안내(440)는, 예를 들어, 코드(415)와 연관된 규칙 또는 안내를 명확히 나타내는 대화 상자 또는 드롭다운 메뉴의 형태로 사용자 인터페이스의 일부로서 고객에게 제공될 수 있으며, 컬러-코딩된 폰트로 되어 있을 수 있다(예를 들어, 허용(acceptable)은 녹색, 주의(caution)는 황색, 및 금지(prohibited)는 적색).
데이터 흐름(400)의 제2 예시적인 구현도 수동 또는 자동 코드 발생기에 관한 것이다.
블록(405)는 API, 메서드 또는 루틴 등의 코드 모듈에 영향을 줄 수 있는, 취해지거나 취해질 예정인 촉매 작용(catalytic action)을 말하는 것일 수 있다. 이러한 촉매 작용은 코드 모듈이 컴파일되는 것 또는 컴파일되기 위해 전송되는 것을 포함할 수 있다.
데이터 모듈(420)은, 데이터 모듈(410)과 유사하게, 메서드, 클래스, DLL(dynamic link library), 프레임워크, 기타 등등의 하나 이상의 실행가능 명령어 모듈을 말하는 것일 수 있다.
코드(425)는, 코드(415)와 유사하게, 데이터 모듈(420)과 연관되어 있는 API, 메서드 또는 루틴을 말하는 것일 수 있다.
주석(430)은 코드(425)와 연관되어 있는 텍스트 파일을 말하는 것일 수 있으며, 코드(425)의 기능적 의도 또는 다른 지정된 기능적 특성에 기초하여 코드(425) 에 할당된 퍼소나 또는 분류를 열거하는, 예를 들어, 텍스트 파일(예를 들어, XML)의 형태로 되어 있을 수 있다. 보다 상세하게는, 이 제2 예시적인 데이터 흐름(400)에 따르면, 코드(425)는 본 명세서에 기술된 바와 같이 수동 프로세스 또는 자동화된 프로세스 중 어느 하나에 의해 이미 주석 첨부되어 있다.
분석기(435)는 코드(425)와 연관된 주석(430)을 판독할 수 있는 컴포넌트를 말하는 것일 수 있다. 따라서, 런타임 실행 환경(200)의 일부로서, 코드(425)가 주석(430)에 명확히 나타내어진 기능적 의도와 기능적으로 호환되게 컴파일될 수 있도록, 분석기(435)는 주석 첨부된 안내(440)를 컴파일러(210)(도 2 참조)에 제공할 수 있다.
데이터 흐름(400)의 제3 예시적인 구현은 수동 또는 자동 코드 프로파일러 또는 진단 도구에 관한 것이다.
블록(405)는 API, 메서드 또는 루틴 등의 코드 모듈에 영향을 줄 수 있는, 취해지거나 취해질 예정인 촉매 작용을 말하는 것일 수 있다. 코드 프로파일러와 관련하여, 이러한 촉매 작용은 이전에 컴파일된 코드가 분석 또는 임의의 다른 형태의 검사 또는 조사를 위해 프로파일링 도구로 전송되는 것을 포함할 수 있다.
데이터 모듈(410)은 메서드, 클래스, DLL(dynamic link library), 프레임워크, 기타 등등의 하나 이상의 실행가능 명령어 모듈을 말하는 것일 수 있다.
코드(415)는 데이터 모듈(410)과 연관되어 있는 API, 메서드, 또는 루틴을 말하는 것일 수 있다.
분석기(435)는 이미 컴파일된 코드(425)를 판독할 수 있고 또 확립된 기준에 기초하여 코드(415)의 기능적 의도 또는 다른 지정된 기능적 특성을 해독할 수 있는 컴포넌트를 말하는 것일 수 있다. 따라서, 분석기(435)는 또한 적절한 퍼소나 또는 분류를 코드(415)와 연관시킬 수 있다.
주석 첨부된 안내(440)는 분석기(435)에 의해 코드(415)에 할당된 퍼소나 또는 분류를 명확히 나타내는 코드(415)와 연관된 텍스트 파일을 말하는 것일 수 있다. 그에 부가하여, 주석 첨부된 안내(440)는 특정의 퍼소나 또는 분류에 대응하는 규칙 또는 다른 형태의 프로그래밍 안내를 명확히 나타낼 수 있다. 주석 첨부된 안내(440)가, 예를 들어, 코드(415)와 연관된 규칙 또는 안내를 명확히 나타내는 대화 상자 또는 드롭다운 메뉴의 형태로 사용자 인터페이스의 일부로서 고객에게 제공될 수 있으며, 컬러-코딩된 폰트로 되어 있을 수 있다(예를 들어, 허용(acceptable)은 녹색, 주의(caution)는 황색, 및 금지(prohibited)는 적색).
도 1 내지 도 4에 관한 상기 설명에 의해, 관리 실행 환경(managed execution environment) 또는 비관리 실행 환경(unmanaged execution environment)에서 정성적 프로그래밍 안내를 제공하기 위해 퍼소나 또는 분류가 하나 이상의 코드 모듈에 할당될 수 있다. 그렇지만, 본 명세서에 기술된 예시적인 구현이 도 1의 환경, 도 2의 컴포넌트, 도 3에서와 같은 실행 경로 또는 도 4의 프로세스에만 한정되는 것은 아니다. 정성적 주석 첨부된 코드(120)(도 1 참조)와 연관된 기술들(예를 들어, 도구, 방법 및 시스템)이 도 2 내지 도 4를 참조하여 기술된 컴포넌트들의 다양한 조합으로 구현될 수 있다.
게다가, 상기한 예 및 구현 중 임의의 것에 대한 컴퓨터 환경은, 예를 들어, 하나 이상의 프로세서 또는 처리 장치, 시스템 메모리, 및 다양한 시스템 컴포넌트들을 연결시키는 시스템 버스를 갖는 컴퓨팅 장치를 포함할 수 있다.
이 컴퓨팅 장치는 휘발성 및 비휘발성 매체, 이동식 및 비이동식 매체 둘다를 포함한 다양한 컴퓨터 판독가능 매체를 포함할 수 있다. 시스템 메모리는 랜덤 액세스 메모리(RAM) 등의 휘발성 메모리 및/또는 판독 전용 메모리(ROM) 또는 플래쉬 RAM 등의 비휘발성 메모리 형태의 컴퓨터 판독가능 매체를 포함할 수 있다. 자기 카세트 또는 기타 자기 저장 장치, 플래쉬 메모리 카드, CD-ROM, DVD(digital versatile disk), 또는 기타 광 저장 장치, 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 전기적 소거가능 프로그램가능 판독 전용 메모리(EEPROM), 기타 등등의 컴퓨터에 의해 액세스될 수 있는 데이터를 저장할 수 있는 다른 유형의 컴퓨터 판독가능 매체도 역시 예시적인 컴퓨팅 시스템 및 환경을 구현하는 데 이용될 수 있다는 것을 잘 알 것이다.
본 명세서 전반에 걸쳐 "일례", "대안의 예", "적어도 하나의 예", "구현" 또는 "예시적인 구현"이라고 말하는 것은 특정의 기술된 특징, 구조 또는 특성이 본 발명의 적어도 하나의 구현에 포함되어 있다는 것을 의미한다. 따라서, 이러한 구문의 사용은 2개 이상의 구현을 말하는 것일 수 있다. 게다가, 기술된 특징, 구조 또는 특성은 하나 이상의 구현에서 임의의 적당한 방식으로 결합될 수 있다.
그렇지만, 당업자라면 코드 모듈 초기화(code module initialization)가 구체적 상세들 중 하나 이상 없이 또는 다른 방법, 자원, 재료, 기타 등등으로 구현 될 수 있다는 것을 잘 알 것이다. 다른 예에서, 단지 본 발명의 측면들을 모호하게 하는 것을 피하기 위해 공지의 구조, 자원 또는 동작은 상세히 도시되거나 기술되지 않았다.
코드 모듈 초기화의 예시적인 구현 및 응용이 예시되고 기술되어 있지만, 본 발명이 상기한 정확한 구성 및 자원에 한정되지 않는다는 것을 잘 알 것이다. 이상에 기술하고 또 이하의 청구 범위에 청구된 본 발명의 범위를 벗어나지 않고 본 명세서에 개시된 본 발명의 방법 및 시스템의 구성, 동작 및 상세에 당업자에게는 명백한 다양한 수정, 변경 및 변형이 행해질 수 있다.

Claims (20)

  1. 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체로서,
    상기 데이터 구조는,
    애플리케이션 프로그래밍 인터페이스(API), 및
    상기 API의 정성적 속성(qualitative attribute)에 기초한 프로그래밍 안내를 규정(prescribe)하는 주석(annotation)을 포함하는 것인, 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체.
  2. 제1항에 있어서, 상기 API는 사전 컴파일되어 있는 것인, 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체.
  3. 제1항에 있어서, 상기 API는 아직 컴파일되어 있지 않은 것인, 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체.
  4. 제1항에 있어서, 상기 프로그래밍 안내는 상기 API를 사용하기 위한 적어도 하나의 규칙을 나타내는 것인, 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체.
  5. 제1항에 있어서, 상기 프로그래밍 안내는 상기 API가 상기 API를 호출하고 있는 메서드와 기능적으로 호환되는지 여부를 나타내는 것인, 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체.
  6. 제1항에 있어서, 상기 프로그래밍 안내는 호출된 메서드가 상기 API와 기능적으로 호환되는지 여부를 나타내는 것인, 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체.
  7. 제1항에 있어서, 상기 프로그래밍 안내는 상기 API에 의해 성공적으로 호출될 수 있는 메서드를 식별해주는 것인, 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체.
  8. 제1항에 있어서, 상기 주석은 상기 API의 분류를 나타내는 것인, 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체.
  9. 제1항에 있어서, 상기 주석은 상기 API의 분류를 나타내고, 또한 다른 API의 기능적으로 호환가능한 분류를 나타내는 것인, 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체.
  10. 제1항에 있어서, 상기 프로그래밍 안내는 상기 API에 영향을 미치는 조치가 취해질 때 나타나는 것인, 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판 독가능 매체.
  11. 제1항에 있어서, 상기 프로그래밍 안내는 상기 API에 영향을 미치는 조치가 취해질 때 대화 상자에 나타나는 것인, 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체.
  12. 제1항에 있어서, 상기 프로그래밍 안내는 상기 API에 영향을 미치는 조치가 취해질 때 드롭다운 메뉴에 나타나는 것인, 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터 판독가능 매체.
  13. 시스템으로서,
    코드를 수신하는 수신기(receiver), 및
    상기 코드의 정성적 특성(qualitative characteristic)에 기초하여 프로그래밍 안내를 제공하는 운영자(administrator)를 포함하는 시스템.
  14. 제13항에 있어서, 상기 수신된 코드가 컴파일되는 것인 시스템.
  15. 제13항에 있어서, 상기 수신된 코드에 정성적으로 주석이 첨부되고,
    또한 상기 운영자가 상기 수신된 코드에 대응하는 상기 주석에 기초하여 상기 안내를 제공하는 것인 시스템.
  16. 제13항에 있어서, 상기 수신된 코드에는 정성적-기반의 퍼소나(qualitatively-based persona)가 주석 첨부되고,
    또한 상기 운영자는 상기 수신된 코드와 기능적으로 호환되는 다른 정성적-기반의 퍼소나를 나타내는 상기 안내를 제공하는 것인 시스템.
  17. 제13항에 있어서, 상기 수신된 코드에는 그 코드의 기능적 의도(functional intent)에 기초한 분류가 주석 첨부되고,
    또한 상기 운영자는 상기 수신된 코드의 상기 분류와 기능적으로 호환되는 코드에 대한 다른 분류를 나타내는 상기 안내를 제공하는 것인 시스템.
  18. 제13항에 있어서, 상기 수신된 코드는 상기 수신된 코드의 보안 특성에 기초한 기능 분류가 주석 첨부되는 것인 시스템.
  19. 제13항에 있어서, 상기 시스템은 프로파일러(profiler)인 것인 시스템.
  20. 제13항에 있어서, 상기 시스템은 진단 도구(diagnostic tool)인 것인 시스템.
KR1020087018255A 2006-01-24 2006-12-26 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터판독가능 매체 및 시스템 KR20080099247A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/275,690 US7987456B2 (en) 2006-01-24 2006-01-24 Qualitatively annotated code
US11/275,690 2006-01-24

Publications (1)

Publication Number Publication Date
KR20080099247A true KR20080099247A (ko) 2008-11-12

Family

ID=38309709

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087018255A KR20080099247A (ko) 2006-01-24 2006-12-26 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터판독가능 매체 및 시스템

Country Status (6)

Country Link
US (1) US7987456B2 (ko)
EP (1) EP1977337A4 (ko)
JP (1) JP5147728B2 (ko)
KR (1) KR20080099247A (ko)
CN (1) CN101361058B (ko)
WO (1) WO2007087062A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150130298A (ko) * 2013-03-14 2015-11-23 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 컨트랙트에 대한 운영 체제 지원 기법

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070250810A1 (en) * 2006-04-20 2007-10-25 Tittizer Abigail A Systems and methods for managing data associated with computer code
US8756564B2 (en) 2009-05-29 2014-06-17 International Business Machines Corporation Techniques for providing environmental impact information associated with code
CA2672337C (en) * 2009-07-15 2017-01-03 Ibm Canada Limited - Ibm Canada Limitee Compiler instrumentation infrastructure to facilitate multiple pass and multiple purpose dynamic analysis
US8370354B2 (en) 2010-06-30 2013-02-05 International Business Machines Corporation Acceleration of legacy to service oriented (L2SOA) architecture renovations
US9141414B2 (en) * 2010-12-21 2015-09-22 Sap Se Preferred compilation
US8875093B2 (en) 2012-06-13 2014-10-28 International Business Machines Corporation Instantiating a coding competition to develop a program module in a networked computing environment
US9086943B2 (en) 2012-06-13 2015-07-21 International Business Machines Corporation Integrated development environment-based repository searching in a networked computing environment
US9378034B2 (en) * 2013-05-16 2016-06-28 Sap Se Dynamic bytecode modification of classes and class hierarchies
CN103645931B (zh) * 2013-12-25 2016-06-22 盛杰 代码转换的方法及装置
US9501274B1 (en) * 2016-01-29 2016-11-22 International Business Machines Corporation Qualitative feedback correlator
US10216620B2 (en) * 2016-07-05 2019-02-26 Synopsys, Inc. Static code testing of active code
CN106992010B (zh) * 2017-06-02 2020-02-21 厦门大学 无直达声条件下的麦克风阵列语音增强装置
US10534585B1 (en) * 2018-10-29 2020-01-14 Sap Se Integrated development environment with deep insights and recommendations
US11785015B2 (en) 2021-02-24 2023-10-10 Bank Of America Corporation Information security system for detecting unauthorized access requests

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6370589B1 (en) 1992-10-15 2002-04-09 Siemens Aktiengesellschaft Process for performing at least one test on at least one of the objects of an object-oriented program capable of running in parallel on a computer
US5467441A (en) 1993-07-21 1995-11-14 Xerox Corporation Method for operating on objects in a first image using an object-based model data structure to produce a second contextual image having added, replaced or deleted objects
JPH07104986A (ja) * 1993-09-30 1995-04-21 Oki Techno Syst Lab:Kk プログラム生成用ツール
AU722149B2 (en) 1996-02-29 2000-07-20 Bt Financial Group Pty Limited Determination of software functionality
US5727950A (en) 1996-05-22 1998-03-17 Netsage Corporation Agent based instruction system and method
CA2201278C (en) * 1997-03-27 2001-02-20 Ibm Canada Limited-Ibm Canada Limitee Hierarchical metadata store for an integrated development environment
US6427234B1 (en) 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6842877B2 (en) 1998-12-18 2005-01-11 Tangis Corporation Contextual responses based on automated learning techniques
IT1313720B1 (it) 1999-09-24 2002-09-17 San Raffaele Centro Fond Apparato di misura di prestazioni visive
US7490292B2 (en) * 1999-12-17 2009-02-10 International Business Machines Corporation Web-based instruction
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
US20050091576A1 (en) 2003-10-24 2005-04-28 Microsoft Corporation Programming interface for a computer platform
EP1292886A1 (en) * 2000-04-21 2003-03-19 Togethersoft Corporation Methods and systems for supporting and deploying distributed computing components
US6721921B1 (en) 2000-07-26 2004-04-13 Itm Associates Method and system for annotating documents using an independent annotation repository
US7095979B2 (en) 2001-04-20 2006-08-22 Educational Testing Service Method of evaluation fit of raw data to model data
US6918107B2 (en) 2001-07-02 2005-07-12 Bea Systems, Inc. Programming language extensions for processing data representation language objects and related applications
US7356803B2 (en) 2001-07-02 2008-04-08 Bea Systems, Inc. Annotation based development platform for asynchronous web services
US7437710B2 (en) 2001-07-02 2008-10-14 Bea Systems, Inc. Annotation based development platform for stateful web services
US20030225719A1 (en) 2002-05-31 2003-12-04 Lucent Technologies, Inc. Methods and apparatus for fast and robust model training for object classification
US7039898B2 (en) 2002-07-12 2006-05-02 Netspective Communications, Llc Computer system for performing reusable software application development from a set of declarative executable specifications
WO2004008348A1 (en) * 2002-07-16 2004-01-22 Horn Bruce L Computer system for automatic organization, indexing and viewing of information from multiple sources
US7707564B2 (en) * 2003-02-26 2010-04-27 Bea Systems, Inc. Systems and methods for creating network-based software services using source code annotations
US20040187140A1 (en) * 2003-03-21 2004-09-23 Werner Aigner Application framework
US20040220792A1 (en) 2003-04-30 2004-11-04 Gallanis Peter Thomas Performance modeling for information systems
US7519577B2 (en) 2003-06-23 2009-04-14 Microsoft Corporation Query intermediate language method and system
US7219330B2 (en) * 2003-06-26 2007-05-15 Microsoft Corporation Extensible metadata
US20050081189A1 (en) 2003-10-14 2005-04-14 Sophia Krasikov Aggregation of document elements into runtime code
WO2005055103A1 (en) 2003-12-03 2005-06-16 Corect Limited Control of processes
US8291375B2 (en) * 2004-03-29 2012-10-16 Sybase, Inc. Attribute-based component programming system and methodology for object-oriented languages
US7343379B2 (en) * 2004-05-21 2008-03-11 Bea Systems, Inc. System and method for controls
US7975256B2 (en) 2004-06-30 2011-07-05 International Business Machines Corporation Optimizing application performance through data mining
US7562342B2 (en) * 2004-12-02 2009-07-14 International Business Machines Corporation Method and apparatus for incrementally processing program annotations

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150130298A (ko) * 2013-03-14 2015-11-23 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 컨트랙트에 대한 운영 체제 지원 기법

Also Published As

Publication number Publication date
EP1977337A2 (en) 2008-10-08
JP5147728B2 (ja) 2013-02-20
CN101361058A (zh) 2009-02-04
US7987456B2 (en) 2011-07-26
WO2007087062A3 (en) 2007-10-04
EP1977337A4 (en) 2009-06-24
US20070180455A1 (en) 2007-08-02
JP2009524856A (ja) 2009-07-02
WO2007087062A2 (en) 2007-08-02
CN101361058B (zh) 2013-09-11

Similar Documents

Publication Publication Date Title
KR20080099247A (ko) 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터판독가능 매체 및 시스템
US7730464B2 (en) Code compilation management service
JP5139987B2 (ja) 拡張可能メタデータ
US7441094B2 (en) Memory management configuration
EP2386953B1 (en) Systems and methods for generating reusable test components out of remote application programming interface
US11176267B2 (en) Fine-grained user control over usages of sensitive system resources having private data with applications in privacy enforcement
US20210173665A1 (en) Bootstrapping Profile-Guided Compilation and Verification
EP3084598B1 (en) Execution guards in dynamic programming
US8615743B2 (en) Adaptive compiled code
US8713524B2 (en) Memory management configuration
Panigrahi et al. An approach to prioritize the regression test cases of object-oriented programs
US20070180433A1 (en) Method to enable accurate application packaging and deployment with optimized disk space usage
EP1902379B1 (en) Node-to-node communication pipelines
US20070168742A1 (en) Isolating code modules
Bogdanas Dperm: Assisting the migration of android apps to runtime permissions
US20060101407A1 (en) Delegate registration in a managed code execution environment
US7673051B2 (en) Resource usage conflict identifier
CN112835788B (zh) 一种评估Linux应用程序与操作系统兼容性的方法
US20060288336A1 (en) Module initialization

Legal Events

Date Code Title Description
A201 Request for examination
SUBM Surrender of laid-open application requested