How is machine learning embedding itself in software development lifecycle?
There are numerous advances being made in the field today using machine learning and software development, along with artificial intelligence (AI). They are impacting the machine learning software development and AI software development spaces that we are accustomed to. These tools come in the form of code completion, auto-completion based on context and intent, automated AI guided code reviews, etc. We can consider utilizing these advancements for both development and testing. Some of the tools are commercial while some are experimental in nature. Some of them are identified below.
Stack Overflow Autocomplete
This autocomplete tool in the well-known Stack Overflow platform is a classic example of an AI software development tool. This tool allows autocompleting fully functional code lines based on Stack Exchange data of existing code about the developer’s intentions.
Kite is a code completion tool that uses machine learning to complete a code while typing it. Kite is currently available for Python. Using code available on the web as a basis, Kite’s programming assistant, enables auto-suggestion using abstract syntax trees as a basis. The use of abstract syntax trees provide machine learning models with some sense of the code’s intent and context, delivering auto-suggestion and auto-completion of common code patterns based on how developers have written code in the past.
Kite performs all processing locally and explicitly, acknowledging that the Autocomplete-Python package is a Kite-sponsored package.
Such auto code completion features did exist, to some extent, in IDEs like Eclipse, where the user could request for suggestions. However, this is a little different when compared.
Codota is similar to Kite – it uses machine learning model, trained on Java, to suggest auto completions as you type. Similar to Kite, Codota uses the code’s syntax tree as the data for building its models. However, unlike Kite, Codota uses a cloud-based service provider to generate and serve predictions. Codota is available for Windows, Mac, and Linux, with editorial support for Eclipse (Luna and upwards), IntelliJ, and Android Studio.
Codota (free version) uses predictions created from freely available code. However, the enterprise version can use private code repositories for training.
Programming Synthesis using Examples and PROSE is based on Excel Flash Fill. This is another example of AI being used to assist developers in completing their task. PROSE generates software programs using the input-output examples that are supplied to it during runtime.
Some technical challenges addressed by PROSE
- PROSE attempts to address a key technical challenge of searching for programs that are consistent with the examples provided by users. This is done using PROSE real-time search methodology which leverages logical reasoning techniques and neural-guided heuristics.
- There could be many programs that can satisfy some of the users provided examples. In order to counter or propose alternatives, PROSE uses machine learning-based ranking techniques to help users select an intended program from a possible collection of programs. It also uses the active learning-based user interaction models that resemble an interactive conversation with the user, to iterate and arrive at the desired output.
- Using the Prose SDK, developers can create capabilities for new tasks domains as well.
One of the most fascinating, for me, is the ability to generate code from a GUI. This is made possible by pix2code, which transforms a graphical user interface screenshot into code. This has immense potential for a variety of uses, including building customized software, websites, and mobile applications, purely by using GUI design images.
Pix2code uses a deep learning model, trained on a data set provided along with the software, to produce GUIs in Android XML, iOS Storyboard, and HTML/CSS formats. Pix2code is an experimental research project. You can see the demo of this here: https://youtu.be/pqKeXkhFA3I.
DeepCode performs automated AI-based reviews of code to detect security vulnerabilities. It uses code available in public repositories to obtain and use common patterns, to identify security vulnerabilities.
As an example, let's assume that a piece of code takes the user-provided input and passes it directly to an SQL query to execute, without verifying the input. Such a scenario is identified as a security vulnerability and is flagged as such by DeepCode.
The critical bugs DeepCode claims to be able to flag include common security issues found in web applications: cross-site scripting, SQL injection attacks, remote code execution, and path-traversal attacks.
DeepCode is available on Github.
AI plays a major role in enabling developers with tools that transform software testing into a self-driven exercise with least manual intervention. Two such tools are Eggplant and TestComplete.
Eggplant, a commercial software, has a variety of products such as Eggplant AI and Eggplant Functional. Eggplant AI generates test cases and optimizes test execution to find defects and maximize coverage of user journeys. Eggplant Functional claims to provide test automation software that dynamically tests the UI for user experience. It claims to test from a user perspective through intelligent image and text understanding and API automation, thus providing the ability to perform functional testing at a faster pace.
Eggplant uses scriptless models, AI, and analytics to expand automation, from test-case generation and test optimization to result analytics.
TestComplete is another commercially available and automated UI testing tool that provides the ability to create, maintain, and execute functional tests across desktops, web, and mobile applications.
Software development involves many interrelated factors which could possibly affect development effort and productivity. Since many of these relationships are not yet well understood, accurate estimation of software development time and effort is a difficult problem. Most estimation models in use or proposed in the literature are based on regression techniques. Given this, at this time, there appear to be no viable products available, commercial or open-source, which can provide accurate and precise estimation for development, given a specific use case.
Some developments have shown that given proper input, AI can be utilized to design websites. One such example is the artificial intelligence design assistant (AIDA), by Bookmark (website building platform). AIDA starts with a user telling it what is required like an e-commerce shop or chat facility or even describing the business. Using this information, AIDA will design and build a website based on the selections from various combinations to create a website style, focus, image, and more, that are customized for the user. Once such a website is created by AIDA, there is a drag-and-drop functionality available to change fonts, colors, add maps, audio/video operations, calendars, forms, social media tools, etc.
AIDA is a commercial software available for users who subscribe to Bookmark’s pricing plans.
Given the nature of AI driven software development and the research that is being conducted, it is conceivable that coding will no longer be required in the near future and automation will produce and control the coding and testing of applications. We could succumb to the “black box” effect, with the only way to “tune” a model will be to feed it new data sets and look at the resulting outputs, which can become unmanageable and largely inefficient.
However, in the interim, since we are not able to rely completely on an AI tool for building a complete solution yet, we can look at AI-based tools to augment our efforts to develop better products/applications. The role of app developers will continue to be extremely critical and will depend on how we utilize AI-powered tools to ensure maximum productivity.