Applications of AI in classical software engineering

Although Artificial Intelligence (AI) has become a buzzword for self-organizing IT applications, its relevance to software engineering has hardly been analyzed systematically. This study combines a systematic review of previous research in the field and five qualitative interviews with software developers who use or want to use AI tools in their daily work routines, to assess the status of development, future development potentials and equally the risks of AI application to software engineering. The study classifies the insights in the software development life cycle. The analysis results that major achievements and future potentials of AI are a) the automation of lengthy routine jobs in software development and testing using algorithms, e.g. for debugging and documentation, b) the structured analysis of big data pools to discover patterns and novel information clusters and c) the systematic evaluation of these data in neural networks. AI thus contributes to speed up development processes, realize development cost reductions and efficiency gains. AI to date depends on man-made structures and is mainly reproductive, but the automation of software engineering routines entails a major advantage: Human developers multiply their creative potential when using AI tools effectively.


Introduction
Artificial intelligence has become a buzzword in popular and academic media. The prophecies and futuristic legends connected to artificial intelligence are multiple and well known: Computers will take over classical human engineering and development jobs [1], could even fully substitute human productivity by intelligent automation [2] and -in the worst casegovern a machine dominated brave new world [3]. In such scenarios classical software engineers would possibly become obsolete since machines could take over their tasks. Software would possibly not require any external engineering any more but develop self-reliantly [4][5][6]. Karpathy (2017) calls neural networks as a "software 2.0" which in the long run will supersede classical programming, like Java or C++, which mainly done by humans: AI could enable computers to self-reliantly produce code and solve problems [7].
To date, however -as compared to these future visions -artificial intelligence is in its beginnings, which shines up when searching for a recognized definition of the term. Intelligent biological and ideally intelligent artificial systems (e.g. machines) dispose of the ability to "think and learn" [8,9]. Differential psychology distinguishes intelligence -as rational reflection -from other forms of mental activity, like emotionality and creativity. Factor models analyzing intelligent behavior count spatial perception, numerical abilities, memory, reasoning as well as verbal expression and interpretation among intelligent mental abilities [10,11].
Artificial intelligence today is an umbrella term used for a set of computer-based routines which approximate human intelligence in the way that alternatives are weighed, new information is considered and integrated into existing data structures and new conclusions are reached by inference from qualitative or quantitative data or probabilistic estimates [12]. AI routines differ in their self-reliance and level of automation i.e. in the extent to which they require human support or ask for human feedback before they implement decisions or information [12]. They use a series of technologies. Among the most important are big data analytics, machine learning and more specifically, artificial neural networks [13,14]: Big data analytics retrieves large amounts of data from diverse sources and evaluates these using particular queries and statistical evaluation routines [15]. Artificial intelligence automates information gathering and evaluation [16]. Machine learning is a method of data analysis directed to identify patterns in unstructured data sets, which enables machines to draw conclusions and take decisions based on these classifications [17]. Artificial neural networks frequently comprise several layers of mathematical routines which collect, classify and arrange data into new sets in order to find "correct" parameters or solutions. Neural network based deep learning is an approach of information integration and selection across several logical layers of an electronic information network [18,19]. In that process, large data sets are repeatedly evaluated and interconnected using statistical and probabilistic routines [20] to generate comprehensive and systematic information and decision frameworks [21]. Algorithms are used to train neutral networks (backpropagation, variants of gradient descent). Neural networks can be distinguished by the type of data that they use during training or test time (labeled, unlabeled, categorical, numerical), their loss/error/cost/ objective function, their connection patterns, and their optimization algorithm.
Applying these technologies artificial intelligence manages complex tasks like natural language processing [22], i.e. the understanding and translation of human language into other languages and codes, or computer vision, i.e. the visual perception, analysis and understanding of optical environmental information [23].

