
DevOps Enhancement with Continuous Test Optimization Dusica Marijan Sagar Sen Simula, Norway Simula, Norway [email protected] [email protected] Abstract—Growing evidence suggests the DevOps approach frequently, which amplifies the need for time-efficiency in enables faster development and deployment, and easier mainte- testing. This implies that for each integration cycle test suites nance of applications. Still, the efficiency of DevOps is constrained need to be optimized for short run-time and maximized fault- by long cycle times. This paper presents the approach for improving time-efficiency in DevOps, and in particular con- detection. tinuous integration testing, using continuous test optimization. Existing techniques to improve the efficiency of software The approach uses test redundancy analysis to discover test testing in continous integration include test selection and overlap with respect to feature interaction coverage, and based prioritization [7], [8], [9], which aim to find an optimal on detected redundancy to reduce the size of a test suite. Smaller- combination and order of tests for achieving faster test runs. size test suites execute faster and enable shorter test cycles, which further enables shorter release cycles. The approach has been However, techniques that optimize testing for low run-time experimentally evaluated using an industrial case study, against often compromize the ability of tests to detect faults [11], [12], three metrics: industry practice of test selection for continuous [13], [14]. We argue that for DevOps, this aspect becomes integration testing, retest-all approach, and random test selection. especially important. It is essential that testing in DevOps The results suggest that the proposed test redundancy detection is time-efficient, at the same time as being able to detect and reduction efficiently reduces test cycles in CI compared to industry practice and retest-all approach, and improves fault- the most critical faults. Another issue that creates challenges detection effectiveness compared to random test selection1. for efficient testing in DevOps is the size of test suites. In Index Terms—DevOps, Continuous integration, Continuous particular, iterative feature requests and frequent changes of integration testing, Test optimization, Test redundancy requirements constantly drive a test suite size larger and larger, while its quality is not maintained simultaneously. When test I. INTRODUCTION suites grow in size, the containing test cases start overlapping, DevOps is a growing development practice that promises covering the same features (parts of functionality) multiple to enable faster development and efficient deployment of times in different test instances. This effect is known as test applications without compromising on quality. The main prin- redundancy, and it negatively affects time-efficiency of testing ciple underlaying DevOps is increased communication and in DevOps. Besides directly increasing test effort (if all related collaboration between development, testing, and operations, test cases are post for running), test redundancy also increases which makes it possible to minimize the time between making test maintenance costs. a change and deploying the change into production. Further, In this paper we propose an approach for improving time- this makes it possible to respond faster to new and rapidly efficiency of DevOps by continuously optimizing long running changing requirements, and thus remain agile. However, in- test cycles based on test redundancy detection and reduction. creased communication and collaboration do not suffice in Specifically, for each test cycle we analyze test overlap with reaching this goal on their own. A key aspect is enabling respect to changes and feature interaction coverage in a test an efficient and optimized continuous integration practice. suite, and then detect and remove tests that do not contribute to Continuous integration is a software development model of increased unique feature interaction coverage. We validated the frequent integration and testing of source code to detect defects approach in one industrial case study, comparing with industry early in development. This practice has been associated with practice and with the state of the art techniques. The approach benefits such as improved code quality, more frequent releases, demonstrated the improvement in time-effectiveness and fault improved development productivity, less-costly development, detection effectiveness of CI testing in DevOps compared to and easier code maintenance [2], [3], [4]. The major bottleneck industry practice. however in making continuous integration efficient is long- The paper is organized as follows. In Section II we provide running testing of code changes after integration. In particular, background and related work, as well as some challenges of after a change is made to the code, a set of automated tests efficient testing in DevOps in the presence of test redundancy. are run to verify the change. As changes in DevOps are In Section III, we describe our approach for improving time- made frequently, testing of changes before integration runs efficiency of DevOps with continuous test optimization based on redundancy detection. In Section IV we give results of the 1DOI reference number: 10.18293/SEKE2018-168 experimental study evaluating the approach against industry practice. We draw the conclusion in Section V. feature coverage in the example provided below, two tests T estA and T estB cover the identical feature set fb; cg. As II. BACKGROUND AND RELATED WORK the pairwise feature set covered by T estA is a proper subset In the following we revisit the key concepts underlying our of the pairwise feature set covered by T estB, we say that work on making DevOps practices more cost-effective. We T estA is redundant with respect to T estB. also summarize some of the critical challenges for effective testing in continuous integration and DevOps. T estA = [b; c] ! fb; cg A. DevOps T estB = [a; b; c] ! fa; bg; fb; cg; fa; cg DevOps is defined as a set of software engineering practices that aim to build an agile relationship between development Test redundancy can be caused by multiple factors, such as and operations. A key principle is constant communication and test reuse in manual test specification, when existing tests are collaboration between development and operations, enabling modified for testing new similar functionality, unintentionally benefits such as faster development and deployment of features leaving parts of already tested functionality. Other causes into production, faster detection and correction of issues, and include incomplete requirements specification, redundancy of cost-effective running of dependable software with minimal requirements, legacy, static test suites, parallel testing, or dis- risks. Existing approaches for improving testing in DevOps tributed testing [6]. In this work we are interested in analyzing are still narrow. There is an approach reported for run-time test redundancy in integration tests, which test varying number monitoring and reporting to developers, referred to as the of feature interactions to expose any faults in interaction filling-the-gap tool, which enhances and automates the delivery between integrated individual code components. of application performance information to the developer, with D. Regression Test Optimization the goal of improving the quality of service or reducing DevOps promotes iterative development, where smaller self- maintenance cost [20]. However, more approaches addressing contained changes are made to software frequently. Every various other challenges in continuous integration testing for change is regression tested to check whether it introduces DevOps are missing, and such limited state of the art in this any faults caused by the interaction of integrated components. field gives even more motivation for our research. Since speed is one of the key requirements of efficient DevOps, B. Continuous Integration regression testing requires only a set of relevant test cases. This is especially important in fast-evolving systems where Continuous integration (CI) is a practice deemed a key test suites used for validating the correctness of systems enabler for DevOps. CI is a technique that continuously inte- grow quickly. Previous studies have shown that test suite size grates code changes from all team members, merges them with has a large impact on the overall test cost in the software the mainline, and verifies the changes against regressed aspects development lifecycle [12], [15], [16]. Therefore, finding such of the modified code (for unintended effects) with automated a set of relevant test cases is the goal of regression test tests. The CI practice prevents working on isolated branches optimization. Specifically, regression test optimization aims to for too long, which over time start diverging from each other, find an optimized set and order of regression tests that satisfy leading to high effort of integrating such multiple branches predefined optimization objectives. This includes selecting a into the mainline. An important aspect of CI is enabling relevant set S0 based on S, known as test selection [17], rapid automated regression testing of code changes, which and finding the execution order of tests in S0, known as test will give quick feedback to developers on the correctness prioritization [19]. In this work we focus on test optimization of their changes. Since CI runs frequently, if it takes long guided
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages6 Page
-
File Size-