EP3740863A1 - Code suggestion based on machine learning - Google Patents

Code suggestion based on machine learning

Info

Publication number
EP3740863A1
EP3740863A1 EP19702999.4A EP19702999A EP3740863A1 EP 3740863 A1 EP3740863 A1 EP 3740863A1 EP 19702999 A EP19702999 A EP 19702999A EP 3740863 A1 EP3740863 A1 EP 3740863A1
Authority
EP
European Patent Office
Prior art keywords
method invocation
invocation
source code
model
class
Prior art date
Legal status (The legal status 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 status listed.)
Pending
Application number
EP19702999.4A
Other languages
German (de)
French (fr)
Inventor
Jorge BANUELOS
Shengyu Fu
Roshanak Zilouchian MOGHADDAM
Neelakantan Sundaresan
Siyu Yang
Ying Zhao
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of EP3740863A1 publication Critical patent/EP3740863A1/en
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N7/00Computing arrangements based on specific mathematical models
    • G06N7/01Probabilistic graphical models, e.g. probabilistic networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/02Knowledge representation; Symbolic representation

Definitions

  • Software development environments are often used to aid software developers (i.e., users, programmers, etc.) to develop program code.
  • the software development environment may include a source code editor and other tools that the developers utilize to write and test their programs.
  • Some software development environments provide assistance for the developer to write code by automatically presenting a list of possible candidates based on one or more characters (e.g., letters, symbols, etc.) that a developer has typed into a source code editor.
  • a popup menu may appear with several suggested code elements, phrases, or entities that the developer may utilize. This assistance is beneficial since it speeds up the development time and reduces common errors, such as typos.
  • the automatic code completion feature may be problematic when there is a large list of candidates which may not be relevant and/or which may be too lengthy for a developer to browse through to find the right element.
  • a code completion tool utilizes sequential machine learning models to predict more accurately those methods more likely to complete a method invocation.
  • the machine learning models are trained on usage patterns found in commonly-used source code programs. The usage patterns are detected from the characteristics of the context in which a method invocation is used in a program. These characteristics are extracted from data structures representing the syntactic structure and semantic model representations of a program.
  • a machine learning model is generated for each class and contains ordered sequences of method invocations with probabilities representing the likelihood of a transition from a particular method invocation sequence to a succeeding method invocation.
  • the machine learning model is an «-order Markov chain model which is used to predict what method will be used in a current invocation based on preceding method invocations of the same class in the same document and the context in which the current method invocation is made.
  • an autocompletion component of a source code editor uses the sequential machine learning models to generate candidates to complete a method invocation.
  • the machine learning model uses one or more immediately preceding method invocations and the characteristics of the context of the current position to predict the more likely methods to complete a method invocation.
  • FIG. 1 illustrates an exemplary system including a training phase used to generate machine learning models for code completion and an execution phase that uses the machine learning models for code completion.
  • Fig. 2A is a schematic diagram illustrating the extraction of features from a source code program.
  • Fig. 2B illustrates an exemplary second-order Markov model embodied in a lookup table or dictionary format.
  • FIG. 3 is a flow diagram illustrating an exemplary method for generating the machine learning models.
  • Fig. 4 is a flow diagram illustrating an exemplary method for utilizing the machine models for code completion.
  • Figs. 5A - 5B illustrate exemplary pop-up windows including code completion candidates.
  • Fig. 6 is a block diagram illustrating an operating environment.
  • a method invocation is the issuance of a call to a method or property of a class.
  • a class may include a large number of methods and/or properties thereby making it impractical to list all the methods and properties of a class as candidates.
  • the context in which the method is invoked is used to predict the more likely candidates.
  • Method invocations differ with respect to the context in which they are used in a program.
  • the context of a method invocation may include one or more of the following: the spatial position of the method call in the program; whether the method call is inside a conditional branch (e.g., if-then-else program construct); the name of the class; the name of the method or property invoked; the name of the class corresponding to the invoked method; the function containing the method invocation; the type of the method; and an indication if the method is associated with an override, static, virtual, definition, abstract, and/or sealed keyword.
  • This context information is collected from various programs and used to detect sequential patterns in the method invocations of a class.
  • the context information is used as the features that train a machine learning model to predict the next method to complete a method invocation.
  • an «-order Markov chain model is generated based on the context information extracted from method invocations found in various programs written in a specific programming language. Markov chain models are used in code completion to predict what method will be used in a current invocation based on preceding method invocations of the same class in the same document and the context in which the current method invocation is made.
  • Fig. 1 illustrates a block diagram of an exemplary system 100 in which various aspects of the invention may be practiced.
  • system 100 includes a training phase 102 which generates a model for each class and an execution phase 104 that utilizes the class models in a code completion system.
  • the training phase 102 may utilize a source code extraction component 108, a compilation component 112, a feature extraction component 116, a model generation component 122 and a model test component 126.
  • the execution phase 104 may utilize a source code editor 130, an auto completion component 136, and a dictionary 138.
  • the source code extraction component 108 extracts source code programs 110 from a source code repository 106 to train the machine learning models.
  • a compilation component 112 compiles the selected source code programs 110 to generate a corresponding syntax tree and semantic model 114.
  • the compilation component 112 may be a front-end compiler, a parser, or a language compiler.
  • a syntax tree or abstract syntax tree represents the syntactic structure of the program in a hierarchical or tree structure.
  • the syntax tree is a data structure that includes nodes that represent a construct in the grammar of the programming language of the program.
  • the semantic model includes all the semantic information about the program.
  • the semantic model includes information on the symbols referenced at a specific location in the program. Every namespace, type, method, property, field, event, parameter, label, and local variable maybe represented by a symbol. Symbols may also include additional information that a compiler determines from the program, such as methods and properties associated with the symbol.
  • the semantic model encapsulates all this data into a data structure referred to as the semantic model.
  • the syntax tree and the semantic model 114 of each selected source code program is passed to the feature extraction component 116.
  • the feature extraction component 116 extracts certain features of a method invocation from the syntax tree and semantic model.
  • a feature is a discriminable characteristic of the method invocation that represents the context in which a method is called.
  • There are several features extracted for each method invocation and these features comprise a feature vector.
  • a portion of the feature vectors generated for a particular class can then be used as training data for the model generation component 112 to train a model 118.
  • Another portion of the feature vectors 120 can be used by the model test component 126 to test the model 120.
  • the features may include one or more of the following: the position of a method invocation within the program (e.g., span start); whether the method invocation is within a conditional branch (e.g., if-then-else statement, switch or case statement); the class name corresponding to the method invocation, the name of the method or property invoked; the name of the class that contains the called method; the function that contains the called method; the type of the method; and an indication of whether the called method is associated with the static, virtual, override, definition, abstract and/or sealed keywords.
  • a conditional branch e.g., if-then-else statement, switch or case statement
  • the models 128 may then be used in code completion.
  • the execution phase 104 may include a source code editor 130 having a user interface 132 and a parser 134, an auto completion component 136, and one or more dictionaries 138.
  • code completion may be a function or feature integrated into a source code editor and/or integrated development environment (IDE).
  • IDE integrated development environment
  • Code completion may be embodied as a tool or feature that can be an add-on, plug-in, extension and/or component of a source code editor and/or IDE.
  • a source code editor 130 may include a user interface 132 and a parser 134.
  • the user interface 132 includes a set of features or functions for writing and editing a source code program.
  • the user interface 132 may utilize a pop-up window to present a list of possible candidates for completion thereby allowing a developer to browse through the candidates and to select one from the list. In this manner, code completion serves as documentation for the method invocations associated with a class in addition to being an assistance to writing code quickly.
  • the parser 134 reads the source code in the source code editor 130 and generates a corresponding syntax tree and semantic model 140.
  • the parser 134 also updates the syntax tree and semantic model 140 as the developer creates and edits the source code in the source code editor 130.
  • the user interface 132 will detect that the user has entered a particular character which will initiate code completion.
  • the character that initiates code completion may be a period,“ placed after a class name.
  • the user interface 132 will then request candidates from the auto completion component 136 to present to the developer.
  • the auto completion component 136 receives requests 144 for candidates to complete a method invocation.
  • the auto completion component 136 extracts the previous method invocations for the same class in the same document used in the current invocation and the context of the current invocation by accessing the syntax tree and semantic model representation of the source code program in the source code editor.
  • the auto completion component 136 utilizes one or more dictionaries 138 which contain the models 128 in a lookup table format. There is one model for each class. A dictionary 138 corresponding to the class name is accessed based on a sequence of method invocations. The corresponding entry has a list of methods ranked by their predicted probabilities.
  • the auto completion component 136 obtains one or more candidates 142 from the dictionary 138 which are returned back to the user interface 132. In one aspect, at most five candidates are obtained from the dictionary 138.
  • the user interface 132 in turn provides the candidates to the developer. In one aspect, the user interface 132 may provide the candidates from the auto completion component with other candidates from other code completion tools and/or provide the candidates from the machine learning based auto completion component separately.
  • the techniques describe herein are not constrained to any particular mechanism for providing the candidates to a developer and the manner in which the candidates are displayed to the user (e.g., pop-up window, etc.).
  • Fig. 1 shows components of the system in one aspect of an environment in which various aspects of the invention may be practiced.
  • the exact configuration of the components shown in Fig. 1 may not be required to practice the various aspects and variations in the configuration shown in Fig. 1 and the type of components may be made without departing from the spirit or scope of the invention.
  • the training phase 102 may be executed in one computing environment and the execution phase 104 may be executed in the same computing environment or in a separate computing environment.
  • the various computing environment is described in further detail below.
  • FIG. 2A illustrates the extraction of the features used to train a Markov chain model.
  • Source code program 202 contains at line 17 an invocation of the method Console. Writeline().
  • the Console.Writeline method is part of the System. Console class.
  • the features that are extracted from this method invocation are placed into feature vector 204.
  • Feature vector 204 as well as other feature vectors associated with method invocations of the System. Console class are used to train a model to predict the most likely candidates to complete the method invocation.
  • the model is a sequential or chain model that is capable of modeling sequences of events.
  • the model is a Markov chain model.
  • a Markov chain model relies on the assumption that each state is dependent on previous states. The dependency is given by a conditional probability P(xt ⁇ xt-i, . xt-x), where xt is the state of the model at time t and n is the order of the Markov chain.
  • P(xt ⁇ xt-i, . xt-x) where xt is the state of the model at time t and n is the order of the Markov chain.
  • a state is dependent only on the immediately preceding state and in a second order Markov chain model, a state is dependent on the immediately preceding two states.
  • the transition probabilities are generated from the sequential usage patterns detected in the training data.
  • Each model represents a particular class and contains sequences of method invocations that result in an end state that represents a method invocation within the class.
  • Fig. 2B illustrates an exemplary second order Markov chain model embodied as a lookup table (i.e., dictionary, key-value pair).
  • a lookup table i.e., dictionary, key-value pair.
  • One lookup table is for method invocations outside of a conditional branch 222A and the other lookup table is for method invocations within a conditional branch 222B.
  • the key into either table is a method invocation sequence of two previous method invocations in the System.
  • Console class The corresponding entry in the table is a list of methods in the System.
  • Console class ranked in order of highest probability for completing a current invocation.
  • Fig. 3 illustrates an exemplary method illustrating the generation of the machine learning models for code completion.
  • one or more source code repositories 106 are searched for source code programs written in a target programming language.
  • the source code repositories 106 can be widely-used code repositories, such as GitHub, internal code repositories, and/or combinations thereof.
  • the source code extraction component 108 extracts a number and type of source code programs that meet an intended target, such as source code programs that are accessed frequently, source code programs that utilize a particular function (e g., database operations, computer graphics programs, etc.), and the like (collectively, block 302).
  • the selected source code programs 1 10 are then compiled by the compilation component 112 to produce data structures representing the syntax tree and semantic model of the source code (block 304).
  • the syntax tree and semantic model 114 are used by the feature extraction component 1 16 to extract characteristics representative of the context of a method invocation. These characteristics are used to determine the order in which methods are invoked in a program having conditional branches (block 306).
  • the characteristics include one or more of the following: the position of a method invocation within the program (e g., span start); whether the method invocation is within a conditional branch (e.g., if-then-else statement, switch or case statement); the class name corresponding to the method invocation, the name of the method or property invoked; the name of the class that contains the called method; the function that contains the called method; the type of the method; and an indication of whether the called method is associated with the static, virtual, override, definition, abstract and/or sealed keywords.
  • a conditional branch e.g., if-then-else statement, switch or case statement
  • the characteristics are configured into feature vectors which serve as the training and testing data for the models.
  • the feature vector can be split with 80% used as training data and 20% used as testing data (collectively, block 306).
  • the feature vectors in the training data are used by the model generation component to generate the models.
  • the data in the feature vectors is used to determine an order of the method invocations in each program for each class. From the ordered list of method invocations, sequences of usage patterns can be detected. These patterns can then be partitioned into sequences having n+1 states, where n is the order of the Markov chain model. These sequences are then used to train a Markov chain model for each class which entails generating the states and transition probabilities (collectively, block 308).
  • the training data is analyzed to detect sequences of method invocations for each class.
  • the number of specific n state method invocation sequences that occur is counted to order the n+1 states that occur thereafter by derived probabilities.
  • the derived probability may be generated by the ratio of the number of times the n+1 state sequence occurs over the number of times the n state sequence occurs (block 308).
  • the models are then tested to ensure a target level of accuracy (block 310).
  • the testing entails providing each model with test data and checking the recommendations that the model outputs. When the recommendations achieve a certain level of accuracy, then the models are transformed into a dictionary or lookup table format and released (block 312).
  • Fig. 4 illustrates an exemplary method of code completion utilizing the machine learning models.
  • code completion is performed in a development environment such as a source code editor 130.
  • the source code editor 130 is configured to interact with an auto completion component 136 that utilizes the machine learning models in a lookup table format (block 402).
  • the source code editor 130 performs a background parsing process that parses the source code in the source code editor to generate and update the syntax tree and semantic model of the source code (block 402).
  • the user interface 132 of the source code editor 130 detects the input characters that a developer enters into the source code editor 130. When the user interface 132 detects a particular character that denotes code completion is needed for a method invocation at a current position in the source code editor 130, the user interface 132 requests recommendations 144 from the auto completion component 136 (block 404). In one aspect, the detection of a period after a class name is used as the trigger to invoke code completion (block 404).
  • the auto completion component 138 utilizes the syntax tree and semantic model 140 generated during the source code editing session to obtain the previous method invocations that have occurred before the current position in the source code editor 130 and the characteristics of the context of the current method invocation, such as whether the current method invocation is inside a conditional branch (block 406).
  • APIs application program interfaces
  • the auto completion component 136 utilizes the dictionary 138 associated with the class to search for a sequence most likely to predict the next method invocation using the characteristics of the context of the current position (block 408).
  • an n-state sequence can be constructed and used as a key to access the dictionary. The corresponding values are used as the recommendations. If there is no such n-state sequence, then the dictionary is searched using an n-1 state sequence constructed from the previous n-l method invocations in the same class. If the n-l state sequence cannot be found in the dictionary, then the n-2 state sequence is used to search the dictionary. In an n-order Markov chain model, the n-l state sequence will be stored as a new n state sequence with the first state marked as null.
  • the auto completion component 136 may find one or more candidates for recommendation from the sequences in the dictionary (block 408). In the event that there are multiple candidates, the auto completion component 136 orders the recommendations by highest probability (block 410). The candidates are then returned to the user interface for display to the developer (block 412).
  • Figs. 5A- 5B illustrate exemplary user interfaces.
  • Fig. 5A shows an exemplary source code program 502 in a source code editor that display pop-up window 504 containing candidates for code completion.
  • the suggested method to complete the expression !dir. is the method Exists.
  • Fig. 5B shows an exemplary source code program 506 in a source code editor that displays pop-up window 508 containing multiple recommendations.
  • the recommendation from the auto completion component may be distinguished with a star * and other recommendations are included thereafter in alphabetical order.
  • aspects of the subject matter disclosed herein pertain to the technical problem of providing more precise candidates for code completion.
  • the technical feature associated with addressing this problem involves an «-order Markov chain model that predicts a method for completion of a method invocation.
  • the Markov chain model is trained using sequences of usage patterns of historical method invocations from a sampled population of existing source code programs. Characteristics of the context in which a method is invoked is extracted from the sampled programs in order to recognize sequential patterns in the usage of a method invocation. These characteristics serve as the training data which trains the Markov chain model to more particularly predict a method to complete a method invocation. In this manner, the source code editor presents more relevant candidates for code completion.
  • FIG. 6 illustrates an exemplary operating environment 600 in which a first computing device 602 is used to train the machine learning models and a second computing device 604 uses the machine learning models for code completion.
  • Computing device 602 may utilize the machine learning models in its own code completion system and computing device 604 may generate and test machine learning models as well.
  • Computing device 602 may be configured as a cloud service that generates machine learning model as a service for other code completion systems.
  • the operating environment is not limited to any particular configuration.
  • the computing devices 602, 604 may be any type of electronic device, such as, without limitation, a mobile device, a personal digital assistant, a mobile computing device, a smart phone, a cellular telephone, a handheld computer, a server, a server array or server farm, a web server, a network server, a blade server, an Internet server, a work station, a mini-computer, a mainframe computer, a supercomputer, a network appliance, a web appliance, a distributed computing system, multiprocessor systems, or combination thereof.
  • the operating environment 600 may be configured in a network environment, a distributed environment, a multi-processor environment, or a stand-alone computing device having access to remote or local storage devices.
  • the computing devices 602, 604 may include one or more processors 608, 634, a communication interface 610, 636, one or more storage devices 612, 638, one or more input/output devices 614, 640, and a memory 616, 642.
  • a processor 608, 634 may be any commercially available or customized processor and may include dual microprocessors and multi -processor architectures.
  • the communication interface 610, 636 facilitates wired or wireless communications between the computing device 602, 604 and other devices.
  • a storage device 612, 638 may be computer-readable medium that does not contain propagating signals, such as modulated data signals transmitted through a carrier wave.
  • Examples of a storage device 612, 638 include without limitation RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD), or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage, all of which do not contain propagating signals, such as modulated data signals transmitted through a carrier wave.
  • the input/output devices 614, 640 may include a keyboard, mouse, pen, voice input device, touch input device, display, speakers, printers, etc., and any combination thereof.
  • a memory 616, 642 may be any non-transitory computer-readable storage media that may store executable procedures, applications, and data.
  • the computer-readable storage media does not pertain to propagated signals, such as modulated data signals transmitted through a carrier wave. It may be any type of non-transitory memory device (e.g., random access memory, read-only memory, etc.), magnetic storage, volatile storage, non-volatile storage, optical storage, DVD, CD, floppy disk drive, etc. that does not pertain to propagated signals, such as modulated data signals transmitted through a carrier wave.
  • a memory 616, 642 may also include one or more external storage devices or remotely located storage devices that do not pertain to propagated signals, such as modulated data signals transmitted through a carrier wave.
  • Computing device 604 may utilize an integrated development environment (IDE) 620 that allows a user (e.g., developer, programmer, designer, coder, etc.) to design, code, compile, test, run, edit, debug or build a program, set of programs, web sites, web applications, and web services in a computer system.
  • Software programs can include source code files 618, created in one or more source code languages (e.g., Visual Basic, Visual J#, C++. C#, J#, Java Script, APL, COBOL, Pascal, Eiffel, Haskell, ML, Oberon, Perl, Python, Scheme, Smalltalk and the like).
  • IDE integrated development environment
  • the IDE 620 may provide a native code development environment or may provide a managed code development that runs on a virtual machine or may provide a combination thereof.
  • the IDE 620 may provide a managed code development environment using the .NET framework. It should be noted that this operating embodiment is not constrained to providing the source code development services through an IDE and that other tools may be utilized instead, such as a stand-alone source code editor and the like.
  • a user can create and/or edit the source code files 618 according to known software programming techniques and the specific logical and syntactical rules associated with a particular source language via a user interface 624 and a source code editor 622 in the IDE 620. Thereafter, the source code files 618 can be compiled via a compiler 626, such as a front end or language compiler. During this compilation process, the front-end compiler 626 generates data structures representing the syntactic structure and semantic model of the source code.
  • a compiler 626 such as a front end or language compiler.
  • the memory 642 may contain instructions, components, and data.
  • a component is a software program that performs a specific function and is otherwise known as a module, program, and/or application.
  • the memory 642 may include an operating system 616, one or more source code files 618, an IDE that may include a source code editor 622, a user interface 624, a compiler 626, an autocompletion component 628, dictionaries 630 and other applications and data 632.
  • Memory 616 may include an operating system 642, a model test component 644, a feature extraction component 646, a model generation component 648, a compilation component 650, a source code extraction component 652, models/dictionaries 654, and other applications and data 656.
  • the computing devices 602, 604 may be communicatively coupled via a network 606.
  • the network 634 may be configured as an ad hoc network, an intranet, an extranet, a virtual private network (VPN), a local area network (LAN), a wireless LAN (WLAN), a wide area network (WAN), a wireless WAN (WWAN), a metropolitan network (MAN), the Internet, a portions of the Public Switched Telephone Network (PSTN), plain old telephone service (POTS) network, a wireless network, a WiFi® network, or any other type of network or combination of networks.
  • VPN virtual private network
  • LAN local area network
  • WLAN wireless LAN
  • WAN wide area network
  • WWAN wireless WAN
  • MAN metropolitan network
  • PSTN Public Switched Telephone Network
  • POTS plain old telephone service
  • the network 634 may employ a variety of wired and/or wireless communication protocols and/or technologies.
  • Various generations of different communication protocols and/or technologies that may be employed by a network may include, without limitation, Global System for Mobile Communication (GSM), General Packet Radio Services (GPRS), Enhanced Data GSM Environment (EDGE), Code Division Multiple Access (CDMA), Wideband Code Division Multiple Access (W-CDMA), Code Division Multiple Access 2000, (CDMA-2000), High Speed Downlink Packet Access (HSDPA), Long Term Evolution (LTE), Universal Mobile Telecommunications System (UMTS), Evolution-Data Optimized (Ev-DO), Worldwide Interoperability for Microwave Access (WiMax), Time Division Multiple Access (TDMA), Orthogonal Frequency Division Multiplexing (OFDM), Ultra Wide Band (UWB), Wireless Application Protocol (WAP), User Datagram Protocol (UDP), Transmission Control Protocol/ Internet Protocol (TCP/IP), any portion of the Open Systems Interconnection (OSI) model protocols, Session Initiated Protocol/ Real-Time
  • a system contains one or more processors, a memory and one or more programs, where the one or more programs are stored in memory.
  • the one or more programs are configured to be executed by the one or more processors and have instructions for generating a data structure representing a syntactic structure and a semantic model of a program, extracting a plurality of features from the data structure to construct one or more feature vectors, the plurality of features including characteristics of a context of a method invocation found within a program, and training a sequential model for a first class from the one or more feature vectors to predict a next method invocation for code completion following one or more preceding method invocations of a same class as the first class, wherein the sequential model includes one or more sequences of method invocations with probabilities for transitioning between each method invocation in the one or more sequences.
  • the sequential model may be an n-order Markov chain model.
  • the data structure includes a syntax tree and a semantic model and is generated from compilation of the program.
  • the characteristics of a context of a method invocation includes one or more of a spatial position of a method invocation, a name of a class associated with a method invocation, a name of a method or property invoked, and a name of a function containing a method invocation.
  • the characteristics of a context of a method invocation may also include whether a method invocation is included in a conditional branch and identifiers indicating whether a method invocation is associated with an override, static, virtual, definition, abstract, and/or sealed keyword.
  • a device includes at least one processor and a memory.
  • the device is configured to extract one or more features from a plurality of source code programs where a source code program has one or more method calls.
  • the features represent a context in which a method is called in the source code program and at least one feature represents a location of the called method in the program.
  • the device is further configured to generate one or more sequences of method calls of length n from the extracted one or more features.
  • a sequence includes method calls occurring in successive order.
  • a sequence includes a probability from transitioning from one method in a sequence to an immediately succeeding method in the sequence, wherein the sequences and probabilities are computed from usage patterns of historical source code programs.
  • the device is further configured to train sequences to predict a method to complete a method invocation in a program using a context of the method invocation and at least one immediately preceding method invocation.
  • a sequence of method calls of length n are represented as an n-order Markov chain model.
  • the features may include a name of a class associated with a method invocation, a name of a method or property invoked, a name of a function containing a method invocation, an indication of whether a method invocation is included in a conditional branch, and identifiers indicating whether a method invocation is associated with an override, static, virtual, definition, abstract, and/or sealed keyword.
  • the features are extracted from a syntax tree and/or semantic model representation of the plurality of source code programs.
  • the syntax tree and semantic model representation of a source code program is generated from a compilation of a source code program.
  • a method is disclosed that can implemented on a system or device disclosed herein which obtains at least one method invocation in a source code program occurring immediately preceding a current position in a source code editor, determines a class associated with input at the current position, utilizes a Markov chain model to predict one or more recommendations of methods to complete a method invocation at the current position, and produces the one or more predicted recommendations of methods using the Markov chain model using the at least one previous method invocation in the source code program and characteristics of a context at the current position.
  • the Markov chain model includes one or more sequences of method invocations where a sequence includes transition probabilities representing a likelihood of transitioning from one method invocation to another method invocation in a sequence.
  • the method generates a data structure that tracks a syntax structure and semantic model of the source code program in the source code editor and uses the data structure to obtain the at least one previous method invocation in a source code program occurring immediately preceding the current position.
  • the method uses the data structure to obtain the characteristics of the context of the current position.
  • the method ranks the one or more predicted code completion recommendations in order of highest probability.

Abstract

A code completion tool uses machine learning models to more precisely predict the likelihood of a method invocation completing a code fragment that follows one or more method invocations of a same class in a same document during program development. In one aspect, the machine learning model is a n-order Markov chain model that is trained on features that represent characteristics of the context of method invocations of a class in commonly-used programs from a sampled population.

Description

CODE SUGGESTION BASED ON MACHINE LEARNING
BACKGROUND
[0001] Software development environments are often used to aid software developers (i.e., users, programmers, etc.) to develop program code. The software development environment may include a source code editor and other tools that the developers utilize to write and test their programs. Some software development environments provide assistance for the developer to write code by automatically presenting a list of possible candidates based on one or more characters (e.g., letters, symbols, etc.) that a developer has typed into a source code editor. A popup menu may appear with several suggested code elements, phrases, or entities that the developer may utilize. This assistance is beneficial since it speeds up the development time and reduces common errors, such as typos. However, the automatic code completion feature may be problematic when there is a large list of candidates which may not be relevant and/or which may be too lengthy for a developer to browse through to find the right element.
SUMMARY
[0002] This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
[0003] A code completion tool utilizes sequential machine learning models to predict more accurately those methods more likely to complete a method invocation. The machine learning models are trained on usage patterns found in commonly-used source code programs. The usage patterns are detected from the characteristics of the context in which a method invocation is used in a program. These characteristics are extracted from data structures representing the syntactic structure and semantic model representations of a program. A machine learning model is generated for each class and contains ordered sequences of method invocations with probabilities representing the likelihood of a transition from a particular method invocation sequence to a succeeding method invocation. In one aspect, the machine learning model is an «-order Markov chain model which is used to predict what method will be used in a current invocation based on preceding method invocations of the same class in the same document and the context in which the current method invocation is made.
[0004] During code development, an autocompletion component of a source code editor uses the sequential machine learning models to generate candidates to complete a method invocation. The machine learning model uses one or more immediately preceding method invocations and the characteristics of the context of the current position to predict the more likely methods to complete a method invocation.
[0005] These and other features and advantages will be apparent from a reading of the following detailed description and a review of the associated drawings. It is to be understood that both the foregoing general description and the following detailed description are explanatory only and are not restrictive of aspects as claimed.
BRIEF DESCRIPTION OF DRAWINGS
[0006] Fig. 1 illustrates an exemplary system including a training phase used to generate machine learning models for code completion and an execution phase that uses the machine learning models for code completion.
[0007] Fig. 2A is a schematic diagram illustrating the extraction of features from a source code program.
[0008] Fig. 2B illustrates an exemplary second-order Markov model embodied in a lookup table or dictionary format.
[0009] Fig. 3 is a flow diagram illustrating an exemplary method for generating the machine learning models.
[0010] Fig. 4 is a flow diagram illustrating an exemplary method for utilizing the machine models for code completion.
[0011] Figs. 5A - 5B illustrate exemplary pop-up windows including code completion candidates.
[0012] Fig. 6 is a block diagram illustrating an operating environment.
DETAILED DESCRIPTION
[0013] Overview
[0014] The subject matter disclosed pertains to a mechanism for generating candidates for code completion or autocompletion of a method invocation. A method invocation is the issuance of a call to a method or property of a class. A class may include a large number of methods and/or properties thereby making it impractical to list all the methods and properties of a class as candidates. In order to generate candidates more likely to complete a source code statement invoking a method, the context in which the method is invoked is used to predict the more likely candidates.
[0015] Method invocations differ with respect to the context in which they are used in a program. The context of a method invocation may include one or more of the following: the spatial position of the method call in the program; whether the method call is inside a conditional branch (e.g., if-then-else program construct); the name of the class; the name of the method or property invoked; the name of the class corresponding to the invoked method; the function containing the method invocation; the type of the method; and an indication if the method is associated with an override, static, virtual, definition, abstract, and/or sealed keyword. This context information is collected from various programs and used to detect sequential patterns in the method invocations of a class. The context information is used as the features that train a machine learning model to predict the next method to complete a method invocation.
[0016] In one aspect, an «-order Markov chain model is generated based on the context information extracted from method invocations found in various programs written in a specific programming language. Markov chain models are used in code completion to predict what method will be used in a current invocation based on preceding method invocations of the same class in the same document and the context in which the current method invocation is made.
[0017] Attention now turns to a further discussion of the system, devices, components, and methods utilized in a code completion system.
[0018] Machine Learning Code Completion System
[0019] Fig. 1 illustrates a block diagram of an exemplary system 100 in which various aspects of the invention may be practiced. As shown in Fig. 1, system 100 includes a training phase 102 which generates a model for each class and an execution phase 104 that utilizes the class models in a code completion system. The training phase 102 may utilize a source code extraction component 108, a compilation component 112, a feature extraction component 116, a model generation component 122 and a model test component 126. The execution phase 104 may utilize a source code editor 130, an auto completion component 136, and a dictionary 138.
[0020] In the training phase 102, the source code extraction component 108 extracts source code programs 110 from a source code repository 106 to train the machine learning models. A compilation component 112 compiles the selected source code programs 110 to generate a corresponding syntax tree and semantic model 114. In one aspect, the compilation component 112 may be a front-end compiler, a parser, or a language compiler.
[0021] A syntax tree or abstract syntax tree represents the syntactic structure of the program in a hierarchical or tree structure. The syntax tree is a data structure that includes nodes that represent a construct in the grammar of the programming language of the program. The semantic model includes all the semantic information about the program. The semantic model includes information on the symbols referenced at a specific location in the program. Every namespace, type, method, property, field, event, parameter, label, and local variable maybe represented by a symbol. Symbols may also include additional information that a compiler determines from the program, such as methods and properties associated with the symbol. The semantic model encapsulates all this data into a data structure referred to as the semantic model.
[0022] The syntax tree and the semantic model 114 of each selected source code program is passed to the feature extraction component 116. The feature extraction component 116 extracts certain features of a method invocation from the syntax tree and semantic model. A feature is a discriminable characteristic of the method invocation that represents the context in which a method is called. There are several features extracted for each method invocation and these features comprise a feature vector. A portion of the feature vectors generated for a particular class can then be used as training data for the model generation component 112 to train a model 118. Another portion of the feature vectors 120 can be used by the model test component 126 to test the model 120.
[0023] In one aspect, the features may include one or more of the following: the position of a method invocation within the program (e.g., span start); whether the method invocation is within a conditional branch (e.g., if-then-else statement, switch or case statement); the class name corresponding to the method invocation, the name of the method or property invoked; the name of the class that contains the called method; the function that contains the called method; the type of the method; and an indication of whether the called method is associated with the static, virtual, override, definition, abstract and/or sealed keywords.
[0024] The models 128 may then be used in code completion. The execution phase 104 may include a source code editor 130 having a user interface 132 and a parser 134, an auto completion component 136, and one or more dictionaries 138. In one or more aspects, code completion may be a function or feature integrated into a source code editor and/or integrated development environment (IDE). Code completion may be embodied as a tool or feature that can be an add-on, plug-in, extension and/or component of a source code editor and/or IDE.
[0025] In one aspect, a source code editor 130 may include a user interface 132 and a parser 134. The user interface 132 includes a set of features or functions for writing and editing a source code program. The user interface 132 may utilize a pop-up window to present a list of possible candidates for completion thereby allowing a developer to browse through the candidates and to select one from the list. In this manner, code completion serves as documentation for the method invocations associated with a class in addition to being an assistance to writing code quickly. The parser 134 reads the source code in the source code editor 130 and generates a corresponding syntax tree and semantic model 140. The parser 134 also updates the syntax tree and semantic model 140 as the developer creates and edits the source code in the source code editor 130.
[0026] At certain points in the editing process, the user interface 132 will detect that the user has entered a particular character which will initiate code completion. In one aspect, the character that initiates code completion may be a period,“ placed after a class name. The user interface 132 will then request candidates from the auto completion component 136 to present to the developer.
[0027] The auto completion component 136 receives requests 144 for candidates to complete a method invocation. The auto completion component 136 extracts the previous method invocations for the same class in the same document used in the current invocation and the context of the current invocation by accessing the syntax tree and semantic model representation of the source code program in the source code editor.
[0028] The auto completion component 136 utilizes one or more dictionaries 138 which contain the models 128 in a lookup table format. There is one model for each class. A dictionary 138 corresponding to the class name is accessed based on a sequence of method invocations. The corresponding entry has a list of methods ranked by their predicted probabilities. The auto completion component 136 obtains one or more candidates 142 from the dictionary 138 which are returned back to the user interface 132. In one aspect, at most five candidates are obtained from the dictionary 138. The user interface 132 in turn provides the candidates to the developer. In one aspect, the user interface 132 may provide the candidates from the auto completion component with other candidates from other code completion tools and/or provide the candidates from the machine learning based auto completion component separately. The techniques describe herein are not constrained to any particular mechanism for providing the candidates to a developer and the manner in which the candidates are displayed to the user (e.g., pop-up window, etc.).
[0029] It should be noted that Fig. 1 shows components of the system in one aspect of an environment in which various aspects of the invention may be practiced. However, the exact configuration of the components shown in Fig. 1 may not be required to practice the various aspects and variations in the configuration shown in Fig. 1 and the type of components may be made without departing from the spirit or scope of the invention. For example, the training phase 102 may be executed in one computing environment and the execution phase 104 may be executed in the same computing environment or in a separate computing environment. The various computing environment is described in further detail below.
[0030] Fig. 2A illustrates the extraction of the features used to train a Markov chain model. Source code program 202 contains at line 17 an invocation of the method Console. Writeline(). The Console.Writeline method is part of the System. Console class. The features that are extracted from this method invocation are placed into feature vector 204. Feature vector 204 includes the following features: span start = 9 (206); if conditional = false (208); class name = System. Console (210); the name of the method = Writeline (212); the name of the class containing the method = Program (214); the name of the function containing the method invocation = Main (216); the type of the method = Named Type (218); and if the method is associated with the keywords override, static, virtual, definition, abstract, and sealed = False (220).
[0031] Feature vector 204 as well as other feature vectors associated with method invocations of the System. Console class are used to train a model to predict the most likely candidates to complete the method invocation. The model is a sequential or chain model that is capable of modeling sequences of events. In one aspect, the model is a Markov chain model. A Markov chain model relies on the assumption that each state is dependent on previous states. The dependency is given by a conditional probability P(xt \ xt-i, . xt-x), where xt is the state of the model at time t and n is the order of the Markov chain. In a first order Markov chain, a state is dependent only on the immediately preceding state and in a second order Markov chain model, a state is dependent on the immediately preceding two states.
[0032] The transition probabilities are generated from the sequential usage patterns detected in the training data. In one aspect, the probabilities may be computed as P(xt \ xt-i, . xt-n) = Nt /Ntotai, where n is the order of the Markov chain, Nt is the number of times xt comes after xt-i and xt-2, Ntotai = total number of methods that come after xt-i and xt-2. Each model represents a particular class and contains sequences of method invocations that result in an end state that represents a method invocation within the class.
[0033] Fig. 2B illustrates an exemplary second order Markov chain model embodied as a lookup table (i.e., dictionary, key-value pair). In one aspect, there are at least two lookup tables for each class 222A,222B. One lookup table is for method invocations outside of a conditional branch 222A and the other lookup table is for method invocations within a conditional branch 222B. The key into either table is a method invocation sequence of two previous method invocations in the System. Console class. The corresponding entry in the table is a list of methods in the System. Console class ranked in order of highest probability for completing a current invocation.
[0034] As shown in Fig. 2B, when the sequence of preceding method invocations of the System. Console class are Method A followed by Method Y 224, the key into the table is the sequence Method A, Method Y. The corresponding entry in the table 222A lists the code completion candidates as Method B, Method Z, Method S, ordered in highest probability to lowest probability. Likewise, when the preceding method invocations of the System. Console class are Method J followed by Method A 226, the code completion candidates are Method S , Method U, and Method D. When there is only one preceding method invocation for a class in a document, a null value is used to represent the missing method invocation and the key is the method sequence NULL, Method X. The corresponding entry is Method E.
[0035] When the current invocation is inside a conditional branch (i.e., if-then-else statement), then the System. Console class conditional branch table 222B is used. The previous sequence of method invocations for the System. Console class in the same document is used as the key into this table. When the preceding sequence of method invocations is Method A followed by Method Y 224, then the code completion candidates are Method NN and Method LN, where Method NN has a higher probability then Method LN. Likewise, when the preceding sequence of method invocations is Method J followed by Method A 226, the code completion candidate is Method ST. When there is only one preceding method invocation, the key is the sequence NULL, Method X 228 and the candidate is Method PL.
[0036] Attention now turns to description of the various exemplary methods that utilize the system and device disclosed herein. Operations for the aspects may be further described with reference to various exemplary methods. It may be appreciated that the representative methods do not necessarily have to be executed in the order presented, or in any particular order, unless otherwise indicated. Moreover, various activities described with respect to the methods can be executed in serial or parallel fashion, or any combination of serial and parallel operations. In one or more aspects, the method illustrates operations for the systems and devices disclosed herein.
[0037] Fig. 3 illustrates an exemplary method illustrating the generation of the machine learning models for code completion. Referring to Figs. 1 and 3, one or more source code repositories 106 are searched for source code programs written in a target programming language. The source code repositories 106 can be widely-used code repositories, such as GitHub, internal code repositories, and/or combinations thereof. The source code extraction component 108 extracts a number and type of source code programs that meet an intended target, such as source code programs that are accessed frequently, source code programs that utilize a particular function (e g., database operations, computer graphics programs, etc.), and the like (collectively, block 302).
[0038] The selected source code programs 1 10 are then compiled by the compilation component 112 to produce data structures representing the syntax tree and semantic model of the source code (block 304). The syntax tree and semantic model 114 are used by the feature extraction component 1 16 to extract characteristics representative of the context of a method invocation. These characteristics are used to determine the order in which methods are invoked in a program having conditional branches (block 306). The characteristics include one or more of the following: the position of a method invocation within the program (e g., span start); whether the method invocation is within a conditional branch (e.g., if-then-else statement, switch or case statement); the class name corresponding to the method invocation, the name of the method or property invoked; the name of the class that contains the called method; the function that contains the called method; the type of the method; and an indication of whether the called method is associated with the static, virtual, override, definition, abstract and/or sealed keywords.
[0039] The characteristics are configured into feature vectors which serve as the training and testing data for the models. In one aspect, the feature vector can be split with 80% used as training data and 20% used as testing data (collectively, block 306).
[0040] The feature vectors in the training data are used by the model generation component to generate the models. The data in the feature vectors is used to determine an order of the method invocations in each program for each class. From the ordered list of method invocations, sequences of usage patterns can be detected. These patterns can then be partitioned into sequences having n+1 states, where n is the order of the Markov chain model. These sequences are then used to train a Markov chain model for each class which entails generating the states and transition probabilities (collectively, block 308).
[0041] The training data is analyzed to detect sequences of method invocations for each class. For an «-order Markov chain model, the number of specific n state method invocation sequences that occur is counted to order the n+1 states that occur thereafter by derived probabilities. The derived probability may be generated by the ratio of the number of times the n+1 state sequence occurs over the number of times the n state sequence occurs (block 308).
[0042] The models are then tested to ensure a target level of accuracy (block 310). The testing entails providing each model with test data and checking the recommendations that the model outputs. When the recommendations achieve a certain level of accuracy, then the models are transformed into a dictionary or lookup table format and released (block 312).
[0043] Fig. 4 illustrates an exemplary method of code completion utilizing the machine learning models. Referring to Figs. 1 and 4, code completion is performed in a development environment such as a source code editor 130. The source code editor 130 is configured to interact with an auto completion component 136 that utilizes the machine learning models in a lookup table format (block 402). The source code editor 130 performs a background parsing process that parses the source code in the source code editor to generate and update the syntax tree and semantic model of the source code (block 402).
[0044] The user interface 132 of the source code editor 130 detects the input characters that a developer enters into the source code editor 130. When the user interface 132 detects a particular character that denotes code completion is needed for a method invocation at a current position in the source code editor 130, the user interface 132 requests recommendations 144 from the auto completion component 136 (block 404). In one aspect, the detection of a period after a class name is used as the trigger to invoke code completion (block 404).
[0045] The auto completion component 138 utilizes the syntax tree and semantic model 140 generated during the source code editing session to obtain the previous method invocations that have occurred before the current position in the source code editor 130 and the characteristics of the context of the current method invocation, such as whether the current method invocation is inside a conditional branch (block 406). In one aspect, application program interfaces (APIs) may be used to extract the previous method invocations from the syntax tree and semantic model and the characteristics of the context of the current position (block 406).
[0046] The auto completion component 136 utilizes the dictionary 138 associated with the class to search for a sequence most likely to predict the next method invocation using the characteristics of the context of the current position (block 408). Once the auto completion component 136 obtains the previous method invocations, an n-state sequence can be constructed and used as a key to access the dictionary. The corresponding values are used as the recommendations. If there is no such n-state sequence, then the dictionary is searched using an n-1 state sequence constructed from the previous n-l method invocations in the same class. If the n-l state sequence cannot be found in the dictionary, then the n-2 state sequence is used to search the dictionary. In an n-order Markov chain model, the n-l state sequence will be stored as a new n state sequence with the first state marked as null.
[0047] The auto completion component 136 may find one or more candidates for recommendation from the sequences in the dictionary (block 408). In the event that there are multiple candidates, the auto completion component 136 orders the recommendations by highest probability (block 410). The candidates are then returned to the user interface for display to the developer (block 412).
[0048] Figs. 5A- 5B illustrate exemplary user interfaces. Fig. 5A shows an exemplary source code program 502 in a source code editor that display pop-up window 504 containing candidates for code completion. As shown in Fig. 5A, the suggested method to complete the expression !dir. is the method Exists. Fig. 5B shows an exemplary source code program 506 in a source code editor that displays pop-up window 508 containing multiple recommendations. The recommendation from the auto completion component may be distinguished with a star * and other recommendations are included thereafter in alphabetical order.
[0049] Technical Effect
[0050] Aspects of the subject matter disclosed herein pertain to the technical problem of providing more precise candidates for code completion. The technical feature associated with addressing this problem involves an «-order Markov chain model that predicts a method for completion of a method invocation. The Markov chain model is trained using sequences of usage patterns of historical method invocations from a sampled population of existing source code programs. Characteristics of the context in which a method is invoked is extracted from the sampled programs in order to recognize sequential patterns in the usage of a method invocation. These characteristics serve as the training data which trains the Markov chain model to more particularly predict a method to complete a method invocation. In this manner, the source code editor presents more relevant candidates for code completion.
[0051] Exemplary Operating Environment
[0052] Attention now turns to a discussion of an exemplary operating environment. Fig.
6 illustrates an exemplary operating environment 600 in which a first computing device 602 is used to train the machine learning models and a second computing device 604 uses the machine learning models for code completion. However, it should be noted that the aspects disclosed herein is not constrained to any particular configuration of devices. Computing device 602 may utilize the machine learning models in its own code completion system and computing device 604 may generate and test machine learning models as well. Computing device 602 may be configured as a cloud service that generates machine learning model as a service for other code completion systems. The operating environment is not limited to any particular configuration.
[0053] The computing devices 602, 604 may be any type of electronic device, such as, without limitation, a mobile device, a personal digital assistant, a mobile computing device, a smart phone, a cellular telephone, a handheld computer, a server, a server array or server farm, a web server, a network server, a blade server, an Internet server, a work station, a mini-computer, a mainframe computer, a supercomputer, a network appliance, a web appliance, a distributed computing system, multiprocessor systems, or combination thereof. The operating environment 600 may be configured in a network environment, a distributed environment, a multi-processor environment, or a stand-alone computing device having access to remote or local storage devices.
[0054] The computing devices 602, 604 may include one or more processors 608, 634, a communication interface 610, 636, one or more storage devices 612, 638, one or more input/output devices 614, 640, and a memory 616, 642. A processor 608, 634 may be any commercially available or customized processor and may include dual microprocessors and multi -processor architectures. The communication interface 610, 636 facilitates wired or wireless communications between the computing device 602, 604 and other devices. A storage device 612, 638 may be computer-readable medium that does not contain propagating signals, such as modulated data signals transmitted through a carrier wave. Examples of a storage device 612, 638 include without limitation RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD), or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage, all of which do not contain propagating signals, such as modulated data signals transmitted through a carrier wave. There may be multiple storage devices 612, 638 in the computing devices 602, 604. The input/output devices 614, 640 may include a keyboard, mouse, pen, voice input device, touch input device, display, speakers, printers, etc., and any combination thereof.
[0055] A memory 616, 642 may be any non-transitory computer-readable storage media that may store executable procedures, applications, and data. The computer-readable storage media does not pertain to propagated signals, such as modulated data signals transmitted through a carrier wave. It may be any type of non-transitory memory device (e.g., random access memory, read-only memory, etc.), magnetic storage, volatile storage, non-volatile storage, optical storage, DVD, CD, floppy disk drive, etc. that does not pertain to propagated signals, such as modulated data signals transmitted through a carrier wave. A memory 616, 642 may also include one or more external storage devices or remotely located storage devices that do not pertain to propagated signals, such as modulated data signals transmitted through a carrier wave.
[0056] Computing device 604 may utilize an integrated development environment (IDE) 620 that allows a user (e.g., developer, programmer, designer, coder, etc.) to design, code, compile, test, run, edit, debug or build a program, set of programs, web sites, web applications, and web services in a computer system. Software programs can include source code files 618, created in one or more source code languages (e.g., Visual Basic, Visual J#, C++. C#, J#, Java Script, APL, COBOL, Pascal, Eiffel, Haskell, ML, Oberon, Perl, Python, Scheme, Smalltalk and the like). The IDE 620 may provide a native code development environment or may provide a managed code development that runs on a virtual machine or may provide a combination thereof. The IDE 620 may provide a managed code development environment using the .NET framework. It should be noted that this operating embodiment is not constrained to providing the source code development services through an IDE and that other tools may be utilized instead, such as a stand-alone source code editor and the like.
[0057] A user can create and/or edit the source code files 618 according to known software programming techniques and the specific logical and syntactical rules associated with a particular source language via a user interface 624 and a source code editor 622 in the IDE 620. Thereafter, the source code files 618 can be compiled via a compiler 626, such as a front end or language compiler. During this compilation process, the front-end compiler 626 generates data structures representing the syntactic structure and semantic model of the source code.
[0058] The memory 642 may contain instructions, components, and data. A component is a software program that performs a specific function and is otherwise known as a module, program, and/or application. The memory 642 may include an operating system 616, one or more source code files 618, an IDE that may include a source code editor 622, a user interface 624, a compiler 626, an autocompletion component 628, dictionaries 630 and other applications and data 632. Memory 616 may include an operating system 642, a model test component 644, a feature extraction component 646, a model generation component 648, a compilation component 650, a source code extraction component 652, models/dictionaries 654, and other applications and data 656.
[0059] The computing devices 602, 604 may be communicatively coupled via a network 606. The network 634 may be configured as an ad hoc network, an intranet, an extranet, a virtual private network (VPN), a local area network (LAN), a wireless LAN (WLAN), a wide area network (WAN), a wireless WAN (WWAN), a metropolitan network (MAN), the Internet, a portions of the Public Switched Telephone Network (PSTN), plain old telephone service (POTS) network, a wireless network, a WiFi® network, or any other type of network or combination of networks.
[0060] The network 634 may employ a variety of wired and/or wireless communication protocols and/or technologies. Various generations of different communication protocols and/or technologies that may be employed by a network may include, without limitation, Global System for Mobile Communication (GSM), General Packet Radio Services (GPRS), Enhanced Data GSM Environment (EDGE), Code Division Multiple Access (CDMA), Wideband Code Division Multiple Access (W-CDMA), Code Division Multiple Access 2000, (CDMA-2000), High Speed Downlink Packet Access (HSDPA), Long Term Evolution (LTE), Universal Mobile Telecommunications System (UMTS), Evolution-Data Optimized (Ev-DO), Worldwide Interoperability for Microwave Access (WiMax), Time Division Multiple Access (TDMA), Orthogonal Frequency Division Multiplexing (OFDM), Ultra Wide Band (UWB), Wireless Application Protocol (WAP), User Datagram Protocol (UDP), Transmission Control Protocol/ Internet Protocol (TCP/IP), any portion of the Open Systems Interconnection (OSI) model protocols, Session Initiated Protocol/ Real-Time Transport Protocol (SIP/RTP), Short Message Service (SMS), Multimedia Messaging Service (MMS), or any other communication protocols and/or technologies.
[0061] A system is disclosed that contains one or more processors, a memory and one or more programs, where the one or more programs are stored in memory. The one or more programs are configured to be executed by the one or more processors and have instructions for generating a data structure representing a syntactic structure and a semantic model of a program, extracting a plurality of features from the data structure to construct one or more feature vectors, the plurality of features including characteristics of a context of a method invocation found within a program, and training a sequential model for a first class from the one or more feature vectors to predict a next method invocation for code completion following one or more preceding method invocations of a same class as the first class, wherein the sequential model includes one or more sequences of method invocations with probabilities for transitioning between each method invocation in the one or more sequences.
[0062] The sequential model may be an n-order Markov chain model. The data structure includes a syntax tree and a semantic model and is generated from compilation of the program. The characteristics of a context of a method invocation includes one or more of a spatial position of a method invocation, a name of a class associated with a method invocation, a name of a method or property invoked, and a name of a function containing a method invocation. The characteristics of a context of a method invocation may also include whether a method invocation is included in a conditional branch and identifiers indicating whether a method invocation is associated with an override, static, virtual, definition, abstract, and/or sealed keyword.
[0063] A device is disclosed that includes at least one processor and a memory. The device is configured to extract one or more features from a plurality of source code programs where a source code program has one or more method calls. The features represent a context in which a method is called in the source code program and at least one feature represents a location of the called method in the program. The device is further configured to generate one or more sequences of method calls of length n from the extracted one or more features. A sequence includes method calls occurring in successive order. A sequence includes a probability from transitioning from one method in a sequence to an immediately succeeding method in the sequence, wherein the sequences and probabilities are computed from usage patterns of historical source code programs. The device is further configured to train sequences to predict a method to complete a method invocation in a program using a context of the method invocation and at least one immediately preceding method invocation.
[0064] A sequence of method calls of length n are represented as an n-order Markov chain model. The features may include a name of a class associated with a method invocation, a name of a method or property invoked, a name of a function containing a method invocation, an indication of whether a method invocation is included in a conditional branch, and identifiers indicating whether a method invocation is associated with an override, static, virtual, definition, abstract, and/or sealed keyword. The features are extracted from a syntax tree and/or semantic model representation of the plurality of source code programs. The syntax tree and semantic model representation of a source code program is generated from a compilation of a source code program.
[0065] A method is disclosed that can implemented on a system or device disclosed herein which obtains at least one method invocation in a source code program occurring immediately preceding a current position in a source code editor, determines a class associated with input at the current position, utilizes a Markov chain model to predict one or more recommendations of methods to complete a method invocation at the current position, and produces the one or more predicted recommendations of methods using the Markov chain model using the at least one previous method invocation in the source code program and characteristics of a context at the current position.
[0066] The Markov chain model includes one or more sequences of method invocations where a sequence includes transition probabilities representing a likelihood of transitioning from one method invocation to another method invocation in a sequence. The method generates a data structure that tracks a syntax structure and semantic model of the source code program in the source code editor and uses the data structure to obtain the at least one previous method invocation in a source code program occurring immediately preceding the current position. The method uses the data structure to obtain the characteristics of the context of the current position. The method ranks the one or more predicted code completion recommendations in order of highest probability.
[0067] Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.

Claims

1. A system comprising:
one or more processors; and a memory;
one or more programs, wherein the one or more programs are stored in memory and configured to be executed by the one or more processors, the one or more programs including instructions for:
generating a data structure representing a syntactic structure and a semantic model of a program;
extracting a plurality of features from the data structure to construct one or more feature vectors, the plurality of features including characteristics of a context of a method invocation found within a program; and
training a sequential model for a first class from the one or more feature vectors to predict a next method invocation for code completion following one or more preceding method invocations of a same class as the first class, wherein the sequential model includes one or more sequences of method invocations of a same class with probabilities for transitioning between each method invocation in the one or more sequences.
2. The system of claim 1, wherein the sequential model is a n-order Markov chain model.
3. The system of claim 1, wherein the data structure includes a syntax tree and a semantic model.
4. The system of claim 1, wherein the characteristics of a context of a method invocation includes one or more of a spatial position of a method invocation, a name of a class associated with a method invocation, a name of a method or property invoked, and a name of a function containing a method invocation.
5. The system of claim 4, wherein the characteristics of a context of a method invocation includes whether a method invocation is included in a conditional branch.
6. The system of claim 4, wherein the characteristics of a context of a method invocation further includes identifiers indicating whether a method invocation is associated with an override, static, virtual, definition, abstract, and/or sealed keyword.
7. The system of claim 1, wherein the data structure is generated through compilation of the program.
8. A method, comprising:
obtaining at least one method invocation in a source code program preceding a current method invocation in a source code editor, wherein the at least one method invocation and the current invocation are of a same class;
utilizing a Markov chain model associated with the same class to predict one or more recommendations of methods to complete the current method invocation, wherein the Markov chain model includes one or more sequences of method invocations, a sequence including transition probabilities representing a likelihood of transitioning from one method invocation to another method invocation in a sequence; and
producing the one or more predicted recommendations of methods from the Markov chain model using the at least one previous method invocation.
9. The method of claim 8, further comprising:
generating a data structure that tracks a syntax structure and semantic model of the source code program in the source code editor.
10. The method of claim 8, further comprising:
using the data structure to obtain the at least one previous method invocation in a source code program occurring immediately preceding the current position.
11. The method of claim 8, further comprising:
determining that a context of the current method invocation is within a conditional branch; and
using a Markov chain model associated with conditional branches to determine a next method invocation.
12. The method of claim 8, further comprising:
ranking the one or more predicted recommendations in order of highest probability.
EP19702999.4A 2018-01-21 2019-01-14 Code suggestion based on machine learning Pending EP3740863A1 (en)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201862619806P 2018-01-21 2018-01-21
US15/939,742 US10671355B2 (en) 2018-01-21 2018-03-29 Code completion with machine learning
PCT/US2019/013417 WO2019143541A1 (en) 2018-01-21 2019-01-14 Code suggestion based on machine learning

Publications (1)

Publication Number Publication Date
EP3740863A1 true EP3740863A1 (en) 2020-11-25

Family

ID=67298648

Family Applications (1)

Application Number Title Priority Date Filing Date
EP19702999.4A Pending EP3740863A1 (en) 2018-01-21 2019-01-14 Code suggestion based on machine learning

Country Status (3)

Country Link
US (1) US10671355B2 (en)
EP (1) EP3740863A1 (en)
WO (1) WO2019143541A1 (en)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10628129B2 (en) * 2017-08-08 2020-04-21 Accenture Global Solutions Limited Intellectual automated security, performance and code generation framework
US10684851B2 (en) * 2017-11-03 2020-06-16 Vmware, Inc. Predicting software build outcomes
US11243750B2 (en) 2018-01-21 2022-02-08 Microsoft Technology Licensing Llc Code completion with machine learning
WO2019205146A1 (en) * 2018-04-28 2019-10-31 Entit Software Llc Recommending programmatic descriptions for test objects
US11645576B2 (en) 2018-04-29 2023-05-09 Microsoft Technology Licensing, Llc. Code completion for languages with hierarchical structures
US11061805B2 (en) * 2018-09-25 2021-07-13 International Business Machines Corporation Code dependency influenced bug localization
CN113383316B (en) * 2019-01-17 2022-11-25 维萨国际服务协会 Method and apparatus for learning program semantics
US10983761B2 (en) * 2019-02-02 2021-04-20 Microsoft Technology Licensing, Llc Deep learning enhanced code completion system
US11262984B2 (en) 2019-08-01 2022-03-01 Microsoft Technology Licensing, Llc. Multi-lingual line-of-code completion system
CN111090461B (en) * 2019-11-18 2023-04-28 中山大学 Code annotation generation method based on machine translation model
US20210157553A1 (en) * 2019-11-21 2021-05-27 International Business Machines Corporation Source code auto-suggestion based on structural and semantic features
US10817264B1 (en) * 2019-12-09 2020-10-27 Capital One Services, Llc User interface for a source code editor
CN111459491B (en) * 2020-03-17 2021-11-05 南京航空航天大学 Code recommendation method based on tree neural network
FI20205459A1 (en) 2020-05-05 2021-11-06 Qentinel Oy Predicting code editor
US11150880B1 (en) * 2020-06-11 2021-10-19 International Business Machines Corporation Automating an adoption of cloud services
US11513773B2 (en) 2020-07-09 2022-11-29 Microsoft Technology Licensing, Llc. Feedback-driven semi-supervised synthesis of program transformations
CN112114795B (en) * 2020-09-18 2022-02-11 北京航空航天大学 Method and device for predicting deactivation of auxiliary tool in open source community
CN112162746B (en) * 2020-10-29 2022-07-05 中国人民解放军国防科技大学 Automatic program construction method based on network knowledge convergence and iterative search
US11763078B2 (en) 2021-04-22 2023-09-19 Microsoft Technology Licensing, Llc Provisional selection drives edit suggestion generation
US11966446B2 (en) * 2022-06-07 2024-04-23 SuSea, Inc Systems and methods for a search tool of code snippets
US11874762B2 (en) 2022-06-14 2024-01-16 Hewlett Packard Enterprise Development Lp Context-based test suite generation as a service
US20230418566A1 (en) * 2022-06-22 2023-12-28 Amazon Technologies, Inc. Programmatically generating evaluation data sets for code generation models
CN115421701B (en) * 2022-11-07 2023-01-10 北京滴普科技有限公司 Method and system for generating cypher statement based on model

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7761858B2 (en) 2004-04-23 2010-07-20 Microsoft Corporation Semantic programming language
CN103415825B (en) * 2010-12-29 2016-06-01 汤姆逊许可公司 System and method for gesture identification
US9104525B2 (en) 2013-01-22 2015-08-11 Microsoft Technology Licensing, Llc API usage pattern mining
CA3039374A1 (en) 2016-10-06 2018-04-12 The Dun & Bradstreet Corporation Machine learning classifier and prediction engine for artificial intelligence optimized prospect determination on win/loss classification

Also Published As

Publication number Publication date
WO2019143541A1 (en) 2019-07-25
US20190227774A1 (en) 2019-07-25
US10671355B2 (en) 2020-06-02

Similar Documents

Publication Publication Date Title
US10671355B2 (en) Code completion with machine learning
US10990358B2 (en) Code completion for overloaded methods
US10628130B2 (en) Code completion of custom classes with machine learning
US11645576B2 (en) Code completion for languages with hierarchical structures
US11379190B2 (en) Deep learning enhanced code completion system
US11809842B2 (en) Multi-lingual line-of-code completion system
WO2020263402A1 (en) Machine learning retraining
US11243750B2 (en) Code completion with machine learning
US11586839B2 (en) Code completion of method parameters with machine learning
WO2022089188A1 (en) Code processing method, apparatus, device, and medium
US11599447B2 (en) Detection of runtime errors using machine learning
WO2023172307A1 (en) Constrained decoding for source code generation
EP3942404B1 (en) Code completion for overloaded methods
WO2021225691A1 (en) Code completion with machine learning

Legal Events

Date Code Title Description
STAA Information on the status of an ep patent application or granted ep patent

Free format text: STATUS: UNKNOWN

STAA Information on the status of an ep patent application or granted ep patent

Free format text: STATUS: THE INTERNATIONAL PUBLICATION HAS BEEN MADE

PUAI Public reference made under article 153(3) epc to a published international application that has entered the european phase

Free format text: ORIGINAL CODE: 0009012

STAA Information on the status of an ep patent application or granted ep patent

Free format text: STATUS: REQUEST FOR EXAMINATION WAS MADE

17P Request for examination filed

Effective date: 20200625

AK Designated contracting states

Kind code of ref document: A1

Designated state(s): AL AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HR HU IE IS IT LI LT LU LV MC MK MT NL NO PL PT RO RS SE SI SK SM TR

AX Request for extension of the european patent

Extension state: BA ME

DAV Request for validation of the european patent (deleted)
DAX Request for extension of the european patent (deleted)
RAP3 Party data changed (applicant data changed or rights of an application transferred)

Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC

STAA Information on the status of an ep patent application or granted ep patent

Free format text: STATUS: EXAMINATION IS IN PROGRESS

17Q First examination report despatched

Effective date: 20220318

REG Reference to a national code

Ref country code: DE

Ref legal event code: R079

Free format text: PREVIOUS MAIN CLASS: G06F0008330000

Ipc: G06N0005020000

GRAP Despatch of communication of intention to grant a patent

Free format text: ORIGINAL CODE: EPIDOSNIGR1

STAA Information on the status of an ep patent application or granted ep patent

Free format text: STATUS: GRANT OF PATENT IS INTENDED

RIC1 Information provided on ipc code assigned before grant

Ipc: G06N 20/00 20190101ALI20240109BHEP

Ipc: G06F 8/33 20180101ALI20240109BHEP

Ipc: G06N 7/01 20230101ALI20240109BHEP

Ipc: G06N 5/02 20060101AFI20240109BHEP

INTG Intention to grant announced

Effective date: 20240129

P01 Opt-out of the competence of the unified patent court (upc) registered

Effective date: 20240201