Classifications of AI in software engineering in earlier review-based studies
At first sight, AI application in software engineering seems a contradiction in terms since artificial intelligence is about routinizing operations by relying on "intelligent machines" while software engineering, is a creative and knowledge intensive activity, usually involving human experts. At second sight however, creative processes in software engineering could be effectively supported by machines, which backed by self-optimizing algorithms take over organization and optimization tasks [24]. Artificial intelligence, understood as machine-based perception, reasoning and interpretation of environmental and mental constructs [25,26], could multiply the approaches and strategies of software engineering, i.e. the systematic approach to the analysis, design, assessment, implementation, test, maintenance and reengineering of software [27].
To discuss the potentials and limitations of AI for software engineering, categories describing the impacts of AI is useful. Previous reviews in the field use various classifications, which are systematized as object-related, function-related or process related in the following: Object-related definitions of AI refer to the (usually complex) performance output artificial intelligence provides: Lu et al. [28] explain the relevance of AI for robot, automated driving, information and communication technology. AI equally supports game programmers [29,30] and language experts in the development of translation programs and computer languages [31][32][33][34]. Classifying AI technologies by the output they generate entails the difficulty that diverse AI functionalities interact to produce a certain technical result. These are usually hard to understand and to differentiate for outsiders not involved in the development of the software and coding process.
Function-related classifications of AI in software engineering refer to the technologies of AI applied in the software engineering process. Diverse function-related classifications of AI have been suggested. Most earlier review-based studies with a technical focus extract certain fields of AI application in software engineering from earlier more specific discussions, which are evaluated qualitatively or quantitatively: Jarrahi [35] for examples sees the main potentials of AI in software engineering in language processing i.e. the interpretation and recognition of human language), machine learning (the analysis and adoption of work flows) and machine vision (strategic and target focused machine problem solution). Similarly, Muenchaisri et al. [13] explain the AI functions, e.g. machine learning, neural network, and natural language processing. Savchenko's et al. [14] review of 54 studies identifies the fields of big data and IoT technologies, programming and design assistance tools, machine learning, knowledge management and recommendation tools and system analysis tools, based on a more systematic quantitative classification of previous studies. Function-related classifications of AI in software engineering are empirically founded but risk that so far undiscovered domains, which AI could plausibly support, are neglected, since these are not yet explored empirically.
Similarly, limitations of AI in particular domains could be overlooked if no empirical analyses on these problems are available.
Process-related classifications of AI in software engineering refer to the stages of software development and analyze to what extent AI can support software engineering at the respective stage. This approach is apt to prevent the bias of neglecting AI limitations and development requirements, functional classifications are subject to. Only two reviews using process related classifications have been identified: Sorte et al. [36] and Padmanaban et al. [37] suggest to classify AI applications according to three stages of the software engineering life cycle: the software development, testing and deployment and maintenance phase. Their analyses however lack topical sources, systematic data research and in result are incomplete concerning the discussion of opportunities and limitations of the technologies. They are rather explorative than systematic.

Research contributions
This study systematizes and empirically founds Padmanaban al.'s [37] and Sorte et al.'s [36] approach of classifying applications of AI for software engineering based on the software engineering life cycle model. It amends on earlier review-based research in three crucial points: 1. It intends a more differentiated discussion of the impact of AI on a more comprehensive model of the software development life cycle (compare Fig. 1).
2. As compared to earlier studies on the relevance of AI in software engineering, which are mainly focused on the potentials of the technology, this study equally discusses possible limitations based on a technical appraisal of available AI technologies. 3. Objectives 1 and 2 require a more comprehensive method than a pure review: Earlier reviews in AI in software engineering are incomprehensive concerning the role of AI across the software development life cycle, since they focus on individual technologies.
This study uses a mixed method approach to realize a more comprehensive perspective. It combines a review of more than 60 previous studies in the field and own empirical expert interviews. The exact methodology is described in section 3.3.

Theoretical framework
To implement the review a six-stages-model of the software engineering life cycle is referred to, which has found broad application in academic software engineering literature [39][40][41] and software development practice [42,43]. It comprises the stages of project planning, problem analysis, software design, implementation in software code, software testing and integration and software support and maintenance (Fig. 1).

Mixed-method approach
To assess the opportunities, limitations and potential risks of AI applications at the six stages of the life cycle comprehensively the study relies on two data sourcesa systematic review and qualitative expert interviews. This combined qualitative research strategy is useful for issues which are at an early stage of systematic exploration, particularly, when established categories are not yet available, but still have to be developed [44]: The systematic review of prior empirical studies explicitly refers to experiences with AI application at the respective stages of the development life cycle. The review includes more than 60 publications in peer-reviewed journals and conference papers published between 2010 and 2020, to ensure topicality and academic quality of the results. The review results are evaluated by stage of the software development life cycle.
Since the review results are mainly technical and frequently positivistic, further practice experiences are useful for a critical reflection of the status and future potentials of AI in software engineering.
To provide a validated and critically forward-thinking analysis expert-interviews with software engineers involved at different stages of the software development life cycle and in different fields of engineering [45] are conducted to accomplish the review results. To avoid a bias towards the potentials of AI, explicitly software engineers who are well informed on but not directly in AI development but in general software engineering have been recruited [44]. The interviewed experts, four men and one woman, are aged between 29 and 37 and all have studied computer sciences. Their average experience on the job is 9.2 years and the all have worked for several software companies and have developed between 9 and 20 software products (Table 1). Four from five interviewees rank themselves as excellent (2) or experienced (2) experts in AI technologies due to their practical experience on the job. Interviewee five indicates average knowledge in the field.
The interviews are semi-structured and audiorecorded and transcribed verbally (appendix). The interview questions explicitly refer to the stages of the software engineering life cycle but allow experts to detail the relevant fields and the relevance of AI at these stages according to their own impetus and experience. This strategy avoids an interviewer's bias concerning focus and interpretation of AI potentials and risks [46]. The interviews are evaluated in comparison and with regard to perceived opportunities, limitations and future potentials of AI at the stages of the software development life cycle.
The integration of review results and interviews provides a new technically founded but still critical perspective on the potentials, limitations and development requirements of AI in software engineering.

