AI to drive Product Quality?

Posted: December 1, 2016 in Uncategorized

Let me start with some of the popular transitions around the idea of “Product Quality” that went on to create many jobs at different levels. I have also represented each transition as a level.

The Transition levels are not mutually exclusive. Each Transition level may or may not co-exist during the course of existence of the Universe!


Each of these levels could exist in different ratios at different points of time spanning across the existence Software Engineering (I will leave it to you to guess/predict/compute the time span of Software Engineering).

Testing was carried out alongside Development. Then testing began gaining importance and was beginning to be prioritised in Software Development cycle. Thereafter it was being handed over to a separate group called Quality Assurance to share the load and bring in a user acceptance perspective to Testing. Testing was still mostly manual. Quality Assurance began automating many of the repetitive tasks confined to testing activity and Automation Testing mostly marks the beginning of transition to Quality Engineering in order to address the various inefficiencies impacting the quality of a software product.

Automation was not just confined to testing activity alone, but also automation of other repetitive tasks such as automation of releases with CI/CD systems (evolved into Release Engineering), then automation of infrastructure provisioning and cloud based infrastructure picking up pace (evolved into DevOps) and sometimes Release Engineering and DevOps together being called as Site Reliability Engineering. In general, I think Quality Engineering is a super set of Release Engineering, DevOps and Site Reliability Engineering. There is no denying of fact that all of these roles including Testing did exist (or were carried out by a lone warrior called Developer) even before they were re-christened with specific names.

Let us look at what next after Quality Engineering at level 4.

To do so, I will deconstruct Quality Engineering along the lines of Testing. As you know, Quality Engineering is different levels of automation of different aspects of a Software Development cycle and all subsets mostly aligned with a common goal of ‘developing a piece of software efficiently‘.


The various stages of indicates various degrees of automation of testing process. All of the levels usually have the 3 common feedback parameters namely bugs, false positives and execution times, each having varying degrees of impact on each stage. It is this impact that leads Quality Engineering to transition between different stages and we choose a Stage to solve our problem of testing based on the implementation cost of automation + cost of resolution of feedback.

In the first glance, it might occur that the implementation is costliest at Stage 4 relative to Stage 1, 2 or 3. While I claim, that it is not always true. The cost of addressing the feedback plays a significant role in decision-making.

Consider if there was a Stage 0 with zero automation (meaning manual testing only). It is quite predictable from our experience how Stage 2 is cheaper than Stage 0 and Stage 1 as well. For a fairly complex system, the execution time in Stage 0, is quite large and thus, impacting the cost of addressing feedback (assuming infinite energy on the part of the tester to test the system).

Now, consider a system of greater complexity and also catering to more diverse and unknown/unexplored real-world territories, the size of test data set could grow exponentially and there is a direct impact on redundant testing and execution time. This leads us to pursue other approaches to optimize test data set such as the application of Orthogonal Array Testing(OAT) technique. Furthermore, to improve the testing “effectiveness“, help from the field of Data Science could be taken to more deeply understand the behavior of the system under test.

Now, let us take this a little further, say, I build an automated source of “truth” system and validate the behavior of the application in real world, which could then notify of possible bugs, we could flag them as valid or false positive and enhance (or train) this “truth” system. Did I just say “train”? Well, I leave the rest to your imaginations!

To conclude, testing and system-testability (will post a new write-up on system-testability soon) can also take the role of being a feature of an application/system given the need for the system and availability of resources and we eventually converge back to being Developer. It just seems like an alternative career track/journey to being a Developer driven by the Quality Engineering philosophy. Hence, engineer out a solution for a Quality problem that you are facing like a Developer does!

Reason being: Spotify requires libgcrypt11 as dependency (I’m not sure if this is the right way of expressing this dependency). Upgrade to Ubuntu 15.04 causes libgcrypt20 to be installed and libgcrypt11 could possibly be cleaned.

Fix: We have no other option for now but to install the required version of the dependency.

Download the 32-bit or 64-bit based on your OS @ 32 and 64

Install the downloaded package. You can now launch your applications such as Spotify which are dependent on lbgcrypt11.

The below is a sample implementation of a binary search tree for all beginners out there. The code is pretty self-explanatory.

I shall come out with some interesting operations on the binary (search) tree from time to time basis.

package com.revindran.binarytree.utils;

