Tuesday 5 July 2016

Continuous Testing

Business Problem:
A product company that releases a new version every quarter is facing challenge such as
-         the product released had untested features and regression bugs resulting in compromised customer experience.
-         many issues fixed in the development stage were getting delayed to move to production.
Continuous Integration and Testing helps in overcoming these problems.
This article describes how Continuous Testing can be implemented in a product engineering group.
Continuous Testing:
As enterprises continue to evolve processes and practices so that they can reduce the time from development to production, Continuous Testing plays a key role in facilitating this.
Continuous testing in its most advanced form is seamless integration of code repository, build, unit tests, functional tests, and deployment to stage / production server.
However, organizations cannot reach the final stage in one go. They have to implement the process stage wise in order to avoid disruption in operations during the implementation.
Recommended Approach:
1.     To improve the quality of the code, it is recommended that
-         The source code repository (SVN / GIT) is integrated with code quality tools PMD and FindBugs to ensure that the source code maintains the technical quality as per the defined baseline.

2.     To shorten the testing time for the monthly release, the following process and tools are recommended
-         The code repository is integrated with a CI tool like Jenkins. A build job defined in Jenkins is triggered every time a new code is checked in or updated.
-         The development build is automatically run through unit tests using Junit.
-         Automate the testing of stable features
-         The automated tests – smoke tests and functionality tests – are run continuously using a tool like Jenkins.
-         The issues are reported to the development team and a new build is generated as a result of code changes.
-         The release is done once the new features are tested and product is stable

The above set of steps is repeated for every release.
 
 



Current Status:
In the product group, the process of continuous testing is a combination of manual and automated tests. It is implemented as follows:
-         The test sets are divided into Smoke Tests Set and Functionality Tests
-         The Functionality Tests are grouped into different batches
-         The functionality tests batches are scheduled to run alternate day
-         The smoke tests are scheduled to run every day.
-         The tests run continuously and on the test environment.
     -    The tests sets are basically covering the regression tests and will make sure that there are no regression bugs when a new release is planned.
     -    For testing new features for every release, manual testing approach is adopted.


The product group has reduced the regression test time by 2 weeks for every release. It has also removed the manual effort for regression testing by using Selenium test automation tool.

Monday 16 May 2016

Continuous Integration and Continuous Delivery (CI-CD)

  Long gone are the days when software was developed as large monolithic entity and released every quarter or six months. Customers had to wait for months for their critical bug fixes or use a semi tested patch release in order to overcome blocking issues.
 The current software delivery model is one of Continuous Integration and Continuous Delivery (CI-CD).

Organizations that are involved in delivering software applications to enterprises, essentially have operational goals that

    • Enable faster delivery of enterprise software
    • Speed up Build and Test Cycles from current baseline
    • Enable them to move to scalable architecture
    • Helps add more capacity to handle increased demand
CI-CD itself forms a part of the larger umbrella of DevOps processes. (More on DevOps in my later post).

In this article I am going to illustrate the CI-CD concept which addresses the goal of "Enable faster delivery" and the tools that are available to achieve the same. 


CI-CD Pipeline


Typical  DevOps life cycle processes in Application Development can be explained with the below diagram




The total time for release = CI time + CD time
In order to reduce the cycle time for release, the CI time and CD time have to be reduced.

The CI time is reduced by reducing the gap between code check-in and build process.

The moment code changes are committed to the repository, the build should be triggered and output of the build be made available for the next phase in the pipeline.

The tools available for this phase are code repositories like Git / SVN and CI tools like Jenkins, Bamboo.

The CD time is reduced by automating the Testing and Deployment processes.

Typical testing includes - UI testing, Web Services testing, and Data Layer / Server side testing.
Testing at each of these layers has to be automated and integrated with the Continuous Deployment
tools.

The tools available for CD are
- Selenium for UI testing
- Jenkins for Deployment

RLCatalyst is a tool that provides a platform to implement CI-CD processes in an organization. 

More about RLCatalyst and Continuous Testing in my next article.




Sunday 24 April 2016

About this blog


I am experienced and interested in the following technologies
 - Enterprise Architecture
 - Product Engineering
 - QA & Automation
 - Centers of Excellence
 - Databases & Tools
 - Operating systems - Linux, Unix, & Windows

I will be writing articles on above topics, topics that interest me, and some cutting edge technologies

I hope to write one post per week.