Iterative Translation Tuning

Agile Migration In a Nutshell

A key activity in the GMM is customizing the conversion process to improve the quality of the translations produced by the tool so they are more functionally correct, more conformant to .NET standards and best practices, and ultimately require less manual work to finish. The quality of output from translation process is driven by two main inputs:

  • The source migration unit (e.g., a VBP and the code files and COM files it references or a collection of ASP files that make up a web site). The source code is a production-tested, detailed, formal specification of the application functionality and, in general, putting this specification through a systematic transformation should result in a correct .NET code.  
  • The collection of translation rules and settings (e.g., a Translation Script and other translation configuration files). These rules help you bring additional information and direction to the conversion process and address situations where the resulting .NET code is either not correct or not "good enough" to meet your standards.

Incremental Refinement Revealed

Varying these inputs results in different translation conditions and different, hopefully better, .NET codes. This is typically done by comparing different translations using a text comparison tool (e.g. Beyond Compare, CSDiff) and incrementally refining the translation configuration so that problems are removed and improvements are retained.

File Comparison Tool

gmStudio does not implement a file comparison viewer internally; rather it will use whatever file comparision tool you select. The path to the external comparison tool and a command line specification for running it must be set from the User Default Screen.

gmStudio facilitates leverages comparisons  comparisons to refine the translation process:

Comparing to a Snapshot

When you run a translation, gmStudio saves a copy of the generated code in a text archive called a bundle file. Once this file has been saved, you can compare it to future translations to see the affect of configuration changes.

The steps for comparing to a Snapshot are listed below:

  1. Select [Run Translation] from the task context menu. 
  2. Select [Snapshot a Baseline] from the task context menu Choosing [Snapshot a Baseline] makes a copy of the last translation bundle file and stores it for safe keeping in the [workspace]\log\sav folder. 
  3. Alter the migration inputs (e.g., translation script, refactor libraries) 
  4. Select [Run Translation] from the task context menu 
  5. Click the [Compare] button on the Toolbar to see the effects of the changes. 
  6. Repeat the process to incrementally and iteratively refine the configuration to produce better .NET codes.

Snapshot Folder

The Snapshot process copies the latest actual translation script, translation log, code bundle, and generated IDF if applicable, from the working directory (workspace\log) to the snapshot folder (workspace\log\sav).

 

Comparing Two Migration Tasks

You can create two migration tasks that reference the same source code but have different Translation Scripts (and different TaskTags). The translations produced by the different scripts can be compared to see the effect of different combinations of settings.

The steps for comparing two migration tasks are listed below:

  1. Add two migration tasks to your migration project that both reference the same source code but have different translation scripts and different TaskTag values. Note that the TaskTag value will be included in the names of all output files and folders produced for the migration task. 
  2. Select both tasks and select [Run Translation] from the task context menu 
  3. Select both tasks and click the [Compare] button on the Toolbar to compare the two translations. 
  4. Repeat the process to incrementally and iteratively refine the configuration to produce better .NET codes.

Comparing Snapshots in Batch

If you are doing translation tuning on a large codebase with many VBPs or ASP pages, a question that will come up again and again is "what was the impact of my last configuration change?"  In order to answer this question efficiently, gmStudio provides an operation that reports which code bundles have changed. This operations can be invoked in several ways:

  • Select migration tasks and click \[Compare Snapshot] on the task context menu. This operation will set the LastMsg field to the summarized results of the comparison. 
  • Select \[Reports|Utilities|Target Code Changes] from the main menu.

Batch Comparison Tool

By default, the batch comparison process is done by running windows file comparison utility (fc.exe ) on each task then analyzing and recording the result.

Compare Snapshot Folder

The batch comparison process only reports differences in the code bundle file.  The snapshot comparison process compares composite snapshot files which, by default, include the actual translation script, the translation log, the bundle, and the associated IDF if applicable.  Sometimes you want to inspect changes in these snapshot files independently.  This can be done by clicking  \[Tools|Compare Snapshot Folder].  This operation will open the file comparision tool in folder comparison mode with the snapshot folder on the left and the working directory on the right.  This technique allows you to produce a detailed report of all changes using your preferred file comparison tool.  

Comparing Tool-generated and Hand-fixed Code

You will typically research translation refinement ideas by fixing and refactoring codes in a .NET IDE. After you make and verify a changes in the IDE, you can compare the hand-fixed code to the code that was generated automatically and then incorporate the refinements into the translation configuration.

The steps for comparing to hand-fixed code are listed below:

  1. Select [Run Translation] from the task context menu. 
  2. Select [Deploy Translation] from the task context menu 
  3. Click the [New IDE] button on the Toolbar to open the .NET code in the .NET IDE. 
  4. Modify the .NET code as desired and save the files 
  5. Select [Rebundle Translation] from the task context menu. This will produce a "new" bundle file and compare it to the last one generated by the tool. 
  6. Incorporate the changes into the migration process by modifying the Translation Script (e.g. Target Edits) and RefactorLibraries as needed. 
  7. Repeat the process to incrementally and iteratively refine the configuration to produce better .NET codes.