Synthesizing Continuous Deployment Practices Used

Transcription

Synthesizing Continuous Deployment Practices Used
Synthesizing Continuous Deployment Practices Used
in Software Development
Akond Ashfaque Ur Rahman, Eric Helms, Laurie Williams, and Chris Parnin
Department of Computer Science, North Carolina State University,
Raleigh, North Carolina, USA
{aarahman, edhelms, lawilli3, cjparnin}@ncsu.edu
Abstract – Continuous deployment speeds up the process of
existing agile methods, such as Scrum, and Extreme
Programming (XP) through the automatic deployment of
software changes to end-users upon passing of automated tests.
Continuous deployment has become an emerging software
engineering process amongst numerous software companies, such
as Facebook, Github, Netflix, and Rally Software. A systematic
analysis of software practices used in continuous deployment can
facilitate a better understanding of continuous deployment as a
software engineering process. Such analysis can also help
software practitioners in having a shared vocabulary of practices
and in choosing the software practices that they can use to
implement continuous deployment. The goal of this paper is to
aid software practitioners in implementing continuous
deployment through a systematic analysis of software practices
that are used by software companies. We studied the continuous
deployment practices of 19 software companies by performing a
qualitative analysis of Internet artifacts and by conducting
follow-up inquiries. In total, we found 11 software practices that
are used by 19 software companies. We also found that in terms
of use, eight of the 11 software practices are common across 14
software companies. We observe that continuous deployment
necessitates the consistent use of sound software engineering
practices such as automated testing, automated deployment, and
code review.
Keywords—agile; continuous deployment; continuous delivery;
industry practices; internet artifacts; follow-up inquiries
I. INTRODUCTION
Agile practitioners consider end-user satisfaction through
early and fast delivery of software as their highest priority [3].
Continuous deployment is a software engineering process that
focuses on rapid delivery of software changes to end-users,
and in this software engineering process incremental software
changes are automatically tested, and frequently deployed to
production environments. Facebook [10], Github [39], Netflix
[30], and Rally Software [31] are some of the many software
companies who are using continuous deployment to deploy
their product. Gartner has identified the foundational practice
of continuous deployment in web-scale information
technology (IT) as one of the top ten strategic technology
trends for 2015 [14].
Software companies who are using continuous deployment
have reported several benefits of this software process, such as
improved customer satisfaction, improved software quality,
and savings in development effort [27]. Despite being an
emerging software process that provides several benefits,
software practitioners have identified the ‘lack of
understanding’ of continuous deployment as an adoption
challenge [9].
One way to understand continuous deployment is to learn
about the practices and techniques used by software
companies to implement continuous deployment. Some of the
software companies have used Internet artifacts, such as blog
posts, slide and audio presentations, to share their experiences
and techniques of using continuous deployment. However,
searching the Internet to collect and contrast all relevant
artifacts might require significant time and effort [28].
Software practitioners can benefit from a study that
systematically analyzes the software practices used by
software companies to implement continuous deployment.
Relative to the adoption of new technologies, software
practitioners often prefer to learn through the experiences of
other software practitioners who belong to the same industry
[29]. This group of practitioners can benefit from a study that
maps the software practices and the software companies who
are using these practices in continuous deployment.
The goal of this paper is to aid software practitioners in
implementing continuous deployment through systematic
analysis of software practices that are used by software
companies. We studied the continuous deployment practices
of 19 software companies by performing a qualitative analysis
of Internet artifacts and by conducting follow-up inquiries.
Continuous deployment is closely related to DevOps as a
concept. Continuous deployment aims at rapid delivery of
software changes to end-users via automated build, test and
deployment [19]. On the other hand, DevOps has emerged as a
methodology that is involved in the entire product lifecycle
through marketing, planning, human resources, and sales
along with development and operations [42]. In our paper we
focus on analyzing the software practices used in industry to
implement continuous deployment.
We state the following research question: How frequently
are different software practices used by software companies
that perform continuous deployment? To answer this research
question we collected the software practices used by software
companies who are using continuous deployment. We define
these software practices as continuous deployment practices.
This paper uses the qualitative analysis of Internet artifacts
and follow-up inquiries using e-mails and social networking to
study and analyze the continuous deployment practices.
We summarize the contributions of this paper as following:
a. A summary and concise definition of continuous
deployment practices
b. A mapping of continuous deployment practices and the
software companies who are using these practices
c. The techniques adoptees have used to realize each of
the identified continuous deployment practices
The rest of the paper is organized as follows: in Section II,
we briefly describe the background of continuous deployment
and prior academic work related to our paper. In Section III,
we explain the research methodology of this study in detail. In
Section IV, we report our findings. We use Section V to
describe the continuous deployment practices with appropriate
details. We use Section VI to discuss our findings. We present
the limitations of our study in Section VII. Finally we
conclude and discuss about future research directions of our
study in Section VIII.
II. BACKGROUND AND RELATED WORK
In this section, we first provide definitions. Next, we briefly
describe prior works that have studied adoption of software
engineering practices, use of agile and lean in industry,
practice of rapid releases, and use of DevOps as a practice.
A. Definitions
The motivation of continuous deployment is delivering
software changes and features to the end-uses rapidly. In 2004,
Beck and Andres introduced the concept of daily deployment
as a corollary agile practice [4]. The authors defined the
practice of ‘putting new software into production every night’
as daily deployment, similar to the concept of continuous
deployment. In 2006, Humble et al. [21] introduced several
guidelines of implementing continuous deployment as a
practice in software development.
Continuous delivery and continuous deployment are two
software engineering processes that focus on delivering
software changes quickly to end-users. Humble and Farley
[19] defined continuous deployment as a software process that
releases software changes automatically to end-users after they
pass the required automated tests. According to Martin Fowler
[12], continuous delivery is the software engineering process
that builds software in such a way that it is releasable at any
time; and continuous deployment is the software process that
actually releases software to production as soon as they are
ready, resulting in many deployments to production every day.
Humble and Farley and Fowler’s definitions of continuous
deployment are similar, though Fowler does not stipulate the
use of automated tests.
Some software companies do not strictly follow either of
these definitions of continuous deployment. Their deployment
rate varies from one another, e.g. Facebook deploys its
software changes twice per day [10], whereas, Etsy deploys its
software changes 30 times per day [5]. To facilitate a
discussion that includes software companies who are
deploying different times per day, we use our own definition
of continuous deployment in this paper. We define continuous
deployment as a software engineering process where
incremental software changes are automatically tested, and
frequently deployed to production environments. We define a
software company that is using continuous deployment to
deliver software changes to end-users as a continuous
deployment adoptee or adoptee, in short.
B. Adoption of New Practices
Prior works have discussed the motivating factors and
challenges of adopting a new practice and necessary
mitigation techniques to overcome these challenges. Passos et
al. [35] focused on motivation of adopting a new software
engineering practice and investigated the motivating factors of
adopting a new software engineering practice. Claps et al. [7]
focused on technical and social challenges of adopting
continuous deployment. In a recent work, Leppanen et al. [27]
reported the continuous deployment capability of 15 different
companies, and found that none of the 15 companies use a
completely automated deployment pipeline to deliver software
changes. Olsson et al. [33] in their work studied the adoption
challenges of a software company as they shifted from the use
of continuous integration to the use of continuous deployment.
The authors reported three challenges that the company faced
during the transition, including network configuration and
upgrade issues, issues related to their internal verification
loop, and lack of clarity of deployment process inside the
company.
C. Agile and Lean Usage
Lagerberg et al. [26] studied the impact of adopting agile
practices for two software development projects developed in
Ericsson. They found adoption of agile practices and
principles resulted in knowledge sharing and balanced use of
internal software documentation, correlated with increased
project visibility and possible increased productivity, and had
no correlation with pressure and stress. Azizyan et al. [1] in
their work discussed the sets of tools that are used in agile
project management by analyzing survey responses. The
authors also discussed the most and least desirable aspects of
the tools that are used in agile project management. Rodriguez
et al. [38] investigated the extent and impact of adopting agile
and lean principles in a Finnish software industry. They
identified the number of companies in the Finnish software
industry who are using agile and lean principles, their
motivations for using these principles, adoption challenges,
and how the adoption of these principles are affecting the
software organizations in terms of productivity and success.
D. Practice of Rapid Releases
Kerzazi and Khomh [24] examined the release data of a
software organization, and identified several types of factors
that facilitate rapid release cycles. They identified three
factors: technical factors, which includes code merging and
integration; organizational factors, which includes design and
management of branches; and interactional factors, which
includes coordination policies amongst teams. Paasivaara et al.
[34] described how a globally distributed development team at
Ericsson adopted the practice of rapid releasing to provide
applications and services that use an everything-as-a-service
platform.
E. Use of DevOps
Velasquez et al. [43] collected and analyzed survey
responses to identify the adoption trend, and impact of
DevOps as a culture. In their work they also identified a list of
DevOps practices such as use of version control systems, use
of automated testing, and monitoring system and application
health. In our study, we have identified DevOps and
continuous deployment as two different concepts and focused
on continuous deployment practices used in industry. We have
summarized these practices with definitions, provided a
mapping between these practices and the software companies
who are using them, and reported the techniques to implement
these practices.
III. RESEARCH METHODOLOGY
We describe the major steps of our research methodology in
this section. As shown in Figure 1, the first step of our research
methodology was to identify adoptees. The next step was to
search and identify the Internet artifacts required to understand
the adoptees’ continuous deployment practices. We used
Internet artifacts and follow-up inquiries to analyze software
practices used by adoptees. We describe how we perform
follow-up inquiries later in this section.
A. Identifying Adoptees:
We used the Google search engine to identify adoptees.
From the search results, we identified a software company as
an adoptee if the following criteria were satisfied:
a. The search result contains the keyword ‘continuous
deployment’ or ‘continuous delivery’
Here <adoptee name> represents that name of the adoptee.
C. Identifying Necessary Internet Artifacts
The next step is to determine if the collected artifacts contain
necessary information regarding continuous deployment
practices. This step is defined as ‘Identify Artifacts’ in Figure
1. From the search results we examined if the Internet artifact
of interest describes one or many practices for that adoptee.
D. Extract Information to Identify Practices:
The first step towards information extraction from Internet
Artifacts was identifying the continuous deployment practices
of Facebook. We used Feitelson et al.’s paper [10] to identify
Facebook’s continuous deployment practices because this
study is an academic literature that describes deployment and
development practices of Facebook as a software company,
and how these practices differ to that of traditional software
engineering practices. From the study we identified a set of 11
software practices namely, automated deployment, automated
testing, code review, dark launching, end-user communication,
feature flag, intercommunication, monitoring, repository use,
shepherding changes, and staging. We define each of these
practices as a continuous deployment practice. From our study
we found that Feitelson et al.’s paper was the most
comprehensive Internet artifact because using this paper we
were able to determine whether or not the 19 adoptees,
including Facebook, use each of the eleven continuous
deployment practices. The final step of information extraction
was to identify if an adoptee has used any one of the 11
continuous deployment practices.
b. The search result states any one or both of the following:
I.
the software company deploys software changes at
least once a day; and/or
II.
the software company uses any of the 11 continuous
deployment practices as part of their software
development process
We used the first criteria because some of the software
companies have interchangeably used the terms ‘continuous
deployment’ and ‘continuous delivery’ [41] to describe their
software development process. We used the second criteria
because deployment rate and use of continuous deployment
practices varies across software companies. We determined if
an adoptee used any one of these 11 practices by performing a
simple keyword search. The reader can find the 11 continuous
deployment practices in the next subsection.
B. Searching Internet Artifacts:
We used the Google search engine to search Internet artifacts
that describe the adoptees’ continuous deployment practices.
As adoptees have used the terms ‘continuous deployment’ and
‘continuous delivery’ interchangeably to describe their
software development process, we used types of two search
strings:
a. “continuous deployment at <adoptee name>”
b. “continuous delivery at <adoptee name>”
Fig. 1. Major Steps of Research Methodology
E. Follow-up Inquiries
In some cases after extracting information from Internet
artifacts, we were not able to identify whether an adoptee
performs any of the 11 continuous deployment practices. To
complete our investigation we used follow-up inquiries to
obtain more information. To perform follow-up inquiries we
first collected the author contacts of each Internet artifact.
Next, we queried each author using e-mail and social
networking websites. We ended this step when we were able to
determine if an adoptee uses a continuous deployment practice.
In some cases, our contacts did not respond to our inquiries and
thus, we were not able to determine if a certain continuous
deployment practice is used by an adoptee. For these cases, we
IV. RESULTS
In this section we present evidence that answers our
research question of interest:
How frequently are different software practices used by
software companies that perform continuous deployment?
A. Identifying Adoptees
In total we studied the software practices of 19 adoptees.
We present the names of the adoptees and the types of product
they deploy in Table I. The references used to study the
software practices is available online1. As shown in Table I,
Atlassian is the only adoptee that uses continuous deployment
to deploy software changes for desktop software as well as
websites. Rest of the 18 adoptees deploys websites using
continuous deployment. In Table I, each of the adoptee names
is followed by an acronym that we use to map each continuous
deployment practice to each of the 19 adoptees. For example,
we use FB as an acronym to refer to Facebook.
B. Common Continuous Deployment Practices
Using Internet artifacts and follow-up inquiries we were not
able to determine if all of the 19 adoptees use the 11
continuous deployment practices. As stated, for an adoptee if
we were unable to determine whether it uses a continuous
E-Commerce
Websites
Social
Networking
Websites
Review
Websites
Other Type of
Websites
Adoptee
Count
Atlassian (AT)
1
Coolblue (CB), Etsy (E),
Flipkart (FK), URLinkedUp (U),
Wealthfront (WF)
Facebook (FB), Flickr (FR),
Github (G), IMVU (I), Quora
(Q), Pinterest (P)
5
6
Yelp (Y)
1
Atlassian (AT), Google
Consumer Surveys (GCS),
Kitchensurfing (K), Netflix (N),
Outbrain (O), Rally Software
(RS), Spreaker (S)
7
deployment practice, then we mark that practice as unknown
for that adoptee. In Figure 2, we present three categories:
‘Yes’ refers to the adoptees who are using a certain a
continuous deployment practice, ‘No’ refers to the adoptees
who are not using a certain continuous deployment practice,
and ‘Unknown’ refers to the adoptees for which we were
unable to determine if they use a certain continuous
1
http://www.realsearchgroup.org/realsearch/agile-softwaredevelopment/references/
Commonality of Practices
Count of Adoptees (Unknown)
Count of Adoptees (No)
Count of Adoptees (Yes)
18
15
12
9
6
3
0
TABLE I: ADOPTEE PROFILE
Type of
Product
Deployed
Desktop
Software
deployment practice or not. We list the adoptees that are using
and not using a continuous deployment practice as ‘Adoptees
Using’, and ‘Adoptees Not Using’, respectively in the
subsections where we summarize each of the continuous
deployment practices. Figure 2 summarizes the use of
continuous deployment practices amongst adoptees.
Count of Practices
identified that particular continuous deployment practice as an
unknown practice for the corresponding adoptee.
Fig. 2. Commonality of Continuous Deployment Practices
C. Use of Internet Artifacts
In our study we studied 45 Internet artifacts in total that
included blog posts, video presentations, academic articles,
InfoQ presentations etc. to identify the continuous deployment
practices of 19 adoptees, as shown in Figure 3. 55.55% of
these Internet artifacts were blog posts.
D. Use of Follow-up Inquiries
Figure 4 presents how we used Internet artifacts and followup inquiries in tandem to analyze the continuous deployment
practices of the 19 adoptees. According to Figure 4, Internet
artifacts were the primary source of information.
Use of Internet Artifacts and Follow-up
Inquiries
25
20
15
10
5
0
Internet Artifacts
Follow-up Inquiries
18
Count of Practices
Count
Count of Different Internet Artifacts
Type of Internet Artifacts
15
12
9
6
3
0
Fig. 3. Types of Internet Artifacts Used in the Study
V. CONITNUOUS DEPLOYMENT PRACTICES
We use this section to describe each of the continuous
deployment practices with necessary details.
A. Automated Deployment
Automated deployment refers to the practice of making
software available to end-users automatically; this practice is
conducted in between software acquisition and software
execution without manual effort [19]. The practice of
automated deployment facilitates in rapid delivery of software
changes to end-users [19].
Adoptees have used a wide range of automated tools to
implement the practice of automated deployment including Bit
Torrent, automated scripts and Codeship. BitTorrent is a peerto-peer file sharing mechanism to download, upload and
distribute large files across servers [8]. Codeship2 is another
tool that facilitates continuous deployment by automating the
code deployment procedure from developer machines to
production servers. Table II presents the techniques that
adoptees have used to implement automated deployment,
along with the adoptees that are using them.
Adoptees Using (19): AT, CB, E, FB, FK, FR, G, GCS, I, K,
N, O, P, Q, RS, S, U, WF, Y
B. Automated Testing
Automated testing refers to the practice of automated
techniques to perform various testing activities, such as test
case management, test monitor and control, test data
generation, test case generation, and test case execution [23].
TABLE II: TECHNIQUES USED TO IMPLEMENT AUTOMATED DEPLOYMENT
Technique Used
BitTorrent
Codeship
Scripting
Other Tools
2
https://codeship.com/
Adoptee
FB, P
K
FK, GCS, I, RS
AT, CB, E, FR, G, N,
O, Q, S, U, WF, Y
Count
2
1
4
12
Fig. 4. Use of Internet Artifacts and Follow-up Inquiries in the Study. Internet
Artifacts were the Major Source of Information.
Similar to automated deployment, the practice of automated
testing facilitates in rapid delivery of software changes to endusers, along with early detection of software defects [19].
In this subsection, we briefly describe different aspects that
are related to the practice of automated testing of the adoptees.
First, we summarize the types of testing each adoptee is doing
as part of their continuous deployment practices. Unit testing
refers to testing of individual software components [22].
Integration testing refers to gradual testing amongst different
components of the software to test the functionality of the
complete software [22]. In alpha beta testing or A/B testing in
short, a specific version of the software is deployed to a
limited number of end-users to get feedback [22]. In
functional testing functional requirements of the software is
tested with a specific set of input, ignoring the internals of the
software [22]. Acceptance testing is used to test whether or not
the software fulfills the contractual requirements of the enduser [22]. Regression testing is performed to check if a
software change has adversely affected the functionality of the
whole software [22]. Perceptual testing is a testing mechanism
that automatically compares two different front-end designs of
a user interface3. Table III presents the adoptees and different
types of testing they are using.
A testing environment is defined as the facilities, hardware,
software, firmware, procedure and documentation used in
testing of software [23]. To perform automated testing
adoptees have used their own testing environments to execute
their tests automatically that are alternatively referred as
testing suites or testing servers by adoptees. Implementation
3
http://www.thoughtworks.com/insights/blog/perceptual-testing
of these testing environments varied amongst adoptees. For
example, Pinterest uses a Jenkins-based4 testing suite, IMVU
TABLE III: DIFFERENT TYPES OF TESTING USED BY ADOPTEES
Type of Testing
Unit Testing
Integration Testing
A/B Testing
Functional Testing
Acceptance Testing
Regression Testing
Perceptual Testing
Adoptee
AT, CB, E, FB, G,
GCS, I, N, O, P, Q,
RS, S, U, WF
AT, E, G, GCS, I, K,
N, O, P, Q, RS, W, Y
CB, E, FB, FR, GCS,
N, P, RS, S
CB, E, G, GCS, I, N,
RS, S
AT, N, Y, U, WF
E, CB, FB, WF, Y
GCS
Count
15
13
9
8
5
5
1
uses Buildbot5, and Facebook uses its own testing suites to
perform automated testing [10].
The team responsible for performing testing and
maintaining quality of software is defined as a testing team
[37]. Atlassian and Netflix use separate testing teams as well
as automated testing suites to implement continuous
deployment. The other 17 adoptees do not have a separate
testing team to perform continuous deployment.
Adoptees Using (19): AT, CB, E, FB, FK, FR, G, GCS, I,
K, N, O, P, Q, RS, S, U, WF, Y
C. Code Review
Code review is the practice that requires developers to
present software changes for comment and approval [22].
Benefits of performing code review on software changes
include defect detection, sharing of knowledge amongst
software team members, and discovering alternative solutions
[2].
To perform code review, developers use manual inspection
performed by other team members [22], as well as automated
software tools [2]. Adoptees use different techniques to
perform code review including automated software tools such
as, Gerrit [15], Github tools6,7, and Phabricator8. Static
analysis is the technique of evaluating a software component
based on its structure, organization, or content [22]. Coding
convention is a programming principle where developers have
to abide by a set of rules that are specific to a programming
language [37]. Table IV summarizes the techniques adoptees
have used to perform code review.
Adoptees Using (16): AT, CB, E, FB, G, GCS, I, K, N, P,
Q, RS, S, U, WF, Y
4
5
6
7
8
https://jenkins-ci.org/
http://buildbot.net/
https://github.com/blog/1872-improved-audit-log
https://help.github.com/articles/using-pull-requests/
http://phabricator.org/
TABLE IV: DIFFERENT TECHNIQUES USED TO IMPLEMENT CODE REVIEW
Technique Used
Coding Convention
Github Tools
Manual Inspection
Phabricator
Static Analysis
Other
Adoptee
CB
AT, E, G, I, P, RS, Y
AT, FB, G, Q, U, Y
FB, Q
CB
CB, GCS, KS, N, S,
U, WF
Count
1
7
6
2
1
7
D. Dark Launching
Dark launching is the practice of deploying software
changes by keeping the functional aspects of the software
changes hidden to end-users [18]. The motivation of using this
technique is to get early feedback on the quality and
performance of the software changes without letting the endusers know [18].
Implementation of dark launches varies amongst adoptees.
For example, Facebook uses a tool called Gatekeeper that
controls which software changes will go to which portion of
the end-users [10].
Adoptees Using (9): CB, E, FB, FR, GCS, N, P, WF, RS
Adoptees Not Using (2): I, S
E. End-User Communication
End-user is defined to be the individual who uses the
software [22]. We define the practice of end-user
communication as the practice of communicating with endusers in order to receive feedback and gather requirements
about the software of interest. Beck and Andres in their book
identified communication with end-users to be essential to
achieve successful results in software development [4].
Adoptees have used different techniques to communicate with
end-users including use of official forums, phone calls, web
seminars and social networking websites such as Twitter, and
Facebook.
Table V presents the techniques used by adoptees to realize
the practice of end-user communication.
TABLE V: TECHNIQUES USED TO IMPLEMENT END-USER COMMUNICATION
Technique Used
Official Forums
Phone Calls
Social Networking
Websites
Web Seminars
Adoptee
E, FB, GCS, I, N, P
WF
Count
6
1
G, S
2
RS
1
Adoptees Using (10): CB, E, FB, G, GCS, N, P, RS, S, WF
F. Feature Flag
Feature flag, also known as feature toggle or feature flipper
is a technique that facilitates in triggering a specific branch
amongst several branches of the software code [13]. If the
condition is satisfied then the corresponding branch of the
code will be executed. If a portion of the deployed software
changes is malfunctioning, then that portion can be switched
off [13]. Feature toggles help adoptees to avoid complex and
long-running feature branches in software repositories by
instead allowing features to be deployed before they are
completed (i.e., dark launch) and easily be turned on and off in
code [31].
To implement feature flags adoptees have used conditional
logic and configuration flags. For example, Rally Software
uses a conditional framework [31], whereas Etsy uses
configuration flags that switch on and off specific portions of
the software code [5].
Adoptees Using (13): CB, E, FB, FR, G, GCS, K, N, O, P,
RS, S, WF
G. Intercommunication
We define the practice of sharing all necessary development
and deployment information amongst software team members
as the practice of intercommunication. Sharing of
development and deployment information helps software
companies to achieve efficiency [32].
Our findings state that continuous deployment adoptees use
a wide range of tools, including Chatops, conversation bots,
and Gerrit. Gerrit is a web-based code review management
system that also enables communication between software
team members [15]. Conversation bots are automated tools
that facilitate instant messaging using a certain protocol such
as, Internet relay communication (IRC), instant messaging
(IM), and XMPP. These conversation bots include XMPP
bots, IRC bots, and IM bots. Chatops is a tool that execute
scripts and other tools based on the typed command [40].
Adoptees Using (14): CB, E, FB, FR, G, GCS, K, N, O, P,
RS, S, U, Y
H. Monitoring
Monitoring is the practice of collecting deployment related
information, producing appropriate performance metrics, and
reporting them in an appropriate format [22]. Monitoring is
also referred as telemetry [16]. In a continuous deployment
process, monitoring helps to identify the sources of errors in
development and deployment quickly [19]. Monitoring also
helps adoptees to get quick feedback on their deployment
strategies [19] and the adoption/use of new features.
A wide range of automated tools is available as commercial
and open source products, such as Graphite, Nagios, Splunk
etc. [19, 42]. For example, IMVU uses a modified version of a
real-time graphing software called Graphite9.
Adoptees Using (16): CB, E, FB, FK, FR, G, GCS, I, K, N,
O, P, RS, S, WF, Y
I. Repository Use
A software repository is termed as a software library that
contains all the necessary software artifacts [22]. A collection
of software artifacts that are derived from the software
repository and is continuously changed is called a branch [22].
A branch corresponds to a specific software file version and is
subject to deployment [22]. Trunk is defined as the main line
of development of the software that is used to create branches
[22]. We define the technique of pushing software changes
9
http://graphite.wikidot.com/
using trunk as trunk shipment. Another way of pushing
software changes to production is to create separate branches
from the trunk, perform necessary changes and tests on that
branch, and deploy that branch to end-users. We define this
practice as branch shipment. We collectively define the
practice of trunk shipment and branch shipment as the practice
of repository use. The practice of repository use facilitates
better management and easier backup of software artifacts
[19].
We note that adoptees have used Git and SVN to implement
the practice of repository use. Table VI presents the adoptees
that are using the techniques of branch shipment and trunk
shipment to implement repository use. This finding is in
congruence with Humble et al.’s [20] recommendation to
maintain one single, stable trunk and ship that trunk to
production servers.
Adoptees Using (19): AT, CB, E, FB, FK, FR, G, GCS, I,
KS, N, O, P, Q, RS, S, U, WF, Y
J. Shepherding Changes
We define shepherding changes as the practice of
developers making software changes and being responsible for
those software changes throughout the whole deployment
process. The main motto of shepherding changes is getting
involved in all the steps of the continuous deployment which
includes writing software changes, running different tests on
the software, deploying software changes into production, and
fixing problems that arise after deployment. Use of this
practice enhances developer responsibility and ensures
delivering quality software changes to end-users without
requiring a dedicated quality assurance team [10].
To implement the practice of shepherding changes adoptees
use different techniques. For example, Facebook arranges boot
camps for incoming developers so that they get habituated to
Facebook’s deployment and development practices [10]. Etsy,
Github, IMVU, Netflix, and Wealthfront use an on call policy
that requires software team members to fix any deployment
problem for which they are responsible at the earliest possible
time.
Adoptees Using (14): AT, CB, E, FB, FR, G, GCS, I, K, N,
RS, S, WF, Y
Adoptees Not Using (2): P, Q
TABLE VI: TECHNIQUES USED TO IMPLEMENT REPOSITORY USE
Technique Used
Branch Shipment
Trunk Shipment
Unknown
Adoptee
AT, N, Y
CB, E, FB, FR, G,
GCS, KS, O, P, Q, RS,
S, U, WF
FK, I
Count
3
14
2
K. Staging
We define the practice of staging as the practice of
executing a specific set of techniques by the adoptee after
software changes are written, tested, and before software
changes are deployed to end-users. We identify two
techniques namely dogfooding, and gradual rollout. The
benefit of using the practice of staging is to get early feedback
on the software changes that are subject to deployment [19].
Dogfooding is the technique when a software team uses its
own software as part of their software development process
[17]. One method to implement dogfooding is to use
production servers that are accessible to the software team
only and deploy software changes. Members of the software
team will test out the software changes as an end-user. To
perform dogfooding, Facebook makes the software changes
available in their internal production servers using an internal
web link10.
Gradual rollout is the step-by-step process of deploying
software changes to fractions of end-users [19]. For example,
Facebook deploys software changes that are available in the
internal production servers. If no error occurs then software
changes are delivered to 1% of its end-users. If no further
problem arises then the software changes are made available
to all of Facebook’s users [10].
Table VII presents the adoptees and the techniques they
have used to implement staging.
Adoptees Using (17): AT, CB, E, FB, FR, G, GCS, I, K, N,
O, P, RS, S, U, WF, Y
VI. DISCUSSION
A. Common Continuous Deployment Practices
According to our findings, all 19 adoptees use the practices
of automated deployment, automated testing, and repository
use. This finding re-instates the necessity of applying these
three practices mentioned above to implement continuous
deployment. From our findings we also observe that as a
software process continuous deployment necessitates the
consistent use of sound software practices such as automated
deployment, automated testing, code review, monitoring, and
repository use that are strongly recommended by software
practitioners.
B. Automated Testing
Swartout [42] along with Humble and Farley [19] described
the importance of automated testing suites in a continuous
deployment pipeline. All of the 19 adoptees use automated
testing as a part of their development process. We observed
that the implementation of automated testing suites, and types
of testing used in development, varied from one adoptee to
another.
Adoptees have used different types of testing as part of their
deployment process such as unit testing, integration testing,
functional testing, and A/B testing. Google Consumer Surveys
uses an emerging type of testing called perceptual testing.
According to a practitioner from Google Consumer Surveys,
errors related to perceptual testing can lead to customer
dissatisfaction and detecting these types of errors are nontrivial as they are often missed by the human eye, the
automated tests, and monitoring graphs11. Perceptual testing
10
11
http://www.infoq.com/presentations/Facebook-Release-Process
https://www.youtube.com/watch?v=1wHr-O6gEfc
can detect these errors automatically and release the burden of
the software team9.
TABLE VII: TECHNIQUES ADOPTEES HAVE USED TO IMPLEMENT STAGING
Technique Used
Dogfooding
Gradual Rollout
Adoptee
AT, CB, E, FB, FR, G,
GCS, I, N, P, RS, WF
AT, CB, E, FB, FR, G,
GCS, I, K, N, O, P,
RS, S, U, WF, Y
Count
12
17
Google Consumer Surveys performs perceptual testing as
following: first they take snapshots of two versions of a web
page, then they pair them by url path and finally they calculate
the visual differences in pixels. To execute these steps they
use PhantomJS12.
Adoptee experience related to automated testing is also
worth mentioning. For example, some adoptees have
emphasized on the importance of speedy testing [11, 31].
Neely and Stolt stated that developers prefer fast running tests,
and they recommended to minimize long running tests by
breaking them up, and parallelizing them [31]. Kitchensurfing
runs their test suite in more or less than 15 minutes [25].
IMVU uses 30-40 machines to run all their tests and each of
their test run takes approximately nine minutes [11].
Some of the adoptees has also considered test coverage, the
measure to which a single test or a set of tests satisfy all
specified requirements for software components, to be an
important aspect in the practice of automated testing [22]. For
example, IMVU considers test coverage to be an important
criterion to implement continuous deployment. IMVU
emphasizes on ‘reliable testing’ which means ‘that tests must
not fail more often than once in a million test runs’ [11].
According to Neely and Stolt, test suites that have good
coverage help new members of the team to adopt continuous
deployment quickly and deploy their own software changes
with confidence [31].
C. Code Review
According to our findings, code review is widely used
practice amongst adoptees. However, the motivation of using
code review as a practice remains unknown for most of the
adoptees. Facebook is one of the few adoptees that have
described the reasons for using code review. Facebook uses
the practice of code review to facilitate ‘high quality code’,
‘find defects’, ‘suggest alternatives’, and ‘spreading general
knowledge about coding practices’ [10]. Mary and Tom
Poppendieck discouraged the use of code review for ‘finding
defects’ and recommended to use this practice for other uses
such as ensuring simplicity in written software, complexity
analysis, and ensuring absence of repetition [36].
D. End-User Communication
According to our study, the number of adoptees using this
practice is 10. We were unable to identify if the other ten
adoptees have used this practice as a part of their deployment.
12
http://phantomjs.org/
E. Intercommunication
According to our study, adoptees are more relying on
automated tools to share necessary development and
deployment information amongst team members. We identify
this finding as a major shift from the traditional approach
where software teams have relied on team meetings, scrum
meetings etc. [6].
F. Shepherding Changes
Our findings state that 14 of the 19 adoptees use the practice
of shepherding changes. The practice of shepherding software
changes takes a different stance than traditional software
engineering where developers are only responsible to write
and test their software changes and another team is responsible
for deploying those software changes to production [37]. This
finding also implies that developers are getting more involved
in operations, supporting the basic principle of DevOps that
encourages co-ordination among team members of the
development team and the operations team [42].
VII. LIMITATIONS
A. Identifying Adoptees
We used two criteria to identify the 19 adoptees that we
used in our study. These two criteria may generate false
positives and false negatives.
B. Identifying Internet Artifacts
We relied on two search strings to search and identify
Internet artifacts. We used a keyword-based approach to
identify continuous deployment practices and in the process
we might have missed Internet artifacts that describe the
practices of more adoptees.
C. Extracting Information from Internet Artifacts
We did not use any automated tool or technique to extract
information from the Internet artifacts and our methodology
required manual book keeping. We leave the scope of
applying any automated technique to extract information from
Internet artifacts as future work.
In many cases, the Internet artifacts used provided
challenges. For example, software practitioners write blog
posts informally and extracting necessary information about
practices became challenging. To overcome this limitation of
Internet artifacts we used follow-up inquiries.
D. Identified Continuous Deployment Practices
We used Feitelson et al.’s [10] paper to identify the set of
continuous deployment practices. We cannot claim that this
set is complete. We have observed that none of the other 18
software companies prevalently used software practices that
are not included in the set of 11 continuous deployment
practices.
E. Importance of the Identified Continuous Deployment
Practices in Continuous Deployment
We were unable to determine why the 11 continuous
deployment practices are important in continuous deployment
due to lack of empirical evidence. Understanding how these
11 practices help adoptees to achieve continuous deployment
successfully can be beneficial to software engineering
practitioners and we leave this topic as future work.
F. Follow-up Inquiries
The limitation of using follow-up inquiries is we might not
find the contact of interest or the contact of interest might not
reply. This is a limitation of our methodology and as a result
we were unable to determine if some adoptees have used some
of the continuous deployment practices. The combination of
Internet artifacts and follow-up inquiries was not enough to
discover the use of all continuous deployment practices by the
19 adoptees along with the techniques to implement them.
VIII. CONCLUSION
Systematic analysis of software practices used in continuous
deployment can not only help software practitioners to
understand continuous deployment as a software process but
also facilitate them in adopting continuous deployment. This
paper summarizes the software practices used in industry to
implement continuous deployment, and the adoptees that are
using these practices. Instead of walking the painful path of
searching and learning from Internet artifacts, software
practitioners can use this paper to learn the industry practices
used in continuous deployment. We observe that all the 19
software companies use automated testing and automated
deployment, the two pre-requisite software practices for
continuous deployment. In our paper, we also have observed
that continuous deployment necessitates the consistent use of
sound software engineering practices, such as automated
deployment, automated testing, and code review. Future
research in continuous deployment might identify the
appropriate reasoning that will explain this observation. We
also identify the scope of future research that will provide
guidelines on how software companies can use the identified
11 software practices to implement continuous deployment
effectively.
ACKNOWLEDGMENT
We thank all the software practitioners who responded to
our questions and provided us with valuable information
related to their company’s continuous deployment practices.
We also thank the Realsearch research group for providing
helpful feedback on this paper.
REFERENCES
[1]
[2]
[3]
[4]
G. Azizyan, M. K. Magarian, and M. Kajko-Mattson, “Survey of Agile
Tool Usage and Needs,” in Proceedngs of the Agile Conference, 2014
A. Bacchelli, and C. Bird, “Expectations, oucomes, and challenges of
modern code review,” in Proceedngs of the International Conference on
Software Engineering, 2013
K. Beck, M.Beedle, A. Bennekum, A. Cockburn, W.Cunningham, M.
Fowler, J. Grenning, J.Highsmith, A. Hunt, R. Jeffries, J. Kern, B.
Marick, R. C. Martin, S. Mellor, K. Schwaber, J. Sutherland, and D.
Thomas (2001, February 13). The agile manifesto [Online]. Avaialable:
http://agilemanifesto.org/
K. Beck, and C. Andres, “Extreme Proramming Explained: Embrace
Change,” 2nd Ed. Addison-Wesley, 2004
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
[23]
[24]
[25]
[26]
[27]
M. Brittain (2013, January 29). Continuous Deployment: The Dirty
Details[Online].Available:http://www.slideshare.net/mikebrittain/mbritta
in-continuous-deploymentalm3public?related=1
T. Chau, and F. Maurer, “Knowledge Sharing in Agile Software
Teams,” in Logic versus Approximation, vol. 3075, pp. 173-183,
January, 2004
G. G. Claps, R. B. Svensson, and A. Aurum, “On the journey to
continuous deployment: Technical and social challenges along the way,”
in Information and Software Technology, vol. 57, pp. 21-31, January,
2015
B. Cohen, “Incentives build robustness in BitTorrent,” in Workshop on
Economics of Peer-to-Peer systems, vol. 6, 2003
DevOpsGuys (2013, March 13). Continuous Delivery Adoption Barriers
|
DevOpsGuys
[Online].
Available:
http://blog.devopsguys.com/2013/03/13/continuous-delivery-adoptionbarriers/
D. G. Feitelson, E. Frachtenburg, and K. L.Beck, “Development and
Deployment at Facebook,” in IEEE Internet Computing, vol. 17, pp. 817, July –August, 2013
T. Fitz (February 10, 2009). Continuous Deployment at IMVU: doing
the impossible fifty times a day [Online]. Available:
http://timothyfitz.com/2009/02/10/continuous-deployment-at-imvudoing-the-impossible-fifty-times-a-day/
M. Fowler (2013, May 30), Continuous Delivery [Online]. Available:
http://martinfowler.com/bliki/ContinuousDelivery.html
M. Fowler (2010, October 29), Feature Toggle [Online]. Available:
http://martinfowler.com/bliki/FeatureToggle.html
Gartner (October 08, 2014). Gartner Identifies the Top 10 Strategic
Technology
Trends
for
2015
[Online].
Available:
http://www.gartner.com/newsroom/id/2867917
Google Project Hosting (2015, March 27). Gerrit - Gerrit Code Review
–
Google
Project
Hosting
[Online].
Available:
https://code.google.com/p/gerrit/
K. C. Gross, A. Urmanov, L. G. Votta, S. McMaster, and A. Porter,
"Towards Dependability in Everyday Software Using Software
Telemetry," in Proceedings of the Third IEEE International Workshop
on Engineering of Autonomic and Autonomous Systems, 2006
W. Harrison, “Eating Your Own Dog Food,” in IEEE Software, vol. 23,
pp. 5-7, May-June, 2006
J. Humble (2012, Februrary 16). Principle 2: Decouple Deployment and
Release[Online].Available:http://www.informit.com/articles/article.aspx
?p=1833567&seqNum=2
J. Humble, and D. Farley, “Continuous Delivery,” 1st Ed. AddisonWesley, 2011
J. Humble, J. Molesky, and B. O’ Reilly, “Lean Enterprise,” 1st Ed. O’
Reilly Media Inc., 2015
J. Humble, C. Read, and D. North, “The Deployment Production Line,”
in Proceedngs of the Agile Conference, 2006
IEEE Standards Association (2010, December 15). IEEE SA – 24765 –
2010 – Systems and software engineering – vocabulary [Online].
Available: https://standards.ieee.org/findstds/standard/24765-2010.html
ISO/IEC/IEEE (2013, September 01). ISO/IEC/IEEE 29119-1:2013
Software and systems engineering -- Software testing - Part 1: Concepts
and
definitions
[Online].
Available:
http://www.iso.org/iso/catalogue_detail.htm?csnumber=45142
N. Kerzazi, and F. Khomh, “Factors Impacting Rapid Releases: An
Industrial Case Study,” in Proceedngs of the ACM/IEEE International
Symposium on Empirical Software Engineering and Measurement, 2014
L. Kluge (2013, July 17). Continuous Deployment at Kitchensurfing
[Online]. Available: http://www.slideshare.net/LarsKluge/1-24352219
L. Lagerberg, T. Skude, P. Emanuelsson, and D. Stahl, “The impact of
principles and practices on large-scale software development projects –
A multiple-case study of two projects at Ericsson,” in Proceedngs of the
ACM/IEEE International Symposium on Empirical Software
Engineering and Measurement, 2013
M. Leppanen, S. Makinen, M. Pagels, V. Eloranta, J. Itkonen, M.
Mantyla, V. Mika, and T. Mannisto, “The Highways and Country Roads
[28]
[29]
[30]
[31]
[32]
[33]
[34]
[35]
[36]
[37]
[38]
[39]
[40]
[41]
[42]
[43]
to Continuous Deployment,” in IEEE Software, vol. 32, pp. 64-72,
March-April, 2015
E. Murphy-Hill, "The Future of Social Learning in Software
Engineering", in Computer, vol.47, pp. 48-54, January, 2014
G. A. Moore, “Crossing the Chasm: Marketing and Selling Technology
Products to Mainstream Customers,” Revised Ed. Collins Business
Essentials, 2002.
S. Narayanan (2013, Novermber 18). The Netflix Tech Blog: Prepapring
the
Netflix
API
for
Deployment
[Online].
Available:
http://techblog.netflix.com/2013/11/preparing-netflix-api-fordeployment.html
S. Neely, and S. Stolt, “Continuous Delivery ? Easy ! Just Change
Everything (well, maybe it is not that easy),” in Proceedngs of the Agile
Conference, 2013
M. Olofsson, “Managing knowledge sharing in software development
organizations,” M. S. thesis, Linkopping University, Linköping,
Sweden, 2012.
H. H. Olsson, H. Alahyari, and J. Bosch, “Climbing the ‘Stairway to
Heaven’ – A multiple-case study exploring barriers in the transition from
agile development towrds continuous deployment of software,” in
Proceedngs of the Euromicro Conference on Software Engineering and
Advanced Applications, 2013
M. Paasivaara, B. Behm, C. Lassenius, and M. Hallikainen, “Towards
Rapid Releases in Large-Scale XaaS Development at Ericsson,” in
Proceedngs of the International Conference on Global Software
Engineering, 2014
C. Passos, D. S. Cruzes, A. Hayne, and M. Mendonca,
“Recommendations to the Adoption of new Software Practices-A Case
Study of Team Intention and Behavior in Three Software Companies,”
in Proceedngs of the ACM/IEEE International Symposium on Empirical
Software Engineering and Measurement, 2013
M. Poppendieck, and T. Poppendieck, “Implementing Lean Software
Development – From Concept To Cash,” 1st Ed. Addison-Wesley, 2007
R. S. Pressman, “Software Engineering – A Practitioner’s Approach,”
2nd Ed. McGrawHill, 2010
P. Rodriguez, J. Markkula, M. Oivvo, and K. Turula, “Survey on Agile
and Lean Usage in Finnish Software Industry,” in Proceedngs of the
ACM/IEEE International Symposium on Empirical Software
Engineering and Measurement, 2012
R. Sanheim (September 18, 2014). Continuous Delivery at Github
[Online]. Available: https://speakerdeck.com/rsanheim/continuousdelivery-at-github
E. Sigler (2014, December 02). What is ChatOps ? And How Do I Get
Started ? [Online]. Available: http://www.pagerduty.com/blog/what-ischatops/
S. Smith (April 17, 2014). Practical continuous deployment
[Online].Available:
http://blogs.atlassian.com/2014/04/practicalcontinuous-deployment/
P. Swartout, “Continuous Delivery and DevOps: A Quickstart Guide,”
1st Ed. Packt Publishing, 2012
N. F. Velasquez, G. Kim, N. Kersten, and J. Humble, “2014 State of
DevOps Report,” https://puppetlabs.com/sites/default/files/2014-stateof-devops-report.pdf, 2014.