BACKGROUND

The present invention relates to software service fixes and, more specifically, to remedying bad service fixes that have subsequent dependent fixes.

From time to time, a software product may require a fix, either to correct a bug or to add or modify features. Generally, a fix, also referred to as a service fix or a patch, is installed on top of the software product and, further, on top of prior fixes. In some software products, fixes are developed and supplied on a part by part basis. A part is a small, serviceable unit, such as an object module or a source sample. A particular fix modifies one or more distinct parts, and in some cases, a fix can modify thousands of parts. Generally, a fix includes only the parts being modified and does not require modification of other parts of the software product.

Because each fix can address multiple parts, sometimes fixes intersect, which is the case when fixes service a common part. For instance, a first fix that modifies parts A, B, and C of a software product intersects with a second fix that modifies parts C, D, and E. Because both fixes modify part C, these fixes intersect. For fixes that intersect, a relationship may exist between the fixes, where that relationship provides guidance as to how those fixes should be installed with respect to each other. The relationship of another fix to a first fix can be one of the following:

PRE: Prerequisite. To install the first fix on a computer system, the computer system must have each prerequisite fix installed.

SUP: Supersedes. A superseding fix totally replaces the corresponding superseded fix, updating all parts that the superseded fix updated or created. Any relationships involving the superseded fix must be brought forward into the superseding fix, and the superseded fix need not be applied if not yet applied.

Thus, installation of a fix is not achieved by simply over copying existing files on the target computer system. Rather, an installation management program can be used to manage the versions of each part in a software product, as well as the state of each existing fix. Specifically, the installation management program maintains a graph of all existing fixes, showing how the fixes relate to one another. Each new fix adds a new node to the graph and also adds one or more edges indicating relationships. As fixes are developed, the graph can become complex. A service tool for developers contains the complete graph, with all fixes and all relationships, but each computer system used by a customer maintains a respective graph applicable to that computer system. On such a computer system, the graph is a subset of the complete graph, as it is likely that not all fixes have been installed. Given the numerous combinations in which fixes can be installed, numerous versions of the software product, including fixes, can exist across computer systems.

When a new fix is packaged (i.e., rolled into installable files and ready for distribution), a service packaging tool used by fix developers utilizes the service history for each part in the new fix to determine which other fixes are prerequisites of, or superseded by, the new fix. This relationship information is stored within the packaging of the fix and defines fixes that a customer needs to install before or alongside the new fix. If this were not enforced by the software installation process, failures could result during installation or during later execution of the software product.

Thus, each fix includes in its packaging an indication of where it fits in the graph. Thus, when a computer system begins installation of the fix, the installation process can notify a user of any necessary other fixes that require installation. The installation process ensures that dependencies are satisfied with respect to the fix being installed and related fixes.

For a large software product, fixes are sometimes developed in parallel, and those fixes are potentially intersecting. A normal development pipeline will have numerous fixes under development at a time. This pipeline of fixes might be packaged serially, in quick succession, before the final stage of testing takes place. Then the fixes are installed together for testing.

SUMMARY

Embodiments of the present invention are directed to a computer-implemented method for generating a remedial fix to correct a bad fix. A non-limiting example of the computer-implemented method includes identifying a bad fix to a software product, where the software product includes a plurality of parts, and where the bad fix presents an error into a first part of the software product. A plurality of fixes to the software product are representable by a dependency graph indicating dependencies among the plurality of fixes to the software product, and the bad fix is among the plurality of fixes. The dependency graph is recursively traversed to identify a subset of fixes that are dependent on the bad fix, where each fix in the subset of fixes includes a respective set of parts, and to add a reference to a respective most recent version of each part of each fix in the subset of fixes to a parts datastore. A remedial part and each part referenced in the parts datastore are packaged into a remedial fix, where the remedial part includes a correction to the error in the first part.

Embodiments of the present invention are directed to a system for generating a remedial fix to correct a bad fix. A non-limiting example of the system includes a memory having computer-readable instructions and one or more processors for executing the computer-readable instructions. The computer-readable instructions include identifying a bad fix to a software product, where the software product includes a plurality of parts, and where the bad fix presents an error into a first part of the software product. A plurality of fixes to the software product are representable by a dependency graph indicating dependencies among the plurality of fixes to the software product, and the bad fix is among the plurality of fixes. Further according to the computer-readable instructions, the dependency graph is recursively traversed to identify a subset of fixes that are dependent on the bad fix, where each fix in the subset of fixes includes a respective set of parts, and to add a reference to a respective most recent version of each part of each fix in the subset of fixes to a parts datastore. A remedial part and each part referenced in the parts datastore are packaged into a remedial fix, where the remedial part includes a correction to the error in the first part.

Embodiments of the invention are directed to a computer-program product for generating a remedial fix to correct a bad fix, the computer-program product including a computer-readable storage medium having program instructions embodied therewith. The program instructions are executable by a processor to cause the processor to perform a method. A non-limiting example of the method includes identifying a bad fix to a software product, where the software product includes a plurality of parts, and where the bad fix presents an error into a first part of the software product. A plurality of fixes to the software product are representable by a dependency graph indicating dependencies among the plurality of fixes to the software product, and the bad fix is among the plurality of fixes. Further according to the method, the dependency graph is recursively traversed to identify a subset of fixes that are dependent on the bad fix, where each fix in the subset of fixes includes a respective set of parts, and to add a reference to a respective most recent version of each part of each fix in the subset of fixes to a parts datastore. A remedial part and each part referenced in the parts datastore are packaged into a remedial fix, where the remedial part includes a correction to the error in the first part.

Additional technical features and benefits are realized through the techniques of the present invention. Embodiments and aspects of the invention are described in detail herein and are considered a part of the claimed subject matter. For a better understanding, refer to the detailed description and to the drawings.

