In the early days of software development only assemblers were available. During the 1970s compilers, interpreters and symbolic debuggers have been developed. These tools introduced different high level programming languages adapted for specific software problems which are platform independent. This made it easier to concentrate on the problem instead of the actual implementation. Today's state of the art software development uses source code control systems to synchronize the development between different programmers and automatic code generators to create source code from high level descriptions of the problem[Fis91]. The requirements for a CASE environment are:
Project Definitionproject The definition of a project under development, a so called ``working project'' has to be simple. To lower the complexity of large projects, these are split into smaller sub-projects or modules. The dependences between projects form an acyclic graph. Sub-projects can be used by multiple parents whereas a module is part of only one project. This approach enforces a specific structuring and allows reuse of projects. Project and dependence definition ought to be system independent to allow development on different platforms at the same time, e.g., to develop under UNIX and VMS without the need of changing the project description. Specifying the same information multiple times for different systems is error-prone, therefore platform dependent files should be created from a common source.
Implicit relations between files, e.g., include dependences should be handled automatically. This information always has to be up-to-date and no programmer intervention should be required.
Building a Projectbuild The building of a project should be fast and comfortable for the developer. Only a minimum set of resources should be used, e.g., building of files which are not needed for the goal has to be avoided. This requires full dependence information across module and project boundaries. Two different building modes are useful:
In order to shorten the building process the update actions can be parallelized and executed out of order on a cluster of computers.
Multiple Developer Accessmultiple Today the size of projects requires that multiple developers work on the same set of source files. Each developer introduces local modifications in contrast to a common global code repository during development. Conflicts caused by modifications of the same source by different programmers must be handled automatically whenever possible. A history mechanism in the repository is required to track down changes. This is important in case an incompatible change was made.
The same mechanism can be used to tag a release (see release) in the code repository for later reconstruction. This allows to check for bugs reported by external users for a specific version.
Multiple Language Supportlanguage Many large scale software products are written in more than one implementation language. An orthogonal set of rules is required to support the different languages. This allows to select the language best suited for solving a specific problem within one project.
The language binding between these different domains is an error-prone task which should be automated by the environment. Additional information required by the binding tool has to be added by the developer to the source code, e.g., by special comments.
Automatic Code Generationcodegen Tools for automatic code generation from descriptions minimize the coding size for the developer. Standard tools under UNIX are
Use of External Resourcesexternal External resources are required if there are object files, libraries, and/or programs which are used within a project but not available as source code, e.g., a third party product. Using these resources must be simple.
Global installation (see install) of projects created by the environment are a special case of external resources. Reusing a stable global version of a project increases the speed of the building process.
Global Installationinstall Users can work with the programs of a global installation of a project without conflict with the developers who continue to work on their local version. Only a stable version of a project should be installed globally and marked in the code repository.
The structure of a global installation should be common for all projects which are controlled by the environment. This makes it easier especially for unexperienced users to use a project.
A global installed version of a project can be used by developers as an external resource without any further definitions. A local version of the project must override the global one.
Releasesrelease Releases are used to transfer projects either by source code or in binary form to external users. Usually releases are marked by a major and a minor number. For small corrections an additional patch level number is used. Three types of releases can be distinguished:
Each file belonging to the release is marked in the code repository to allow later reconstruction.
Software Qualityquality With increasing size and complexity of a software product it becomes more and more difficult to achieve a high standard in software quality. The following list contains some methods for achieving higher software quality. Furthermore the environment must be open to include in a simple manner new methods to increase software quality.
Graphical User Interfacegui A graphical user interface can be used as front end to control the tool, but it is not really required for the functional operation of a CASE environment. Of course a nice and easy to use environment is much more likely to be accepted by programmers than a command line oriented tool.
An additional intuitive and context sensitive help system should be added to make the usage of the tools easier.