The Challenges Facing Software Engineering
November 2016
When attempting to speculate on the greatest challenges to face Software Engineering in the next couple of decades, it is perhaps best to start off with a look at the history of Software Engineering.
Little less than fifty years ago a conference was held in Germany that is generally accepted as the start of the field of Software Engineering as we know it today: The Nato Conference on Software Engineering.
According to Buxton (1990), this conference was attended by about 50 thought leaders and its primary consideration was the concern at the time with the so called “Software Crisis”: software projects that are overly expensive, often overdue and not satisfying criteria for reliability and safety. This is illustrated by some quotes of attendees of the conference: “I am concerned about the current growth of systems, and what I expect is probably an exponential growth of errors” (Opler) and “Programming is still too much of an artistic endeavour” (d’Agapeyeff) (Naur and Randell, 1969).
One gets the impression that this conference was held because people were getting anxious about the fact that advancements in computer science were progressing faster than the perceived ability at the time, to effectively and safely manage its application in the creation of software systems.
Very recently there have been advances in the field of Artificial Intelligence (AI), that in my view will present similar concerns to those the industry faced in 1968.
According to Wang et al. (2016), the utilisation of deep learning culminating the program AlphaGo beating a top ranked human Go player represents “… a history making event and a milestone in the quest for artificial intelligence (AI).” Wang et al. go further to state that “the age of new IT is coming.” The impact of these advancements is illustrated by a recent study by Mckinsey and Company (2016), that claims that 58% of employees’ activities can be automated.
The problem represented by artificial intelligent systems is that they are not developed in the same way that traditional software systems are developed. In the case of traditional systems, a real-world problem is modeled in software, components are built and tested, the program is deployed and changes are made to keep it up to date. In the case of neural network based systems, in effect, an artificial ‘brain’ is created and trained to solve a particular problem.
Traditional Software Engineering concepts may not apply to the development of artificial intelligent systems. According to Sommerville (2011), there are four activities fundamental to all software processes: Specification, Development, Validation and Evolution. The execution and relative importance of these activities differ significantly when developing AI systems.
As a first example, take for instance software component modeling using UML: some real world problem is modeled using diagrams and these diagrams are then abstracted into code to solve a problem. This differs significantly in the case of deep learning systems, as the code does not represent an abstraction of a real world scenario, but rather a network that, if presented with enough examples, will be able to solve a real world problem.
Secondly, the activity of validation also differs significantly between traditional and AI systems. In the case of traditional systems Unit testing can be performed, as well as integration testing as it is well understood how the program derives at its solution. In the case of AI systems, this is not possible: either the system beats a human player, or it does not!
Finally, the significance of evolution (bug fixes and enhancements after deployment) is greatly diminished in the case of AI systems: once it performs its task at human (or better) level, there is little further need to enhance the program.
Does our Software Engineering body of knowledge adequately prepare us for advancements in AI – are we perhaps facing another Software Crisis?
References
Buxton, J.N., (1990) ‘Software engineering—20 years on and 20 years back’, Journal of Systems and Software, 13(3), pp 153-155. Doi: http://dx.doi.org/10.1016/0164-1212(90)90091-Y.
Mckinsey & Company, (2016), ‘Four fundamentals of workplace automation’, Available At: http://www.mckinsey.com/business-functions/business-technology/our-insights/four-fundamentals-of-workplace-automation (Accessed: 5 November 2016)
Naur, P., Randell, B., (1969) ‘Software Engineering: Report on a Conference sponsored by the NATO Science Committee, Garmisch, Germany, 7th to 11th October 1968, Brussels, Scientific Affairs Division, NATO’.
Sommerville, I. (2011) Software Engineering. 9th edn. Boston: Addison-Wesley
Wang, F., Zhang, J.J., Zheng, X., Wang, X., Yuan, Y., Dai, X., Zhang, J. & Yang, L. (2016), ‘Where does AlphaGo go: from church-turing thesis to AlphaGo thesis and beyond’, IEEE/CAA Journal of Automatica Sinica, vol. 3, no. 2, pp. 113.