AI in the software engineering life cycle
The review results on the potentials, limitations and development requirements of AI applications in software engineering are presented by software development life cycle stage in the following sections:

AI in software project planning
At the stage of software project planning software developers and clients come together to determine the project objectives and customer requirements [47,48] Software development scheduling and planning is of crucial importance to ensure the technical effectiveness and economic efficiency of software projects [41].
Search-based software engineering is involved with the optimization of project targets e.g. costs, duration and quality under certain constraints and has originated in the late 1990ies. While early algorithms were based on conventional linear programming, increasingly coefficient interdependencies, non-linearities, several decision layers, dynamic conditions and uncertainties have been included in the models [49]. Growing complexity of decision layers and the reference to previous experiences and documentations in external data-bases justify the label of artificial intelligence which is increasingly assigned to innovative scheduling systems: Duration and cost of projects are contradicting goals at first sight and human planners struggle to harmonize both objectives. AI tools are useful to support this process [50].
Task assignment in the project planning phase is an issue of conflict for developers and project planners and optimal task, time and budget allocation regularly exceed human planning capacities [51]. Artificial intelligence is useful to support software project management at the stage of task assignment and human resource allocation. Conventional scheduling models face the challenge of a very broad search space, comprising multiple input factors and scenarios and usually have to make simplifying assumptions to deliver reproducible results [52]: AI algorithms based on non-linear and self-optimizing algorithms, like ant colony optimization can solve such problems successfully by iteratively reducing decision complexity [53].
Fenton et al. [54] suggest a Bayesian network algorithm for the simultaneous optimization of cost and quality outcomes. Other than conventional optimization models, Bayesian models are able to integrate large amounts of co-determiners and coefficients and cope with missing and uncertain data and subjective judgements. The Bayesian network integrates several levels of cause and effect interrelationships. Stochastic models are used to predict uncertain future conditions. Dynamic Bayesian networks add a time-dependent variable to the model to modify the coefficients and determiners depending on previous developments. Bayesian models require an exact mathematical pre-formulation of the problem set and thus depend on prior human planning and problem analysis.
More recent AI scheduling models rely on selfoptimizing iterative algorithms to avoid this problem: Mahadik [52] and Han et al. [53] use a Max-Min Ant System algorithm in Software project planning to minimize the cost and duration of the project by  [53] ant colony optimization algorithm approximates ideal work assignment iteratively and delivers an adaptive time and function plan (PERT and Gantt). Mahadik's [52] ant algorithm provides a plan in the form of a task list and an employee allocation matrix which simultaneously optimizes employee allocation and task scheduling. Stylianou & Andreou [51] compare the optimization results of several algorithms in multi-objective task optimization with cost and duration targets in diverse case studies and find AI based algorithms superior to conventional linear planning. Peischl et al. [55] suggest an expert system which is able to select an ideal planning routine depending on the project characteristics. It refers to a knowledge base of earlier projects and uses a constraintbased reasoning mechanism to select and compute relevant items for project task definition. Athavale et al. [56] use AI to predict the interactions between human entities and their environment in software project operation in order to realize an ideal assignment of tasks and to maximize team performance. The model considers human personality traits and affective states as well as competencies, learnability and individual interactions to compose performing teams as measured by output quantity and development speed. The routine is adaptive to modifications like team changes, work force failure and illness. Practice performance proofs in a real-life team context are outstanding.
Chicano [50] integrate algorithms for task and function scheduling under cost and duration objectives into an adaptive AI model which relies on an external project archive to select a scheduling algorithm adequate to the problem set. Five multi-objective solver algorithms are compared and tested in order to optimize their application in a multidimensional scenario space.
Summing these results up, to date, AI requires human assistance to select an adequate planning algorithm for the respective problem set. The practical application of AI algorithms for devising and scheduling new projects is yet to be done.

