This is a very simple question with a quite complex answer. There may be many approaches to migrating a COBOL application to other language, but there are many variables involved. I will try to be pragmatic:
I. Is the System still evolving/being fixed?
If there is a large number of changes in the source throughout your project, you are trying to hit a moving target. Don't. First stabilize the COBOL system by, unfortunatly, spending money improving it.
II. Check the gap:
- Are you going to eliminate COBOL or
- Are you going to eliminate Mainframe or
- Are you going to eliminate IMS DB or
- Are you going to eliminate __ ?
Beware that if you choose more than one alternative, break down your project into distinct phases. If you try more than one of those at a time, the difficulty will be the same as creating a new system and migrating its data.
III. Design the Target
Based on your answer to the previous question, you will decide what technology to use on the target system. In relation to the previous:
- Mainframe supports Java
- If you are migrating a 500+ MIPS system, make sure the target environment can handle it. And never ever buy a Application Server that can't stand that amount.
- DB2 is the de-facto relation database for mainframe
III. Remember Collating Sequence
If your source is mainframe, beware. A sorted file on the mainframe will be unsorted in ASCII systems.
IV. Chose your tools wisely
There isn't a perfect tool to migrate COBOL. IBM will say theirs is, Micro Focus will also, but all of then have pitfalls and many, many problems.
V. Data Strong
COBOL rely heavily on data. So you should spend more than half your project analyzing COBOL data structures. And the other half you will spend fixed what you couldn't get from analysis.
VI. Don't use in-house compilers
Using your own compiler doesn't mitigate any risk, but adds TCO. Buy one instead. The most reliable one will be from IBM, given its size. Micro Focus is investing in mainframe downsizing so it's another good choice.
VII. Buy tools for data analysis
Yeah.
VIII. Make sure you have time
This is perhaps the worse part. Testing a batch system take take hours to run and produces millions of business records will take days. Every fix you do on the source will take that many amount of hours to run again, and a lot of mandays to check.
*IX. Establish Acceptance Tests DURING ANALYSIS PHASE
Most COBOL systems are very old, which, unfortunately means that few people know how they work, and probably none knows every business rule implemented. Which means your acceptance you be hell, unless you make a very clear agreement with your client on how the both of you will consider the system functional and bug-free.
X. Migrate bugs
Always, whenever migrating an application, make sure you reproduce bugs.
XI. Beware of Other Languages
Mainframe has EZtrieve, Natural, Assembler living together with COBOL. If your source system is mainframe, make sure you only have COBOL sitting there.