What Are We Doing With AI and Machine Learning? February 12, 2016Posted by Peter Varhol in Software development, Uncategorized.
Tags: AI, Machine Learning, testing
When I was in graduate school, I studied artificial intelligence (AI), as a means for enabling computers to make decisions and to identify images using symbolic computers and functional languages. It turned out that there were a number of things wrong with this approach, especially twenty-five years ago. Computers weren’t fast enough, and we were attacking the wrong problems.
But necessity is the mother of invention. Today, AI and machine learning are being used in what is being called predictive analytics. In a nutshell, it’s not enough to react to an application failure. Applications are complex to diagnose and repair, and any downtime on a critical application costs money and could harm people. Simply, we are no longer in a position to allow applications to fail.
Today we have the data and analysis available to measure baseline characteristics of an application, and look for trends in a continual, real-time analysis of that data. We want to be able to predict if an application is beginning to fail. And we can use the data to diagnose just what is failing. In that the team can work on fixing it before something goes wrong.
What kind of data am I talking about? Have you ever looked at Perfmon on your computer? In a console window, simply type Perfmon at the C prompt. You will find a tool that lets you collect and plot an amazing number of different system and application characteristics. Common ones are CPU utilization, network traffic, disk transfers, and page faults, but there are literally hundreds more.
The is a Big Data sort of thing; a server farm can generate terrabytes of log and other health data every day. It is also a DevOps initiative. We need tools to be able to aggregate and analyze the data, and present it in a format understandable by humans (at the top level, usually a dashboard of some sort).
How does testing fit in? Well, we’ve typically been very siloed – dev, test, ops, network, security, etc. A key facet of DevOps is to get these silos working together as one team. And that may mean that testing has responsibilities after deployment as well as before. They may establish the health baseline during the testing process, and also be the ones to monitor that health during production.