The software crisis has led lo several models that describe whole or parts of the software development process. This paper introduces a model which formally describes the later stages of this cycle where the code is modified. The code is treated as a simple string without any semantic or syntactic meaning. A set of operations to manipulate strings is defined, then five operators describing the more usual changes undergone by the code are introduced. A set of properties which allows to reduce the number of transformations needed to pass from a version of the code to another one is introduced. Then the operators are extended in order to grant their invertibility and their inverse versions are defined. Finally a tool which implements the changes described by the operators, keeps trace of the transformations and allows to navigate through the versions of the code, is described.