My Profile Photo

Peculiar Coding Endeavours


Software engineer. Algorithm & data structures nut. On my way to learning AI. Eternal student.


How artificial intelligence is transforming software engineering

Automation of the automation process

ai

Abstract — This paper explores the influences of the growing field of artificial intelligence (AI) on the software development process. Several techniques and their potential positive effects on multiple areas of software development will be explored. The main focus is on requirements engineering, the development process, testing and deployment, and the human factor in the field of software development as a whole. A number of scenarios concerning the future influence of AI on software engineering are presented.

I. Introduction

Software development has been a strongly evolving discipline from the moment of its inception. Surely it has changed society for the better in a multitude of ways. Among many other things, software regulates our nuclear power plants and power grids, enables businesses to do their work more efficiently, monitors the thousands of airline flights traversing our skylines daily, helps surgeons to perform their procedures with a far higher degree of safety and precision, facilitates communication between all human beings through social networks and has changed the way we shop for groceries, clothing, electronics and many other things.

Being a relatively new field of science though, software engineering (SE) has displayed many growing pains and faced a fair share of challenges in a number of areas. SE has not yet benefited from the hundreds of years of collective experience that, for example, the fields of manufacturing and construction industries have, and is still prone to many growing pains. One example of this is the perpetual state of inexperience that the available software engineering workforce finds itself in. The number of software engineers has grown vastly over the last decades, as did the rise of new technologies, programming paradigms and languages. Due to the combination of the relative short shelf-life of frameworks, constant emergence of new languages, and the enormous growth of new software engineers that graduate and become available to the market, a relatively high percentage of software engineers have a very limited set of experiences. This situation results in new generations of software engineers making a lot of the errors the previous generations made all over again. Another challenge is the actual process of software development and management of the software development projects. Over the last decades, this set of activities has undergone an evolution on its own, moving from sequential design processes like Waterfall (in several incarnations and variations) to iterative approaches, with Agile being the predominantly used methodology nowadays. This evolution came to be out of sheer necessity, after a multitude of reports, like the CHAOS report by the Standish Group, showing the low success rate of software development endeavors using sequential project management methods. The software implementation process has evolved strongly because of the larger scope of systems, available hardware and technological advancements such cloud technologies. The role of software and information technology in many enterprises has changed thanks to the DevOps movement. While software development used to happen as an isolated set of practices, by operational units that were largely separated from the other operations of the business, DevOps has the philosophy of deeper involvement of other stakeholders with the development and deployment processes, and as such, changed the way in which software development is seen in many business.

In the fast-moving field of software development, it would only be a matter of time before the very process of automation itself got automated. Artificial intelligence (AI), the field of computer science in which sophisticated algorithms and mathematics are used in order for machines or software to emulate human-like properties such as learning, cognitive functions and the seemingly portraying of a certain degree of intelligence, has found its way into software engineering itself. Research on the use of various techniques in the field of artificial intelligence has demonstrated interesting new ways of improving the software development process [2][3]. This paper will focus on some of these initiatives. In section 2, the common ground that SE and AI share in terms of their problem areas will be explained. Sections 3, 4 and 5 will explore several current contributions of AI to SE in the development process, testing and deployment, and the human factor of software engineering respectively. Concluding, we will look forward to potential new areas to explore, and manners in which AI can further benefit software and requirements engineering, as well as some afterthoughts on the weight we put on AI as a whole.

II. Common ground

Software engineering is a complex process, with a vast amount of uncertainties and variables. During the requirements engineering phase, stakeholders with many different points of view must come together and try to clearly define goals, often using terms that are unfamiliar to the other party. The technologies that will be used to realize the defined requirements must be selected. Change scenarios must be drawn out, often for a considerable time in the future. Estimates and deadlines for the delivery of milestone features will be set. Lost time due to obstructions and unforeseen delays must be taken into account. Continuous feedback and communication lines between multiple stakeholders will have to be created. The sheer number of unknowns in all of the stages of software development makes it an extremely challenging undertaking. The rise of project management methodologies such as Agile has partially accommodated for these unknowns, and has incorporated them in the software development process using iterative approaches.

