Software developers create software. As with any other craft, the software craftsman makes use of certain tools to create their work. Any system that aids a programmer in his task of delivering instructions to the computer may be considered a development tool.
A development environment is a collection of such development tools to aid the phases of the software development life cycle. Perry and Kaiser (1991) proposed a model for classifying the artifacts of a development environment into Structures, Mechanisms and Policies.
Structures refer to entities or composite entities that represent the software being developed. One example of which is the file system in UNIX-like operating systems but also tends toward more complex structures such as abstract syntax trees and graph structures. An example of a structure within a development environment would be source code files.
Mechanisms comprise languages and tools that are provided by the environment to work on the structures. These mechanisms may either be directly accessible to the developer or encapsulated behind higher level mechanisms which invoke the low level ones. It is difficult to completely divest mechanisms from policies especially since a mechanism may follow one or more policies for its execution. An example of a mechanism in a development environment would be the source version control software such as Git.
Policies are the constraints placed on the developer by their environment throughout the process of creating software. Policies are often wired into the structures and mechanisms. A policy may be enforced by the environment, in which case it is inviolable as long as one works within the environment. Conversely, a policy may merely be supported by the environment, in which case the decision to adhere to it is made outside the environment for instance via a management edict or development best practices. A supported policy means that the tools needed to adhere to that policy must be available even though they are not exclusive.
This model allows us to consider the components of the development environment as composable. For example, the policies of the environment may be configured using the environment’s mechanisms.
It is also crucial to the understanding of development environments to discuss them separately from typical operating system functionality such as memory management, data management and multiprogramming.
Development environments in older systems and even today in production environments are a collection of several specialised tools for separate activity. In UNIX-like operating systems these tools are often bundled with the OS installation (Zayour & Hajjdiab, 2013). These tools include pattern matching software such as grep and text editors such as vi and emacs.
In more recent times, this disparate toolchain has been merged into the software suite known as the Integrated Development Environment (IDE) which provides a uniform user experience across these tools (Kats et al., 2012). This integrated environment is also referred to as composition tools and covers all aspects of the software development life cycle including writing code, running tests to access functionality and quality as well as maintaining the application (Fylaktopoulos et al., 2016).
Reiss, S.P. (1996). Software tools and environments. ACM Computing Surveys, 28, 281–284. https://doi.org/10.1145/234313.234423.
Perry, D. E. & Kaiser, G. E. (1988). Models of software development environments. Proceedings of the 10th international conference on Software engineering. IEEE Computer Society Press, Washington, DC, USA, 60–68.
Dart, S. A., Ellison, R. J., Feiler P. H. & Habermann A. N. (1987). Software Development Environments. Computer 20. 11. 18–28. https://doi.org/10.1109/MC.1987.1663413.
Zayour, I., & Hajjdiab, H. (2013). How Much Integrated Development Environments (IDEs) Improve Productivity? Journal Of Software, 8, 2425-2431. https://doi.org/10.15439/2015F274
Kats, L., Vogelij, R., Kalleberg, K. & Visser, E. (2012). Software development environments on the web: A research agenda. Proceedings of the ACM international symposium on New ideas, new paradigms, and reflections on programming and software, Association for Computing Machinery, New York, NY, USA, 99-116. https://doi.org/10.1145/2384592.2384603.
Fylaktopoulos, G., Goumas, G., Skolarikis, M., Sotiropoulos, A. & Maglogiannis, I. (2015). An overview of platforms for cloud based development. SpringerPlus, 5. https://doi.org/10.1186/s40064-016-1688-5.