DevOps phases across Software Development Lifecycle

: DevOps is the combination of cultural mindset, practices, and tools that increases a team's ability to release applications and services at high velocity. The development and operations teams always have a conflict around the scope of responsibility. With these differences the quality and speed of delivery across software Development Life Cycle is negatively impacted. DevOps is about removing the barriers between two traditionally delimited teams, development and operations. With DevOps, these two teams work together to optimize both the productivity of developers and the reliability of operations. They strive to communicate frequently, increase efficiencies, and improve the quality of services they provide. They take full ownership for their services, often beyond where their stated roles or titles have traditionally been scoped. Transitioning to DevOps requires a change in culture and mindset first. It is quite difficult to persuade a whole company to change its culture at once [1]. This paper aims to bring different phases of software development lifecycle into DevOps implementation strategy and presents a comprehensive collection of leading tools used across Software Development life Cycle to automate and integrate different stages of software delivery. This paper also highlights on DevOps practices which span across different phases of the Software Development Lifecycle and how those can be implemented with different tools available.


Introduction
The objective of DevOps is to make the software delivery lifecycle as efficient as possible to enable more business change to be delivered and, ultimately, so efficient that business change can be delivered continuously. DevOps is implemented through a combination of people, process and tooling. Continuous Integration and Continuous Delivery also known as CI/CD are a critical component in DevOps [2]. CI/CD enables to deliver the code faster and securely. DevOps emphasizes on people working together and accepting the change [3]. It helps in releasing of high-quality software and at a faster delivery speed. It encourages a culture of open-mindedness, predictability, cross-skill training and performing shared tasks. Often implementing DevOps is easier said than done. For solving the problem of integration between different environments and tools, DevOps tools play a critical role [4]. These tools once implemented blend different systems together and work in a continuous serving fashion enabling any change in the source code to propagate across different environments [5]. A lot of Organizations face the challenge of selecting a fit for purpose tool and selection of appropriate DevOps Tooling is an important criterion to automate and integrate different systems together. Figure 1 below shows various DevOps tools which are spread across different phases of DevOps. In general, a lot of software delivery programs uses Open-Source tools as they continue to evolve further. Organizations have also developed internal frameworks to calculate the maturity level of the DevOps implementation in a project.

Figure 1. DevOps tools at various stages
Jira is a Plan and track tool which helps in sprint planning, creating stories and issues and track the issues with labelled priority. Confluence is a documentation tool which serves as a knowledge base at a common place. Gitlab is a hosted version control tool to store the code committed by developers. There are various IDE tools where developers write and compile the code locally. Docker is a container technology which isolates the application in a self-contained environment. Jenkins is a continuous integration server which helps to continuously integrate the code into different environments [6]. Artifactory is a repository manager tool which stores the build artefacts and libraries centrally. SonarQube is an opensource static code analysis tool and helps in analysing the code against different code quality rules defined in the quality profile [7]. Cucumber and Selenium are test automation frameworks for automated testing supporting multiple programming languages. Ansible is a configuration management tool which automates the configuration of applications and infrastructure too. Grafana is a monitoring tool which provides charts, graphs, and alerts for the web when connected to supported data sources. Elasticsearch, Logstash and Kibana commonly called as ELK stack provides logging and monitoring capabilities into a DevOps tooling.

DevOps and Agile
DevOps integrates Agile processes with operations. Agile and DevOps are not the same, but they do go well together. Both Agile and DevOps share in common the idea of getting fast feedback [8] as depicted in the figure 2. In Agile, a review is done at every sprint. DevOps is similarly build on the idea of getting fast feedback, starting with during Continuous Integration ("Is our code still working after a change?") going on to Continuous Testing ("Does it do what it should?") all the way to continuously monitoring an application in production to get feedback to apply to the next version. So, one could argue that Agile is a subset of DevOps that is cantered around the practice of collaborative development and one would not be wrong. However, it is important to note that a project can be agile without employing much of the DevOps practices and another project can use a waterfall methodology and still employ DevOps practices throughout. Plan & Measure, II.
Release & Deploy, and IV.
Monitor & Optimize  The technological enablers for DevOps establish DevOps capabilities by automating different trivial and non-trivial tasks [10]. Automation helps in achieving continuous delivery and deployment by providing a DevOps pipeline to production for all changes to a given software environment [11].

