Copy the page URI to the clipboard
Hall, Jon G. and Rapanotti, Lucia (2015). A General Theory of Engineering: Thinking Bigger than Software. Technical Report 2015/01; Department of Computing, The Open University.
DOI: https://doi.org/10.21954/ou.ro.000160c7
Abstract
Context:. Software engineering is a discipline that has been shaped by over 50 years of practice. Driven primarily by the needs of industry, a theoretical basis has been slow to develop.
Objective:. A cogent theory of software engineering improves the maturity of our discipline, placing it alongside other engineering disciplines whose theories are apparent. Moreover, given that software engineering produces some of the most complex and versatile objects that have ever been designed, we might also like to reflect whether what has been learned in software engineering might not be usefully reflected in other engineering areas.
Method:. The theory was developed through empirical observation of practice together with philosophical argument from which a principled basis was developed. The paper brings together and explicates over 10 years of research in this area.
Results:. We describe two theories of software engineering. The first special theory brings together phenomena of specific interest to software engineering , systematising concepts and practices in a way that attempts to capture how software engineers go about addressing real-world problems. The second general theory embeds software engineering in a general theory of engineering, in passing showing that the phenomenological and process bases of software engineering usefully extends to the more general setting.
Conclusions:. The theories we have proposed capture and generalise relationships between some of the most important elements that are found in Software Engineering, by introducing a systematisation of concepts and 1 practices. In addition, we have demonstrated their analytic and explanatory features. The general theory is predictive in suggesting interventions in engineering processes that reduce process risk, both for software and when software is a component of a multi-technology system.