Software tools are now available to support most routine activities in the software process. These tools support editing of different types of document (designs, programs, etc.), compilation and debugging, and information management. Information management tools collect information about the system and allow users to browse and query that information. For example, a requirements traceability tool will allow users to examine the dependencies between requirements.
Tool-supported software development was initially known as CASE – Computer Aided Software Engineering. Early advocates of CASE suggested that orders of magnitude improvement were likely if integrated CASE tools were used. Significant improvements are possible for programming activities (integrated editing, compilation and debugging) but, for larger projects, the impact of CASE has been less dramatic. The improvements for larger projects that have been achieved are of the order of 40% (Huff, 1992). Although this is significant, the predictions when CASE tools were first introduced in the 1980s and 1990s were that the use of CASE technology would generate huge savings in software process costs.
The improvements from the use of software tools are limited by three factors:
- For large projects, the major problems are caused by poorly defined requirements and requirements that change to reflect changing business needs. These lead to extensive rework of the software. These result in unforeseen costs and delays to the software development. As this is a business rather than a technical problem, tool support cannot reduce these costs.
- Software engineering is, essentially, a design activity based on creative thought. Software tools automate routine activities but attempts to harness artificial intelligence technology to provide support for design have not been successful.
- In most organisations, software engineering is a team activity and software engineers spend quite a lot of time interacting with other team members. Although tools for collaboration are improving, they are still fairly limited and do not support creative processes in an effective way.
My software tool classification sets out a number of different ways of classifying software development tools.
Integrated development environments (IDEs) are made up of a number of integrated software tools that support one or more general software process activities such as requirements, design or programming. They will always include a source code editing system, compiler and debugger.
Programming environments are the most mature IDEs and environments are now available for many different programming languages such as Java, Python, Ruby, etc. Programming environments generally include an integrated program editor, compiler and debugging environment. From within this environment, the editor maintains the syntax of the program and the user can seamlessly compile and debug the program.
IDEs are also available for requirements engineering and for the UML.
The open-source ECLIPSE environment is a framework for building IDEs and provides a basis for linking separately written tools. Therefore, an instance of an ECLIPSE environment might include tools for creating system models using UML and programming tools (in Java, say) to develop these models into executable programs. Many different instances of ECLIPSE, geared towards different application domains, are now available.
References
Huff, C. C. (1992). Elements of a realistic CASE tool adoption budget. Comm. ACM, 35 (4), 45-54.