Although some may think the software development process begins with the software design, it properly begins much earlier. I have developed software at companies that did not comprehend the benefits of the software development process, and have had to implement a process beginning where I was in control, but would prefer to have had the process begin with system engineering. If systems engineering is part of the software development process, then the process is complete and the system development will proceed smoothly.
The process continues with requirements analysis and software design and implementation.
The software development process should not stop once the product has been delivered. Product maintenance should be a part of the process, otherwise the product may become a legacy system and require costly reverse engineering efforts to add enhancements.
There are not many tools available for reverse engineering MUMPS systems, so I had to develop my own.
When developing a new system or analyzing an existing system, it helps to have tools. I have found many tools available from commercial vendors, as well as a collection of excellent tools available from the open source community.
Much has been written about complexity for languages such as FORTRAN, C, etc., but I have not been able to find any descriptions of complexity for MUMPS systems, and due to the flexibility and power of the language, systems written in MUMPS may be among the most complex. I have tried to describe some of the complexity traits of MUMPS.
Out of necessity, I developed my own tools to analyze MUMPS systems
Some might wonder what the purpose of analysis tools would be. The following trivial example might give a brief view of analysis tool usage.
Since MUMPS code is text, it can be embedded in data. In an effort to analyze MUMPS code, I had to determine if code is contained in global data. By parsing the global data, I am able to identify code that is contained within globals.
Sometimes we receive requests to automate the translation of code from one language to another. I believe that if it is necessary to translate code, then it is better to reverse engineer the code to get the basic design, then re-design the system and then code it as a new system. It is very difficult to translate code automatically without losing some of the intent of the code. However, I did accept the challenge of creating a MUMPS to C++ transformer and have some sample code.
Since I created this site to document some of the skills learned during my career so far, it seemed that it would not be inappropriate to tell about me.
To me, a web site is a document, and as with any documentation, it should maintain a list of acronyms and references. I have read many books over the years, and found it difficult to remember which ones I got my information from, so I just listed a sub-set of some of the books in my collection.
The following pages are made from some of my notes on MUMPS, but some of the lessons learned can be applicable to systems written in any language.