This content is part of the Essential Guide: How to improve code quality, from teamwork to AI features

AI development tools make software development easier

Software tools with AI can help optimize various elements to make the development pipeline easier to handle for all those involved in the process.

AI has been infused into various components of application development and deployment tooling, but the technology is in its infancy and won't replace developers anytime soon. However, it can help speed development cycles and catch problems sooner.

AI can help improve the creative UX side before a project even gets to developers. A number of code-completion tools also use AI to improve recommendations. Facebook and others have found ways to use AI to debug and automatically patch code. AI development tools could also help improve code annotation, static code analysis and software management.

Over the last couple of years, machine learning has shown tremendous promise in various tasks, such as image and speech recognition, machine translation and improved analytics models. As a result, the terms machine learning and AI are often confused as synonymous, and it's easy to imagine that these techniques could be applied to every task. But, machine learning algorithms tend to be compute-intensive compared to other AI techniques and even advanced statistics.

Ultimately, programmers probably care more about AI development tools that automate some of the more boring aspects of application development rather than the underlying technology.

AI design

Generative design has been used in the architecture and mechanical design fields for years. The basic idea is to use a program that generates a design template in response to constraints such as size, mechanical properties or estimated costs. Similar techniques are now applied to create basic mockups, logos and wireframes that go into a website.

Robert Kostrzewski, a machine learning engineer at Netguru, a digital consultancy and software development company based in Poland, said he experiments with Bookmark, a website tool that uses artificial intelligence.

Adobe Sensei uses AI and machine learning to automate other aspects of UX, such as asset searches, to identify audio types or to generate effects.

Better code completion

Microsoft's Visual Studio IntelliCode is the next generation of IntelliSense, which helps to debug the code written in Microsoft Visual Studio. Microsoft trained the AI algorithm on thousands of lines of code from GitHub to make smarter code completion hints. It can also prioritize suggestions based on their likelihood of usefulness rather than an alphabetical list.

The Kite plug-in for various IDEs has taken a similar approach on how to use machine learning to improve code completion for Python. It can help reduce by almost half the number of keystrokes needed to write code.

Debug source code

Developers tend to spend considerable time manually debugging code. To debug existing codebases is still a major part of the development flow, Kostrzewski said, and AI could help this process become less painful and more effective.

For example, Facebook has started to experiment with SapFix, an end-to-end code repair tool that can automate test case design, bug detections and code repair. The company has used it to fix six production systems, which consist of tens of millions of code lines. Facebook claims this is the time that automated end-to-end repair has been deployed into production on industrial software systems in continuous integration and deployment.

SapFix focuses only on the most prevalent and simple bugs that are fixable with small patches. Also, it is limited to ameliorating the effect of bugs rather than fixing the root cause. Still, it is a step in the right direction.

Better code annotation

GitHub has also experimented with AI development tools to make code review easier as part of its jump to definition feature. "It is especially useful for larger teams," Kostrzewski said. It analyzes the code inside a repository and allows quick jumps between the definitions of a function or method. It is significantly useful for code reviews, which can easily check the rules that stay behind some definitions inside the code.

Static code analysis

Static code analysis tools have been widely used to analyze problems with new code before it's submitted into a repository. These tools often suggest improvements or recommend security enhancements by looking at the code structure. These static code analysis tools now also use AI to improve this process.

Kostrzewski said intelligent static code analysis tools to consider include Code Climate Quality and CodeBeat. Another good option is DeepCode, which uses AI to build more comprehensive analysis techniques with fewer rules.

Also, Ubisoft has also been working on a new set of AI tools for source code analysis that scan code for common errors as it's checked in. It has worked with Mozilla to develop Clever-Commit to spot code bugs in the Firefox browser.

Predict software delivery times

Software delivery organizations are highly complex and employ numerous tools to provide value to their customers. The proliferation of the adoption of often incompatible tools can come at the cost of inconsistency and lack of traceability between the data and data formats that each tool maintains internally. "This presents a significant barrier to applying AI to optimizing the software delivery value stream as a whole," said Robert Elves, senior director of product at Tasktop, a value stream management tools provider.

Elves often sees users refine Requirements in one tool, while the Stories to implement that Requirement are tracked by an engineer in a completely different tool. Although both can efficiently get work done in the tool of their choice, the business has lost all consistency and traceability at the data layer between tools.

When a software development organization captures this data into a centralized repository, it can create a treasure trove of historical data for their AI development tools from which to train algorithms to predict delivery times, classify defects and detect duplicates.

Intelligent and autonomous testing

While Agile environments have delivered vast improvements in software development, time and again we see recurring problems in the use and application of testing frameworks, said Manish Mathuria, CTO and co-founder of Infostretch, a digital transformation professional services firm. Some of the biggest challenges include uncertainty in the prioritization of test cases, too much time spent on test requirement clarification and communication, a huge backlog of test cases and rising test environment costs.

Intelligent testing takes a systems-level view of automated testing to see how and where AI and other techniques can improve these processes. Mathuria has seen intelligent testing increase agility by 25% to 35% and quality by 35% to 40%.

Another related discipline, autonomous software testing, focuses on weaving AI into the commercial testing tools themselves.

Dig Deeper on Development tools for continuous software delivery

App Architecture
Software Quality
Cloud Computing