Continuous Testing
Utilizes highly automated approaches to dramatically reduce the time and effort in delivering quality results [12]. Eliminates testing bottlenecks through virtualized dependent services. It simplifies the creation of virtualized test environments. Continuous Testing also reduces the costs of provisioning and maintaining the various test environments.

Figure 4. Test Automation Pyramid
Most of the software testing activities are based on the test-driven development [13] which is supported by continuous integration practises.
Developers are required to write unit test cases to integrate their code frequently [14]. These tests are executed repeatedly in the automated fashion by means of continuous integration as shown in the figure 4 above.

Continuous Release & Deployment
There are various advantages of continuous release and deployment. Continuous deployment helps in receiving an early feedback from the customers and users. It enables frequent and reliable releases which improves customer satisfaction [15], trust and product quality [16]. It also enables teams to perform on-demand Dev/Test self-deployments to continuously integrate software driven innovation. Figure 5 below shows a high-level build and deployment cycle till Production environment.

Continuous Monitoring
Continuous Monitoring automates and optimizes the ability to monitor and manage the performance and availability of applications and infrastructure continuously. It tells how good my systems are performing and whether it needs any correction [17]. Choice of correct tool decides the level of correctness which can be brought into the system. Following are the main areas for monitoring in a DevOps implemented project: Logging needs to be used effectively to monitor application logs. Logging mechanism works at multiple levels and should be configured to analyse the logs by drilling down when needed [18].
The logs are analysed to provide quality feedback to the development teams and then perform a deeper problem analysis to go to the root of the issue. The results of the log analysis help the development and Operations team to prepare better for future.

Continuous Customer Feedback and Optimization
Continuously getting customer's feedback on their experience brings far better insights that form the basis for improved decision making and optimization. An early and rapid feedback from the systems help to save time and improve the end user experience on continuous basis [19]. The DevOps maturity model enables growth through continuous learning among development and operations teams as depicted by figure 6 below. The capabilities and skills defined, guarantees enhanced ability to handle issues of scale and complexities. Information Technology Infrastructure Library, ITIL is a framework of best practices for IT service management which focuses on aligning IT services according to the needs of the business. The degree of DevOps implementation can also be measured by means of maturity models against various matrices [20].  Figure 7 below shows this list of various tools used in the projects pertaining to Retail, Banking and Automobile industries. Each of these tools serving one of the DevOps phases are unique in its own ways and provide different features while making optimum use of the tools for the right purpose [21]. These tools are used to design, build, deploy, test, monitor, manage and operate software and systems connected as one integrated pipeline. Tools are broadly classified as Commercial and Open Source tools. With the Open Source community growing large and enabling state of the art functionalities, a lot of Enterprises have moved to Open Source from Commercial tools also because of the high cost of licencing. Jenkins is an open source Continuous Integration and automation server which works on pluginsbased architecture [22] and has the capability to integrate variety of tools enabling Continuous Integration/ Continuous Delivery also known as CI/CD toolchain and it can build deploy and test across multiple platforms [23]. With the invent of Cloud Computing, various services are available for performing automation tasks which are cloud native to support the platform developed on Cloud [24]. Security services is an added advantage which comes with Cloud providers. The cost of these services depends on the volume and usage across the platform.

Conclusion
The origin of DevOps occurred to fill the gaps between Development and Operations teams. DevOps implementation is considered to be successful when it majorly relies on the integrated solutions provided by different tools which span across the Development lifecycle and helps removing manual steps, reduce errors, increase team performance and capabilities, increases agility and bridge the gaps between isolated teams [25]. DevOps tools play a key role in automating the routine tasks which otherwise needs manual intervention in different phases of Software Development Life Cycle. The tools are evolving quite frequently and are fulfilling the requirements raised by modernization of applications and migration to cloud. With the inception of Cloud and with lot of Organisations migrating and planning to migrate to cloud opens new dimensions of DevOps implementation with availability of cloud native and existing DevOps tools.