1. Technical Field
The invention relates to issue tracking systems. More particularly, the invention relates to performing remote operations in an issue tracking environment.
2. Description of the Background Art
An issue tracking system is a computer software package that manages and maintains lists of issues, as needed by an organization. Issue tracking systems are commonly used, for example, in an organization's customer support call center to create, update, and resolve reported customer issues, or even issues reported by that organization's other employees. An issue tracking system often also contains a knowledge base containing information on each customer, resolutions to common problems, and other such data.
The most common issue tracking system's design is relatively simple. A database is the main storage repository for all data. The data is managed by the business logic layer of the application. This layer gives the underlying raw data more structure and meaning, preparing it for human consumption. The now human readable data are then presented to the support technician by another software application or Web page. The end-user of the issue tracking system can create entirely new issues, read existing issues, add details to existing issues, or resolve an issue. When a user of the system makes a change, the issue tracking system records the action and who made it, and thus maintains a history of the actions taken. Each user of the system may have issues assigned to them, that is, that user is responsible for the proper resolution of that issue. This is generally presented to the user in a list format. The user may have the option of re-assigning an issue to another user, if needed. For security, an issue tracking system authenticates its users before allowing access to the systems.
Issues
Issues can have several aspects to them. Each issue in the system may have an urgency value assigned to it, based on the overall importance of that issue. Critical issues are the most severe and should be resolved in the most expedient way possible, taking precedence over all other issues. Low or zero urgency issues are minor and should be resolved as time permits. Other details of issues include the customer experiencing the issue, whether external or internal, date of submission, detailed descriptions of the problem being experienced, attempted solutions or work-arounds, and other relevant information. As previously noted, each issue maintains a history of each change.
Workflow
An example scenario is presented to demonstrate how a common issue tracking system works:
A customer service technician receives a telephone call, email, or other communication from a customer about a problem. Some applications provide a built-in messaging system and automatic error reporting from exception handling blocks.
The technician verifies that the problem is real, and not just perceived. The technician also ensures that enough information about the problem is obtained from the customer. This information generally includes the environment of the customer, when and how the issue occurs, and all other relevant circumstances.
The technician creates the issue in the system, entering all relevant data, as provided by the customer.
As work is done on that issue, the system is updated with new data by the technician. Any attempt at fixing the problem should be noted in the issue system. Ticket status most likely is changed from open to pending.
After the issue has been fully addressed, it is marked as resolved in the issue tracking system.
If the problem is not fully resolved, the ticket is reopened once the technician receives information about failure of addressing problem from the customer.
One type of issue tracking system is a project tracking environment, such as provided by the JIRA product, offered by Atlassian, which is a proprietary system that is used for bug tracking, issue tracking, and project management. A bug tracking system or defect tracking system is a software application that is designed to help keep track of reported software bugs in software development efforts. It may be regarded as a type of issue tracking system. While there are many known implementations of project tracking systems, JIRA is written in Java and uses the Pico inversion of control container, Apache OFBiz entity engine, and WebWork 1 technology stack; for Remote Procedure Calls (RPC), JIRA supports SOAP, XML-RPC, and REST.
Tracking systems, such as JIRA, are used to capture and organize issues, prioritize and take action on important issues, and allow system users to stay up-to-date with the activity going on around them. Different organizations use such systems to track different kinds of issues. Depending on how an organization is using such system, an issue could represent a software bug, a project task, a helpdesk ticket, a leave request form, etc.
Issues may cross domains, enterprises, or organizations. Unfortunately, state of the art issue tracking systems cannot link issues to items that are external to the system installation, e.g. issues that reside on external applications or system instances.
An embodiment of the invention links issues to items that are external to the system installation, e.g. issues that reside on external applications or system instances. An embodiment of the invention provides remote issue links that connect issue tracking system issues to objects and pages in other applications, such as Web applications. In another embodiment of the invention, activity streams show events from all linked applications and third-party applications. A remote link API supports contribution to the issue tracking system activity stream.
Another embodiment of the invention allows a user to copy issues from one issue tracking system site to another. In this embodiment of the invention, once an application link is established between the local issue tracking system site and another, a new issue action remote copy appears in a view issue page. The user can limit this action to a particular user group, but by default in a preferred embodiment everyone can use it. The user is prompted to map field values by field names for the issue tracking system's built-in fields and/or to configure default values for required fields. In some embodiments of the invention, appropriate permissions are required to set the field value on the target site.
Issues are complex. Consider the fields shown in
See below for a list of statuses.
Some of the more important fields, i.e. Type, Priority, Status, and Resolution, are described as follows:
Issue Type
An issue tracking system can be used to track many different types of issues. Some of the more common types of issues are listed below.
Priority
An issue's priority indicates its relative importance. The default priorities are listed below; note that both the priorities and their meanings can be customized by an administrator to suit an organization.
Status
Each issue has a status, which indicates where the issue currently is in its lifecycle (workflow). An issue starts as being Open, generally progresses to Resolved, and then Closed or, depending on circumstances, it may progress to other statuses.
Resolution
An issue can be resolved in many ways, only one of them being Fixed. Some default resolutions are listed below.
Note that once an issue has been resolved, i.e. the issue's Resolution field is not empty, textual references to that issue show the key in strikethrough text.
Remote Issue Links
An embodiment of the invention links issues to items that are external to the system installation, e.g. issues that reside on external applications or remote instances. Thus, the invention provides a technique that connects people, teams and applications, in which users can share issues and search results with each other. An embodiment of the invention provides remote issue links that connect issue tracking system issues to objects and pages in other instances, such as Web applications. Activity streams show events from all linked applications and third-party applications. The remote link API supports contribution to the issue tracking system activity stream.
The herein disclosed remote issue links invention provides a powerful tool for linking issues to items that are external to an issue tracking system installation, i.e. issues that reside on external instances and applications. An embodiment of the invention uses a Java and REST API to add these links to the issue tracking system. In this way, users can add an issue link from one instance of an issue tracking system issue at one site to an issue on another instance of an issue tracking system or application at another site, including reciprocal links between these issues. Users can search for a page within a separate application from an issue within the issue tracking system and add an issue link to that page. Thus, in an embodiment of the invention users can add an issue link from an issue tracking system issue to any Web page URL, such as a page of documentation, a technical note, or any other page on another Web site.
The herein disclosed remote issue links invention offers a simple but powerful way to integrate an application with an issue tracking system. For example, if there is an object in an application that relates to an issue tracking system ticket, a user can link that object to that issue using such remote issue links. For example, a support ticket is created for an issue raised by a customer in a help desk system, and the bug that causes that issue is being tracked in an issue tracking system. In an embodiment of the invention, a single API call allows a link to be created in that issue pointing to the support ticket. Thus, a user can provide an icon, a title, a summary, even a status icon for the remote object.
indicates data missing or illegible when filed
In an embodiment of the invention, a remote issue link has the following construction:
public RemotelssueLink(Long id,
The following details the various elements of the above construction:
getId
public Long getId( )
Returns the id of the link. This is used to refer to a link when updating and deleting.
Returns: the id of the link
getIssueId
public Long getIssueId( )
Returns the id of the issue we are linking with.
Returns: the id of the issue we are linking with
getGloballd
public String getGloballd( )
Returns a String which uniquely identifies the object in the remote application.
This value must be unique across all remote objects in all remote applications. The maximum length of this field is 255 characters. For simplicity, this could simply be the URL.
This value is not displayed in the user interface. Including in this field any values that are needed by a renderer plugin is suggested, for example the application URL and remote object identifier to make REST calls.
For example: “url=http://www.myapplication.com&ticketid=12345”
Returns: a String which uniquely identifies the object in the remote application
getTitle
public String getTitle( )
Returns a String to identify the remote object. This is shown as the text for the URL in the user interface. For example: an issue key, a page title, a helpdesk ticket number
Returns: a String to identify the remote object
getSummary
public String getSummary( )
Returns a summary of the remote object. This is shown after the title in the user interface. For example: an issue summary, a helpdesk ticket title
Returns: a summary of the remote object
getUrl
public String getUrl( )
Returns a url to the object in the remote application. For example: a page URL
Returns: a URL to the object in the remote application
getIconUrl
public String getIconUrl( )
Returns a URL for an icon to represent the remote object. The size of the icon should be 16×16 pixels.
For example: http://mycompany.com/jira/images/icons/bug.png
Returns: a URL for an icon to represent the remote object
getIconTitle
public String geticonTitle( )
Returns the tool tip text for the icon. The applicationName is prepended to this value to form the icon tool tip text.
For example: “Bug—A problem which impairs or prevents the functions of the product”
Returns: the tool tip text for the icon
getRelationship
public String getRelationship( )
Returns a String which describes the relationship between the issue and the remote object.
For example: “relates to”, “is mentioned in”, “links to”. It could even be a simple noun, such as “Test Case”.
Returns: a String which describes the relationship between the issue and the remote object
isResolved
public Boolean isResolved( )
Returns a Boolean to indicate whether the remote object is resolved or not. If the value is true, it is resolved, and if the value is false, it is unresolved. This value only makes sense where the remote object is something that is resolvable, e.g. an issue, support ticket, etc. It does not make sense for things such as wiki pages. In that case, the value should be null. If the value is true, the remote issue link be shown in a strikethrough font in the user interface.
Returns: a Boolean to indicate whether the remote object is resolved or not
getStatusIconUrl
public String getStatusIconUrl( )
Returns a URL for an icon representing the status of the remote object. The size of the icon should be 16×16 pixels. This icon is shown next to the summary in the user interface, and is right justified. This icon does not have to strictly represent a status, and may instead represent some secondary information about the link.
For example: the status of an issue, the author of a test case
Returns: a URL for an icon representing the status of the remote object
getStatusIconTitle
public String getStatusIconTitle( )
Returns the tool tip text for the status icon. If null, no tool tip text is shown. This value is not used if the statusIconUrl is null.
Returns: the tool tip text for the status icon
getStatusIconLink
public String getStatusIconLink( )
Returns a hyperlink for the status icon. If null, no hyperlink is shown. This value is not used if the statusIconUrl is null.
Returns: a hyperlink for the status icon
getApplicationType
public String getApplicationType( )
Returns the type of remote application that is linked with. This should be the product name, namespaced with the product company. This value is not displayed in the user interface. Links are grouped based on the applicationType and applicationName in the user interface. Rendering plugins can register to render a certain type of application. It is not possible to use a plugin to render links without an applicationType.
For example: “com.atlassian.confluence”, “com.mycompany.myproduct”
Returns: the type of remote application that is linked with
getApplicationName
public String getApplicationName( )
Returns the human-readable name of the remote application instance that contains the remote object. Links are grouped based on the applicationType and applicationName in the user interface. The applicationName is prepended to the iconTitle to form the icon tool tip text.
For example: “My Company's Confluence”, “HR JIRA”, “Helpdesk JIRA”
Returns: the human-readable name of the remote application instance that contains the remote object
REST API
An embodiment of the invention uses a REST API in connection with remote issue links. Representational State Transfer (REST) is a known style of software architecture for distributed systems such as the World Wide Web. As such, REST itself is not discussed in greater detail herein. In some embodiments of the invention there are two required fields for creating a link to a remote object: a URL and a link title.
When a link is created, globalId: can optionally be supplied, which is an identifier that uniquely identifies the remote application and the remote object within the remote system. This globally unique identifier can be used to update or delete existing links on an issue.
If a remote link on the issue exists with the same URL, the remote link is updated. Otherwise it is created. The update replaces all existing fields with the new values. Fields not present in the request are interpreted as having a null value.
Implementation
Because issue tracking systems are complex, as are the data structures that underlie them, as can be seen from the discussion above, the implementation of a remote issue link in accordance with the invention is not trivial. For example, the issue tracking system may be required to display a link, but it is not necessarily able to know immediately how to display it.
Consider
In embodiments of the invention, the following approach can be used for the creation of the remote link. An external system injects the remote link details into an instance of the issue tracking system using the remote link REST API. In this case, the external system establishes the relationship between the remote object, i.e. the object in the external system, and an issue in the instance of the issue tracking system.
In alternative embodiments of the invention, the following approach can be used for the creation of a remote link. From the context of an issue in the issue tracking system, the user searches the remote system and selects a remote object to be linked to the current issue.
In embodiments of the invention, the following occurs for the display of remote link details on the View Issue page:
In embodiments of the invention, custom rendering plugins can also make permissioning and security decisions, i.e. when they contact the remote system, they can use the user context to decide what amount of information should be rendered. If, for example, the current JIRA user does not have permission to see the remote object or page, the custom renderer can choose to display information which indicates that the user does not have permissions.
Although other protocols may be used in various embodiments of the invention, an embodiment of the invention uses REST and/or HTTP for such calls. For example,
In this example, the outbound protocol is HTTP. A remote link type rendering plugin 42 (discussed above in connection with
The structure or implementation details of the remote applications and/or systems with which the issue tracking system communicates when remote links are displayed is not relevant. As long as the remote system has an API that the issue tracking system can communicate with while displaying the remote links, the system operates as desired.
The sophistication of the information that is displayed in the remote link section on the View Issue page, e.g. the derived or calculated information, is a function of what the remote system API can provide. In such case, a remote plugin 47 might have to make five REST calls to get the start dates of all of the dependent issues. Thus, an embodiment of the invention is concerned with providing a set of APIs with which a remote plugin can quickly get the information needed by the issue tracking system and then send a response back to the issue tracking system that is then rendered inside the View Issue page. In this regard, an issue may be thought of as an object tree, in which there are the main issue details at a top level, and then underneath that there might be a list of fixed versions, e.g. versions that might have a list of issue links. There is also a list of comments and a list of history. The REST request can ask for these items from the remote instance 46. For example, a comment has an author, an issue link has another issue linked to it.
One aspect of the invention shapes the data that is returned for the request, for example to manage size of payload and/or chattiness of the interaction. However, another application that is accessing the issue tracking system may know what it wants to show to its end user, e.g. a list of reported issues or a chart showing the user's progress. To accomplish such use case, the remote instance knows what data it needs, and so it formulates a query. The remote instance could replicate the issue tracking system's reporting functionality in some way. But often the remote instance has a specific purpose and requires a very specific view.
In an issue tracking system there is a client application that connects a user to an issue tracking system server. Embodiments of the invention use the REST API to show the same information as that shown in the issue tracking system, but remotely, e.g. in a Windows application. This requires flexible use of the issue tracking system API where, depending on what the user requests, different results can be returned. This is especially a problem for applications that are hard-coded for a specific use case with a single view.
In embodiments of the invention, a query defines two things: the substance of the query, i.e. what the user is looking for; and the range of information that must be returned to satisfy the user once an answer is found to the query. For example, a user can apply the same JQL expression to identify both a set of issues and the actual pieces of information that are to be returned. In embodiments of the invention, the issue tracking system knows that when it gets the query to look for the requested information but, with regard to all of the information that is available, only particular pieces of that information need to be returned. A serialization engine within the issue tracking system takes an object view of the issue and flattens it out into JavaScript Object Notation (JSON).
When the query is processed, it may be determined that the user only wants a subset of the data about the issues that match the JQL. Thus, in the query there is an instruction to the issue tracking system that tells it how to report the query back.
There is a set of options where the user can specify the list of desired fields. This shapes the information returned to satisfy the query. At the machine level a decision is made as to the form in which the information is to be reported back. The form is always the same, while REST API is purely a data API, i.e. a query interface that a remote system can use to get information out, all decisions as to form are made in the remote application. The issue tracking system has no decision in this process, but receives instructions from the remote instance for specific information, and the issue tracking system sends back exactly what is requested.
The foregoing discussion concerns the point that, with the issue tracking system REST API, clients or consumers can query for issue data using a very flexible query language (JQL) and can control the shape of the data that is returned. This allows clients to make optimization decisions, such as chattiness versus amount of data. In embodiments of the invention, the API provides very fine grain control of the data returned by the issue tracking system. Typically, this significantly reduces the implementation complexity on the client side and makes the client more robust because it only needs to know about subsets of the object tree that can be provided by the issue tracking system REST API.
One way to represent the way the data shape can be controlled is by drawing a tree structure and highlighting the branches of the tree that are included in the data returned to a client given a particular request. In embodiments of the invention, JSON is a naturally hierarchical data representation.
It should be appreciated that the REST API is not purely a data API. It also includes a command paradigm where, if the appropriate HTTP verb is used (POST, DELETE), data within the issue tracking system can be created, updated, or deleted.
Remote Issue Copying
Another embodiment of the invention allows a user to copy issues from one issue tracking system site to another. In this embodiment of the invention, once an application link is established (see the discussion below) between the local issue tracking system site and another, a new issue action, Remote Copy, appears in a view issue page. The user can limit this action to a particular user group, but by default in a preferred embodiment everyone can use it. The user is prompted to map field values by field names for the issue tracking system's built-in fields and/or to configure default values for required fields. In some embodiments of the invention, appropriate permissions are required to set the field value on the target site.
This embodiment of the invention takes into account the fact that there may be two very different schemas for the two different projects which reside at separate instances. They may not have overlapping fields. One may have a subset of the required fields. See, for example the issues 55, 56 in
In
In an embodiment of the invention, the local instance of the issue tracking system looks at the remote instance for a particular item, for example, and the remote system identifies how it handles this particular item, e.g. the fields that are used by the remote instance. Then the local instance looks internally against what the remote instance required to determine if the local instance can either compensate for the differences or if it needs to send an alert to bring in a human intervention. For example, if there are fields that are not filled in in the remote instance, then there are defaults, or they are not required because they can be dropped.
There is an API call within the issue tracking system REST API that supplies metadata about a given issue type within a given project context. Among other things, this metadata includes which fields are required, the possible values that “select list” type fields can take, and permissions on who can create issues. The “source” issue tracking system instance uses this REST call to make decisions about which fields can be copied to the “destination” issue tracking system instance unchanged and which fields require human intervention.
With regard to the architecture shown in
Scenario 1: Trusted apps where there is a single user. This example assumes that the user names match in both the local instance and the remote instance.
Scenario 2: An OAuth situation. This occurs where one system wants to use information from another system, but it first asks for the user's permission. The first step of giving permission is the user identifying himself. As part of establishing that the user is authenticated, the user who is interacting with a local instance may try to do something with the remote instance, after which the user is advised that he needs to authenticate with the remote instance. If the user is already logged into the remote instance, the user is advised that the local instance wants permission to provide information about the user in the remote instance. If the user is not logged in, he is prompted to log in, thus identifying himself in the remote instance. There is typically no persistent relationship stored between the two instances regarding the user's appearance at each instance, but the user is allowed to authorize the exchange of information between the two instances. The application links establishes authenticated, remote interactions between applications. A successful authentication and authorization results in issuance of a token that can be used for subsequent interactions between the two systems. This token typically has an expiry date.
In this example, if a user wants to copy and move something, the first step is to determine if the user is permitted to do so, as noted in the two scenarios above. In an embodiment of the invention, an administrator sets up the application links. If the user is set up as trusted, then the user never notices anything because he has permission to proceed immediately. If the user is set up on an OAuth system, then there is human intervention where the user, while in one instance, gives himself permission to act as himself on the other instance. Once this is done, the system looks at what is being copied. The View Issue page is refreshed and the user sees the issue, e.g. in an issue bundle, and the issue can be moved or copied, for example via a drag-and-drop user interface tool.
The instance of the user who wants to perform the action, i.e. at the local instance, asks the remote instance for its capabilities, i.e. it asks the remote instance what is needed, what are requirements. Once a user has authenticated with the remote instance, the user must first choose the destination project for the issue to be copied and/or moved. It is the issue type and/or project combination that allows the destination issue tracking system instance to describe its requirements fully for successful issue creation to the source issue tracking system instance. The local instance receives the requirements from the remote instance and then, as the instance is trying to copy and/or move an issue, provides information back to the user: “successful,” “need more information,” “just not possible; you don't have permission.” Those are all three possible outcomes: automatically possible; possible with a little bit of manual intervention; and then impossible because the user does not have permission to create issues on that remote project. This may be inherent in a particular issue that is at the remote instance, based on issue type.
In one embodiment of the invention, the remote instance gets a list of requirements from the local instance and compares these requirements to what it needs locally; and it either meets those requirements or it does not. One of the first steps when trying to perform a remote copy is to pick a destination for that issue in the remote instance, both in terms of the project and issue type. In some embodiments of the invention, the remote instance can tell the local instance what its requirements are. For example, suppose that the remote instance has five requirements: three are mandatory and two are optional. It looks to see what is coming over from the local instance and sees that the three mandatory requirements are present, so it automatically accepts the issue. But, if one of the mandatory requirements is missing, it does not automatically accept the issue; and if there are, for example, three extra items, it does not care and merely drops them, but otherwise accepts the issue.
In embodiments of the invention, both move and copy are provided. Moving the original means that the item is being relocated; copying the original means that the item stays in its original place and there is a copy of it at another location. In the case of a move, there is not an automatic defaulted copy in the case of loss of data. If there might be a loss of data due to incompatibilities between the source and target instance, i.e. one or more fields may not be present at the destination instance, then the system warns the user that these fields are missing from the destination instance, and a notification is sent to the user to let the user decide to proceed or not. Further, in embodiments of the invention a copy operation which copies an issue to a destination issue tracking system instance also establishes a remote issue link between both copies of the issue.
Other embodiments of the inventive remote linking functionality disclosed herein include the notion of linking with intent. That is, when two issues are linked in a way that designates them to be copies, then actions taken on one issue can affect the copy of the issue in the remote instance. Note, this is not restricted to just two copies of an issue. Some example use cases include:
Computer Implementation
The computer system 1600 includes a processor 1602, a main memory 1604 and a static memory 1606, which communicate with each other via a bus 1608. The computer system 1600 may further include a display unit 1610, for example, a liquid crystal display (LCD) or a cathode ray tube (CRT). The computer system 1600 also includes an alphanumeric input device 1612, for example, a keyboard; a cursor control device 1614, for example, a mouse; a disk drive unit 1616, a signal generation device 1618, for example, a speaker, and a network interface device 1628.
The disk drive unit 1616 includes a machine-readable medium 1624 on which is stored a set of executable instructions, i.e. software, 1626 embodying any one, or all, of the methodologies described herein below. The software 1626 is also shown to reside, completely or at least partially, within the main memory 1604 and/or within the processor 1602. The software 1626 may further be transmitted or received over a network 1630 by means of a network interface device 1628.
In contrast to the system 1600 discussed above, a different embodiment uses logic circuitry instead of computer-executed instructions to implement processing entities. Depending upon the particular requirements of the application in the areas of speed, expense, tooling costs, and the like, this logic may be implemented by constructing an application-specific integrated circuit (ASIC) having thousands of tiny integrated transistors. Such an ASIC may be implemented with CMOS (complementary metal oxide semiconductor), TTL (transistor-transistor logic), VLSI (very large systems integration), or another suitable construction. Other alternatives include a digital signal processing chip (DSP), discrete circuitry (such as resistors, capacitors, diodes, inductors, and transistors), field programmable gate array (FPGA), programmable logic array (PLA), programmable logic device (PLD), and the like.
It is to be understood that embodiments may be used as or to support software programs or software modules executed upon some form of processing core (such as the CPU of a computer) or otherwise implemented or realized upon or within a machine or computer readable medium. A machine-readable medium includes any mechanism for storing or transmitting information in a form readable by a machine, e.g. a computer. For example, a machine readable medium includes read-only memory (ROM); random access memory (RAM); magnetic disk storage media; optical storage media; flash memory devices; electrical, optical, acoustical or other form of propagated signals, for example, carrier waves, infrared signals, digital signals, etc.; or any other type of media suitable for storing or transmitting information.
Although the invention is described herein with reference to the preferred embodiment, one skilled in the art will readily appreciate that other applications may be substituted for those set forth herein without departing from the spirit and scope of the present invention. For example, embodiments of the invention allow the user to create remote issue links between the original and the copy.
Accordingly, the invention should only be limited by the Claims included below.
This application claims priority to U.S. provisional patent application Ser. No. 61/767,682, filed Feb. 21, 2013, which application is incorporated herein in its entirety by this reference thereto.
Number | Date | Country | |
---|---|---|---|
61767682 | Feb 2013 | US |