Some of the projects that I have led were projects to modernize or add enhancencements to legacy systems. Before we were able to start designing the modifications, it was necessary to reverse engineer the existing system to determine how it performed its functions. Although the reverse engineering effort left us with a detailed "as it is" design, we were able to bubble up the design to get a high level picture (design) of the system. We were able to reverse engineer the design within our budget through the use of existing tools to support our effort.
But, what about MUMPS?
There are systems written in MUMPS that are
legacy systems, and they deserve as much attention as the systems written
in other languages.
I was tasked by a large company in the San Diego area to lead the development of a set of tools to reverse engineer a large hospital system they maintained. The system was written in MUMPS. When the system was built, no funds were set aside for documentation or design. The originators of the system were not software engineers, but the actual users for the system. One of the advantages of MUMPS is that it is so easy to write that one doesn't have to go through the engineering rigors of requirements and design.
Needless to say, after more than ten years had gone by, the customer became curious about the design of the system. But unfortunately, there was none. Several of the large vendors that supplied reverse engineering tools were contacted, but tools for reverse engineering MUMPS were not found.
One vendor was willing to develop the tools for reverse engineering MUMPS if our company was willing to pay for the development and let the vendor have ownership of the tools. We would be allowed to purchase a non-exclusive licsense to use the tools at a discounted price.
We decided to develop the tools in house. The tools were good tools, but unfortunately, they were tailored to the in house MUMPS system. Even though MUMPS language is supposed to be portable, like any computer language, the code written in MUMPS is portable only if it is designed to be portable. In other words, when we say a language is portable, it doesn't mean that the code written in a language is portable.
To find out more about the tools I developed, or the reports and documenation I can provide, click here.