public class BuildBinaryTree {
        static class Treenode{
              Treenode left;
              Treenode right;
              Integer nodeValue;
               public Treenode(Integer aValue){
                      this.nodeValue = aValue;
        public static void addNode(Treenode rootnode, int value) {
               if (value rootnode.nodeValue) {
                      if (rootnode.right != null) {
                            addNode(rootnode.right, value);
                     } else {
                           rootnode. right = new Treenode(value);
                           System. out.println("Inserted " + value + " to the right of "
                                         + rootnode. nodeValue);

        public static void main(String[] args){
              Treenode node1 = new Treenode(5);
               addNode(node1, 6);
               addNode(node1, 1);
               addNode(node1, 7);
               addNode(node1, 4);
               addNode(node1, 3);
               addNode(node1, 0);

This video features configuring Eclipse on a Linux box. This video shows eclipse being configured on a Linux Mint box.

A part of the frame was lost while recording the video. Hence I have added the commands as subtitles for better legibility.

Please visit for more such videos and tips primarily centered around Linux.

This video features background song:
“Two dimensional world”
Album Ultrawired by Dope Stars Inc.

Please visit
to learn more about the rights related to this song.

Video  —  Posted: July 23, 2013 in Uncategorized

Here is a way you can get over the long process of adding the SSH certificates to your system keystore while you are attempting to carry out some activity on the remote host which you trust.

>> curl –insecure [remaining part of your command here]

Important to note:
However, it needs to be understood here that the host you pick to ignore the certificates from, should be a source that you trust. If it’s not a host that you do know very well, I advice you to verify the certificate manually and then add it to the keystore.

The above method should be helpful to people normally when they are dealing with the hosts present in their office/home intranet.

Bed Setup: Kubuntu 12.10 32-bit, AMD Athlon x64 X2 processor, ASUS Motherboard, HP Scanjet 2410 (Another last generation hardware!!! :P)

Friction in your System: You connect the scanner to your system, and launch some imaging application. However, you fail to see your scanner listed out in your scan/imaging hardwares’ list.

Cranking Your System:

Well, there are lots of sources out there to get your scanner to work. However, they could mean that you get your hands dirty installing many packages, editing various conf files and so on. However, this is a one step process. All you gotta do is install xsane imaging application. The following code should do the trick.

sudo apt-get install xsane

DYS now:

Connect your scanner now and launch the xsane application from your favorite application launcher and you are ready to scan your first page on Ubuntu.

Under the Bonnet:

As you launch the xsane scanning application, the application looks for the connected scanners and Scanjet 2410 in this case. And bam, you are presented with a preview/scan image page.

Welcome to the 1st post of #DYS series.

Bed Setup: Kubuntu 12.10 32-bit, AMD Athlon x64 X2 processor, ASUS Motherboard, Lexmark Z603 InkJet printer (I know this printer is a generation old. :))

Friction in your System: You connect the printer to your system, and try attempt to print a doc, but you fail to see your printer configured in printer configuration settings. If you have connected your printer for the 1st time, you might have also come across printer configuration dialog with Lexmark in it, but you don’t get to pick z600 series from it. It’s not listed there.

Cranking Your System:

1. Install this Debian package.

2. Launch ‘System Settings’ from the Application Launcher.


3. Navigate to ‘Printer Configuration’ dialog from the ‘Hardware’ section.


4. Click on the ‘New Printer’ button from the ‘Add New Printer’ section.


5. Select ‘Lexmark Z600 Series’ from the ‘Select Connection’ column and click on ‘Forward’.


6. Select ‘Select printer from database’ section and select ‘Lexmark’ from the list box and click on ‘Forward’.


7. Select ‘Z600 v1.0-1’ from ‘Models’ list box and ‘Lexmark Z600 v1.0-1 [en]’ from the ‘Driver’ list box, click on ‘Forward’ and complete the printer configuration.


You should find ‘Lexmark_Z600_Series’ added to the ‘Local Printer’ item in the list box in the ‘Printer Configuration’.


8. Click on ‘Lexmark_Z600_Series’ and check ‘Enable’ and ‘Accepting’ options in the ‘Printer Status’ section. Check ‘Sharing’ option as well if you want the printer to be available to other users connected to your system.

DYS now:

1. Click ‘Print Test Page’ option get a glimpse of your printer working.

Below is a snapshot of my printer and test page.


2013-03-23 15.56.10

Launch of DYS Series

Posted: March 23, 2013 in DYS Series

Whatsup guys! I shall be starting a DYS (Drive Your System) series primarily focussed on Linux but not confined to it though. I shall be touching on technologies such as SAAS, OpenStack and many such areas. As you might have seen from my earlier series I have dealt with various how-tos about getting your system to work with various kinds of hardware, I/Os and things like that. This is a continuation to the same and but a fresh start to how I shall be archiving all of them together.

So please do follow my blog by subscribing to the RSS feeds on your RHS of the screen.

If you really find this blog worth your time and reading, please do not hesitate from sharing it to your network. 🙂

Demo to code and save a Python file, and execute the Python Program, all via Ubuntu Terminal or Shell prompt.

Video Outline:
– Create a sample directory structure
– Write the Python program by making use of “vim” editor
– Execute the Python program

Drop in your comments/suggestions below and I should try incorporating them in my upcoming videos and Please DO NOT FORGET TO SUBSCRIBE to my Channel “HashBoard“. 🙂