AI at the stage of problem analysis
At the stage of problem analysis in the software development life cycle, the problem set is defined in terms of software tools and development requirements by the software development team [41,47,48]. Computers have long been employed for problem analysis and the compilation of big data. Analytical AI systems are more comprehensive in the complexity of statistical approaches and dispose of embedded self-reliant learning algorithms that distinguish patterns based on a series of similar or recurring characteristics to enable new creative solutions AI analytics takes recourse to external data bases to get "informed" and further develop established routines [57].
AI analytics is partly applied in at the stage of problem analysis in software engineering e.g. to predict of project success and risk an essential routine required to assess and select prospective software projects: Elzamly et al. [58] use discriminant analysis to predict and classify risk factors in software development. Discriminant analysis is based on a weighted linear model that includes interrelationships between the risk factors and moderators. Artificial intelligence can be used to calculate risk weights in a dynamic process and cluster risk factors. Hybrid technology road mapping is an AI based planning device applied to assess the potentials and risks of novel technologies and could successfully be applied in the analysis and selection of software projects.
Zhang et al. [59] integrate qualitative and quantitative data to a target-driven technology-road-mapping decomposition model which relies on an expert knowledge data base and uses semantic and fuzzy set analysis strategies in order to evaluate project perspectives based on multiple interdependent determiners.
In future, AI systems could be developed further to decompose complex real-world problems into their fuzzy elements and probabilistic components to structure program codes managing these routines. Software engineering problems can be reformulated as optimization problems to enable computerized solutions. So far however, the structuring of the problem set has to be done by humans, while machines can only reproduce predefined structures and apply probabilistic routines to assess uncertainties [60]. Further development in the field of software problem analysis is required to develop analytic competencies in machines.

AI at the stage of software design
In the design phase, the software project is clearly structured and development tasks are assigned [41,47,48]. According to Karpathy [7], software 2.0, used synonymously to neural networks and artificial intelligence in his blog, will develop own program codes, based on a simple input (the problem set). The code will gain in complexity in the process of neural network processing and will not have to be understood or reviewed by human beings any more. Visual recognition, speech recognition, speech synthesis, self-driving car routines and gaming are early manifestations of self-improving and developing program codes.
AI search takes a supportive function in the design of computer games for instance and is applied to model, generate or evaluate content and agent behavior in the game story. AI simulates play throughs and thus contributes to enhance and develop the game, create believable actors and a conclusive computational narrative [61]. AI software is further employed to continuously test new game routines for practicability and has been employed to train future developers in a university environment [62].
When developers are confronted with probabilistic problem sets and have to develop codes for ill-defined, noisy and incomplete information environments they rely on the stochastic approximations and iterations AI provides [60].
Although neural networks are self-enhancing, they still operate on man-defined routines in the phase of software design. There are tools for specifying and structuring particular problem sets, but the work strategy and the actual design of the software still has to be defined by the human engineer [63]. Although computer aided software engineering, which supports the process of software design by automated activities is common practice today, artificial intelligence implementation still requires clearly structured tasks and the support of human developers to get established. Steps that can be run automatedly have to be defined and integrated in an automated development environment package, which can then perform these functions self-reliantly [64].
Artificial intelligence could in future enhance computer-aided software engineering competencies by intellectual skills and might substitute human activity in that process to some extent [64]. Future AI systems could, according to Lake et al. [63], build causal models that self-reliantly explain real-world phenomena instead of recognizing pre-programmed patterns only. They should be self-adjusting and self-learning in-stead of just optimizing pre-defined routines. The interaction of AI and SE could unleash new creativity potentials in humans by automating routine tasks [65].

AI at the stage of software implementation
Software implementation comprises the actual coding process of the software application [41,47,48].
Neural networks have been developed to assist software coding: Processing natural language into software code is a capability of which has been researched since the 1980ies and with increasing complexity of pattern recognition routines has advanced to class-model builders in recent years [66]. Gathered data are transformed into contingent vectors and are used for model training to interconnect code levels systematically [21]. AI software generates prototypes of codes from human language, which then are refined and adjusted by human programmers [66]. AI Classification strategies are useful to directly transform human language and real-world phenomena into pieces of code and software models [67]. Husain et al. [68] develop an AI for automated semantic code search, i.e. the retrieval of relevant code from a natural language query. The software contains several million functions for automatic queries form natural language , which dissect and systematizes human language elements.
Recently, previously established linear statistical models (which are no artificial intelligence), which make part of neural networks, are partly replaced by autoencoding mechanisms, which apply non-linear routines [21]. Autoencoders use a feature fusion process which is trained to use certain elements in order to realize desired characteristics of a data set, e.g. reduce dimensionality, reduce redundant information or select and classify certain classes or categories. Autoencoders consist of several (at least two) layers. The hidden layers inform and train the consecutive ones based on an underlying objective function. The selection of items or other tasks are performed by assigning each selected items weights and bias probabilities, to determine the relevance of the item to the learning process [21]. The so trained neural network can ideally support software engineering by providing comprehensive code elements for certain problem sets. Deep learning strategies thus facilitate and speed up Software development processes [69]. In software coding, deep learning and autoencoding take over computational search and optimization, probabilistic reasoning functions as well as classification routines, coding and prediction functions [60]. Autoencoders can reduce feature sets by fusing several codes [21]. The programming language Swift uses iterative optimization processes which are mathematically implemented by analyzing and optimizing the incremental change of an existing function, to the desired result. In this way, a gradual approximation to defined targets is realized in an automated mathematical process [70].
Today, AI in software implementation however still requires specific and well-defined problem sets e.g. equations to fit and probabilistic environments for simulation. Open analysis in the intention to discover new ideas, new parameters to be optimized or even new problems remains a field of creative human mental activity so far [60].
In future, artificial intelligence could be developed to produce more coherent codes and possibly even implement the code into existing routines self-reliantly. Feldt et al. [12], however, see the risk that software generated automatically could not be understood by human beings anymore and could damage existing routines. AI could ignore risks involved with the automated implementation of autogenerated software codes. Mechanisms to control automatic programming routines will have to be developed to avoid AI related coding risks [12].

