Utilising Artificial Intelligence in Software Development Life Cycles (SDLC)
Imagine,
an intelligent bot-device,
standing on your table in the meeting room,
connected to your online-meeting session,
listening to participants in your meeting,
recording and interpreting your conversations,
extracting the software requirements for your new project,
designing a sketch for your UI, and
printing a draft for your review.
Upon your approval, your intelligent bot delivers the front-end code, back-end code and automated tests within minutes.
Your mobile app is also deployed and released in an app store for end users.
What a beautiful dream, right?
It is no longer just a dream.
We, as the software community, are heading there, and to some extent, some of us have already been there recently.
Over the past decade, software development tools and methods have changed tremendously. As software engineers, we have experienced these significant changes, which transformed our traditional ways of developing software in many ways. First and foremost, the rise of DevOps tools and Agile culture led to the increasing use of automation in software development processes. This was probably the most significant cultural and technological evolution in our field. Switching from traditional, discrete SDLC processes to continuous integration, continuous deployment and seamless release cycles, which was facilitated through automated DevOps infrastructures, was an important step in revolutionising software production lines.
Now, a new era is ahead of us.
From Automated to Autonomous
It is time to raise the bar again and shift our focus from automated processes to intelligent and autonomous SDLC pipelines. AI-based algorithms, tools and methods can and will enable self-learning, autonomous and self-evolving software development pipelines. Utilising artificial intelligence algorithms and techniques in the software development life cycle (SDLC) increasingly gains interest among practitioners in the software development industry. As in production lines and machines in the manufacturing industry, the stages and processes in software development can be automated in a self-learning fashion with the help of artificial intelligence.
AI is transforming many business tasks and processes, and now the question is how can the software development pipelines benefit from AI?
In this field, we have a long way to go.
Many application areas are at their early stages, and there are numerous white spots that have not been touched yet. Utilising AI techniques in SDLC should start with value-driven questions. For instance, how can we achieve better code coverage using AI-techniques in software testing? How can we identify outliers faster and better?
Having automated the SDLC process, we can go one step further and enable software production lines to learn from the past and make autonomous decisions based on previous experiences. This is where artificial intelligence comes into play. The transition from a DevOps-based, automated SDLC to a self-learning and autonomous SDLC needs enhanced artificial intelligence algorithms embedded in current SDLC processes. In order to raise the bar in SDLC automation and develop AI-based tools that offer, for instance, suggestions and decisions while designing UIs, collecting user requirements or testing the core, we have to utilise more data and more ML algorithms. It should even be possible to transform user requirements into software code based on AI-based processing algorithms and tools.
Autonomous systems that learn from their past experiences and their environment, react to environmental changes and further improve themselves can be built and embedded in current SDLC practices. In this way, it is possible to make the automated DevOps infrastructures more intelligent and autonomous.
AI in Production Lines
We can use an analogy between an automation system for a production line in an automotive manufacturing plant and a software production line in a software company. Both have a lot in common. Both have input materials for assembly and production, a process with embedded know-how and deliveries as outputs. For instance, a car’s door for assembly line and a reusable software component to be integrated into a website are both input materials. Both systems have a sequential manufacturing process – fully or semi-automated or manually conducted by human actors. At the end of both lines, right after the quality inspection, there is a release stage where the product finally comes out. Higher levels of automation on both fronts will definitely achieve increased productivity, better quality, error-free production and shortened throughput times.
What about going one step further and making these two systems autonomous and self-learning?
AI-based applications yield value-creating and amazing results as soon as there is a solid amount of qualified data available. In software development life cycles, thanks to contemporary DevOps infrastructures, there is plenty of data available for further processing in AI methods. Advanced tools, methods and infrastructures enable us to keep track of every action and item from coding to testing until release, deployment and operations.
Current Practices and Future View
Recent and common practice of using AI in SDLC is story point estimations during the task planning stage. A story point estimation is a common method that allows us to predict the complexity of a software development task by manual efforts. ML techniques are used to automate the process of sizing a task based on the historical and current data such as the title, content, domain and the type of the task. To predict the complexity of a new task, an ML algorithm looks through the historical data of previously estimated tasks and combines this input with the actual data.
Another field where AI is utilised in design and development is generative design techniques. Generative design is a contemporary computer-aided design method used, for instance, in designing mechanical parts or bodies of cars in the automotive industry. Design engineers input their design parameters such as material type, production method, and their restrictions such as time and budget limits into the generative design software. Then, an AI-based algorithm in the software explores iteratively every possible alternative to offer the best solution available.
In a similar fashion, software design engineers can input their design goals, design parameters and restrictions such as the desired programming language, number of users, number of database connections, target user profiles, target hardware platform and many other variables, so that AI-based algorithms can come up with possible architectures and initial skeletons of the desired software. Many tests and simulations can be run on identified architectures to find out the best optimal design alternatives for usability, performance or cost measures. As of today, we have tools and applications that can partially achieve this vision. Low-code development platforms can be considered as one of these applications; however, when it comes to self-learning, adaptive and autonomous software development pipelines, we still have a lot to achieve.
The major part of the work to be done lies ahead of us.
In the foreseeable future, it will be possible to see virtual and cyber-developers in the form of chatbots, and we can instantiate hundreds or thousands of them with an on-demand and pay-as-you-go business model in order to build cyber developer teams for large-scale software development projects.