1.1 Introduction
Computer science is the main branch of science that has gone through speedy and essential transformation. This transformation is a result of mixing the available experience and user expectations for designing new creative software products and improving the lives of users by modifying the environment (Cook, Augusto, & Jakkula, 2009).
Software engineering (SE) is a branch of computer science. This branch of computer science follows methodical and scientific approaches for software design, develops software on the basis of requirements, implement and maintain the software, and eventually retire the software product after some period. Although this is a systematic and linear approach to software development, it faces some of the following problems:
It’s not possible to read the brain of human beings or their behavior by using SE.
Computer awareness is impossible with SE.
Nondeterministic Polynomial (NP)’s problems are not easy to solve with SE.
SE product development models use sequential phases, which makes products static in nature, but software products are not dynamic in nature.
Real-time software development is not possible for engineers to design and develop with SE.
Therefore, software development is still more a craft or art than an engineering discipline, because it lacks a validation process and product modification in the SE improvement process (Jain, 2011).
Artificial intelligence (AI) is the branch of computer science whose main motives are to develop intelligent machines, and define and design intelligent agents (Jain, 2011). AI focuses on creating machines that behave and think like human beings, creating a computer system that has some form of intelligence, and trying to implement that knowledge in understanding natural language (Aulakh, 2015).
AI and SE developed separately without much exchange of research results. The main goal of SE is to design efficient and reliable software products, while that of AI is to make the software product more intelligent. Today, these fields are coming closer and creating new research areas (Sorte, Joshi, & Jagtap, 2015), and many researchers are taking an interest in these fields. Many people are using Siri, Google Assistant, or Echo in their daily routine. What are these tools? In simple words, these devices are the personal digital assistants that help users access valuable information and basically work on the user’s voice command like “Hey Siri, show me the closest petrol pump”, “play some music” or even “call Ms. ABC.” These digital supporters will provide appropriate information by going through the user’s mobile (call or read the message) or searching the web. These are some examples of AI. The father of AI is John McCarthy, and according to him, “AI is the science and engineering of making intelligent machines, especially intelligent computer programs.” AI is implemented using knowledge of how the human brain works and how human beings become skilled and make decisions to accomplish the steps in a task while trying to resolve a problem.
Hybridization of SE and AI is the most effective area of computer science and makes life easier for developers, testers, and analyzers. It is basically an opportunity to implement AI tools and approaches in the SE field to improve the software product development process. Software engineers have knowledge of AI technology and are interested in adopting the tools and techniques of AI in their own software development for improving the quality of the software product. This combination of fields is easily adopted and reused by nonexperts. AI will change the way an application or system is developed, and thus developers can expect a better application or system developed under the existing environment.
AI impacts all aspects of SE including data collection, software development, testing, deployment and ongoing maintenance. AI helps the developer to create better functioning software and increase the efficiency and reliability of software creation by automating manual tasks. AI enables machines to make decisions so that machines can balance compute power and service loads.
1.1.1 Literature Review
AI plays a significant role in automating numerous software development activities, and implementation of AI in SE makes sense to take advantage of AI techniques in the various phases of the Software Development Life Cycle (SDLC), like requirement gathering, designing, development, implementation, and testing (Kumari & Kulkarni, 2018; Sorte, Joshi, & Jagtap, 2015). Basu et al. (2017) analyzed views about the integration of AI and SE and explored the possibilities of combining the techniques and tools of AI in the designing and development of software systems. Using an AI automated programming tool in the development of software products eliminates the risk assessment phase and reduces the development time of software products. AI also increases the quality of the software product (Saini, 2016). SE helps design a software product, but development of the product is extremely time-consuming. Implementing AI techniques and tools in the development of software products increases the quality of software products and minimizes development time. The software development coding phase can be amended with the genetic algorithms (Aulakh, 2015). AI, expert systems, and knowledge engineering are playing an essential role in the development of software products. The combination of AI and SE is important; the advantages of AI techniques and approaches are used in SE and vice versa. The study by Shankari & Thirumalaiselvi (2014) suggests that the application of AI techniques can help in solving the problems that are associated with the SE process. Ammar, Abdelmoez, & Hamdi (2012) discussed how AI techniques are used to solve problems faced by software engineers in the software development phases, like requirement-gathering, design and coding and testing. They also summarized the problems like transforming the requirements into architectures using AI techniques. Harman (2012) explained that software is dynamic in nature and that its development process and deployment techniques always need modification based on requirements. AI is well suited to this task. Jain (2011) explained the interaction between SE and AI and the reason why AI techniques are needed in the SE process. Many AI techniques, like knowledge-based systems, neural networks, fuzzy logic (FL), and data mining, are used by software engineers and researchers to get better software products. AI plays an important role in improving all the phases of the SDLC (Meziane & Vadera, 2010). Risk can be reduced in development time by using AI automated tools. All the phases of software development are linked together and software product development time can be minimized by revisiting each and every phase after requirements are modified (Raza, 2009). Chen et al. (2008) explained the various AI techniques like case-based reasoning (CBR), rule-based systems, artificial neural networks (ANNs), fuzzy models, genetic algorithms (GAs), cellular automata, multiagent systems, swarm intelligence, reinforcement learning and hybrid systems with examples.