In [2], Haman presented a number of examples of how AI is already being applied in SE, because of the commonalities of the problem sets that AI and SE are involved in. Both AI and SE deal with complex real world problems, where a great deal of unknowns, variables and ill-defined data are often the starting point. Another similarity is the practice of optimization over time. In the field of AI, techniques and algorithms such as probabilistic reasoning and neural networks are aimed at evolving and learning, and can therefore optimize their output over time. In a very similar fashion, the experience of project managers, software architects and developer teams concerning the estimations of deadlines, the use of architectural patterns, manageable sprint sizes (in the case of Agile methods) is a determining factor of the potential accuracy of those estimates and the quality of the outcome.

III. Influence on the development process

As clearly demonstrated in [1], several parts of the software development process have already been benefiting greatly from automation. The specific areas that are most affected have been configuration, quality assurance, testing and deployment. Several developments and studies have shown the possibility of AI being successfully utilized in earlier stages of the software engineering process as well, such as requirements engineering and the actual development of the software. By taking a lot of work off the developer’s hands using AI techniques, the process of automation itself could be partially automated. Previous work, referred to in [2][3][5], shows that applying AI to the software development process can also dramatically diminish work as well as risks in various parts of the process. In that context, AI presents itself as a valuable tool for increasing quality and efficiency in many stages.

For example, requirements elicitation, architectural design and code refactoring can be facilitated using several AI techniques such as Search Based Software Engineering (SBSE) [3][5]. In SBSE, search techniques such as genetic algorithms are applied by redefining SE problems as optimization problems. An example of the application of SBSE is the use of genetic algorithms for code generation. The obtained code samples can then be considered as the population, which are then evolved and tested for survivability and optimization.

Using natural-language requirements (NLR) documents such as user stories and use cases, several attempts have been made to translate these documents into formal specifications[3]. However, much work is still to be done in this area, and the produced result should still only be seen as a guideline, yet to be approved by stakeholders with the relevant domain knowledge.

Estimation in SE is performed to plan deadlines, anticipate obstacles, and prepare for changes in architecture, requirements, technologies and the very business domain itself. These estimates are often made using incomplete and blurry data, gathered from sources that may not always be as trustworthy as we would like. In this context, statistical methods such as Bayesian models have been used in order to make more accurate estimates in a speedier fashion [2], instead of solely depending on the experience of project managers. Another application of these models in the field of requirements engineering is by using them to test the quality of requirements specifications [3].

IV. Testing and deployment

A quite time-consuming portion of the development process goes to testing and verification of the produced software. Although techniques such as Test Driven Design (TDD) have facilitated this by taking up a test-first approach, integration testing and testing scenarios where certain resources become unavailable at unpredictable times are still time-consuming and difficult to define and generate, especially for modern cloud-based distributed applications. Similar to using AI for code generation, SBSE can be applied to the generation of increasingly optimal test cases. AI algorithms can be used to take down certain services during certain test scenarios, or introduce high loads to several parts of the infrastructure to test the integrity of the architecture. An additional contribution of AI in this regard is the possibility of continuously making small adjustments to configurations in order to optimize performance.

With the emergence of new technologies, the sheer number of types of devices that software is being deployed to has been increasing. Desktop computers, smartphones, tablets, Internet of Things (IoT) devices can differ greatly in terms of hardware, processing power and bandwidth, while the functional requirements of the software often should remain the same. AI can help to bridge the gap and take a lot of work off the hands of developers in this area, as explained by Haman in [2], by automatically patching and porting the software to the desired platform.

V. The human factor

In [1], Fugetta and Di Nitto refer to a number of studies showing the success of Scrum and other Agile approaches. The strong focus on collaboration and interactions between stakeholders are very clear contributors to the success of these methods. In [4], it became clear that the influence of motivation, salaries, training and career opportunities, working circumstances, colleague cooperation and other human factors have an overwhelming influence on the outcome of software development processes and the quality of the software it produces. Using AI techniques, the potential negative influence and unpredictability of these human factors can be more closely monitored, anticipated, and perhaps even diminished, resulting in higher quality software, with a higher degree of predictability.

