The following detailed description of example implementations refers to the accompanying drawings. The same reference numbers in different drawings may identify the same or similar elements.
A user, such as a computer programmer, may create a document that includes program code (sometimes referred to herein as code). The document may also include non-code, such as a comment related to the code, a textual description of the code, or the like. The user may make a change to the code and forget to make a corresponding change to the non-code, or may make a change to the non-code and forget to make a corresponding change to the code. When the document is viewed at a later time, a viewer may have difficulty understanding the code if the non-code, associated with the code, describes the code incorrectly. Implementations described herein may overcome such difficulty by permitting a user to link code and non-code, and automatically updating one when the other is modified. For example, implementations described herein may update code to match an edit made to non-code, or may update non-code to match an edit made to code.
As further shown in
As shown in
Client device 210 may include one or more devices capable of receiving, generating, storing, evaluating, and/or providing program code and/or information associated with program code (e.g., non-code, a link between code and non-code, a document that includes code and non-code, etc.). For example, client device 210 may include a computing device, such as a desktop computer, a laptop computer, a tablet computer, a mobile phone (e.g., a smart phone, a radiotelephone, etc.), or a similar device. Client device 210 may compile and/or execute program code, and may ignore non-code portions when compiling and/or executing the program code. In some implementations, client device 210 may receive information from and/or transmit information to server device 230 (e.g., program code and/or information associated with program code).
Client device 210 may host TCE 220. TCE 220 may include any hardware-based component or a combination of hardware and software-based components that provides a computing environment that allows tasks to be performed (e.g., by users) related to disciplines, such as, but not limited to, mathematics, science, engineering, medicine, and business. In some implementations, TCE 220 may include a programming environment capable of executing program code. For example, TCE 220 may include a text-based environment (e.g., MATLAB® software by The MathWorks, Inc.), a graphically-based environment (e.g., Simulink® software, Stateflow® software, SimEvents® software, etc., by The MathWorks, Inc.; VisSim by Visual Solutions; LabView® by National Instruments; Agilent VEE by Agilent Technologies; Advanced Design System (ADS) by Agilent Technologies; Agilent Ptolemy by Agilent Technologies; etc.), or another type of environment, such as a hybrid environment that may include, for example, a text-based environment and a graphically-based environment.
TCE 220 may include, for example, a user interface that provides a code editor portion that permits a user to input program code (e.g., textual program code, graphical program code, etc.). TCE 220 may include a programming environment capable of executing the input program code. In some implementations, TCE 220 may permit the user to input non-code (e.g., a comment, plain text, rich text, an image, a video, a simulation, etc.) via the code editor. Additionally, or alternatively, TCE 220 may include a non-code editor portion that permits the user to input non-code.
Server device 230 may include one or more devices capable of receiving, generating, storing, evaluating, and/or providing program code and/or information associated with program code. For example, server device 230 may include a computing device, such as a server, a desktop computer, a laptop computer, a tablet computer, or a similar device. In some implementations, server device 230 may host TCE 220. In some implementations, client device 210 may be used to access one or more TCEs 220 running on one or more server devices 230. For example, multiple server devices 230 may be used to execute program code (e.g., serially or in parallel), and may provide respective results of executing the program code to client device 210.
In some implementations, client device 210 and server device 230 may be owned by different entities. For example, an end user may own client device 210, and a third party may own server device 230. In some implementations, server device 230 may include a device operating in a cloud computing environment. In this way, front-end applications (e.g., a user interface) may be separated from back-end applications (e.g., program code execution).
Network 240 may include one or more wired and/or wireless networks. For example, network 240 may include a cellular network, a public land mobile network (PLMN), a local area network (LAN), a wide area network (WAN), a metropolitan area network (MAN), a telephone network (e.g., the Public Switched Telephone Network (PSTN)), an ad hoc network, an intranet, the Internet, a fiber optic-based network, and/or a combination of these or other types of networks.
The number of devices and networks shown in
Bus 310 may include a component that permits communication among the components of device 300. Processor 320 may include a processor (e.g., a central processing unit (CPU), a graphics processing unit (GPU), an accelerated processing unit, etc.), a microprocessor, a microcontroller, and/or any processing component (e.g., a field-programmable gate array (FPGA), an application-specific integrated circuit (ASIC), an Arduino microcontroller, etc.) that interprets and/or executes instructions (e.g., according to an instruction set architecture), and/or that is designed to implement one or more computing tasks. In some implementations, processor 320 may include multiple processor cores for parallel computing. Memory 330 may include a random access memory (RAM), a read only memory (ROM), and/or another type of dynamic or static storage component (e.g., a flash, magnetic, or optical memory) that stores information and/or instructions for use by processor 320.
Storage component 340 may store information and/or software related to the operation and use of device 300. For example, storage component 340 may include a hard disk (e.g., a magnetic disk, an optical disk, a magneto-optic disk, a solid state disk, etc.), a compact disc (CD), a digital versatile disc (DVD), a floppy disk, a cartridge, a magnetic tape, and/or another type of computer-readable medium, along with a corresponding drive. In some implementations, storage component 340 may store TCE 220.
Input component 350 may include a component that permits a user to input information to device 300 (e.g., a touch screen display, a keyboard, a keypad, a mouse, a button, a switch, etc.). Output component 360 may include a component that outputs information from device 300 (e.g., a display, a speaker, one or more light-emitting diodes (LEDs), etc.).
Communication interface 370 may include a transceiver-like component, such as a transceiver and/or a separate receiver and transmitter, that enables device 300 to communicate with other devices, such as via a wired connection, a wireless connection, or a combination of wired and wireless connections. For example, communication interface 370 may include an Ethernet interface, an optical interface, a coaxial interface, an infrared interface, a radio frequency (RF) interface, a universal serial bus (USB) interface, a high-definition multimedia interface (HDMI), etc.
Device 300 may perform one or more processes described herein. Device 300 may perform these processes in response to processor 320 executing software instructions included in a computer-readable medium, such as memory 330 and/or storage component 340. A computer-readable medium is defined herein as a non-transitory memory device. A memory device includes memory space within a single physical storage device or memory space spread across multiple physical storage devices.
Software instructions may be read into memory 330 and/or storage component 340 from another computer-readable medium or from another device via communication interface 370. When executed, software instructions stored in memory 330 and/or storage component 340 may cause processor 320 to perform one or more processes described herein. Additionally, or alternatively, hardwired circuitry may be used in place of or in combination with software instructions to perform one or more processes described herein. Thus, implementations described herein are not limited to any specific combination of hardware circuitry and software.
The number of components shown in
As shown in
The document may include program code and non-program code. Program code (sometimes referred to herein as code) is to be broadly interpreted to include text-based code that may not require further processing to execute (e.g., C++ code, Hardware Description Language (HDL) code, very-high-speed integrated circuits (VHSIC) HDL (VHDL) code, Verilog code, Java code, another type of hardware and/or software based code that may be compiled and/or synthesized, etc.), binary code that may be executed (e.g., executable files that may be directly executed by an operating system, bitstream files that may be used to configure an FPGA, Java byte code, object files combined together with linker directives, source code, makefiles, etc.), text files that may be executed in conjunction with other executables (e.g., Python text files, Octave files, a collection of dynamic-link library (DLL) files with text-based combining, configuration information that connects pre-compiled modules, an extensible markup language (XML) file describing module linkage, etc.), source code (e.g., readable by a human), machine code (e.g., readable by a machine), or the like.
In some implementations, program code may include different combinations of the above-identified classes of code (e.g., text-based code, binary code, text files, source code, machine code, etc.). Additionally, or alternatively, program code may include code generated using a dynamically-typed programming language (e.g., the M language, a MATLAB® language, a MATLAB-compatible language, a MATLAB-like language, etc.) that may be used to express problems and/or solutions using mathematical notations. Additionally, or alternatively, program code may be of any type, such as a function, a script, an object, etc.
Non-program code (sometimes referred to herein as non-code) may refer to text (e.g., plain text, rich text, a programming comment, etc.), an image, a video, an equation (e.g., generated via LaTeX markup language), text generated based on a markup language (e.g., HyperText Markup Language (HTML), Extensible Markup Language (XML), etc.), a result generated by executing code (e.g., an output), an object with a file name, etc. Non-code may include, for example, information that is not parsed by client device 210, that is not interpreted by client device 210, that is not compiled by client device 210, and/or that is not executed by client device 210 (e.g., when client device 210 parses, interprets, compiles, and/or executes program code). Non-code may be associated with code. For example, a non-code portion of the document may refer to a code portion of the document (e.g., a programming comment may refer to program code that follows the comment), a non-code portion may be generated by executing a code portion (e.g., an array generated by executing program code), etc.
A code portion may refer to a portion of a program (e.g., a program included in the document), such as one or more lines of program code, a string of one or more characters of program code, a set of strings of program code, a block of program code, a function, a method, a script, an object, etc., and/or any combination of these or other portions of a program. A non-code portion may refer to a non-code portion of a document, such as one or more text strings included in the document, one or more characters included in the document, one or more images included in the document, one or more videos embedded in the document, one or more results provided in the document, etc., and/or any combination of these or other non-code portions.
As further shown in
For manual linking of the code portion and the non-code portion, client device 210 may receive a user selection of the code portion and the corresponding non-code portion. For example, a user may interact with a user interface of client device 210 to identify the code portion. Such input may be provided by, for example, clicking on the code portion (e.g., using mouse input), touching the code portion (e.g., using a touch screen display), navigating to the code portion (e.g., using keyboard input), etc. Additionally, or alternatively, the user may select a code portion, and may interact with the user interface (e.g., via a button, a menu item, etc.) to indicate that the code portion is to be linked to a corresponding non-code portion. Similarly, the user may interact with the user interface in a similar manner to select the non-code portion that corresponds to the code portion.
The user may select the code portion and the non-code portion in any order. In some implementations, the user may select multiple code portions that correspond to a single non-code portion, and/or may select multiple non-code portions that correspond to a single code portion. Additionally, or alternatively, the user may select multiple code portions that correspond to multiple non-code portions, and/or may select multiple non-code portions that correspond to multiple code portions.
In some implementations, client device 210 may permit a user to activate or deactivate a linking mode. When the linking mode is activated, client device 210 may permit the user to easily create links between a code portion and a non-code portion, such as by performing consecutive interactions (e.g., clicks) with the code portion and the non-code portion. Additionally, or alternatively, the user may click on a first portion, drag the cursor to a second portion, and release the click to indicate that a link is to be formed between the first portion and the second portion.
Once the user has selected one or more code portions and one or more non-code portions that correspond to one another, the user may provide input that causes client device 210 to link the selected portions. For example, the user may interact with an input mechanism (e.g., a menu item, a link, a button, etc.) that causes client device 210 to link the selected portions.
For automatic linking of the code portion and the non-code portion, client device 210 may search the code and the non-code, included in the document, to identify corresponding portions. For example, client device 210 may search the code to identify text (e.g., a function name, a variable name, a variable value, an object name, a class name, an operator, etc.) that matches text included in the non-code. Additionally, or alternatively, client device 210 may search the code to identify text that matches a file name of an object included in the non-code. For example, an image in the non-code may be associated with a particular file name, and client device 210 may determine that the file name (or a portion of the file name) matches text included in the code.
Additionally, or alternatively, client device 210 may obtain a data structure that identifies corresponding code and non-code portions, and may use information identified in the data structure to search for corresponding portions. For example, the data structure may indicate that an equal sign (e.g., “=”) corresponds to the word “equals.” In this case, client device 210 may search the code to identify an equal sign, and may search the non-code for the corresponding word “equals.” Other example operators that may be linked to text include × (e.g., times, multiply, multiplied by, etc.), / (e.g., divide, divided by, etc.), + (e.g., plus, add, sum, etc.), − (e.g., minus, subtract, etc.), > (e.g., greater than), < (e.g., less than), >= (e.g., greater than or equal to), <= (e.g., less than or equal to), or the like.
Client device 210 may obtain a set of rules that control the automatic linking process, in some implementations. For example, the set of rules may specify how closely two or more portions must match before being linked (e.g., an exact match, a case-sensitive match, a case-insensitive match, a quantity of characters permitted to differ, a Levenshtein distance between two strings, etc.). Additionally, or alternatively, client device 210 may determine corresponding portions of the document based on a proximity of the portions within the document. For example, text included in a programming comment that directly precedes a particular line of code is more likely to be associated with the particular line of code than a comment that appears thirty lines after the particular line of code. The set of rules may specify how proximate two or more portions must be before being linked (e.g., included in consecutive sections of the document, a permitted quantity of intervening sections, a permitted quantity of intervening characters, etc.).
In some implementations, client device 210 may partition the document into sections. For example, client device 210 may include a code portion and a non-code portion in different sections. A section of code may include, for example, a line of code, a block of code, a function, etc. Additionally, or alternatively, client device 210 may analyze the document to identify white space (e.g., two or more carriage returns between lines of text), different text styles (e.g., different fonts, different text sizes, different paragraph styles, etc.), headings (e.g., based on a rich text format, a markup language, etc.), etc., and may use this information to partition the document into sections. Client device 210 may link corresponding portions if the corresponding portions are within a threshold quantity of consecutive sections (e.g., if a quantity of intervening sections, between corresponding sections that include the corresponding portions, satisfies a threshold).
Client device 210 may calculate a linkage score based on one or more factors (e.g., a degree to which portions match, a proximity of portions, etc.), in some implementations. For example, client device 210 may calculate the linkage score by combining multiple factor scores associated with respective multiple factors. Client device 210 may calculate the linkage score by applying a same weight to different factor scores, or by applying a different weight to different factor scores. Client device 210 may compare one or more factor scores and/or a linkage score to a threshold, and may determine whether to link portions of the document based on whether the factor score(s) and/or the linkage score satisfies the threshold.
In some implementations, client device 210 may prompt the user to confirm a link (e.g., based on performing an automatic link determination). For example, client device 210 may provide an indication of a code portion and a corresponding non-code portion (e.g., via a user interface), and may provide a prompt that asks the user to confirm whether the portions are to be linked. If the user provides input indicating that the portions are to be linked, then client device 210 may link the portions. If the user provides input indicating that the portions are not to be linked, then client device 210 may prevent the portions from being linked. In some implementations, one or more corresponding portions of the document may be linked via a manual linking process, and one or more corresponding portions of the document may be linked via an automatic linking process.
As further shown in
Additionally, or alternatively, client device 210 may provide a link indicator for display via a user interface of client device 210. The link indicator may indicate that a code portion and a non-code portion have been linked. In this way, code portions and non-code portions may be linked for further processing, as described herein in connection with
Although
As shown in
As shown in
As shown in
As indicated above,
As shown in
As indicated above,
As shown in
Client device 210 may provide a link indicator by providing a first indicator, associated with a code portion, and a second indicator, associated with a corresponding non-code portion, in the same manner. For example, client device 210 may highlight the corresponding portions (e.g., using a same color), may outline the corresponding portions (e.g., using a same color, line weight, line style, etc.), may mark the corresponding portions (e.g., using a same number, letter, character, symbol, etc.), or the like. Additionally, or alternatively, client device 210 may provide a link indicator by connecting the corresponding portions (e.g., by displaying a line that connects the corresponding portions on the user interface). In some implementations, client device 210 may provide different link indicators (e.g., associated with different linked portions), in a different manner (e.g., using a different color, a different line style, a different marking, etc.).
Client device 210 may show or hide a link indicator for a particular type of link, in some implementations. A type of link may include, for example, a one-to-one link (e.g., one code portion corresponding to one non-code portion), a one-to-many link (e.g., one code portion corresponding to multiple non-code portions, or one non-code portion corresponding to multiple code portions), a manually-generated link (e.g., a link formed based on performing a manual linking process, as described elsewhere herein), an automatically-generated link (e.g., a link formed based on performing an automatic linking process, as described elsewhere herein), a link formed based on a match (e.g., a match between text included in the corresponding portions), a link formed based on a data structure (e.g., a match between portions identified as being associated in a data structure), etc.
Additionally, or alternatively, client device 210 may provide a sequence of link indicators for display in a particular order. The particular order may correspond to an order in which linked code portions appear in the document (e.g., from beginning to end, top to bottom, left to right, etc.), an order in which linked non-code portions appear in the document, etc. For example, client device 210 may provide a first link indicator for display, and may hide one or more other link indicators (e.g., all other link indicators). The first link indicator may indicate a link between a first code portion and a first non-code portion that appear near the top of the document. Client device 210 may receive an indication to show a next link (e.g., based on user input). Based on receiving the indication, client device 210 may hide the first link indicator, and may show a second link indicator. The second link indicator may indicate a link between a second code portion and a second non-code portion that appear further down in the document than the first code portion and the first non-code portion.
In this way, a user may easily see links between code portions and non-code portions, and may navigate through the links in various ways.
Although
As shown in
As shown in
As shown in
As shown in
As indicated above,
As shown in
Client device 210 may detect a change to a first linked portion by determining that text included in the first linked portion has changed, in some implementations. For example, a user may interact with a user interface of client device 210 to modify the text of the first linked portion (e.g., by inserting text, removing text, modifying text, etc.). Based on detecting the change to the first linked portion, client device 210 may modify a second linked portion that is linked to the first linked portion.
As an example, when the first linked portion matches the second linked portion, client device 210 may modify the second linked portion so that the text included in the second linked portion matches the modified text of the first linked portion. As another example, when the first linked portion and the second linked portion are linked based on a relationship identified in a data structure (e.g., as with “=” and “equals,” “×” and “times” or “multiply,” etc.), client device 210 may modify the second linked portion to display information identified in the data structure as sharing a relationship with the modified first linked portion. In some implementations, client device 210 may prompt a user to confirm a change to the second linked portion.
When the non-code portion is a result generated by executing the code portion, client device 210 may receive input that changes the result, and may modify the code portion based on the changed result. For example, client device 210 may generate and display an array based on executing a code portion. The user may interact with the array to change one or more values in the array. Client device 210 may detect this change, and may modify the code portion used to generate the array based on the change to the displayed array.
In some implementations, a user may provide input to delete a first linked portion and/or a link indicator associated with the first linked portion. In this case, client device 210 may delete the second linked portion (e.g., in addition to deleting the first linked portion and the link indicator). Client device 210 may remove, from a data structure, information identifying the link.
Although
As shown in
As shown in
As shown in
As shown in
As indicated above,
As shown in
As shown in
As shown in
As shown in
As shown in
As shown in
As shown by reference number 1160, assume that when the user replaces the plus sign (+) in the top code section with the minus sign (−), client device 210 changes the text “adds” to “subtracts” and also changes the text “plus” to “minus.” Finally, as shown by reference number 1165, assume that when the user changes “greater than” to “less than,” client device 210 changes the greater than sign (>) to a less than sign (<). As shown by reference number 1170, client device 210 may prompt the user to accept the changes. Assume that the user accepts the changes.
As shown in
As indicated above,
The foregoing disclosure provides illustration and description, but is not intended to be exhaustive or to limit the implementations to the precise form disclosed. Modifications and variations are possible in light of the above disclosure or may be acquired from practice of the implementations.
As used herein, the term component is intended to be broadly construed as hardware, firmware, or a combination of hardware and software.
Some implementations are described herein in connection with thresholds. As used herein, satisfying a threshold may refer to a value being greater than the threshold, more than the threshold, higher than the threshold, greater than or equal to the threshold, less than the threshold, fewer than the threshold, lower than the threshold, less than or equal to the threshold, equal to the threshold, etc.
It will be apparent that systems and/or methods, as described herein, may be implemented in many different forms of software, firmware, and hardware in the implementations illustrated in the figures. The actual software code or specialized control hardware used to implement these systems and/or methods is not limiting of the implementations. Thus, the operation and behavior of the systems and/or methods were described without reference to the specific software code—it being understood that software and hardware can be designed to implement the systems and/or methods based on the description herein.
Even though particular combinations of features are recited in the claims and/or disclosed in the specification, these combinations are not intended to limit the disclosure of possible implementations. In fact, many of these features may be combined in ways not specifically recited in the claims and/or disclosed in the specification. Although each dependent claim listed below may directly depend on only one claim, the disclosure of possible implementations includes each dependent claim in combination with every other claim in the claim set.
No element, act, or instruction used herein should be construed as critical or essential unless explicitly described as such. Also, as used herein, the articles “a” and “an” are intended to include one or more items, and may be used interchangeably with “one or more.” Also, as used herein, the term “set” is intended to include one or more items, and may be used interchangeably with “one or more.” Where only one item is intended, the term “one” or similar language is used. Further, the phrase “based on” is intended to mean “based, at least in part, on” unless explicitly stated otherwise.
Number | Name | Date | Kind |
---|---|---|---|
5862379 | Rubin et al. | Jan 1999 | A |
7346849 | Mulligan et al. | Mar 2008 | B1 |
20080250394 | Jones et al. | Oct 2008 | A1 |
20080263518 | Bank et al. | Oct 2008 | A1 |
20130185700 | Avrahami et al. | Jul 2013 | A1 |
Entry |
---|
Nagano et al., Recovering Traceability Links between Code and Documentation for Enterprise Project Artificats, IEEE 2012, 11-18. |