AI at the stage of software testing and integration
In the testing phase, the developer and client test the functionality of the software product in practice, identify and analyze errors and tailor the product to practice requirements [41,47,48]. AI uses strategies of pattern recognition and machine learning to support software testing and integration [71]: Automated software testing refers to the transference of a certain sections of a program into a script, which is then repeatedly executed by a machine, which then collects, stores and interprets the test results [72]. AI Program Browsers check existing codes for necessary changes automatically and suggest changes to the program code in order to make it work [67]. Probabilistic routines support error detection by predicting the likelihood of failure occurrence based on experiences with large data sets. According to Perreault et al. [73], AI based software defect analysis (neural networks) a outperforms classical testing routines.
Software integration refers to the compilation of different codes into a uniform software system [74]. SOA aim at integrating open software standards into firm specific solutions. Rodriguez et al. [75] refer to service-oriented architectures (SOA) to explain how AI can support this process. AI assists developers in integrating different platforms into service-oriented designs and enhances the management of generic quality attributes. AI captures conversation semantics prevalent in different web -based architectures and identifies unifying elements by pattern recognition. AI discovers similar architectures and eliminates redundant code units in the SOA and thus supports developers in clearing up software interfaces so that a contingent SOA tailored to the requirements of specific businesses results [75]. Fuzzing is an automated software testing technique that is not itself based on AI but sometimes combined with AI elements. Fuzzing uses invalid, partly incomplete or random data as inputs to test programs systematically and evaluates the effects, such exceptions to routines take on the program course. The fuzzing results are summarized in the form of an output protocol [76]. Xie et al. [78] and Liang et al. [79] use deep neural networks (DNN) to combine several error routines in order to identify complex code defects. The DNN adapts to program reactions in a metamorphic way in order to identify rare and linked errors and systematically enhance code quality. AI fuzzers prove superior to manual or hybrid fuzzing routines.
Although automated AI based testing and integration functions today are self-improving and use dynamically changing routines, to date human coders are required to define the testing process and requirements to the program, while the test implementation can be done by the machine. A survey among 328 experts comes to the conclusion that about 35% assume that a complete substitution of human programmers by machines in the testing phase will never be possible [79]. AI however abbreviates the testing process and saves manpower to perform, document and evaluate the tests. Time to market and development costs are they reduced [80]. Human control and intervention to date remains necessary to prevent erroneous testing routines and to critically reflect the validity and reliability of test results [72].

