What Types of Software Development Tasks can be Automated?
The IDS (Interface Design Specification) can be automatically extracted from the data structures in the actual software.
If two modules in a system interchange messages, the data structures in the sender and receiver can be automatically generated, once the IDS or either the sender or receiver is coded.
Legacy Software in a legacy language like CMS-2 or JOVIAL can be automatically translated to a more commercial language like Java/Ada/C/C++/C#. What's more, the Legacy Software components can still be maintained in the Legacy language while the upgrades which are not needed in the Legacy Systems can be maintained the new language with the new code embedded in the Legacy code as comments. That way by not repeating code which is identical between the old and new systems, the "DRY" principle is followed.
Modifications of software required for it to run on multiple platforms can be done automatically by the appropriate tools.
Converting software between X-Windows, HP Widgets, and VMS Forms can be done automatically with the right tools.
The cost of maintaining Scenarios between different Baselines of a large simulator system can be dramatically reduced by developing a tool that keeps track of the differences between the Script Commands and change in data structure between different baselines. The scenario maintainers then only have to maintain the differences in the scripts between different baselines.
Certain types of systems consist of well defined transformations between different objects and coordinate systems which can be tedious to code manually. For example avionics software for Inertial Navigation Units embody 9 different coordinate systems which are difficult to keep track of. This can be done automatically, once each coordinate system has been named and assigned its properties. The code that transforms data from one set of coordinates to another can then be automatically generated.
Large simulators are driven by logic that is much easier to capture and understand in Decision Tables, than in code. Tools can then be written which translate the respective decision tables to code which follows the decision table logic.
There are many types of problems whose software models can be captured at a higher level of abstraction. This process is called meta-programming. The meta-programs can then be automatically translated to code in C/C++/Java/Ada ... The resulting programs then exhibit the required behaviors. Frameworks are what the tool sets that accomplish this are called. A well designed Framework can result in a reduction in software development cost of 1/2 to 1/10 of the usual manual methods. An example of such a Framework is "Ruby on Rails". Ruby on Rails provides a tool set that would enable a developer to create a completely functioning website with a Data Base back end in less than 1 Hour. Facebook and other social websites are written and maintained in Ruby On Rails.