A determining part of the effectiveness of quality assurance obviously is the quality of the incoming data concerning user experiences. Although testing is already being greatly automated using tools like Selenium and Fitnesse, many elements in the user experience area of testing are fuzzy, and rather subjective. Another point of high contact with end users is the requirements engineering phase of a software development process. A great deal of stakeholder-driven requirement elicitation techniques such as interviews and group sessions are both time-consuming as potentially fuzzy. For one, we must assume that the data our interviewees provide us with is factual and based on truth. Secondly, it is not far-fetched that many people would alter the intensity of their message, depending on who sits in front of them. Of course, data can be collected anonymously, but a certain degree of bias will likely remain present whenever people are aware they are being monitored or probed for their feedback.

VI. Future work

Although AI has been a field of study for over 50 years, its applicability in the field has only been really viable for the last decade, due to the massive availability of data and data storage capacity, as well as the increasing processing power and cloud infrastructure to facilitate all of this. As a result, enterprises have been adopting AI on an increasing scale in order to tackle a varying array of problems. AI is quickly conquering many branches of business, due to the broad range of problems it can be applied to. It sometimes seems that the possibilities of this exciting new technology are endless. E-commerce websites that adapt the list of shown products to the online behavior of the current user, streaming and video-on-demand services adapting their offer per customer based on their previously watched movies, voice-activated smart-home hubs to control lighting, heating, and many other functionalities at home, are things that are fairly well established.

AI is definitely changing the way things are done in many areas, and a lot of the work that is now performed by way of manual labor can be done by intelligent AI algorithms (perhaps combined with robotics). The last decades, a lot of jobs have already been replaced by this combination, creating a vastly different landscape. After many decades of automating our work, taking the heavy burden of our human shoulders, we now seems to be entering an era where we start to automate the process of automation itself. The job of software developers will undoubtedly change in ways we cannot fully predict as of today. However, the possibilities of these new technologies are already creating an evolution of the software development process, with many changes still to come.

Using AI, new approaches such as intelligent chat bots or face-recognition algorithms catching micro-expressions in order to determine user experiences of prototypes, can be used as an additional source of trustworthy data. Filling out a questionnaire is a single point of contact in time, potentially biased and dependent on current mood, most recent experiences, exposure to other systems or alternatives, whereas data gathered in an unobtrusive manner over a longer period of time, interpreted using highly sophisticated AI techniques, and automatically aggregated to serve several stakeholders, is just one of the ways software engineers could gather higher quality data, and even more feedback from end users. Feedback from certain sources could be given a higher degree of importance, based on experiences in the past, thus optimizing the requirements engineering process. This is clearly an interesting new area where AI can be used to cancel out possible issues that are inherently connected to the subjectivity of human interaction.

At the same time, we must be weary not to fall prey to an over-reliance on AI. Overemphasis on the use of any emerging technology can be quite a common pitfall. The realization that AI is simply another tool, and that we should treat it as such, is an important one. As brought up in [5], it is often beneficial to keep incorporating human knowledge, judgment and experience in the process. Concerning the specific application of AI in software development, it is obvious that many benefits can be gained. To make the most out of these opportunities, and to build upon the knowledge and experiences that have already been gathered in the software engineering community, it would be wise to remember that successful software engineering is the product of strong collaborations between many stakeholders. In this list of stakeholders, artificial intelligence can definitely be added as a contributor, a facilitator and an enabler.

References

[1] Fuggetta A, Di Nitto E. 2014. Software process. In Proceedings of the on Future of Software Engineering, May 2014, 1-12.

[2] Harman M. 2012. The role of Artificial Intelligence in Software Engineering. In Proceedings of the First International Workshop on Realizing AI Synergies in Software Engineering (RAISE), 2012, June 5, 1-6.

[3] Ammar H.H., Abdelmoez W., Hamdi M.S. 2012. Software engineering using artificial intelligence techniques: current state and open problems. The Second International Conference on Communications and Information Technology, February 2012.

[4] Fred. J. Heemstra, Rob. J. Kusters and Jos J.M. Trienekens. 2002. Invloed van de factor mens op softwarekwaliteit. In Softwarekwaliteit 2002, 253-271

[5] M. Harman: The relationship between search based software engineering and predictive modeling. In 6th International Conference on Predictive Models in Software Engineering, Timisoara, Romania (2010)

comments powered by Disqus