AI in software maintenance
In the maintenance phase the software company assists the customer in product application, provides regular upgrade and makes further adjustments upon client requirement [41,47,48].
AI instruments successfully support the maintenance and updating process of software to changing requirements in an internet environment [82].
In the maintenance phase, AI can support the classification of user queries, which is useful to classify and direct software users depending on their query pattern (Suresh et al. [82].
Filieri et al. [81] develop a runtime decision engine to adapt an application to respond to unpredictable events. The self-adaptive system continuously reconfigures software components depending on network requirements. This routine saves human support and updating activity and ensures on-time adaptivity, security and program stability.
Using principles of pattern recognition and machine learning, AI equally supports software modernization. In ancient codes, structural information is frequently lost due to poor documentation. AI pattern recognition techniques are useful to extract coherent sets of code. Machine learning functions are used to trace and check their functionality [83]. Pattern tracing functions extract redundant elements from codes and automatically generate implementation artifacts and test software functions [84].
AI neural networks that are trained by deep learning algorithms are useful for software security assessment. AI identifies and simulates attack patterns to discover security gaps, defects and errors in a targeted way [69]. Neural network error and security gap tracking works by slicing software code into formal routines prone to typical attack patterns in a systematic way and exploring a broad set of viral strategies to each element. Neural security assessment networks reach an accuracy of more than 90% in an empirical test on a network architecture [85].
In future, AI software systems could be useful to manage critical large-scale software infrastructure, like servers, and adapt these to environmental changes or new unexpected conditions. To date, however, there is no single AI system that could manage this task selfreliantly [86] (Davis et al., 2016). Lacking human understanding of autonomously regulating AI units could induce self-enforcing cycles which would be beyond human control risks. Unmanaged AI autonomy could entail unpredictable risks to electronic and even physical infrastructures [12].

Empirical results
From the review of previous studies in the field of AI in software engineering it is obvious that there is significant uncertainty on the remaining potentials and risks of AI. AI comprises several novel technologies and their development lines are still open. To accomplish and validate the review results on potentials, risks and future perspectives of AI in software engineering, interviews with five software developers according to the scheme described in chapter 3 have been conducted and are evaluated comparatively in the following.

Opportunities of AI for software development
The participants agree with earlier studies that as of today AI tools have facilitated the software development life cycle. In correspondence with the review, the interview results on opportunities of AI are evaluated by life cycle stage.

Project planning
As of today, AI indirectly enhances project planning mechanisms, according to participant 2. The analysis of data pools of earlier projects provides realistic estimates of failure quotas and iteration routines in earlier projects and locates potential areas of difficulties. New software projects can be planned more diligently and customer time and cost expectations are met more reliably on the basis of big data analytics. Participant 4 explains that AI already has eased the prediction of development timelines and enhances estimates of the necessary development steps, which will provide customers as well as engineers with higher clarity on project cost, timing and outcome in future.

Problem analysis
Participant 3 esteems predictive analysis equipment which as of today accesses large online data pools to predict trends and outcomes of new applications. Predictive analyses enable software designers to plan their products more proactively and adjust to new technological trends in their emergence. Big data analytics has improved the competitiveness of his company in an increasingly dynamic software market.

Software design
AI, according to participant 1, provides structured access to immense amounts of data which are retrieved from earlier similar projects, for instance. The number of expected bugs and their location is reliably predicted on that basis and error avoidance routines are established more effectively. AI has sped up the design speed of software projects, according to participant 2, by enabling programs to execute routine tasks, which previously had to be done by human developers. These use their freed creative resources for software design to a larger extent now.
The automation of coding and testing routines using AI has accelerated ideation and planning processes, participant 2 and 3 explain. AI thus has got indirect positive effects on the creative processes of software definition (participant 2). Software designers' creative capacities are strengthened since AI takes over pain-taking daily routines (participant 3).

Software implementation and debugging
Participant 1 is working with AI based programming assistants for Kite for Python which automatically document software codes and provide debugging routines that offer automated suggestions for improvement or deliver code examples for particular problem sets. The tool has reduced software development times and improves output quality. Critical developer resources are freed for more creative jobs than debugging and routine memorization.
Participant 2 estimates the high quality of AI for bug detection and the prediction of future test outcomes. AI debugging instruments discover links and integrations across data automatically, which eases the identification of anomalies and possible inefficiencies in codes (Participant 4). The automation of software testing routines saves development costs and facilitates the job of software engineers (Participant 2). Participant 3 is experienced with automated code compliers, which support the transformation of highlevel programming language codes in machineexecutable instructions. AI guided compliers do this job much faster than former manually directed compilers, which enhances software development efficiency.
According to participant 5, AI improves the efficiency of software delivery processes, it eases team collaboration and the integration of customer feedback in code.

Software testing & integration
Deep learning and machine learning today enable systems to integrate apps more comprehensively and thus support limited human reflection capacity (Participant 1). Instead of reading of lengthy documentations and debugging codes, software developers today have gained more freedom due to AI support. Participant 4 sees AIbased testing and compilation software as a personal assistant, providing him with the required hints and information. Participant 5 agrees that AI greatly speeds up the process of debugging according to his practice experience. AI tools trace bugs through the code and enable their systematic elimination. At the same time, they predict errors early in the programming stage and in this way enable programmers to prevent bugs in their codes from the beginning. This technology is effective as of today and will certainly further evolve in future.

Software maintenance
AI maintenance instruments could in future support businesses in clearing their software products of redundant features. AI tools today identify unnecessary and redundant (double) routines and processes in the course of automated run throughs. AI is more reliable and follows a more complex analytical approach than human analyzers possibly can. While these tasks will be fully automatized in future, human engineers will gain creative potential for planning and design tasks (participant 3)

Limitations of AI in software development
Participant 4 explains that software developers will keep a leading and defining role in the development and improvement of software, since creative not just rationally thinking minds are required to innovate in software solutions. AI in his opinion can never be creative. Participant 5 agrees that developers can foresee and advocate for change, while AI routines can only apply and process existing knowledge. Participant 5 admits that the potential to draw on infinite data bases of knowledge is the most fascinating promise of AI, however explains that predicting the future of AI based on its present development is impossible.
Certainly, software developers will be required to use their creative potential to an even larger extent than before in order to avoid their substitution by machines for routine jobs. Software developers have to keep innovating, improving and learning to use AI effectively in their daily practice (Participant 2) and as participant 3 asserts certainly will have to be "smarter" in future in order to use novel AI technologies to their potentials. Another final limitation of AI-based software engineering is that most tools are not available yet. We cannot evaluate tools that might be available at some point in the future with respect to their practical relevance.
Further development requirements to enhance AI applicability in software engineering practice The participants classify future potentials of AI and expected role of human software developers in that context: Participant 1 expects that AI will manage huge data volumes even more effectively in the near future and provide critical information to project structuring and planning. Problems that become obvious in the process of software development only today, will be avoided from the beginning in future. The development of AI tools to more effectively access and structure information stored in big data pools is preconditional to this development (participant 2).
Software developers have got the challenging role of utilizing AI technologies in engineering practice (participant 5). According to participant 1, the role of software engineers is to expand their understanding for the "disruptive role of AI" [Disruptive technologies are innovations, which fully substitute the success or market advantage of an existing product and turn the investments of other market participants obsolete.]. Software developers should understand themselves as creative innovators and leading parties in change processes. As such they should welcome AI innovations in software design and development (participant 5) and should promote enhanced AI application and integration. The application of AI instruments in software engineering meets the market requirement for self-adapting and selflearning software products (participant 2).
AI can, according to participant 3 make software development processes "faster, smarter and more efficient". The future potential of AI is high considering the fast and eminent progress of software development in other fields (participant 3). Participant 5 sees particular potentials of AI for rapid prototyping, which could benefit from big data analysis and neural networks. AI will further facilitate the coding process by automatic routines allowing to put language into code and or by recognizing visual objects.
Although according to participant 1, theories governing software development will remain the same in the future, AI has got the potential to speed up software development and enhance development efficiency. AI programs could take recourse to knowledge resources which due to their complexity and size are inaccessible to the human mind and this knowledge will "upgrade developers' competencies (participant 1). According to participant 5, the largest potential of AI lies in the utilization of big data structures in the programming process. The availability of a coding data base will enable software developers to use their creative and innovative potential to a larger extent and to the benefit of the final software product. Table 2 summarizes technologies, achievements, limitations and future development potentials of AI for the six stages of the software engineering life cycle as available from previous studies and the interviews. The review results are indicated by bullets and additional insights gained from the interviews are indicated by checks.

Summative integration of interview and review results
The review has shown that the basic principles and technologies underlying AI supported software engineering are similar across the life cycle stages. Artificial intelligence has proven for the automation of routines and analytical processes, when the fundamental structure and organization of the process is clear and its implementation requires lengthy calculation or the analysis of huge data volumes. However, AI comes to its limits when novel insights are sought and new problem sets are meant to be discovered and, innovative routines have to be developed. These fundamental activities so far remain at the hands of human designers and developers. Future AI routines could become more selfreliant if they could compose new tasks and solutions without human support. However, this development would entail the initially mentioned risks that man would lose understanding and control of machine-made routines and electronic systems.
Comparing the review and the interview results, the latter have specifically highlighted the capacity and future potential of AI to support software developers which results in important the economic opportunities to software development companies: AI tools support human developers by taking over routine tasks at every stage of the software development life cycle: At the planning stage, AI supports data base search to retrieve and structure information required for planning processes, At the stage of problem analysis, AI is useful to assess risk factors of software development process. At the stage of software design, AI searches and structures previously developed similar codes and code snippets. At the stage of software implementation AI tools transform human language into code and code into machine language automatically. At the stage of testing and implementation, AI provides automatic debugging and error tracing routines and supports the integration of individual software routines into comprehensive architectures.
At the stage of software maintenance, AI is useful for clearing and adapting old code to new requirements.
The major potential of AI at the present stage thus is the support of software engineering by taking over automated routines, while human developers gain time to focus on the creative aspect of software engineering i.e. the planning and design of new software concepts. This work sharing between artificial and human intelligence contributes to reduce development time, enhances software quality output and thus increases the efficiency and market success of software development companies.
The interview results thus accomplish the theoretical understanding of the contribution of AI to software engineering in the software development life cycle. The application of AI instruments at every stage of the development process results in an efficiency increase of the whole process flow, as illustrated in Fig. 2: Classification of empirical results in in the context of previous research The review and particularly the empirical section of the analysis have thus accomplished the understanding of the relevance of AI to the software development life cycle. By structuring the review of previous empirical studies of AI in software development according to the six stages of the software development life cycle, the study has systematically explored, how AI supports every life cycle stage by technical solutions. The so far limitations of AI in software engineering have been discussed. As compared to earlier reviews in the same field the analysis distinguishes by differentiating six life cycle stage and elaborating on the concrete technologies relevant at each stage. So far technology-oriented studies however lack an analysis of the contribution of AI to the whole software development process, since each team of authors' focusses in particular algorithms and routines.
The interview section of this study has contributed to classify the technological advancements in the context of AI in the software development life cycle. Interviews with practitioners in the application of AI equipment in program design and coding have illustrated how AI tools save human developers' efforts, development time and cost at every stage and thus enhance the creative potential of development companies as a whole.
Earlier studies are partly blurred on the limitations and future development requirements of AI, since they lack this comprehensive perspective. This study has worked out that at present AI in software development takes a supportive function by automatizing routines based on big data analytics and lengthy calculations. AI to date is not creative in the sense that new plans for software projects are suggested, new problem sets are defined or new product ideas are suggested. These functions remain at the hands of human software engineers. But these benefit of the automation and calculation speed of AI tools and gain time and mental resources to focus on creative development tasks.
The interviewees see the future development potentials of AI in software engineering rather in the perfection of the supportive functions of AI than in its evolution towards own innovative and creative capabilities. In this regard the interviewees distinguish from some of the reviewed studies, which partly express the hope that AI will in future be able to decompose complex problem sets and develop humanlike skills of realworld interpretation and self-reliant learning [57,59,64]. The divergence in the assessment of AI potentials between technology focused empirical AI researchers and the interviewed software developers, probably is a matter of perspectives: AI researchers dispose of a deep structural understanding of the theoretical capabilities of neural networks. Software engineers are concerned with involved with the daily problems and routines of coding and the aptitude of running AI systems successfully to solve their daily problems. To date, there is a divergence between the theoretical understanding of what AI could possibly achieve and the practical capabilities of available AI programs.

Practical development lines for AI development in software engineering
The interview results provide important information for software developers and development companies on the relevance of AI and strategies of AI integration in the business process, which are summarized in some bullet points for management purposes here.
AI is a future technology and can support every stage of the software development life cycle by automatizing data research, calculations, debugging, compiling and software integration today already. Software developing companies benefit of the application of AI tools which speed up development processes by automation, improve team collaboration by enhancing knowledge documentation and interchange, save developers' resources and time efforts and hence reduce development costs while product quality improves. The most important aspect is the potential of AI to free the creative and innovative capacity of human software developers by taking over routine functions. Neural networks have even proven creative in practice tests, e.g. in abstract landscape painting [87]. However, the combination of reason and creativity and the combination of diverse modalities and abstraction levels still make the human software engineer much better than any machine today. Development companies adopting AI tools enjoy a competitive advantage by increasing the innovation potential of their workforce.

Conclusions
Software developers and their companies however have to fulfil some requirements to use the opportunities of AI: Software developers have to continuously adapt their competencies and qualifications to keep up with the dynamic and rapid development of AI tools in software engineering. They have to be open minded to apply these instruments in their daily work practice. Software companies should encourage employees' engagement by providing leadership support and making the necessary investments in new AI programs and hardware infrastructure.
Software developers who ignore the potentials of AI in the software development life cycle and stick to routine jobs, which are more reliably and cost-efficiently done by automated routines risk being substituted and losing their established jobs in the long run. In future, software developers will require higher creative potential and have to be smarter to compete with artificial intelligence. Software development businesses rejecting the adoption of AI risk being pushed out of the market by more innovative competitors who realize software products faster and at higher quality by relying on AI support. AI is an emerging future technology in software engineering and early adopters multiply their competitiveness.

Limitations and call for further research
Although the combination of systematic review and practitioner interviews in this study has developed some visionary insights on the potentials of AI, which are relevant to developers and mangers alike, the study results remain explorative and require further empirical foundation: The topic AI in software engineering is too broad to be discussed comprehensively within the framework of a journal article and the range of about 60 studies evaluated for the review is not sufficient to analyze all relevant AI technologies, their potentials and limitations comprehensively. Future studies should focus on select stages of the value cycle in order to deepen and validate the qualitative results of this review.
The interview section comprises five in-depth interviews with software developers, which of course is not a representative number. The selection of the interview participants necessarily is arbitrary to some extent and the participants have not been informed on all potential AI technologies since they are software developers not AI researchers in their daily practice. Future research could amend on this problem by bringing AI researchers and software developers together in discussion rounds and assess to what extent developers' requirements are already met or can be supported by AI technology in future. Such an approach would at the same time forward AI research in the field of software engineering. More extensive collaboration between both research fields is desirable and necessary to make AI a comprehensive technology for software engineering in future.

Additional file 1.
Abbreviations AI: Artificial Intelligence; SE: Software Engineering; SDLC: Software Development Life Cycle; SOA: Service oriented architecture